Documentation
¶
Index ¶
- Constants
- Variables
- type AggregatedBloomFilterCache
- func (c *AggregatedBloomFilterCache) NewMatchedBlockIterator(fromBlock, toBlock uint64, maxScanned uint64, matcher *EventMatcher, ...) (MatchedBlockIterator, error)
- func (c *AggregatedBloomFilterCache) Reset()
- func (c *AggregatedBloomFilterCache) SetMany(filters []*core.AggregatedBloomFilter)
- func (c *AggregatedBloomFilterCache) WithFallback(fallback func(EventFiltersCacheKey) (core.AggregatedBloomFilter, error))
- type Blockchain
- func (b *Blockchain) BlockByHash(hash *felt.Felt) (*core.Block, error)
- func (b *Blockchain) BlockByNumber(number uint64) (*core.Block, error)
- func (b *Blockchain) BlockCommitmentsByNumber(blockNumber uint64) (*core.BlockCommitments, error)
- func (b *Blockchain) BlockHeaderByHash(hash *felt.Felt) (*core.Header, error)
- func (b *Blockchain) BlockHeaderByNumber(number uint64) (*core.Header, error)
- func (b *Blockchain) EventFilter(from *felt.Felt, keys [][]felt.Felt, pendingBlockFn func() *core.Block) (EventFilterer, error)
- func (b *Blockchain) Finalise(block *core.Block, stateUpdate *core.StateUpdate, ...) error
- func (b *Blockchain) GetReverseStateDiff() (*core.StateDiff, error)
- func (b *Blockchain) Head() (*core.Block, error)
- func (b *Blockchain) HeadState() (core.StateReader, StateCloser, error)
- func (b *Blockchain) HeadsHeader() (*core.Header, error)
- func (b *Blockchain) Height() (uint64, error)
- func (b *Blockchain) L1HandlerTxnHash(msgHash *common.Hash) (*felt.Felt, error)
- func (b *Blockchain) L1Head() (*core.L1Head, error)
- func (b *Blockchain) Network() *utils.Network
- func (b *Blockchain) Receipt(hash *felt.Felt) (*core.TransactionReceipt, *felt.Felt, uint64, error)
- func (b *Blockchain) RevertHead() error
- func (b *Blockchain) SanityCheckNewHeight(block *core.Block, stateUpdate *core.StateUpdate, ...) (*core.BlockCommitments, error)
- func (b *Blockchain) SetL1Head(update *core.L1Head) error
- func (b *Blockchain) Simulate(block *core.Block, stateUpdate *core.StateUpdate, ...) (SimulateResult, error)
- func (b *Blockchain) StateAtBlockHash(blockHash *felt.Felt) (core.StateReader, StateCloser, error)
- func (b *Blockchain) StateAtBlockNumber(blockNumber uint64) (core.StateReader, StateCloser, error)
- func (b *Blockchain) StateCommitment() (*felt.Felt, error)
- func (b *Blockchain) StateUpdateByHash(hash *felt.Felt) (*core.StateUpdate, error)
- func (b *Blockchain) StateUpdateByNumber(number uint64) (*core.StateUpdate, error)
- func (b *Blockchain) Store(block *core.Block, blockCommitments *core.BlockCommitments, ...) error
- func (b *Blockchain) StoreGenesis(diff *core.StateDiff, classes map[felt.Felt]core.Class) error
- func (b *Blockchain) SubscribeL1Head() L1HeadSubscription
- func (b *Blockchain) TransactionByBlockNumberAndIndex(blockNumber, index uint64) (core.Transaction, error)
- func (b *Blockchain) TransactionByHash(hash *felt.Felt) (core.Transaction, error)
- func (b *Blockchain) VerifyBlock(block *core.Block) error
- func (b *Blockchain) WithListener(listener EventListener) *Blockchain
- func (b *Blockchain) WriteRunningEventFilter() error
- type ContinuationToken
- type EventFilter
- func (e *EventFilter) Close() error
- func (e *EventFilter) Events(cToken *ContinuationToken, chunkSize uint64) ([]*FilteredEvent, *ContinuationToken, error)
- func (e *EventFilter) SetRangeEndBlockByHash(filterRange EventFilterRange, blockHash *felt.Felt) error
- func (e *EventFilter) SetRangeEndBlockByNumber(filterRange EventFilterRange, blockNumber uint64) error
- func (e *EventFilter) SetRangeEndBlockToL1Head(filterRange EventFilterRange) error
- func (e *EventFilter) WithLimit(limit uint) *EventFilter
- type EventFilterRange
- type EventFilterer
- type EventFiltersCacheKey
- type EventListener
- type EventMatcher
- type FilteredEvent
- type L1HeadSubscription
- type MatchedBlockIterator
- type Reader
- type SelectiveListener
- type SimulateResult
- type StateCloser
Constants ¶
const AggregatedBloomFilterCacheSize = 16
NOTE(Ege): consider making it configurable
Variables ¶
var ( ErrMaxScannedBlockLimitExceed = errors.New("max scanned blocks exceeded") ErrAggregatedBloomFilterFallbackNil = errors.New("aggregated bloom filter does not have fallback") ErrFetchedFilterBoundsMismatch = errors.New("fetched filter bounds mismatch") ErrNilRunningFilter = errors.New("running filter is nil") )
var ErrParentDoesNotMatchHead = errors.New("block's parent hash does not match head block hash")
Functions ¶
This section is empty.
Types ¶
type AggregatedBloomFilterCache ¶ added in v0.14.6
type AggregatedBloomFilterCache struct {
// contains filtered or unexported fields
}
AggregatedBloomFilterCache stores and manages LRU-cached aggregated bloom filters for block ranges, supporting fallback loading and bulk insertion. It is safe for concurrent use.
func NewAggregatedBloomCache ¶ added in v0.14.6
func NewAggregatedBloomCache(size int) AggregatedBloomFilterCache
NewAggregatedBloomCache creates a new LRU cache for aggregated bloom filters with the specified maximum size (number of ranges to cache).
func (*AggregatedBloomFilterCache) NewMatchedBlockIterator ¶ added in v0.14.6
func (c *AggregatedBloomFilterCache) NewMatchedBlockIterator( fromBlock, toBlock uint64, maxScanned uint64, matcher *EventMatcher, runningFilter *core.RunningEventFilter, ) (MatchedBlockIterator, error)
NewMatchedBlockIterator constructs an iterator for block numbers within [fromBlock, toBlock] that may match the given EventMatcher. The scan can be limited to maxScanned candidate blocks. It uses cached (or fetched via fallback) AggregatedBloomFilter windows for efficiency. Returns an error if input is invalid or required state is missing.
func (*AggregatedBloomFilterCache) Reset ¶ added in v0.14.6
func (c *AggregatedBloomFilterCache) Reset()
Reset clears the entire bloom filter cache, removing all stored filters.
func (*AggregatedBloomFilterCache) SetMany ¶ added in v0.14.6
func (c *AggregatedBloomFilterCache) SetMany(filters []*core.AggregatedBloomFilter)
SetMany inserts multiple aggregated bloom filters into the cache. Each filter is keyed by its block range.
func (*AggregatedBloomFilterCache) WithFallback ¶ added in v0.14.6
func (c *AggregatedBloomFilterCache) WithFallback(fallback func(EventFiltersCacheKey) (core.AggregatedBloomFilter, error))
WithFallback sets a fallback fetch function to be used if a requested AggregatedBloomFilter is not found in the cache. The provided function must return a filter matching the queried range, or an error.
type Blockchain ¶
type Blockchain struct {
// contains filtered or unexported fields
}
Blockchain is responsible for keeping track of all things related to the Starknet blockchain
func New ¶
func New(database db.KeyValueStore, network *utils.Network) *Blockchain
func (*Blockchain) BlockByHash ¶ added in v0.2.1
func (*Blockchain) BlockByNumber ¶ added in v0.2.1
func (b *Blockchain) BlockByNumber(number uint64) (*core.Block, error)
func (*Blockchain) BlockCommitmentsByNumber ¶ added in v0.6.0
func (b *Blockchain) BlockCommitmentsByNumber(blockNumber uint64) (*core.BlockCommitments, error)
func (*Blockchain) BlockHeaderByHash ¶ added in v0.2.1
func (*Blockchain) BlockHeaderByNumber ¶ added in v0.2.1
func (b *Blockchain) BlockHeaderByNumber(number uint64) (*core.Header, error)
func (*Blockchain) EventFilter ¶ added in v0.3.1
func (b *Blockchain) EventFilter(from *felt.Felt, keys [][]felt.Felt, pendingBlockFn func() *core.Block) (EventFilterer, error)
EventFilter returns an EventFilter object that is tied to a snapshot of the blockchain
func (*Blockchain) Finalise ¶ added in v0.14.4
func (b *Blockchain) Finalise( block *core.Block, stateUpdate *core.StateUpdate, newClasses map[felt.Felt]core.Class, sign utils.BlockSignFunc, ) error
Finalise checks the block correctness and appends it to the chain
func (*Blockchain) GetReverseStateDiff ¶ added in v0.12.3
func (b *Blockchain) GetReverseStateDiff() (*core.StateDiff, error)
func (*Blockchain) HeadState ¶ added in v0.3.0
func (b *Blockchain) HeadState() (core.StateReader, StateCloser, error)
HeadState returns a StateReader that provides a stable view to the latest state
func (*Blockchain) HeadsHeader ¶
func (b *Blockchain) HeadsHeader() (*core.Header, error)
func (*Blockchain) Height ¶
func (b *Blockchain) Height() (uint64, error)
Height returns the latest block height. If blockchain is empty nil is returned.
func (*Blockchain) L1HandlerTxnHash ¶ added in v0.13.0
func (*Blockchain) Network ¶
func (b *Blockchain) Network() *utils.Network
func (*Blockchain) Receipt ¶ added in v0.2.1
func (b *Blockchain) Receipt(hash *felt.Felt) (*core.TransactionReceipt, *felt.Felt, uint64, error)
Receipt gets the transaction receipt for a given transaction hash.
func (*Blockchain) RevertHead ¶ added in v0.4.0
func (b *Blockchain) RevertHead() error
RevertHead reverts the head block
func (*Blockchain) SanityCheckNewHeight ¶
func (b *Blockchain) SanityCheckNewHeight(block *core.Block, stateUpdate *core.StateUpdate, newClasses map[felt.Felt]core.Class, ) (*core.BlockCommitments, error)
SanityCheckNewHeight checks integrity of a block and resulting state update
func (*Blockchain) SetL1Head ¶ added in v0.4.0
func (b *Blockchain) SetL1Head(update *core.L1Head) error
func (*Blockchain) Simulate ¶ added in v0.14.6
func (b *Blockchain) Simulate( block *core.Block, stateUpdate *core.StateUpdate, newClasses map[felt.Felt]core.Class, sign utils.BlockSignFunc, ) (SimulateResult, error)
Simulate returns what the new completed header and state update would be if the provided block was added to the chain.
func (*Blockchain) StateAtBlockHash ¶ added in v0.3.0
func (b *Blockchain) StateAtBlockHash(blockHash *felt.Felt) (core.StateReader, StateCloser, error)
StateAtBlockHash returns a StateReader that provides a stable view to the state at the given block hash
func (*Blockchain) StateAtBlockNumber ¶ added in v0.3.0
func (b *Blockchain) StateAtBlockNumber(blockNumber uint64) (core.StateReader, StateCloser, error)
StateAtBlockNumber returns a StateReader that provides a stable view to the state at the given block number
func (*Blockchain) StateCommitment ¶
func (b *Blockchain) StateCommitment() (*felt.Felt, error)
StateCommitment returns the latest block state commitment. If blockchain is empty zero felt is returned.
func (*Blockchain) StateUpdateByHash ¶ added in v0.2.1
func (b *Blockchain) StateUpdateByHash(hash *felt.Felt) (*core.StateUpdate, error)
func (*Blockchain) StateUpdateByNumber ¶ added in v0.2.1
func (b *Blockchain) StateUpdateByNumber(number uint64) (*core.StateUpdate, error)
func (*Blockchain) Store ¶
func (b *Blockchain) Store(block *core.Block, blockCommitments *core.BlockCommitments, stateUpdate *core.StateUpdate, newClasses map[felt.Felt]core.Class, ) error
Store takes a block and state update and performs sanity checks before putting in the database.
func (*Blockchain) StoreGenesis ¶ added in v0.14.4
func (*Blockchain) SubscribeL1Head ¶ added in v0.13.0
func (b *Blockchain) SubscribeL1Head() L1HeadSubscription
func (*Blockchain) TransactionByBlockNumberAndIndex ¶ added in v0.2.1
func (b *Blockchain) TransactionByBlockNumberAndIndex(blockNumber, index uint64) (core.Transaction, error)
TransactionByBlockNumberAndIndex gets the transaction for a given block number and index.
func (*Blockchain) TransactionByHash ¶ added in v0.2.1
func (b *Blockchain) TransactionByHash(hash *felt.Felt) (core.Transaction, error)
TransactionByHash gets the transaction for a given hash.
func (*Blockchain) VerifyBlock ¶
func (b *Blockchain) VerifyBlock(block *core.Block) error
VerifyBlock assumes the block has already been sanity-checked.
func (*Blockchain) WithListener ¶ added in v0.7.4
func (b *Blockchain) WithListener(listener EventListener) *Blockchain
func (*Blockchain) WriteRunningEventFilter ¶ added in v0.14.6
func (b *Blockchain) WriteRunningEventFilter() error
type ContinuationToken ¶ added in v0.3.1
type ContinuationToken struct {
// contains filtered or unexported fields
}
func (*ContinuationToken) FromString ¶ added in v0.3.1
func (c *ContinuationToken) FromString(str string) error
func (*ContinuationToken) String ¶ added in v0.3.1
func (c *ContinuationToken) String() string
type EventFilter ¶ added in v0.3.1
type EventFilter struct {
// contains filtered or unexported fields
}
func (*EventFilter) Close ¶ added in v0.3.1
func (e *EventFilter) Close() error
Close closes the underlying database transaction that provides the blockchain snapshot
func (*EventFilter) Events ¶ added in v0.3.1
func (e *EventFilter) Events(cToken *ContinuationToken, chunkSize uint64) ([]*FilteredEvent, *ContinuationToken, error)
func (*EventFilter) SetRangeEndBlockByHash ¶ added in v0.3.1
func (e *EventFilter) SetRangeEndBlockByHash(filterRange EventFilterRange, blockHash *felt.Felt) error
SetRangeEndBlockByHash sets an end of the block range by block hash
func (*EventFilter) SetRangeEndBlockByNumber ¶ added in v0.3.1
func (e *EventFilter) SetRangeEndBlockByNumber(filterRange EventFilterRange, blockNumber uint64) error
SetRangeEndBlockByNumber sets an end of the block range by block number
func (*EventFilter) SetRangeEndBlockToL1Head ¶ added in v0.15.1
func (e *EventFilter) SetRangeEndBlockToL1Head(filterRange EventFilterRange) error
SetRangeEndBlockToL1Head sets an end of the block range to latest `l1_accepted` block
func (*EventFilter) WithLimit ¶ added in v0.7.5
func (e *EventFilter) WithLimit(limit uint) *EventFilter
WithLimit sets the limit for events scan
type EventFilterRange ¶ added in v0.3.1
type EventFilterRange uint
const ( EventFilterFrom EventFilterRange = iota EventFilterTo )
type EventFilterer ¶ added in v0.13.0
type EventFilterer interface { io.Closer Events(cToken *ContinuationToken, chunkSize uint64) ([]*FilteredEvent, *ContinuationToken, error) SetRangeEndBlockByNumber(filterRange EventFilterRange, blockNumber uint64) error SetRangeEndBlockByHash(filterRange EventFilterRange, blockHash *felt.Felt) error SetRangeEndBlockToL1Head(filterRange EventFilterRange) error WithLimit(limit uint) *EventFilter }
type EventFiltersCacheKey ¶ added in v0.14.6
type EventFiltersCacheKey struct {
// contains filtered or unexported fields
}
EventFiltersCacheKey uniquely identifies a range of blocks whose aggregated bloom filter is cached. Used as the lookup key for bloom filter caches.
type EventListener ¶ added in v0.7.4
type EventListener interface {
OnRead(method string)
}
type EventMatcher ¶ added in v0.13.2
type EventMatcher struct {
// contains filtered or unexported fields
}
func NewEventMatcher ¶ added in v0.13.2
func NewEventMatcher(contractAddress *felt.Felt, keys [][]felt.Felt) EventMatcher
func (*EventMatcher) AppendBlockEvents ¶ added in v0.13.2
func (e *EventMatcher) AppendBlockEvents(matchedEventsSofar []*FilteredEvent, header *core.Header, receipts []*core.TransactionReceipt, skippedEvents uint64, chunkSize uint64, ) ([]*FilteredEvent, uint64, error)
func (*EventMatcher) MatchesEventKeys ¶ added in v0.15.2
func (e *EventMatcher) MatchesEventKeys(eventKeys []*felt.Felt) bool
func (*EventMatcher) TestBloom ¶ added in v0.13.2
func (e *EventMatcher) TestBloom(bloomFilter *bloom.BloomFilter) bool
type FilteredEvent ¶ added in v0.3.1
type L1HeadSubscription ¶ added in v0.13.0
type L1HeadSubscription struct { *feed.Subscription[*core.L1Head] }
type MatchedBlockIterator ¶ added in v0.14.6
type MatchedBlockIterator struct {
// contains filtered or unexported fields
}
MatchedBlockIterator iterates over candidate block numbers within a block range that may match an event query, using cached (or fetched) aggregated bloom filters for efficient windowed scanning and filtering.
func (*MatchedBlockIterator) Next ¶ added in v0.14.6
func (it *MatchedBlockIterator) Next() (uint64, bool, error)
Next advances the iterator to the next matching block number within the scanned range. Returns the next candidate block number (absolute), a boolean indicating if such exists, and any error encountered (including scan limit exhaustion or fallback fetch errors). When ok == false and error is nil, the iteration is complete.
type Reader ¶
type Reader interface { Height() (height uint64, err error) Head() (head *core.Block, err error) L1Head() (*core.L1Head, error) SubscribeL1Head() L1HeadSubscription BlockByNumber(number uint64) (block *core.Block, err error) BlockByHash(hash *felt.Felt) (block *core.Block, err error) HeadsHeader() (header *core.Header, err error) BlockHeaderByNumber(number uint64) (header *core.Header, err error) BlockHeaderByHash(hash *felt.Felt) (header *core.Header, err error) TransactionByHash(hash *felt.Felt) (transaction core.Transaction, err error) TransactionByBlockNumberAndIndex(blockNumber, index uint64) (transaction core.Transaction, err error) Receipt(hash *felt.Felt) (receipt *core.TransactionReceipt, blockHash *felt.Felt, blockNumber uint64, err error) StateUpdateByNumber(number uint64) (update *core.StateUpdate, err error) StateUpdateByHash(hash *felt.Felt) (update *core.StateUpdate, err error) L1HandlerTxnHash(msgHash *common.Hash) (l1HandlerTxnHash *felt.Felt, err error) HeadState() (core.StateReader, StateCloser, error) StateAtBlockHash(blockHash *felt.Felt) (core.StateReader, StateCloser, error) StateAtBlockNumber(blockNumber uint64) (core.StateReader, StateCloser, error) BlockCommitmentsByNumber(blockNumber uint64) (*core.BlockCommitments, error) EventFilter(from *felt.Felt, keys [][]felt.Felt, pendingBlockFn func() *core.Block) (EventFilterer, error) Network() *utils.Network }
type SelectiveListener ¶ added in v0.7.4
type SelectiveListener struct {
OnReadCb func(method string)
}
func (*SelectiveListener) OnRead ¶ added in v0.7.4
func (l *SelectiveListener) OnRead(method string)
type SimulateResult ¶ added in v0.14.6
type SimulateResult struct { BlockCommitments *core.BlockCommitments ConcatCount felt.Felt }
type StateCloser ¶ added in v0.3.0
type StateCloser = func() error