ethreceipts

package
v1.24.12 Latest Latest
Warning

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

Go to latest
Published: Apr 26, 2024 License: LGPL-3.0, MIT Imports: 24 Imported by: 3

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrFilterMatch        = errors.New("ethreceipts: filter match fail")
	ErrFilterCond         = errors.New("ethreceipts: missing filter condition")
	ErrFilterExhausted    = errors.New("ethreceipts: filter exhausted after maxWait blocks")
	ErrSubscriptionClosed = errors.New("ethreceipts: subscription closed")
)
View Source
var DefaultOptions = Options{
	MaxConcurrentFetchReceiptWorkers: 100,
	MaxConcurrentFilterWorkers:       50,
	PastReceiptsCacheSize:            5_000,
	NumBlocksToFinality:              0,
	FilterMaxWaitNumBlocks:           0,
	Alerter:                          util.NoopAlerter(),
}

Functions

This section is empty.

Types

type FilterCond

type FilterCond struct {
	TxnHash  *ethkit.Hash
	From     *ethkit.Address
	To       *ethkit.Address
	LogTopic *ethkit.Hash // event signature topic hash
	Logs     func([]*types.Log) bool
}

type FilterOptions

type FilterOptions struct {
	// ..
	ID uint64

	// ..
	Finalize bool

	// .
	LimitOne bool

	// ..
	SearchCache bool

	// SearchOnChain will search for txn hash on-chain. This is only useful
	// when used in combination with TxnHash filter cond.
	SearchOnChain bool

	// MaxWait filter option waits some number of blocks without a filter match after
	// which point will auto-unsubscribe the filter. This is useful to help automatically
	// remove filters which likely won't come up.
	//
	// nil : use the ReceiptsListener option FilterMaxWaitNumBlocks value as the default
	// -1  : set value to ReceiptsListener option NumFinality * 3
	// 0   : option is disabled, and has no limit on wait. filters need to be manually unsubscribed
	// N   : a specified number of blocks without a match before unsusbcribe
	MaxWait *int
}

type FilterQuery

type FilterQuery interface {
	ID(uint64) FilterQuery
	Finalize(bool) FilterQuery
	LimitOne(bool) FilterQuery
	SearchCache(bool) FilterQuery
	SearchOnChain(bool) FilterQuery
	MaxWait(int) FilterQuery
}

func FilterFrom

func FilterFrom(from ethkit.Address) FilterQuery

Filter the transaction payload for "from" address.

func FilterLogContract

func FilterLogContract(contractAddress ethkit.Address) FilterQuery

Filter the logs of a transaction and search for an event log from a specific contract address.

func FilterLogTopic

func FilterLogTopic(eventTopicHash ethkit.Hash) FilterQuery

Filter the log topics for a transaction

func FilterLogs added in v1.17.6

func FilterLogs(logFn func([]*types.Log) bool) FilterQuery

Filter logs of a transaction

func FilterTo

func FilterTo(to ethkit.Address) FilterQuery

Filter the transaction payload for "to" address.

func FilterTxnHash

func FilterTxnHash(txnHash ethkit.Hash) FilterQuery

Filter the transaction payload for specific txn "hash"

type Filterer

type Filterer interface {
	FilterQuery

	FilterID() uint64
	Options() FilterOptions
	Cond() FilterCond

	Match(ctx context.Context, receipt Receipt) (bool, error)
	StartBlockNum() uint64
	LastMatchBlockNum() uint64
	Exhausted() <-chan struct{}
}

type Options

type Options struct {
	// ..
	MaxConcurrentFetchReceiptWorkers int

	// ..
	MaxConcurrentFilterWorkers int

	// ..
	PastReceiptsCacheSize int

	// ..
	NumBlocksToFinality int

	// FilterMaxWaitNumBlocks is the maximum amount of blocks a filter will wait between getting
	// a receipt filter match, before the filter will unsubscribe itself and stop listening.
	// This value may be overriden by setting FilterCond#MaxListenNumBlocks on per-filter basis.
	//
	// NOTE:
	// * value of -1 will use NumBlocksToFinality*2
	// * value of 0 will set no limit, so filter will always listen [default]
	// * value of N will set the N number of blocks without results before unsubscribing between iterations
	FilterMaxWaitNumBlocks int

	// Alerter config via github.com/goware/alerter
	Alerter util.Alerter
}

