Documentation ¶
Index ¶
- Variables
- func IsBlockEq(a, b *types.Block) bool
- type Block
- type Blocks
- func (blocks Blocks) Copy() Blocks
- func (blocks Blocks) EventExists(block *types.Block, event Event) bool
- func (blocks Blocks) FindBlock(hash common.Hash, optEvent ...Event) (*Block, bool)
- func (b Blocks) Head() *Block
- func (b Blocks) IsOK() bool
- func (b Blocks) LatestBlock() *Block
- func (b Blocks) Reorg() bool
- func (b Blocks) Tail() *Block
- type Chain
- func (c *Chain) Blocks() Blocks
- func (c *Chain) BootstrapFromBlocks(blocks []*Block) error
- func (c *Chain) BootstrapFromBlocksJSON(data []byte) error
- func (c *Chain) GetAverageBlockTime() float64
- func (c *Chain) GetBlock(hash common.Hash) *Block
- func (c *Chain) GetBlockByNumber(blockNum uint64, event Event) *Block
- func (c *Chain) GetTransaction(txnHash common.Hash) *types.Transaction
- func (c *Chain) Head() *Block
- func (c *Chain) PrintAllBlocks()
- func (c *Chain) Snapshot() ([]byte, error)
- func (c *Chain) Tail() *Block
- type Event
- type Monitor
- func (m *Monitor) Chain() *Chain
- func (m *Monitor) GetAverageBlockTime() float64
- func (m *Monitor) GetBlock(blockHash common.Hash) *Block
- func (m *Monitor) GetTransaction(txnHash common.Hash) *types.Transaction
- func (m *Monitor) IsRunning() bool
- func (m *Monitor) LatestBlock() *Block
- func (m *Monitor) LatestBlockNum() *big.Int
- func (m *Monitor) LatestFinalBlock(numBlocksToFinality int) *Block
- func (m *Monitor) OldestBlockNum() *big.Int
- func (m *Monitor) Options() Options
- func (m *Monitor) Provider() *ethrpc.Provider
- func (m *Monitor) PurgeHistory()
- func (m *Monitor) Run(ctx context.Context) error
- func (m *Monitor) Stop()
- func (m *Monitor) Subscribe() Subscription
- type Options
- type Subscription
Constants ¶
This section is empty.
Variables ¶
var ( ErrFatal = errors.New("ethmonitor: fatal error, stopping") ErrReorg = errors.New("ethmonitor: block reorg") ErrUnexpectedParentHash = errors.New("ethmonitor: unexpected parent hash") ErrUnexpectedBlockNumber = errors.New("ethmonitor: unexpected block number") ErrQueueFull = errors.New("ethmonitor: publish queue is full") ErrMaxAttempts = errors.New("ethmonitor: max attempts hit") )
var DefaultOptions = Options{ Logger: logger.NewLogger(logger.LogLevel_WARN), PollingInterval: 1000 * time.Millisecond, Timeout: 20 * time.Second, StartBlockNumber: nil, TrailNumBlocksBehindHead: 0, BlockRetentionLimit: 200, WithLogs: false, LogTopics: []common.Hash{}, DebugLogging: false, }
Functions ¶
Types ¶
type Block ¶
type Block struct { *types.Block // Event type where Block is Added or Removed (ie. reorged) Event Event // Logs in the block, grouped by transactions: // [[txnA logs, ..], [txnB logs, ..], ..] // Logs [][]types.Log `json:"logs"` Logs []types.Log // OK flag which represents the block is ready for broadcasting OK bool }
func (*Block) MarshalJSON ¶ added in v1.17.9
func (*Block) UnmarshalJSON ¶ added in v1.17.9
type Blocks ¶
type Blocks []*Block
func (Blocks) EventExists ¶ added in v1.3.0
func (Blocks) LatestBlock ¶
type Chain ¶
type Chain struct {
// contains filtered or unexported fields
}
func (*Chain) BootstrapFromBlocks ¶ added in v1.17.9
BootstrapFromBlocks will bootstrap the ethmonitor canonical chain from input blocks, while also verifying the chain hashes link together.
func (*Chain) BootstrapFromBlocksJSON ¶ added in v1.17.9
BootstrapFromBlocksJSON is convenience method which accepts json and bootstraps the ethmonitor chain. This method is here mostly for debugging purposes and recommend that you use BootstrapFromBlocks and handle constructing block events outside of ethmonitor.
func (*Chain) GetAverageBlockTime ¶ added in v1.14.2
func (*Chain) GetBlockByNumber ¶ added in v1.3.2
func (*Chain) GetTransaction ¶
func (c *Chain) GetTransaction(txnHash common.Hash) *types.Transaction
GetTransaction searches our canonical chain of blocks (where each block points at previous), and returns the transaction. Aka, searches our chain for mined transactions. Keep in mind transactions can still be reorged, but you can check the blockNumber and compare it against the head to determine if its final.
func (*Chain) PrintAllBlocks ¶
func (c *Chain) PrintAllBlocks()
type Monitor ¶
type Monitor struct {
// contains filtered or unexported fields
}
func (*Monitor) GetAverageBlockTime ¶ added in v1.14.2
GetAverageBlockTime returns the average block time in seconds (including fractions)
func (*Monitor) GetTransaction ¶
func (m *Monitor) GetTransaction(txnHash common.Hash) *types.Transaction
GetBlock will search within the retained canonical chain for the txn hash. Passing `optMined true` will only return transaction which have not been removed from the chain via a reorg.
func (*Monitor) LatestBlock ¶
LatestBlock will return the head block of the canonical chain
func (*Monitor) LatestBlockNum ¶ added in v1.17.0
LatestBlockNum returns the latest block number in the canonical chain
func (*Monitor) LatestFinalBlock ¶ added in v1.17.2
LatestFinalBlock returns the latest block which has reached finality. The argument `numBlocksToFinality` should be a constant value of the number of blocks a particular chain needs to reach finality. Ie. on Polygon this value would be 120 and on Ethereum it would be 20. As the pubsub system publishes new blocks, this value will change, as the chain will progress forward. It's recommend / safe to call this method each time in a <-sub.Blocks() code block.
func (*Monitor) OldestBlockNum ¶ added in v1.17.0
func (*Monitor) PurgeHistory ¶ added in v1.17.0
func (m *Monitor) PurgeHistory()
PurgeHistory clears all but the head of the chain. Useful for tests, but should almost never be used in a normal application.
func (*Monitor) Subscribe ¶
func (m *Monitor) Subscribe() Subscription
type Options ¶
type Options struct { // Logger used by ethmonitor to log warnings and debug info Logger logger.Logger // PollingInterval to query the chain for new blocks PollingInterval time.Duration // Timeout duration used by the rpc client when fetching data from the remote node. Timeout time.Duration // StartBlockNumber to begin the monitor from. StartBlockNumber *big.Int // Bootstrap flag which indicates the monitor will expect the monitor's // events to be bootstrapped, and will continue from that point. This als // takes precedence over StartBlockNumber when set to true. Bootstrap bool // TrailNumBlocksBehindHead is the number of blocks we trail behind // the head of the chain before broadcasting new events to the subscribers. TrailNumBlocksBehindHead int // BlockRetentionLimit is the number of blocks we keep on the canonical chain // cache. BlockRetentionLimit int // WithLogs will include logs with the blocks if specified true. WithLogs bool // LogTopics will filter only specific log topics to include. LogTopics []common.Hash // DebugLogging toggle DebugLogging bool }
type Subscription ¶
type Subscription interface { Blocks() <-chan Blocks Done() <-chan struct{} Unsubscribe() }