From 26f811bbf2f80322901b647c3529b46d0b6f3024 Mon Sep 17 00:00:00 2001 From: Francesco Ceccon Date: Mon, 20 Jan 2025 15:46:51 +0100 Subject: [PATCH 1/4] starknet: make some types required --- packages/starknet/src/block.ts | 306 ++++++++++++++++----------------- 1 file changed, 149 insertions(+), 157 deletions(-) diff --git a/packages/starknet/src/block.ts b/packages/starknet/src/block.ts index 52f3d47..77a807e 100644 --- a/packages/starknet/src/block.ts +++ b/packages/starknet/src/block.ts @@ -76,13 +76,13 @@ export const U128 = Schema.transform( ); export const ResourceBounds = Schema.Struct({ - maxAmount: Schema.optional(Schema.BigIntFromSelf), - maxPricePerUnit: Schema.optional(U128), + maxAmount: Schema.BigIntFromSelf, + maxPricePerUnit: U128, }); export const ResourceBoundsMapping = Schema.Struct({ - l1Gas: Schema.optional(ResourceBounds), - l2Gas: Schema.optional(ResourceBounds), + l1Gas: ResourceBounds, + l2Gas: ResourceBounds, }); export const DataAvailabilityMode = Schema.transform( @@ -120,15 +120,15 @@ export const DataAvailabilityMode = Schema.transform( */ export const BlockHeader = Schema.Struct({ blockHash: Schema.optional(FieldElement), - parentBlockHash: Schema.optional(FieldElement), + parentBlockHash: FieldElement, blockNumber: Schema.BigIntFromSelf, - sequencerAddress: Schema.optional(FieldElement), + sequencerAddress: FieldElement, newRoot: Schema.optional(FieldElement), - timestamp: Schema.optional(Schema.DateFromSelf), - starknetVersion: Schema.optional(Schema.String), - l1GasPrice: Schema.optional(ResourcePrice), - l1DataGasPrice: Schema.optional(ResourcePrice), - l1DataAvailabilityMode: Schema.optional(L1DataAvailabilityMode), + timestamp: Schema.DateFromSelf, + starknetVersion: Schema.String, + l1GasPrice: ResourcePrice, + l1DataGasPrice: ResourcePrice, + l1DataAvailabilityMode: L1DataAvailabilityMode, }); export type BlockHeader = typeof BlockHeader.Type; @@ -142,9 +142,9 @@ export type BlockHeader = typeof BlockHeader.Type; * @prop transactionStatus The transaction status. */ export const TransactionMeta = Schema.Struct({ - transactionIndex: Schema.optional(Schema.Number), - transactionHash: Schema.optional(FieldElement), - transactionStatus: Schema.optional(TransactionStatus), + transactionIndex: Schema.Number, + transactionHash: FieldElement, + transactionStatus: TransactionStatus, }); export type TransactionMeta = typeof TransactionMeta.Type; @@ -152,135 +152,135 @@ export type TransactionMeta = typeof TransactionMeta.Type; export const InvokeTransactionV0 = Schema.Struct({ _tag: tag("invokeV0"), invokeV0: Schema.Struct({ - maxFee: Schema.optional(FieldElement), - signature: Schema.optional(Schema.Array(FieldElement)), - contractAddress: Schema.optional(FieldElement), - entryPointSelector: Schema.optional(FieldElement), - calldata: Schema.optional(Schema.Array(FieldElement)), + maxFee: FieldElement, + signature: Schema.Array(FieldElement), + contractAddress: FieldElement, + entryPointSelector: FieldElement, + calldata: Schema.Array(FieldElement), }), }); export const InvokeTransactionV1 = Schema.Struct({ _tag: tag("invokeV1"), invokeV1: Schema.Struct({ - senderAddress: Schema.optional(FieldElement), - calldata: Schema.optional(Schema.Array(FieldElement)), - maxFee: Schema.optional(FieldElement), - signature: Schema.optional(Schema.Array(FieldElement)), - nonce: Schema.optional(FieldElement), + senderAddress: FieldElement, + calldata: Schema.Array(FieldElement), + maxFee: FieldElement, + signature: Schema.Array(FieldElement), + nonce: FieldElement, }), }); export const InvokeTransactionV3 = Schema.Struct({ _tag: tag("invokeV3"), invokeV3: Schema.Struct({ - senderAddress: Schema.optional(FieldElement), - calldata: Schema.optional(Schema.Array(FieldElement)), - signature: Schema.optional(Schema.Array(FieldElement)), - nonce: Schema.optional(FieldElement), - resourceBounds: Schema.optional(ResourceBoundsMapping), - tip: Schema.optional(Schema.BigIntFromSelf), - paymasterData: Schema.optional(Schema.Array(FieldElement)), - accountDeploymentData: Schema.optional(Schema.Array(FieldElement)), - nonceDataAvailabilityMode: Schema.optional(DataAvailabilityMode), - feeDataAvailabilityMode: Schema.optional(DataAvailabilityMode), + senderAddress: FieldElement, + calldata: Schema.Array(FieldElement), + signature: Schema.Array(FieldElement), + nonce: FieldElement, + resourceBounds: ResourceBoundsMapping, + tip: Schema.BigIntFromSelf, + paymasterData: Schema.Array(FieldElement), + accountDeploymentData: Schema.Array(FieldElement), + nonceDataAvailabilityMode: DataAvailabilityMode, + feeDataAvailabilityMode: DataAvailabilityMode, }), }); export const L1HandlerTransaction = Schema.Struct({ _tag: tag("l1Handler"), l1Handler: Schema.Struct({ - nonce: Schema.optional(Schema.BigIntFromSelf), - contractAddress: Schema.optional(FieldElement), - entryPointSelector: Schema.optional(FieldElement), - calldata: Schema.optional(Schema.Array(FieldElement)), + nonce: Schema.BigIntFromSelf, + contractAddress: FieldElement, + entryPointSelector: FieldElement, + calldata: Schema.Array(FieldElement), }), }); export const DeployTransaction = Schema.Struct({ _tag: tag("deploy"), deploy: Schema.Struct({ - contractAddressSalt: Schema.optional(FieldElement), - constructorCalldata: Schema.optional(Schema.Array(FieldElement)), - classHash: Schema.optional(FieldElement), + contractAddressSalt: FieldElement, + constructorCalldata: Schema.Array(FieldElement), + classHash: FieldElement, }), }); export const DeclareTransactionV0 = Schema.Struct({ _tag: tag("declareV0"), declareV0: Schema.Struct({ - senderAddress: Schema.optional(FieldElement), - maxFee: Schema.optional(FieldElement), - signature: Schema.optional(Schema.Array(FieldElement)), - classHash: Schema.optional(FieldElement), + senderAddress: FieldElement, + maxFee: FieldElement, + signature: Schema.Array(FieldElement), + classHash: FieldElement, }), }); export const DeclareTransactionV1 = Schema.Struct({ _tag: tag("declareV1"), declareV1: Schema.Struct({ - senderAddress: Schema.optional(FieldElement), - maxFee: Schema.optional(FieldElement), - signature: Schema.optional(Schema.Array(FieldElement)), - nonce: Schema.optional(FieldElement), - classHash: Schema.optional(FieldElement), + senderAddress: FieldElement, + maxFee: FieldElement, + signature: Schema.Array(FieldElement), + nonce: FieldElement, + classHash: FieldElement, }), }); export const DeclareTransactionV2 = Schema.Struct({ _tag: tag("declareV2"), declareV2: Schema.Struct({ - senderAddress: Schema.optional(FieldElement), - compiledClassHash: Schema.optional(FieldElement), - maxFee: Schema.optional(FieldElement), - signature: Schema.optional(Schema.Array(FieldElement)), - nonce: Schema.optional(FieldElement), - classHash: Schema.optional(FieldElement), + senderAddress: FieldElement, + compiledClassHash: FieldElement, + maxFee: FieldElement, + signature: Schema.Array(FieldElement), + nonce: FieldElement, + classHash: FieldElement, }), }); export const DeclareTransactionV3 = Schema.Struct({ _tag: tag("declareV3"), declareV3: Schema.Struct({ - senderAddress: Schema.optional(FieldElement), - compiledClassHash: Schema.optional(FieldElement), - signature: Schema.optional(Schema.Array(FieldElement)), - nonce: Schema.optional(FieldElement), - classHash: Schema.optional(FieldElement), - resourceBounds: Schema.optional(ResourceBoundsMapping), - tip: Schema.optional(Schema.BigIntFromSelf), - paymasterData: Schema.optional(Schema.Array(FieldElement)), - accountDeploymentData: Schema.optional(Schema.Array(FieldElement)), - nonceDataAvailabilityMode: Schema.optional(DataAvailabilityMode), - feeDataAvailabilityMode: Schema.optional(DataAvailabilityMode), + senderAddress: FieldElement, + compiledClassHash: FieldElement, + signature: Schema.Array(FieldElement), + nonce: FieldElement, + classHash: FieldElement, + resourceBounds: ResourceBoundsMapping, + tip: Schema.BigIntFromSelf, + paymasterData: Schema.Array(FieldElement), + accountDeploymentData: Schema.Array(FieldElement), + nonceDataAvailabilityMode: DataAvailabilityMode, + feeDataAvailabilityMode: DataAvailabilityMode, }), }); export const DeployAccountTransactionV1 = Schema.Struct({ _tag: tag("deployAccountV1"), deployAccountV1: Schema.Struct({ - maxFee: Schema.optional(FieldElement), - signature: Schema.optional(Schema.Array(FieldElement)), - nonce: Schema.optional(FieldElement), - contractAddressSalt: Schema.optional(FieldElement), - constructorCalldata: Schema.optional(Schema.Array(FieldElement)), - classHash: Schema.optional(FieldElement), + maxFee: FieldElement, + signature: Schema.Array(FieldElement), + nonce: FieldElement, + contractAddressSalt: FieldElement, + constructorCalldata: Schema.Array(FieldElement), + classHash: FieldElement, }), }); export const DeployAccountTransactionV3 = Schema.Struct({ _tag: tag("deployAccountV3"), deployAccountV3: Schema.Struct({ - signature: Schema.optional(Schema.Array(FieldElement)), - nonce: Schema.optional(FieldElement), - contractAddressSalt: Schema.optional(FieldElement), - constructorCalldata: Schema.optional(Schema.Array(FieldElement)), - classHash: Schema.optional(FieldElement), - resourceBounds: Schema.optional(ResourceBoundsMapping), - tip: Schema.optional(Schema.BigIntFromSelf), - paymasterData: Schema.optional(Schema.Array(FieldElement)), - nonceDataAvailabilityMode: Schema.optional(DataAvailabilityMode), - feeDataAvailabilityMode: Schema.optional(DataAvailabilityMode), + signature: Schema.Array(FieldElement), + nonce: FieldElement, + contractAddressSalt: FieldElement, + constructorCalldata: Schema.Array(FieldElement), + classHash: FieldElement, + resourceBounds: ResourceBoundsMapping, + tip: Schema.BigIntFromSelf, + paymasterData: Schema.Array(FieldElement), + nonceDataAvailabilityMode: DataAvailabilityMode, + feeDataAvailabilityMode: DataAvailabilityMode, }), }); @@ -289,22 +289,20 @@ export const DeployAccountTransactionV3 = Schema.Struct({ * @prop meta Transaction metadata. */ export const Transaction = Schema.Struct({ - filterIds: Schema.optional(Schema.Array(Schema.Number)), - meta: Schema.optional(TransactionMeta), - transaction: Schema.optional( - Schema.Union( - InvokeTransactionV0, - InvokeTransactionV1, - InvokeTransactionV3, - L1HandlerTransaction, - DeployTransaction, - DeclareTransactionV0, - DeclareTransactionV1, - DeclareTransactionV2, - DeclareTransactionV3, - DeployAccountTransactionV1, - DeployAccountTransactionV3, - ), + filterIds: Schema.Array(Schema.Number), + meta: TransactionMeta, + transaction: Schema.Union( + InvokeTransactionV0, + InvokeTransactionV1, + InvokeTransactionV3, + L1HandlerTransaction, + DeployTransaction, + DeclareTransactionV0, + DeclareTransactionV1, + DeclareTransactionV2, + DeclareTransactionV3, + DeployAccountTransactionV1, + DeployAccountTransactionV3, ), }); @@ -331,12 +329,12 @@ export const PriceUnit = Schema.transform( ); export const FeePayment = Schema.Struct({ - amount: Schema.optional(FieldElement), - unit: Schema.optional(PriceUnit), + amount: FieldElement, + unit: PriceUnit, }); export const ComputationResources = Schema.Struct({ - steps: Schema.optional(Schema.BigIntFromSelf), + steps: Schema.BigIntFromSelf, memoryHoles: Schema.optional(Schema.BigIntFromSelf), rangeCheckBuiltinApplications: Schema.optional(Schema.BigIntFromSelf), pedersenBuiltinApplications: Schema.optional(Schema.BigIntFromSelf), @@ -349,13 +347,13 @@ export const ComputationResources = Schema.Struct({ }); export const DataAvailabilityResources = Schema.Struct({ - l1Gas: Schema.optional(Schema.BigIntFromSelf), - l1DataGas: Schema.optional(Schema.BigIntFromSelf), + l1Gas: Schema.BigIntFromSelf, + l1DataGas: Schema.BigIntFromSelf, }); export const ExecutionResources = Schema.Struct({ - computation: Schema.optional(ComputationResources), - dataAvailability: Schema.optional(DataAvailabilityResources), + computation: ComputationResources, + dataAvailability: DataAvailabilityResources, }); export const ExecutionSucceeded = Schema.Struct({ @@ -372,13 +370,11 @@ export const ExecutionReverted = Schema.Struct({ /** Common fields for all transaction receipts. */ export const TransactionReceiptMeta = Schema.Struct({ - transactionIndex: Schema.optional(Schema.Number), - transactionHash: Schema.optional(FieldElement), - actualFee: Schema.optional(FeePayment), - executionResources: Schema.optional(ExecutionResources), - executionResult: Schema.optional( - Schema.Union(ExecutionSucceeded, ExecutionReverted), - ), + transactionIndex: Schema.Number, + transactionHash: FieldElement, + actualFee: FeePayment, + executionResources: ExecutionResources, + executionResult: Schema.Union(ExecutionSucceeded, ExecutionReverted), }); export const InvokeTransactionReceipt = Schema.Struct({ @@ -389,7 +385,7 @@ export const InvokeTransactionReceipt = Schema.Struct({ export const L1HandlerTransactionReceipt = Schema.Struct({ _tag: tag("l1Handler"), l1Handler: Schema.Struct({ - messageHash: Schema.optional(Schema.Uint8ArrayFromSelf), + messageHash: Schema.Uint8ArrayFromSelf, }), }); @@ -401,14 +397,14 @@ export const DeclareTransactionReceipt = Schema.Struct({ export const DeployTransactionReceipt = Schema.Struct({ _tag: tag("deploy"), deploy: Schema.Struct({ - contractAddress: Schema.optional(FieldElement), + contractAddress: FieldElement, }), }); export const DeployAccountTransactionReceipt = Schema.Struct({ _tag: tag("deployAccount"), deployAccount: Schema.Struct({ - contractAddress: Schema.optional(FieldElement), + contractAddress: FieldElement, }), }); @@ -418,16 +414,14 @@ export const DeployAccountTransactionReceipt = Schema.Struct({ * @prop receipt Transaction-specific receipt. */ export const TransactionReceipt = Schema.Struct({ - filterIds: Schema.optional(Schema.Array(Schema.Number)), - meta: Schema.optional(TransactionReceiptMeta), - receipt: Schema.optional( - Schema.Union( - InvokeTransactionReceipt, - L1HandlerTransactionReceipt, - DeclareTransactionReceipt, - DeployTransactionReceipt, - DeployAccountTransactionReceipt, - ), + filterIds: Schema.Array(Schema.Number), + meta: TransactionReceiptMeta, + receipt: Schema.Union( + InvokeTransactionReceipt, + L1HandlerTransactionReceipt, + DeclareTransactionReceipt, + DeployTransactionReceipt, + DeployAccountTransactionReceipt, ), }); @@ -445,15 +439,15 @@ export type TransactionReceipt = typeof TransactionReceipt.Type; * @prop eventIndexInTransaction The event index in the transaction. */ export const Event = Schema.Struct({ - filterIds: Schema.optional(Schema.Array(Schema.Number)), - address: Schema.optional(FieldElement), - keys: Schema.optional(Schema.Array(FieldElement)), - data: Schema.optional(Schema.Array(FieldElement)), - eventIndex: Schema.optional(Schema.Number), - transactionIndex: Schema.optional(Schema.Number), - transactionHash: Schema.optional(FieldElement), - transactionStatus: Schema.optional(TransactionStatus), - eventIndexInTransaction: Schema.optional(Schema.Number), + filterIds: Schema.Array(Schema.Number), + address: FieldElement, + keys: Schema.Array(FieldElement), + data: Schema.Array(FieldElement), + eventIndex: Schema.Number, + transactionIndex: Schema.Number, + transactionHash: FieldElement, + transactionStatus: TransactionStatus, + eventIndexInTransaction: Schema.Number, }); export type Event = typeof Event.Type; @@ -470,15 +464,15 @@ export type Event = typeof Event.Type; * @prop messageIndexInTransaction The message index in the transaction. */ export const MessageToL1 = Schema.Struct({ - filterIds: Schema.optional(Schema.Array(Schema.Number)), - fromAddress: Schema.optional(FieldElement), - toAddress: Schema.optional(FieldElement), - payload: Schema.optional(Schema.Array(FieldElement)), - messageIndex: Schema.optional(Schema.Number), - transactionIndex: Schema.optional(Schema.Number), - transactionHash: Schema.optional(FieldElement), - transactionStatus: Schema.optional(TransactionStatus), - messageIndexInTransaction: Schema.optional(Schema.Number), + filterIds: Schema.Array(Schema.Number), + fromAddress: FieldElement, + toAddress: FieldElement, + payload: Schema.Array(FieldElement), + messageIndex: Schema.Number, + transactionIndex: Schema.Number, + transactionHash: FieldElement, + transactionStatus: TransactionStatus, + messageIndexInTransaction: Schema.Number, }); export type MessageToL1 = typeof MessageToL1.Type; @@ -489,8 +483,8 @@ export type MessageToL1 = typeof MessageToL1.Type; * @prop value The new value at the storage location. */ export const StorageEntry = Schema.Struct({ - key: Schema.optional(FieldElement), - value: Schema.optional(FieldElement), + key: FieldElement, + value: FieldElement, }); export type StorageEntry = typeof StorageEntry.Type; @@ -501,9 +495,9 @@ export type StorageEntry = typeof StorageEntry.Type; * @prop storageEntries The entries that changed. */ export const StorageDiff = Schema.Struct({ - filterIds: Schema.optional(Schema.Array(Schema.Number)), - contractAddress: Schema.optional(FieldElement), - storageEntries: Schema.optional(Schema.Array(StorageEntry)), + filterIds: Schema.Array(Schema.Number), + contractAddress: FieldElement, + storageEntries: Schema.Array(StorageEntry), }); export type StorageDiff = typeof StorageDiff.Type; @@ -559,10 +553,8 @@ export type DeployedContract = typeof DeployedContract.Type; * @prop change The change. */ export const ContractChange = Schema.Struct({ - filterIds: Schema.optional(Schema.Array(Schema.Number)), - change: Schema.optional( - Schema.Union(DeclaredClass, ReplacedClass, DeployedContract), - ), + filterIds: Schema.Array(Schema.Number), + change: Schema.Union(DeclaredClass, ReplacedClass, DeployedContract), }); export type ContractChange = typeof ContractChange.Type; @@ -573,9 +565,9 @@ export type ContractChange = typeof ContractChange.Type; * @prop nonce The new nonce. */ export const NonceUpdate = Schema.Struct({ - filterIds: Schema.optional(Schema.Array(Schema.Number)), - contractAddress: Schema.optional(FieldElement), - nonce: Schema.optional(FieldElement), + filterIds: Schema.Array(Schema.Number), + contractAddress: FieldElement, + nonce: FieldElement, }); export type NonceUpdate = typeof NonceUpdate.Type; @@ -591,7 +583,7 @@ export type NonceUpdate = typeof NonceUpdate.Type; * @prop contractChanges The changes to contracts and classes. */ export const Block = Schema.Struct({ - header: Schema.optional(BlockHeader), + header: BlockHeader, transactions: Schema.Array(Transaction), receipts: Schema.Array(TransactionReceipt), events: Schema.Array(Event), From be62254693b45f27b71c27208a143f6bdd10a2d2 Mon Sep 17 00:00:00 2001 From: Francesco Ceccon Date: Mon, 20 Jan 2025 16:04:34 +0100 Subject: [PATCH 2/4] evm: make more fields required --- examples/evm-client/src/main.ts | 5 +- packages/evm/src/block.ts | 84 ++++++++++++++++----------------- 2 files changed, 44 insertions(+), 45 deletions(-) diff --git a/examples/evm-client/src/main.ts b/examples/evm-client/src/main.ts index 7629fa0..0c1155b 100644 --- a/examples/evm-client/src/main.ts +++ b/examples/evm-client/src/main.ts @@ -20,7 +20,7 @@ const command = defineCommand({ args: { stream: { type: "string", - default: "https://sepolia.ethereum.a5a.ch", + default: "https://ethereum-sepolia.preview.apibara.org", description: "EVM stream URL", }, authToken: { @@ -36,8 +36,7 @@ const command = defineCommand({ console.log(response); const filter = Filter.make({ - header: "on_data", - transactions: [{}], + transactions: [{ includeReceipt: true, transactionStatus: "all", includeLogs: true }], withdrawals: [{}], logs: [{}], }); diff --git a/packages/evm/src/block.ts b/packages/evm/src/block.ts index 72d596f..1454e86 100644 --- a/packages/evm/src/block.ts +++ b/packages/evm/src/block.ts @@ -44,18 +44,18 @@ export type TransactionStatus = typeof TransactionStatus.Type; export const BlockHeader = Schema.Struct({ blockNumber: Schema.BigIntFromSelf, - blockHash: Schema.optional(B256), - parentBlockHash: Schema.optional(B256), - unclesHash: Schema.optional(B256), - miner: Schema.optional(Address), - stateRoot: Schema.optional(B256), - transactionsRoot: Schema.optional(B256), - receiptsRoot: Schema.optional(B256), - logsBloom: Schema.optional(Bloom), - difficulty: Schema.optional(U256), - gasLimit: Schema.optional(U128), - gasUsed: Schema.optional(U128), - timestamp: Schema.optional(Schema.DateFromSelf), + blockHash: B256, + parentBlockHash: B256, + unclesHash: B256, + miner: Address, + stateRoot: B256, + transactionsRoot: B256, + receiptsRoot: B256, + logsBloom: Bloom, + difficulty: U256, + gasLimit: U128, + gasUsed: U128, + timestamp: Schema.DateFromSelf, extraData: BytesFromUint8Array, mixHash: Schema.optional(B256), nonce: Schema.optional(Schema.BigIntFromSelf), @@ -70,81 +70,81 @@ export const BlockHeader = Schema.Struct({ export type BlockHeader = typeof BlockHeader.Type; export const Withdrawal = Schema.Struct({ - filterIds: Schema.optional(Schema.Array(Schema.Number)), + filterIds: Schema.Array(Schema.Number), withdrawalIndex: Schema.Number, index: Schema.BigIntFromSelf, validatorIndex: Schema.Number, - address: Schema.optional(Address), - amount: Schema.optional(Schema.BigIntFromSelf), + address: Address, + amount: Schema.BigIntFromSelf, }); export const AccessListItem = Schema.Struct({ - address: Schema.optional(Address), + address: Address, storageKeys: Schema.Array(B256), }); export const Signature = Schema.Struct({ - r: Schema.optional(U256), - s: Schema.optional(U256), - v: Schema.optional(U256), + r: U256, + s: U256, + v: U256, YParity: Schema.optional(Schema.Boolean), }); export const Transaction = Schema.Struct({ - filterIds: Schema.optional(Schema.Array(Schema.Number)), + filterIds: Schema.Array(Schema.Number), transactionIndex: Schema.Number, - transactionHash: Schema.optional(B256), - nonce: Schema.optional(Schema.BigIntFromSelf), - from: Schema.optional(Address), + transactionHash: B256, + nonce: Schema.BigIntFromSelf, + from: Address, to: Schema.optional(Address), - value: Schema.optional(U256), + value: U256, gasPrice: Schema.optional(U128), - gas: Schema.optional(U128), + gas: U128, maxFeePerGas: Schema.optional(U128), maxPriorityFeePerGas: Schema.optional(U128), input: BytesFromUint8Array, signature: Schema.optional(Signature), chainId: Schema.optional(Schema.BigIntFromSelf), accessList: Schema.Array(AccessListItem), - transactionType: Schema.optional(Schema.BigIntFromSelf), + transactionType: Schema.BigIntFromSelf, maxFeePerBlobGas: Schema.optional(U128), blobVersionedHashes: Schema.Array(B256), - transactionStatus: Schema.optional(TransactionStatus), + transactionStatus: TransactionStatus, }); export const TransactionReceipt = Schema.Struct({ - filterIds: Schema.optional(Schema.Array(Schema.Number)), - transactionIndex: Schema.optional(Schema.Number), - transactionHash: Schema.optional(B256), - cumulativeGasUsed: Schema.optional(U128), - gasUsed: Schema.optional(U128), - effectiveGasPrice: Schema.optional(U128), - from: Schema.optional(Address), + filterIds: Schema.Array(Schema.Number), + transactionIndex: Schema.Number, + transactionHash: B256, + cumulativeGasUsed: U128, + gasUsed: U128, + effectiveGasPrice: U128, + from: Address, to: Schema.optional(Address), contractAddress: Schema.optional(Address), - logsBloom: Schema.optional(Bloom), - transactionType: Schema.optional(Schema.BigIntFromSelf), + logsBloom: Bloom, + transactionType: Schema.BigIntFromSelf, blobGasUsed: Schema.optional(U128), blobGasPrice: Schema.optional(U128), - transactionStatus: Schema.optional(TransactionStatus), + transactionStatus: TransactionStatus, }); export const Log = Schema.Struct({ - filterIds: Schema.optional(Schema.Array(Schema.Number)), - address: Schema.optional(Address), + filterIds: Schema.Array(Schema.Number), + address: Address, topics: Schema.Array(B256), data: BytesFromUint8Array, logIndex: Schema.Number, logIndexInTransaction: Schema.Number, transactionIndex: Schema.Number, - transactionHash: Schema.optional(B256), - transactionStatus: Schema.optional(TransactionStatus), + transactionHash: B256, + transactionStatus: TransactionStatus, }); export type Log = typeof Log.Type; export const Block = Schema.Struct({ - header: Schema.optional(BlockHeader), + header: BlockHeader, withdrawals: Schema.Array(Withdrawal), transactions: Schema.Array(Transaction), receipts: Schema.Array(TransactionReceipt), From 9bc1602426c78cd8236c1e3e0a9daf3579b7446a Mon Sep 17 00:00:00 2001 From: Francesco Ceccon Date: Mon, 20 Jan 2025 16:14:53 +0100 Subject: [PATCH 3/4] beaconchain: make fields required --- examples/beaconchain-client/src/main.ts | 12 +-- examples/evm-client/src/main.ts | 4 +- examples/starknet-client/src/main.ts | 43 ++++------ packages/beaconchain/src/block.ts | 103 +++++++++++++----------- 4 files changed, 78 insertions(+), 84 deletions(-) diff --git a/examples/beaconchain-client/src/main.ts b/examples/beaconchain-client/src/main.ts index 12b561b..7ec6211 100644 --- a/examples/beaconchain-client/src/main.ts +++ b/examples/beaconchain-client/src/main.ts @@ -38,17 +38,9 @@ const command = defineCommand({ console.log(response); const filter = Filter.make({ - // blobs: [{ includeTransaction: true }], - // transactions: [ - // { - // // create: true, - // // to: "0xFf00000000000000000000000000000000102421", - // // to: "0xAD3C787556B1E9D32D3AE4f2A0B4b1dC6692eDAc", - // // includeBlob: true, - // }, - // ], + validators: [{}], + transactions: [{}], blobs: [{}], - // validators: [{}], }); const startBlock = 5_931_000; diff --git a/examples/evm-client/src/main.ts b/examples/evm-client/src/main.ts index 0c1155b..ad6f509 100644 --- a/examples/evm-client/src/main.ts +++ b/examples/evm-client/src/main.ts @@ -36,7 +36,9 @@ const command = defineCommand({ console.log(response); const filter = Filter.make({ - transactions: [{ includeReceipt: true, transactionStatus: "all", includeLogs: true }], + transactions: [ + { includeReceipt: true, transactionStatus: "all", includeLogs: true }, + ], withdrawals: [{}], logs: [{}], }); diff --git a/examples/starknet-client/src/main.ts b/examples/starknet-client/src/main.ts index 5f8a7b7..fa0b7ac 100644 --- a/examples/starknet-client/src/main.ts +++ b/examples/starknet-client/src/main.ts @@ -1,16 +1,8 @@ import assert from "node:assert"; import { createClient } from "@apibara/protocol"; -import { - type Abi, - Filter, - StarknetStream, - decodeEvent, - getSelector, -} from "@apibara/starknet"; +import { type Abi, Filter, StarknetStream } from "@apibara/starknet"; import { defineCommand, runMain } from "citty"; import consola from "consola"; -import { colors } from "consola/utils"; -import { formatUnits } from "viem"; const abi = [ { @@ -62,20 +54,19 @@ const command = defineCommand({ console.log(response); const filter = Filter.make({ - events: [ - { - address: - "0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8", - keys: [getSelector("Transfer")], - }, - ], + transactions: [{ includeReceipt: true }], + messages: [{}], + events: [{}], + storageDiffs: [{}], + contractChanges: [{}], + nonceUpdates: [{}], }); const request = StarknetStream.Request.make({ filter: [filter], - finality: "accepted", + finality: "pending", startingCursor: { - orderKey: 1_078_335n, + orderKey: 1_083_705n, }, }); @@ -95,14 +86,14 @@ const command = defineCommand({ ); for (const event of block.events) { - const { args, transactionHash } = decodeEvent({ - abi, - eventName: "Transfer", - event, - }); - consola.info( - `${prettyAddress(args.from)} -> ${prettyAddress(args.to)} ${formatUnits(args.value, 6)} ${colors.gray(transactionHash ?? "")}`, - ); + // const { args, transactionHash } = decodeEvent({ + // abi, + // eventName: "Transfer", + // event, + // }); + // consola.info( + // `${prettyAddress(args.from)} -> ${prettyAddress(args.to)} ${formatUnits(args.value, 6)} ${colors.gray(transactionHash ?? "")}`, + // ); } } diff --git a/packages/beaconchain/src/block.ts b/packages/beaconchain/src/block.ts index 7eb9cb5..7275b00 100644 --- a/packages/beaconchain/src/block.ts +++ b/packages/beaconchain/src/block.ts @@ -1,4 +1,4 @@ -import { AccessListItem, Signature } from "@apibara/evm"; +import { AccessListItem } from "@apibara/evm"; import { BytesFromUint8Array } from "@apibara/protocol"; import { Schema } from "@effect/schema"; @@ -6,14 +6,14 @@ import { Address, B256, B384, U128, U256, ValidatorStatus } from "./common"; import * as proto from "./proto"; export const ExecutionPayload = Schema.Struct({ - parentHash: Schema.optional(B256), - feeRecipient: Schema.optional(Address), - stateRoot: Schema.optional(B256), - receiptsRoot: Schema.optional(B256), + parentHash: B256, + feeRecipient: Address, + stateRoot: B256, + receiptsRoot: B256, logsBloom: BytesFromUint8Array, - prevRandao: Schema.optional(B256), - blockNumber: Schema.optional(Schema.BigIntFromSelf), - timestamp: Schema.optional(Schema.DateFromSelf), + prevRandao: B256, + blockNumber: Schema.BigIntFromSelf, + timestamp: Schema.DateFromSelf, }); export type ExecutionPayload = typeof ExecutionPayload.Type; @@ -21,71 +21,80 @@ export type ExecutionPayload = typeof ExecutionPayload.Type; export const BlockHeader = Schema.Struct({ slot: Schema.BigIntFromSelf, proposerIndex: Schema.Number, - parentRoot: Schema.optional(B256), - stateRoot: Schema.optional(B256), + parentRoot: B256, + stateRoot: B256, randaoReveal: BytesFromUint8Array, - depositCount: Schema.optional(Schema.BigIntFromSelf), - depositRoot: Schema.optional(B256), - blockHash: Schema.optional(B256), - graffiti: Schema.optional(B256), + depositCount: Schema.BigIntFromSelf, + depositRoot: B256, + blockHash: B256, + graffiti: B256, executionPayload: Schema.optional(ExecutionPayload), - blobKzgCommitments: Schema.optional(Schema.Array(B384)), + blobKzgCommitments: Schema.Array(B384), }); export type BlockHeader = typeof BlockHeader.Type; export const Validator = Schema.Struct({ - filterIds: Schema.optional(Schema.Array(Schema.Number)), - validatorIndex: Schema.optional(Schema.Number), - balance: Schema.optional(Schema.BigIntFromSelf), - status: Schema.optional(ValidatorStatus), - pubkey: Schema.optional(B384), - withdrawalCredentials: Schema.optional(B256), - effectiveBalance: Schema.optional(Schema.BigIntFromSelf), - slashed: Schema.optional(Schema.Boolean), - activationEligibilityEpoch: Schema.optional(Schema.BigIntFromSelf), - activationEpoch: Schema.optional(Schema.BigIntFromSelf), - exitEpoch: Schema.optional(Schema.BigIntFromSelf), - withdrawableEpoch: Schema.optional(Schema.BigIntFromSelf), + filterIds: Schema.Array(Schema.Number), + validatorIndex: Schema.Number, + balance: Schema.BigIntFromSelf, + status: ValidatorStatus, + pubkey: B384, + withdrawalCredentials: B256, + effectiveBalance: Schema.BigIntFromSelf, + slashed: Schema.Boolean, + activationEligibilityEpoch: Schema.BigIntFromSelf, + activationEpoch: Schema.BigIntFromSelf, + exitEpoch: Schema.BigIntFromSelf, + withdrawableEpoch: Schema.BigIntFromSelf, }); export const Blob = Schema.Struct({ - filterIds: Schema.optional(Schema.Array(Schema.Number)), - blobIndex: Schema.optional(Schema.Number), - blob: Schema.optional(Schema.Uint8ArrayFromSelf), - kzgCommitment: Schema.optional(B384), - kzgProof: Schema.optional(B384), - kzgCommitmentInclusionProof: Schema.optional(Schema.Array(B256)), - blobHash: Schema.optional(B256), - transactionIndex: Schema.optional(Schema.Number), - transactionHash: Schema.optional(B256), + filterIds: Schema.Array(Schema.Number), + blobIndex: Schema.Number, + blob: Schema.Uint8ArrayFromSelf, + kzgCommitment: B384, + kzgProof: B384, + kzgCommitmentInclusionProof: Schema.Array(B256), + blobHash: B256, + transactionIndex: Schema.Number, + transactionHash: B256, }); +export const Signature = Schema.Struct({ + r: Schema.optional(U256), + s: Schema.optional(U256), + v: Schema.optional(U256), + YParity: Schema.optional(Schema.Boolean), +}); + +export type Signature = typeof Signature.Type; + export const Transaction = Schema.Struct({ - filterIds: Schema.optional(Schema.Array(Schema.Number)), - transactionHash: Schema.optional(B256), - nonce: Schema.optional(Schema.BigIntFromSelf), - transactionIndex: Schema.optional(Schema.Number), - from: Schema.optional(Address), + filterIds: Schema.Array(Schema.Number), + transactionHash: B256, + nonce: Schema.BigIntFromSelf, + transactionIndex: Schema.Number, + from: Address, to: Schema.optional(Address), - value: Schema.optional(U256), + value: U256, gasPrice: Schema.optional(U128), gasLimit: Schema.optional(U128), maxFeePerGas: Schema.optional(U128), maxPriorityFeePerGas: Schema.optional(U128), - input: Schema.optional(Schema.Uint8ArrayFromSelf), + input: Schema.Uint8ArrayFromSelf, signature: Schema.optional(Signature), chainId: Schema.optional(Schema.BigIntFromSelf), - accessList: Schema.optional(Schema.Array(AccessListItem)), - transactionType: Schema.optional(Schema.BigIntFromSelf), + accessList: Schema.Array(AccessListItem), + transactionType: Schema.BigIntFromSelf, maxFeePerBlobGas: Schema.optional(U128), - blobVersionedHashes: Schema.optional(Schema.Array(B256)), + blobVersionedHashes: Schema.Array(B256), }); export type Transaction = typeof Transaction.Type; export const Block = Schema.Struct({ - header: Schema.optional(BlockHeader), + header: BlockHeader, validators: Schema.Array(Validator), blobs: Schema.Array(Blob), transactions: Schema.Array(Transaction), From a6b4ba56f760658fc35f254f71aaabff1c0f7a0f Mon Sep 17 00:00:00 2001 From: Francesco Ceccon Date: Mon, 20 Jan 2025 16:15:30 +0100 Subject: [PATCH 4/4] Change files --- ...a-beaconchain-c34099f9-dc52-429f-ab71-d12ed169b2cc.json | 7 +++++++ .../@apibara-evm-792c8a2f-e1df-4606-9ba7-a2dacb1264aa.json | 7 +++++++ ...bara-starknet-50e54de7-179b-4570-bbb1-ce0627ba8466.json | 7 +++++++ 3 files changed, 21 insertions(+) create mode 100644 change/@apibara-beaconchain-c34099f9-dc52-429f-ab71-d12ed169b2cc.json create mode 100644 change/@apibara-evm-792c8a2f-e1df-4606-9ba7-a2dacb1264aa.json create mode 100644 change/@apibara-starknet-50e54de7-179b-4570-bbb1-ce0627ba8466.json diff --git a/change/@apibara-beaconchain-c34099f9-dc52-429f-ab71-d12ed169b2cc.json b/change/@apibara-beaconchain-c34099f9-dc52-429f-ab71-d12ed169b2cc.json new file mode 100644 index 0000000..bdaf5c5 --- /dev/null +++ b/change/@apibara-beaconchain-c34099f9-dc52-429f-ab71-d12ed169b2cc.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "beaconchain: make fields required", + "packageName": "@apibara/beaconchain", + "email": "francesco@ceccon.me", + "dependentChangeType": "patch" +} diff --git a/change/@apibara-evm-792c8a2f-e1df-4606-9ba7-a2dacb1264aa.json b/change/@apibara-evm-792c8a2f-e1df-4606-9ba7-a2dacb1264aa.json new file mode 100644 index 0000000..223db0e --- /dev/null +++ b/change/@apibara-evm-792c8a2f-e1df-4606-9ba7-a2dacb1264aa.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "evm: make more fields required", + "packageName": "@apibara/evm", + "email": "francesco@ceccon.me", + "dependentChangeType": "patch" +} diff --git a/change/@apibara-starknet-50e54de7-179b-4570-bbb1-ce0627ba8466.json b/change/@apibara-starknet-50e54de7-179b-4570-bbb1-ce0627ba8466.json new file mode 100644 index 0000000..c248032 --- /dev/null +++ b/change/@apibara-starknet-50e54de7-179b-4570-bbb1-ce0627ba8466.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "starknet: make some types required", + "packageName": "@apibara/starknet", + "email": "francesco@ceccon.me", + "dependentChangeType": "patch" +}