eth

package
v0.9.2 Latest Latest
Warning

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

Go to latest
Published: Oct 15, 2020 License: MIT Imports: 23 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func IsParityQueriedReceiptTooEarly added in v0.9.0

func IsParityQueriedReceiptTooEarly(e error) bool

Parity can return partially hydrated Log entries if you query a receipt while the transaction is still in the mempool. Go-ethereum's built-in client raises an error since this is a required field. There is no easy way to ignore the error or pass in a custom struct, so we use this hack to detect it instead.

func MustGetV6ContractEventID added in v0.8.8

func MustGetV6ContractEventID(name, eventName string) common.Hash

MustGetV6ContractEventID finds the event for the given contract by searching embedded contract assets from evm/, or panics if not found.

func NewClient added in v0.8.13

func NewClient(rpcUrl string, secondaryRPCURLs ...string) (*client, error)

func NewClientWith added in v0.8.13

func NewClientWith(rpcClient RPCClient, gethClient GethClient) *client

This alternate constructor exists for testing purposes.

Types

type CallArgs added in v0.8.8

type CallArgs struct {
	To   common.Address `json:"to"`
	Data hexutil.Bytes  `json:"data"`
}

CallArgs represents the data used to call the balance method of a contract. "To" is the address of the ERC contract. "Data" is the message sent to the contract.

type Client added in v0.8.8

type Client interface {
	GethClient

	Dial(ctx context.Context) error
	Close()

	GetERC20Balance(address common.Address, contractAddress common.Address) (*big.Int, error)
	SendRawTx(bytes []byte) (common.Hash, error)
	Call(result interface{}, method string, args ...interface{}) error
	CallContext(ctx context.Context, result interface{}, method string, args ...interface{}) error

	// These methods are reimplemented due to a difference in how block header hashes are
	// calculated by Parity nodes running on Kovan.  We have to return our own wrapper
	// type to capture the correct hash from the RPC response.
	HeaderByNumber(ctx context.Context, n *big.Int) (*models.Head, error)
	SubscribeNewHead(ctx context.Context, ch chan<- *models.Head) (ethereum.Subscription, error)
}

Client is the interface used to interact with an ethereum node.

type ConnectedContract

type ConnectedContract interface {
	ContractCodec
	Call(result interface{}, methodName string, args ...interface{}) error
	SubscribeToLogs(listener LogListener) (connected bool, _ UnsubscribeFunc)
}

func NewConnectedContract

func NewConnectedContract(
	codec ContractCodec,
	address common.Address,
	ethClient Client,
	logBroadcaster LogBroadcaster,
) ConnectedContract

type ContractCodec added in v0.8.8

type ContractCodec interface {
	ABI() *abi.ABI
	GetMethodID(method string) ([]byte, error)
	EncodeMessageCall(method string, args ...interface{}) ([]byte, error)
	UnpackLog(out interface{}, event string, log types.Log) error
}

func GetContractCodec added in v0.8.8

func GetContractCodec(name string) (ContractCodec, error)

GetContract loads the contract JSON file from ../../evm-contracts/abi/v0.4 and parses the ABI JSON contents into an abi.ABI object

NB: These contracts can be built by running

yarn setup:contracts

in the base project directory.

func GetV6ContractCodec added in v0.8.8

func GetV6ContractCodec(name string) (ContractCodec, error)

GetV6Contract loads the contract JSON file from ../../evm-contracts/abi/v0.6 and parses the ABI JSON contents into an abi.ABI object

NB: These contracts can be built by running

yarn setup:contracts

in the base project directory.

type GethClient added in v0.8.8

type GethClient interface {
	ChainID(ctx context.Context) (*big.Int, error)
	SendTransaction(ctx context.Context, tx *types.Transaction) error
	PendingCodeAt(ctx context.Context, account common.Address) ([]byte, error)
	PendingNonceAt(ctx context.Context, account common.Address) (uint64, error)
	TransactionReceipt(ctx context.Context, txHash common.Hash) (*types.Receipt, error)
	BlockByNumber(ctx context.Context, number *big.Int) (*types.Block, error)
	BalanceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (*big.Int, error)
	FilterLogs(ctx context.Context, q ethereum.FilterQuery) ([]types.Log, error)
	SubscribeFilterLogs(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) (ethereum.Subscription, error)
	EstimateGas(ctx context.Context, call ethereum.CallMsg) (gas uint64, err error)
	SuggestGasPrice(ctx context.Context) (*big.Int, error)
	CallContract(ctx context.Context, msg ethereum.CallMsg, blockNumber *big.Int) ([]byte, error)
	CodeAt(ctx context.Context, account common.Address, blockNumber *big.Int) ([]byte, error)
}

