special: backport old celo geth to latest eth-tracker codebase

This commit is contained in:
2024-11-20 10:20:20 +03:00
parent 0b5af2f938
commit 911f11eb38
25 changed files with 268 additions and 423 deletions

View File

@@ -1,121 +0,0 @@
package chain
// import (
// "context"
// "math/big"
// "net/http"
// "time"
// "github.com/ethereum/go-ethereum/common"
// "github.com/ethereum/go-ethereum/core/types"
// "github.com/ethereum/go-ethereum/rpc"
// "github.com/grassrootseconomics/ethutils"
// "github.com/lmittmann/w3"
// "github.com/lmittmann/w3/module/eth"
// "github.com/lmittmann/w3/w3types"
// )
// type (
// CeloRPCOpts struct {
// RPCEndpoint string
// ChainID int64
// }
// CeloRPC struct {
// provider *ethutils.Provider
// }
// )
// func NewRPCFetcher(o CeloRPCOpts) (Chain, error) {
// customRPCClient, err := lowTimeoutRPCClient(o.RPCEndpoint)
// if err != nil {
// return nil, err
// }
// chainProvider := ethutils.NewProvider(
// o.RPCEndpoint,
// o.ChainID,
// ethutils.WithClient(customRPCClient),
// )
// return &CeloRPC{
// provider: chainProvider,
// }, nil
// }
// func lowTimeoutRPCClient(rpcEndpoint string) (*w3.Client, error) {
// httpClient := &http.Client{
// Timeout: 10 * time.Second,
// }
// rpcClient, err := rpc.DialHTTPWithClient(
// rpcEndpoint,
// httpClient,
// )
// if err != nil {
// return nil, err
// }
// return w3.NewClient(rpcClient), nil
// }
// func (c *CeloRPC) GetBlocks(ctx context.Context, blockNumbers []uint64) ([]types.Block, error) {
// blocksCount := len(blockNumbers)
// calls := make([]w3types.RPCCaller, blocksCount)
// blocks := make([]types.Block, blocksCount)
// for i, v := range blockNumbers {
// calls[i] = eth.BlockByNumber(new(big.Int).SetUint64(v)).Returns(&blocks[i])
// }
// if err := c.provider.Client.CallCtx(ctx, calls...); err != nil {
// return nil, err
// }
// return blocks, nil
// }
// func (c *CeloRPC) GetBlock(ctx context.Context, blockNumber uint64) (*types.Block, error) {
// var block types.Block
// blockCall := eth.BlockByNumber(new(big.Int).SetUint64(blockNumber)).Returns(&block)
// if err := c.provider.Client.CallCtx(ctx, blockCall); err != nil {
// return nil, err
// }
// return &block, nil
// }
// func (c *CeloRPC) GetLatestBlock(ctx context.Context) (uint64, error) {
// var latestBlock big.Int
// latestBlockCall := eth.BlockNumber().Returns(&latestBlock)
// if err := c.provider.Client.CallCtx(ctx, latestBlockCall); err != nil {
// return 0, err
// }
// return latestBlock.Uint64(), nil
// }
// func (c *CeloRPC) GetTransaction(ctx context.Context, txHash common.Hash) (*types.Transaction, error) {
// var transaction types.Transaction
// if err := c.provider.Client.CallCtx(ctx, eth.Tx(txHash).Returns(&transaction)); err != nil {
// return nil, err
// }
// return &transaction, nil
// }
// func (c *CeloRPC) GetReceipts(ctx context.Context, blockNumber *big.Int) (types.Receipts, error) {
// var receipts types.Receipts
// if err := c.provider.Client.CallCtx(ctx, eth.BlockReceipts(blockNumber).Returns(&receipts)); err != nil {
// return nil, err
// }
// return receipts, nil
// }
// func (c *CeloRPC) Provider() *ethutils.Provider {
// return c.provider
// }

View File

