mirror of
https://github.com/luxfi/evm.git
synced 2026-09-24 00:27:44 +00:00
106 lines
4.3 KiB
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)
|
|
} |