mirror of
https://github.com/grassrootseconomics/cic-chain-events.git
synced 2024-11-22 15:56:45 +01:00
feat: init base logic for rpc fetcher
This commit is contained in:
parent
c138c95583
commit
de8eb31aba
1
go.mod
1
go.mod
@ -7,6 +7,7 @@ require (
|
||||
github.com/alitto/pond v1.8.2
|
||||
github.com/celo-org/celo-blockchain v1.6.1
|
||||
github.com/goccy/go-json v0.10.0
|
||||
github.com/grassrootseconomics/cic-celo-sdk v0.3.1
|
||||
github.com/grassrootseconomics/w3-celo-patch v0.1.0
|
||||
github.com/jackc/pgx/v5 v5.2.0
|
||||
github.com/knadh/goyesql/v2 v2.2.0
|
||||
|
2
go.sum
2
go.sum
@ -248,6 +248,8 @@ github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB7
|
||||
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc=
|
||||
github.com/grassrootseconomics/cic-celo-sdk v0.3.1 h1:SzmMFrqxSIdgePqwbUdoS3PNP82MFnlOecycVk2ZYWg=
|
||||
github.com/grassrootseconomics/cic-celo-sdk v0.3.1/go.mod h1:EiR6d03GYu6jlVKNL1MbTAw/bqAW2WP3J/lkrZxPMdU=
|
||||
github.com/grassrootseconomics/w3-celo-patch v0.1.0 h1:0fev2hYkGEyFX2D4oUG8yy4jXhtHv7qUtLLboXL5ycw=
|
||||
github.com/grassrootseconomics/w3-celo-patch v0.1.0/go.mod h1:JtkXc+yDUiQQJdhYTqddZI/itdYGHY7H8PNZzBo4hCk=
|
||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
||||
|
64
pkg/fetch/rpc.go
Normal file
64
pkg/fetch/rpc.go
Normal file
@ -0,0 +1,64 @@
|
||||
package fetch
|
||||
|
||||
import (
|
||||
"context"
|
||||
"math/big"
|
||||
|
||||
"github.com/celo-org/celo-blockchain/core/types"
|
||||
celo "github.com/grassrootseconomics/cic-celo-sdk"
|
||||
"github.com/grassrootseconomics/w3-celo-patch/module/eth"
|
||||
"github.com/grassrootseconomics/w3-celo-patch/w3types"
|
||||
)
|
||||
|
||||
type RPCOpts struct {
|
||||
RPCProvider *celo.Provider
|
||||
}
|
||||
|
||||
type RPC struct {
|
||||
provider *celo.Provider
|
||||
}
|
||||
|
||||
func NewRPCFetcher(o RPCOpts) Fetch {
|
||||
return &RPC{
|
||||
provider: o.RPCProvider,
|
||||
}
|
||||
}
|
||||
|
||||
// This method makes 2 calls. 1 for the block and 1 batched call for txs + receipts.
|
||||
// Should work on free tier RPC services.
|
||||
func (f *RPC) Block(ctx context.Context, blockNumber uint64) (FetchResponse, error) {
|
||||
var (
|
||||
block types.Block
|
||||
|
||||
fetchResponse FetchResponse
|
||||
)
|
||||
|
||||
if err := f.provider.Client.CallCtx(
|
||||
ctx,
|
||||
eth.BlockByNumber(big.NewInt(int64(blockNumber))).Returns(&block),
|
||||
); err != nil {
|
||||
return FetchResponse{}, nil
|
||||
}
|
||||
|
||||
txCount := len(block.Transactions())
|
||||
batchCalls := make([]w3types.Caller, txCount*2)
|
||||
|
||||
txs := make([]types.Transaction, txCount)
|
||||
txsReceipt := make([]types.Receipt, txCount)
|
||||
|
||||
for i, tx := range block.Transactions() {
|
||||
batchCalls[i] = eth.Tx(tx.Hash()).Returns(&txs[i])
|
||||
batchCalls[txCount+i] = eth.TxReceipt(tx.Hash()).Returns(&txsReceipt[i])
|
||||
}
|
||||
|
||||
if err := f.provider.Client.CallCtx(
|
||||
ctx,
|
||||
batchCalls...,
|
||||
); err != nil {
|
||||
return FetchResponse{}, nil
|
||||
}
|
||||
|
||||
// TODO: Create FetchResponse
|
||||
|
||||
return fetchResponse, nil
|
||||
}
|
Loading…
Reference in New Issue
Block a user