jsonrpc

package
v1.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 6, 2024 License: Apache-2.0 Imports: 59 Imported by: 1

Documentation

Overview

Package jsonrpc contains the implementation of the JSONRPC service which is called by Ethereum clients (e.g. Metamask).

The most relevant types in this package are:

  • EthService, NetService, DebugService, etc. which contain the implementations for the `eth_*`, `net_*`, `debug_*`, etc., JSONRPC endpoints. Each endpoint corresponds to a public receiver with the same name. For example, `eth_getTransactionCount` corresponds to EthService.GetTransactionCount.
  • EVMChain, which provides common functionality to interact with the EVM state.
  • ChainBackend, which provides access to the underlying ISC chain, and has two implementations:
  • WaspEVMBackend for the production environment.
  • [solo.jsonRPCSoloBackend] for Solo tests.

package jsonrpc implements JSON-RPC endpoints according to https://eth.wiki/json-rpc/API

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewServer

func NewServer(
	evmChain *EVMChain,
	accountManager *AccountManager,
	metrics *metrics.ChainWebAPIMetrics,
	params *Parameters,
) (*rpc.Server, error)

func RPCMarshalBlock

func RPCMarshalBlock(block *types.Block, inclTx, fullTx bool) (map[string]interface{}, error)

RPCMarshalBlock converts the given block to the RPC output which depends on fullTx. If inclTx is true transactions are returned. When fullTx is true the returned block contains full transaction details, otherwise it will only contain transaction hashes.

func RPCMarshalHeader

func RPCMarshalHeader(head *types.Header) map[string]interface{}

RPCMarshalHeader converts the given header to the RPC output .

func RPCMarshalReceipt

func RPCMarshalReceipt(r *types.Receipt, tx *types.Transaction, effectiveGasPrice *big.Int) map[string]interface{}

Types

type AccountManager

type AccountManager struct {
	// contains filtered or unexported fields
}

func NewAccountManager

func NewAccountManager(accounts []*ecdsa.PrivateKey) *AccountManager

func (*AccountManager) Add

func (a *AccountManager) Add(keyPair *ecdsa.PrivateKey)

func (*AccountManager) Addresses

func (a *AccountManager) Addresses() []common.Address

func (*AccountManager) Get

type CallFrame added in v1.0.3

type CallFrame struct {
	Type    string      `json:"type"`
	From    string      `json:"from"`
	To      string      `json:"to,omitempty"`
	Value   string      `json:"value,omitempty"`
	Gas     string      `json:"gas"`
	GasUsed string      `json:"gasUsed"`
	Input   string      `json:"input"`
	Output  string      `json:"output,omitempty"`
	Error   string      `json:"error,omitempty"`
	Calls   []CallFrame `json:"calls,omitempty"`
}

CallFrame contains the result of a trace with "callTracer". Code is 100% copied from go-ethereum (since the type is unexported there)

type ChainBackend

type ChainBackend interface {
	EVMSendTransaction(tx *types.Transaction) error
	EVMCall(aliasOutput *isc.AliasOutputWithID, callMsg ethereum.CallMsg) ([]byte, error)
	EVMEstimateGas(aliasOutput *isc.AliasOutputWithID, callMsg ethereum.CallMsg) (uint64, error)
	EVMTraceTransaction(aliasOutput *isc.AliasOutputWithID, blockTime time.Time, iscRequestsInBlock []isc.Request, txIndex uint64, tracer tracers.Tracer) error
	FeePolicy(blockIndex uint32) (*gas.FeePolicy, error)
	ISCChainID() *isc.ChainID
	ISCCallView(chainState state.State, scName string, funName string, args dict.Dict) (dict.Dict, error)
	ISCLatestAliasOutput() (*isc.AliasOutputWithID, error)
	ISCLatestState() (state.State, error)
	ISCStateByBlockIndex(blockIndex uint32) (state.State, error)
	ISCStateByTrieRoot(trieRoot trie.Hash) (state.State, error)
	BaseToken() *parameters.BaseToken
	TakeSnapshot() (int, error)
	RevertToSnapshot(int) error
}

ChainBackend provides access to the underlying ISC chain.

type DebugService added in v1.0.3

type DebugService struct {
	// contains filtered or unexported fields
}

func NewDebugService added in v1.0.3

func NewDebugService(evmChain *EVMChain, metrics *metrics.ChainWebAPIMetrics) *DebugService

func (*DebugService) TraceTransaction added in v1.0.3

func (d *DebugService) TraceTransaction(txHash common.Hash, config *tracers.TraceConfig) (interface{}, error)

type EVMChain

