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 StartGmet(ctx context.Context, arguments string, g *errgroup.Group) error
- type BlockNumber
- 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) 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)
- type GetBlockByNumberInput
- type GetCallInput
- type GetTransactionReceiptInput
- type GraphQL
- type GraphQLClient
- type JSONRPC
- type Receipt
- type Reward
Constants ¶
const ( // NodeVersion is the version of gmet we are using. NodeVersion = "m0.9.7" // Blockchain is Ethereum. Blockchain string = "Metadium" // MainnetNetwork is the value of the network // in MainnetNetworkIdentifier. MainnetNetwork string = "Mainnet" // TestnetNetwork is the value of the network // in TestnetNetworkIdentifier. TestnetNetwork string = "Testnet" // Symbol is the symbol value // used in Currency. Symbol = "META" // Decimals is the decimals value // used in Currency. Decimals = 18 // BlockRewardOpType is used to describe // a authority block reward. BlockRewardOpType = "BLOCK_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 // MainnetGmetArguments are the arguments to start a mainnet gmet instance. MainnetGmetArguments = `--config=/app/metadium/gmet.toml --gcmode=archive --graphql` // IncludeMempoolCoins does not apply to rosetta-metadium 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 ( // TestnetGmetArguments are the arguments to start a testnet gmet instance. TestnetGmetArguments = fmt.Sprintf("%s --testnet", MainnetGmetArguments) // MainnetGenesisBlockIdentifier is the *types.BlockIdentifier // of the mainnet genesis block. MainnetGenesisBlockIdentifier = &types.BlockIdentifier{ Hash: params.MetadiumMainnetGenesisHash.Hex(), Index: GenesisBlockIndex, } // TestnetGenesisBlockIdentifier is the *types.BlockIdentifier // of the Testnet genesis block. TestnetGenesisBlockIdentifier = &types.BlockIdentifier{ Hash: params.MetadiumTestnetGenesisHash.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{ BlockRewardOpType, 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 BlockNumber ¶
type BlockNumber int64
func (*BlockNumber) UnmarshalJSON ¶
func (bn *BlockNumber) UnmarshalJSON(data []byte) error
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_*, and admin_* 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) 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 gmet status information for determining node healthiness.
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 gmet's graphql endpoint.
type JSONRPC ¶
type JSONRPC interface { CallContext(ctx context.Context, result interface{}, method string, args ...interface{}) error BatchCallContext(ctx context.Context, b []rpc.BatchElem) error Close() }
JSONRPC is the interface for accessing go-ethereum's JSON RPC endpoint.
type Receipt ¶
type Receipt struct { Type uint8 `json:"type,omitempty"` PostState []byte `json:"root"` Status uint64 `json:"status"` CumulativeGasUsed uint64 `json:"cumulativeGasUsed" gencodec:"required"` TxHash common.Hash `json:"transactionHash" gencodec:"required"` ContractAddress common.Address `json:"contractAddress"` GasUsed uint64 `json:"gasUsed" gencodec:"required"` BlockHash common.Hash `json:"blockHash,omitempty"` TransactionIndex uint `json:"transactionIndex"` }