core

package
v0.15.17 Latest Latest
Warning

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

Go to latest
Published: Jan 19, 2026 License: Apache-2.0 Imports: 39 Imported by: 6

Documentation

Index

Constants

View Source
const (
	// Calculated at https://hur.st/bloomfilter/?n=1000&p=&m=8192&k=
	// provides 1 in 51 possibility of false positives for approximately 1000 elements
	EventsBloomLength    = 8192
	EventsBloomHashFuncs = 6
)
View Source
const ContractStorageTrieHeight = 251

contract storage has fixed height at 251

View Source
const (
	NumBlocksPerFilter uint64 = 8192
)

Variables

View Source
var (
	ErrAggregatedBloomFilterBlockOutOfRange error = errors.New("block number is not within range")
	ErrBloomFilterSizeMismatch              error = errors.New("bloom filter len mismatch")
	ErrMatchesBufferNil                     error = errors.New("matches buffer must not be nil")
	ErrMatchesBufferSizeMismatch            error = errors.New("matches buffer size mismatch")
)
View Source
var (
	ErrCannotMigrateV2Declared      = errors.New("cannot migrate a class that was declared with V2")
	ErrCannotMigrateBeforeDeclared  = errors.New("cannot migrate the class before it was declared")
	ErrCannotMigrateAlreadyMigrated = errors.New("cannot migrate a class that was already migrated")
	ErrCannotUnmigrateNotMigrated   = errors.New("cannot unmigrate a class that was not migrated")
)
View Source
var (
	ErrContractNotDeployed     = errors.New("contract not deployed")
	ErrContractAlreadyDeployed = errors.New("contract already deployed")
)
View Source
var (
	ErrPendingDataNotFound         = errors.New("pending_data not found")
	ErrTransactionNotFound         = errors.New("pending_data: transaction not found")
	ErrTransactionReceiptNotFound  = errors.New("pending_data: transaction receipt not found")
	ErrTransactionIndexOutOfBounds = errors.New(
		"pending_data: transaction index out of bounds",
	)
	ErrPendingStateBeforeIndexNotSupported = errors.New(
		"pending_data: PendingStateBeforeIndex not supported for Pending block",
	)
)
View Source
var (
	Ver0_13_2 = semver.MustParse("0.13.2")
	Ver0_13_4 = semver.MustParse("0.13.4")
	Ver0_14_0 = semver.MustParse("0.14.0")
	Ver0_14_1 = semver.MustParse("0.14.1")
	LatestVer = Ver0_14_1
)

Bucket 37: AggregatedBloomFilterRangeKey -> AggregatedBloomFilter TODO: Integrate this bucket

Bucket 21: Block number (uint64) -> Block commitments (BlockCommitments) TODO: Integrate this bucket

View Source
var BlockHeaderNumbersByHashBucket = typed.NewBucket(
	db.BlockHeaderNumbersByHash,
	key.Felt,
	value.Uint64,
)

Bucket 7: Block hash (Felt) -> Block number (uint64) TODO: Integrate this bucket

View Source
var BlockHeadersByNumberBucket = typed.NewBucket(
	db.BlockHeadersByNumber,
	key.Uint64,
	value.Cbor[Header](),
)

Bucket 8: Block number (uint64) -> Header TODO: Integrate this bucket

Bucket 40: Block number (uint64) -> Block transactions (BlockTransactions)

View Source
var ChainHeightBucket = typed.NewBucket(
	db.ChainHeight,
	key.Empty,
	value.Uint64,
)

Bucket 6: Chain height (uint64) TODO: Integrate this bucket

Bucket 4: Class hash (ClassHash) -> Class definition (DeclaredClassDefinition) TODO: Integrate this bucket

Bucket 39: Sierra Class Hash -> Class CASM hash metadata

View Source
var ContractClassHashBucket = typed.NewBucket(
	db.ContractClassHash,
	key.Address,
	value.ClassHash,
)

Bucket 2: Contract class (Address) -> Contract class hash (ClassHash) TODO: Integrate this bucket

View Source
var ContractDeploymentHeightBucket = typed.NewBucket(
	db.ContractDeploymentHeight,
	key.Address,
	value.Uint64,
)

Bucket 17: Contract address (Address) -> Deployment height (uint64) TODO: Integrate this bucket

View Source
var ContractNonceBucket = typed.NewBucket(
	db.ContractNonce,
	key.Address,
	value.Felt,
)

Bucket 5: Contract address (Address) -> Contract nonce (Felt) TODO: Integrate this bucket

View Source
var (
	ErrCheckHeadState = errors.New("check head state")
)
View Source
var ErrHistoricalTrieNotSupported = errors.New("cannot support historical trie")
View Source
var L1HandlerTxnHashByMsgHashBucket = typed.NewBucket(
	db.L1HandlerTxnHashByMsgHash,
	key.Bytes,
	value.Hash,
)

Bucket 24: L1 handler msg hash ([]byte) -> L1 handler txn hash (Felt) TODO: Integrate this bucket

View Source
var L1HeightBucket = typed.NewBucket(
	db.L1Height,
	key.Empty,
	value.Cbor[L1Head](),
)

Bucket 18: L1 height (uint64) -> L1 head (L1Head) TODO: Integrate this bucket

Bucket 11: Block number (uint64) -> Transaction index (uint64) -> TransactionReceipt

Bucket 38: RunningEventFilter TODO: Integrate this bucket

View Source
var SierraVersion010 felt.Felt = felt.Felt(
	[4]uint64{
		18446737451840584193,
		18446744073709551615,
		18446744073709551615,
		576348180530977296,
	})

Single felt identifying the number "0.1.0" as a short string

View Source
var StateUpdatesByBlockNumberBucket = typed.NewBucket(
	db.StateUpdatesByBlockNumber,
	key.Uint64,
	value.Cbor[StateUpdate](),
)

Bucket 12: Block number (uint64) -> StateUpdate TODO: Integrate this bucket

Bucket 9: Transaction hash (TransactionHash) -> Block number and index (BlockNumIndexKey)

Bucket 10: Block number (uint64) -> Transaction index (uint64) -> Transaction

Functions

func CheckBlockVersion added in v0.15.6

func CheckBlockVersion(protocolVersion string) error

CheckBlockVersion checks if the block protocol version is supported by Juno

func ConcatCounts added in v0.14.6

func ConcatCounts(txCount, eventCount, stateDiffLen uint64, l1Mode L1DAMode) felt.Felt

func ContractAddress

func ContractAddress(
	callerAddress,
	classHash,
	salt *felt.Felt,
	constructorCallData []*felt.Felt,
) felt.Felt

ContractAddress computes the address of a Starknet contract.

func ContractClassHash added in v0.7.5

func ContractClassHash(addr *felt.Felt, txn db.KeyValueReader) (felt.Felt, error)

ContractClassHash returns hash of the class that the contract at the given address instantiates.

func ContractNonce added in v0.7.5

func ContractNonce(addr *felt.Felt, txn db.KeyValueReader) (felt.Felt, error)

ContractNonce returns the amount transactions sent from this contract. Only account contracts can have a non-zero nonce.

func ContractRoot added in v0.7.5

func ContractRoot(addr *felt.Felt, txn db.IndexedBatch) (felt.Felt, error)

ContractRoot returns the root of the contract storage.

func ContractStorage added in v0.7.5

func ContractStorage(addr, key *felt.Felt, txn db.IndexedBatch) (felt.Felt, error)

func DeleteBlockCommitment added in v0.14.4

func DeleteBlockCommitment(w db.KeyValueWriter, blockNum uint64) error

func DeleteBlockHeaderByNumber added in v0.14.4

func DeleteBlockHeaderByNumber(w db.KeyValueWriter, number uint64) error

func DeleteBlockHeaderNumberByHash added in v0.14.4

func DeleteBlockHeaderNumberByHash(w db.KeyValueWriter, hash *felt.Felt) error

func DeleteChainHeight added in v0.14.3

func DeleteChainHeight(w db.KeyValueWriter) error

func DeleteClass added in v0.14.4

func DeleteClass(w db.KeyValueWriter, classHash *felt.Felt) error

func DeleteClassCasmHashMetadata added in v0.15.17

func DeleteClassCasmHashMetadata(
	w db.KeyValueWriter,
	classHash *felt.SierraClassHash,
) error

func DeleteContractClassHashHistory added in v0.15.12

func DeleteContractClassHashHistory(
	w db.KeyValueWriter,
	contractAddress *felt.Felt,
	height uint64,
) error

func DeleteContractDeploymentHeight added in v0.14.4

func DeleteContractDeploymentHeight(w db.KeyValueWriter, addr *felt.Felt) error

func DeleteContractNonceHistory added in v0.15.12

func DeleteContractNonceHistory(
	w db.KeyValueWriter,
	contractAddress *felt.Felt,
	height uint64,
) error

