Files
evm/eth/api_backend_wrapper.go

106 lines
4.3 KiB
Go

package eth
import (
"context"
"math/big"
"github.com/luxfi/evm/core/state"
"github.com/luxfi/evm/core/types"
"github.com/luxfi/evm/rpc"
"github.com/luxfi/geth/common"
gethrpc "github.com/luxfi/geth/rpc"
)
// ethAPIBackendWrapper wraps EthAPIBackend to implement ethapi.Backend with geth RPC types
type ethAPIBackendWrapper struct {
*EthAPIBackend
}
func (w *ethAPIBackendWrapper) BlockByNumber(ctx context.Context, number gethrpc.BlockNumber) (*types.Block, error) {
// Convert geth rpc.BlockNumber to evm rpc.BlockNumber
evmNumber := rpc.BlockNumber(number)
return w.EthAPIBackend.BlockByNumber(ctx, evmNumber)
}
func (w *ethAPIBackendWrapper) BlockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) {
return w.EthAPIBackend.BlockByHash(ctx, hash)
}
func (w *ethAPIBackendWrapper) HeaderByNumber(ctx context.Context, number gethrpc.BlockNumber) (*types.Header, error) {
// Convert geth rpc.BlockNumber to evm rpc.BlockNumber
evmNumber := rpc.BlockNumber(number)
return w.EthAPIBackend.HeaderByNumber(ctx, evmNumber)
}
func (w *ethAPIBackendWrapper) GetReceipts(ctx context.Context, hash common.Hash) (types.Receipts, error) {
return w.EthAPIBackend.GetReceipts(ctx, hash)
}
func (w *ethAPIBackendWrapper) GetBody(ctx context.Context, hash common.Hash, number gethrpc.BlockNumber) (*types.Body, error) {
// Convert geth rpc.BlockNumber to evm rpc.BlockNumber
evmNumber := rpc.BlockNumber(number)
return w.EthAPIBackend.GetBody(ctx, hash, evmNumber)
}
func (w *ethAPIBackendWrapper) BlockByNumberOrHash(ctx context.Context, blockNrOrHash gethrpc.BlockNumberOrHash) (*types.Block, error) {
// Convert geth BlockNumberOrHash to evm BlockNumberOrHash
evmBlockNrOrHash := rpc.BlockNumberOrHash{
BlockNumber: (*rpc.BlockNumber)(blockNrOrHash.BlockNumber),
BlockHash: blockNrOrHash.BlockHash,
RequireCanonical: blockNrOrHash.RequireCanonical,
}
return w.EthAPIBackend.BlockByNumberOrHash(ctx, evmBlockNrOrHash)
}
func (w *ethAPIBackendWrapper) FeeHistory(ctx context.Context, blockCount uint64, lastBlock gethrpc.BlockNumber, rewardPercentiles []float64) (*big.Int, [][]*big.Int, []*big.Int, []float64, error) {
// Convert geth rpc.BlockNumber to evm rpc.BlockNumber
evmLastBlock := rpc.BlockNumber(lastBlock)
return w.EthAPIBackend.FeeHistory(ctx, blockCount, evmLastBlock, rewardPercentiles)
}
func (w *ethAPIBackendWrapper) HeaderByNumberOrHash(ctx context.Context, blockNrOrHash gethrpc.BlockNumberOrHash) (*types.Header, error) {
// Convert geth BlockNumberOrHash to evm BlockNumberOrHash
evmBlockNrOrHash := rpc.BlockNumberOrHash{
BlockNumber: (*rpc.BlockNumber)(blockNrOrHash.BlockNumber),
BlockHash: blockNrOrHash.BlockHash,
RequireCanonical: blockNrOrHash.RequireCanonical,
}
return w.EthAPIBackend.HeaderByNumberOrHash(ctx, evmBlockNrOrHash)
}
func (w *ethAPIBackendWrapper) StateAndHeaderByNumber(ctx context.Context, number gethrpc.BlockNumber) (*state.StateDB, *types.Header, error) {
// Convert geth rpc.BlockNumber to evm rpc.BlockNumber
evmNumber := rpc.BlockNumber(number)
return w.EthAPIBackend.StateAndHeaderByNumber(ctx, evmNumber)
}
func (w *ethAPIBackendWrapper) StateAndHeaderByNumberOrHash(ctx context.Context, blockNrOrHash gethrpc.BlockNumberOrHash) (*state.StateDB, *types.Header, error) {
// Convert geth BlockNumberOrHash to evm BlockNumberOrHash
evmBlockNrOrHash := rpc.BlockNumberOrHash{
BlockNumber: (*rpc.BlockNumber)(blockNrOrHash.BlockNumber),
BlockHash: blockNrOrHash.BlockHash,
RequireCanonical: blockNrOrHash.RequireCanonical,
}
return w.EthAPIBackend.StateAndHeaderByNumberOrHash(ctx, evmBlockNrOrHash)
}
// gpoBackendWrapper wraps EthAPIBackend for the gas price oracle
type gpoBackendWrapper struct {
*EthAPIBackend
}
func (w *gpoBackendWrapper) BlockByNumber(ctx context.Context, number gethrpc.BlockNumber) (*types.Block, error) {
// Convert geth rpc.BlockNumber to evm rpc.BlockNumber
evmNumber := rpc.BlockNumber(number)
return w.EthAPIBackend.BlockByNumber(ctx, evmNumber)
}
func (w *gpoBackendWrapper) HeaderByNumber(ctx context.Context, number gethrpc.BlockNumber) (*types.Header, error) {
// Convert geth rpc.BlockNumber to evm rpc.BlockNumber
evmNumber := rpc.BlockNumber(number)
return w.EthAPIBackend.HeaderByNumber(ctx, evmNumber)
}
func (w *gpoBackendWrapper) GetReceipts(ctx context.Context, hash common.Hash) (types.Receipts, error) {
return w.EthAPIBackend.GetReceipts(ctx, hash)
}