jsonrpc

package
v0.0.0-...-5839da9 Latest Latest
Warning

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

Go to latest
Published: Dec 2, 2022 License: Apache-2.0 Imports: 35 Imported by: 0

Documentation

Index

Constants

View Source
const (
	PendingBlockNumber  = BlockNumber(-3)
	LatestBlockNumber   = BlockNumber(-2)
	EarliestBlockNumber = BlockNumber(-1)
)
View Source
const (
	// The index in heap which is indicating the element is not in the heap
	NoIndexInHeap = -1
)

Variables

View Source
var (

	// ErrExecutionTimeout indicates the execution was terminated due to timeout
	ErrExecutionTimeout = errors.New("execution timeout")
	// ErrTraceGenesisBlock is an error returned when tracing genesis block which can't be traced
	ErrTraceGenesisBlock = errors.New("genesis is not traceable")
)
View Source
var (
	ErrFilterNotFound                   = errors.New("filter not found")
	ErrWSFilterDoesNotSupportGetChanges = errors.New("web socket Filter doesn't support to return a batch of the changes")
	ErrCastingFilterToLogFilter         = errors.New("casting filter object to logFilter error")
	ErrBlockNotFound                    = errors.New("block not found")
	ErrIncorrectBlockRange              = errors.New("incorrect range")
	ErrBlockRangeTooHigh                = errors.New("block range too high")
	ErrNoWSConnection                   = errors.New("no websocket connection")
)
View Source
var (
	ErrHeaderNotFound           = errors.New("header not found")
	ErrLatestNotFound           = errors.New("latest header not found")
	ErrNegativeBlockNumber      = errors.New("invalid argument 0: block number must not be negative")
	ErrFailedFetchGenesis       = errors.New("error fetching genesis block header")
	ErrNoDataInContractCreation = errors.New("contract creation without data provided")
)
View Source
var (
	ErrInsufficientFunds = errors.New("insufficient funds for execution")
)
View Source
var (
	ErrStateNotFound = errors.New("given root and slot not found in storage")
)

Functions

func DecodeTxn

func DecodeTxn(arg *txnArgs, store nonceGetter) (*types.Transaction, error)

func GetBlockHeader

func GetBlockHeader(number BlockNumber, store headerGetter) (*types.Header, error)

GetBlockHeader returns a header using the provided number

func GetHeaderFromBlockNumberOrHash

func GetHeaderFromBlockNumberOrHash(bnh BlockNumberOrHash, store blockGetter) (*types.Header, error)

func GetNextNonce

func GetNextNonce(address types.Address, number BlockNumber, store nonceGetter) (uint64, error)

func GetNumericBlockNumber

func GetNumericBlockNumber(number BlockNumber, store latestHeaderGetter) (uint64, error)

GetNumericBlockNumber returns block number based on current state or specified number

func GetTxAndBlockByTxHash

func GetTxAndBlockByTxHash(txHash types.Hash, store txLookupAndBlockGetter) (*types.Transaction, *types.Block)

GetTxAndBlockByTxHash returns the tx and the block including the tx by given tx hash

func NewInternalError

func NewInternalError(msg string) *internalError

func NewInvalidParamsError

func NewInvalidParamsError(msg string) *invalidParamsError

func NewInvalidRequestError

func NewInvalidRequestError(msg string) *invalidRequestError

func NewMethodNotFoundError

func NewMethodNotFoundError(method string) *methodNotFoundError

func NewSubscriptionNotFoundError

func NewSubscriptionNotFoundError(method string) *subscriptionNotFoundError

Types

type Account

type Account struct {
	Balance *big.Int
	Nonce   uint64
}

type BlockNumber

type BlockNumber int64

func (*BlockNumber) UnmarshalJSON

func (b *BlockNumber) UnmarshalJSON(buffer []byte) error

UnmarshalJSON automatically decodes the user input for the block number, when a JSON RPC method is called

type BlockNumberOrHash

type BlockNumberOrHash struct {
	BlockNumber *BlockNumber `json:"blockNumber,omitempty"`
	BlockHash   *types.Hash  `json:"blockHash,omitempty"`
}

func (*BlockNumberOrHash) UnmarshalJSON

func (bnh *BlockNumberOrHash) UnmarshalJSON(data []byte) error

UnmarshalJSON will try to extract the filter's data. Here are the possible input formats :

1 - "latest", "pending" or "earliest" - self-explaining keywords 2 - "0x2" - block number #2 (EIP-1898 backward compatible) 3 - {blockNumber: "0x2"} - EIP-1898 compliant block number #2 4 - {blockHash: "0xe0e..."} - EIP-1898 compliant block hash 0xe0e...

type Config