DeleteContractNonceHistory deletes the history at the given height

func DeleteContractStorageHistory added in v0.15.12

func DeleteContractStorageHistory(
	w db.KeyValueWriter,
	contractAddress,
	storageLocation *felt.Felt,
	height uint64,
) error

DeleteContractStorageHistory deletes the history at the given height

func DeleteL1HandlerTxnHashByMsgHash added in v0.14.4

func DeleteL1HandlerTxnHashByMsgHash(w db.KeyValueWriter, msgHash []byte) error

func DeleteStateUpdateByBlockNum added in v0.14.4

func DeleteStateUpdateByBlockNum(w db.KeyValueWriter, blockNum uint64) error

func DeleteTxsAndReceipts added in v0.14.4

func DeleteTxsAndReceipts(batch db.IndexedBatch, blockNum, numTxs uint64) error

func EventsBloom added in v0.3.1

func EventsBloom(receipts []*TransactionReceipt) *bloom.BloomFilter

func GetBlockHeaderNumberByHash added in v0.14.4

func GetBlockHeaderNumberByHash(r db.KeyValueReader, hash *felt.Felt) (uint64, error)

func GetChainHeight added in v0.14.4

func GetChainHeight(r db.KeyValueReader) (uint64, error)

func GetContractClassHash added in v0.14.4

func GetContractClassHash(r db.KeyValueReader, addr *felt.Felt) (felt.Felt, error)

func GetContractDeploymentHeight added in v0.14.4

func GetContractDeploymentHeight(r db.KeyValueReader, addr *felt.Felt) (uint64, error)

func GetContractNonce added in v0.14.4

func GetContractNonce(r db.KeyValueReader, addr *felt.Felt) (felt.Felt, error)

func GetL1HandlerTxnHashByMsgHash added in v0.14.4

func GetL1HandlerTxnHashByMsgHash(r db.KeyValueReader, msgHash []byte) (felt.Felt, error)

func HasClass added in v0.14.4

func HasClass(r db.KeyValueReader, classHash *felt.Felt) (bool, error)

func MarshalBlockNumber added in v0.4.0

func MarshalBlockNumber(blockNumber uint64) []byte

func NewDeprecatedStateHistory added in v0.15.12

func NewDeprecatedStateHistory(
	state StateHistoryReader,
	blockNumber uint64,
) *deprecatedStateHistory

func ParseBlockVersion added in v0.3.1

func ParseBlockVersion(protocolVersion string) (*semver.Version, error)

ParseBlockVersion computes the block version, defaulting to "0.0.0" for empty strings

func SegmentedBytecodeHash added in v0.11.0

func SegmentedBytecodeHash(
	bytecode []*felt.Felt,
	segmentLengths []SegmentLengths,
	h Hasher,
) felt.Felt

func TransactionHash added in v0.4.0

func TransactionHash(transaction Transaction, n *utils.Network) (felt.Felt, error)

func UnmarshalBlockNumber added in v0.14.3

func UnmarshalBlockNumber(val []byte) uint64

func VerifyClassHashes added in v0.2.1

func VerifyClassHashes(classes map[felt.Felt]ClassDefinition) error

func VerifyTransactions added in v0.2.1

func VerifyTransactions(txs []Transaction, n *utils.Network, protocolVersion string) error

func WriteAggregatedBloomFilter added in v0.14.6

func WriteAggregatedBloomFilter(w db.KeyValueWriter, filter *AggregatedBloomFilter) error

func WriteBlockCommitment added in v0.14.4

func WriteBlockCommitment(w db.KeyValueWriter, blockNum uint64, commitment *BlockCommitments) error

func WriteBlockHeader added in v0.14.4

func WriteBlockHeader(w db.KeyValueWriter, header *Header) error

func WriteBlockHeaderByNumber added in v0.14.4

func WriteBlockHeaderByNumber(w db.KeyValueWriter, header *Header) error

func WriteBlockHeaderNumberByHash added in v0.14.4

func WriteBlockHeaderNumberByHash(w db.KeyValueWriter, hash *felt.Felt, number uint64) error

func WriteChainHeight added in v0.14.4

func WriteChainHeight(w db.KeyValueWriter, height uint64) error

func WriteClass added in v0.14.4

func WriteClass(w db.KeyValueWriter, classHash *felt.Felt, class *DeclaredClassDefinition) error

func WriteClassCasmHashMetadata added in v0.15.17

func WriteClassCasmHashMetadata(
	w db.KeyValueWriter,
	classHash *felt.SierraClassHash,
	metadata *ClassCasmHashMetadata,
) error

func WriteContractClassHash added in v0.14.4

func WriteContractClassHash(w db.KeyValueWriter, addr, classHash *felt.Felt) error

func WriteContractClassHashHistory added in v0.15.12

func WriteContractClassHashHistory(
	w db.KeyValueWriter,
	contractAddress,
	oldValue *felt.Felt,
	height uint64,
) error

func WriteContractDeploymentHeight added in v0.14.4

func WriteContractDeploymentHeight(w db.KeyValueWriter, addr *felt.Felt, height uint64) error

func WriteContractNonce added in v0.14.4

func WriteContractNonce(w db.KeyValueWriter, addr, nonce *felt.Felt) error

func WriteContractNonceHistory added in v0.15.12

func WriteContractNonceHistory(
	w db.KeyValueWriter,
	contractAddress,
	oldValue *felt.Felt,
	height uint64,
) error

WriteContractNonceHistory writes the old value of a nonce for the given contract which changed on height `height`

func WriteContractStorageHistory added in v0.15.12

func WriteContractStorageHistory(
	w db.KeyValueWriter,
	contractAddress,
	storageLocation,
	oldValue *felt.Felt,
	height uint64,
) error

WriteContractStorageHistory writes the old value of a storage location for the given contract which changed on height `height`.

func WriteL1HandlerMsgHashes added in v0.14.4

func WriteL1HandlerMsgHashes(w db.KeyValueWriter, txns []Transaction) error

func WriteL1HandlerTxnHashByMsgHash added in v0.14.4

func WriteL1HandlerTxnHashByMsgHash(w db.KeyValueWriter, msgHash []byte, l1HandlerTxnHash *felt.Felt) error

func WriteL1Head added in v0.14.4

func WriteL1Head(w db.KeyValueWriter, l1Head *L1Head) error

func WriteRunningEventFilter added in v0.14.6

func WriteRunningEventFilter(w db.KeyValueWriter, filter *RunningEventFilter) error

func WriteStateUpdateByBlockNum added in v0.14.4

func WriteStateUpdateByBlockNum(w db.KeyValueWriter, blockNum uint64, stateUpdate *StateUpdate) error

func WriteTxAndReceipt added in v0.14.4

func WriteTxAndReceipt(
	w db.KeyValueWriter,
	num, index uint64,
	tx Transaction,
	receipt *TransactionReceipt,
) error

Types

type AggregatedBloomFilter added in v0.14.6

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

AggregatedBloomFilter provides a space-efficient, probabilistic data structure for testing set membership of keys (such as event topics or contract addresses) across large block ranges in a blockchain.

When querying which blocks in a large range might contain a certain key, it is inefficient to load and individually check every block’s Bloom filter. To optimise this, AggregatedBloomFilter aggregates multiple Bloom filters (spanning a range of blocks) into a single structure. This aggregation makes it possible to check, in a single operation, which blocks in the range might include a given key.

Internally, AggregatedBloomFilter is represented as a bit matrix: each row corresponds to a Bloom filter index, and each column corresponds to a block in the range. When adding a key for a particular block, the indices mapped by Bloom hash functions are determined, and the bits at those row-column intersections are set for that block.

Visually, this can be thought of as "rotating" the per-block Bloom filters into columns of a matrix.

-----| Block 0 | Block 1 | Block 2 | ... | Block 9 | Idx0 | 0 | 0 | 0 | ... | 0 | Idx1 | 1 | 0 | 1 | ... | 0 | Idx2 | 0 | 1 | 0 | ... | 0 | Idx3 | 1 | 0 | 0 | ... | 0 | Idx4 | 1 | 0 | 1 | ... | 1 | Idx5 | 0 | 0 | 0 | ... | 0 | Idx6 | 0 | 0 | 1 | ... | 0 | Idx7 | 0 | 1 | 0 | ... | 0 |