@@ -1,98 +0,0 @@
package chain
// import (
// "context"
// "testing"
// "time"
// "github.com/stretchr/testify/require"
// )
// const (
// testRPCEndpoint = "https://celo.archive.grassecon.net"
// testChainID = 42220
// )
// func setupCeloRPC() (Chain, error) {
// opts := CeloRPCOpts{
// RPCEndpoint: testRPCEndpoint,
// ChainID: testChainID,
// }
// return NewRPCFetcher(opts)
// }
// func TestRPC_GetBlocks(t *testing.T) {
// rpcFetcher, err := setupCeloRPC()
// require.NoError(t, err)
// blockNumbers := []uint64{
// 19_600_000,
// 23_000_000,
// 27_000_000,
// }
// ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
// defer cancel()
// blocks, err := rpcFetcher.GetBlocks(ctx, blockNumbers)
// require.NoError(t, err)
// t.Logf("blocks %+v\n", blocks)
// }
// func TestRPC_GetBlock(t *testing.T) {
// rpcFetcher, err := setupCeloRPC()
// require.NoError(t, err)
// var blockNumber uint64 = 19_900_000
// ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
// defer cancel()
// block, err := rpcFetcher.GetBlock(ctx, blockNumber)
// require.NoError(t, err)
// t.Logf("block %+v\n", block)
// }
// func TestRPC_GetLatestBlock(t *testing.T) {
// rpcFetcher, err := setupCeloRPC()
// require.NoError(t, err)
// ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
// defer cancel()
// block, err := rpcFetcher.GetLatestBlock(ctx)
// require.NoError(t, err)
// t.Logf("block %+v\n", block)
// }
// func TestRPC_GetTransaction(t *testing.T) {
// rpcFetcher, err := setupCeloRPC()
// require.NoError(t, err)
// var blockNumber uint64 = 19_900_000
// ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
// defer cancel()
// block, err := rpcFetcher.GetBlock(ctx, blockNumber)
// require.NoError(t, err)
// require.NotNil(t, block)
// transaction, err := rpcFetcher.GetTransaction(ctx, block.Transactions()[0].Hash())
// require.NoError(t, err)
// t.Logf("transaction %+v\n", transaction)
// }
// func TestRPC_GetReceipts(t *testing.T) {
// rpcFetcher, err := setupCeloRPC()
// require.NoError(t, err)
// var blockNumber uint64 = 19_900_000
// ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
// defer cancel()
// block, err := rpcFetcher.GetBlock(ctx, blockNumber)
// require.NoError(t, err)
// require.NotNil(t, block)
// receipts, err := rpcFetcher.GetReceipts(ctx, block.Number())
// require.NoError(t, err)
// t.Logf("receipts %+v\n", receipts)
// }

View File

@@ -4,17 +4,17 @@ import (
"context"
"math/big"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/grassrootseconomics/ethutils"
"github.com/celo-org/celo-blockchain/common"
"github.com/celo-org/celo-blockchain/core/types"
"github.com/grassrootseconomics/celoutils/v3"
)
type Chain interface {
GetBlocks(context.Context, []uint64) ([]*types.Block, error)
GetBlocks(context.Context, []uint64) ([]types.Block, error)
GetBlock(context.Context, uint64) (*types.Block, error)
GetLatestBlock(context.Context) (uint64, error)
GetTransaction(context.Context, common.Hash) (*types.Transaction, error)
GetReceipts(context.Context, *big.Int) (types.Receipts, error)
// Expose provider until we eject from celoutils
Provider() *ethutils.Provider
Provider() *celoutils.Provider
}

View File