type EVMChain struct {
	// contains filtered or unexported fields
}

EVMChain provides common functionality to interact with the EVM state.

func NewEVMChain

func NewEVMChain(
	backend ChainBackend,
	pub *publisher.Publisher,
	isArchiveNode bool,
	indexDbEngine hivedb.Engine,
	indexDbPath string,
	log *logger.Logger,
) *EVMChain

func (*EVMChain) Balance

func (e *EVMChain) Balance(address common.Address, blockNumberOrHash *rpc.BlockNumberOrHash) (*big.Int, error)

func (*EVMChain) BaseToken added in v0.3.0

func (e *EVMChain) BaseToken() *parameters.BaseToken

func (*EVMChain) BlockByHash

func (e *EVMChain) BlockByHash(hash common.Hash) *types.Block

func (*EVMChain) BlockByNumber

func (e *EVMChain) BlockByNumber(blockNumber *big.Int) (*types.Block, error)

func (*EVMChain) BlockNumber

func (e *EVMChain) BlockNumber() *big.Int

func (*EVMChain) BlockTransactionCountByHash

func (e *EVMChain) BlockTransactionCountByHash(blockHash common.Hash) uint64

func (*EVMChain) BlockTransactionCountByNumber

func (e *EVMChain) BlockTransactionCountByNumber(blockNumber *big.Int) (uint64, error)

func (*EVMChain) CallContract

func (e *EVMChain) CallContract(callMsg ethereum.CallMsg, blockNumberOrHash *rpc.BlockNumberOrHash) ([]byte, error)

func (*EVMChain) ChainID added in v1.0.3

func (e *EVMChain) ChainID() uint16

func (*EVMChain) Code

func (e *EVMChain) Code(address common.Address, blockNumberOrHash *rpc.BlockNumberOrHash) ([]byte, error)

func (*EVMChain) EstimateGas

func (e *EVMChain) EstimateGas(callMsg ethereum.CallMsg, blockNumberOrHash *rpc.BlockNumberOrHash) (uint64, error)

func (*EVMChain) GasFeePolicy added in v0.3.0

func (e *EVMChain) GasFeePolicy() *gas.FeePolicy

func (*EVMChain) GasPrice added in v1.0.3

func (e *EVMChain) GasPrice() *big.Int

func (*EVMChain) GasRatio added in v0.3.0

func (e *EVMChain) GasRatio() util.Ratio32

func (*EVMChain) Logs

func (e *EVMChain) Logs(query *ethereum.FilterQuery, params *LogsLimits) ([]*types.Log, error)

Logs executes a log filter operation, blocking during execution and returning all the results in one batch.

func (*EVMChain) SendTransaction

func (e *EVMChain) SendTransaction(tx *types.Transaction) error

func (*EVMChain) Signer

func (e *EVMChain) Signer() (types.Signer, error)

func (*EVMChain) StorageAt

func (e *EVMChain) StorageAt(address common.Address, key common.Hash, blockNumberOrHash *rpc.BlockNumberOrHash) (common.Hash, error)

func (*EVMChain) SubscribeLogs added in v1.0.3

func (e *EVMChain) SubscribeLogs(q *ethereum.FilterQuery, ch chan<- []*types.Log) (unsubscribe func())

func (*EVMChain) SubscribeNewHeads added in v1.0.3

func (e *EVMChain) SubscribeNewHeads(ch chan<- *types.Header) (unsubscribe func())

func (*EVMChain) TraceTransaction added in v1.0.3

func (e *EVMChain) TraceTransaction(txHash common.Hash, config *tracers.TraceConfig) (any, error)

func (*EVMChain) TransactionByBlockHashAndIndex

func (e *EVMChain) TransactionByBlockHashAndIndex(hash common.Hash, index uint64) (tx *types.Transaction, blockNumber uint64, err error)

func (*EVMChain) TransactionByBlockNumberAndIndex

func (e *EVMChain) TransactionByBlockNumberAndIndex(blockNumber *big.Int, index uint64) (tx *types.Transaction, blockHash common.Hash, blockNumberRet uint64, err error)

func (*EVMChain) TransactionByHash

func (e *EVMChain) TransactionByHash(hash common.Hash) (tx *types.Transaction, blockHash common.Hash, blockNumber, txIndex uint64, err error)

func (*EVMChain) TransactionCount

func (e *EVMChain) TransactionCount(address common.Address, blockNumberOrHash *rpc.BlockNumberOrHash) (uint64, error)

func (*EVMChain) TransactionReceipt

func (e *EVMChain) TransactionReceipt(txHash common.Hash) *types.Receipt

func (*EVMChain) ViewCaller added in v0.3.0