type Config struct {
	Store                    JSONRPCStore
	Addr                     *net.TCPAddr
	ChainID                  uint64
	ChainName                string
	AccessControlAllowOrigin []string
	PriceLimit               uint64
	BatchLengthLimit         uint64
	BlockRangeLimit          uint64
}

type ContentResponse

type ContentResponse struct {
	Pending map[types.Address]map[uint64]*txpoolTransaction `json:"pending"`
	Queued  map[types.Address]map[uint64]*txpoolTransaction `json:"queued"`
}

type Debug

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

Debug is the debug jsonrpc endpoint

func (*Debug) TraceBlock

func (d *Debug) TraceBlock(
	input string,
	config *TraceConfig,
) (interface{}, error)

func (*Debug) TraceBlockByHash

func (d *Debug) TraceBlockByHash(
	blockHash types.Hash,
	config *TraceConfig,
) (interface{}, error)

func (*Debug) TraceBlockByNumber

func (d *Debug) TraceBlockByNumber(
	blockNumber BlockNumber,
	config *TraceConfig,
) (interface{}, error)

func (*Debug) TraceCall

func (d *Debug) TraceCall(
	arg *txnArgs,
	filter BlockNumberOrHash,
	config *TraceConfig,
) (interface{}, error)

func (*Debug) TraceTransaction

func (d *Debug) TraceTransaction(
	txHash types.Hash,
	config *TraceConfig,
) (interface{}, error)

type Dispatcher

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

Dispatcher handles all json rpc requests by delegating the execution flow to the corresponding service

func (*Dispatcher) Handle

func (d *Dispatcher) Handle(reqBody []byte) ([]byte, error)

func (*Dispatcher) HandleWs

func (d *Dispatcher) HandleWs(reqBody []byte, conn wsConn) ([]byte, error)

func (*Dispatcher) RemoveFilterByWs

func (d *Dispatcher) RemoveFilterByWs(conn wsConn)

type Error

type Error interface {
	Error() string
	ErrorCode() int
}

type ErrorResponse

type ErrorResponse struct {
	JSONRPC string       `json:"jsonrpc"`
	ID      interface{}  `json:"id,omitempty"`
	Error   *ObjectError `json:"error"`
}

ErrorResponse is a jsonrpc error response

func (*ErrorResponse) Bytes

func (e *ErrorResponse) Bytes() ([]byte, error)

Bytes return the serialized response

func (*ErrorResponse) Data

func (e *ErrorResponse) Data() json.RawMessage

Data returns ObjectError

func (*ErrorResponse) GetID

func (e *ErrorResponse) GetID() interface{}

GetID returns error response id

type Eth

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

Eth is the eth jsonrpc endpoint

func (*Eth) BlockNumber

func (e *Eth) BlockNumber() (interface{}, error)

BlockNumber returns current block number

func (*Eth) Call

func (e *Eth) Call(arg *txnArgs, filter BlockNumberOrHash) (interface{}, error)

Call executes a smart contract call using the transaction object data

func (*Eth) ChainId

func (e *Eth) ChainId() (interface{}, error)

ChainId returns the chain id of the client

func (*Eth) EstimateGas

func (e *Eth) EstimateGas(arg *txnArgs, rawNum *BlockNumber) (interface{}, error)

EstimateGas estimates the gas needed to execute a transaction

func (*Eth) GasPrice

func (e *Eth) GasPrice() (interface{}, error)

GasPrice returns the average gas price based on the last x blocks taking into consideration operator defined price limit

func (*Eth) GetBalance

func (e *Eth) GetBalance(address types.Address, filter BlockNumberOrHash) (interface{}, error)

GetBalance returns the account's balance at the referenced block.

func (*Eth) GetBlockByHash

func (e *Eth) GetBlockByHash(hash types.Hash, fullTx bool) (interface{}, error)

GetBlockByHash returns information about a block by hash

func (*Eth) GetBlockByNumber

func (e *Eth) GetBlockByNumber(number BlockNumber, fullTx bool) (interface{}, error)

GetBlockByNumber returns information about a block by block number

func (*Eth) GetBlockTransactionCountByNumber

func (e *Eth) GetBlockTransactionCountByNumber(number BlockNumber) (interface{}, error)

func (*Eth) GetCode

func (e *Eth) GetCode(address types.Address, filter BlockNumberOrHash) (interface{}, error)

GetCode returns account code at given block number

func (*Eth) GetFilterChanges

func (e *Eth) GetFilterChanges(id string) (interface{}, error)

GetFilterChanges is a polling method for a filter, which returns an array of logs which occurred since last poll.

func (*Eth) GetFilterLogs

func (e *Eth) GetFilterLogs(id string) (interface{}, error)

GetFilterLogs returns an array of logs for the specified filter

func (*Eth) GetLogs

