mirror of
https://github.com/luxfi/evm.git
synced 2026-09-24 00:27:44 +00:00
85 lines
2.9 KiB
Go
85 lines
2.9 KiB
Go
// (c) 2025, Lux Industries, Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package core
|
|
|
|
import (
|
|
"math/big"
|
|
|
|
"github.com/luxfi/evm/core/types"
|
|
"github.com/luxfi/evm/iface"
|
|
"github.com/luxfi/geth/common"
|
|
)
|
|
|
|
// ChainHeaderReaderAdapter adapts a BlockChain to the ChainHeaderReader interface
|
|
// by converting between EVM types and iface types
|
|
type ChainHeaderReaderAdapter struct {
|
|
chain *BlockChain
|
|
}
|
|
|
|
// NewChainHeaderReaderAdapter creates a new adapter
|
|
func NewChainHeaderReaderAdapter(chain *BlockChain) iface.ChainHeaderReader {
|
|
return &ChainHeaderReaderAdapter{chain: chain}
|
|
}
|
|
|
|
// Config retrieves the blockchain's chain configuration
|
|
func (a *ChainHeaderReaderAdapter) Config() iface.ChainConfig {
|
|
return a.chain.Config()
|
|
}
|
|
|
|
// CurrentHeader retrieves the current header from the local chain
|
|
func (a *ChainHeaderReaderAdapter) CurrentHeader() *iface.Header {
|
|
evmHeader := a.chain.CurrentHeader()
|
|
return types.ConvertHeaderFromEVM(evmHeader)
|
|
}
|
|
|
|
// GetHeader retrieves a block header from the database by hash and number
|
|
func (a *ChainHeaderReaderAdapter) GetHeader(hash common.Hash, number uint64) *iface.Header {
|
|
evmHeader := a.chain.GetHeader(hash, number)
|
|
return types.ConvertHeaderFromEVM(evmHeader)
|
|
}
|
|
|
|
// GetHeaderByNumber retrieves a block header from the database by number
|
|
func (a *ChainHeaderReaderAdapter) GetHeaderByNumber(number uint64) *iface.Header {
|
|
evmHeader := a.chain.GetHeaderByNumber(number)
|
|
return types.ConvertHeaderFromEVM(evmHeader)
|
|
}
|
|
|
|
// GetHeaderByHash retrieves a block header from the database by its hash
|
|
func (a *ChainHeaderReaderAdapter) GetHeaderByHash(hash common.Hash) *iface.Header {
|
|
evmHeader := a.chain.GetHeaderByHash(hash)
|
|
return types.ConvertHeaderFromEVM(evmHeader)
|
|
}
|
|
|
|
// GetTd retrieves the total difficulty from the database by hash and number
|
|
func (a *ChainHeaderReaderAdapter) GetTd(hash common.Hash, number uint64) *big.Int {
|
|
return a.chain.GetTd(hash, number)
|
|
}
|
|
|
|
// GetCoinbaseAt returns the configured coinbase address at the given timestamp
|
|
func (a *ChainHeaderReaderAdapter) GetCoinbaseAt(timestamp uint64) common.Address {
|
|
return a.chain.GetCoinbaseAt(timestamp)
|
|
}
|
|
|
|
// GetFeeConfigAt returns the fee configuration at the given timestamp
|
|
func (a *ChainHeaderReaderAdapter) GetFeeConfigAt(timestamp uint64) (iface.FeeConfig, error) {
|
|
return a.chain.GetFeeConfigAt(timestamp)
|
|
}
|
|
|
|
// ChainReaderAdapter adapts a BlockChain to the ChainReader interface
|
|
type ChainReaderAdapter struct {
|
|
ChainHeaderReaderAdapter
|
|
}
|
|
|
|
// NewChainReaderAdapter creates a new adapter
|
|
func NewChainReaderAdapter(chain *BlockChain) iface.ChainReader {
|
|
return &ChainReaderAdapter{
|
|
ChainHeaderReaderAdapter: ChainHeaderReaderAdapter{chain: chain},
|
|
}
|
|
}
|
|
|
|
// GetBlock retrieves a block from the database by hash and number
|
|
func (a *ChainReaderAdapter) GetBlock(hash common.Hash, number uint64) *iface.ETHBlock {
|
|
evmBlock := a.chain.GetBlock(hash, number)
|
|
return types.ConvertBlockFromEVM(evmBlock)
|
|
} |