func (e *EVMChain) ViewCaller(chainState state.State) vmerrors.ViewCaller

type EVMService added in v1.0.3

type EVMService struct {
	// contains filtered or unexported fields
}

func NewEVMService added in v1.0.3

func NewEVMService(evmChain *EVMChain) *EVMService

func (*EVMService) Revert added in v1.0.3

func (e *EVMService) Revert(snapshot hexutil.Uint) error

func (*EVMService) Snapshot added in v1.0.3

func (e *EVMService) Snapshot() (hexutil.Uint, error)

type EthService

type EthService struct {
	// contains filtered or unexported fields
}

EthService contains the implementations for the `eth_*` JSONRPC endpoints.

Each endpoint corresponds to a public receiver with the same name. For example, `eth_getTransactionCount` corresponds to EthService.GetTransactionCount.

func NewEthService

func NewEthService(
	evmChain *EVMChain,
	accounts *AccountManager,
	metrics *metrics.ChainWebAPIMetrics,
	params *Parameters,
) *EthService

func (*EthService) Accounts

func (e *EthService) Accounts() []common.Address

func (*EthService) BlockNumber

func (e *EthService) BlockNumber() (*hexutil.Big, error)

func (*EthService) Call

func (e *EthService) Call(args *RPCCallArgs, blockNumberOrHash *rpc.BlockNumberOrHash) (hexutil.Bytes, error)

func (*EthService) ChainId

func (e *EthService) ChainId() (hexutil.Uint, error)

ChainID implements the eth_chainId method according to https://eips.ethereum.org/EIPS/eip-695

func (*EthService) Coinbase

func (e *EthService) Coinbase() common.Address

func (*EthService) EstimateGas

func (e *EthService) EstimateGas(args *RPCCallArgs, blockNumberOrHash *rpc.BlockNumberOrHash) (hexutil.Uint64, error)

func (*EthService) GasPrice

func (e *EthService) GasPrice() (*hexutil.Big, error)

func (*EthService) GetBalance

func (e *EthService) GetBalance(address common.Address, blockNumberOrHash *rpc.BlockNumberOrHash) (*hexutil.Big, error)

func (*EthService) GetBlockByHash

func (e *EthService) GetBlockByHash(hash common.Hash, full bool) (map[string]interface{}, error)

func (*EthService) GetBlockByNumber

func (e *EthService) GetBlockByNumber(blockNumber rpc.BlockNumber, full bool) (map[string]interface{}, error)

func (*EthService) GetBlockTransactionCountByHash

func (e *EthService) GetBlockTransactionCountByHash(blockHash common.Hash) (hexutil.Uint, error)

func (*EthService) GetBlockTransactionCountByNumber

func (e *EthService) GetBlockTransactionCountByNumber(blockNumber rpc.BlockNumber) (hexutil.Uint, error)

func (*EthService) GetCode

func (e *EthService) GetCode(address common.Address, blockNumberOrHash *rpc.BlockNumberOrHash) (hexutil.Bytes, error)

func (*EthService) GetCompilers

func (e *EthService) GetCompilers() []string

func (*EthService) GetLogs

func (e *EthService) GetLogs(q *RPCFilterQuery) ([]*types.Log, error)

func (*EthService) GetStorageAt

func (e *EthService) GetStorageAt(address common.Address, key string, blockNumberOrHash *rpc.BlockNumberOrHash) (hexutil.Bytes, error)

func (*EthService) GetTransactionByBlockHashAndIndex

func (e *EthService) GetTransactionByBlockHashAndIndex(blockHash common.Hash, index hexutil.Uint) (*RPCTransaction, error)

func (*EthService) GetTransactionByBlockNumberAndIndex

func (e *EthService) GetTransactionByBlockNumberAndIndex(blockNumberOrTag rpc.BlockNumber, index hexutil.Uint) (*RPCTransaction, error)

func (*EthService) GetTransactionByHash

func (e *EthService) GetTransactionByHash(hash common.Hash) (*RPCTransaction, error)

func (*EthService) GetTransactionCount

func (e *EthService) GetTransactionCount(address common.Address, blockNumberOrHash *rpc.BlockNumberOrHash) (hexutil.Uint64, error)

func (*EthService) GetTransactionReceipt

func (e *EthService) GetTransactionReceipt(txHash common.Hash) (map[string]interface{}, error)

func (*EthService) GetUncleByBlockHashAndIndex

func (e *EthService) GetUncleByBlockHashAndIndex(blockHash common.Hash, index hexutil.Uint) map[string]interface{}

func (*EthService) GetUncleByBlockNumberAndIndex