To query for a key, the AggregatedBloomFilter:

  1. Determines the relevant indices for the key using the same hash functions.
  2. Performs a bitwise AND over the selected rows, producing a bit vector.
  3. The set bits in this result indicate block numbers within the filter's range where the key may be present (with the usual caveat of possible false positives). Note: The set bit positions are *relative to the filter's range start* (i.e., the range's first block number), not absolute global block numbers.

Query example for a key mapping to indices Idx1 and Idx4:

Select rows 1 and 4 (Idx1 & Idx4): Idx1: 1 0 1 ... 0 Idx4: 1 0 1 ... 1

------------------------------- AND: 1 0 1 ... 0

After AND: Resulting vector is 1 0 1 ... 0

This means Block 0 and Block 2 are possible matches for this key.

This approach allows for efficient, bulk event queries on blockchain data without needing to individually examine every single block’s Bloom filter.

Using this method, you can quickly identify candidate blocks for a key, improving the performance of large-range event queries.

func GetAggregatedBloomFilter added in v0.14.6

func GetAggregatedBloomFilter(r db.KeyValueReader, fromBlock, toBLock uint64) (AggregatedBloomFilter, error)

func NewAggregatedFilter added in v0.14.6

func NewAggregatedFilter(fromBlock uint64) AggregatedBloomFilter

NewAggregatedFilter creates a new AggregatedBloomFilter starting from the specified block number. It initialises the bitmap array with empty bitsets of size NumBlocksPerFilter.

func (*AggregatedBloomFilter) BlocksForKeys added in v0.14.6

func (f *AggregatedBloomFilter) BlocksForKeys(keys [][]byte) *bitset.BitSet

BlocksForKeys returns a bitset indicating which blocks within the range might contain the given keys. If no keys are provided, returns a bitset with all bits set.

func (*AggregatedBloomFilter) BlocksForKeysInto added in v0.14.6

func (f *AggregatedBloomFilter) BlocksForKeysInto(keys [][]byte, out *bitset.BitSet) error

BlocksForKeysInto reuses a preallocated bitset (should be NumBlocksPerFilter bits).

func (*AggregatedBloomFilter) Clone added in v0.14.6

Copy creates a deep copy of the AggregatedBloomFilter.

func (*AggregatedBloomFilter) FromBlock added in v0.14.6

func (f *AggregatedBloomFilter) FromBlock() uint64

FromBlock returns the starting block number of the filter's range.

func (*AggregatedBloomFilter) Insert added in v0.14.6

func (f *AggregatedBloomFilter) Insert(filter *bloom.BloomFilter, blockNumber uint64) error

Insert adds a bloom filter's data for a specific block number into the aggregated filter. If filter is nil, no-op. Returns an error if the block number is out of range or if the bloom filter size doesn't match.

func (*AggregatedBloomFilter) MarshalBinary added in v0.14.6

func (f *AggregatedBloomFilter) MarshalBinary() ([]byte, error)

func (*AggregatedBloomFilter) ToBlock added in v0.14.6

func (f *AggregatedBloomFilter) ToBlock() uint64

ToBlock returns the ending block number of the filter's range.

func (*AggregatedBloomFilter) UnmarshalBinary added in v0.14.6

func (f *AggregatedBloomFilter) UnmarshalBinary(data []byte) error

type Block

type Block struct {
	*Header
	Transactions []Transaction
	Receipts     []*TransactionReceipt
}

func GetBlockByNumber added in v0.14.4

func GetBlockByNumber(r db.KeyValueReader, blockNum uint64) (*Block, error)

func (*Block) L2GasConsumed added in v0.15.3

func (b *Block) L2GasConsumed() uint64

type BlockCommitments added in v0.6.0

type BlockCommitments struct {
	TransactionCommitment *felt.Felt
	EventCommitment       *felt.Felt
	ReceiptCommitment     *felt.Felt
	StateDiffCommitment   *felt.Felt
}

func BlockHash added in v0.10.0

func BlockHash(
	b *Block,
	stateDiff *StateDiff,
	network *utils.Network,
	overrideSeqAddr *felt.Felt,
) (felt.Felt, *BlockCommitments, error)

blockHash computes the block hash, with option to override sequence address

func GetBlockCommitmentByBlockNum added in v0.14.4

func GetBlockCommitmentByBlockNum(r db.KeyValueReader, blockNum uint64) (*BlockCommitments, error)

func Post0132Hash added in v0.12.0

func Post0132Hash(b *Block, stateDiff *StateDiff) (felt.Felt, *BlockCommitments, error)

func VerifyBlockHash

func VerifyBlockHash(b *Block, network *utils.Network, stateDiff *StateDiff) (*BlockCommitments, error)

VerifyBlockHash verifies the block hash. Due to bugs in Starknet alpha, not all blocks have verifiable hashes.

type BlockTransactions added in v0.15.17

type BlockTransactions struct {
	Indexes BlockTransactionsIndexes
	Data    []byte
}

All transactions and receipts of the same block are stored in a single DB entry. This significantly reduces the number of DB entries. The number of entries now scales with the number of blocks instead of the number of transactions. If we simply store slices of transactions and receipts, we would need to read the entire block to get the transactions and receipts. This is inefficient, especially for blocks with a lot of transactions and receipts. Instead, the data consists of 2 parts. The first part is a CBOR encoded struct of 2 slices of indexes, one for transactions and one for receipts. The second part is a byte slice where transactions and receipts are stored contiguously in one byte slice, with indexes slices marking each item's start offset. This allows us to unmarshal any transaction or receipt on demand. Illustration:

transactions: [00 02 06] * ↓ ↓ ↓ * ----- ----------- ----------- data: [00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19] * ----- -------- -------------- * ↑ ↑ ↑ ↑ receipts: [10 12 15] 20 (len(data))

func NewBlockTransactions added in v0.15.17

func NewBlockTransactions(
	transactions []Transaction,
	receipts []*TransactionReceipt,
) (BlockTransactions, error)

func NewBlockTransactionsFromIterators added in v0.15.17

func NewBlockTransactionsFromIterators[T, R any](
	transactions iter.Seq2[T, error],
	receipts iter.Seq2[R, error],
) (BlockTransactions, error)

func (*BlockTransactions) Receipts added in v0.15.17

func (*BlockTransactions) Transactions added in v0.15.17

func (b *BlockTransactions) Transactions() indexed.LazySlice[Transaction]

type BlockTransactionsIndexes added in v0.15.17

type BlockTransactionsIndexes struct {
	Transactions []int `cbor:"1,keyasint,omitempty"`
	Receipts     []int `cbor:"2,keyasint,omitempty"`
}

type BlockTransactionsSerializer added in v0.15.17

type BlockTransactionsSerializer struct{}

func (BlockTransactionsSerializer) Marshal added in v0.15.17

func (BlockTransactionsSerializer) Unmarshal added in v0.15.17

func (BlockTransactionsSerializer) Unmarshal(data []byte, value *BlockTransactions) error

type BuiltinInstanceCounter

type BuiltinInstanceCounter struct {
	Pedersen     uint64
	RangeCheck   uint64
	Bitwise      uint64
	Output       uint64
	Ecsda        uint64
	EcOp         uint64
	Keccak       uint64
	Poseidon     uint64
	SegmentArena uint64
	AddMod       uint64
	MulMod       uint64
	RangeCheck96 uint64
}

type CasmClass added in v0.15.9

type CasmClass struct {
	Bytecode               []*felt.Felt
	PythonicHints          json.RawMessage
	CompilerVersion        string
	Hints                  json.RawMessage
	Prime                  *big.Int
	External               []CasmEntryPoint
	L1Handler              []CasmEntryPoint
	Constructor            []CasmEntryPoint
	BytecodeSegmentLengths SegmentLengths
}

func (*CasmClass) Hash added in v0.15.9

func (c *CasmClass) Hash(version CasmHashVersion) felt.Felt

Hash computes the class hash using the specified hash version

type CasmEntryPoint added in v0.15.9

type CasmEntryPoint struct {
	Offset   uint64
	Builtins []string
	Selector *felt.Felt
}

type CasmHashVersion added in v0.15.11

type CasmHashVersion int

CasmHashVersion represents the version of the hash function used to compute the compiled class hash

const (
	// HashVersionV1 uses Poseidon hash
	HashVersionV1 CasmHashVersion = iota + 1
	// HashVersionV2 uses Blake2s hash
	HashVersionV2
)

type ClassCasmHashMetadata added in v0.15.17

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

ClassCasmHashMetadata tracks the CASM (Compiled Sierra) hash metadata for a class. It supports both hash versions for historical queries:

  • CasmHashV1: Uses Poseidon hash (HashVersionV1). Used for classes declared before protocol version 0.14.1. These classes can be migrated to CasmHashV2 at a later block.

  • CasmHashV2: Uses Blake2s hash (HashVersionV2). Used for classes declared from protocol version 0.14.1 onwards.

Protocol version 0.14.1 switch:

  • Before 0.14.1: Classes are declared with V1 hash (Poseidon). The V2 hash is pre-computed and stored for future migration.
  • From 0.14.1: Classes are declared directly with V2 hash (Blake2s). No V1 hash exists.
  • Migration: Classes declared before 0.14.1 can be migrated to V2 at a specific block (recorded in migratedAt). After migration, V2 hash is used for all queries.

The metadata structure ensures correct hash retrieval at any historical block height

func GetClassCasmHashMetadata added in v0.15.17

func GetClassCasmHashMetadata(
	r db.KeyValueReader,
	classHash *felt.SierraClassHash,
) (ClassCasmHashMetadata, error)

func NewCasmHashMetadataDeclaredV1 added in v0.15.17

func NewCasmHashMetadataDeclaredV1(
	declaredAt uint64,
	casmHashV1 *felt.CasmClassHash,
	casmHashV2 *felt.CasmClassHash,
) ClassCasmHashMetadata

NewCasmHashMetadataDeclaredV1 creates metadata for a class declared with V1 hash. Both casmHashV1 and casmHashV2 are required.

func NewCasmHashMetadataDeclaredV2 added in v0.15.17

func NewCasmHashMetadataDeclaredV2(
	declaredAt uint64,
	casmHashV2 *felt.CasmClassHash,
) ClassCasmHashMetadata

NewCasmHashMetadataDeclaredV2 creates metadata for a class declared with V2 hash. Only casmHashV2 is required.

func (*ClassCasmHashMetadata) CasmHash added in v0.15.17

CasmHash returns the CASM hash for a class at most recent height.

func (*ClassCasmHashMetadata) CasmHashAt added in v0.15.17

func (c *ClassCasmHashMetadata) CasmHashAt(height uint64) (felt.CasmClassHash, error)

CasmHashAt returns the CASM hash for a class at the given height.

func (*ClassCasmHashMetadata) CasmHashV2 added in v0.15.17

func (c *ClassCasmHashMetadata) CasmHashV2() felt.CasmClassHash

func (*ClassCasmHashMetadata) IsDeclaredWithV2 added in v0.15.17

func (c *ClassCasmHashMetadata) IsDeclaredWithV2() bool

func (*ClassCasmHashMetadata) IsMigrated added in v0.15.17

func (c *ClassCasmHashMetadata) IsMigrated() bool

func (*ClassCasmHashMetadata) IsMigratedAt added in v0.15.17

func (c *ClassCasmHashMetadata) IsMigratedAt(height uint64) bool

func (*ClassCasmHashMetadata) MarshalBinary added in v0.15.17

func (c *ClassCasmHashMetadata) MarshalBinary() ([]byte, error)

func (*ClassCasmHashMetadata) Migrate added in v0.15.17

func (c *ClassCasmHashMetadata) Migrate(migratedAt uint64) error

Migrate marks a V1 casm hash as migrated to V2 at the given height. casmHashV2 is already precomputed, so we only need to set migratedAt.

func (*ClassCasmHashMetadata) UnmarshalBinary added in v0.15.17

func (c *ClassCasmHashMetadata) UnmarshalBinary(data []byte) error

func (*ClassCasmHashMetadata) Unmigrate added in v0.15.17

func (c *ClassCasmHashMetadata) Unmigrate() error

Unmigrate clears the migration status, reverting the class to use V1 hash. This is used when the block where migration happened is reorged.

type ClassDefinition added in v0.15.9

type ClassDefinition interface {
	SierraVersion() string
	Hash() (felt.Felt, error)
}

type ContractUpdater added in v0.7.5

type ContractUpdater struct {
	// Address that this contract instance is deployed to
	Address *felt.Felt
	// contains filtered or unexported fields
}

ContractUpdater is a helper to update an existing contract instance.

func DeployContract added in v0.2.1

func DeployContract(addr, classHash *felt.Felt, txn db.IndexedBatch) (*ContractUpdater, error)

DeployContract sets up the database for a new contract.

func NewContractUpdater added in v0.7.5

func NewContractUpdater(addr *felt.Felt, txn db.IndexedBatch) (*ContractUpdater, error)

NewContractUpdater creates an updater for the contract instance at the given address. Deploy should be called for contracts that were just deployed to the network.

func (*ContractUpdater) Purge added in v0.7.5

func (c *ContractUpdater) Purge() error

Purge eliminates the contract instance, deleting all associated data from storage assumes storage is cleared in revert process

func (*ContractUpdater) Replace added in v0.7.5

func (c *ContractUpdater) Replace(classHash *felt.Felt) error

Replace replaces the class that the contract instantiates

func (*ContractUpdater) UpdateNonce added in v0.7.5

func (c *ContractUpdater) UpdateNonce(nonce *felt.Felt) error

UpdateNonce updates the nonce value in the database.

func (*ContractUpdater) UpdateStorage added in v0.7.5

func (c *ContractUpdater) UpdateStorage(diff map[felt.Felt]*felt.Felt, cb OnValueChanged) error

UpdateStorage applies a change-set to the contract storage.

type DataAvailability added in v0.11.0

type DataAvailability struct {
	L1Gas     uint64
	L1DataGas uint64
}

type DataAvailabilityMode added in v0.8.0

type DataAvailabilityMode uint32
const (
	DAModeL1 DataAvailabilityMode = iota
	DAModeL2
)

type DeclareTransaction

type DeclareTransaction struct {
	TransactionHash *felt.Felt
	// The class hash
	ClassHash *felt.Felt
	// The address of the account initiating the transaction.
	SenderAddress *felt.Felt
	// The maximum fee that the sender is willing to pay for the transaction.
	// Available in versions 1, 2
	MaxFee *felt.Felt
	// Additional information given by the sender, used to validate the transaction.
	TransactionSignature []*felt.Felt
	// The transaction nonce.
	Nonce *felt.Felt
	// The transaction’s version. Possible values are 0, 1, 2, or 3.
	// When the fields that comprise a transaction change,
	// either with the addition of a new field or the removal of an existing field,
	// then the transaction version increases.
	// Transaction version 0 is deprecated and will be removed in a future version of Starknet.
	Version *TransactionVersion

	// Version 2 fields
	CompiledClassHash *felt.Felt

	// Version 3 fields
	// See InvokeTransaction for descriptions of the fields.
	ResourceBounds        map[Resource]ResourceBounds
	Tip                   uint64
	PaymasterData         []*felt.Felt
	AccountDeploymentData []*felt.Felt
	NonceDAMode           DataAvailabilityMode
	FeeDAMode             DataAvailabilityMode
}

func (*DeclareTransaction) Hash

func (d *DeclareTransaction) Hash() *felt.Felt

func (*DeclareTransaction) Signature

func (d *DeclareTransaction) Signature() []*felt.Felt

func (*DeclareTransaction) TxVersion added in v0.8.0

func (d *DeclareTransaction) TxVersion() *TransactionVersion

type DeclaredClassDefinition added in v0.15.9

type DeclaredClassDefinition struct {
	At    uint64 // block number at which the class was declared
	Class ClassDefinition
}

DeclaredClassDefinition represents a class definition and the block number where it was declared

func GetClass added in v0.14.4

func GetClass(r db.KeyValueReader, classHash *felt.Felt) (*DeclaredClassDefinition, error)

func (*DeclaredClassDefinition) MarshalBinary added in v0.15.9

func (d *DeclaredClassDefinition) MarshalBinary() ([]byte, error)

func (*DeclaredClassDefinition) UnmarshalBinary added in v0.15.9

func (d *DeclaredClassDefinition) UnmarshalBinary(data []byte) error

type DeployAccountTransaction

type DeployAccountTransaction struct {
	DeployTransaction
	// The maximum fee that the sender is willing to pay for the transaction.
	MaxFee *felt.Felt
	// Additional information given by the sender, used to validate the transaction.
	TransactionSignature []*felt.Felt
	// The transaction nonce.
	Nonce *felt.Felt

	// Version 3 fields
	// See InvokeTransaction for descriptions of the fields.
	ResourceBounds map[Resource]ResourceBounds
	Tip            uint64
	PaymasterData  []*felt.Felt
	NonceDAMode    DataAvailabilityMode
	FeeDAMode      DataAvailabilityMode
}

func (*DeployAccountTransaction) Hash

func (d *DeployAccountTransaction) Hash() *felt.Felt

func (*DeployAccountTransaction) Signature

func (d *DeployAccountTransaction) Signature() []*felt.Felt

type DeployTransaction

type DeployTransaction struct {
	TransactionHash *felt.Felt
	// A random number used to distinguish between different instances of the contract.
	ContractAddressSalt *felt.Felt
	// The address of the contract.
	ContractAddress *felt.Felt
	// The hash of the class which defines the contract’s functionality.
	ClassHash *felt.Felt
	// The arguments passed to the constructor during deployment.
	ConstructorCallData []*felt.Felt
	// The transaction’s version. Possible values are 1 or 0.
	//
	// When the fields that comprise a transaction change,
	// either with the addition of a new field or the removal of an existing field,
	// then the transaction version increases.
	// Transaction version 0 is deprecated and will be removed in a future version of Starknet.
	Version *TransactionVersion
}

func (*DeployTransaction) Hash

func (d *DeployTransaction) Hash() *felt.Felt

func (*DeployTransaction) Signature

func (d *DeployTransaction) Signature() []*felt.Felt

func (*DeployTransaction) TxVersion added in v0.8.0

func (d *DeployTransaction) TxVersion() *TransactionVersion

type DeprecatedCairoClass added in v0.15.9

type DeprecatedCairoClass struct {
	Abi json.RawMessage
	// External functions defined in the class.
	Externals []DeprecatedEntryPoint
	// Functions that receive L1 messages. See
	// https://www.cairo-lang.org/docs/hello_starknet/l1l2.html#receiving-a-message-from-l1
	L1Handlers []DeprecatedEntryPoint
	// Constructors for the class. Currently, only one is allowed.
	Constructors []DeprecatedEntryPoint
	// Base64 encoding of compressed Program
	Program string
}

func (*DeprecatedCairoClass) Hash added in v0.15.9

func (c *DeprecatedCairoClass) Hash() (felt.Felt, error)

func (*DeprecatedCairoClass) SierraVersion added in v0.15.9

func (c *DeprecatedCairoClass) SierraVersion() string

func (*DeprecatedCairoClass) Version added in v0.15.9

func (c *DeprecatedCairoClass) Version() uint64

type DeprecatedEntryPoint added in v0.15.9

type DeprecatedEntryPoint struct {
	// starknet_keccak hash of the function signature.
	Selector *felt.Felt
	// The offset of the instruction in the class's bytecode.
	Offset *felt.Felt
}

type Event

type Event struct {
	Data []*felt.Felt
	From *felt.Felt
	Keys []*felt.Felt
}

type ExecutionResources

type ExecutionResources struct {
	BuiltinInstanceCounter BuiltinInstanceCounter
	MemoryHoles            uint64
	Steps                  uint64
	DataAvailability       *DataAvailability
	TotalGasConsumed       *GasConsumed
}

type FeeUnit added in v0.8.0

type FeeUnit byte
const (
	WEI FeeUnit = iota
	STRK
)

WEI is the default value since ETH is the first native currency. This allows us to avoid a costly database migration.

type GasConsumed added in v0.12.0

type GasConsumed struct {
	L1Gas     uint64
	L1DataGas uint64
	L2Gas     uint64
}

type GasPrice added in v0.11.0

type GasPrice struct {
	PriceInWei *felt.Felt
	PriceInFri *felt.Felt
}

type Hasher added in v0.15.11

type Hasher interface {
	HashArray(felts ...*felt.Felt) felt.Felt
	NewDigest() crypto.Digest
}

Hasher wraps hash algorithm operations

func NewCasmHasher added in v0.15.11

func NewCasmHasher(version CasmHashVersion) Hasher
type Header struct {
	// The hash of this block
	Hash *felt.Felt
	// The hash of this block’s parent
	ParentHash *felt.Felt
	// The number (height) of this block
	Number uint64
	// The state commitment after this block
	GlobalStateRoot *felt.Felt
	// The Starknet address of the sequencer who created this block
	SequencerAddress *felt.Felt
	// Number of transactions in this block
	TransactionCount uint64
	// Number of events stored in transaction receipts
	EventCount uint64
	// The time the sequencer created this block before executing transactions
	Timestamp uint64
	// Todo(rdr): It makes more sense for Protocol version to be stored in semver.Version instead
	// The version of the Starknet protocol used when creating this block
	ProtocolVersion string
	// Bloom filter on the events emitted this block
	EventsBloom *bloom.BloomFilter
	// L1 gas price in WEI (ETH), amount charged per unit of L1 gas
	L1GasPriceETH *felt.Felt `cbor:"gasprice"`
	// Consensus signatures on this block header (not account/transaction signatures)
	Signatures [][]*felt.Felt
	// L1 gas price in FRI (STRK), amount charged per unit of L1 gas
	L1GasPriceSTRK *felt.Felt `cbor:"gaspricestrk"`
	// L1 data availability mode for this block (CALLDATA or BLOB)
	L1DAMode L1DAMode
	// The gas price for L1 data availability
	L1DataGasPrice *GasPrice
	// The gas price for L2 execution
	L2GasPrice *GasPrice
}

func GetBlockHeaderByHash added in v0.14.4

func GetBlockHeaderByHash(r db.KeyValueReader, hash *felt.Felt) (*Header, error)

func GetBlockHeaderByNumber added in v0.14.4

func GetBlockHeaderByNumber(r db.KeyValueReader, blockNum uint64) (*Header, error)

type InvokeTransaction

type InvokeTransaction struct {
	TransactionHash *felt.Felt
	// The arguments that are passed to the validated and execute functions.
	CallData []*felt.Felt
	// Additional information given by the sender, used to validate the transaction.
	TransactionSignature []*felt.Felt
	// The maximum fee that the sender is willing to pay for the transaction
	// Available in version 1 only
	MaxFee *felt.Felt
	// The address of the contract invoked by this transaction.
	ContractAddress *felt.Felt
	// When the fields that comprise a transaction change,
	// either with the addition of a new field or the removal of an existing field,
	// then the transaction version increases.
	Version *TransactionVersion

	// Version 0 fields
	// The encoding of the selector for the function invoked (the entry point in the contract)
	EntryPointSelector *felt.Felt

	// Version 1 fields
	// The transaction nonce.
	Nonce *felt.Felt
	// The address of the sender of this transaction
	SenderAddress *felt.Felt

	// Version 3 fields (there was no version 2)
	ResourceBounds map[Resource]ResourceBounds
	Tip            uint64
	// From the RPC spec: data needed to allow the paymaster to pay for the transaction in native tokens
	PaymasterData []*felt.Felt
	// From RPC spec: data needed to deploy the account contract from which this tx will be initiated
	AccountDeploymentData []*felt.Felt
	// From RPC spec: The storage domain of the account's nonce (an account has a nonce per DA mode)
	NonceDAMode DataAvailabilityMode
	// From RPC spec: The storage domain of the account's balance from which fee will be charged
	FeeDAMode DataAvailabilityMode
}

func (*InvokeTransaction) Hash

func (i *InvokeTransaction) Hash() *felt.Felt

func (*InvokeTransaction) Signature

func (i *InvokeTransaction) Signature() []*felt.Felt

func (*InvokeTransaction) TxVersion added in v0.8.0

func (i *InvokeTransaction) TxVersion() *TransactionVersion

type L1DAMode added in v0.11.0

type L1DAMode uint
const (
	Calldata L1DAMode = iota
	Blob
)

type L1HandlerTransaction

type L1HandlerTransaction struct {
	TransactionHash *felt.Felt
	// The address of the contract.
	ContractAddress *felt.Felt
	// The encoding of the selector for the function invoked (the entry point in the contract)
	EntryPointSelector *felt.Felt
	// The transaction nonce.
	Nonce *felt.Felt
	// The arguments that are passed to the validated and execute functions.
	CallData []*felt.Felt
	// When the fields that comprise a transaction change,
	// either with the addition of a new field or the removal of an existing field,
	// then the transaction version increases.
	Version *TransactionVersion
}

func (*L1HandlerTransaction) Hash

func (l *L1HandlerTransaction) Hash() *felt.Felt

func (*L1HandlerTransaction) MessageHash added in v0.7.0

func (l *L1HandlerTransaction) MessageHash() []byte

func (*L1HandlerTransaction) Signature

func (l *L1HandlerTransaction) Signature() []*felt.Felt

func (*L1HandlerTransaction) TxVersion added in v0.8.0

func (l *L1HandlerTransaction) TxVersion() *TransactionVersion

type L1Head added in v0.4.0

type L1Head struct {
	BlockNumber uint64
	BlockHash   *felt.Felt
	StateRoot   *felt.Felt
}

func GetL1Head added in v0.14.4

func GetL1Head(r db.KeyValueReader) (L1Head, error)

type L1ToL2Message

type L1ToL2Message struct {
	// todo(rdr): Starknet from 0.14.1 has dropped the assumption that we use an EthAddress
	//            here. We should change this to felt.Address
	From     common.Address
	Nonce    *felt.Felt
	Payload  []*felt.Felt
	Selector *felt.Felt
	To       *felt.Felt
}

type L2ToL1Message

type L2ToL1Message struct {
	From    *felt.Felt
	Payload []*felt.Felt
	// todo(rdr): Starknet from 0.14.1 has dropped the assumption that we use an EthAddress
	//            here. We should change this to felt.Address
	To common.Address
}

type OnValueChanged added in v0.3.0

type OnValueChanged = func(location, oldValue *felt.Felt) error

type Pending added in v0.15.5

type Pending struct {
	Block       *Block
	StateUpdate *StateUpdate
	NewClasses  map[felt.Felt]ClassDefinition
}

func NewPending added in v0.15.5

func NewPending(
	block *Block,
	stateUpdate *StateUpdate,
	newClasses map[felt.Felt]ClassDefinition,
) Pending

func (*Pending) GetBlock added in v0.15.5

func (p *Pending) GetBlock() *Block

func (*Pending) GetCandidateTransaction added in v0.15.5

func (p *Pending) GetCandidateTransaction() []Transaction

func (*Pending) GetHeader added in v0.15.5

func (p *Pending) GetHeader() *Header

func (*Pending) GetNewClasses added in v0.15.5

func (p *Pending) GetNewClasses() map[felt.Felt]ClassDefinition

func (*Pending) GetPreLatest added in v0.15.6

func (p *Pending) GetPreLatest() *PreLatest

func (*Pending) GetStateUpdate added in v0.15.5

func (p *Pending) GetStateUpdate() *StateUpdate

func (*Pending) GetTransactionStateDiffs added in v0.15.5

func (p *Pending) GetTransactionStateDiffs() []*StateDiff

func (*Pending) GetTransactions added in v0.15.5

func (p *Pending) GetTransactions() []Transaction

func (*Pending) PendingState added in v0.15.9

func (p *Pending) PendingState(baseState StateReader) StateReader

func (*Pending) PendingStateBeforeIndex added in v0.15.9

func (p *Pending) PendingStateBeforeIndex(baseState StateReader, index uint) (StateReader, error)

func (*Pending) ReceiptByHash added in v0.15.8

func (p *Pending) ReceiptByHash(
	hash *felt.Felt,
) (*TransactionReceipt, *felt.Felt, uint64, error)

func (*Pending) TransactionByHash added in v0.15.8

func (p *Pending) TransactionByHash(hash *felt.Felt) (Transaction, error)

func (*Pending) Validate added in v0.15.6

func (p *Pending) Validate(parent *Header) bool

func (*Pending) Variant added in v0.15.5

func (p *Pending) Variant() PendingDataVariant

type PendingData added in v0.15.0

type PendingData interface {
	GetBlock() *Block
	GetHeader() *Header
	GetTransactions() []Transaction
	GetStateUpdate() *StateUpdate
	GetNewClasses() map[felt.Felt]ClassDefinition
	GetCandidateTransaction() []Transaction
	GetTransactionStateDiffs() []*StateDiff
	GetPreLatest() *PreLatest
	// Validate returns true if pendingData is valid for given predecessor,
	// otherwise returns false
	Validate(parent *Header) bool
	Variant() PendingDataVariant
	TransactionByHash(hash *felt.Felt) (Transaction, error)
	ReceiptByHash(hash *felt.Felt) (*TransactionReceipt, *felt.Felt, uint64, error)
	// PendingStateBeforeIndex returns the state obtained by applying all transaction state diffs
	// up to given index in the pre-confirmed block.
	PendingStateBeforeIndex(baseState StateReader, index uint) (StateReader, error)
	// PendingState returns the state resulting from execution of the pending data
	PendingState(baseState StateReader) StateReader
}

type PendingDataVariant added in v0.15.0

type PendingDataVariant uint8
const (
	PendingBlockVariant PendingDataVariant = iota + 1
	PreConfirmedBlockVariant
)

type PendingState added in v0.15.9

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

func NewPendingState added in v0.15.9

func NewPendingState(
	stateDiff *StateDiff,
	newClasses map[felt.Felt]ClassDefinition,
	head StateReader,
) *PendingState

func (*PendingState) Class added in v0.15.9

func (p *PendingState) Class(classHash *felt.Felt) (*DeclaredClassDefinition, error)

func (*PendingState) ClassTrie added in v0.15.9

func (p *PendingState) ClassTrie() (commontrie.Trie, error)

func (*PendingState) CompiledClassHash added in v0.15.11

func (p *PendingState) CompiledClassHash(
	classHash *felt.SierraClassHash,
) (felt.CasmClassHash, error)

func (*PendingState) CompiledClassHashV2 added in v0.15.11

func (p *PendingState) CompiledClassHashV2(
	classHash *felt.SierraClassHash,
) (felt.CasmClassHash, error)

func (*PendingState) ContractClassHash added in v0.15.9

func (p *PendingState) ContractClassHash(addr *felt.Felt) (felt.Felt, error)

func (*PendingState) ContractNonce added in v0.15.9

func (p *PendingState) ContractNonce(addr *felt.Felt) (felt.Felt, error)

func (*PendingState) ContractStorage added in v0.15.9

func (p *PendingState) ContractStorage(addr, key *felt.Felt) (felt.Felt, error)

func (*PendingState) ContractStorageTrie added in v0.15.9

func (p *PendingState) ContractStorageTrie(addr *felt.Felt) (commontrie.Trie, error)

func (*PendingState) ContractTrie added in v0.15.9

func (p *PendingState) ContractTrie() (commontrie.Trie, error)

func (*PendingState) StateDiff added in v0.15.9

func (p *PendingState) StateDiff() *StateDiff

type PendingStateWriter added in v0.15.9

type PendingStateWriter struct {
	*PendingState
}

func NewPendingStateWriter added in v0.15.9

func NewPendingStateWriter(
	stateDiff *StateDiff,
	newClasses map[felt.Felt]ClassDefinition,
	head StateReader,
) PendingStateWriter

func (*PendingStateWriter) IncrementNonce added in v0.15.9

func (p *PendingStateWriter) IncrementNonce(contractAddress *felt.Felt) error

func (*PendingStateWriter) SetClassHash added in v0.15.9

func (p *PendingStateWriter) SetClassHash(contractAddress, classHash *felt.Felt) error

func (*PendingStateWriter) SetCompiledClassHash added in v0.15.9

func (p *PendingStateWriter) SetCompiledClassHash(classHash, compiledClassHash *felt.Felt) error

SetCompiledClassHash writes CairoV1 classes to the pending state Assumption: SetContractClass was called for classHash and succeeded

func (*PendingStateWriter) SetContractClass added in v0.15.9

func (p *PendingStateWriter) SetContractClass(classHash *felt.Felt, class ClassDefinition) error

SetContractClass writes a new CairoV0 class to the PendingState Assumption: SetCompiledClassHash should be called for CairoV1 contracts

func (*PendingStateWriter) SetStateDiff added in v0.15.9

func (p *PendingStateWriter) SetStateDiff(stateDiff *StateDiff)

func (*PendingStateWriter) SetStorage added in v0.15.9

func (p *PendingStateWriter) SetStorage(contractAddress, key, value *felt.Felt) error

func (*PendingStateWriter) StateDiffAndClasses added in v0.15.9

func (p *PendingStateWriter) StateDiffAndClasses() (StateDiff, map[felt.Felt]ClassDefinition)

StateDiffAndClasses returns the pending state's internal data. The returned objects will continue to be read and modified by the pending state.

type PreConfirmed added in v0.15.0

type PreConfirmed struct {
	Block       *Block
	StateUpdate *StateUpdate
	// Node does not fetch unknown classes. but we keep it for sequencer
	NewClasses            map[felt.Felt]ClassDefinition
	TransactionStateDiffs []*StateDiff
	CandidateTxs          []Transaction
	// Optional field, exists if pre_confirmed is N+2 when latest is N
	PreLatest *PreLatest
}

func NewPreConfirmed added in v0.15.0

func NewPreConfirmed(
	block *Block,
	stateUpdate *StateUpdate,
	transactionStateDiffs []*StateDiff,
	candidateTxs []Transaction,
) PreConfirmed

func (*PreConfirmed) Copy added in v0.15.6

func (p *PreConfirmed) Copy() *PreConfirmed

func (*PreConfirmed) GetBlock added in v0.15.0

func (p *PreConfirmed) GetBlock() *Block

func (*PreConfirmed) GetCandidateTransaction added in v0.15.0

func (p *PreConfirmed) GetCandidateTransaction() []Transaction

func (*PreConfirmed) GetHeader added in v0.15.0

func (p *PreConfirmed) GetHeader() *Header

func (*PreConfirmed) GetNewClasses added in v0.15.0

func (p *PreConfirmed) GetNewClasses() map[felt.Felt]ClassDefinition

func (*PreConfirmed) GetPreLatest added in v0.15.6

func (p *PreConfirmed) GetPreLatest() *PreLatest

func (*PreConfirmed) GetStateUpdate added in v0.15.0

func (p *PreConfirmed) GetStateUpdate() *StateUpdate

func (*PreConfirmed) GetTransactionStateDiffs added in v0.15.0

func (p *PreConfirmed) GetTransactionStateDiffs() []*StateDiff

func (*PreConfirmed) GetTransactions added in v0.15.0

func (p *PreConfirmed) GetTransactions() []Transaction

func (*PreConfirmed) PendingState added in v0.15.9

func (p *PreConfirmed) PendingState(baseState StateReader) StateReader

func (*PreConfirmed) PendingStateBeforeIndex added in v0.15.9

func (p *PreConfirmed) PendingStateBeforeIndex(
	baseState StateReader,
	index uint,
) (StateReader, error)

func (*PreConfirmed) ReceiptByHash added in v0.15.8

func (p *PreConfirmed) ReceiptByHash(
	hash *felt.Felt,
) (*TransactionReceipt, *felt.Felt, uint64, error)

func (*PreConfirmed) TransactionByHash added in v0.15.8

func (p *PreConfirmed) TransactionByHash(hash *felt.Felt) (Transaction, error)

func (*PreConfirmed) Validate added in v0.15.6

func (p *PreConfirmed) Validate(parent *Header) bool

func (*PreConfirmed) Variant added in v0.15.0

func (p *PreConfirmed) Variant() PendingDataVariant

func (*PreConfirmed) WithNewClasses added in v0.15.6

func (p *PreConfirmed) WithNewClasses(newClasses map[felt.Felt]ClassDefinition) *PreConfirmed

func (*PreConfirmed) WithPreLatest added in v0.15.6

func (p *PreConfirmed) WithPreLatest(preLatest *PreLatest) *PreConfirmed

type PreLatest added in v0.15.6

type PreLatest Pending

type Resource added in v0.8.0

type Resource uint32
const (
	ResourceL1Gas Resource = iota + 1
	ResourceL2Gas
	ResourceL1DataGas
)

func (Resource) String added in v0.8.0

func (r Resource) String() string

type ResourceBounds added in v0.8.0

type ResourceBounds struct {
	MaxAmount uint64
	// MaxPricePerUnit is technically a uint128
	MaxPricePerUnit *felt.Felt
}

From the RPC spec: The max amount and max price per unit of gas used in this transaction.

func (ResourceBounds) Bytes added in v0.8.0

func (rb ResourceBounds) Bytes(resource Resource) []byte

func (ResourceBounds) IsZero added in v0.13.3

func (rb ResourceBounds) IsZero() bool

type RunningEventFilter added in v0.14.6

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

RunningEventFilter provides a thread-safe wrapper around AggregatedBloomFilter that automatically manages the creation of new filters when the current one reaches its capacity. It maintains the current state of event filtering across the blockchain.

func GetRunningEventFilter added in v0.14.6

func GetRunningEventFilter(r db.KeyValueReader) (*RunningEventFilter, error)

func NewRunningEventFilterHot added in v0.14.6

func NewRunningEventFilterHot(txn db.KeyValueStore, filter *AggregatedBloomFilter, nextBlock uint64) *RunningEventFilter

NewRunningFilter returns a RunningEventFilter that wraps the provided aggregated filter with the expected next block to process.

func NewRunningEventFilterLazy added in v0.14.6

func NewRunningEventFilterLazy(txn db.KeyValueStore) *RunningEventFilter

func (*RunningEventFilter) BlocksForKeys added in v0.14.6

func (f *RunningEventFilter) BlocksForKeys(keys [][]byte) *bitset.BitSet

BlocksForKeys returns a bitset indicating which blocks within the range might contain the given keys. If no keys are provided, returns a bitset with all bits set.

func (*RunningEventFilter) BlocksForKeysInto added in v0.14.6

func (f *RunningEventFilter) BlocksForKeysInto(keys [][]byte, out *bitset.BitSet) error

BlocksForKeysInto reuses a preallocated bitset (should be NumBlocksPerFilter bits).

func (*RunningEventFilter) Clone added in v0.14.6

Clone returns a deep copy of the RunningEventFilter—including a full copy of its internal AggregatedBloomFilter window.

func (*RunningEventFilter) FromBlock added in v0.14.6

func (f *RunningEventFilter) FromBlock() uint64

FromBlock returns the starting block number of the current filter window.

func (*RunningEventFilter) InnerFilter added in v0.14.6

func (f *RunningEventFilter) InnerFilter() *AggregatedBloomFilter

InnerFilter returns a deep copy of the current AggregatedBloomFilter window.

func (*RunningEventFilter) Insert added in v0.14.6

func (f *RunningEventFilter) Insert(
	bloom *bloom.BloomFilter,
	blockNumber uint64,
) error

Insert adds a bloom filter for a single block, updating the internal aggregated filter. If the current window is full, it will be persisted using WriteAggregatedBloomFilter and a new window will be started. This implementation assumes blocks are not missed. Returns an error if the block cannot be inserted.

func (*RunningEventFilter) MarshalBinary added in v0.14.6

func (f *RunningEventFilter) MarshalBinary() ([]byte, error)

func (*RunningEventFilter) NextBlock added in v0.14.6

func (f *RunningEventFilter) NextBlock() uint64

NextBlock returns the next block number to be processed.

func (*RunningEventFilter) OnReorg added in v0.14.6

func (f *RunningEventFilter) OnReorg() error

Clear erases the bloom filter data for the specified block

func (*RunningEventFilter) ToBlock added in v0.14.6

func (f *RunningEventFilter) ToBlock() uint64

ToBlock returns the ending block number of the current filter window.

func (*RunningEventFilter) UnmarshalBinary added in v0.14.6

func (f *RunningEventFilter) UnmarshalBinary(data []byte) error

func (*RunningEventFilter) Write added in v0.14.6

func (f *RunningEventFilter) Write() error

Write writes the current state of the RunningEventFilter to persistent storage.

type SegmentLengths added in v0.11.0

type SegmentLengths struct {
	Children []SegmentLengths
	Length   uint64
}

type SierraClass added in v0.15.9

type SierraClass struct {
	Abi         string
	AbiHash     *felt.Felt
	EntryPoints SierraEntryPointsByType
	Program     []*felt.Felt
	ProgramHash *felt.Felt
	// TODO: Remove this semantic version on a follow up PR. Let's put Sierra version instead
	SemanticVersion string
	Compiled        *CasmClass
}

func (*SierraClass) Hash added in v0.15.9

func (c *SierraClass) Hash() (felt.Felt, error)

func (*SierraClass) SierraVersion added in v0.15.9

func (c *SierraClass) SierraVersion() string

todo(rdr): Make the SierraVersion returned here a sem ver Returns the Sierra version for the Cairo 1 class

Sierra programs contain the version number in two possible formats. For pre-1.0-rc0 Cairo versions the program contains the Sierra version "0.1.0" as a shortstring in its first Felt (0x302e312e30 = "0.1.0"). For all subsequent versions the version number is the first three felts representing the three parts of a semantic version number.

func (*SierraClass) Version added in v0.15.9

func (c *SierraClass) Version() uint64

type SierraEntryPoint added in v0.2.1

type SierraEntryPoint struct {
	Index    uint64
	Selector *felt.Felt
}

type SierraEntryPointsByType added in v0.15.11

type SierraEntryPointsByType struct {
	Constructor []SierraEntryPoint
	External    []SierraEntryPoint
	L1Handler   []SierraEntryPoint
}

type State

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

func NewState

func NewState(txn db.IndexedBatch) *State

func (*State) Class added in v0.3.0

func (s *State) Class(classHash *felt.Felt) (*DeclaredClassDefinition, error)

Class returns the class object corresponding to the given classHash

func (*State) ClassTrie added in v0.13.0

func (s *State) ClassTrie() (commontrie.Trie, error)

func (*State) Commitment added in v0.15.10

func (s *State) Commitment() (felt.Felt, error)

Root returns the state commitment.

func (*State) CompiledClassHash added in v0.15.11

func (s *State) CompiledClassHash(
	classHash *felt.SierraClassHash,
) (felt.CasmClassHash, error)

func (*State) CompiledClassHashAt added in v0.15.17

func (s *State) CompiledClassHashAt(
	classHash *felt.SierraClassHash,
	blockNumber uint64,
) (felt.CasmClassHash, error)

func (*State) CompiledClassHashV2 added in v0.15.11

func (s *State) CompiledClassHashV2(
	classHash *felt.SierraClassHash,
) (felt.CasmClassHash, error)

func (*State) ContractClassHash added in v0.2.1

func (s *State) ContractClassHash(addr *felt.Felt) (felt.Felt, error)

ContractClassHash returns class hash of a contract at a given address.

func (*State) ContractClassHashAt added in v0.6.0

func (s *State) ContractClassHashAt(
	contractAddress *felt.Felt,
	height uint64,
) (felt.Felt, error)

func (*State) ContractDeployedAt added in v0.15.10

func (s *State) ContractDeployedAt(addr *felt.Felt, blockNumber uint64) (bool, error)

ContractDeployedAt returns if contract at given addr was deployed at blockNumber

func (*State) ContractNonce added in v0.2.1

func (s *State) ContractNonce(addr *felt.Felt) (felt.Felt, error)

ContractNonce returns nonce of a contract at a given address.

func (*State) ContractNonceAt added in v0.6.0

func (s *State) ContractNonceAt(contractAddress *felt.Felt, height uint64) (felt.Felt, error)

func (*State) ContractStorage added in v0.3.0

func (s *State) ContractStorage(addr, key *felt.Felt) (felt.Felt, error)

ContractStorage returns value of a key in the storage of the contract at the given address.

func (*State) ContractStorageAt added in v0.6.0

func (s *State) ContractStorageAt(
	contractAddress,
	storageLocation *felt.Felt,
	height uint64,
) (felt.Felt, error)

ContractStorageAt returns the value of a storage location of the given contract at the height `height`.

func (*State) ContractStorageTrie added in v0.13.0

func (s *State) ContractStorageTrie(addr *felt.Felt) (commontrie.Trie, error)

func (*State) ContractTrie added in v0.13.0

func (s *State) ContractTrie() (commontrie.Trie, error)

func (*State) GetReverseStateDiff added in v0.12.3

func (s *State) GetReverseStateDiff(blockNumber uint64, diff *StateDiff) (*StateDiff, error)

todo(rdr): return `StateDiff` by value

func (*State) Revert added in v0.4.0

func (s *State) Revert(blockNumber uint64, update *StateUpdate) error

func (*State) Update

func (s *State) Update(
	blockNumber uint64,
	update *StateUpdate,
	declaredClasses map[felt.Felt]ClassDefinition,
	skipVerifyNewRoot bool,
) error

Update applies a StateUpdate to the State object. State is not updated if an error is encountered during the operation. If update's old or new root does not match the state's old or new roots, [ErrMismatchedRoot] is returned.

type StateDiff

type StateDiff struct {
	// todo(rdr): replace felt.Felt for the right types (felt.Address to felt.What? to felt.What?)
	//            felt.What? means I'm not sure which type, but if it doesn't exist, create it.
	StorageDiffs map[felt.Felt]map[felt.Felt]*felt.Felt // addr -> {key -> value, ...}
	// todo(rdr): felt.Address to felt.Nonce (`Nonce` is a new type that should be created?)
	Nonces map[felt.Felt]*felt.Felt
	// todo(rdr): felt.Addr to felt.ClassHash (do we know if it will be `SierraClassHash or
	//            `CasmClassHash`)
	DeployedContracts map[felt.Felt]*felt.Felt
	// todo(rdr): an array of felt.ClassHash, or perhaps, felt.DeprecatedCairoClassHash
	//            Also, change the name from `DeclaredV0Classes` to `DeprecatedDeclaredClasses`
	DeclaredV0Classes []*felt.Felt
	// todo(rdr): felt.SierraClassHash to felt.CasmClassHash
	DeclaredV1Classes map[felt.Felt]*felt.Felt // class hash -> compiled class hash
	// todo(rdr): felt.Address to (felt.SierraClassHash or felt.CasmClassHash, I'm unsure)
	ReplacedClasses map[felt.Felt]*felt.Felt // addr -> class hash
	// Sierra Class definitions which had their compiled class hash definition (CASM)
	// migrated from poseidon hash to blake2s hash (Starknet 0.14.1)
	MigratedClasses map[felt.SierraClassHash]felt.CasmClassHash
}

func EmptyStateDiff added in v0.7.5

func EmptyStateDiff() StateDiff

func (*StateDiff) Commitment added in v0.7.0

func (d *StateDiff) Commitment() felt.Felt

func (*StateDiff) Hash added in v0.12.0

func (d *StateDiff) Hash() felt.Felt

func (*StateDiff) Length added in v0.12.0

func (d *StateDiff) Length() uint64

func (*StateDiff) Merge added in v0.14.3

func (d *StateDiff) Merge(incoming *StateDiff)

type StateHistoryReader added in v0.3.0

type StateHistoryReader interface {
	StateReader

	ContractStorageAt(addr, key *felt.Felt, blockNumber uint64) (felt.Felt, error)
	ContractNonceAt(addr *felt.Felt, blockNumber uint64) (felt.Felt, error)
	ContractClassHashAt(addr *felt.Felt, blockNumber uint64) (felt.Felt, error)
	ContractDeployedAt(addr *felt.Felt, blockNumber uint64) (bool, error)
	CompiledClassHashAt(
		classHash *felt.SierraClassHash,
		blockNumber uint64,
	) (felt.CasmClassHash, error)
}

type StateReader added in v0.3.0

type StateReader interface {
	ContractClassHash(addr *felt.Felt) (felt.Felt, error)
	ContractNonce(addr *felt.Felt) (felt.Felt, error)
	ContractStorage(addr, key *felt.Felt) (felt.Felt, error)
	Class(classHash *felt.Felt) (*DeclaredClassDefinition, error)
	CompiledClassHash(classHash *felt.SierraClassHash) (felt.CasmClassHash, error)
	CompiledClassHashV2(classHash *felt.SierraClassHash) (felt.CasmClassHash, error)
	ClassTrie() (commontrie.Trie, error)
	ContractTrie() (commontrie.Trie, error)
	ContractStorageTrie(addr *felt.Felt) (commontrie.Trie, error)
}

type StateUpdate

type StateUpdate struct {
	BlockHash *felt.Felt
	NewRoot   *felt.Felt
	OldRoot   *felt.Felt
	StateDiff *StateDiff
}

func GetStateUpdateByBlockNum added in v0.14.4

func GetStateUpdateByBlockNum(r db.KeyValueReader, blockNum uint64) (*StateUpdate, error)

func GetStateUpdateByHash added in v0.14.4

func GetStateUpdateByHash(r db.KeyValueReader, hash *felt.Felt) (*StateUpdate, error)

type Transaction

type Transaction interface {
	// TODO: This should be TransactionHash instead of Felt.
	Hash() *felt.Felt
	Signature() []*felt.Felt
	TxVersion() *TransactionVersion
}

func GetTxByHash added in v0.14.4

func GetTxByHash(r db.KeyValueReader, hash *felt.TransactionHash) (Transaction, error)

func GetTxsByBlockNum added in v0.14.4

func GetTxsByBlockNum(r db.KeyValueReader, blockNum uint64) ([]Transaction, error)

Returns all transactions in a given block

type TransactionReceipt

type TransactionReceipt struct {
	Fee                *felt.Felt
	FeeUnit            FeeUnit
	Events             []*Event
	ExecutionResources *ExecutionResources
	L1ToL2Message      *L1ToL2Message
	L2ToL1Message      []*L2ToL1Message
	TransactionHash    *felt.Felt
	Reverted           bool
	RevertReason       string
}

func GetReceiptByBlockNumIndex added in v0.15.17

func GetReceiptByBlockNumIndex(
	r db.KeyValueReader,
	num,
	index uint64,
) (TransactionReceipt, error)

func GetReceiptByHash added in v0.14.4

func GetReceiptByHash(
	r db.KeyValueReader,
	hash *felt.TransactionHash,
) (*TransactionReceipt, error)

TODO: Return TransactionReceipt instead of *TransactionReceipt.

func GetReceiptsByBlockNum added in v0.14.4

func GetReceiptsByBlockNum(r db.KeyValueReader, blockNum uint64) ([]*TransactionReceipt, error)

Returns all receipts in a given block

type TransactionVersion added in v0.6.2

type TransactionVersion felt.Felt

Keep in mind that this is used as a storage type, make sure you migrate the DB if you change the underlying type

func (*TransactionVersion) AsFelt added in v0.6.2

func (v *TransactionVersion) AsFelt() *felt.Felt

func (*TransactionVersion) HasQueryBit added in v0.6.2

func (v *TransactionVersion) HasQueryBit() bool

func (*TransactionVersion) Is added in v0.6.2

func (v *TransactionVersion) Is(u64 uint64) bool

Is compares the version (without query bit) with the given value

func (*TransactionVersion) MarshalCBOR added in v0.6.2

func (v *TransactionVersion) MarshalCBOR() ([]byte, error)

func (*TransactionVersion) SetUint64 added in v0.6.2

func (v *TransactionVersion) SetUint64(u64 uint64) *TransactionVersion

func (*TransactionVersion) String added in v0.6.2

func (v *TransactionVersion) String() string

func (*TransactionVersion) UnmarshalCBOR added in v0.6.2

func (v *TransactionVersion) UnmarshalCBOR(data []byte) error

func (*TransactionVersion) WithoutQueryBit added in v0.6.2

func (v *TransactionVersion) WithoutQueryBit() TransactionVersion

Directories

Path Synopsis
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
Package trie implements a dense Merkle Patricia Trie.
Package trie implements a dense Merkle Patricia Trie.

Jump to

Keyboard shortcuts

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