ethrpc

package module
v0.2.7 Latest Latest
Warning

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

Go to latest
Published: Mar 3, 2025 License: MIT Imports: 14 Imported by: 0

README

GoDoc

ethrpc

Simple go lib to make RPC calls to Ethereum-like nodes easy

Example use

    target := ethrpc.New("https://cloudflare-eth.com")
    currentBlockNo, err := ethrpc.ReadUint64(target.Do("eth_blockNumber"))

TODO

  • Support websocket

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNoAvailableServer = errors.New("no available server")
)

Functions

func ReadAs added in v0.2.5

func ReadAs[T any](v json.RawMessage, e error) (T, error)

func ReadBigInt added in v0.1.1

func ReadBigInt(v json.RawMessage, e error) (*big.Int, error)

ReadBigInt can decode a json-encoded bigint in various ways, including if it is a number literal or a string.

func ReadString

func ReadString(v json.RawMessage, e error) (string, error)

ReadString decodes the return value as a string and returns it

func ReadTo

func ReadTo(target any) func(v json.RawMessage, e error) error

ReadTo returns a setter function that will return an error if an error happens. This is a bit convoluted because of limitation in Go's syntax, but this could be used as:

err = ReadTo(&block)(target.Do("eth_getBlockByNumber", "0x1b4", true))

func ReadUint64

func ReadUint64(v json.RawMessage, e error) (uint64, error)

ReadUint64 decodes the return value and passes it as a uint64.

This can be used as: res, err := ReadUint64(target.Do("eth_blockNumber"))

Types

type Api added in v0.1.4

type Api struct {
	Handler
}

func (*Api) BlockNumber added in v0.1.4

func (a *Api) BlockNumber(ctx context.Context) (uint64, error)

func (*Api) ChainId added in v0.1.4

func (a *Api) ChainId(ctx context.Context) (uint64, error)

func (*Api) Do added in v0.1.4

func (a *Api) Do(method string, args ...any) (json.RawMessage, error)

func (*Api) To added in v0.1.4

func (a *Api) To(target any, method string, args ...any) error

func (*Api) ToCtx added in v0.1.4

func (a *Api) ToCtx(ctx context.Context, target any, method string, args ...any) error

type ErrorObject added in v0.1.6

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

func (*ErrorObject) Error added in v0.1.6

func (e *ErrorObject) Error() string

type ForwardOptions added in v0.1.7

type ForwardOptions struct {
	Pretty bool
	Cache  time.Duration
}

type Handler added in v0.1.4

type Handler interface {
	DoCtx(ctx context.Context, method string, args ...any) (json.RawMessage, error)
}

func Evaluate added in v0.1.4

func Evaluate(ctx context.Context, servers ...string) (Handler, error)

Evaluate will call the various servers in the list and return a list of servers that work (if any)

This will send a eth_blockNumber request to all the servers and measure the response time

type RPC

type RPC struct {
	HTTPClient *http.Client
	// contains filtered or unexported fields
}

TODO support ws protocol

func New

func New(h string) *RPC

New returns a new instance of RPC to perform requests to the given RPC endpoint

func (*RPC) Do

func (r *RPC) Do(method string, args ...any) (json.RawMessage, error)

Do performs a RPC request

func (*RPC) DoCtx

func (r *RPC) DoCtx(ctx context.Context, method string, args ...any) (json.RawMessage, error)

DoCtx performs a RPC request, taking an optional context that can be cancelled to stop the request

func (*RPC) DoNamed added in v0.2.6

func (r *RPC) DoNamed(method string, args map[string]any) (json.RawMessage, error)

DoNamed performs a RPC request using named arguments

func (*RPC) DoNamedCtx added in v0.2.6

func (r *RPC) DoNamedCtx(ctx context.Context, method string, args map[string]any) (json.RawMessage, error)

DoNamedCtx performs a RPC request using named arguments, taking an optional context that can be cancelled to stop the request

func (*RPC) Forward added in v0.1.7

func (r *RPC) Forward(ctx context.Context, rw http.ResponseWriter, req *Request, opts *ForwardOptions)

Forward will write the RPC response to the given http.ResponseWriter.

func (*RPC) Override added in v0.2.0

func (r *RPC) Override(method string, fnc any)

Override allows redirecting calls to a RPC method to a standard go function

func (*RPC) Send added in v0.1.6

func (r *RPC) Send(req *Request) (json.RawMessage, error)

Send sends a raw request for processing

func (*RPC) SendCtx added in v0.1.6

func (r *RPC) SendCtx(ctx context.Context, req *Request) (json.RawMessage, error)

func (*RPC) SetBasicAuth added in v0.1.9

func (r *RPC) SetBasicAuth(username, password string)

SetBasicAuth sets basic auth params for all subsequent RPC requests

func (*RPC) To

func (r *RPC) To(target any, method string, args ...any) error

To performs the request and puts the result into target

type RPCList added in v0.1.4

type RPCList []*RPC

func (RPCList) DoCtx added in v0.1.4

func (r RPCList) DoCtx(ctx context.Context, method string, args ...any) (json.RawMessage, error)

type Request added in v0.1.6

type Request struct {
	JsonRpc string `json:"jsonrpc"` // 2.0
	Method  string `json:"method"`
	Params  any    `json:"params"`
	Id      any    `json:"id"`
}

func NewRequest added in v0.1.6

func NewRequest(method string, params ...any) *Request

NewRequest makes a new Request fit to use with methods like Send.

func (*Request) HTTPRequest added in v0.1.6

func (req *Request) HTTPRequest(ctx context.Context, host string) (*http.Request, error)

HTTPRequest returns a http.Request for the given json-rpc request.

type Response added in v0.1.6

type Response struct {
	JsonRpc string          `json:"jsonrpc"` // 2.0
	Result  json.RawMessage `json:"result"`
	Error   *ErrorObject    `json:"error,omitempty"`
	Id      any             `json:"id"`
}

type ResponseIntf added in v0.1.6

type ResponseIntf struct {
	JsonRpc string       `json:"jsonrpc"` // 2.0
	Result  any          `json:"result"`
	Error   *ErrorObject `json:"error,omitempty"`
	Id      any          `json:"id"`
}

RPCResponseIntf is same as rpcResponse except Result is a any

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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