func (e *EthService) GetUncleByBlockNumberAndIndex(blockNumberOrTag rpc.BlockNumber, index hexutil.Uint) map[string]interface{}

func (*EthService) GetUncleCountByBlockHash

func (e *EthService) GetUncleCountByBlockHash(blockHash common.Hash) hexutil.Uint

func (*EthService) GetUncleCountByBlockNumber

func (e *EthService) GetUncleCountByBlockNumber(blockNumber rpc.BlockNumber) hexutil.Uint

func (*EthService) Hashrate

func (e *EthService) Hashrate() float64

func (*EthService) Logs added in v1.0.3

func (*EthService) Mining

func (e *EthService) Mining() bool

func (*EthService) NewHeads added in v1.0.3

func (e *EthService) NewHeads(ctx context.Context) (*rpc.Subscription, error)

func (*EthService) ProtocolVersion

func (e *EthService) ProtocolVersion() hexutil.Uint

func (*EthService) SendRawTransaction

func (e *EthService) SendRawTransaction(txBytes hexutil.Bytes) (common.Hash, error)

func (*EthService) SendTransaction

func (e *EthService) SendTransaction(args *SendTxArgs) (common.Hash, error)

func (*EthService) Sign

func (e *EthService) Sign(addr common.Address, data hexutil.Bytes) (hexutil.Bytes, error)

func (*EthService) SignTransaction

func (e *EthService) SignTransaction(args *SendTxArgs) (hexutil.Bytes, error)

func (*EthService) Syncing

func (e *EthService) Syncing() bool

type LogsLimits added in v1.0.3

type LogsLimits struct {
	MaxBlocksInLogsFilterRange int
	MaxLogsInResult            int
}

type NetService

type NetService struct {
	// contains filtered or unexported fields
}

func NewNetService

func NewNetService(chainID int) *NetService

func (*NetService) Listening

func (s *NetService) Listening() bool

func (*NetService) PeerCount

func (s *NetService) PeerCount() hexutil.Uint

func (*NetService) Version

func (s *NetService) Version() string

type NewBlockEvent added in v1.0.3

type NewBlockEvent struct {
	// contains filtered or unexported fields
}

type Parameters added in v1.0.3

type Parameters struct {
	Logs                                LogsLimits
	WebsocketRateLimitMessagesPerSecond int
	WebsocketRateLimitBurst             int
	WebsocketConnectionCleanupDuration  time.Duration
	WebsocketClientBlockDuration        time.Duration
}

func NewParameters added in v1.0.3

func NewParameters(
	maxBlocksInLogsFilterRange int,
	maxLogsInResult int,
	websocketRateLimitMessagesPerSecond int,
	websocketRateLimitBurst int,
	websocketConnectionCleanupDuration time.Duration,
	websocketClientBlockDuration time.Duration,
) *Parameters

func ParametersDefault added in v1.0.3

func ParametersDefault() *Parameters

type RPCCallArgs

type RPCCallArgs struct {
	From     common.Address  `json:"from"`
	To       *common.Address `json:"to"`
	Gas      *hexutil.Uint64 `json:"gas"`
	GasPrice *hexutil.Big    `json:"gasPrice"`
	Value    *hexutil.Big    `json:"value"`
	// We accept "data" and "input" for backwards-compatibility reasons. "input" is the
	// newer name and should be preferred by clients.
	Data  *hexutil.Bytes `json:"data"`
	Input *hexutil.Bytes `json:"input"`
}

type RPCFilterQuery

type RPCFilterQuery ethereum.FilterQuery

func (*RPCFilterQuery) UnmarshalJSON

func (q *RPCFilterQuery) UnmarshalJSON(data []byte) error

type RPCTransaction

type RPCTransaction struct {
	BlockHash        *common.Hash    `json:"blockHash"`
	BlockNumber      *hexutil.Big    `json:"blockNumber"`
	From             common.Address  `json:"from"`
	Gas              hexutil.Uint64  `json:"gas"`
	GasPrice         *hexutil.Big    `json:"gasPrice"`
	Hash             common.Hash     `json:"hash"`
	Input            hexutil.Bytes   `json:"input"`
	Nonce            hexutil.Uint64  `json:"nonce"`
	To               *common.Address `json:"to"`
	TransactionIndex *hexutil.Uint64 `json:"transactionIndex"`
	Value            *hexutil.Big    `json:"value"`
	V                *hexutil.Big    `json:"v"`
	R                *hexutil.Big    `json:"r"`
	S                *hexutil.Big    `json:"s"`
}

RPCTransaction represents a transaction that will serialize to the RPC representation of a transaction

