Documentation ¶
Index ¶
- Constants
- Variables
- func CallType(t string) bool
- func ChecksumAddress(address string) (string, bool)
- func CreateType(t string) bool
- func GenerateBootstrapFile(genesisFile string, outputFile string) error
- func MustChecksum(address string) string
- func StartGeth(ctx context.Context, arguments string, g *errgroup.Group) error
- type Call
- type Client
- func (ec *Client) Balance(ctx context.Context, account *RosettaTypes.AccountIdentifier, ...) (*RosettaTypes.AccountBalanceResponse, error)
- func (ec *Client) Block(ctx context.Context, blockIdentifier *RosettaTypes.PartialBlockIdentifier) (*RosettaTypes.Block, error)
- func (ec *Client) Call(ctx context.Context, request *RosettaTypes.CallRequest) (*RosettaTypes.CallResponse, error)
- func (ec *Client) Close()
- func (ec *Client) GetMempool(ctx context.Context) (*RosettaTypes.MempoolResponse, error)
- func (ec *Client) PendingNonceAt(ctx context.Context, account common.Address) (uint64, error)
- func (ec *Client) SendTransaction(ctx context.Context, tx *types.Transaction) error
- func (ec *Client) Status(ctx context.Context) (*RosettaTypes.BlockIdentifier, int64, *RosettaTypes.SyncStatus, ...)
- func (ec *Client) SuggestGasPrice(ctx context.Context) (*big.Int, error)
- func (ec *Client) Transaction(ctx context.Context, blockIdentifier *RosettaTypes.BlockIdentifier, ...) (*RosettaTypes.Transaction, error)
- type GetBlockByNumberInput
- type GetCallInput
- type GetTransactionReceiptInput
- type GraphQL
- type GraphQLClient
- type JSONRPC
Constants ¶
const ( // NodeVersion is the version of geth we are using. NodeVersion = "1.9.24" // Blockchain is Ethereum. Blockchain string = "Ethereum" // MainnetNetwork is the value of the network // in MainnetNetworkIdentifier. MainnetNetwork string = "Mainnet" // RopstenNetwork is the value of the network // in RopstenNetworkIdentifier. RopstenNetwork string = "Ropsten" // RinkebyNetwork is the value of the network // in RinkebyNetworkNetworkIdentifier. RinkebyNetwork string = "Rinkeby" // GoerliNetwork is the value of the network // in GoerliNetworkNetworkIdentifier. GoerliNetwork string = "Goerli" // Symbol is the symbol value // used in Currency. Symbol = "ETH" // Decimals is the decimals value // used in Currency. Decimals = 18 // MinerRewardOpType is used to describe // a miner block reward. MinerRewardOpType = "MINER_REWARD" // UncleRewardOpType is used to describe // an uncle block reward. UncleRewardOpType = "UNCLE_REWARD" // FeeOpType is used to represent fee operations. FeeOpType = "FEE" // CallOpType is used to represent CALL trace operations. CallOpType = "CALL" // CreateOpType is used to represent CREATE trace operations. CreateOpType = "CREATE" // Create2OpType is used to represent CREATE2 trace operations. Create2OpType = "CREATE2" // SelfDestructOpType is used to represent SELFDESTRUCT trace operations. SelfDestructOpType = "SELFDESTRUCT" // CallCodeOpType is used to represent CALLCODE trace operations. CallCodeOpType = "CALLCODE" // DelegateCallOpType is used to represent DELEGATECALL trace operations. DelegateCallOpType = "DELEGATECALL" // StaticCallOpType is used to represent STATICCALL trace operations. StaticCallOpType = "STATICCALL" // DestructOpType is a synthetic operation used to represent the // deletion of suicided accounts that still have funds at the end // of a transaction. DestructOpType = "DESTRUCT" // SuccessStatus is the status of any // Ethereum operation considered successful. SuccessStatus = "SUCCESS" // FailureStatus is the status of any // Ethereum operation considered unsuccessful. FailureStatus = "FAILURE" // HistoricalBalanceSupported is whether // historical balance is supported. HistoricalBalanceSupported = true // UnclesRewardMultiplier is the uncle reward // multiplier. UnclesRewardMultiplier = 32 // MaxUncleDepth is the maximum depth for // an uncle to be rewarded. MaxUncleDepth = 8 // GenesisBlockIndex is the index of the // genesis block. GenesisBlockIndex = int64(0) // TransferGasLimit is the gas limit // of a transfer. TransferGasLimit = int64(21000) //nolint:gomnd // MainnetGethArguments are the arguments to start a mainnet geth instance. MainnetGethArguments = `--config=/app/ethereum/geth.toml --gcmode=archive --graphql` // IncludeMempoolCoins does not apply to rosetta-ethereum as it is not UTXO-based. IncludeMempoolCoins = false )
Variables ¶
var ( ErrBlockOrphaned = errors.New("block orphaned") ErrCallParametersInvalid = errors.New("call parameters invalid") ErrCallOutputMarshal = errors.New("call output marshal") ErrCallMethodInvalid = errors.New("call method invalid") )
Client errors
var ( // RopstenGethArguments are the arguments to start a ropsten geth instance. RopstenGethArguments = fmt.Sprintf("%s --ropsten", MainnetGethArguments) // RinkebyGethArguments are the arguments to start a rinkeby geth instance. RinkebyGethArguments = fmt.Sprintf("%s --rinkeby", MainnetGethArguments) // GoerliGethArguments are the arguments to start a ropsten geth instance. GoerliGethArguments = fmt.Sprintf("%s --goerli", MainnetGethArguments) // MainnetGenesisBlockIdentifier is the *types.BlockIdentifier // of the mainnet genesis block. MainnetGenesisBlockIdentifier = &types.BlockIdentifier{ Hash: params.MainnetGenesisHash.Hex(), Index: GenesisBlockIndex, } // RopstenGenesisBlockIdentifier is the *types.BlockIdentifier // of the Ropsten genesis block. RopstenGenesisBlockIdentifier = &types.BlockIdentifier{ Hash: params.RopstenGenesisHash.Hex(), Index: GenesisBlockIndex, } // RinkebyGenesisBlockIdentifier is the *types.BlockIdentifier // of the Ropsten genesis block. RinkebyGenesisBlockIdentifier = &types.BlockIdentifier{ Hash: params.RinkebyGenesisHash.Hex(), Index: GenesisBlockIndex, } // GoerliGenesisBlockIdentifier is the *types.BlockIdentifier // of the Goerli genesis block. GoerliGenesisBlockIdentifier = &types.BlockIdentifier{ Hash: params.GoerliGenesisHash.Hex(), Index: GenesisBlockIndex, } // Currency is the *types.Currency for all // Ethereum networks. Currency = &types.Currency{ Symbol: Symbol, Decimals: Decimals, } // OperationTypes are all suppoorted operation types. OperationTypes = []string{ MinerRewardOpType, UncleRewardOpType, FeeOpType, CallOpType, CreateOpType, Create2OpType, SelfDestructOpType, CallCodeOpType, DelegateCallOpType, StaticCallOpType, DestructOpType, } // OperationStatuses are all supported operation statuses. OperationStatuses = []*types.OperationStatus{ { Status: SuccessStatus, Successful: true, }, { Status: FailureStatus, Successful: false, }, } // CallMethods are all supported call methods. CallMethods = []string{ "eth_getBlockByNumber", "eth_getTransactionReceipt", "eth_call", "eth_estimateGas", } )
Functions ¶
func ChecksumAddress ¶
ChecksumAddress ensures an Ethereum hex address is in Checksum Format. If the address cannot be converted, it returns !ok.
func CreateType ¶
CreateType returns a boolean indicating if the provided trace type is a create type.
func GenerateBootstrapFile ¶
GenerateBootstrapFile creates the bootstrap balances file for a particular genesis file.
func MustChecksum ¶
MustChecksum ensures an address can be converted into a valid checksum. If it does not, the program will exit.
Types ¶
type Call ¶
type Call struct { Type string `json:"type"` From common.Address `json:"from"` To common.Address `json:"to"` Value *big.Int `json:"value"` GasUsed *big.Int `json:"gasUsed"` Revert bool ErrorMessage string `json:"error"` Calls []*Call `json:"calls"` }
Call is an Ethereum debug trace.
func (*Call) UnmarshalJSON ¶
UnmarshalJSON is a custom unmarshaler for Call.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client allows for querying a set of specific Ethereum endpoints in an idempotent manner. Client relies on the eth_*, debug_*, admin_*, and txpool_* methods and on the graphql endpoint.
Client borrows HEAVILY from https://github.com/ethereum/go-ethereum/tree/master/ethclient.
func (*Client) Balance ¶
func (ec *Client) Balance( ctx context.Context, account *RosettaTypes.AccountIdentifier, block *RosettaTypes.PartialBlockIdentifier, ) (*RosettaTypes.AccountBalanceResponse, error)
Balance returns the balance of a *RosettaTypes.AccountIdentifier at a *RosettaTypes.PartialBlockIdentifier.
We must use graphql to get the balance atomically (the rpc method for balance does not allow for querying by block hash nor return the block hash where the balance was fetched).
func (*Client) Block ¶
func (ec *Client) Block( ctx context.Context, blockIdentifier *RosettaTypes.PartialBlockIdentifier, ) (*RosettaTypes.Block, error)
Block returns a populated block at the *RosettaTypes.PartialBlockIdentifier. If neither the hash or index is populated in the *RosettaTypes.PartialBlockIdentifier, the current block is returned.
func (*Client) Call ¶
func (ec *Client) Call( ctx context.Context, request *RosettaTypes.CallRequest, ) (*RosettaTypes.CallResponse, error)
Call handles calls to the /call endpoint.
func (*Client) GetMempool ¶
func (ec *Client) GetMempool(ctx context.Context) (*RosettaTypes.MempoolResponse, error)
GetMempool get and returns all the transactions on Ethereum TxPool (pending and queued).
func (*Client) PendingNonceAt ¶
PendingNonceAt returns the account nonce of the given account in the pending state. This is the nonce that should be used for the next transaction.
func (*Client) SendTransaction ¶
SendTransaction injects a signed transaction into the pending pool for execution.
If the transaction was a contract creation use the TransactionReceipt method to get the contract address after the transaction has been mined.
func (*Client) Status ¶
func (ec *Client) Status(ctx context.Context) ( *RosettaTypes.BlockIdentifier, int64, *RosettaTypes.SyncStatus, []*RosettaTypes.Peer, error, )
Status returns geth status information for determining node healthiness.
func (*Client) SuggestGasPrice ¶
SuggestGasPrice retrieves the currently suggested gas price to allow a timely execution of a transaction.
func (*Client) Transaction ¶
func (ec *Client) Transaction( ctx context.Context, blockIdentifier *RosettaTypes.BlockIdentifier, transactionIdentifier *RosettaTypes.TransactionIdentifier, ) (*RosettaTypes.Transaction, error)
Transaction returns the transaction response of the Transaction identified by *RosettaTypes.TransactionIdentifier hash
type GetBlockByNumberInput ¶
type GetBlockByNumberInput struct { Index *int64 `json:"index,omitempty"` ShowTxDetails bool `json:"show_transaction_details"` }
GetBlockByNumberInput is the input to the call method "eth_getBlockByNumber".
type GetCallInput ¶
type GetCallInput struct { BlockIndex int64 `json:"index,omitempty"` BlockHash string `json:"hash,omitempty"` From string `json:"from"` To string `json:"to"` Gas int64 `json:"gas"` GasPrice int64 `json:"gas_price"` Value int64 `json:"value"` Data string `json:"data"` }
GetCallInput is the input to the call method "eth_call", "eth_estimateGas".
type GetTransactionReceiptInput ¶
type GetTransactionReceiptInput struct {
TxHash string `json:"tx_hash"`
}
GetTransactionReceiptInput is the input to the call method "eth_getTransactionReceipt".
type GraphQLClient ¶
type GraphQLClient struct {
// contains filtered or unexported fields
}
GraphQLClient is a client used to make graphQL queries to geth's graphql endpoint.