type Receipt

type Receipt struct {
	Filter  Filterer // reference to filter which triggered this event
	Final   bool     // flags that this receipt is finalized
	Reorged bool     // chain reorged / removed the txn
	// contains filtered or unexported fields
}

func (*Receipt) BlockHash

func (r *Receipt) BlockHash() ethkit.Hash

func (*Receipt) BlockNumber

func (r *Receipt) BlockNumber() *big.Int

func (*Receipt) Bloom

func (r *Receipt) Bloom() types.Bloom

func (*Receipt) CumulativeGasUsed

func (r *Receipt) CumulativeGasUsed() uint64

func (*Receipt) DeployedContractAddress

func (r *Receipt) DeployedContractAddress() common.Address

DeployedContractAddress returns the address if this receipt is related to a contract deployment.

func (*Receipt) EffectiveGasPrice

func (r *Receipt) EffectiveGasPrice() *big.Int

func (*Receipt) FilterID

func (r *Receipt) FilterID() uint64

func (*Receipt) From

func (r *Receipt) From() common.Address

func (*Receipt) GasUsed

func (r *Receipt) GasUsed() uint64

func (*Receipt) Logs

func (r *Receipt) Logs() []*types.Log

func (*Receipt) Receipt

func (r *Receipt) Receipt() *types.Receipt

func (*Receipt) Root

func (r *Receipt) Root() []byte

func (*Receipt) Status

func (r *Receipt) Status() uint64

func (*Receipt) To

func (r *Receipt) To() common.Address

func (*Receipt) TransactionHash

func (r *Receipt) TransactionHash() ethkit.Hash

func (*Receipt) TransactionIndex

func (r *Receipt) TransactionIndex() uint

func (*Receipt) Type

func (r *Receipt) Type() uint8

type ReceiptsListener added in v1.18.0

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

func NewReceiptsListener added in v1.18.0

func NewReceiptsListener(log logger.Logger, provider ethrpc.Interface, monitor *ethmonitor.Monitor, options ...Options) (*ReceiptsListener, error)

func (*ReceiptsListener) FetchTransactionReceipt added in v1.18.0

func (l *ReceiptsListener) FetchTransactionReceipt(ctx context.Context, txnHash common.Hash, optMaxBlockWait ...int) (*Receipt, WaitReceiptFinalityFunc, error)

func (*ReceiptsListener) FetchTransactionReceiptWithFilter added in v1.18.0

func (l *ReceiptsListener) FetchTransactionReceiptWithFilter(ctx context.Context, filter FilterQuery) (*Receipt, WaitReceiptFinalityFunc, error)

func (*ReceiptsListener) IsRunning added in v1.18.0

func (l *ReceiptsListener) IsRunning() bool

func (*ReceiptsListener) NumSubscribers added in v1.19.4

func (l *ReceiptsListener) NumSubscribers() int

func (*ReceiptsListener) PurgeHistory added in v1.18.0

func (l *ReceiptsListener) PurgeHistory()

func (*ReceiptsListener) Run added in v1.18.0

func (l *ReceiptsListener) Run(ctx context.Context) error

func (*ReceiptsListener) Stop added in v1.18.0

func (l *ReceiptsListener) Stop()

func (*ReceiptsListener) Subscribe added in v1.18.0

func (l *ReceiptsListener) Subscribe(filterQueries ...FilterQuery) Subscription

type Subscription

type Subscription interface {
	TransactionReceipt() <-chan Receipt
	Done() <-chan struct{}
	Unsubscribe()

	Filters() []Filterer
	AddFilter(filters ...FilterQuery)
	RemoveFilter(filter Filterer)
	ClearFilters()
}

type WaitReceiptFinalityFunc

type WaitReceiptFinalityFunc func(ctx context.Context) (*Receipt, error)

Jump to

Keyboard shortcuts

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