type SendTxArgs

type SendTxArgs struct {
	From     common.Address  `json:"from"`
	To       *common.Address `json:"to"`
	Gas      *hexutil.Uint64 `json:"gas"`
	GasPrice *hexutil.Big    `json:"gasPrice"`
	Value    *hexutil.Big    `json:"value"`
	Nonce    *hexutil.Uint64 `json:"nonce"`
	// We accept "data" and "input" for backwards-compatibility reasons. "input" is the
	// newer name and should be preferred by clients.
	Data  *hexutil.Bytes `json:"data"`
	Input *hexutil.Bytes `json:"input"`
}

SendTxArgs represents the arguments to submit a new transaction into the transaction pool.

type TxPoolService

type TxPoolService struct{}

func NewTxPoolService

func NewTxPoolService() *TxPoolService

func (*TxPoolService) Content

func (s *TxPoolService) Content() map[string]map[string]map[string]*RPCTransaction

func (*TxPoolService) Inspect

func (s *TxPoolService) Inspect() map[string]map[string]map[string]string

func (*TxPoolService) Status

func (s *TxPoolService) Status() map[string]hexutil.Uint

type WaspEVMBackend added in v1.0.3

type WaspEVMBackend struct {
	// contains filtered or unexported fields
}

WaspEVMBackend is the implementation of ChainBackend for the production environment.

func NewWaspEVMBackend added in v1.0.3

func NewWaspEVMBackend(ch chain.Chain, nodePubKey *cryptolib.PublicKey, baseToken *parameters.BaseToken) *WaspEVMBackend

func (*WaspEVMBackend) BaseToken added in v1.0.3

func (b *WaspEVMBackend) BaseToken() *parameters.BaseToken

func (*WaspEVMBackend) EVMCall added in v1.0.3

func (b *WaspEVMBackend) EVMCall(aliasOutput *isc.AliasOutputWithID, callMsg ethereum.CallMsg) ([]byte, error)

func (*WaspEVMBackend) EVMEstimateGas added in v1.0.3

func (b *WaspEVMBackend) EVMEstimateGas(aliasOutput *isc.AliasOutputWithID, callMsg ethereum.CallMsg) (uint64, error)

func (*WaspEVMBackend) EVMSendTransaction added in v1.0.3

func (b *WaspEVMBackend) EVMSendTransaction(tx *types.Transaction) error

func (*WaspEVMBackend) EVMTraceTransaction added in v1.0.3

func (b *WaspEVMBackend) EVMTraceTransaction(
	aliasOutput *isc.AliasOutputWithID,
	blockTime time.Time,
	iscRequestsInBlock []isc.Request,
	txIndex uint64,
	tracer tracers.Tracer,
) error

func (*WaspEVMBackend) FeePolicy added in v1.0.3

func (b *WaspEVMBackend) FeePolicy(blockIndex uint32) (*gas.FeePolicy, error)

func (*WaspEVMBackend) ISCCallView added in v1.0.3

func (b *WaspEVMBackend) ISCCallView(chainState state.State, scName, funName string, args dict.Dict) (dict.Dict, error)

func (*WaspEVMBackend) ISCChainID added in v1.0.3

func (b *WaspEVMBackend) ISCChainID() *isc.ChainID

func (*WaspEVMBackend) ISCLatestAliasOutput added in v1.0.3

func (b *WaspEVMBackend) ISCLatestAliasOutput() (*isc.AliasOutputWithID, error)

func (*WaspEVMBackend) ISCLatestState added in v1.0.3

func (b *WaspEVMBackend) ISCLatestState() (state.State, error)

func (*WaspEVMBackend) ISCStateByBlockIndex added in v1.0.3

func (b *WaspEVMBackend) ISCStateByBlockIndex(blockIndex uint32) (state.State, error)

func (*WaspEVMBackend) ISCStateByTrieRoot added in v1.0.3

func (b *WaspEVMBackend) ISCStateByTrieRoot(trieRoot trie.Hash) (state.State, error)

func (*WaspEVMBackend) RevertToSnapshot added in v1.0.3

func (*WaspEVMBackend) RevertToSnapshot(int) error

func (*WaspEVMBackend) TakeSnapshot added in v1.0.3

func (*WaspEVMBackend) TakeSnapshot() (int, error)

type Web3Service

type Web3Service struct{}

func NewWeb3Service

func NewWeb3Service() *Web3Service

func (*Web3Service) ClientVersion

func (s *Web3Service) ClientVersion() string

func (*Web3Service) Sha3

func (s *Web3Service) Sha3(input hexutil.Bytes) hexutil.Bytes

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL