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
- 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) BlockHeader(ctx context.Context, number *big.Int) (*types.Header, error)
- func (ec *Client) CalculateBurntContract(blockNum uint64) string
- func (ec *Client) Call(ctx context.Context, request *RosettaTypes.CallRequest) (*RosettaTypes.CallResponse, error)
- func (ec *Client) Close()
- func (ec *Client) EstimateGas(ctx context.Context, msg ethereum.CallMsg) (uint64, 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) SuggestGasTipCap(ctx context.Context) (*big.Int, error)
- type ClientConfig
- type CurrencyFetcher
- type ERC20CurrencyFetcher
- type GetTransactionReceiptInput
- type GraphQL
- type GraphQLClient
- type HTTPHeader
- type JSONRPC
Constants ¶
const ( // NodeVersion is the version of geth we are using. NodeVersion = "1.9.24" // Blockchain is Polygon. Blockchain string = "polygon" // 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 = "MATIC" // 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" // PaymentOpType is used to represent payment/transfer operations PaymentOpType = "PAYMENT" // 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 = uint64(21000) //nolint:gomnd // IncludeMempoolCoins does not apply to polygon-rosetta as it is not UTXO-based. IncludeMempoolCoins = false // ContractAddressKey is the key used to denote the contract address // for a token, provided via Currency metadata. ContractAddressKey string = "token_address" )
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 ( // MainnetGenesisBlockIdentifier is the *types.BlockIdentifier // of the mainnet genesis block. MainnetGenesisBlockIdentifier = &types.BlockIdentifier{ Hash: "0xa9c28ce2141b56c474f1dc504bee9b01eb1bd7d1a507580d5519d4437a97de1b", Index: GenesisBlockIndex, } // MumbaiGenesisBlockIdentifier is the *types.BlockIdentifier // of the Mumbai genesis block. MumbaiGenesisBlockIdentifier = &types.BlockIdentifier{ Hash: "0x7b66506a9ebdbf30d32b43c5f15a3b1216269a1ec3a75aa3182b86176a2b1ca7", Index: GenesisBlockIndex, } // Currency is the *types.Currency for all // Polygon networks. Currency = &types.Currency{ Symbol: Symbol, Decimals: Decimals, } // OperationTypes are all supported operation types. OperationTypes = []string{ MinerRewardOpType, UncleRewardOpType, FeeOpType, PaymentOpType, 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_getTransactionReceipt", } )
Functions ¶
func ChecksumAddress ¶
ChecksumAddress ensures an Polygon 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_*, and admin_* methods and on the graphql endpoint.
Client borrows HEAVILY from https://github.com/ethereum/go-ethereum/tree/master/ethclient.
func NewClient ¶
func NewClient(cfg *ClientConfig) (*Client, error)
NewClient creates a Client that from the provided url and params.
func (*Client) Balance ¶
func (ec *Client) Balance( ctx context.Context, account *RosettaTypes.AccountIdentifier, block *RosettaTypes.PartialBlockIdentifier, currencies []*RosettaTypes.Currency, ) (*RosettaTypes.AccountBalanceResponse, error)
Balance returns the balance of a *RosettaTypes.AccountIdentifier at a *RosettaTypes.PartialBlockIdentifier.
Note: If the currencies field is populated, only balances for the specified currencies will be returned. If not populated, the native balance (MATIC) will be returned. See: https://www.rosetta-api.org/docs/models/AccountBalanceRequest.html For each specified ERC20 token, we make a graphql call to its respective contract address in order to query the account's balance.
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) BlockHeader ¶
BlockHeader returns a block header from the current canonical chain. If number is nil, the latest known header is returned.
func (*Client) CalculateBurntContract ¶
CalculateBurntContract implementation is taken from: https://github.com/maticnetwork/bor/blob/c227a072418626dd758ceabffd2ea7dadac6eecb/params/config.go#L527
TODO: Depend on maticnetwork fork of go-ethereum instead of stock geth so we don't need to copy/paste this.
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) EstimateGas ¶
EstimateGas retrieves the currently gas limit
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.
type ClientConfig ¶
type ClientConfig struct { URL string ChainConfig *params.ChainConfig SkipAdminCalls bool Headers []*HTTPHeader BurntContract map[string]string }
ClientConfig holds asset config information
type CurrencyFetcher ¶
type CurrencyFetcher interface {
// contains filtered or unexported methods
}
CurrencyFetcher interface describes a struct that can fetch the details of an Ethereum-based token given its contract address.
type ERC20CurrencyFetcher ¶
type ERC20CurrencyFetcher struct {
// contains filtered or unexported fields
}
ERC20CurrencyFetcher type has a global currencyCache (lru) to cache results of fetching currency details, as well as a GraphQL client (required for getting currency details).
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.
type HTTPHeader ¶
HTTPHeader is key, value pair to be set on the HTTP and GraphQL client.