@@ -6,13 +6,13 @@ import (
"net/http"
"time"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/rpc"
"github.com/grassrootseconomics/ethutils"
"github.com/lmittmann/w3"
"github.com/lmittmann/w3/module/eth"
"github.com/lmittmann/w3/w3types"
"github.com/celo-org/celo-blockchain/common"
"github.com/celo-org/celo-blockchain/core/types"
"github.com/celo-org/celo-blockchain/rpc"
"github.com/grassrootseconomics/celoutils/v3"
"github.com/grassrootseconomics/w3-celo"
"github.com/grassrootseconomics/w3-celo/module/eth"
"github.com/grassrootseconomics/w3-celo/w3types"
)
type (
@@ -22,7 +22,7 @@ type (
}
EthRPC struct {
provider *ethutils.Provider
provider *celoutils.Provider
}
)
@@ -32,10 +32,10 @@ func NewRPCFetcher(o EthRPCOpts) (Chain, error) {
return nil, err
}
chainProvider := ethutils.NewProvider(
chainProvider := celoutils.NewProvider(
o.RPCEndpoint,
o.ChainID,
ethutils.WithClient(customRPCClient),
celoutils.WithClient(customRPCClient),
)
return &EthRPC{
@@ -48,7 +48,10 @@ func lowTimeoutRPCClient(rpcEndpoint string) (*w3.Client, error) {
Timeout: 10 * time.Second,
}
rpcClient, err := rpc.DialOptions(context.Background(), rpcEndpoint, rpc.WithHTTPClient(httpClient))
rpcClient, err := rpc.DialHTTPWithClient(
rpcEndpoint,
httpClient,
)
if err != nil {
return nil, err
}
@@ -56,10 +59,10 @@ func lowTimeoutRPCClient(rpcEndpoint string) (*w3.Client, error) {
return w3.NewClient(rpcClient), nil
}
func (c *EthRPC) GetBlocks(ctx context.Context, blockNumbers []uint64) ([]*types.Block, error) {
func (c *EthRPC) GetBlocks(ctx context.Context, blockNumbers []uint64) ([]types.Block, error) {
blocksCount := len(blockNumbers)
calls := make([]w3types.RPCCaller, blocksCount)
blocks := make([]*types.Block, blocksCount)
blocks := make([]types.Block, blocksCount)
for i, v := range blockNumbers {
calls[i] = eth.BlockByNumber(new(big.Int).SetUint64(v)).Returns(&blocks[i])
@@ -73,18 +76,18 @@ func (c *EthRPC) GetBlocks(ctx context.Context, blockNumbers []uint64) ([]*types
}
func (c *EthRPC) GetBlock(ctx context.Context, blockNumber uint64) (*types.Block, error) {
var block *types.Block
var block types.Block
blockCall := eth.BlockByNumber(new(big.Int).SetUint64(blockNumber)).Returns(&block)
if err := c.provider.Client.CallCtx(ctx, blockCall); err != nil {
return nil, err
}
return block, nil
return &block, nil
}
func (c *EthRPC) GetLatestBlock(ctx context.Context) (uint64, error) {
var latestBlock *big.Int
var latestBlock big.Int
latestBlockCall := eth.BlockNumber().Returns(&latestBlock)
if err := c.provider.Client.CallCtx(ctx, latestBlockCall); err != nil {
@@ -95,12 +98,12 @@ func (c *EthRPC) GetLatestBlock(ctx context.Context) (uint64, error) {
}
func (c *EthRPC) GetTransaction(ctx context.Context, txHash common.Hash) (*types.Transaction, error) {
var transaction *types.Transaction
var transaction types.Transaction
if err := c.provider.Client.CallCtx(ctx, eth.Tx(txHash).Returns(&transaction)); err != nil {
return nil, err
}
return transaction, nil
return &transaction, nil
}
func (c *EthRPC) GetReceipts(ctx context.Context, blockNumber *big.Int) (types.Receipts, error) {
@@ -113,6 +116,6 @@ func (c *EthRPC) GetReceipts(ctx context.Context, blockNumber *big.Int) (types.R
return receipts, nil
}
func (c *EthRPC) Provider() *ethutils.Provider {
func (c *EthRPC) Provider() *celoutils.Provider {
return c.provider
}