func (e *Eth) GetLogs(query *LogQuery) (interface{}, error)

GetLogs returns an array of logs matching the filter options

func (*Eth) GetStorageAt

func (e *Eth) GetStorageAt(
	address types.Address,
	index types.Hash,
	filter BlockNumberOrHash,
) (interface{}, error)

GetStorageAt returns the contract storage at the index position

func (*Eth) GetTransactionByHash

func (e *Eth) GetTransactionByHash(hash types.Hash) (interface{}, error)

GetTransactionByHash returns a transaction by its hash. If the transaction is still pending -> return the txn with some fields omitted If the transaction is sealed into a block -> return the whole txn with all fields

func (*Eth) GetTransactionCount

func (e *Eth) GetTransactionCount(address types.Address, filter BlockNumberOrHash) (interface{}, error)

GetTransactionCount returns account nonce

func (*Eth) GetTransactionReceipt

func (e *Eth) GetTransactionReceipt(hash types.Hash) (interface{}, error)

GetTransactionReceipt returns a transaction receipt by his hash

func (*Eth) NewBlockFilter

func (e *Eth) NewBlockFilter() (interface{}, error)

NewBlockFilter creates a filter in the node, to notify when a new block arrives

func (*Eth) NewFilter

func (e *Eth) NewFilter(filter *LogQuery) (interface{}, error)

NewFilter creates a filter object, based on filter options, to notify when the state changes (logs).

func (*Eth) SendRawTransaction

func (e *Eth) SendRawTransaction(buf argBytes) (interface{}, error)

SendRawTransaction sends a raw transaction

func (*Eth) SendTransaction

func (e *Eth) SendTransaction(_ *txnArgs) (interface{}, error)

SendTransaction rejects eth_sendTransaction json-rpc call as we don't support wallet management

func (*Eth) Syncing

func (e *Eth) Syncing() (interface{}, error)

func (*Eth) UninstallFilter

func (e *Eth) UninstallFilter(id string) (bool, error)

UninstallFilter uninstalls a filter with given ID

func (*Eth) Unsubscribe

func (e *Eth) Unsubscribe(id string) (bool, error)

Unsubscribe uninstalls a filter in a websocket

type FilterManager

type FilterManager struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

FilterManager manages all running filters

func NewFilterManager

func NewFilterManager(logger hclog.Logger, store filterManagerStore, blockRangeLimit uint64) *FilterManager

func (*FilterManager) Close

func (f *FilterManager) Close()

Close closed closeCh so that terminate worker

func (*FilterManager) Exists

func (f *FilterManager) Exists(id string) bool

Exists checks the filter with given ID exists

func (*FilterManager) GetFilterChanges

func (f *FilterManager) GetFilterChanges(id string) (interface{}, error)

GetFilterChanges returns the updates of the filter with given ID in string, and refreshes the timeout on the filter

func (*FilterManager) GetLogFilterFromID

func (f *FilterManager) GetLogFilterFromID(filterID string) (*logFilter, error)

GetLogFilterFromID return log filter for given filterID

func (*FilterManager) GetLogsForQuery

func (f *FilterManager) GetLogsForQuery(query *LogQuery) ([]*Log, error)

GetLogsForQuery return array of logs for given query

func (*FilterManager) NewBlockFilter

func (f *FilterManager) NewBlockFilter(ws wsConn) string

NewBlockFilter adds new BlockFilter

func (*FilterManager) NewLogFilter

func (f *FilterManager) NewLogFilter(logQuery *LogQuery, ws wsConn) string

NewLogFilter adds new LogFilter

func (*FilterManager) RemoveFilterByWs

func (f *FilterManager) RemoveFilterByWs(ws wsConn)

RemoveFilterByWs removes the filter with given WS [Thread safe]

func (*FilterManager) Run

func (f *FilterManager) Run()

Run starts worker process to handle events

func (*FilterManager) Uninstall

func (f *FilterManager) Uninstall(id string) bool

Uninstall removes the filter with given ID from list

type GetResponse

type GetResponse struct {
	Name    string `json:"name"`
	ChainID uint64 `json:"chain_id"`
	Version string `json:"version"`
}

type InspectResponse

type InspectResponse struct {
	Pending         map[string]map[string]string `json:"pending"`
	Queued          map[string]map[string]string `json:"queued"`
	CurrentCapacity uint64                       `json:"currentCapacity"`
	MaxCapacity     uint64                       `json:"maxCapacity"`
}

type JSONRPC

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

JSONRPC is an API consensus

func NewJSONRPC

func NewJSONRPC(logger hclog.Logger, config *Config) (*JSONRPC, error)

NewJSONRPC returns the JSONRPC http server

type JSONRPCStore