GethClient is an interface that represents go-ethereum's own ethclient https://github.com/ethereum/go-ethereum/blob/master/ethclient/ethclient.go

type LogBroadcast added in v0.8.3

type LogBroadcast interface {
	DecodedLog() interface{}
	RawLog() types.Log
	SetDecodedLog(interface{})
	WasAlreadyConsumed() (bool, error)
	MarkConsumed() error
}

The LogBroadcast type wraps an models.Log but provides additional functionality for determining whether or not the log has been consumed and for marking the log as consumed

type LogBroadcaster

type LogBroadcaster interface {
	utils.DependentAwaiter
	Start() error
	Register(address common.Address, listener LogListener) (connected bool)
	Unregister(address common.Address, listener LogListener)
	Stop()
}

The LogBroadcaster manages log subscription requests for the Chainlink node. Instead of creating a new websocket subscription for each request, it multiplexes all subscriptions to all of the relevant contracts over a single connection and forwards the logs to the relevant subscribers.

func NewLogBroadcaster

func NewLogBroadcaster(ethClient Client, orm ormInterface, backfillDepth uint64) LogBroadcaster

NewLogBroadcaster creates a new instance of the logBroadcaster

type LogListener

type LogListener interface {
	OnConnect()
	OnDisconnect()
	HandleLog(lb LogBroadcast, err error)
	JobID() *models.ID
}

The LogListener responds to log events through HandleLog, and contains setup/tear-down callbacks in the On* functions.

func NewDecodingLogListener

func NewDecodingLogListener(codec ContractCodec, nativeLogTypes map[common.Hash]interface{}, innerListener LogListener) LogListener

NewDecodingLogListener creates a new decodingLogListener

type MaybeHeader added in v0.8.13

type MaybeHeader struct {
	Header models.Head
	Error  error
}

type RPCClient added in v0.8.9

type RPCClient interface {
	Call(result interface{}, method string, args ...interface{}) error
	CallContext(ctx context.Context, result interface{}, method string, args ...interface{}) error
	BatchCallContext(ctx context.Context, b []rpc.BatchElem) error
	EthSubscribe(ctx context.Context, channel interface{}, args ...interface{}) (ethereum.Subscription, error)
	Close()
}

RPCClient is an interface that represents go-ethereum's own rpc.Client. https://github.com/ethereum/go-ethereum/blob/master/rpc/client.go

type SendError added in v0.9.0

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

fatal means this transaction can never be accepted even with a different nonce or higher gas price

func NewFatalSendError added in v0.9.0

func NewFatalSendError(e error) *SendError

func NewFatalSendErrorS added in v0.9.0

func NewFatalSendErrorS(s string) *SendError

func NewSendError added in v0.9.0

func NewSendError(e error) *SendError

func NewSendErrorS added in v0.9.0

func NewSendErrorS(s string) *SendError

func (*SendError) Error added in v0.9.0

func (s *SendError) Error() string

func (*SendError) Fatal added in v0.9.0

func (s *SendError) Fatal() bool

Fatal indicates whether the error should be considered fatal or not Fatal errors mean that no matter how many times the send is retried, no node will ever accept it

func (*SendError) IsInsufficientEth added in v0.9.0

func (s *SendError) IsInsufficientEth() bool

func (*SendError) IsNonceTooLowError added in v0.9.0

func (s *SendError) IsNonceTooLowError() bool

func (*SendError) IsReplacementUnderpriced added in v0.9.0

func (s *SendError) IsReplacementUnderpriced() bool

IsReplacementUnderpriced indicates that a transaction already exists in the mempool with this nonce but a different gas price or payload

func (*SendError) IsTemporarilyUnderpriced added in v0.9.0

func (s *SendError) IsTemporarilyUnderpriced() bool

func (*SendError) IsTerminallyUnderpriced added in v0.9.0

func (s *SendError) IsTerminallyUnderpriced() bool

IsTerminallyUnderpriced indicates that this transaction is so far underpriced the node won't even accept it in the first place

func (*SendError) IsTransactionAlreadyInMempool added in v0.9.0

func (s *SendError) IsTransactionAlreadyInMempool() bool

Geth/parity returns this error if the transaction is already in the node's mempool

func (*SendError) StrPtr added in v0.9.0

func (s *SendError) StrPtr() *string

type Subscription added in v0.8.8

type Subscription interface {
	Err() <-chan error
	Unsubscribe()
}

This interface only exists so that we can generate a mock for it. It is identical to `ethereum.Subscription`.

type UnsubscribeFunc

type UnsubscribeFunc func()

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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