Starknet data reference
This page contains reference about the available data in Starknet DNA streams.
Related pages
Filter ID
All filters have an associated ID. To help clients correlate filters with data,
the filter ID is included in the filterIds
field of all data objects.
This field contains the list of all filter IDs that matched a piece of data.
Nullable fields
Important: most fields are nullable to allow evolving the protocol. You should always assert the presence of a field for critical indexers.
Field elements
Apibara represents Starknet field elements as hex-encode strings.
export type FieldElement = `0x${string}`;
Data types
Block
The root object is the Block
.
export type Block = {
header?: BlockHeader;
transactions: Transaction[];
receipts: TransactionReceipt[];
events: Event[];
messages: MessageToL1[];
storageDiffs: StorageDiff[];
contractChanges: ContractChange[];
nonceUpdates: NonceUpdate[];
};
Block header
This is the block header, which contains information about the block.
export type BlockHeader = {
blockHash?: FieldElement;
parentBlockHash?: FieldElement;
blockNumber?: bigint;
sequencerAddress?: FieldElement;
newRoot?: FieldElement;
timestamp?: Date;
starknetVersion?: string;
l1GasPrice?: ResourcePrice;
l1DataGasPrice?: ResourcePrice;
l1DataAvailabilityMode?: "blob" | "calldata";
};
export type ResourcePrice = {
priceInFri?: FieldElement;
priceInWei?: FieldElement;
};
Properties
-
blockHash
: the block hash. -
parentBlockHash
: the block hash of the parent block. -
blockNumber
: the block number. -
sequencerAddress
: the sequencer address. -
newRoot
: the new state root. -
timestamp
: the block timestamp. -
starknetVersion
: the Starknet version. -
l1GasPrice
: the L1 gas price. -
l1DataGasPrice
: the L1 data gas price. -
l1DataAvailabilityMode
: the L1 data availability mode. -
priceInFri
: the price of L1 gas in the block, in units of fri (10^-18 $STRK). -
priceInWei
: the price of L1 gas in the block, in units of wei (10^-18 $ETH).
Event
An event is emitted by a transaction.
export type Event = {
filterIds: number[];
address?: FieldElement;
keys: FieldElement[];
data: FieldElement[];
eventIndex?: number;
transactionIndex?: number;
transactionHash?: FieldElement;
transactionStatus?: "succeeded" | "reverted";
};
Properties
address
: the address of the contract that emitted the event.keys
: the keys of the event.data
: the data of the event.eventIndex
: the index of the event in the block.transactionIndex
: the index of the transaction that emitted the event.transactionHash
: the hash of the transaction that emitted the event.transactionStatus
: the status of the transaction that emitted the event.
Relevant filters
filter.events
filter.transactions[].includeEvents
filter.events[].includeSiblings
filter.messages[].includeEvents
Transaction
Starknet has different types of transactions, all of them are grouped together
in the Transaction
type. Common transaction information is accessible in the
meta
field.
export type TransactionMeta = {
transactionIndex?: number;
transactionHash?: FieldElement;
transactionStatus?: "succeeded" | "reverted";
};
export type Transaction = {
filterIds: number[];
meta?: TransactionMeta;
transaction?:
| InvokeTransactionV0
| InvokeTransactionV1
| InvokeTransactionV3
| L1HandlerTransaction
| DeployTransaction
| DeclareTransactionV0
| DeclareTransactionV1
| DeclareTransactionV2
| DeclareTransactionV3
| DeployAccountTransactionV1
| DeployAccountTransactionV3;
};
Properties
-
meta
: transaction metadata. -
transaction
: the transaction type. -
meta.transactionIndex
: the index of the transaction in the block. -
meta.transactionHash
: the hash of the transaction. -
meta.transactionStatus
: the status of the transaction.
Relevant filters
filter.transactions
filter.events[].includeTransaction
filter.messages[].includeTransaction
export type InvokeTransactionV0 = {
_tag: "invokeV0";
invokeV0: {
maxFee?: FieldElement;
signature: FieldElement[];
contractAddress?: FieldElement;
entryPointSelector?: FieldElement;
calldata: FieldElement[];
};
}
Properties
maxFee
: the maximum fee for the transaction.signature
: the signature of the transaction.contractAddress
: the address of the contract that will receive the call.entryPointSelector
: the selector of the function that will be called.calldata
: the calldata of the transaction.
export type InvokeTransactionV1 = {
_tag: "invokeV1";
invokeV1: {
senderAddress?: FieldElement;
calldata: FieldElement[];
maxFee?: FieldElement;
signature: FieldElement[];
nonce?: FieldElement;
};
};
Properties
senderAddress
: the address of the account that will send the transaction.calldata
: the calldata of the transaction.maxFee
: the maximum fee for the transaction.signature
: the signature of the transaction.nonce
: the nonce of the transaction.
export type ResourceBounds = {
maxAmount?: bigint;
maxPricePerUnit?: bigint;
}
export type ResourceBoundsMapping = {
l1Gas?: ResourceBounds;
l2Gas?: ResourceBounds;
};
export type InvokeTransactionV3 = {
_tag: "invokeV3";
invokeV3: {
senderAddress?: FieldElement;
calldata: FieldElement[];
signature: FieldElement[];
nonce?: FieldElement;
resourceBounds?: ResourceBoundsMapping;
tip?: bigint;
paymasterData: FieldElement[];
accountDeploymentData: FieldElement[];
nonceDataAvailabilityMode?: "l1" | "l2";
feeDataAvailabilityMode?: "l1" | "l2";
};
};
Properties
senderAddress
: the address of the account that will send the transaction.calldata
: the calldata of the transaction.signature
: the signature of the transaction.nonce
: the nonce of the transaction.resourceBounds
: the resource bounds of the transaction.tip
: the tip of the transaction.paymasterData
: the paymaster data of the transaction.accountDeploymentData
: the account deployment data of the transaction.nonceDataAvailabilityMode
: the nonce data availability mode of the transaction.feeDataAvailabilityMode
: the fee data availability mode of the transaction.
export type L1HandlerTransaction = {
_tag: "l1Handler";
l1Handler: {
contractAddress?: FieldElement;
entryPointSelector?: FieldElement;
calldata: FieldElement[];
nonce?: bigint;
};
}
Properties
contractAddress
: the address of the contract that will receive the call.entryPointSelector
: the selector of the function that will be called.calldata
: the calldata of the transaction.nonce
: the nonce of the transaction.
export type DeployTransaction = {
_tag: "deploy";
deploy: {
contractAddressSalt?: FieldElement;
constructorCalldata: FieldElement[];
classHash?: FieldElement;
};
}
Properties
contractAddressSalt
: the salt used to compute the contract address.constructorCalldata
: the calldata used to initialize the contract.classHash
: the class hash of the contract.
export type DeclareTransactionV0 = {
_tag: "declareV0";
declareV0: {
senderAddress?: FieldElement;
maxFee?: FieldElement;
signature: FieldElement[];
classHash?: FieldElement;
};
}
Properties
senderAddress
: the address of the account that will send the transaction.maxFee
: the maximum fee for the transaction.signature
: the signature of the transaction.classHash
: the class hash of the contract.
export type DeclareTransactionV1 = {
_tag: "declareV1";
declareV1: {
senderAddress?: FieldElement;
maxFee?: FieldElement;
signature: FieldElement[];
classHash?: FieldElement;
nonce?: FieldElement;
};
}
Properties
senderAddress
: the address of the account that will send the transaction.maxFee
: the maximum fee for the transaction.signature
: the signature of the transaction.classHash
: the class hash of the contract.nonce
: the nonce of the transaction.
export type DeclareTransactionV2 = {
_tag: "declareV2";
declareV2: {
senderAddress?: FieldElement;
maxFee?: FieldElement;
signature: FieldElement[];
classHash?: FieldElement;
nonce?: FieldElement;
compiledClassHash?: FieldElement;
};
}
Properties
senderAddress
: the address of the account that will send the transaction.maxFee
: the maximum fee for the transaction.signature
: the signature of the transaction.classHash
: the class hash of the contract.nonce
: the nonce of the transaction.compiledClassHash
: the compiled class hash of the contract.
export type ResourceBounds = {
maxAmount?: bigint;
maxPricePerUnit?: bigint;
}
export type ResourceBoundsMapping = {
l1Gas?: ResourceBounds;
l2Gas?: ResourceBounds;
};
export type DeclareTransactionV3 = {
_tag: "declareV3";
declareV3: {
senderAddress?: FieldElement;
maxFee?: FieldElement;
signature: FieldElement[];
classHash?: FieldElement;
nonce?: FieldElement;
compiledClassHash?: FieldElement;
resourceBounds?: ResourceBoundsMapping;
tip?: bigint;
paymasterData: FieldElement[];
accountDeploymentData: FieldElement[];
nonceDataAvailabilityMode?: "l1" | "l2";
feeDataAvailabilityMode?: "l1" | "l2";
};
}
Properties
senderAddress
: the address of the account that will send the transaction.maxFee
: the maximum fee for the transaction.signature
: the signature of the transaction.classHash
: the class hash of the contract.nonce
: the nonce of the transaction.compiledClassHash
: the compiled class hash of the contract.resourceBounds
: the resource bounds of the transaction.tip
: the tip of the transaction.paymasterData
: the paymaster data of the transaction.accountDeploymentData
: the account deployment data of the transaction.nonceDataAvailabilityMode
: the nonce data availability mode of the transaction.feeDataAvailabilityMode
: the fee data availability mode of the transaction.
export type DeployAccountTransactionV1 = {
_tag: "deployAccountV1";
deployAccountV1: {
maxFee?: FieldElement;
signature: FieldElement[];
nonce?: FieldElement;
contractAddressSalt?: FieldElement;
constructorCalldata: FieldElement[];
classHash?: FieldElement;
};
}
Properties
maxFee
: the maximum fee for the transaction.signature
: the signature of the transaction.nonce
: the nonce of the transaction.contractAddressSalt
: the salt used to compute the contract address.constructorCalldata
: the calldata used to initialize the contract.classHash
: the class hash of the contract.
export type DeployAccountTransactionV3 = {
_tag: "deployAccountV3";
deployAccountV3: {
signature: FieldElement[];
nonce?: FieldElement;
contractAddressSalt?: FieldElement;
constructorCalldata: FieldElement[];n
classHash?: FieldElement;
resourceBounds?: ResourceBoundsMapping;
tip?: bigint;
paymasterData: FieldElement[];
nonceDataAvailabilityMode?: "l1" | "l2";
feeDataAvailabilityMode?: "l1" | "l2";
};
};
Properties
signature
: the signature of the transaction.nonce
: the nonce of the transaction.contractAddressSalt
: the salt used to compute the contract address.constructorCalldata
: the calldata used to initialize the contract.classHash
: the class hash of the contractresourceBounds
: the resource bounds of the transaction.tip
: the tip of the transaction.paymasterData
: the paymaster data of the transaction.nonceDataAvailabilityMode
: the nonce data availability mode of the transaction.feeDataAvailabilityMode
: the fee data availability mode of the transaction.
Transaction receipt
The receipt of a transaction contains information about the execution of the transaction.
export type TransactionReceipt = {
filterIds: number[];
meta?: TransactionReceiptMeta;
receipt?:
| InvokeTransactionReceipt
| L1HandlerTransactionReceipt
| DeclareTransactionReceipt
| DeployTransactionReceipt
| DeployAccountTransactionReceipt;
};
export type TransactionReceiptMeta = {
transactionIndex?: number;
transactionHash?: FieldElement;
actualFee?: FeePayment;
executionResources?: ExecutionResources;
executionResult?: ExecutionSucceeded | ExecutionReverted;
};
export type InvokeTransactionReceipt = {
_tag: "invoke";
invoke: {}
};
export type L1HandlerTransactionReceipt = {
_tag: "l1Handler";
l1Handler: {
messageHash?: Uint8Array;
};
};
export type DeclareTransactionReceipt = {
_tag: "declare";
declare: {};
};
export type DeployTransactionReceipt = {
_tag: "deploy";
deploy: {
contractAddress?: FieldElement;
};
};
export type DeployAccountTransactionReceipt = {
_tag: "deployAccount";
deployAccount: {
contractAddress?: FieldElement;
};
};
export type ExecutionSucceeded = {
_tag: "succeeded";
succeeded: {};
};
export type ExecutionReverted = {
_tag: "reverted";
reverted: {
reason: string;
};
};
export type FeePayment = {
amount?: FieldElement;
unit?: "wei" | "strk";
};
Relevant filters
filter.transactions[].includeReceipt
filter.events[].includeReceipt
filter.messages[].includeReceipt
Message to L1
A message to L1 is sent by a transaction.
export type MessageToL1 = {
filterIds: number[];
fromAddress?: FieldElement;
toAddress?: FieldElement;
payload: FieldElement[];
messageIndex?: number;
transactionIndex?: number;
transactionHash?: FieldElement;
transactionStatus?: "succeeded" | "reverted";
};
Properties
fromAddress
: the address of the contract that sent the message.toAddress
: the address of the contract that received the message.payload
: the payload of the message.messageIndex
: the index of the message in the block.transactionIndex
: the index of the transaction that sent the message.transactionHash
: the hash of the transaction that sent the message.transactionStatus
: the status of the transaction that sent the message.
Relevant filters
filter.messages
filter.transactions[].includeMessages
filter.events[].includeMessages
Storage diff
A storage diff is a change to the storage of a contract.
export type StorageDiff = {
filterIds: number[];
contractAddress?: FieldElement;
storageEntries: StorageEntry[];
};
export type StorageEntry = {
key?: FieldElement;
value?: FieldElement;
};
Properties
-
contractAddress
: the contract whose storage changed. -
storageEntries
: the storage entries that changed. -
key
: the key of the storage entry that changed. -
value
: the new value of the storage entry that changed.
Relevant filters
filter.storageDiffs
Contract change
A change in the declared or deployed contracts.
export type ContractChange = {
filterIds: number[];
change?: DeclaredClass | ReplacedClass | DeployedContract;
};
export type DeclaredClass = {
_tag: "declaredClass";
declaredClass: {
classHash?: FieldElement;
compiledClassHash?: FieldElement;
};
};
export type ReplacedClass = {
_tag: "replacedClass";
replacedClass: {
contractAddress?: FieldElement;
classHash?: FieldElement;
};
};
export type DeployedContract = {
_tag: "deployedContract";
deployedContract: {
contractAddress?: FieldElement;
classHash?: FieldElement;
};
};
Relevant filters
filter.contractChanges
Nonce update
A change in the nonce of a contract.
export type NonceUpdate = {
filterIds: number[];
contractAddress?: FieldElement;
nonce?: FieldElement;
};
Properties
contractAddress
: the address of the contract whose nonce changed.nonce
: the new nonce of the contract.
Relevant filters
filter.nonceUpdates