type JSONRPCStore interface {
	// contains filtered or unexported methods
}

JSONRPCStore defines all the methods required by all the JSON RPC endpoints

type Log

type Log struct {
	Address     types.Address `json:"address"`
	Topics      []types.Hash  `json:"topics"`
	Data        argBytes      `json:"data"`
	BlockNumber argUint64     `json:"blockNumber"`
	TxHash      types.Hash    `json:"transactionHash"`
	TxIndex     argUint64     `json:"transactionIndex"`
	BlockHash   types.Hash    `json:"blockHash"`
	LogIndex    argUint64     `json:"logIndex"`
	Removed     bool          `json:"removed"`
}

type LogQuery

type LogQuery struct {
	BlockHash *types.Hash

	Addresses []types.Address
	Topics    [][]types.Hash
	// contains filtered or unexported fields
}

LogQuery is a query to filter logs

func (*LogQuery) Match

func (q *LogQuery) Match(log *types.Log) bool

Match returns whether the receipt includes topics for this filter

func (*LogQuery) UnmarshalJSON

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

UnmarshalJSON decodes a json object

type Net

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

Net is the net jsonrpc endpoint

func (*Net) Listening

func (n *Net) Listening() (interface{}, error)

Listening returns true if client is actively listening for network connections

func (*Net) PeerCount

func (n *Net) PeerCount() (interface{}, error)

PeerCount returns number of peers currently connected to the client

func (*Net) Version

func (n *Net) Version() (interface{}, error)

Version returns the current network id

type ObjectError

type ObjectError struct {
	Code    int         `json:"code"`
	Message string      `json:"message"`
	Data    interface{} `json:"data,omitempty"`
}

ObjectError is a jsonrpc error

func (*ObjectError) Error

func (e *ObjectError) Error() string

Error implements error interface

type Request

type Request struct {
	ID     interface{}     `json:"id"`
	Method string          `json:"method"`
	Params json.RawMessage `json:"params,omitempty"`
}

Request is a jsonrpc request

type Response

type Response interface {
	GetID() interface{}
	Data() json.RawMessage
	Bytes() ([]byte, error)
}

Response is a jsonrpc response interface

func NewRPCErrorResponse

func NewRPCErrorResponse(id interface{}, errCode int, err string, jsonrpcver string) Response

NewRPCErrorResponse is used to create a custom error response

func NewRPCResponse

func NewRPCResponse(id interface{}, jsonrpcver string, reply []byte, err Error) Response

NewRPCResponse returns Success/Error response object

type StatusResponse

type StatusResponse struct {
	Pending uint64 `json:"pending"`
	Queued  uint64 `json:"queued"`
}

type SuccessResponse

type SuccessResponse struct {
	JSONRPC string          `json:"jsonrpc"`
	ID      interface{}     `json:"id"`
	Result  json.RawMessage `json:"result"`
	Error   *ObjectError    `json:"error,omitempty"`
}

SuccessResponse is a jsonrpc success response

func (*SuccessResponse) Bytes

func (s *SuccessResponse) Bytes() ([]byte, error)

Bytes return the serialized response

func (*SuccessResponse) Data

func (s *SuccessResponse) Data() json.RawMessage

Data returns the result

func (*SuccessResponse) GetID

func (s *SuccessResponse) GetID() interface{}

GetID returns success response id

type TraceConfig

type TraceConfig struct {
	EnableMemory     bool    `json:"enableMemory"`
	DisableStack     bool    `json:"disableStack"`
	DisableStorage   bool    `json:"disableStorage"`
	EnableReturnData bool    `json:"enableReturnData"`
	Timeout          *string `json:"timeout"`
}

type TxPool

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

TxPool is the txpool jsonrpc endpoint

func (*TxPool) Content

func (t *TxPool) Content() (interface{}, error)

Create response for txpool_content request. See https://geth.ethereum.org/docs/rpc/ns-txpool#txpool_content.

func (*TxPool) Inspect

func (t *TxPool) Inspect() (interface{}, error)

Create response for txpool_inspect request. See https://geth.ethereum.org/docs/rpc/ns-txpool#txpool_inspect.

func (*TxPool) Status

func (t *TxPool) Status() (interface{}, error)

Create response for txpool_status request. See https://geth.ethereum.org/docs/rpc/ns-txpool#txpool_status.

type Web3

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

Web3 is the web3 jsonrpc endpoint

func (*Web3) ClientVersion

func (w *Web3) ClientVersion() (interface{}, error)

ClientVersion returns the version of the web3 client (web3_clientVersion)

func (*Web3) Sha3

func (w *Web3) Sha3(v argBytes) (interface{}, error)

Sha3 returns Keccak-256 (not the standardized SHA3-256) of the given data

Jump to

Keyboard shortcuts

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