jsonrpc

package
v0.7.0-alpha.16 Latest Latest
Warning

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

Go to latest
Published: Aug 29, 2023 License: Apache-2.0 Imports: 56 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,
) (*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 RPCMarshalLog

func RPCMarshalLog(r *types.Receipt, logIndex uint) map[string]interface{}

func RPCMarshalLogs

func RPCMarshalLogs(r *types.Receipt) []interface{}

func RPCMarshalReceipt

func RPCMarshalReceipt(r *types.Receipt, tx *types.Transaction) 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
	ISCChainID() *isc.ChainID
	ISCCallView(chainState state.State, scName string, funName string, args dict.Dict) (dict.Dict, error)
	ISCLatestAliasOutput() (*isc.AliasOutputWithID, error)
	ISCLatestState() state.State
	ISCStateByBlockIndex(blockIndex uint32) (state.State, error)
	ISCStateByTrieRoot(trieRoot trie.Hash) (state.State, error)
	BaseToken() *parameters.BaseToken
}

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) ([]*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 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) *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)

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 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 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"`
	Data     *hexutil.Bytes  `json:"data"`
}

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) EVMGasRatio

func (b *WaspEVMBackend) EVMGasRatio() (util.Ratio32, 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) 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

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)

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