Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client interface { HeaderByNumber(number *big.Int) (*meshdb.MiniHeader, error) HeaderByHash(hash common.Hash) (*meshdb.MiniHeader, error) FilterLogs(q ethereum.FilterQuery) ([]types.Log, error) }
Client defines the methods needed to satisfy the client expected when instantiating a Watcher instance.
type Config ¶
type Config struct { MeshDB *meshdb.MeshDB PollingInterval time.Duration StartBlockDepth rpc.BlockNumber BlockRetentionLimit int WithLogs bool Topics []common.Hash Client Client }
Config holds some configuration options for an instance of BlockWatcher.
type Event ¶
type Event struct { Type EventType BlockHeader *meshdb.MiniHeader }
Event describes a block event emitted by a Watcher
type EventType ¶
type EventType int
EventType describes the types of events emitted by blockwatch.Watcher. A block can be discovered and added to our representation of the chain. During a block re-org, a block previously stored can be removed from the list.
type RpcClient ¶
type RpcClient struct {
// contains filtered or unexported fields
}
RpcClient is a Client for fetching Ethereum blocks from a specific JSON-RPC endpoint.
func NewRpcClient ¶
NewRpcClient returns a new Client for fetching Ethereum blocks using the given ethclient.Client.
func (*RpcClient) FilterLogs ¶
FilterLogs returns the logs that satisfy the supplied filter query.
func (*RpcClient) HeaderByHash ¶
HeaderByHash fetches a block header by its block hash. If no block exists with this number it will return a `ethereum.NotFound` error.
func (*RpcClient) HeaderByNumber ¶
HeaderByNumber fetches a block header by its number. If no `number` is supplied, it will return the latest block header. If no block exists with this number it will return a `ethereum.NotFound` error.
type Stack ¶
type Stack struct {
// contains filtered or unexported fields
}
Stack allows performing basic stack operations on a stack of meshdb.MiniHeaders.
func NewStack ¶
NewStack instantiates a new stack with the specified size limit. Once the size limit is reached, adding additional blocks will evict the deepest block.
func (*Stack) Inspect ¶
func (s *Stack) Inspect() ([]*meshdb.MiniHeader, error)
Inspect returns all the block headers currently on the stack
func (*Stack) Peek ¶
func (s *Stack) Peek() (*meshdb.MiniHeader, error)
Peek returns the latest block header from the block stack without removing it. It returns nil if the stack is empty.
type Watcher ¶
type Watcher struct { Errors chan error // contains filtered or unexported fields }
Watcher maintains a consistent representation of the latest `blockRetentionLimit` blocks, handling block re-orgs and network disruptions gracefully. It can be started from any arbitrary block height, and will emit both block added and removed events.
func (*Watcher) InspectRetainedBlocks ¶
func (w *Watcher) InspectRetainedBlocks() ([]*meshdb.MiniHeader, error)
InspectRetainedBlocks returns the blocks retained in-memory by the Watcher instance. It is not particularly performant and therefore should only be used for debugging and testing purposes.
func (*Watcher) Subscribe ¶
func (w *Watcher) Subscribe(sink chan<- []*Event) event.Subscription
Subscribe allows one to subscribe to the block events emitted by the Watcher. To unsubscribe, simply call `Unsubscribe` on the returned subscription. The sink channel should have ample buffer space to avoid blocking other subscribers. Slow subscribers are not dropped.