From 6fbdc4e044b0c6e975f9e1229f1412d376ae5b00 Mon Sep 17 00:00:00 2001 From: Kirill Date: Wed, 29 May 2024 16:53:14 +0400 Subject: [PATCH 01/69] Add exhaustruct linter (#1884) --- .golangci.yaml | 9 ++++ adapters/core2p2p/receipt.go | 2 + adapters/core2sn/class.go | 1 + adapters/p2p2core/block.go | 7 +++- adapters/p2p2core/receipt.go | 23 ++++++----- adapters/p2p2core/transaction.go | 70 ++++++++++++++++++++++++++++---- adapters/sn2core/sn2core.go | 1 + adapters/vm2core/vm2core.go | 17 +++++++- p2p/sync.go | 3 +- 9 files changed, 111 insertions(+), 22 deletions(-) diff --git a/.golangci.yaml b/.golangci.yaml index 068f99cd04..9cf93f1993 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -64,6 +64,9 @@ linters-settings: require-explanation: false # don't require an explanation for nolint directives require-specific: false # don't require nolint directives to be specific about which linter is being skipped + exhaustruct: + include: [] + linters: disable-all: true enable: @@ -99,6 +102,7 @@ linters: - whitespace - tparallel - gci + - exhaustruct # don't enable: # - asciicheck @@ -125,6 +129,11 @@ issues: - funlen - lll - gosec + - exhaustruct + + - path-except: 'adapters/.+\.go' # run specified linters only on files that reside inside adapters + linters: + - exhaustruct - linters: - lll diff --git a/adapters/core2p2p/receipt.go b/adapters/core2p2p/receipt.go index 225ed48186..6ac6c87aac 100644 --- a/adapters/core2p2p/receipt.go +++ b/adapters/core2p2p/receipt.go @@ -68,6 +68,7 @@ func receiptCommon(r *core.TransactionReceipt) *spec.Receipt_Common { MessagesSent: utils.Map(r.L2ToL1Message, AdaptMessageToL1), ExecutionResources: AdaptExecutionResources(r.ExecutionResources), RevertReason: r.RevertReason, + ConsumedMessage: nil, // todo(kirill) recheck } } @@ -93,6 +94,7 @@ func AdaptExecutionResources(er *core.ExecutionResources) *spec.Receipt_Executio RangeCheck: uint32(er.BuiltinInstanceCounter.RangeCheck), Poseidon: uint32(er.BuiltinInstanceCounter.Poseidon), Keccak: uint32(er.BuiltinInstanceCounter.Keccak), + Output: uint32(er.BuiltinInstanceCounter.Output), }, Steps: uint32(er.Steps), MemoryHoles: uint32(er.MemoryHoles), diff --git a/adapters/core2sn/class.go b/adapters/core2sn/class.go index fcce826a24..34789353a3 100644 --- a/adapters/core2sn/class.go +++ b/adapters/core2sn/class.go @@ -49,6 +49,7 @@ func AdaptSierraClass(class *core.Cairo1Class) *starknet.SierraDefinition { handlers := utils.Map(utils.NonNilSlice(class.EntryPoints.L1Handler), adapt) return &starknet.SierraDefinition{ + Abi: class.Abi, Version: class.SemanticVersion, Program: class.Program, EntryPoints: starknet.SierraEntryPoints{ diff --git a/adapters/p2p2core/block.go b/adapters/p2p2core/block.go index 9d4c0c62be..5c29ed0c83 100644 --- a/adapters/p2p2core/block.go +++ b/adapters/p2p2core/block.go @@ -23,7 +23,7 @@ func AdaptSignature(cs *spec.ConsensusSignature) []*felt.Felt { return []*felt.Felt{AdaptFelt(cs.R), AdaptFelt(cs.S)} } -func AdaptBlockHeader(h *spec.BlockHeader) core.Header { +func AdaptBlockHeader(h *spec.BlockHeader, signatures []*spec.ConsensusSignature) core.Header { return core.Header{ Hash: nil, // todo: add this when building the block ParentHash: AdaptHash(h.ParentHash), @@ -36,5 +36,10 @@ func AdaptBlockHeader(h *spec.BlockHeader) core.Header { ProtocolVersion: h.ProtocolVersion, EventsBloom: nil, // Todo: add this in when building the block GasPrice: AdaptFelt(h.GasPrice), + Signatures: utils.Map(signatures, AdaptSignature), + // todo(kirill) recheck fields + GasPriceSTRK: nil, + L1DAMode: 0, + L1DataGasPrice: nil, } } diff --git a/adapters/p2p2core/receipt.go b/adapters/p2p2core/receipt.go index 2dd583a616..32383fe7dd 100644 --- a/adapters/p2p2core/receipt.go +++ b/adapters/p2p2core/receipt.go @@ -24,6 +24,7 @@ func AdaptReceipt(r *spec.Receipt) *core.TransactionReceipt { return &core.TransactionReceipt{ Fee: AdaptFelt(common.ActualFee), + FeeUnit: 0, // todo(kirill) recheck Events: nil, // todo SPEC , current specification does not maintain the mapping of events to transactions receipts ExecutionResources: adaptExecutionResources(common.ExecutionResources), L1ToL2Message: nil, @@ -40,17 +41,19 @@ func adaptExecutionResources(er *spec.Receipt_ExecutionResources) *core.Executio } return &core.ExecutionResources{ BuiltinInstanceCounter: core.BuiltinInstanceCounter{ - Pedersen: uint64(er.GetBuiltins().GetPedersen()), - RangeCheck: uint64(er.GetBuiltins().GetRangeCheck()), - Bitwise: uint64(er.GetBuiltins().GetBitwise()), - Output: 0, // todo SPEC - Ecsda: uint64(er.GetBuiltins().GetEcdsa()), - EcOp: uint64(er.GetBuiltins().GetEcOp()), - Keccak: uint64(er.GetBuiltins().GetKeccak()), - Poseidon: uint64(er.GetBuiltins().GetPoseidon()), + Pedersen: uint64(er.GetBuiltins().GetPedersen()), + RangeCheck: uint64(er.GetBuiltins().GetRangeCheck()), + Bitwise: uint64(er.GetBuiltins().GetBitwise()), + Output: uint64(er.GetBuiltins().GetOutput()), + Ecsda: uint64(er.GetBuiltins().GetEcdsa()), + EcOp: uint64(er.GetBuiltins().GetEcOp()), + Keccak: uint64(er.GetBuiltins().GetKeccak()), + Poseidon: uint64(er.GetBuiltins().GetPoseidon()), + SegmentArena: 0, // todo(kirill) recheck }, - MemoryHoles: uint64(er.MemoryHoles), - Steps: uint64(er.Steps), // todo SPEC 32 -> 64 bytes + DataAvailability: nil, // todo(kirill) recheck + MemoryHoles: uint64(er.MemoryHoles), + Steps: uint64(er.Steps), // todo SPEC 32 -> 64 bytes } } diff --git a/adapters/p2p2core/transaction.go b/adapters/p2p2core/transaction.go index b8506a55b4..9a3112ea53 100644 --- a/adapters/p2p2core/transaction.go +++ b/adapters/p2p2core/transaction.go @@ -30,13 +30,22 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact case *spec.Transaction_DeclareV0_: tx := t.GetDeclareV0() declareTx := &core.DeclareTransaction{ + TransactionHash: nil, // overridden below Nonce: nil, // for v0 nonce is not used for hash calculation ClassHash: AdaptHash(tx.ClassHash), SenderAddress: AdaptAddress(tx.Sender), MaxFee: AdaptFelt(tx.MaxFee), TransactionSignature: adaptAccountSignature(tx.Signature), Version: txVersion(0), - CompiledClassHash: nil, + // version 2 field + CompiledClassHash: nil, + // version 3 fields (zero values) + ResourceBounds: nil, + PaymasterData: nil, + AccountDeploymentData: nil, + Tip: 0, + NonceDAMode: 0, + FeeDAMode: 0, } declareTx.TransactionHash = hash(declareTx) @@ -44,13 +53,22 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact case *spec.Transaction_DeclareV1_: tx := t.GetDeclareV1() declareTx := &core.DeclareTransaction{ + TransactionHash: nil, // overridden below ClassHash: AdaptHash(tx.ClassHash), SenderAddress: AdaptAddress(tx.Sender), MaxFee: AdaptFelt(tx.MaxFee), TransactionSignature: adaptAccountSignature(tx.Signature), Nonce: AdaptFelt(tx.Nonce), Version: txVersion(1), - CompiledClassHash: nil, + // version 2 field + CompiledClassHash: nil, + // version 3 fields (zero values) + ResourceBounds: nil, + PaymasterData: nil, + AccountDeploymentData: nil, + Tip: 0, + NonceDAMode: 0, + FeeDAMode: 0, } declareTx.TransactionHash = hash(declareTx) @@ -58,6 +76,7 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact case *spec.Transaction_DeclareV2_: tx := t.GetDeclareV2() declareTx := &core.DeclareTransaction{ + TransactionHash: nil, // overridden below ClassHash: AdaptHash(tx.ClassHash), SenderAddress: AdaptAddress(tx.Sender), MaxFee: AdaptFelt(tx.MaxFee), @@ -65,6 +84,13 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact Nonce: AdaptFelt(tx.Nonce), Version: txVersion(2), CompiledClassHash: AdaptFelt(tx.CompiledClassHash), + // version 3 fields (zero values) + ResourceBounds: nil, + PaymasterData: nil, + AccountDeploymentData: nil, + Tip: 0, + NonceDAMode: 0, + FeeDAMode: 0, } declareTx.TransactionHash = hash(declareTx) @@ -83,6 +109,7 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact } declareTx := &core.DeclareTransaction{ + TransactionHash: nil, // overridden below ClassHash: AdaptHash(tx.ClassHash), SenderAddress: AdaptAddress(tx.Sender), MaxFee: AdaptFelt(tx.MaxFee), @@ -110,6 +137,7 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact classHash := AdaptHash(tx.ClassHash) callData := utils.Map(tx.Calldata, AdaptFelt) deployTx := &core.DeployTransaction{ + TransactionHash: nil, // overridden below ContractAddress: core.ContractAddress(&felt.Zero, classHash, addressSalt, callData), ContractAddressSalt: addressSalt, ClassHash: classHash, @@ -127,6 +155,7 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact callData := utils.Map(tx.Calldata, AdaptFelt) deployAccTx := &core.DeployAccountTransaction{ DeployTransaction: core.DeployTransaction{ + TransactionHash: nil, // overridden below ContractAddressSalt: addressSalt, ContractAddress: core.ContractAddress(&felt.Zero, classHash, addressSalt, callData), ClassHash: classHash, @@ -136,6 +165,12 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact MaxFee: AdaptFelt(tx.MaxFee), TransactionSignature: adaptAccountSignature(tx.Signature), Nonce: AdaptFelt(tx.Nonce), + // version 3 fields (zero values) + ResourceBounds: nil, + PaymasterData: nil, + Tip: 0, + NonceDAMode: 0, + FeeDAMode: 0, } deployAccTx.DeployTransaction.TransactionHash = hash(deployAccTx) @@ -158,6 +193,7 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact callData := utils.Map(tx.Calldata, AdaptFelt) deployAccTx := &core.DeployAccountTransaction{ DeployTransaction: core.DeployTransaction{ + TransactionHash: nil, // overridden below ContractAddressSalt: addressSalt, ContractAddress: core.ContractAddress(&felt.Zero, classHash, addressSalt, callData), ClassHash: classHash, @@ -182,14 +218,23 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact case *spec.Transaction_InvokeV0_: tx := t.GetInvokeV0() invTx := &core.InvokeTransaction{ - Nonce: nil, // not used in v0 - SenderAddress: nil, // not used in v0 + TransactionHash: nil, // overridden below CallData: utils.Map(tx.Calldata, AdaptFelt), TransactionSignature: adaptAccountSignature(tx.Signature), MaxFee: AdaptFelt(tx.MaxFee), ContractAddress: AdaptAddress(tx.Address), Version: txVersion(0), EntryPointSelector: AdaptFelt(tx.EntryPointSelector), + // version 1 fields (zero values) + Nonce: nil, + SenderAddress: nil, + // version 3 fields (zero values) + ResourceBounds: nil, + Tip: 0, + PaymasterData: nil, + AccountDeploymentData: nil, + NonceDAMode: 0, + FeeDAMode: 0, } invTx.TransactionHash = hash(invTx) @@ -197,6 +242,7 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact case *spec.Transaction_InvokeV1_: tx := t.GetInvokeV1() invTx := &core.InvokeTransaction{ + TransactionHash: nil, // overridden below ContractAddress: nil, // not used in v1 Nonce: AdaptFelt(tx.Nonce), SenderAddress: AdaptAddress(tx.Sender), @@ -205,6 +251,13 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact MaxFee: AdaptFelt(tx.MaxFee), Version: txVersion(1), EntryPointSelector: nil, + // version 3 fields (zero values) + ResourceBounds: nil, + Tip: 0, + PaymasterData: nil, + AccountDeploymentData: nil, + NonceDAMode: 0, + FeeDAMode: 0, } invTx.TransactionHash = hash(invTx) @@ -223,6 +276,7 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact } invTx := &core.InvokeTransaction{ + TransactionHash: nil, // overridden below ContractAddress: nil, // is it ok? CallData: utils.Map(tx.Calldata, AdaptFelt), TransactionSignature: adaptAccountSignature(tx.Signature), @@ -236,9 +290,10 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact core.ResourceL1Gas: adaptResourceLimits(tx.L1Gas), core.ResourceL2Gas: adaptResourceLimits(tx.L2Gas), }, - PaymasterData: nil, // Todo: P2P needs to change the pay master data to a list - NonceDAMode: core.DataAvailabilityMode(nDAMode), - FeeDAMode: core.DataAvailabilityMode(fDAMode), + PaymasterData: nil, // Todo: P2P needs to change the pay master data to a list + NonceDAMode: core.DataAvailabilityMode(nDAMode), + FeeDAMode: core.DataAvailabilityMode(fDAMode), + AccountDeploymentData: nil, // todo(kirill) recheck } invTx.TransactionHash = hash(invTx) @@ -246,6 +301,7 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact case *spec.Transaction_L1Handler: tx := t.GetL1Handler() l1Tx := &core.L1HandlerTransaction{ + TransactionHash: nil, // overridden below ContractAddress: AdaptAddress(tx.Address), EntryPointSelector: AdaptFelt(tx.EntryPointSelector), Nonce: AdaptFelt(tx.Nonce), diff --git a/adapters/sn2core/sn2core.go b/adapters/sn2core/sn2core.go index 479d65218c..326a643a3b 100644 --- a/adapters/sn2core/sn2core.go +++ b/adapters/sn2core/sn2core.go @@ -67,6 +67,7 @@ func AdaptTransactionReceipt(response *starknet.TransactionReceipt) *core.Transa } return &core.TransactionReceipt{ + FeeUnit: 0, // todo(kirill) recheck Fee: response.ActualFee, TransactionHash: response.TransactionHash, Events: utils.Map(utils.NonNilSlice(response.Events), AdaptEvent), diff --git a/adapters/vm2core/vm2core.go b/adapters/vm2core/vm2core.go index 57efdc210f..0c73889932 100644 --- a/adapters/vm2core/vm2core.go +++ b/adapters/vm2core/vm2core.go @@ -21,9 +21,11 @@ func AdaptExecutionResources(resources *vm.ExecutionResources) *core.ExecutionRe Keccak: resources.Keccak, Poseidon: resources.Poseidon, SegmentArena: resources.SegmentArena, + Output: 0, // todo(kirill) recheck, add Output field to core? }, - MemoryHoles: resources.MemoryHoles, - Steps: resources.Steps, + MemoryHoles: resources.MemoryHoles, + Steps: resources.Steps, + DataAvailability: adaptDA(resources.DataAvailability), } } @@ -56,3 +58,14 @@ func AdaptOrderedEvents(events []vm.OrderedEvent) []*core.Event { }) return utils.Map(events, AdaptOrderedEvent) } + +func adaptDA(da *vm.DataAvailability) *core.DataAvailability { + if da == nil { + return nil + } + + return &core.DataAvailability{ + L1Gas: da.L1Gas, + L1DataGas: da.L1DataGas, + } +} diff --git a/p2p/sync.go b/p2p/sync.go index 53ceaeff55..40ca12903f 100644 --- a/p2p/sync.go +++ b/p2p/sync.go @@ -339,8 +339,7 @@ func (s *syncService) adaptAndSanityCheckBlock(ctx context.Context, header *spec }) coreBlock.Receipts = coreReceipts - coreHeader := p2p2core.AdaptBlockHeader(header) - coreHeader.Signatures = utils.Map(sig.GetSignatures(), p2p2core.AdaptSignature) + coreHeader := p2p2core.AdaptBlockHeader(header, sig.GetSignatures()) coreBlock.Header = &coreHeader coreBlock.EventsBloom = core.EventsBloom(coreBlock.Receipts) From 14b8e53bfbddc5bcd5753242c7620c67a5f6bcb9 Mon Sep 17 00:00:00 2001 From: LordGhostX <47832826+LordGhostX@users.noreply.github.com> Date: Tue, 4 Jun 2024 10:40:11 +0100 Subject: [PATCH 02/69] Deploy docs version 0.11.8 (#1885) * create docs version 0.11.8 * add former docs redirects --- docs/docusaurus.config.js | 19 + docs/package-lock.json | 1168 +++++++++-------- docs/package.json | 1 + .../version-0.11.8/_config-options.md | 48 + .../version-0.11.8/configuring.md | 102 ++ docs/versioned_docs/version-0.11.8/faq.md | 125 ++ .../version-0.11.8/hardware-requirements.md | 23 + docs/versioned_docs/version-0.11.8/intro.md | 78 ++ .../versioned_docs/version-0.11.8/json-rpc.md | 250 ++++ .../version-0.11.8/monitoring.md | 87 ++ .../version-0.11.8/running-juno.md | 153 +++ .../version-0.11.8/running-on-gcp.md | 76 ++ .../version-0.11.8/running-p2p.md | 11 + .../version-0.11.8/snapshots.md | 66 + .../versioned_docs/version-0.11.8/updating.md | 88 ++ .../version-0.11.8/websocket.md | 207 +++ .../version-0.11.8-sidebars.json | 37 + docs/versions.json | 9 +- 18 files changed, 1976 insertions(+), 572 deletions(-) create mode 100644 docs/versioned_docs/version-0.11.8/_config-options.md create mode 100644 docs/versioned_docs/version-0.11.8/configuring.md create mode 100644 docs/versioned_docs/version-0.11.8/faq.md create mode 100644 docs/versioned_docs/version-0.11.8/hardware-requirements.md create mode 100644 docs/versioned_docs/version-0.11.8/intro.md create mode 100644 docs/versioned_docs/version-0.11.8/json-rpc.md create mode 100644 docs/versioned_docs/version-0.11.8/monitoring.md create mode 100644 docs/versioned_docs/version-0.11.8/running-juno.md create mode 100644 docs/versioned_docs/version-0.11.8/running-on-gcp.md create mode 100644 docs/versioned_docs/version-0.11.8/running-p2p.md create mode 100644 docs/versioned_docs/version-0.11.8/snapshots.md create mode 100644 docs/versioned_docs/version-0.11.8/updating.md create mode 100644 docs/versioned_docs/version-0.11.8/websocket.md create mode 100644 docs/versioned_sidebars/version-0.11.8-sidebars.json diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index e168e47b40..4662452e59 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -58,6 +58,25 @@ const config = { highlightSearchTermsOnTargetPage: true, }, ], + [ + "@docusaurus/plugin-client-redirects", + { + redirects: [ + { + from: "/config", + to: "/configuring", + }, + { + from: "/installing-on-gcp", + to: "/running-on-gcp", + }, + { + from: "/updating_node", + to: "/updating", + }, + ], + }, + ], ], themeConfig: diff --git a/docs/package-lock.json b/docs/package-lock.json index 27a907f12b..8c8d94a325 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.0", "dependencies": { "@docusaurus/core": "3.2.1", + "@docusaurus/plugin-client-redirects": "3.2.1", "@docusaurus/preset-classic": "3.2.1", "@easyops-cn/docusaurus-search-local": "^0.40.1", "@mdx-js/react": "^3.0.0", @@ -219,11 +220,11 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz", + "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==", "dependencies": { - "@babel/highlight": "^7.24.2", + "@babel/highlight": "^7.24.6", "picocolors": "^1.0.0" }, "engines": { @@ -231,28 +232,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", - "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz", + "integrity": "sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", - "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.6.tgz", + "integrity": "sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.24.5", - "@babel/helpers": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5", + "@babel/code-frame": "^7.24.6", + "@babel/generator": "^7.24.6", + "@babel/helper-compilation-targets": "^7.24.6", + "@babel/helper-module-transforms": "^7.24.6", + "@babel/helpers": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/template": "^7.24.6", + "@babel/traverse": "^7.24.6", + "@babel/types": "^7.24.6", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -276,11 +277,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", - "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.6.tgz", + "integrity": "sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==", "dependencies": { - "@babel/types": "^7.24.5", + "@babel/types": "^7.24.6", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -290,34 +291,34 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.6.tgz", + "integrity": "sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.6.tgz", + "integrity": "sha512-+wnfqc5uHiMYtvRX7qu80Toef8BXeh4HHR1SPeonGb1SKPniNEd4a/nlaJJMv/OIEYvIVavvo0yR7u10Gqz0Iw==", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz", + "integrity": "sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", + "@babel/compat-data": "^7.24.6", + "@babel/helper-validator-option": "^7.24.6", "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -335,18 +336,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz", - "integrity": "sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.24.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.24.5", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.6.tgz", + "integrity": "sha512-djsosdPJVZE6Vsw3kk7IPRWethP94WHGOhQTc67SNXE0ZzMhHgALw8iGmYS0TD1bbMM0VDROy43od7/hN6WYcA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.6", + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-function-name": "^7.24.6", + "@babel/helper-member-expression-to-functions": "^7.24.6", + "@babel/helper-optimise-call-expression": "^7.24.6", + "@babel/helper-replace-supers": "^7.24.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6", + "@babel/helper-split-export-declaration": "^7.24.6", "semver": "^6.3.1" }, "engines": { @@ -365,11 +366,11 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.6.tgz", + "integrity": "sha512-C875lFBIWWwyv6MHZUG9HmRrlTDgOsLWZfYR0nW69gaKJNe0/Mpxx5r0EID2ZdHQkdUmQo2t0uNckTL08/1BgA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-annotate-as-pure": "^7.24.6", "regexpu-core": "^5.3.1", "semver": "^6.3.1" }, @@ -404,68 +405,68 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz", + "integrity": "sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz", + "integrity": "sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.6", + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz", + "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz", - "integrity": "sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.6.tgz", + "integrity": "sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg==", "dependencies": { - "@babel/types": "^7.24.5" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz", + "integrity": "sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==", "dependencies": { - "@babel/types": "^7.24.0" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", - "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz", + "integrity": "sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.24.3", - "@babel/helper-simple-access": "^7.24.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "@babel/helper-validator-identifier": "^7.24.5" + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-module-imports": "^7.24.6", + "@babel/helper-simple-access": "^7.24.6", + "@babel/helper-split-export-declaration": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -475,32 +476,32 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.6.tgz", + "integrity": "sha512-3SFDJRbx7KuPRl8XDUr8O7GAEB8iGyWPjLKJh/ywP/Iy9WOmEfMrsWbaZpvBu2HSYn4KQygIsz0O7m8y10ncMA==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", - "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz", + "integrity": "sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.6.tgz", + "integrity": "sha512-1Qursq9ArRZPAMOZf/nuzVW8HgJLkTB9y9LfP4lW2MVp4e9WkLJDovfKBxoDcCk6VuzIxyqWHyBoaCtSRP10yg==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" + "@babel/helper-annotate-as-pure": "^7.24.6", + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-wrap-function": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -510,13 +511,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", - "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.6.tgz", + "integrity": "sha512-mRhfPwDqDpba8o1F8ESxsEkJMQkUF8ZIWrAc0FtWhxnjfextxMWxr22RtFizxxSYLjVHDeMgVsRq8BBZR2ikJQ==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5" + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-member-expression-to-functions": "^7.24.6", + "@babel/helper-optimise-call-expression": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -526,94 +527,93 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", - "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz", + "integrity": "sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==", "dependencies": { - "@babel/types": "^7.24.5" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.6.tgz", + "integrity": "sha512-jhbbkK3IUKc4T43WadP96a27oYti9gEf1LdyGSP2rHGH77kwLwfhO7TgwnWvxxQVmke0ImmCSS47vcuxEMGD3Q==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", - "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz", + "integrity": "sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==", "dependencies": { - "@babel/types": "^7.24.5" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz", + "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", - "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz", + "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz", + "integrity": "sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.5.tgz", - "integrity": "sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.6.tgz", + "integrity": "sha512-f1JLrlw/jbiNfxvdrfBgio/gRBk3yTAEJWirpAkiJG2Hb22E7cEYKHWo0dFPTv/niPovzIdPdEDetrv6tC6gPQ==", "dependencies": { - "@babel/helper-function-name": "^7.23.0", - "@babel/template": "^7.24.0", - "@babel/types": "^7.24.5" + "@babel/helper-function-name": "^7.24.6", + "@babel/template": "^7.24.6", + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", - "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.6.tgz", + "integrity": "sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==", "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5" + "@babel/template": "^7.24.6", + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", - "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz", + "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.6", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -687,9 +687,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", - "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", + "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", "bin": { "parser": "bin/babel-parser.js" }, @@ -698,12 +698,12 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz", - "integrity": "sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.6.tgz", + "integrity": "sha512-bYndrJ6Ph6Ar+GaB5VAc0JPoP80bQCm4qon6JEzXfRl5QZyQ8Ur1K6k7htxWmPA5z+k7JQvaMUrtXlqclWYzKw==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -713,11 +713,11 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", - "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.6.tgz", + "integrity": "sha512-iVuhb6poq5ikqRq2XWU6OQ+R5o9wF+r/or9CeUyovgptz0UlnK4/seOQ1Istu/XybYjAhQv1FRSSfHHufIku5Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -727,13 +727,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", - "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.6.tgz", + "integrity": "sha512-c8TER5xMDYzzFcGqOEp9l4hvB7dcbhcGjcLVwxWfe4P5DOafdwjsBJZKsmv+o3aXh7NhopvayQIovHrh2zSRUQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.24.1" + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6", + "@babel/plugin-transform-optional-chaining": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -743,12 +743,12 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", - "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.6.tgz", + "integrity": "sha512-z8zEjYmwBUHN/pCF3NuWBhHQjJCrd33qAi8MgANfMrAvn72k2cImT8VjK9LJFu4ysOLJqhfkYYb3MvwANRUNZQ==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -827,11 +827,11 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", - "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.6.tgz", + "integrity": "sha512-BE6o2BogJKJImTmGpkmOic4V0hlRRxVtzqxiSPa8TIFxyhi4EFjHm08nq1M4STK4RytuLMgnSz0/wfflvGFNOg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -841,11 +841,11 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", - "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.6.tgz", + "integrity": "sha512-D+CfsVZousPXIdudSII7RGy52+dYRtbyKAZcvtQKq/NpsivyMVduepzcLqG5pMBugtMdedxdC8Ramdpcne9ZWQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -877,11 +877,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", - "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.6.tgz", + "integrity": "sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -985,11 +985,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", - "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.6.tgz", + "integrity": "sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1014,11 +1014,11 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", - "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.6.tgz", + "integrity": "sha512-jSSSDt4ZidNMggcLx8SaKsbGNEfIl0PHx/4mFEulorE7bpYLbN0d3pDW3eJ7Y5Z3yPhy3L3NaPCYyTUY7TuugQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1028,13 +1028,13 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", - "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.6.tgz", + "integrity": "sha512-VEP2o4iR2DqQU6KPgizTW2mnMx6BG5b5O9iQdrW9HesLkv8GIA8x2daXBQxw1MrsIkFQGA/iJ204CKoQ8UcnAA==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-remap-async-to-generator": "^7.24.6", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -1045,13 +1045,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", - "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.6.tgz", + "integrity": "sha512-NTBA2SioI3OsHeIn6sQmhvXleSl9T70YY/hostQLveWs0ic+qvbA3fa0kwAwQ0OA/XGaAerNZRQGJyRfhbJK4g==", "dependencies": { - "@babel/helper-module-imports": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-remap-async-to-generator": "^7.22.20" + "@babel/helper-module-imports": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-remap-async-to-generator": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1061,11 +1061,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", - "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.6.tgz", + "integrity": "sha512-XNW7jolYHW9CwORrZgA/97tL/k05qe/HL0z/qqJq1mdWhwwCM6D4BJBV7wAz9HgFziN5dTOG31znkVIzwxv+vw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1075,11 +1075,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz", - "integrity": "sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.6.tgz", + "integrity": "sha512-S/t1Xh4ehW7sGA7c1j/hiOBLnEYCp/c2sEG4ZkL8kI1xX9tW2pqJTCHKtdhe/jHKt8nG0pFCrDHUXd4DvjHS9w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1089,12 +1089,12 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", - "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.6.tgz", + "integrity": "sha512-j6dZ0Z2Z2slWLR3kt9aOmSIrBvnntWjMDN/TVcMPxhXMLmJVqX605CBRlcGI4b32GMbfifTEsdEjGjiE+j/c3A==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-class-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1104,12 +1104,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", - "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.6.tgz", + "integrity": "sha512-1QSRfoPI9RoLRa8Mnakc6v3e0gJxiZQTYrMfLn+mD0sz5+ndSzwymp2hDcYJTyT0MOn0yuWzj8phlIvO72gTHA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.4", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-create-class-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1120,17 +1120,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz", - "integrity": "sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-split-export-declaration": "^7.24.5", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.6.tgz", + "integrity": "sha512-+fN+NO2gh8JtRmDSOB6gaCVo36ha8kfCW1nMq2Gc0DABln0VcHN4PrALDvF5/diLzIRKptC7z/d7Lp64zk92Fg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.6", + "@babel/helper-compilation-targets": "^7.24.6", + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-function-name": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-replace-supers": "^7.24.6", + "@babel/helper-split-export-declaration": "^7.24.6", "globals": "^11.1.0" }, "engines": { @@ -1141,12 +1141,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", - "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.6.tgz", + "integrity": "sha512-cRzPobcfRP0ZtuIEkA8QzghoUpSB3X3qSH5W2+FzG+VjWbJXExtx0nbRqwumdBN1x/ot2SlTNQLfBCnPdzp6kg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/template": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/template": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1156,11 +1156,11 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz", - "integrity": "sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.6.tgz", + "integrity": "sha512-YLW6AE5LQpk5npNXL7i/O+U9CE4XsBCuRPgyjl1EICZYKmcitV+ayuuUGMJm2lC1WWjXYszeTnIxF/dq/GhIZQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1170,12 +1170,12 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", - "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.6.tgz", + "integrity": "sha512-rCXPnSEKvkm/EjzOtLoGvKseK+dS4kZwx1HexO3BtRtgL0fQ34awHn34aeSHuXtZY2F8a1X8xqBBPRtOxDVmcA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1185,11 +1185,11 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", - "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.6.tgz", + "integrity": "sha512-/8Odwp/aVkZwPFJMllSbawhDAO3UJi65foB00HYnK/uXvvCPm0TAXSByjz1mpRmp0q6oX2SIxpkUOpPFHk7FLA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1199,11 +1199,11 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", - "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.6.tgz", + "integrity": "sha512-vpq8SSLRTBLOHUZHSnBqVo0AKX3PBaoPs2vVzYVWslXDTDIpwAcCDtfhUcHSQQoYoUvcFPTdC8TZYXu9ZnLT/w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1214,12 +1214,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", - "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.6.tgz", + "integrity": "sha512-EemYpHtmz0lHE7hxxxYEuTYOOBZ43WkDgZ4arQ4r+VX9QHuNZC+WH3wUWmRNvR8ECpTRne29aZV6XO22qpOtdA==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1229,11 +1229,11 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", - "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.6.tgz", + "integrity": "sha512-inXaTM1SVrIxCkIJ5gqWiozHfFMStuGbGJAxZFBoHcRRdDP0ySLb3jH6JOwmfiinPwyMZqMBX+7NBDCO4z0NSA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.6", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1244,12 +1244,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", - "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.6.tgz", + "integrity": "sha512-n3Sf72TnqK4nw/jziSqEl1qaWPbCRw2CziHH+jdRYvw4J6yeCzsj4jdw8hIntOEeDGTmHVe2w4MVL44PN0GMzg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1259,13 +1259,13 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", - "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.6.tgz", + "integrity": "sha512-sOajCu6V0P1KPljWHKiDq6ymgqB+vfo3isUS4McqW1DZtvSVU2v/wuMhmRmkg3sFoq6GMaUUf8W4WtoSLkOV/Q==", "dependencies": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-compilation-targets": "^7.24.6", + "@babel/helper-function-name": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1275,11 +1275,11 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", - "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.6.tgz", + "integrity": "sha512-Uvgd9p2gUnzYJxVdBLcU0KurF8aVhkmVyMKW4MIY1/BByvs3EBpv45q01o7pRTVmTvtQq5zDlytP3dcUgm7v9w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.6", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1290,11 +1290,11 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", - "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.6.tgz", + "integrity": "sha512-f2wHfR2HF6yMj+y+/y07+SLqnOSwRp8KYLpQKOzS58XLVlULhXbiYcygfXQxJlMbhII9+yXDwOUFLf60/TL5tw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1304,11 +1304,11 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", - "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.6.tgz", + "integrity": "sha512-EKaWvnezBCMkRIHxMJSIIylzhqK09YpiJtDbr2wsXTwnO0TxyjMUkaw4RlFIZMIS0iDj0KyIg7H7XCguHu/YDA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.6", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1319,11 +1319,11 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", - "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.6.tgz", + "integrity": "sha512-9g8iV146szUo5GWgXpRbq/GALTnY+WnNuRTuRHWWFfWGbP9ukRL0aO/jpu9dmOPikclkxnNsjY8/gsWl6bmZJQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1333,12 +1333,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", - "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.6.tgz", + "integrity": "sha512-eAGogjZgcwqAxhyFgqghvoHRr+EYRQPFjUXrTYKBRb5qPnAVxOOglaxc4/byHqjvq/bqO2F3/CGwTHsgKJYHhQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-module-transforms": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1348,13 +1348,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", - "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.6.tgz", + "integrity": "sha512-JEV8l3MHdmmdb7S7Cmx6rbNEjRCgTQMZxllveHO0mx6uiclB0NflCawlQQ6+o5ZrwjUBYPzHm2XoK4wqGVUFuw==", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-simple-access": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-simple-access": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1364,14 +1364,14 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", - "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.6.tgz", + "integrity": "sha512-xg1Z0J5JVYxtpX954XqaaAT6NpAY6LtZXvYFCJmGFJWwtlz2EmJoR8LycFRGNE8dBKizGWkGQZGegtkV8y8s+w==", "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-hoist-variables": "^7.24.6", + "@babel/helper-module-transforms": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1381,12 +1381,12 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", - "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.6.tgz", + "integrity": "sha512-esRCC/KsSEUvrSjv5rFYnjZI6qv4R1e/iHQrqwbZIoRJqk7xCvEUiN7L1XrmW5QSmQe3n1XD88wbgDTWLbVSyg==", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-module-transforms": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1396,12 +1396,12 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.6.tgz", + "integrity": "sha512-6DneiCiu91wm3YiNIGDWZsl6GfTTbspuj/toTEqLh9d4cx50UIzSdg+T96p8DuT7aJOBRhFyaE9ZvTHkXrXr6Q==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1411,11 +1411,11 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", - "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.6.tgz", + "integrity": "sha512-f8liz9JG2Va8A4J5ZBuaSdwfPqN6axfWRK+y66fjKYbwf9VBLuq4WxtinhJhvp1w6lamKUwLG0slK2RxqFgvHA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1425,11 +1425,11 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", - "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.6.tgz", + "integrity": "sha512-+QlAiZBMsBK5NqrBWFXCYeXyiU1y7BQ/OYaiPAcQJMomn5Tyg+r5WuVtyEuvTbpV7L25ZSLfE+2E9ywj4FD48A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1440,11 +1440,11 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", - "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.6.tgz", + "integrity": "sha512-6voawq8T25Jvvnc4/rXcWZQKKxUNZcKMS8ZNrjxQqoRFernJJKjE3s18Qo6VFaatG5aiX5JV1oPD7DbJhn0a4Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1455,14 +1455,14 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz", - "integrity": "sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.6.tgz", + "integrity": "sha512-OKmi5wiMoRW5Smttne7BwHM8s/fb5JFs+bVGNSeHWzwZkWXWValR1M30jyXo1s/RaqgwwhEC62u4rFH/FBcBPg==", "dependencies": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.5", + "@babel/helper-compilation-targets": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.5" + "@babel/plugin-transform-parameters": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1472,12 +1472,12 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", - "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.6.tgz", + "integrity": "sha512-N/C76ihFKlZgKfdkEYKtaRUtXZAgK7sOY4h2qrbVbVTXPrKGIi8aww5WGe/+Wmg8onn8sr2ut6FXlsbu/j6JHg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-replace-supers": "^7.24.1" + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-replace-supers": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1487,11 +1487,11 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", - "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.6.tgz", + "integrity": "sha512-L5pZ+b3O1mSzJ71HmxSCmTVd03VOT2GXOigug6vDYJzE5awLI7P1g0wFcdmGuwSDSrQ0L2rDOe/hHws8J1rv3w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1502,12 +1502,12 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz", - "integrity": "sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.6.tgz", + "integrity": "sha512-cHbqF6l1QP11OkYTYQ+hhVx1E017O5ZcSPXk9oODpqhcAD1htsWG2NpHrrhthEO2qZomLK0FXS+u7NfrkF5aOQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -1518,11 +1518,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz", - "integrity": "sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.6.tgz", + "integrity": "sha512-ST7guE8vLV+vI70wmAxuZpIKzVjvFX9Qs8bl5w6tN/6gOypPWUmMQL2p7LJz5E63vEGrDhAiYetniJFyBH1RkA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1532,12 +1532,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", - "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.6.tgz", + "integrity": "sha512-T9LtDI0BgwXOzyXrvgLTT8DFjCC/XgWLjflczTLXyvxbnSR/gpv0hbmzlHE/kmh9nOvlygbamLKRo6Op4yB6aw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-class-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1547,13 +1547,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz", - "integrity": "sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.6.tgz", + "integrity": "sha512-Qu/ypFxCY5NkAnEhCF86Mvg3NSabKsh/TPpBVswEdkGl7+FbsYHy1ziRqJpwGH4thBdQHh8zx+z7vMYmcJ7iaQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.5", - "@babel/helper-plugin-utils": "^7.24.5", + "@babel/helper-annotate-as-pure": "^7.24.6", + "@babel/helper-create-class-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1564,11 +1564,11 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", - "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.6.tgz", + "integrity": "sha512-oARaglxhRsN18OYsnPTpb8TcKQWDYNsPNmTnx5++WOAsUJ0cSC/FZVlIJCKvPbU4yn/UXsS0551CFKJhN0CaMw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1578,11 +1578,11 @@ } }, "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.1.tgz", - "integrity": "sha512-QXp1U9x0R7tkiGB0FOk8o74jhnap0FlZ5gNkRIWdG3eP+SvMFg118e1zaWewDzgABb106QSKpVsD3Wgd8t6ifA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.6.tgz", + "integrity": "sha512-vQfyXRtG/kNIcTYRd/49uJnwvMig9X3R4XsTVXRml2RFupZFY+2RDuK+/ymb+MfX2WuIHAgUZc2xEvQrnI7QCg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1592,11 +1592,11 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz", - "integrity": "sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.6.tgz", + "integrity": "sha512-/3iiEEHDsJuj9QU09gbyWGSUxDboFcD7Nj6dnHIlboWSodxXAoaY/zlNMHeYAC0WsERMqgO9a7UaM77CsYgWcg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1606,15 +1606,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", - "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.6.tgz", + "integrity": "sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/types": "^7.23.4" + "@babel/helper-annotate-as-pure": "^7.24.6", + "@babel/helper-module-imports": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/plugin-syntax-jsx": "^7.24.6", + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1624,11 +1624,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", - "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.6.tgz", + "integrity": "sha512-F7EsNp5StNDouSSdYyDSxh4J+xvj/JqG+Cb6s2fA+jCyHOzigG5vTwgH8tU2U8Voyiu5zCG9bAK49wTr/wPH0w==", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.22.5" + "@babel/plugin-transform-react-jsx": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1638,12 +1638,12 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz", - "integrity": "sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.6.tgz", + "integrity": "sha512-0HoDQlFJJkXRyV2N+xOpUETbKHcouSwijRQbKWVtxsPoq5bbB30qZag9/pSc5xcWVYjTHlLsBsY+hZDnzQTPNw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-annotate-as-pure": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1653,11 +1653,11 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", - "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.6.tgz", + "integrity": "sha512-SMDxO95I8WXRtXhTAc8t/NFQUT7VYbIWwJCJgEli9ml4MhqUMh4S6hxgH6SmAC3eAQNWCDJFxcFeEt9w2sDdXg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.6", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1668,11 +1668,11 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", - "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.6.tgz", + "integrity": "sha512-DcrgFXRRlK64dGE0ZFBPD5egM2uM8mgfrvTMOSB2yKzOtjpGegVYkzh3s1zZg1bBck3nkXiaOamJUqK3Syk+4A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1682,12 +1682,12 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz", - "integrity": "sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.6.tgz", + "integrity": "sha512-W3gQydMb0SY99y/2lV0Okx2xg/8KzmZLQsLaiCmwNRl1kKomz14VurEm+2TossUb+sRvBCnGe+wx8KtIgDtBbQ==", "dependencies": { - "@babel/helper-module-imports": "^7.24.3", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-module-imports": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.1", "babel-plugin-polyfill-regenerator": "^0.6.1", @@ -1709,11 +1709,11 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", - "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.6.tgz", + "integrity": "sha512-xnEUvHSMr9eOWS5Al2YPfc32ten7CXdH7Zwyyk7IqITg4nX61oHj+GxpNvl+y5JHjfN3KXE2IV55wAWowBYMVw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1723,12 +1723,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", - "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.6.tgz", + "integrity": "sha512-h/2j7oIUDjS+ULsIrNZ6/TKG97FgmEk1PXryk/HQq6op4XUUUwif2f69fJrzK0wza2zjCS1xhXmouACaWV5uPA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1738,11 +1738,11 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", - "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.6.tgz", + "integrity": "sha512-fN8OcTLfGmYv7FnDrsjodYBo1DhPL3Pze/9mIIE2MGCT1KgADYIOD7rEglpLHZj8PZlC/JFX5WcD+85FLAQusw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1752,11 +1752,11 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", - "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.6.tgz", + "integrity": "sha512-BJbEqJIcKwrqUP+KfUIkxz3q8VzXe2R8Wv8TaNgO1cx+nNavxn/2+H8kp9tgFSOL6wYPPEgFvU6IKS4qoGqhmg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1766,11 +1766,11 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz", - "integrity": "sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.6.tgz", + "integrity": "sha512-IshCXQ+G9JIFJI7bUpxTE/oA2lgVLAIK8q1KdJNoPXOpvRaNjMySGuvLfBw/Xi2/1lLo953uE8hyYSDW3TSYig==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1780,14 +1780,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.5.tgz", - "integrity": "sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.6.tgz", + "integrity": "sha512-H0i+hDLmaYYSt6KU9cZE0gb3Cbssa/oxWis7PX4ofQzbvsfix9Lbh8SRk7LCPDlLWJHUiFeHU0qRRpF/4Zv7mQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.5", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/plugin-syntax-typescript": "^7.24.1" + "@babel/helper-annotate-as-pure": "^7.24.6", + "@babel/helper-create-class-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/plugin-syntax-typescript": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1797,11 +1797,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", - "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.6.tgz", + "integrity": "sha512-bKl3xxcPbkQQo5eX9LjjDpU2xYHeEeNQbOhj0iPvetSzA+Tu9q/o5lujF4Sek60CM6MgYvOS/DJuwGbiEYAnLw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1811,12 +1811,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", - "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.6.tgz", + "integrity": "sha512-8EIgImzVUxy15cZiPii9GvLZwsy7Vxc+8meSlR3cXFmBIl5W5Tn9LGBf7CDKkHj4uVfNXCJB8RsVfnmY61iedA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1826,12 +1826,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", - "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.6.tgz", + "integrity": "sha512-pssN6ExsvxaKU638qcWb81RrvvgZom3jDgU/r5xFZ7TONkZGFf4MhI2ltMb8OcQWhHyxgIavEU+hgqtbKOmsPA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1841,12 +1841,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", - "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.6.tgz", + "integrity": "sha512-quiMsb28oXWIDK0gXLALOJRXLgICLiulqdZGOaPPd0vRT7fQp74NtdADAVu+D8s00C+0Xs0MxVP0VKF/sZEUgw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1856,26 +1856,26 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz", - "integrity": "sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==", - "dependencies": { - "@babel/compat-data": "^7.24.4", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.6.tgz", + "integrity": "sha512-CrxEAvN7VxfjOG8JNF2Y/eMqMJbZPZ185amwGUBp8D9USK90xQmv7dLdFSa+VbD7fdIqcy/Mfv7WtzG8+/qxKg==", + "dependencies": { + "@babel/compat-data": "^7.24.6", + "@babel/helper-compilation-targets": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-validator-option": "^7.24.6", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.6", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.6", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.1", - "@babel/plugin-syntax-import-attributes": "^7.24.1", + "@babel/plugin-syntax-import-assertions": "^7.24.6", + "@babel/plugin-syntax-import-attributes": "^7.24.6", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1887,54 +1887,54 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.1", - "@babel/plugin-transform-async-generator-functions": "^7.24.3", - "@babel/plugin-transform-async-to-generator": "^7.24.1", - "@babel/plugin-transform-block-scoped-functions": "^7.24.1", - "@babel/plugin-transform-block-scoping": "^7.24.5", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-class-static-block": "^7.24.4", - "@babel/plugin-transform-classes": "^7.24.5", - "@babel/plugin-transform-computed-properties": "^7.24.1", - "@babel/plugin-transform-destructuring": "^7.24.5", - "@babel/plugin-transform-dotall-regex": "^7.24.1", - "@babel/plugin-transform-duplicate-keys": "^7.24.1", - "@babel/plugin-transform-dynamic-import": "^7.24.1", - "@babel/plugin-transform-exponentiation-operator": "^7.24.1", - "@babel/plugin-transform-export-namespace-from": "^7.24.1", - "@babel/plugin-transform-for-of": "^7.24.1", - "@babel/plugin-transform-function-name": "^7.24.1", - "@babel/plugin-transform-json-strings": "^7.24.1", - "@babel/plugin-transform-literals": "^7.24.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", - "@babel/plugin-transform-member-expression-literals": "^7.24.1", - "@babel/plugin-transform-modules-amd": "^7.24.1", - "@babel/plugin-transform-modules-commonjs": "^7.24.1", - "@babel/plugin-transform-modules-systemjs": "^7.24.1", - "@babel/plugin-transform-modules-umd": "^7.24.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.24.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", - "@babel/plugin-transform-numeric-separator": "^7.24.1", - "@babel/plugin-transform-object-rest-spread": "^7.24.5", - "@babel/plugin-transform-object-super": "^7.24.1", - "@babel/plugin-transform-optional-catch-binding": "^7.24.1", - "@babel/plugin-transform-optional-chaining": "^7.24.5", - "@babel/plugin-transform-parameters": "^7.24.5", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-private-property-in-object": "^7.24.5", - "@babel/plugin-transform-property-literals": "^7.24.1", - "@babel/plugin-transform-regenerator": "^7.24.1", - "@babel/plugin-transform-reserved-words": "^7.24.1", - "@babel/plugin-transform-shorthand-properties": "^7.24.1", - "@babel/plugin-transform-spread": "^7.24.1", - "@babel/plugin-transform-sticky-regex": "^7.24.1", - "@babel/plugin-transform-template-literals": "^7.24.1", - "@babel/plugin-transform-typeof-symbol": "^7.24.5", - "@babel/plugin-transform-unicode-escapes": "^7.24.1", - "@babel/plugin-transform-unicode-property-regex": "^7.24.1", - "@babel/plugin-transform-unicode-regex": "^7.24.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", + "@babel/plugin-transform-arrow-functions": "^7.24.6", + "@babel/plugin-transform-async-generator-functions": "^7.24.6", + "@babel/plugin-transform-async-to-generator": "^7.24.6", + "@babel/plugin-transform-block-scoped-functions": "^7.24.6", + "@babel/plugin-transform-block-scoping": "^7.24.6", + "@babel/plugin-transform-class-properties": "^7.24.6", + "@babel/plugin-transform-class-static-block": "^7.24.6", + "@babel/plugin-transform-classes": "^7.24.6", + "@babel/plugin-transform-computed-properties": "^7.24.6", + "@babel/plugin-transform-destructuring": "^7.24.6", + "@babel/plugin-transform-dotall-regex": "^7.24.6", + "@babel/plugin-transform-duplicate-keys": "^7.24.6", + "@babel/plugin-transform-dynamic-import": "^7.24.6", + "@babel/plugin-transform-exponentiation-operator": "^7.24.6", + "@babel/plugin-transform-export-namespace-from": "^7.24.6", + "@babel/plugin-transform-for-of": "^7.24.6", + "@babel/plugin-transform-function-name": "^7.24.6", + "@babel/plugin-transform-json-strings": "^7.24.6", + "@babel/plugin-transform-literals": "^7.24.6", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.6", + "@babel/plugin-transform-member-expression-literals": "^7.24.6", + "@babel/plugin-transform-modules-amd": "^7.24.6", + "@babel/plugin-transform-modules-commonjs": "^7.24.6", + "@babel/plugin-transform-modules-systemjs": "^7.24.6", + "@babel/plugin-transform-modules-umd": "^7.24.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.6", + "@babel/plugin-transform-new-target": "^7.24.6", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.6", + "@babel/plugin-transform-numeric-separator": "^7.24.6", + "@babel/plugin-transform-object-rest-spread": "^7.24.6", + "@babel/plugin-transform-object-super": "^7.24.6", + "@babel/plugin-transform-optional-catch-binding": "^7.24.6", + "@babel/plugin-transform-optional-chaining": "^7.24.6", + "@babel/plugin-transform-parameters": "^7.24.6", + "@babel/plugin-transform-private-methods": "^7.24.6", + "@babel/plugin-transform-private-property-in-object": "^7.24.6", + "@babel/plugin-transform-property-literals": "^7.24.6", + "@babel/plugin-transform-regenerator": "^7.24.6", + "@babel/plugin-transform-reserved-words": "^7.24.6", + "@babel/plugin-transform-shorthand-properties": "^7.24.6", + "@babel/plugin-transform-spread": "^7.24.6", + "@babel/plugin-transform-sticky-regex": "^7.24.6", + "@babel/plugin-transform-template-literals": "^7.24.6", + "@babel/plugin-transform-typeof-symbol": "^7.24.6", + "@babel/plugin-transform-unicode-escapes": "^7.24.6", + "@babel/plugin-transform-unicode-property-regex": "^7.24.6", + "@babel/plugin-transform-unicode-regex": "^7.24.6", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.6", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.4", @@ -1971,16 +1971,16 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.1.tgz", - "integrity": "sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.6.tgz", + "integrity": "sha512-8mpzh1bWvmINmwM3xpz6ahu57mNaWavMm+wBNjQ4AFu1nghKBiIRET7l/Wmj4drXany/BBGjJZngICcD98F1iw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-transform-react-display-name": "^7.24.1", - "@babel/plugin-transform-react-jsx": "^7.23.4", - "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.24.1" + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-validator-option": "^7.24.6", + "@babel/plugin-transform-react-display-name": "^7.24.6", + "@babel/plugin-transform-react-jsx": "^7.24.6", + "@babel/plugin-transform-react-jsx-development": "^7.24.6", + "@babel/plugin-transform-react-pure-annotations": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1990,15 +1990,15 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz", - "integrity": "sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.6.tgz", + "integrity": "sha512-U10aHPDnokCFRXgyT/MaIRTivUu2K/mu0vJlwRS9LxJmJet+PFQNKpggPyFCUtC6zWSBPjvxjnpNkAn3Uw2m5w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-syntax-jsx": "^7.24.1", - "@babel/plugin-transform-modules-commonjs": "^7.24.1", - "@babel/plugin-transform-typescript": "^7.24.1" + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-validator-option": "^7.24.6", + "@babel/plugin-syntax-jsx": "^7.24.6", + "@babel/plugin-transform-modules-commonjs": "^7.24.6", + "@babel/plugin-transform-typescript": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -2013,9 +2013,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", - "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", + "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2024,9 +2024,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.5.tgz", - "integrity": "sha512-GWO0mgzNMLWaSYM4z4NVIuY0Cd1fl8cPnuetuddu5w/qGuvt5Y7oUi/kvvQGK9xgOkFJDQX2heIvTRn/OQ1XTg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.6.tgz", + "integrity": "sha512-tbC3o8uHK9xMgMsvUm9qGqxVpbv6yborMBLbDteHIc7JDNHsTV0vDMQ5j1O1NXvO+BDELtL9KgoWYaUVIVGt8w==", "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.14.0" @@ -2036,31 +2036,31 @@ } }, "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz", + "integrity": "sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", - "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", - "dependencies": { - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/types": "^7.24.5", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.6.tgz", + "integrity": "sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==", + "dependencies": { + "@babel/code-frame": "^7.24.6", + "@babel/generator": "^7.24.6", + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-function-name": "^7.24.6", + "@babel/helper-hoist-variables": "^7.24.6", + "@babel/helper-split-export-declaration": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/types": "^7.24.6", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2069,12 +2069,12 @@ } }, "node_modules/@babel/types": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", - "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", + "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", "dependencies": { - "@babel/helper-string-parser": "^7.24.1", - "@babel/helper-validator-identifier": "^7.24.5", + "@babel/helper-string-parser": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2304,6 +2304,29 @@ "react-dom": "*" } }, + "node_modules/@docusaurus/plugin-client-redirects": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.2.1.tgz", + "integrity": "sha512-GgzuqwbqNQSP5s/ouUrOQFuHI8m4Rn8a5CHuWkwpqj+5lbQMsABcvsoiWjrH9M00CzN48q+slSbJy7rtHjn7zg==", + "dependencies": { + "@docusaurus/core": "3.2.1", + "@docusaurus/logger": "3.2.1", + "@docusaurus/utils": "3.2.1", + "@docusaurus/utils-common": "3.2.1", + "@docusaurus/utils-validation": "3.2.1", + "eta": "^2.2.0", + "fs-extra": "^11.1.1", + "lodash": "^4.17.21", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, "node_modules/@docusaurus/plugin-content-blog": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.2.1.tgz", @@ -5303,9 +5326,9 @@ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/react": { - "version": "18.3.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.2.tgz", - "integrity": "sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==", + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -5647,9 +5670,9 @@ } }, "node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.14.0.tgz", + "integrity": "sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==", "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", @@ -5711,9 +5734,9 @@ } }, "node_modules/algoliasearch-helper": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.20.0.tgz", - "integrity": "sha512-6EVhAmVug0+hdRHWbubF7hLHHhLoQ8NjLk6iS6d4k5chWawpS5EDexrF6Jx/hPZvUKIeNrzsbTpjAkcvrjNLHg==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.21.0.tgz", + "integrity": "sha512-hjVOrL15I3Y3K8xG0icwG1/tWE+MocqBrhW6uVBWpU+/kVEMK0BnM2xdssj6mZM61eJ4iRxHR0djEI3ENOpR8w==", "dependencies": { "@algolia/events": "^4.0.1" }, @@ -6210,9 +6233,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001621", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz", - "integrity": "sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==", + "version": "1.0.30001625", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001625.tgz", + "integrity": "sha512-4KE9N2gcRH+HQhpeiRZXd+1niLB/XNLAhSy4z7fI8EzcbcPoAqjNInxVHTiTwWfTIV4w096XG8OtCOCQQKPv3w==", "funding": [ { "type": "opencollective", @@ -7460,9 +7483,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.777", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.777.tgz", - "integrity": "sha512-n02NCwLJ3wexLfK/yQeqfywCblZqLcXphzmid5e8yVPdtEcida7li0A5WQKghHNG0FeOMCzeFOzEbtAh5riXFw==" + "version": "1.4.783", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.783.tgz", + "integrity": "sha512-bT0jEz/Xz1fahQpbZ1D7LgmPYZ3iHVY39NcWWro1+hA2IvjiPeaXtfSqrQ+nXjApMvQRE2ASt1itSLRrebHMRQ==" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -8395,6 +8418,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9267,6 +9291,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -9982,9 +10007,9 @@ } }, "node_modules/mdast-util-from-markdown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", - "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", + "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -14289,6 +14314,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -14368,9 +14394,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" }, "node_modules/scheduler": { "version": "0.23.2", diff --git a/docs/package.json b/docs/package.json index d8f7a3dd2b..aec8a76f60 100644 --- a/docs/package.json +++ b/docs/package.json @@ -16,6 +16,7 @@ }, "dependencies": { "@docusaurus/core": "3.2.1", + "@docusaurus/plugin-client-redirects": "3.2.1", "@docusaurus/preset-classic": "3.2.1", "@easyops-cn/docusaurus-search-local": "^0.40.1", "@mdx-js/react": "^3.0.0", diff --git a/docs/versioned_docs/version-0.11.8/_config-options.md b/docs/versioned_docs/version-0.11.8/_config-options.md new file mode 100644 index 0000000000..a5f1b50360 --- /dev/null +++ b/docs/versioned_docs/version-0.11.8/_config-options.md @@ -0,0 +1,48 @@ + + +| Config Option | Default Value | Description | +| - | - | - | +| `cn-core-contract-address` | | Custom network core contract address | +| `cn-feeder-url` | | Custom network feeder URL | +| `cn-gateway-url` | | Custom network gateway URL | +| `cn-l1-chain-id` | | Custom network L1 chain id | +| `cn-l2-chain-id` | | Custom network L2 chain id | +| `cn-name` | | Custom network name | +| `cn-unverifiable-range` | `[]` | Custom network range of blocks to skip hash verifications (e.g. `0,100`) | +| `colour` | `true` | Use `--colour=false` command to disable colourized outputs (ANSI Escape Codes) | +| `config` | | The YAML configuration file | +| `db-cache-size` | `8` | Determines the amount of memory (in megabytes) allocated for caching data in the database | +| `db-max-handles` | `1024` | A soft limit on the number of open files that can be used by the DB | +| `db-path` | `juno` | Location of the database files | +| `eth-node` | | WebSocket endpoint of the Ethereum node. To verify the correctness of the L2 chain, Juno must connect to an Ethereum node and parse events in the Starknet contract | +| `grpc` | `false` | Enable the HTTP gRPC server on the default port | +| `grpc-host` | `localhost` | The interface on which the gRPC server will listen for requests | +| `grpc-port` | `6064` | The port on which the gRPC server will listen for requests | +| `gw-api-key` | | API key for gateway endpoints to avoid throttling | +| `gw-timeout` | `5` | Timeout for requests made to the gateway | +| `http` | `false` | Enables the HTTP RPC server on the default port and interface | +| `http-host` | `localhost` | The interface on which the HTTP RPC server will listen for requests | +| `http-port` | `6060` | The port on which the HTTP server will listen for requests | +| `log-level` | `info` | Options: trace, debug, info, warn, error | +| `max-vm-queue` | `2 * max-vms` | Maximum number for requests to queue after reaching max-vms before starting to reject incoming requests | +| `max-vms` | `3 * CPU Cores` | Maximum number for VM instances to be used for RPC calls concurrently | +| `metrics` | `false` | Enables the Prometheus metrics endpoint on the default port | +| `metrics-host` | `localhost` | The interface on which the Prometheus endpoint will listen for requests | +| `metrics-port` | `9090` | The port on which the Prometheus endpoint will listen for requests | +| `network` | `mainnet` | Options: mainnet, sepolia, sepolia-integration | +| `p2p` | `false` | EXPERIMENTAL: Enables p2p server | +| `p2p-addr` | | EXPERIMENTAL: Specify p2p source address as multiaddr | +| `p2p-feeder-node` | `false` | EXPERIMENTAL: Run juno as a feeder node which will only sync from feeder gateway and gossip the new blocks to the network | +| `p2p-peers` | | EXPERIMENTAL: Specify list of p2p peers split by a comma. These peers can be either Feeder or regular nodes | +| `p2p-private-key` | | EXPERIMENTAL: Hexadecimal representation of a private key on the Ed25519 elliptic curve | +| `pending-poll-interval` | `5` | Sets how frequently pending block will be updated (0s will disable fetching of pending block) | +| `pprof` | `false` | Enables the pprof endpoint on the default port | +| `pprof-host` | `localhost` | The interface on which the pprof HTTP server will listen for requests | +| `pprof-port` | `6062` | The port on which the pprof HTTP server will listen for requests | +| `remote-db` | | gRPC URL of a remote Juno node | +| `rpc-call-max-steps` | `4000000` | Maximum number of steps to be executed in starknet_call requests. The upper limit is 4 million steps, and any higher value will still be capped at 4 million | +| `rpc-cors-enable` | `false` | Enable CORS on RPC endpoints | +| `rpc-max-block-scan` | `18446744073709551615` | Maximum number of blocks scanned in single starknet_getEvents call | +| `ws` | `false` | Enables the WebSocket RPC server on the default port | +| `ws-host` | `localhost` | The interface on which the WebSocket RPC server will listen for requests | +| `ws-port` | `6061` | The port on which the WebSocket server will listen for requests | diff --git a/docs/versioned_docs/version-0.11.8/configuring.md b/docs/versioned_docs/version-0.11.8/configuring.md new file mode 100644 index 0000000000..c53d106676 --- /dev/null +++ b/docs/versioned_docs/version-0.11.8/configuring.md @@ -0,0 +1,102 @@ +--- +title: Configuring Juno +--- + +# Configuring Juno :gear: + +Juno can be configured using several methods, with the following order of precedence: + +1. [Command line parameters (flags)](#command-line-params) +2. [Environment variables](#environment-variables) +3. [Configuration file](#configuration-file) + +## Command line params + +Juno can be configured directly on the command line by prefixing `--` to each option name: + +```bash +./build/juno --http --http-port 6060 --http-host 0.0.0.0 +``` + +When using Docker, append the command line parameters after the image name to configure Juno: + +```bash +docker run nethermind/juno --http --http-port 6060 --http-host 0.0.0.0 +``` + +:::tip +Command line parameters override [environment variables](#environment-variables) and [configuration file](#configuration-file). +::: + +## Environment variables + +Juno can be configured through environment variables by prefixing the variable names with `JUNO_` and using the configuration options in [SCREAMING_SNAKE_CASE](https://en.wiktionary.org/wiki/screaming_snake_case) format. + +To set the `http`, `http-port`, and `http-host` configurations, Juno should be run in this format: + +```bash +JUNO_HTTP=true JUNO_HTTP_PORT=6060 JUNO_HTTP_HOST=0.0.0.0 ./build/juno +``` + +When using Docker, start Juno using the `-e` command option: + +```bash +docker run \ + -e "JUNO_HTTP=true JUNO_HTTP_PORT=6060 JUNO_HTTP_HOST=0.0.0.0" \ + nethermind/juno +``` + +:::tip +Environment variables rank second in configuration precedence. [Command line parameters](#command-line-params) override environment variables. +::: + +## Configuration file + +Juno can be configured using a [YAML](https://en.wikipedia.org/wiki/YAML) file: + +```yaml title="Sample YAML File" showLineNumbers +log-level: info +network: mainnet +http: true +http-port: 6060 +metrics: true +metrics-port: 9090 +``` + +To run Juno with a configuration file, use the `config` option to specify the path of the configuration file: + +```bash +# Standalone binary +./build/juno --config + +# Docker container +docker run nethermind/juno --config +``` + +:::info +By default, Juno looks for the configuration file in the `$XDG_CONFIG_HOME` directory. +::: + +:::tip +Configuration file rank third in configuration precedence. [Command line parameters](#command-line-params) and [environment variables](#environment-variables) override configuration file. +::: + +## Configuration options + +To list all available command line options, you can use the `--help` parameter: + +```bash +# Standalone binary +./build/juno --help + +# Docker container +docker run nethermind/juno --help +``` + +Below is a list of all configuration options available in Juno, along with their default values and descriptions: + +```mdx-code-block +import ConfigOptions from "./_config-options.md"; + + +``` diff --git a/docs/versioned_docs/version-0.11.8/faq.md b/docs/versioned_docs/version-0.11.8/faq.md new file mode 100644 index 0000000000..78828677ce --- /dev/null +++ b/docs/versioned_docs/version-0.11.8/faq.md @@ -0,0 +1,125 @@ +--- +title: Frequently Asked Questions +--- + +# Frequently Asked Questions :question: + +
+ What is Juno? + +Juno is a Go implementation of a Starknet full-node client created by Nethermind to allow node operators to easily and reliably support the network and advance its decentralisation goals. Juno supports various node setups, from casual to production-grade indexers. + +
+ +
+ How can I run Juno? + +Check out the [Running Juno](running-juno) guide to learn the simplest and fastest ways to run a Juno node. You can also check the [Running Juno on GCP](running-on-gcp) guide to learn how to run Juno on GCP. + +
+ +
+ What are the hardware requirements for running Juno? + +We recommend running Juno with at least 4GB of RAM and 250GB of SSD storage. Check out the [Hardware Requirements](hardware-requirements) for more information. + +
+ +
+ How can I configure my Juno node? + +You can configure Juno using [command line parameters](configuring#command-line-params), [environment variables](configuring#environment-variables), and a [YAML configuration file](configuring#configuration-file). Check out the [Configuring Juno](configuring) guide to learn their usage and precedence. + +
+ +
+ How can I update my Juno node? + +Check out the [Updating Juno](updating) guide for instructions on updating your node to the latest version. + +
+ +
+ How can I interact with my Juno node? + +You can interact with a running Juno node using the [JSON-RPC](json-rpc) and [WebSocket](websocket) interfaces. + +
+ +
+ How can I monitor my Juno node? + +Juno captures metrics data using [Prometheus](https://prometheus.io), and you can visualise them using [Grafana](https://grafana.com). Check out the [Monitoring Juno](monitoring) guide to get started. + +
+ +
+ Do node operators receive any rewards, or is participation solely to support the network? + +Presently, running a node does not come with direct rewards; its primary purpose is contributing to the network's functionality and stability. However, operating a node provides valuable educational benefits and deepens your knowledge of the network's operation. + +
+ +
+ How can I view Juno logs from Docker? + +You can view logs from the Docker container using the following command: + +```bash +docker logs -f juno +``` + +
+ +
+ How can I get real-time updates of new blocks? + +The [WebSocket](websocket#subscribe-to-newly-created-blocks) interface provides a `juno_subscribeNewHeads` method that emits an event when new blocks are added to the blockchain. + +
+ +
+ Does Juno provide snapshots to sync with Starknet quickly? + +Yes, Juno provides snapshots for both the Starknet Mainnet and Sepolia networks. Check out the [Database Snapshots](snapshots) guide to get started. + +
+ +
+ How can I contribute to Juno? + +You can contribute to Juno by running a node, starring on GitHub, reporting bugs, and suggesting new features. Check out the [Contributions and Partnerships](/#contributions-and-partnerships) page for more information. + +
+ +
+ I noticed a warning in my logs saying: **Failed storing Block \{"err": "unsupported block version"\}**. How should I proceed? + +You can fix this problem by [updating to the latest version](updating) of Juno. Check for updates and install them to maintain compatibility with the latest block versions. + +
+ +
+ After updating Juno, I receive **error while migrating DB.** How should I proceed? + +This error suggests your database is corrupted, likely due to the node being interrupted during migration. This can occur if there are insufficient system resources, such as RAM, to finish the process. The only solution is to resynchronise the node from the beginning. To avoid this issue in the future, ensure your system has adequate resources and that the node remains uninterrupted during upgrades. + +
+ +
+ I receive **Error: unable to verify latest block hash; are the database and --network option compatible?** while running Juno. How should I proceed? + +To resolve this issue, ensure that the `eth-node` configuration aligns with the `network` option for the Starknet network. + +
+ +
+ I receive **process \ killed** and **./build/juno: invalid signature (code or signature have been modified)** while running the binary on macOS. How should I proceed? + +You need to re-sign the binary to resolve this issue using the following command: + +```bash +codesign --sign - ./build/juno +``` + +
diff --git a/docs/versioned_docs/version-0.11.8/hardware-requirements.md b/docs/versioned_docs/version-0.11.8/hardware-requirements.md new file mode 100644 index 0000000000..d980364051 --- /dev/null +++ b/docs/versioned_docs/version-0.11.8/hardware-requirements.md @@ -0,0 +1,23 @@ +--- +title: Hardware Requirements +--- + +# Hardware Requirements :computer: + +The following specifications outline the hardware required to run a Juno node. These specifications are categorised into minimal and recommended requirements for different usage scenarios. + +## Minimal requirements + +- **CPU**: At least 2 cores +- **RAM**: 4GB or more +- **Storage**: 250GB or more (SSD recommended; note: storage needs will grow over time) + +## Recommended requirements + +- **CPU**: High-performance CPU with 4 or more cores +- **RAM**: 8GB or more +- **Storage**: High-performance SSD with at least 250GB to accommodate future growth + +:::tip +We intend the above specifications as a guideline. The minimal requirements support basic node operations, and the recommended settings ensure optimal performance and scalability for future needs. +::: diff --git a/docs/versioned_docs/version-0.11.8/intro.md b/docs/versioned_docs/version-0.11.8/intro.md new file mode 100644 index 0000000000..e51ce1fee3 --- /dev/null +++ b/docs/versioned_docs/version-0.11.8/intro.md @@ -0,0 +1,78 @@ +--- +slug: / +title: Introduction +--- + +# Welcome to Juno :wave: + +Juno is a Go implementation of a Starknet full-node client created by Nethermind to allow node operators to easily and reliably support the network and advance its decentralisation goals. Juno supports various node setups, from casual to production-grade indexers. + +- :cd: **Small database footprint**: Approximately 182GB on mainnet. +- :zap: **Ultra-fast synchronisation**: Limited only by your hardware and the sequencer. +- :100: **Complete [JSON-RPC spec](https://github.com/starkware-libs/starknet-specs/tree/master) compliance**: Everything Starknet, accessible from a single point. +- :mag_right: **Minimal RPC response latency**: Ensuring your applications run smoothly. +- :globe_with_meridians: **Websocket interface**: For seamless real-time updates of the network. + +## Getting started + +Learn how to configure and manage your Juno node with the following resources: + +```mdx-code-block +import GuideCard from '@site/src/components/GuideCard'; + + + + + + + + +``` + +:::tip +You can access the Nethermind Starknet RPC service for free at https://data.voyager.online. +::: + +## Community and support + +Join our community for support, engaging discussions, and updates: + +- [Discord](https://discord.gg/SZkKcmmChJ): Connect in real-time with the Juno team and community. +- [X (Twitter)](https://x.com/NethermindStark): Follow for the latest news and insights from Nethermind. +- [Telegram](https://t.me/+LHRF4H8iQ3c5MDY0): Share ideas and stay informed with fellow Juno users. + +## Contributions and partnerships + +We value community contributions and are eager to support your involvement. Here’s how you can contribute: + +- :rocket: [Run a Juno node](running-juno) to strengthen the Starknet network. +- :star: Give Juno a [star on GitHub](https://github.com/NethermindEth/juno/stargazers). +- :memo: Share your thoughts on [X (Twitter)](https://twitter.com/intent/tweet?url=https%3A%2F%2Fgithub.com%2FNethermindEth%2Fjuno&via=nethermindeth&text=Juno%20is%20Awesome%2C%20they%20are%20working%20hard%20to%20bring%20decentralization%20to%20StarkNet&hashtags=StarkNet%2CJuno%2CEthereum). +- :beetle: [Report bugs](https://github.com/NethermindEth/juno/issues/new) or [suggest new features](https://github.com/NethermindEth/juno/issues/new). +- :mega: Encourage others to explore and use Juno. + +:::tip +If you're ready to make PRs but unsure where to start, join our [Discord](https://discord.gg/TcHbSZ9ATd), and we'll guide you through some beginner-friendly issues. +::: + +If you're interested in forming a partnership with the Juno team or have any suggestions or special requests, please don't hesitate to contact us via juno@nethermind.io diff --git a/docs/versioned_docs/version-0.11.8/json-rpc.md b/docs/versioned_docs/version-0.11.8/json-rpc.md new file mode 100644 index 0000000000..188c06a879 --- /dev/null +++ b/docs/versioned_docs/version-0.11.8/json-rpc.md @@ -0,0 +1,250 @@ +--- +title: JSON-RPC Interface +--- + +# JSON-RPC Interface :globe_with_meridians: + +Interacting with Juno requires sending requests to specific JSON-RPC API methods. Juno supports all of [Starknet's Node API Endpoints](https://playground.open-rpc.org/?uiSchema%5BappBar%5D%5Bui:splitView%5D=false&schemaUrl=https://raw.githubusercontent.com/starkware-libs/starknet-specs/v0.7.0/api/starknet_api_openrpc.json&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:darkMode%5D=true&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false) over HTTP and [WebSocket](websocket). + +## Enable the JSON-RPC server + +To enable the JSON-RPC interface, use the following configuration options: + +- `http`: Enables the HTTP RPC server on the default port and interface (disabled by default). +- `http-host`: The interface on which the HTTP RPC server will listen for requests. If skipped, it defaults to `localhost`. +- `http-port`: The port on which the HTTP server will listen for requests. If skipped, it defaults to `6060`. + +```bash +# Docker container +docker run -d \ + --name juno \ + -p 6060:6060 \ + nethermind/juno \ + --http \ + --http-port 6060 \ + --http-host 0.0.0.0 + +# Standalone binary +./build/juno --http --http-port 6060 --http-host 0.0.0.0 +``` + +## Making JSON-RPC requests + +You can use any of [Starknet's Node API Endpoints](https://playground.open-rpc.org/?uiSchema%5BappBar%5D%5Bui:splitView%5D=false&schemaUrl=https://raw.githubusercontent.com/starkware-libs/starknet-specs/v0.7.0/api/starknet_api_openrpc.json&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:darkMode%5D=true&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false) with Juno. Check the availability of Juno with the `juno_version` method: + +```mdx-code-block +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +``` + + + + +```json +{ + "jsonrpc": "2.0", + "method": "juno_version", + "params": [], + "id": 1 +} +``` + + + + +```bash +curl --location 'http://localhost:6060' \ +--header 'Content-Type: application/json' \ +--data '{ + "jsonrpc": "2.0", + "method": "juno_version", + "params": [], + "id": 1 +}' +``` + + + + +```json +{ + "jsonrpc": "2.0", + "result": "v0.11.7", + "id": 1 +} +``` + + + + +Get the most recent accepted block hash and number with the `starknet_blockHashAndNumber` method: + + + + +```json +{ + "jsonrpc": "2.0", + "method": "starknet_blockHashAndNumber", + "params": [], + "id": 1 +} +``` + + + + +```bash +curl --location 'http://localhost:6060' \ +--header 'Content-Type: application/json' \ +--data '{ + "jsonrpc": "2.0", + "method": "starknet_blockHashAndNumber", + "params": [], + "id": 1 +}' +``` + + + + +```js +const { RpcProvider } = require("starknet"); + +const provider = new RpcProvider({ + nodeUrl: "http://localhost:6060", +}); + +provider.getBlockLatestAccepted().then((blockHashAndNumber) => { + console.log(blockHashAndNumber); +}); +``` + + + + +```go +package main + +import ( + "context" + "fmt" + "log" + "github.com/NethermindEth/juno/core/felt" + "github.com/NethermindEth/starknet.go/rpc" + "github.com/NethermindEth/starknet.go/utils" +) + +func main() { + rpcUrl := "http://localhost:6060" + client, err := rpc.NewClient(rpcUrl) + if err != nil { + log.Fatal(err) + } + + provider := rpc.NewProvider(client) + result, err := provider.BlockHashAndNumber(context.Background()) + if err != nil { + log.Fatal(err) + } + fmt.Println("BlockHashAndNumber:", result) +} +``` + + + + +```rust +use starknet::providers::{ + jsonrpc::{HttpTransport, JsonRpcClient}, + Provider, Url, +}; + +#[tokio::main] +async fn main() { + let provider = JsonRpcClient::new(HttpTransport::new( + Url::parse("http://localhost:6060").unwrap(), + )); + + let result = provider.block_hash_and_number().await; + match result { + Ok(block_hash_and_number) => { + println!("{block_hash_and_number:#?}"); + } + Err(err) => { + eprintln!("Error: {err}"); + } + } +} +``` + + + + +```json +{ + "jsonrpc": "2.0", + "result": { + "block_hash": "0x637ae4d7468bb603c2f16ba7f9118d58c7d7c98a8210260372e83e7c9df443a", + "block_number": 640827 + }, + "id": 1 +} +``` + + + + +## Supported Starknet API versions + +Juno supports the following Starknet API versions: + +- **v0.7.0**: Accessible via endpoints `/v0_7`, `/rpc/v0_7`, or the default `/` +- **v0.6.0**: Accessible via endpoints `/v0_6` or `/rpc/v0_6` + +To use a specific API version, specify the version endpoint in your RPC calls: + + + + +```bash +curl --location 'http://localhost:6060' \ +--header 'Content-Type: application/json' \ +--data '{ + "jsonrpc": "2.0", + "method": "starknet_chainId", + "params": [], + "id": 1 +}' +``` + + + + +```bash +curl --location 'http://localhost:6060/v0_7' \ +--header 'Content-Type: application/json' \ +--data '{ + "jsonrpc": "2.0", + "method": "starknet_chainId", + "params": [], + "id": 1 +}' +``` + + + + +```bash +curl --location 'http://localhost:6060/v0_6' \ +--header 'Content-Type: application/json' \ +--data '{ + "jsonrpc": "2.0", + "method": "starknet_chainId", + "params": [], + "id": 1 +}' +``` + + + diff --git a/docs/versioned_docs/version-0.11.8/monitoring.md b/docs/versioned_docs/version-0.11.8/monitoring.md new file mode 100644 index 0000000000..f0abb49b35 --- /dev/null +++ b/docs/versioned_docs/version-0.11.8/monitoring.md @@ -0,0 +1,87 @@ +--- +title: Monitoring Juno +--- + +# Monitoring Juno :bar_chart: + +Juno uses [Prometheus](https://prometheus.io/) to monitor and collect metrics data, which you can visualise with [Grafana](https://grafana.com/). You can use these insights to understand what is happening when Juno is running. + +## Enable the metrics server + +To enable the metrics server, use the following configuration options: + +- `metrics`: Enables the Prometheus metrics endpoint on the default port (disabled by default). +- `metrics-host`: The interface on which the Prometheus endpoint will listen for requests. If skipped, it defaults to `localhost`. +- `metrics-port`: The port on which the Prometheus endpoint will listen for requests. If skipped, it defaults to `9090`. + +```bash +# Docker container +docker run -d \ + --name juno \ + -p 9090:9090 \ + nethermind/juno \ + --metrics \ + --metrics-port 9090 \ + --metrics-host 0.0.0.0 + +# Standalone binary +./build/juno --metrics --metrics-port 9090 --metrics-host=0.0.0.0 +``` + +## Configure Grafana dashboard + +### 1. Set up Grafana + +- Follow the [Set up Grafana](https://grafana.com/docs/grafana/latest/setup-grafana/) guide to install Grafana. +- Download and [configure](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#configuration-file-location) the [Grafana dashboard file](/juno_grafana.json). + +### 2. Set up Prometheus + +- Follow the [First steps with Prometheus](https://prometheus.io/docs/introduction/first_steps/) guide to install Prometheus. +- Add the Juno metrics endpoint in the `prometheus.yml` configuration file: + +```yaml title="prometheus.yml" showLineNumbers +scrape_configs: + - job_name: "juno" + static_configs: + - targets: ["localhost:9090"] +``` + +### 3. Set up Grafana Loki + +- Follow the [Get started with Grafana Loki](https://grafana.com/docs/loki/latest/get-started/) guide to install [Loki](https://grafana.com/oss/loki/). +- Configure Loki to [collect logs](https://grafana.com/docs/loki/latest/send-data/) from Juno. You might need to configure log paths or use [Promtail](https://grafana.com/docs/loki/latest/send-data/promtail/) (Loki's agent) to send logs to Loki: + +```yaml title="Sample Loki Configuration" showLineNumbers +scrape_configs: + - job_name: "juno-logs" + labels: + job: "juno" + __path__: "/path/to/juno/logs/*" +``` + +:::tip +To have Juno write logs to a file, use the command: + +```bash +./build/juno >> /path/juno.log 2>&1 +``` + +::: + +### 4. Configure the data sources + +1. Follow the [Grafana data sources](https://grafana.com/docs/grafana/latest/datasources/) guide to add data sources. +2. Choose **Prometheus** as a data source: + +- Enter the URL where Prometheus is running, e.g., `http://localhost:9090`. +- Click the **"Save & Test"** button. + +3. Choose **Loki** as a data source: + +- Enter the URL where Loki is running, e.g., `http://localhost:3100`. +- Click the **"Save & Test"** button. + +![Grafana dashboard](/img/grafana-1.png) + +![Grafana dashboard](/img/grafana-2.png) diff --git a/docs/versioned_docs/version-0.11.8/running-juno.md b/docs/versioned_docs/version-0.11.8/running-juno.md new file mode 100644 index 0000000000..12ceea8833 --- /dev/null +++ b/docs/versioned_docs/version-0.11.8/running-juno.md @@ -0,0 +1,153 @@ +--- +title: Running Juno +--- + +# Running Juno :rocket: + +You can run a Juno node using several methods: + +- [Docker container](#docker-container) +- [Standalone binary](#standalone-binary) +- [Building from source](#building-from-source) +- [Google Cloud Platform (GCP)](running-on-gcp) + +:::tip +You can use a snapshot for quickly synchronise your node with the network. Check out the [Database Snapshots](snapshots) guide to get started. +::: + +## Docker container + +### 1. Get the Docker image + +Juno Docker images can be found at the [nethermind/juno](https://hub.docker.com/r/nethermind/juno) repository on Docker Hub. Download the latest image: + +```bash +docker pull nethermind/juno +``` + +You can also build the image locally: + +```bash +# Clone the Juno repository +git clone https://github.com/NethermindEth/juno +cd juno + +# Build the Docker image +docker build -t nethermind/juno:latest . +``` + +### 2. Run the Docker container + +```bash +# Prepare the snapshots directory +mkdir -p $HOME/snapshots + +# Run the container +docker run -d \ + --name juno \ + -p 6060:6060 \ + -v $HOME/snapshots/juno_mainnet:/snapshots/juno_mainnet \ + nethermind/juno \ + --http \ + --http-port 6060 \ + --http-host 0.0.0.0 \ + --db-path /snapshots/juno_mainnet +``` + +You can view logs from the Docker container using the following command: + +```bash +docker logs -f juno +``` + +## Standalone binary + +Download standalone binaries from [Juno's GitHub Releases](https://github.com/NethermindEth/juno/releases/latest) as ZIP archives for Linux (amd64 and arm64) and macOS (amd64). For macOS (arm64) or Windows users, consider [running Juno using Docker](#docker-container). + +```bash +# Prepare the snapshots directory +mkdir -p $HOME/snapshots + +# Run the binary +./juno \ + --http \ + --http-port 6060 \ + --http-host 0.0.0.0 \ + --db-path $HOME/snapshots/juno_mainnet +``` + +## Building from source + +You can build the Juno binary or Docker image from the source code to access the latest updates or specific versions. + +### Prerequisites + +- [Golang 1.22](https://go.dev/doc/install) or later +- [Rust](https://www.rust-lang.org/tools/install) +- C compiler: `gcc` or `clang` +- [jemalloc](https://github.com/jemalloc/jemalloc) + +```mdx-code-block +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +``` + + + + +```bash +sudo apt-get install -y libjemalloc-dev +``` + + + + +```bash +brew install jemalloc +``` + + + + +### 1. Clone the repository + +Clone Juno's source code from our [GitHub repository](https://github.com/NethermindEth/juno): + +```bash +git clone https://github.com/NethermindEth/juno +cd juno +``` + +:::tip +You can use `git tag -l` to view specific version tags. +::: + +### 2. Build the binary or Docker image + +```bash +# Build the binary +make juno + +# Build the Docker image +docker build -t nethermind/juno:latest . +``` + +### 3. Run the binary + +Locate the standalone binary in the `./build/` directory: + +```bash +# Prepare the snapshots directory +mkdir -p $HOME/snapshots + +# Run the binary +./build/juno \ + --http \ + --http-port 6060 \ + --http-host 0.0.0.0 \ + --db-path $HOME/snapshots/juno_mainnet +``` + +:::tip +To learn how to configure Juno, check out the [Configuring Juno](configuring) guide. +::: diff --git a/docs/versioned_docs/version-0.11.8/running-on-gcp.md b/docs/versioned_docs/version-0.11.8/running-on-gcp.md new file mode 100644 index 0000000000..a589526f34 --- /dev/null +++ b/docs/versioned_docs/version-0.11.8/running-on-gcp.md @@ -0,0 +1,76 @@ +--- +title: Running Juno on GCP +--- + +# Running Juno on GCP :cloud: + +To run Juno on the Google Cloud Platform (GCP), you can use the Starknet RPC Virtual Machine (VM) developed by Nethermind. + +## 1. Install the Starknet RPC Node + +Head to the [Google Marketplace](https://console.cloud.google.com/marketplace/browse?q=Starknet%20RPC%20Node) and search for **"Starknet RPC Node"**. Then, click the **"GET STARTED"** button to begin the deployment process. + +![Starknet RPC Node overview](/img/installing_on_gcp/overview.png) + +## 2. Configure the Juno client + +Choose the configuration settings for the Juno client and click the **"DEPLOY"** button. + +![Starknet RPC Node configuration](/img/installing_on_gcp/config.png) + +## 3. Post-configuration and testing + +![Starknet RPC Node testing](/img/installing_on_gcp/testing.png) + +## 4. Enable Juno during startup + +1. Click on the name of the newly created VM instance to view its details. +2. Click the **"Edit"** button. +3. Head to the **"Automation"** section and enter the following startup script: + ```bash + #! /bin/bash + sudo /usr/local/bin/run_juno.sh + ``` +4. Click the **"Save"** button. +5. Restart the VM. + +## 5. Interact with the Juno node + +You can interact with Juno using its [JSON-RPC Interface](json-rpc). Here's an example to check the availability of Juno: + +```mdx-code-block +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +``` + + + + +```bash +curl --location 'http://localhost:6060' \ +--header 'Content-Type: application/json' \ +--data '{ + "jsonrpc": "2.0", + "method": "juno_version", + "params": [], + "id": 1 +}' +``` + + + + +```json +{ + "jsonrpc": "2.0", + "result": "v0.11.7", + "id": 1 +} +``` + + + + +:::tip +To learn how to configure Juno, check out the [Configuring Juno](configuring) guide. +::: diff --git a/docs/versioned_docs/version-0.11.8/running-p2p.md b/docs/versioned_docs/version-0.11.8/running-p2p.md new file mode 100644 index 0000000000..e78ec3a557 --- /dev/null +++ b/docs/versioned_docs/version-0.11.8/running-p2p.md @@ -0,0 +1,11 @@ +--- +title: Running a Juno P2P Node +--- + +# Running a Juno P2P Node + +Juno can be run as a peer-to-peer node for decentralised data synchronisation and to enhance the resilience and reliability of the Starknet network. Check out the [Juno peer-to-peer launch](https://medium.com/nethermind-eth/junos-experimental-peer-to-peer-launch-3040e195550d) guide to learn how it works. + +:::caution +The P2P feature is currently under active development and is being tested on smaller Juno networks. As a result, syncing with non-Juno nodes may be unstable. +::: diff --git a/docs/versioned_docs/version-0.11.8/snapshots.md b/docs/versioned_docs/version-0.11.8/snapshots.md new file mode 100644 index 0000000000..df70d26d9a --- /dev/null +++ b/docs/versioned_docs/version-0.11.8/snapshots.md @@ -0,0 +1,66 @@ +--- +title: Database Snapshots +--- + +# Database Snapshots :camera_flash: + +You can download a snapshot of the Juno database to reduce the network syncing time. Only the blocks created after the snapshot will be synced when you run the node. + +## Mainnet + +| Version | Size | Block | Download Link | +| ------------ | ---------- | ---------- | ----------------------------------------------------------------------------------------------------- | +| **>=v0.9.2** | **182 GB** | **640855** | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.7_640855.tar) | + +## Sepolia + +| Version | Size | Block | Download Link | +| ------------ | -------- | --------- | ---------------------------------------------------------------------------------------------------- | +| **>=v0.9.2** | **5 GB** | **66477** | [**juno_sepolia.tar**](https://juno-snapshots.nethermind.dev/sepolia/juno_sepolia_v0.11.7_66477.tar) | + +## Run Juno with a snapshot + +### 1. Download the snapshot + +First, download a snapshot from one of the provided URLs: + +```bash +wget -O juno_mainnet.tar https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.7_640855.tar +``` + +### 2. Prepare a directory + +Ensure you have a directory to store the snapshots. We will use the `$HOME/snapshots` directory: + +```bash +mkdir -p $HOME/snapshots +``` + +### 3. Extract the snapshot + +Extract the contents of the downloaded `.tar` file into the directory: + +```bash +tar -xvf juno_mainnet.tar -C $HOME/snapshots +``` + +### 4. Run Juno + +Run the Docker command to start Juno and provide the path to the snapshot using the `db-path` option: + +```bash +docker run -d \ + --name juno \ + -p 6060:6060 \ + -v $HOME/snapshots/juno_mainnet:/snapshots/juno_mainnet \ + nethermind/juno \ + --http \ + --http-port 6060 \ + --http-host 0.0.0.0 \ + --db-path /snapshots/juno_mainnet + --eth-node +``` + +:::info +Replace \ with the WebSocket endpoint of your Ethereum node. For Infura users, your address should be: `wss://mainnet.infura.io/ws/v3/your-infura-project-id`. Ensure you use the WebSocket URL (`ws`/`wss`) instead of the HTTP URL (`http`/`https`). +::: diff --git a/docs/versioned_docs/version-0.11.8/updating.md b/docs/versioned_docs/version-0.11.8/updating.md new file mode 100644 index 0000000000..54f449e351 --- /dev/null +++ b/docs/versioned_docs/version-0.11.8/updating.md @@ -0,0 +1,88 @@ +--- +title: Updating Juno +--- + +# Updating Juno :arrows_counterclockwise: + +It is important to run the latest version of Juno as each update brings new features, security patches, and improvements over previous versions. Follow these steps to update Juno: + +- [Docker container](#docker-container) +- [Standalone binary](#standalone-binary) +- [Updating from source](#updating-from-source) + +:::info +When running an updated node, use the same `db-path` as before to avoid restarting the sync and use the already synced database. +::: + +## Docker container + +### 1. Get the latest Docker image + +Download the latest Juno Docker image from the [nethermind/juno](https://hub.docker.com/r/nethermind/juno) repository: + +```bash +docker pull nethermind/juno:latest +``` + +### 2. Stop and remove the current Juno container + +Stop the currently running Juno container. If you're unsure of the container name, use `docker ps` to view all running containers: + +```bash +docker stop juno +``` + +Remove the old container to prevent any conflicts with the new version: + +```bash +docker rm juno +``` + +### 3. Start a new container with the updated image + +Run a new container using the updated Docker image: + +```bash +# Prepare the snapshots directory +mkdir -p $HOME/snapshots + +# Run the container +docker run -d \ + --name juno \ + -p 6060:6060 \ + -v $HOME/snapshots/juno_mainnet:/snapshots/juno_mainnet \ + nethermind/juno \ + --http \ + --http-port 6060 \ + --http-host 0.0.0.0 \ + --db-path /snapshots/juno_mainnet +``` + +Verify that the node is running correctly with the updated version: + +```bash +docker logs juno +``` + +## Standalone binary + +Download the latest binary from the [Juno GitHub Releases](https://github.com/NethermindEth/juno/releases/latest) page and replace the existing one. + +## Updating from source + +```bash +# Pull the latest updates to the codebase +git pull + +# Rebuild the binary +make juno + +# OR + +# Rebuild the Docker image +docker build -t nethermind/juno:latest . +``` + +:::tip +To learn how to configure Juno, check out the [Configuring Juno](configuring) guide. +::: diff --git a/docs/versioned_docs/version-0.11.8/websocket.md b/docs/versioned_docs/version-0.11.8/websocket.md new file mode 100644 index 0000000000..ba55e24db8 --- /dev/null +++ b/docs/versioned_docs/version-0.11.8/websocket.md @@ -0,0 +1,207 @@ +--- +title: WebSocket Interface +--- + +# WebSocket Interface :globe_with_meridians: + +Juno provides a WebSocket RPC interface that supports all of [Starknet's JSON-RPC API](https://playground.open-rpc.org/?uiSchema%5BappBar%5D%5Bui:splitView%5D=false&schemaUrl=https://raw.githubusercontent.com/starkware-libs/starknet-specs/v0.7.0/api/starknet_api_openrpc.json&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:darkMode%5D=true&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false) endpoints and allows you to [subscribe to newly created blocks](#subscribe-to-newly-created-blocks). + +## Enable the WebSocket server + +To enable the WebSocket RPC server, use the following configuration options: + +- `ws`: Enables the Websocket RPC server on the default port (disabled by default). +- `ws-host`: The interface on which the Websocket RPC server will listen for requests. If skipped, it defaults to `localhost`. +- `ws-port`: The port on which the WebSocket server will listen for requests. If skipped, it defaults to `6061`. + +```bash +# Docker container +docker run -d \ + --name juno \ + -p 6061:6061 \ + nethermind/juno \ + --ws \ + --ws-port 6061 \ + --ws-host 0.0.0.0 + +# Standalone binary +./build/juno --ws --ws-port 6061 --ws-host 0.0.0.0 +``` + +## Making WebSocket requests + +You can use any of [Starknet's Node API Endpoints](https://playground.open-rpc.org/?uiSchema%5BappBar%5D%5Bui:splitView%5D=false&schemaUrl=https://raw.githubusercontent.com/starkware-libs/starknet-specs/v0.7.0/api/starknet_api_openrpc.json&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:darkMode%5D=true&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false) with Juno. Check the availability of Juno with the `juno_version` method: + +```mdx-code-block +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +``` + + + + +```json +{ + "jsonrpc": "2.0", + "method": "juno_version", + "params": [], + "id": 1 +} +``` + + + + +```json +{ + "jsonrpc": "2.0", + "result": "v0.11.7", + "id": 1 +} +``` + + + + +Get the most recent accepted block hash and number with the `starknet_blockHashAndNumber` method: + + + + +```json +{ + "jsonrpc": "2.0", + "method": "starknet_blockHashAndNumber", + "params": [], + "id": 1 +} +``` + + + + +```json +{ + "jsonrpc": "2.0", + "result": { + "block_hash": "0x637ae4d7468bb603c2f16ba7f9118d58c7d7c98a8210260372e83e7c9df443a", + "block_number": 640827 + }, + "id": 1 +} +``` + + + + +## Subscribe to newly created blocks + +The WebSocket server provides a `juno_subscribeNewHeads` method that emits an event when new blocks are added to the blockchain: + + + + +```json +{ + "jsonrpc": "2.0", + "method": "juno_subscribeNewHeads", + "params": [], + "id": 1 +} +``` + + + + +```json +{ + "jsonrpc": "2.0", + "result": 16570962336122680234, + "id": 1 +} +``` + + + + +When a new block is added, you will receive a message like this: + +```json +{ + "jsonrpc": "2.0", + "method": "juno_subscribeNewHeads", + "params": { + "result": { + "block_hash": "0x840660a07a17ae6a55d39fb6d366698ecda11e02280ca3e9ca4b4f1bad741c", + "parent_hash": "0x529ca67a127e4f40f3ae637fc54c7a56c853b2e085011c64364911af74c9a5c", + "block_number": 65644, + "new_root": "0x4e88ddf34b52091611b34d72849e230d329902888eb57c8e3c1b9cc180a426c", + "timestamp": 1715451809, + "sequencer_address": "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "l1_gas_price": { + "price_in_fri": "0x3727bcc63f1", + "price_in_wei": "0x5f438c77" + }, + "l1_data_gas_price": { + "price_in_fri": "0x230e40e8866c6e", + "price_in_wei": "0x3c8c4a9ea51" + }, + "l1_da_mode": "BLOB", + "starknet_version": "0.13.1.1" + }, + "subscription": 16570962336122680234 + } +} +``` + +## Unsubscribe from newly created blocks + +Use the `juno_unsubscribe` method with the `result` value from the subscription response or the `subscription` field from any new block event to stop receiving updates for new blocks: + + + + +```json +{ + "jsonrpc": "2.0", + "method": "juno_unsubscribe", + "params": { + "id": 16570962336122680234 + }, + "id": 1 +} +``` + + + + +```json +{ + "jsonrpc": "2.0", + "result": true, + "id": 1 +} +``` + + + + +## Testing the WebSocket connection + +You can test your WebSocket connection using tools like [wscat](https://github.com/websockets/wscat) or [websocat](https://github.com/vi/websocat): + +```bash +# wscat +$ wscat -c ws://localhost:6061 + > {"jsonrpc": "2.0", "method": "juno_version", "id": 1} + < {"jsonrpc": "2.0", "result": "v0.11.7", "id": 1} + +# websocat +$ websocat -v ws://localhost:6061 + [INFO websocat::lints] Auto-inserting the line mode + [INFO websocat::stdio_threaded_peer] get_stdio_peer (threaded) + [INFO websocat::ws_client_peer] get_ws_client_peer + [INFO websocat::ws_client_peer] Connected to ws + {"jsonrpc": "2.0", "method": "juno_version", "id": 1} + {"jsonrpc": "2.0", "result": "v0.11.7", "id": 1} +``` diff --git a/docs/versioned_sidebars/version-0.11.8-sidebars.json b/docs/versioned_sidebars/version-0.11.8-sidebars.json new file mode 100644 index 0000000000..b94f40aeb7 --- /dev/null +++ b/docs/versioned_sidebars/version-0.11.8-sidebars.json @@ -0,0 +1,37 @@ +{ + "main": [ + "intro", + { + "type": "category", + "label": "Installation and Setup", + "collapsed": false, + "items": [ + "hardware-requirements", + "running-juno", + "configuring", + "running-on-gcp", + "updating" + ] + }, + { + "type": "category", + "label": "Interacting with Juno", + "collapsed": false, + "items": [ + "json-rpc", + "websocket", + { + "type": "html", + "value": "Starknet Node API Endpoints " + }, + { + "type": "html", + "value": "Starknet RPC Request Builder " + } + ] + }, + "monitoring", + "snapshots", + "faq" + ] +} diff --git a/docs/versions.json b/docs/versions.json index 3e3ad50db2..97a7109c43 100644 --- a/docs/versions.json +++ b/docs/versions.json @@ -1 +1,8 @@ -["0.11.0", "0.9.3", "0.8.0", "0.7.0", "0.6.3"] +[ + "0.11.8", + "0.11.0", + "0.9.3", + "0.8.0", + "0.7.0", + "0.6.3" +] From e8f8d3850fd323b6039608fdc51198e17362161b Mon Sep 17 00:00:00 2001 From: wojciechos Date: Tue, 4 Jun 2024 13:04:06 +0200 Subject: [PATCH 03/69] Skip declare cairo 0 test (#1892) --- .github/workflows/starknet-rs-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/starknet-rs-tests.yml b/.github/workflows/starknet-rs-tests.yml index 3c0b7e7141..91467d9a73 100644 --- a/.github/workflows/starknet-rs-tests.yml +++ b/.github/workflows/starknet-rs-tests.yml @@ -26,7 +26,7 @@ jobs: - name: Run jsonrpc tests run: | cd starknet-providers && cargo test jsonrpc - cd ../starknet-accounts && cargo test jsonrpc + cd ../starknet-accounts && cargo test jsonrpc -- --skip can_declare_cairo0_contract_with_jsonrpc env: STARKNET_RPC: ${{ secrets.STARKNET_RPC }} RUST_BACKTRACE: full \ No newline at end of file From 03c1985f533af2eceab01ca74eca31a144321329 Mon Sep 17 00:00:00 2001 From: wojciechos Date: Tue, 4 Jun 2024 19:31:43 +0200 Subject: [PATCH 04/69] Update trace fallback to v0.13.1 (#1890) --- rpc/trace.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/rpc/trace.go b/rpc/trace.go index e3dd09617a..7766cb7919 100644 --- a/rpc/trace.go +++ b/rpc/trace.go @@ -15,7 +15,9 @@ import ( "github.com/NethermindEth/juno/vm" ) -var traceFallbackVersion = semver.MustParse("0.12.3") +var traceFallbackVersion = semver.MustParse("0.13.1") + +const excludedVersion = "0.13.1.1" func adaptBlockTrace(block *BlockWithTxs, blockTrace *starknet.BlockTrace) ([]TracedBlockTransaction, error) { if blockTrace == nil { @@ -198,8 +200,9 @@ func (h *Handler) traceBlockTransactions(ctx context.Context, block *core.Block, if !isPending { if blockVer, err := core.ParseBlockVersion(block.ProtocolVersion); err != nil { return nil, ErrUnexpectedError.CloneWithData(err.Error()) - } else if blockVer.Compare(traceFallbackVersion) != 1 || h.forceFeederTracesForBlocks.Contains(block.Number) { - // version <= 0.12.3 or forcing fetch some blocks from feeder gateway + } else if (blockVer.Compare(traceFallbackVersion) != 1 && block.ProtocolVersion != excludedVersion) || + h.forceFeederTracesForBlocks.Contains(block.Number) { + // version <= 0.13.1 and not 0.13.1.1 or forcing fetch some blocks from feeder gateway return h.fetchTraces(ctx, block.Hash) } From 99afb512744c01ca606b3cb8471f3b666da74f8f Mon Sep 17 00:00:00 2001 From: Rian Hughes Date: Fri, 7 Jun 2024 14:29:07 +0300 Subject: [PATCH 05/69] Update GetProof and VerifyProof to use Keys (#1893) * Update proof logic to support inner nodes and keys --------- Co-authored-by: rian --- core/trie/key.go | 7 +- core/trie/proof.go | 23 +++-- core/trie/proof_test.go | 194 +++++++++++++++++++++++++++------------- 3 files changed, 148 insertions(+), 76 deletions(-) diff --git a/core/trie/key.go b/core/trie/key.go index dc946a5ef6..db60754fb7 100644 --- a/core/trie/key.go +++ b/core/trie/key.go @@ -3,6 +3,7 @@ package trie import ( "bytes" "encoding/hex" + "errors" "fmt" "math/big" @@ -23,9 +24,9 @@ func NewKey(length uint8, keyBytes []byte) Key { return k } -func (k *Key) SubKey(n uint8) *Key { +func (k *Key) SubKey(n uint8) (*Key, error) { if n > k.len { - panic("n is greater than the length of the key") + return nil, errors.New(fmt.Sprint("cannot subtract key of length %i from key of length %i", n, k.len)) } newKey := &Key{len: n} @@ -40,7 +41,7 @@ func (k *Key) SubKey(n uint8) *Key { } } - return newKey + return newKey, nil } func (k *Key) bytesNeeded() uint { diff --git a/core/trie/proof.go b/core/trie/proof.go index 57e6bdeac0..5da9fee7f8 100644 --- a/core/trie/proof.go +++ b/core/trie/proof.go @@ -113,9 +113,8 @@ func transformNode(tri *Trie, parentKey *Key, sNode storageNode) (*Edge, *Binary } // https://github.com/eqlabs/pathfinder/blob/main/crates/merkle-tree/src/tree.rs#L514 -func GetProof(leaf *felt.Felt, tri *Trie) ([]ProofNode, error) { - leafKey := tri.feltToKey(leaf) - nodesToLeaf, err := tri.nodesFromRoot(&leafKey) +func GetProof(key *Key, tri *Trie) ([]ProofNode, error) { + nodesFromRoot, err := tri.nodesFromRoot(key) if err != nil { return nil, err } @@ -123,8 +122,7 @@ func GetProof(leaf *felt.Felt, tri *Trie) ([]ProofNode, error) { var parentKey *Key - for i := 0; i < len(nodesToLeaf); i++ { - sNode := nodesToLeaf[i] + for i, sNode := range nodesFromRoot { sNodeEdge, sNodeBinary, err := transformNode(tri, parentKey, sNode) if err != nil { return nil, err @@ -140,7 +138,7 @@ func GetProof(leaf *felt.Felt, tri *Trie) ([]ProofNode, error) { } else if sNodeEdge == nil && sNodeBinary == nil { // sNode is a binary leaf break } - parentKey = nodesToLeaf[i].key + parentKey = nodesFromRoot[i].key } return proofNodes, nil } @@ -148,13 +146,8 @@ func GetProof(leaf *felt.Felt, tri *Trie) ([]ProofNode, error) { // verifyProof checks if `leafPath` leads from `root` to `leafHash` along the `proofNodes` // https://github.com/eqlabs/pathfinder/blob/main/crates/merkle-tree/src/tree.rs#L2006 func VerifyProof(root *felt.Felt, key *Key, value *felt.Felt, proofs []ProofNode, hash hashFunc) bool { - if key.Len() != 251 { //nolint:gomnd - return false - } - expectedHash := root remainingPath := key - for _, proofNode := range proofs { if !proofNode.Hash(hash).Equal(expectedHash) { return false @@ -168,11 +161,15 @@ func VerifyProof(root *felt.Felt, key *Key, value *felt.Felt, proofs []ProofNode } remainingPath.RemoveLastBit() case proofNode.Edge != nil: - if !proofNode.Edge.Path.Equal(remainingPath.SubKey(proofNode.Edge.Path.Len())) { + subKey, err := remainingPath.SubKey(proofNode.Edge.Path.Len()) + if err != nil { + return false + } + if !proofNode.Edge.Path.Equal(subKey) { return false } expectedHash = proofNode.Edge.Child - remainingPath.Truncate(proofNode.Edge.Path.Len()) + remainingPath.Truncate(251 - proofNode.Edge.Path.Len()) //nolint:gomnd } } return expectedHash.Equal(value) diff --git a/core/trie/proof_test.go b/core/trie/proof_test.go index 0ae9c78513..9356db86a4 100644 --- a/core/trie/proof_test.go +++ b/core/trie/proof_test.go @@ -72,7 +72,15 @@ func buildSimpleBinaryRootTrie(t *testing.T) *trie.Trie { return tempTrie } -func buildSimpleDoubleBinaryTrie(t *testing.T) *trie.Trie { +func buildSimpleDoubleBinaryTrie(t *testing.T) (*trie.Trie, []trie.ProofNode) { + // (249,0,x3) // Edge + // | + // (0, 0, x3) // Binary + // / \ + // (0,0,x1) // B (1, 1, 5) // Edge leaf + // / \ | + // (2) (3) (5) + // Build trie memdb := pebble.NewMemTest(t) txn, err := memdb.NewTransaction(true) @@ -99,10 +107,35 @@ func buildSimpleDoubleBinaryTrie(t *testing.T) *trie.Trie { require.NoError(t, err) require.NoError(t, tempTrie.Commit()) - return tempTrie + + zero := trie.NewKey(249, []byte{0}) + key3Bytes := new(felt.Felt).SetUint64(1).Bytes() + path3 := trie.NewKey(1, key3Bytes[:]) + expectedProofNodes := []trie.ProofNode{ + { + Edge: &trie.Edge{ + Path: &zero, + Child: utils.HexToFelt(t, "0x055C81F6A791FD06FC2E2CCAD922397EC76C3E35F2E06C0C0D43D551005A8DEA"), + }, + }, + { + Binary: &trie.Binary{ + LeftHash: utils.HexToFelt(t, "0x05774FA77B3D843AE9167ABD61CF80365A9B2B02218FC2F628494B5BDC9B33B8"), + RightHash: utils.HexToFelt(t, "0x07C5BC1CC68B7BC8CA2F632DE98297E6DA9594FA23EDE872DD2ABEAFDE353B43"), + }, + }, + { + Edge: &trie.Edge{ + Path: &path3, + Child: value3, + }, + }, + } + + return tempTrie, expectedProofNodes } -func TestGetProofs(t *testing.T) { +func TestGetProof(t *testing.T) { t.Run("Simple Trie - simple binary", func(t *testing.T) { tempTrie := buildSimpleTrie(t) @@ -121,8 +154,9 @@ func TestGetProofs(t *testing.T) { }, }, } - - proofNodes, err := trie.GetProof(new(felt.Felt).SetUint64(0), tempTrie) + leafFelt := new(felt.Felt).SetUint64(0).Bytes() + leafKey := trie.NewKey(251, leafFelt[:]) + proofNodes, err := trie.GetProof(&leafKey, tempTrie) require.NoError(t, err) // Better inspection @@ -133,31 +167,18 @@ func TestGetProofs(t *testing.T) { }) t.Run("Simple Trie - simple double binary", func(t *testing.T) { - tempTrie := buildSimpleDoubleBinaryTrie(t) + tempTrie, expectedProofNodes := buildSimpleDoubleBinaryTrie(t) - zero := trie.NewKey(249, []byte{0}) - expectedProofNodes := []trie.ProofNode{ - { - Edge: &trie.Edge{ - Path: &zero, - Child: utils.HexToFelt(t, "0x055C81F6A791FD06FC2E2CCAD922397EC76C3E35F2E06C0C0D43D551005A8DEA"), - }, - }, - { - Binary: &trie.Binary{ - LeftHash: utils.HexToFelt(t, "0x05774FA77B3D843AE9167ABD61CF80365A9B2B02218FC2F628494B5BDC9B33B8"), - RightHash: utils.HexToFelt(t, "0x07C5BC1CC68B7BC8CA2F632DE98297E6DA9594FA23EDE872DD2ABEAFDE353B43"), - }, - }, - { - Binary: &trie.Binary{ - LeftHash: utils.HexToFelt(t, "0x0000000000000000000000000000000000000000000000000000000000000002"), - RightHash: utils.HexToFelt(t, "0x0000000000000000000000000000000000000000000000000000000000000003"), - }, + expectedProofNodes[2] = trie.ProofNode{ + Binary: &trie.Binary{ + LeftHash: utils.HexToFelt(t, "0x0000000000000000000000000000000000000000000000000000000000000002"), + RightHash: utils.HexToFelt(t, "0x0000000000000000000000000000000000000000000000000000000000000003"), }, } - proofNodes, err := trie.GetProof(new(felt.Felt).SetUint64(0), tempTrie) + leafFelt := new(felt.Felt).SetUint64(0).Bytes() + leafKey := trie.NewKey(251, leafFelt[:]) + proofNodes, err := trie.GetProof(&leafKey, tempTrie) require.NoError(t, err) // Better inspection @@ -168,34 +189,10 @@ func TestGetProofs(t *testing.T) { }) t.Run("Simple Trie - simple double binary edge", func(t *testing.T) { - tempTrie := buildSimpleDoubleBinaryTrie(t) - - zero := trie.NewKey(249, []byte{0}) - value3 := new(felt.Felt).SetUint64(5) - key3Bytes := new(felt.Felt).SetUint64(1).Bytes() - path3 := trie.NewKey(1, key3Bytes[:]) - expectedProofNodes := []trie.ProofNode{ - { - Edge: &trie.Edge{ - Path: &zero, - Child: utils.HexToFelt(t, "0x055C81F6A791FD06FC2E2CCAD922397EC76C3E35F2E06C0C0D43D551005A8DEA"), - }, - }, - { - Binary: &trie.Binary{ - LeftHash: utils.HexToFelt(t, "0x05774FA77B3D843AE9167ABD61CF80365A9B2B02218FC2F628494B5BDC9B33B8"), - RightHash: utils.HexToFelt(t, "0x07C5BC1CC68B7BC8CA2F632DE98297E6DA9594FA23EDE872DD2ABEAFDE353B43"), - }, - }, - { - Edge: &trie.Edge{ - Path: &path3, - Child: value3, - }, - }, - } - - proofNodes, err := trie.GetProof(new(felt.Felt).SetUint64(3), tempTrie) + tempTrie, expectedProofNodes := buildSimpleDoubleBinaryTrie(t) + leafFelt := new(felt.Felt).SetUint64(3).Bytes() + leafKey := trie.NewKey(251, leafFelt[:]) + proofNodes, err := trie.GetProof(&leafKey, tempTrie) require.NoError(t, err) // Better inspection @@ -224,8 +221,10 @@ func TestGetProofs(t *testing.T) { }, }, } + leafFelt := new(felt.Felt).SetUint64(0).Bytes() + leafKey := trie.NewKey(251, leafFelt[:]) - proofNodes, err := trie.GetProof(new(felt.Felt).SetUint64(0), tempTrie) + proofNodes, err := trie.GetProof(&leafKey, tempTrie) require.NoError(t, err) // Better inspection @@ -267,8 +266,9 @@ func TestGetProofs(t *testing.T) { }, }, } - - proofNodes, err := trie.GetProof(new(felt.Felt).SetUint64(0), tempTrie) + leafFelt := new(felt.Felt).SetUint64(0).Bytes() + leafKey := trie.NewKey(251, leafFelt[:]) + proofNodes, err := trie.GetProof(&leafKey, tempTrie) require.NoError(t, err) // Better inspection @@ -278,9 +278,54 @@ func TestGetProofs(t *testing.T) { } require.Equal(t, expectedProofNodes, proofNodes) }) + + t.Run("Simple Trie - proof for non-set key", func(t *testing.T) { + tempTrie, expectedProofNodes := buildSimpleDoubleBinaryTrie(t) + + leafFelt := new(felt.Felt).SetUint64(123).Bytes() // The (root) edge node would have a shorter len if this key was set + leafKey := trie.NewKey(251, leafFelt[:]) + proofNodes, err := trie.GetProof(&leafKey, tempTrie) + require.NoError(t, err) + + // Better inspection + for _, pNode := range proofNodes { + pNode.PrettyPrint() + } + require.Equal(t, expectedProofNodes[0:2], proofNodes) + }) + + t.Run("Simple Trie - proof for inner key", func(t *testing.T) { + tempTrie, expectedProofNodes := buildSimpleDoubleBinaryTrie(t) + + innerFelt := new(felt.Felt).SetUint64(2).Bytes() + innerKey := trie.NewKey(123, innerFelt[:]) // The (root) edge node has len 249 which shows this doesn't exist + proofNodes, err := trie.GetProof(&innerKey, tempTrie) + require.NoError(t, err) + + // Better inspection + for _, pNode := range proofNodes { + pNode.PrettyPrint() + } + require.Equal(t, expectedProofNodes[0:2], proofNodes) + }) + + t.Run("Simple Trie - proof for non-set key, with leafs set to right and left", func(t *testing.T) { + tempTrie, expectedProofNodes := buildSimpleDoubleBinaryTrie(t) + + leafFelt := new(felt.Felt).SetUint64(2).Bytes() + leafKey := trie.NewKey(251, leafFelt[:]) + proofNodes, err := trie.GetProof(&leafKey, tempTrie) + require.NoError(t, err) + + // Better inspection + for _, pNode := range proofNodes { + pNode.PrettyPrint() + } + require.Equal(t, expectedProofNodes, proofNodes) + }) } -func TestVerifyProofs(t *testing.T) { +func TestVerifyProof(t *testing.T) { // https://github.com/eqlabs/pathfinder/blob/main/crates/merkle-tree/src/tree.rs#L2137 t.Run("Simple binary trie", func(t *testing.T) { tempTrie := buildSimpleTrie(t) @@ -310,7 +355,7 @@ func TestVerifyProofs(t *testing.T) { // https://github.com/eqlabs/pathfinder/blob/main/crates/merkle-tree/src/tree.rs#L2167 t.Run("Simple double binary trie", func(t *testing.T) { - tempTrie := buildSimpleDoubleBinaryTrie(t) + tempTrie, _ := buildSimpleDoubleBinaryTrie(t) zero := trie.NewKey(249, []byte{0}) expectedProofNodes := []trie.ProofNode{ { @@ -338,6 +383,35 @@ func TestVerifyProofs(t *testing.T) { key1Bytes := new(felt.Felt).SetUint64(0).Bytes() key1 := trie.NewKey(251, key1Bytes[:]) val1 := new(felt.Felt).SetUint64(2) - assert.True(t, trie.VerifyProof(root, &key1, val1, expectedProofNodes, crypto.Pedersen)) + require.True(t, trie.VerifyProof(root, &key1, val1, expectedProofNodes, crypto.Pedersen)) + }) + + t.Run("non existent key - less than root edge", func(t *testing.T) { + tempTrie, _ := buildSimpleDoubleBinaryTrie(t) + + nonExistentKey := trie.NewKey(123, []byte{0}) // Diverges before the root node (len root node = 249) + nonExistentKeyValue := new(felt.Felt).SetUint64(2) + proofNodes, err := trie.GetProof(&nonExistentKey, tempTrie) + require.NoError(t, err) + + root, err := tempTrie.Root() + require.NoError(t, err) + + require.False(t, trie.VerifyProof(root, &nonExistentKey, nonExistentKeyValue, proofNodes, crypto.Pedersen)) + }) + + t.Run("non existent leaf key", func(t *testing.T) { + tempTrie, _ := buildSimpleDoubleBinaryTrie(t) + + nonExistentKeyByte := new(felt.Felt).SetUint64(2).Bytes() // Key not set + nonExistentKey := trie.NewKey(251, nonExistentKeyByte[:]) + nonExistentKeyValue := new(felt.Felt).SetUint64(2) + proofNodes, err := trie.GetProof(&nonExistentKey, tempTrie) + require.NoError(t, err) + + root, err := tempTrie.Root() + require.NoError(t, err) + + require.False(t, trie.VerifyProof(root, &nonExistentKey, nonExistentKeyValue, proofNodes, crypto.Pedersen)) }) } From 52a8ea95caebb59641c94309cd1b828e198b759a Mon Sep 17 00:00:00 2001 From: Rian Hughes Date: Fri, 7 Jun 2024 16:58:23 +0300 Subject: [PATCH 06/69] make hadesPermutation public (#1897) Co-authored-by: rian --- core/crypto/poseidon_hash.go | 12 ++++++------ core/crypto/poseidon_hash_pkg_test.go | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core/crypto/poseidon_hash.go b/core/crypto/poseidon_hash.go index 4290bf2105..623f108d35 100644 --- a/core/crypto/poseidon_hash.go +++ b/core/crypto/poseidon_hash.go @@ -42,7 +42,7 @@ func round(state []felt.Felt, full bool, index int) { mixLayer(state) } -func hadesPermutation(state []felt.Felt) { +func HadesPermutation(state []felt.Felt) { initialiseRoundKeys.Do(setRoundKeys) totalRounds := fullRounds + partialRounds for i := 0; i < totalRounds; i++ { @@ -58,7 +58,7 @@ var two = new(felt.Felt).SetUint64(2) // [Poseidon hash]: https://docs.starknet.io/documentation/architecture_and_concepts/Hashing/hash-functions/#poseidon_hash func Poseidon(x, y *felt.Felt) *felt.Felt { state := []felt.Felt{*x, *y, *two} - hadesPermutation(state) + HadesPermutation(state) return new(felt.Felt).Set(&state[0]) } @@ -77,7 +77,7 @@ func PoseidonArray(elems ...*felt.Felt) *felt.Felt { for i := 0; i < len(elems)/2; i++ { state[0].Add(&state[0], elems[2*i]) state[1].Add(&state[1], elems[2*i+1]) - hadesPermutation(state) + HadesPermutation(state) } rem := len(elems) % 2 @@ -85,7 +85,7 @@ func PoseidonArray(elems ...*felt.Felt) *felt.Felt { state[0].Add(&state[0], elems[len(elems)-1]) } state[rem].Add(&state[rem], one) - hadesPermutation(state) + HadesPermutation(state) return new(felt.Felt).Set(&state[0]) } @@ -127,7 +127,7 @@ func (d *PoseidonDigest) Update(elems ...*felt.Felt) Digest { } else { d.state[0].Add(&d.state[0], d.lastElem) d.state[1].Add(&d.state[1], elems[idx]) - hadesPermutation(d.state[:]) + HadesPermutation(d.state[:]) d.lastElem = nil } } @@ -141,7 +141,7 @@ func (d *PoseidonDigest) Finish() *felt.Felt { d.state[0].Add(&d.state[0], d.lastElem) d.state[1].Add(&d.state[1], one) } - hadesPermutation(d.state[:]) + HadesPermutation(d.state[:]) return &d.state[0] } diff --git a/core/crypto/poseidon_hash_pkg_test.go b/core/crypto/poseidon_hash_pkg_test.go index a668af4aad..06484364b2 100644 --- a/core/crypto/poseidon_hash_pkg_test.go +++ b/core/crypto/poseidon_hash_pkg_test.go @@ -10,7 +10,7 @@ import ( // Test vector from https://github.com/starkware-industries/poseidon func TestPermutate(t *testing.T) { state := []felt.Felt{{}, {}, {}} - hadesPermutation(state) + HadesPermutation(state) assert.Equal(t, "3446325744004048536138401612021367625846492093718951375866996507163446763827", state[0].Text(10)) assert.Equal(t, "1590252087433376791875644726012779423683501236913937337746052470473806035332", state[1].Text(10)) assert.Equal(t, "867921192302518434283879514999422690776342565400001269945778456016268852423", state[2].Text(10)) From 4e6dcd72fcb379f13b425a7a6b4e5120616e7f32 Mon Sep 17 00:00:00 2001 From: LordGhostX <47832826+LordGhostX@users.noreply.github.com> Date: Tue, 11 Jun 2024 15:48:49 +0100 Subject: [PATCH 07/69] update rpc request builder URL (#1896) --- docs/docs/running-juno.md | 2 +- docs/sidebars.js | 2 +- docs/versioned_docs/version-0.11.8/running-juno.md | 2 +- docs/versioned_sidebars/version-0.11.8-sidebars.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/docs/running-juno.md b/docs/docs/running-juno.md index 12ceea8833..4f7208cd8c 100644 --- a/docs/docs/running-juno.md +++ b/docs/docs/running-juno.md @@ -12,7 +12,7 @@ You can run a Juno node using several methods: - [Google Cloud Platform (GCP)](running-on-gcp) :::tip -You can use a snapshot for quickly synchronise your node with the network. Check out the [Database Snapshots](snapshots) guide to get started. +You can use a snapshot to quickly synchronise your node with the network. Check out the [Database Snapshots](snapshots) guide to get started. ::: ## Docker container diff --git a/docs/sidebars.js b/docs/sidebars.js index 2e2147c0dc..10125a3020 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -31,7 +31,7 @@ const sidebars = { { type: "html", value: - 'Starknet RPC Request Builder ', + 'Starknet RPC Request Builder ', }, ], }, diff --git a/docs/versioned_docs/version-0.11.8/running-juno.md b/docs/versioned_docs/version-0.11.8/running-juno.md index 12ceea8833..4f7208cd8c 100644 --- a/docs/versioned_docs/version-0.11.8/running-juno.md +++ b/docs/versioned_docs/version-0.11.8/running-juno.md @@ -12,7 +12,7 @@ You can run a Juno node using several methods: - [Google Cloud Platform (GCP)](running-on-gcp) :::tip -You can use a snapshot for quickly synchronise your node with the network. Check out the [Database Snapshots](snapshots) guide to get started. +You can use a snapshot to quickly synchronise your node with the network. Check out the [Database Snapshots](snapshots) guide to get started. ::: ## Docker container diff --git a/docs/versioned_sidebars/version-0.11.8-sidebars.json b/docs/versioned_sidebars/version-0.11.8-sidebars.json index b94f40aeb7..0a503e19ed 100644 --- a/docs/versioned_sidebars/version-0.11.8-sidebars.json +++ b/docs/versioned_sidebars/version-0.11.8-sidebars.json @@ -26,7 +26,7 @@ }, { "type": "html", - "value": "Starknet RPC Request Builder " + "value": "Starknet RPC Request Builder " } ] }, From d9e64106a3a6d81d217d3c8baf28749f4f0bdd71 Mon Sep 17 00:00:00 2001 From: wojciechos Date: Mon, 24 Jun 2024 11:32:41 +0200 Subject: [PATCH 08/69] Replace dispatch token witn app one in pipelines (#1916) --- .../sync_first_100_blocks_smoke_test.yml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/.github/workflows/sync_first_100_blocks_smoke_test.yml b/.github/workflows/sync_first_100_blocks_smoke_test.yml index 4f1f29b59b..7e603043c3 100644 --- a/.github/workflows/sync_first_100_blocks_smoke_test.yml +++ b/.github/workflows/sync_first_100_blocks_smoke_test.yml @@ -13,6 +13,15 @@ jobs: runs-on: ubuntu-latest if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository steps: + - name: Generate a token + id: generate-token + uses: actions/create-github-app-token@v1 + with: + app-id: ${{ vars.APP_ID }} + private-key: ${{ secrets.APP_PRIVATE_KEY }} + owner: ${{ github.repository_owner }} + repositories: "juno,juno-smoke-tests" + - name: Checkout code uses: actions/checkout@v3 @@ -27,12 +36,12 @@ jobs: - name: Build docker image run: docker build --build-arg VM_DEBUG=true -t nethermindeth/juno . - + - name: Checkout Juno Smoke Tests - uses: actions/checkout@v3.5.2 + uses: actions/checkout@v4.1.7 with: repository: NethermindEth/juno-smoke-tests - token: ${{ secrets.REPOSITORY_DISPATCH_TOKEN }} + token: ${{ steps.generate-token.outputs.token }} - name: Run smoke tests run: | From d3c4dd06793ec3248538cca9adc919360c9e007d Mon Sep 17 00:00:00 2001 From: wojciechos Date: Tue, 25 Jun 2024 12:56:20 +0200 Subject: [PATCH 09/69] Remove ForceFetchingTracesForBlocks feature (#1910) --- node/node.go | 2 +- rpc/block_test.go | 20 ++++++++++---------- rpc/chain_test.go | 2 +- rpc/class_test.go | 11 +++++------ rpc/contract_test.go | 6 ++---- rpc/estimate_fee_test.go | 4 ++-- rpc/events_test.go | 6 +++--- rpc/handlers.go | 14 +++++--------- rpc/handlers_test.go | 6 +++--- rpc/simulation_test.go | 2 +- rpc/state_update_test.go | 4 ++-- rpc/sync_test.go | 4 +--- rpc/trace.go | 5 ++--- rpc/trace_test.go | 12 ++++++------ rpc/transaction_test.go | 21 ++++++++++----------- utils/network.go | 31 ------------------------------- 16 files changed, 54 insertions(+), 96 deletions(-) diff --git a/node/node.go b/node/node.go index de880617cf..98b63750bb 100644 --- a/node/node.go +++ b/node/node.go @@ -174,7 +174,7 @@ func New(cfg *Config, version string) (*Node, error) { //nolint:gocyclo,funlen syncReader = synchronizer } - rpcHandler := rpc.New(chain, syncReader, throttledVM, version, &cfg.Network, log).WithGateway(gatewayClient).WithFeeder(client) + rpcHandler := rpc.New(chain, syncReader, throttledVM, version, log).WithGateway(gatewayClient).WithFeeder(client) rpcHandler = rpcHandler.WithFilterLimit(cfg.RPCMaxBlockScan).WithCallMaxSteps(uint64(cfg.RPCCallMaxSteps)) services = append(services, rpcHandler) // to improve RPC throughput we double GOMAXPROCS diff --git a/rpc/block_test.go b/rpc/block_test.go index 76af9079c6..f778ac7350 100644 --- a/rpc/block_test.go +++ b/rpc/block_test.go @@ -95,7 +95,7 @@ func TestBlockNumber(t *testing.T) { t.Cleanup(mockCtrl.Finish) mockReader := mocks.NewMockReader(mockCtrl) - handler := rpc.New(mockReader, nil, nil, "", utils.Ptr(utils.Mainnet), nil) + handler := rpc.New(mockReader, nil, nil, "", nil) t.Run("empty blockchain", func(t *testing.T) { expectedHeight := uint64(0) @@ -122,7 +122,7 @@ func TestBlockHashAndNumber(t *testing.T) { n := utils.Ptr(utils.Mainnet) mockReader := mocks.NewMockReader(mockCtrl) - handler := rpc.New(mockReader, nil, nil, "", n, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) t.Run("empty blockchain", func(t *testing.T) { mockReader.EXPECT().Head().Return(nil, errors.New("empty blockchain")) @@ -155,7 +155,7 @@ func TestBlockTransactionCount(t *testing.T) { n := utils.Ptr(utils.Sepolia) mockReader := mocks.NewMockReader(mockCtrl) - handler := rpc.New(mockReader, nil, nil, "", n, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) client := feeder.NewTestClient(t, n) gw := adaptfeeder.New(client) @@ -240,7 +240,7 @@ func TestBlockWithTxHashes(t *testing.T) { log := utils.NewNopZapLogger() n := utils.Ptr(utils.Mainnet) chain := blockchain.New(pebble.NewMemTest(t), n) - handler := rpc.New(chain, nil, nil, "", n, log) + handler := rpc.New(chain, nil, nil, "", log) block, rpcErr := handler.BlockWithTxHashes(id) assert.Nil(t, block) @@ -253,7 +253,7 @@ func TestBlockWithTxHashes(t *testing.T) { n := utils.Ptr(utils.Sepolia) mockReader := mocks.NewMockReader(mockCtrl) - handler := rpc.New(mockReader, nil, nil, "", n, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) client := feeder.NewTestClient(t, n) gw := adaptfeeder.New(client) @@ -359,7 +359,7 @@ func TestBlockWithTxs(t *testing.T) { log := utils.NewNopZapLogger() n := utils.Ptr(utils.Mainnet) chain := blockchain.New(pebble.NewMemTest(t), n) - handler := rpc.New(chain, nil, nil, "", n, log) + handler := rpc.New(chain, nil, nil, "", log) block, rpcErr := handler.BlockWithTxs(id) assert.Nil(t, block) @@ -372,7 +372,7 @@ func TestBlockWithTxs(t *testing.T) { n := utils.Ptr(utils.Mainnet) mockReader := mocks.NewMockReader(mockCtrl) - handler := rpc.New(mockReader, nil, nil, "", n, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) client := feeder.NewTestClient(t, n) gw := adaptfeeder.New(client) @@ -492,7 +492,7 @@ func TestBlockWithTxHashesV013(t *testing.T) { mockCtrl := gomock.NewController(t) t.Cleanup(mockCtrl.Finish) mockReader := mocks.NewMockReader(mockCtrl) - handler := rpc.New(mockReader, nil, nil, "", n, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) blockNumber := uint64(16350) gw := adaptfeeder.New(feeder.NewTestClient(t, n)) @@ -560,7 +560,7 @@ func TestBlockWithReceipts(t *testing.T) { n := utils.Ptr(utils.Mainnet) mockReader := mocks.NewMockReader(mockCtrl) - handler := rpc.New(mockReader, nil, nil, "", n, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) t.Run("transaction not found", func(t *testing.T) { blockID := rpc.BlockID{Number: 777} @@ -680,7 +680,7 @@ func TestRpcBlockAdaptation(t *testing.T) { n := utils.Ptr(utils.Sepolia) mockReader := mocks.NewMockReader(mockCtrl) - handler := rpc.New(mockReader, nil, nil, "", n, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) client := feeder.NewTestClient(t, n) gw := adaptfeeder.New(client) diff --git a/rpc/chain_test.go b/rpc/chain_test.go index 412b3159e6..d2506d28ba 100644 --- a/rpc/chain_test.go +++ b/rpc/chain_test.go @@ -21,7 +21,7 @@ func TestChainId(t *testing.T) { mockReader := mocks.NewMockReader(mockCtrl) mockReader.EXPECT().Network().Return(n) - handler := rpc.New(mockReader, nil, nil, "", n, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) cID, err := handler.ChainID() require.Nil(t, err) diff --git a/rpc/class_test.go b/rpc/class_test.go index fc7191110c..44d48c81d1 100644 --- a/rpc/class_test.go +++ b/rpc/class_test.go @@ -37,7 +37,7 @@ func TestClass(t *testing.T) { return nil }, nil).AnyTimes() mockReader.EXPECT().HeadsHeader().Return(new(core.Header), nil).AnyTimes() - handler := rpc.New(mockReader, nil, nil, "", n, utils.NewNopZapLogger()) + handler := rpc.New(mockReader, nil, nil, "", utils.NewNopZapLogger()) latest := rpc.BlockID{Latest: true} @@ -68,7 +68,7 @@ func TestClass(t *testing.T) { t.Run("state by id error", func(t *testing.T) { mockReader := mocks.NewMockReader(mockCtrl) - handler := rpc.New(mockReader, nil, nil, "", n, utils.NewNopZapLogger()) + handler := rpc.New(mockReader, nil, nil, "", utils.NewNopZapLogger()) mockReader.EXPECT().HeadState().Return(nil, nil, db.ErrKeyNotFound) @@ -80,7 +80,7 @@ func TestClass(t *testing.T) { t.Run("class hash not found error", func(t *testing.T) { mockReader := mocks.NewMockReader(mockCtrl) mockState := mocks.NewMockStateHistoryReader(mockCtrl) - handler := rpc.New(mockReader, nil, nil, "", n, utils.NewNopZapLogger()) + handler := rpc.New(mockReader, nil, nil, "", utils.NewNopZapLogger()) mockReader.EXPECT().HeadState().Return(mockState, func() error { return nil @@ -120,7 +120,7 @@ func TestClassAt(t *testing.T) { return nil }, nil).AnyTimes() mockReader.EXPECT().HeadsHeader().Return(new(core.Header), nil).AnyTimes() - handler := rpc.New(mockReader, nil, nil, "", n, utils.NewNopZapLogger()) + handler := rpc.New(mockReader, nil, nil, "", utils.NewNopZapLogger()) latest := rpc.BlockID{Latest: true} @@ -150,10 +150,9 @@ func TestClassHashAt(t *testing.T) { mockCtrl := gomock.NewController(t) t.Cleanup(mockCtrl.Finish) - n := utils.Ptr(utils.Mainnet) mockReader := mocks.NewMockReader(mockCtrl) log := utils.NewNopZapLogger() - handler := rpc.New(mockReader, nil, nil, "", n, log) + handler := rpc.New(mockReader, nil, nil, "", log) t.Run("empty blockchain", func(t *testing.T) { mockReader.EXPECT().HeadState().Return(nil, nil, db.ErrKeyNotFound) diff --git a/rpc/contract_test.go b/rpc/contract_test.go index b1b12d974b..8f9e100aa3 100644 --- a/rpc/contract_test.go +++ b/rpc/contract_test.go @@ -18,10 +18,9 @@ func TestNonce(t *testing.T) { mockCtrl := gomock.NewController(t) t.Cleanup(mockCtrl.Finish) - n := utils.Ptr(utils.Mainnet) mockReader := mocks.NewMockReader(mockCtrl) log := utils.NewNopZapLogger() - handler := rpc.New(mockReader, nil, nil, "", n, log) + handler := rpc.New(mockReader, nil, nil, "", log) t.Run("empty blockchain", func(t *testing.T) { mockReader.EXPECT().HeadState().Return(nil, nil, db.ErrKeyNotFound) @@ -92,10 +91,9 @@ func TestStorageAt(t *testing.T) { mockCtrl := gomock.NewController(t) t.Cleanup(mockCtrl.Finish) - n := utils.Ptr(utils.Mainnet) mockReader := mocks.NewMockReader(mockCtrl) log := utils.NewNopZapLogger() - handler := rpc.New(mockReader, nil, nil, "", n, log) + handler := rpc.New(mockReader, nil, nil, "", log) t.Run("empty blockchain", func(t *testing.T) { mockReader.EXPECT().HeadState().Return(nil, nil, db.ErrKeyNotFound) diff --git a/rpc/estimate_fee_test.go b/rpc/estimate_fee_test.go index d3f98eb063..da3703e977 100644 --- a/rpc/estimate_fee_test.go +++ b/rpc/estimate_fee_test.go @@ -28,7 +28,7 @@ func TestEstimateMessageFee(t *testing.T) { mockReader.EXPECT().Network().Return(n).AnyTimes() mockVM := mocks.NewMockVM(mockCtrl) - handler := rpc.New(mockReader, nil, mockVM, "", n, utils.NewNopZapLogger()) + handler := rpc.New(mockReader, nil, mockVM, "", utils.NewNopZapLogger()) msg := rpc.MsgFromL1{ From: common.HexToAddress("0xDEADBEEF"), To: *new(felt.Felt).SetUint64(1337), @@ -102,7 +102,7 @@ func TestEstimateFee(t *testing.T) { mockReader.EXPECT().Network().Return(n).AnyTimes() mockVM := mocks.NewMockVM(mockCtrl) log := utils.NewNopZapLogger() - handler := rpc.New(mockReader, nil, mockVM, "", n, log) + handler := rpc.New(mockReader, nil, mockVM, "", log) mockState := mocks.NewMockStateHistoryReader(mockCtrl) mockReader.EXPECT().HeadState().Return(mockState, nopCloser, nil).AnyTimes() diff --git a/rpc/events_test.go b/rpc/events_test.go index 14abda0d27..3db08d233e 100644 --- a/rpc/events_test.go +++ b/rpc/events_test.go @@ -50,7 +50,7 @@ func TestEvents(t *testing.T) { } } - handler := rpc.New(chain, nil, nil, "", n, utils.NewNopZapLogger()) + handler := rpc.New(chain, nil, nil, "", utils.NewNopZapLogger()) from := utils.HexToFelt(t, "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7") args := rpc.EventsArg{ EventFilter: rpc.EventFilter{ @@ -240,7 +240,7 @@ func TestSubscribeNewHeadsAndUnsubscribe(t *testing.T) { t.Cleanup(cancel) chain := blockchain.New(pebble.NewMemTest(t), n) syncer := sync.New(chain, gw, log, 0, false) - handler := rpc.New(chain, syncer, nil, "", n, log) + handler := rpc.New(chain, syncer, nil, "", log) go func() { require.NoError(t, handler.Run(ctx)) @@ -322,7 +322,7 @@ func TestMultipleSubscribeNewHeadsAndUnsubscribe(t *testing.T) { t.Cleanup(cancel) chain := blockchain.New(pebble.NewMemTest(t), n) syncer := sync.New(chain, gw, log, 0, false) - handler := rpc.New(chain, syncer, nil, "", n, log) + handler := rpc.New(chain, syncer, nil, "", log) go func() { require.NoError(t, handler.Run(ctx)) }() diff --git a/rpc/handlers.go b/rpc/handlers.go index fd300f841b..cfaf1f37a1 100644 --- a/rpc/handlers.go +++ b/rpc/handlers.go @@ -18,7 +18,6 @@ import ( "github.com/NethermindEth/juno/utils" "github.com/NethermindEth/juno/vm" "github.com/ethereum/go-ethereum/common/lru" - "github.com/hashicorp/go-set/v2" "github.com/sourcegraph/conc" ) @@ -81,9 +80,7 @@ type Handler struct { vm vm.VM log utils.Logger - version string - forceFeederTracesForBlocks *set.Set[uint64] - + version string newHeads *feed.Feed[*core.Header] idgen func() uint64 @@ -102,7 +99,7 @@ type subscription struct { conn jsonrpc.Conn } -func New(bcReader blockchain.Reader, syncReader sync.Reader, virtualMachine vm.VM, version string, network *utils.Network, +func New(bcReader blockchain.Reader, syncReader sync.Reader, virtualMachine vm.VM, version string, logger utils.Logger, ) *Handler { return &Handler{ @@ -116,10 +113,9 @@ func New(bcReader blockchain.Reader, syncReader sync.Reader, virtualMachine vm.V } return n }, - version: version, - forceFeederTracesForBlocks: set.From(network.BlockHashMetaInfo.ForceFetchingTracesForBlocks), - newHeads: feed.New[*core.Header](), - subscriptions: make(map[uint64]*subscription), + version: version, + newHeads: feed.New[*core.Header](), + subscriptions: make(map[uint64]*subscription), blockTraceCache: lru.NewCache[traceCacheKey, []TracedBlockTransaction](traceCacheSize), filterLimit: math.MaxUint, diff --git a/rpc/handlers_test.go b/rpc/handlers_test.go index 32248ef974..48374d20d8 100644 --- a/rpc/handlers_test.go +++ b/rpc/handlers_test.go @@ -20,14 +20,14 @@ func nopCloser() error { return nil } func TestVersion(t *testing.T) { const version = "1.2.3-rc1" - handler := rpc.New(nil, nil, nil, version, utils.Ptr(utils.Mainnet), nil) + handler := rpc.New(nil, nil, nil, version, nil) ver, err := handler.Version() require.Nil(t, err) assert.Equal(t, version, ver) } func TestSpecVersion(t *testing.T) { - handler := rpc.New(nil, nil, nil, "", utils.Ptr(utils.Mainnet), nil) + handler := rpc.New(nil, nil, nil, "", nil) version, rpcErr := handler.SpecVersion() require.Nil(t, rpcErr) require.Equal(t, "0.7.1", version) @@ -45,7 +45,7 @@ func TestThrottledVMError(t *testing.T) { mockVM := mocks.NewMockVM(mockCtrl) throttledVM := node.NewThrottledVM(mockVM, 0, 0) - handler := rpc.New(mockReader, nil, throttledVM, "", utils.Ptr(utils.Mainnet), nil) + handler := rpc.New(mockReader, nil, throttledVM, "", nil) mockState := mocks.NewMockStateHistoryReader(mockCtrl) throttledErr := "VM throughput limit reached" diff --git a/rpc/simulation_test.go b/rpc/simulation_test.go index 538f271988..135d8c879d 100644 --- a/rpc/simulation_test.go +++ b/rpc/simulation_test.go @@ -24,7 +24,7 @@ func TestSimulateTransactions(t *testing.T) { mockReader := mocks.NewMockReader(mockCtrl) mockReader.EXPECT().Network().Return(n).AnyTimes() mockVM := mocks.NewMockVM(mockCtrl) - handler := rpc.New(mockReader, nil, mockVM, "", n, utils.NewNopZapLogger()) + handler := rpc.New(mockReader, nil, mockVM, "", utils.NewNopZapLogger()) mockState := mocks.NewMockStateHistoryReader(mockCtrl) mockReader.EXPECT().HeadState().Return(mockState, nopCloser, nil).AnyTimes() diff --git a/rpc/state_update_test.go b/rpc/state_update_test.go index feb9888c06..94ca90e84d 100644 --- a/rpc/state_update_test.go +++ b/rpc/state_update_test.go @@ -30,7 +30,7 @@ func TestStateUpdate(t *testing.T) { for description, id := range errTests { t.Run(description, func(t *testing.T) { chain := blockchain.New(pebble.NewMemTest(t), n) - handler := rpc.New(chain, nil, nil, "", n, nil) + handler := rpc.New(chain, nil, nil, "", nil) update, rpcErr := handler.StateUpdate(id) assert.Nil(t, update) @@ -40,7 +40,7 @@ func TestStateUpdate(t *testing.T) { mockCtrl := gomock.NewController(t) mockReader := mocks.NewMockReader(mockCtrl) - handler := rpc.New(mockReader, nil, nil, "", n, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) client := feeder.NewTestClient(t, n) mainnetGw := adaptfeeder.New(client) diff --git a/rpc/sync_test.go b/rpc/sync_test.go index 493cf47458..555aa07382 100644 --- a/rpc/sync_test.go +++ b/rpc/sync_test.go @@ -8,7 +8,6 @@ import ( "github.com/NethermindEth/juno/core/felt" "github.com/NethermindEth/juno/mocks" "github.com/NethermindEth/juno/rpc" - "github.com/NethermindEth/juno/utils" "github.com/stretchr/testify/assert" "go.uber.org/mock/gomock" ) @@ -17,10 +16,9 @@ func TestSyncing(t *testing.T) { mockCtrl := gomock.NewController(t) t.Cleanup(mockCtrl.Finish) - n := utils.Ptr(utils.Mainnet) synchronizer := mocks.NewMockSyncReader(mockCtrl) mockReader := mocks.NewMockReader(mockCtrl) - handler := rpc.New(mockReader, synchronizer, nil, "", n, nil) + handler := rpc.New(mockReader, synchronizer, nil, "", nil) defaultSyncState := false startingBlock := uint64(0) diff --git a/rpc/trace.go b/rpc/trace.go index 7766cb7919..ea14ae1524 100644 --- a/rpc/trace.go +++ b/rpc/trace.go @@ -200,9 +200,8 @@ func (h *Handler) traceBlockTransactions(ctx context.Context, block *core.Block, if !isPending { if blockVer, err := core.ParseBlockVersion(block.ProtocolVersion); err != nil { return nil, ErrUnexpectedError.CloneWithData(err.Error()) - } else if (blockVer.Compare(traceFallbackVersion) != 1 && block.ProtocolVersion != excludedVersion) || - h.forceFeederTracesForBlocks.Contains(block.Number) { - // version <= 0.13.1 and not 0.13.1.1 or forcing fetch some blocks from feeder gateway + } else if blockVer.Compare(traceFallbackVersion) != 1 && block.ProtocolVersion != excludedVersion { + // version <= 0.13.1 and not 0.13.1.1 fetch blocks from feeder gateway return h.fetchTraces(ctx, block.Hash) } diff --git a/rpc/trace_test.go b/rpc/trace_test.go index 289b32d517..b575531745 100644 --- a/rpc/trace_test.go +++ b/rpc/trace_test.go @@ -58,7 +58,7 @@ func TestTraceFallback(t *testing.T) { mockReader.EXPECT().BlockByHash(utils.HexToFelt(t, test.hash)).DoAndReturn(func(_ *felt.Felt) (block *core.Block, err error) { return mockReader.BlockByNumber(test.blockNumber) }).Times(2) - handler := rpc.New(mockReader, nil, nil, "", n, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) _, jErr := handler.TraceBlockTransactions(context.Background(), rpc.BlockID{Number: test.blockNumber}) require.Equal(t, rpc.ErrInternal.Code, jErr.Code) @@ -79,7 +79,7 @@ func TestTraceTransaction(t *testing.T) { mockReader := mocks.NewMockReader(mockCtrl) mockReader.EXPECT().Network().Return(&utils.Mainnet).AnyTimes() mockVM := mocks.NewMockVM(mockCtrl) - handler := rpc.New(mockReader, nil, mockVM, "", utils.Ptr(utils.Mainnet), utils.NewNopZapLogger()) + handler := rpc.New(mockReader, nil, mockVM, "", utils.NewNopZapLogger()) t.Run("not found", func(t *testing.T) { hash := utils.HexToFelt(t, "0xBBBB") @@ -267,7 +267,7 @@ func TestTraceTransactionV0_6(t *testing.T) { mockReader := mocks.NewMockReader(mockCtrl) mockReader.EXPECT().Network().Return(&utils.Mainnet).AnyTimes() mockVM := mocks.NewMockVM(mockCtrl) - handler := rpc.New(mockReader, nil, mockVM, "", utils.Ptr(utils.Mainnet), utils.NewNopZapLogger()) + handler := rpc.New(mockReader, nil, mockVM, "", utils.NewNopZapLogger()) t.Run("not found", func(t *testing.T) { hash := utils.HexToFelt(t, "0xBBBB") @@ -402,7 +402,7 @@ func TestTraceBlockTransactions(t *testing.T) { log := utils.NewNopZapLogger() n := utils.Ptr(utils.Mainnet) chain := blockchain.New(pebble.NewMemTest(t), n) - handler := rpc.New(chain, nil, nil, "", n, log) + handler := rpc.New(chain, nil, nil, "", log) update, rpcErr := handler.TraceBlockTransactions(context.Background(), id) assert.Nil(t, update) @@ -419,7 +419,7 @@ func TestTraceBlockTransactions(t *testing.T) { mockVM := mocks.NewMockVM(mockCtrl) log := utils.NewNopZapLogger() - handler := rpc.New(mockReader, nil, mockVM, "", n, log) + handler := rpc.New(mockReader, nil, mockVM, "", log) t.Run("pending block", func(t *testing.T) { blockHash := utils.HexToFelt(t, "0x0001") @@ -557,7 +557,7 @@ func TestCall(t *testing.T) { n := utils.Ptr(utils.Mainnet) mockReader := mocks.NewMockReader(mockCtrl) mockVM := mocks.NewMockVM(mockCtrl) - handler := rpc.New(mockReader, nil, mockVM, "", n, utils.NewNopZapLogger()) + handler := rpc.New(mockReader, nil, mockVM, "", utils.NewNopZapLogger()) t.Run("empty blockchain", func(t *testing.T) { mockReader.EXPECT().HeadState().Return(nil, nil, db.ErrKeyNotFound) diff --git a/rpc/transaction_test.go b/rpc/transaction_test.go index 4ef9b5a3c9..78bc9c3f6d 100644 --- a/rpc/transaction_test.go +++ b/rpc/transaction_test.go @@ -27,11 +27,10 @@ func TestTransactionByHashNotFound(t *testing.T) { t.Cleanup(mockCtrl.Finish) mockReader := mocks.NewMockReader(mockCtrl) - n := utils.Ptr(utils.Mainnet) txHash := new(felt.Felt).SetBytes([]byte("random hash")) mockReader.EXPECT().TransactionByHash(txHash).Return(nil, errors.New("tx not found")) - handler := rpc.New(mockReader, nil, nil, "", n, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) tx, rpcErr := handler.TransactionByHash(*txHash) assert.Nil(t, tx) @@ -323,7 +322,7 @@ func TestTransactionByHash(t *testing.T) { mockReader.EXPECT().TransactionByHash(gomock.Any()).DoAndReturn(func(hash *felt.Felt) (core.Transaction, error) { return gw.Transaction(context.Background(), hash) }).Times(1) - handler := rpc.New(mockReader, nil, nil, "", test.network, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) hash, err := new(felt.Felt).SetString(test.hash) require.NoError(t, err) @@ -357,7 +356,7 @@ func TestTransactionByBlockIdAndIndex(t *testing.T) { require.NoError(t, err) latestBlockHash := latestBlock.Hash - handler := rpc.New(mockReader, nil, nil, "", n, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) t.Run("empty blockchain", func(t *testing.T) { mockReader.EXPECT().HeadsHeader().Return(nil, db.ErrKeyNotFound) @@ -501,7 +500,7 @@ func TestTransactionReceiptByHash(t *testing.T) { n := utils.Ptr(utils.Mainnet) mockReader := mocks.NewMockReader(mockCtrl) - handler := rpc.New(mockReader, nil, nil, "", n, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) t.Run("transaction not found", func(t *testing.T) { txHash := new(felt.Felt).SetBytes([]byte("random hash")) @@ -760,7 +759,7 @@ func TestLegacyTransactionReceiptByHash(t *testing.T) { n := utils.Ptr(utils.Mainnet) mockReader := mocks.NewMockReader(mockCtrl) - handler := rpc.New(mockReader, nil, nil, "", n, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) t.Run("transaction not found", func(t *testing.T) { txHash := new(felt.Felt).SetBytes([]byte("random hash")) @@ -1316,7 +1315,7 @@ func TestAddTransaction(t *testing.T) { }`), nil). Times(1) - handler := rpc.New(nil, nil, nil, "", n, utils.NewNopZapLogger()) + handler := rpc.New(nil, nil, nil, "", utils.NewNopZapLogger()) _, rpcErr := handler.AddTransaction(context.Background(), test.txn) require.Equal(t, rpcErr.Code, rpc.ErrInternal.Code) @@ -1379,7 +1378,7 @@ func TestTransactionStatus(t *testing.T) { mockReader.EXPECT().Receipt(tx.Hash()).Return(block.Receipts[0], block.Hash, block.Number, nil) mockReader.EXPECT().L1Head().Return(nil, nil) - handler := rpc.New(mockReader, nil, nil, "", test.network, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) want := &rpc.TransactionStatus{ Finality: rpc.TxnStatusAcceptedOnL2, @@ -1397,7 +1396,7 @@ func TestTransactionStatus(t *testing.T) { BlockNumber: block.Number + 1, }, nil) - handler := rpc.New(mockReader, nil, nil, "", test.network, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) want := &rpc.TransactionStatus{ Finality: rpc.TxnStatusAcceptedOnL1, @@ -1427,7 +1426,7 @@ func TestTransactionStatus(t *testing.T) { t.Run(description, func(t *testing.T) { mockReader := mocks.NewMockReader(mockCtrl) mockReader.EXPECT().TransactionByHash(notFoundTest.hash).Return(nil, db.ErrKeyNotFound).Times(2) - handler := rpc.New(mockReader, nil, nil, "", test.network, nil) + handler := rpc.New(mockReader, nil, nil, "", nil) _, err := handler.TransactionStatus(ctx, *notFoundTest.hash) require.Equal(t, rpc.ErrTxnHashNotFound.Code, err.Code) @@ -1444,7 +1443,7 @@ func TestTransactionStatus(t *testing.T) { t.Run("transaction not found in db and feeder ", func(t *testing.T) { mockReader := mocks.NewMockReader(mockCtrl) mockReader.EXPECT().TransactionByHash(test.notFoundTxHash).Return(nil, db.ErrKeyNotFound) - handler := rpc.New(mockReader, nil, nil, "", test.network, nil).WithFeeder(client) + handler := rpc.New(mockReader, nil, nil, "", nil).WithFeeder(client) _, err := handler.TransactionStatus(ctx, *test.notFoundTxHash) require.NotNil(t, err) diff --git a/utils/network.go b/utils/network.go index 7491b1af31..fa86339653 100644 --- a/utils/network.go +++ b/utils/network.go @@ -33,8 +33,6 @@ type BlockHashMetaInfo struct { First07Block uint64 `json:"first_07_block" validate:"required"` // Range of blocks that are not verifiable UnverifiableRange []uint64 `json:"unverifiable_range" validate:"required"` - // Block ids for which we fetch traces from feeder gateway instead of getting them from blockifier - ForceFetchingTracesForBlocks []uint64 `json:"force_fetching_traces_for_blocks"` } var ( @@ -55,35 +53,6 @@ var ( BlockHashMetaInfo: &BlockHashMetaInfo{ First07Block: 833, FallBackSequencerAddress: fallBackSequencerAddressMainnet, - ForceFetchingTracesForBlocks: []uint64{ - 611294, 611505, 612469, 613231, 614631, 614849, 615085, - 615449, 615839, 615978, 616658, 617479, 617507, 617582, - 617593, 617828, 618166, 618260, 618320, 618406, 618423, - 618776, 618884, 618975, 619052, 619128, 619171, 619467, - 619513, 619553, 619596, 619631, 619721, 619951, 619960, - 620018, 620066, 620235, 620423, 620530, 620678, 620749, - 620847, 621350, 621369, 621843, 621897, 621995, 622027, - 622063, 622244, 622768, 622786, 622873, 622930, 623034, - 623156, 623252, 623372, 623428, 623562, 623736, 623792, - 624045, 624082, 624114, 624236, 624378, 624487, 624690, - 624757, 624812, 624875, 624894, 624905, 624929, 625300, - 625403, 625441, 625525, 625741, 625767, 625794, 625802, - 625820, 625849, 625851, 625879, 625935, 625971, 626008, - 626019, 626176, 626193, 626204, 626236, 626285, 626335, - 626370, 626371, 626457, 626683, 626738, 626792, 626820, - 626835, 626962, 627015, 627049, 627100, 627135, 627138, - 627164, 627186, 627243, 627246, 627276, 627291, 627322, - 627351, 627389, 627404, 627428, 627591, 627623, 627624, - 627640, 627645, 627676, 627968, 628183, 628425, 628449, - 628511, 628561, 628682, 628746, 628772, 628778, 628819, - 628915, 628944, 629003, 629122, 629382, 629397, 629432, - 629484, 629500, 629831, 629853, 629893, 629908, 629916, - 630423, 631040, 631041, 631091, 631136, 631142, 631144, - 631149, 631155, 631204, 631269, 631368, 631602, 631685, - 631739, 631741, 631760, 631811, 631861, 631927, 632072, - 632073, 632074, 632075, 632076, 632077, 632078, 632079, - 632081, 632202, 632206, 632237, 632241, 632271, 632845, - }, }, } Goerli = Network{ From d554fbf86f9ac78ac75c4ccfc87c2c06500391ac Mon Sep 17 00:00:00 2001 From: Ng Wei Han <47109095+weiihann@users.noreply.github.com> Date: Fri, 28 Jun 2024 01:12:24 +0800 Subject: [PATCH 10/69] l1: avoid spam calling L1 RPC subscription (#1918) * Add retry logic for retrieving L1 finalised height * Sanitize eth_getBlockByNumber unmarshal method * l1: add EthSubscriber test --- l1/eth_subscriber.go | 27 +++++------- l1/l1.go | 1 + l1/l1_test.go | 103 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 17 deletions(-) diff --git a/l1/eth_subscriber.go b/l1/eth_subscriber.go index 8ee42b1e46..38e7d377db 100644 --- a/l1/eth_subscriber.go +++ b/l1/eth_subscriber.go @@ -2,15 +2,15 @@ package l1 import ( "context" + "encoding/json" "fmt" "math/big" - "strconv" - "strings" "time" "github.com/NethermindEth/juno/l1/contract" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/rpc" @@ -54,28 +54,21 @@ func (s *EthSubscriber) ChainID(ctx context.Context) (*big.Int, error) { } func (s *EthSubscriber) FinalisedHeight(ctx context.Context) (uint64, error) { - finalisedBlock := make(map[string]any, 0) - if err := s.client.CallContext(ctx, &finalisedBlock, "eth_getBlockByNumber", "finalized", false); err != nil { //nolint:misspell + var raw json.RawMessage + if err := s.client.CallContext(ctx, &raw, "eth_getBlockByNumber", "finalized", false); err != nil { //nolint:misspell return 0, fmt.Errorf("get finalised Ethereum block: %w", err) } - number, ok := finalisedBlock["number"] - if !ok { - return 0, fmt.Errorf("number field not present in Ethereum block") + var head *types.Header + if err := json.Unmarshal(raw, &head); err != nil { + return 0, err } - numberString, ok := number.(string) - if !ok { - return 0, fmt.Errorf("block number is not a string: %v", number) + if head == nil { + return 0, fmt.Errorf("finalised block not found") } - numberString = strings.TrimPrefix(numberString, "0x") - numberUint, err := strconv.ParseUint(numberString, 16, 64) - if err != nil { - return 0, fmt.Errorf("parse block number: %s", numberString) - } - - return numberUint, nil + return head.Number.Uint64(), nil } func (s *EthSubscriber) Close() { diff --git a/l1/l1.go b/l1/l1.go index 1cc169e4f8..abad317057 100644 --- a/l1/l1.go +++ b/l1/l1.go @@ -178,6 +178,7 @@ func (c *Client) finalisedHeight(ctx context.Context) uint64 { return finalisedHeight } c.log.Debugw("Failed to retrieve L1 finalised height, retrying...", "error", err) + time.Sleep(c.resubscribeDelay) } } } diff --git a/l1/l1_test.go b/l1/l1_test.go index 84a4d208ea..44174b7d3c 100644 --- a/l1/l1_test.go +++ b/l1/l1_test.go @@ -4,6 +4,8 @@ import ( "context" "errors" "math/big" + "net" + "net/http" "testing" "time" @@ -15,6 +17,9 @@ import ( "github.com/NethermindEth/juno/l1/contract" "github.com/NethermindEth/juno/mocks" "github.com/NethermindEth/juno/utils" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rpc" "github.com/stretchr/testify/require" "go.uber.org/mock/gomock" ) @@ -154,3 +159,101 @@ func TestEventListener(t *testing.T) { StateRoot: new(felt.Felt), }, got) } + +func newTestL1Client(service service) *rpc.Server { + server := rpc.NewServer() + if err := server.RegisterName("eth", service); err != nil { + panic(err) + } + return server +} + +type service interface { + GetBlockByNumber(ctx context.Context, number string, fullTx bool) (interface{}, error) +} + +type testService struct{} + +func (testService) GetBlockByNumber(ctx context.Context, number string, fullTx bool) (interface{}, error) { + blockHeight := big.NewInt(100) + return types.Header{ + ParentHash: common.Hash{}, + UncleHash: common.Hash{}, + Root: common.Hash{}, + TxHash: common.Hash{}, + ReceiptHash: common.Hash{}, + Bloom: types.Bloom{}, + Difficulty: big.NewInt(0), + Number: blockHeight, + GasLimit: 0, + GasUsed: 0, + Time: 0, + Extra: []byte{}, + }, nil +} + +type testEmptyService struct{} + +func (testEmptyService) GetBlockByNumber(ctx context.Context, number string, fullTx bool) (interface{}, error) { + return nil, nil +} + +type testFaultyService struct{} + +func (testFaultyService) GetBlockByNumber(ctx context.Context, number string, fullTx bool) (interface{}, error) { + return uint(0), nil +} + +func TestEthSubscriber_FinalisedHeight(t *testing.T) { + tests := map[string]struct { + service service + expectedHeight uint64 + expectedError bool + }{ + "testService": { + service: testService{}, + expectedHeight: 100, + expectedError: false, + }, + "testEmptyService": { + service: testEmptyService{}, + expectedHeight: 0, + expectedError: true, + }, + "testFaultyService": { + service: testFaultyService{}, + expectedHeight: 0, + expectedError: true, + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + startServer := func(addr string, service service) (*rpc.Server, net.Listener) { + srv := newTestL1Client(service) + l, err := net.Listen("tcp", addr) + if err != nil { + t.Fatal("can't listen:", err) + } + go func() { + _ = http.Serve(l, srv.WebsocketHandler([]string{"*"})) + }() + return srv, l + } + + ctx, cancel := context.WithTimeout(context.Background(), 12*time.Second) + defer cancel() + + server, listener := startServer("127.0.0.1:0", test.service) + defer server.Stop() + + subscriber, err := l1.NewEthSubscriber("ws://"+listener.Addr().String(), common.Address{}) + require.NoError(t, err) + defer subscriber.Close() + + height, err := subscriber.FinalisedHeight(ctx) + require.Equal(t, test.expectedHeight, height) + require.Equal(t, test.expectedError, err != nil) + }) + } +} From ad21b2e369062765c005d84eb761803b2f25b656 Mon Sep 17 00:00:00 2001 From: Mario Apra Date: Tue, 25 Jun 2024 16:12:22 +0100 Subject: [PATCH 11/69] Start using Artifactory for CI/CD in favour of Docker Registry (#1917) Due security reasons, we had to stop using the dispatch token and start using the GitHub App in order to trigger the deployment in argo. Because argo is a private repository, we can't trigger from a public one (juno), so then we start to change the approach to first push the docker images to jFrog Artifactory, then argo will be notified that a new image was pushed, then it will trigger the deployment Extra Tasks: - Run YAML formatter on build-and-deploy workflow: Having a well formated file makes it easier to read and for people to contribute - Remove unnecessary IMAGE_TAG from build-and-deploy.yml: Instead of using both env.DOCKER_IMAGE_TAG and output.IMAGE_TAG, only use one of them. - Improve readability of stages in build-and-deploy.yml: Rename stages to make it easier to understand what's going on. For example from 'deploy_to_dev' to 'validate_dev' in order to include that some tests will be run on the environment - Set common env var in the root of the file: Some of the env vars are being used in multiple stages, so instead of having to hard-code some small differences in multiple places, bring it all back to a root level where it's easier to see what changes for what environment. --- .github/workflows/build-and-deploy.yml | 154 ++++++++++--------------- 1 file changed, 63 insertions(+), 91 deletions(-) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index cdd37ab00c..cab2c5c192 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -1,9 +1,17 @@ name: Docker Build, Publish and Deploy +env: + DOCKER_REGISTRY: nethermind.jfrog.io + + REPO_DEV: angkor-docker-local-dev + REPO_STAGING: angkor-docker-local-staging + REPO_PROD: angkor-docker-local-prod + + on: push: branches: [main] - tags: ['v*'] + tags: ["v*"] workflow_dispatch: permissions: @@ -11,156 +19,120 @@ permissions: contents: write jobs: - docker_build_and_publish: + build_docker_image: runs-on: ubuntu-latest - outputs: - IMAGE_TAG: ${{ steps.image_tag.outputs.IMAGE_TAG }} + steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - - - name: Define_docker_image_tag - id: image_tag + + - name: Define image tag run: | echo "DOCKER_IMAGE_TAG=$(git describe --tags)" >> $GITHUB_ENV - echo "IMAGE_TAG=$(git describe --tags)" >> "$GITHUB_OUTPUT" - + - name: Setup Docker Buildx uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - + + - name: Login to registry + run: | + docker login ${{ env.DOCKER_REGISTRY }} -u ${{ vars.ARTIFACTORY_ANGKOR_USER }} -p ${{ secrets.ARTIFACTORY_ANGKOR_CONTRIBUTOR }} + - name: Build and Push uses: docker/build-push-action@v5 with: context: . - platforms: 'linux/amd64' + platforms: "linux/amd64" push: true - tags: nethermindeth/juno:${{ env.DOCKER_IMAGE_TAG }} - - deploy_to_dev: + tags: ${{ env.DOCKER_REGISTRY }}/${{ env.REPO_DEV }}/juno:${{ env.DOCKER_IMAGE_TAG }} + + + validate_dev: permissions: id-token: write contents: write - needs: [docker_build_and_publish] + needs: [build_docker_image] runs-on: ubuntu-latest - environment: + environment: name: Development steps: - name: Checkout uses: actions/checkout@v4 - - name: Repository Dispatch Dev - env: - EVENT_NAME: juno-dev - IMAGE_TAG: ${{ needs.docker_build_and_publish.outputs.IMAGE_TAG }} - SEPOLIA: apps/juno-dev/overlays/dev-sepolia/config.yaml - run: | - curl -L \ - -X POST \ - -H "Accept: application/vnd.github+json" \ - -H "Authorization: token ${{ secrets.ACCESS_TOKEN }}" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/NethermindEth/argo/dispatches \ - -d '{"event_type": "${{ env.EVENT_NAME }}", "client_payload":{"name": "${{ env.EVENT_NAME }}", "sepolia_config": "${{ env.SEPOLIA }}", "tag": "${{ env.IMAGE_TAG }}"}}' - - name: Verify Deployment Version (Dev) - run: bash .github/workflow-scripts/verify_deployment.sh ${{ secrets.DEV_SEPOLIA_URL }} ${{ needs.docker_build_and_publish.outputs.IMAGE_TAG }} - + run: bash .github/workflow-scripts/verify_deployment.sh ${{ secrets.DEV_SEPOLIA_URL }} ${{ env.DOCKER_IMAGE_TAG }} + dev-starknet-rs-tests: - needs: [deploy_to_dev] + needs: [validate_dev] uses: ./.github/workflows/starknet-rs-tests.yml secrets: STARKNET_RPC: ${{ secrets.DEV_SEPOLIA_URL }}/v0_6 - + dev-starknet-js-tests: - needs: [deploy_to_dev] + needs: [validate_dev] uses: ./.github/workflows/starknet-js-tests.yml secrets: TEST_RPC_URL: ${{ secrets.DEV_SEPOLIA_URL }}/v0_7 TEST_ACCOUNT_ADDRESS: ${{ secrets.TEST_ACCOUNT_ADDRESS }} TEST_ACCOUNT_PRIVATE_KEY: ${{ secrets.TEST_ACCOUNT_PRIVATE_KEY }} - - deploy_to_staging: - needs: [docker_build_and_publish, deploy_to_dev] + + promote_to_staging: + needs: [build_docker_image, validate_dev] runs-on: ubuntu-latest - environment: + environment: name: Staging - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Repository Dispatch Staging - env: - EVENT_NAME: juno-staging - IMAGE_TAG: ${{ needs.docker_build_and_publish.outputs.IMAGE_TAG }} - MAINNET: apps/juno-staging/overlays/staging-mainnet/config.yaml - SEPOLIA: apps/juno-staging/overlays/staging-sepolia/config.yaml - SEPOLIA_INTEGRATION: apps/juno-staging/overlays/staging-sepolia-integration/config.yaml - run: | - curl -L \ - -X POST \ - -H "Accept: application/vnd.github+json" \ - -H "Authorization: token ${{ secrets.ACCESS_TOKEN }}" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/NethermindEth/argo/dispatches \ - -d '{"event_type": "${{ env.EVENT_NAME }}", "client_payload":{"name": "${{ env.EVENT_NAME }}", "mainnet_config": "${{ env.MAINNET }}", "sepolia_config": "${{ env.SEPOLIA }}", "sepolia_integration_config": "${{ env.SEPOLIA_INTEGRATION}}", "tag": "${{ env.IMAGE_TAG }}"}}' - - - name: Verify Deployment Version (Staging) - run: bash .github/workflow-scripts/verify_deployment.sh ${{ secrets.STAGING_SEPOLIA_URL }} ${{ needs.docker_build_and_publish.outputs.IMAGE_TAG }} + steps: + - name: Setup JFrog CLI + uses: jfrog/setup-jfrog-cli@v4 + env: + JF_URL: ${{ vars.JFROG_URL}} + JF_ACCESS_TOKEN: ${{ secrets.ARTIFACTORY_ANGKOR_CONTRIBUTOR }} + + - name: Promote to Staging + run: | + jf rt dpr juno/${{ env.DOCKER_IMAGE_TAG }} ${{ env.REPO_DEV }} ${{ env.REPO_STAGING }} staging-starknet-rs-tests: - needs: [deploy_to_staging] + needs: [promote_to_staging] uses: ./.github/workflows/starknet-rs-tests.yml secrets: STARKNET_RPC: ${{ secrets.STAGING_SEPOLIA_URL }}/v0_6 - + staging-starknet-js-tests: - needs: [deploy_to_staging] + needs: [promote_to_staging] uses: ./.github/workflows/starknet-js-tests.yml secrets: TEST_RPC_URL: ${{ secrets.STAGING_SEPOLIA_URL }}/v0_7 TEST_ACCOUNT_ADDRESS: ${{ secrets.TEST_ACCOUNT_ADDRESS }} TEST_ACCOUNT_PRIVATE_KEY: ${{ secrets.TEST_ACCOUNT_PRIVATE_KEY }} - deploy_to_production: - needs: [docker_build_and_publish, deploy_to_staging] + promote_to_production: + needs: [build_docker_image, promote_to_staging] runs-on: ubuntu-latest environment: name: Production steps: - - name: Repository Dispatch Prod - env: - EVENT_NAME: juno-prod - IMAGE_TAG: ${{ needs.docker_build_and_publish.outputs.IMAGE_TAG }} - MAINNET: apps/juno-prod/overlays/prod-mainnet/config.yaml - SEPOLIA: apps/juno-prod/overlays/prod-sepolia/config.yaml - SEPOLIA_INTEGRATION: apps/juno-prod/overlays/prod-sepolia-integration/config.yaml + - name: Setup JFrog CLI + uses: jfrog/setup-jfrog-cli@v4 + env: + JF_URL: ${{ vars.JFROG_URL}} + JF_ACCESS_TOKEN: ${{ secrets.ARTIFACTORY_ANGKOR_CONTRIBUTOR }} + + - name: Promote to Production run: | - curl -L \ - -X POST \ - -H "Accept: application/vnd.github+json" \ - -H "Authorization: token ${{ secrets.ACCESS_TOKEN }}" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/NethermindEth/argo/dispatches \ - -d '{"event_type": "${{ env.EVENT_NAME }}", "client_payload":{"name": "${{ env.EVENT_NAME }}", "mainnet_config": "${{ env.MAINNET }}", "sepolia_config": "${{ env.SEPOLIA }}", "sepolia_integration_config": "${{ env.SEPOLIA_INTEGRATION }}", "tag": "${{ env.IMAGE_TAG }}"}}' - + jf rt dpr juno/${{ env.DOCKER_IMAGE_TAG }} ${{ env.REPO_STAGING }} ${{ env.REPO_PROD }} + prod-starknet-rs-tests: - needs: [deploy_to_production] + needs: [promote_to_production] uses: ./.github/workflows/starknet-rs-tests.yml secrets: STARKNET_RPC: ${{ secrets.PROD_SEPOLIA_URL }}/v0_6 - + prod-starknet-js-tests: - needs: [deploy_to_production] + needs: [promote_to_production] uses: ./.github/workflows/starknet-js-tests.yml secrets: TEST_RPC_URL: ${{ secrets.PROD_SEPOLIA_URL }}/v0_7 TEST_ACCOUNT_ADDRESS: ${{ secrets.TEST_ACCOUNT_ADDRESS }} - TEST_ACCOUNT_PRIVATE_KEY: ${{ secrets.TEST_ACCOUNT_PRIVATE_KEY }} \ No newline at end of file + TEST_ACCOUNT_PRIVATE_KEY: ${{ secrets.TEST_ACCOUNT_PRIVATE_KEY }} From 3d9d0380b3c8ac2d94637ae116786bceb87de197 Mon Sep 17 00:00:00 2001 From: Rian Hughes Date: Fri, 28 Jun 2024 14:35:50 +0100 Subject: [PATCH 12/69] updating verify proof range to handle empty proof keys (#1901) * implement VerifyRangeProof * Start using Artifactory for CI/CD in favour of Docker Registry Due security reasons, we had to stop using the dispatch token and start using the GitHub App in order to trigger the deployment in argo. Because argo is a private repository, we can't trigger from a public one (juno), so then we start to change the approach to first push the docker images to jFrog Artifactory, then argo will be notified that a new image was pushed, then it will trigger the deployment Extra Tasks: - Run YAML formatter on build-and-deploy workflow: Having a well formated file makes it easier to read and for people to contribute - Remove unnecessary IMAGE_TAG from build-and-deploy.yml: Instead of using both env.DOCKER_IMAGE_TAG and output.IMAGE_TAG, only use one of them. - Improve readability of stages in build-and-deploy.yml: Rename stages to make it easier to understand what's going on. For example from 'deploy_to_dev' to 'validate_dev' in order to include that some tests will be run on the environment - Set common env var in the root of the file: Some of the env vars are being used in multiple stages, so instead of having to hard-code some small differences in multiple places, bring it all back to a root level where it's easier to see what changes for what environment. --------- Co-authored-by: rian Co-authored-by: Mario Apra --- core/trie/node.go | 67 ++++- core/trie/proof.go | 361 ++++++++++++++++++++++++++- core/trie/proof_test.go | 532 +++++++++++++++++++++++++++++++++++++--- core/trie/trie.go | 253 +++++++++++++++---- 4 files changed, 1106 insertions(+), 107 deletions(-) diff --git a/core/trie/node.go b/core/trie/node.go index 7f4fb746e8..f2a5d92488 100644 --- a/core/trie/node.go +++ b/core/trie/node.go @@ -9,9 +9,11 @@ import ( // A Node represents a node in the [Trie] type Node struct { - Value *felt.Felt - Left *Key - Right *Key + Value *felt.Felt + Left *Key + Right *Key + LeftHash *felt.Felt + RightHash *felt.Felt } // Hash calculates the hash of a [Node] @@ -30,6 +32,12 @@ func (n *Node) Hash(path *Key, hashFunc hashFunc) *felt.Felt { return hash.Add(hash, &pathFelt) } +// Hash calculates the hash of a [Node] +func (n *Node) HashFromParent(parnetKey, nodeKey *Key, hashFunc hashFunc) *felt.Felt { + path := path(nodeKey, parnetKey) + return n.Hash(&path, hashFunc) +} + func (n *Node) WriteTo(buf *bytes.Buffer) (int64, error) { if n.Value == nil { return 0, errors.New("cannot marshal node with nil value") @@ -45,18 +53,38 @@ func (n *Node) WriteTo(buf *bytes.Buffer) (int64, error) { } if n.Left != nil { - wrote, err := n.Left.WriteTo(buf) + wrote, errInner := n.Left.WriteTo(buf) totalBytes += wrote if err != nil { - return totalBytes, err + return totalBytes, errInner } - wrote, err = n.Right.WriteTo(buf) // n.Right is non-nil by design + wrote, errInner = n.Right.WriteTo(buf) // n.Right is non-nil by design totalBytes += wrote if err != nil { - return totalBytes, err + return totalBytes, errInner } } + if n.LeftHash == nil && n.RightHash == nil { + return totalBytes, nil + } else if (n.LeftHash != nil && n.RightHash == nil) || (n.LeftHash == nil && n.RightHash != nil) { + return totalBytes, errors.New("cannot store only one lefthash or righthash") + } + + leftHashB := n.LeftHash.Bytes() + wrote, err = buf.Write(leftHashB[:]) + totalBytes += int64(wrote) + if err != nil { + return totalBytes, err + } + + rightHashB := n.RightHash.Bytes() + wrote, err = buf.Write(rightHashB[:]) + totalBytes += int64(wrote) + if err != nil { + return totalBytes, err + } + return totalBytes, nil } @@ -74,6 +102,8 @@ func (n *Node) UnmarshalBinary(data []byte) error { if len(data) == 0 { n.Left = nil n.Right = nil + n.LeftHash = nil + n.RightHash = nil return nil } @@ -85,5 +115,26 @@ func (n *Node) UnmarshalBinary(data []byte) error { if err := n.Left.UnmarshalBinary(data); err != nil { return err } - return n.Right.UnmarshalBinary(data[n.Left.EncodedLen():]) + data = data[n.Left.EncodedLen():] + if err := n.Right.UnmarshalBinary(data); err != nil { + return err + } + data = data[n.Right.EncodedLen():] + + if n.LeftHash == nil { + n.LeftHash = new(felt.Felt) + } + if n.RightHash == nil { + n.RightHash = new(felt.Felt) + } + if len(data) == 0 { + return nil + } + if len(data) != 2*felt.Bytes { + return errors.New("the node does not contain both left and right hash") + } + n.LeftHash.SetBytes(data[:felt.Bytes]) + data = data[felt.Bytes:] + n.RightHash.SetBytes(data[:felt.Bytes]) + return nil } diff --git a/core/trie/proof.go b/core/trie/proof.go index 5da9fee7f8..6a9d7eb099 100644 --- a/core/trie/proof.go +++ b/core/trie/proof.go @@ -1,6 +1,7 @@ package trie import ( + "errors" "fmt" "github.com/NethermindEth/juno/core/felt" @@ -28,6 +29,13 @@ func (pn *ProofNode) Hash(hash hashFunc) *felt.Felt { } } +func (pn *ProofNode) Len() uint8 { + if pn.Binary != nil { + return 1 + } + return pn.Edge.Path.len +} + func (pn *ProofNode) PrettyPrint() { if pn.Binary != nil { fmt.Printf(" Binary:\n") @@ -38,7 +46,6 @@ func (pn *ProofNode) PrettyPrint() { fmt.Printf(" Edge:\n") fmt.Printf(" Child: %v\n", pn.Edge.Child) fmt.Printf(" Path: %v\n", pn.Edge.Path) - fmt.Printf(" Value: %v\n", pn.Edge.Value) } } @@ -48,12 +55,26 @@ type Binary struct { } type Edge struct { - Child *felt.Felt - Path *Key - Value *felt.Felt + Child *felt.Felt // child hash + Path *Key // path from parent to child +} + +func GetBoundaryProofs(leftBoundary, rightBoundary *Key, tri *Trie) ([2][]ProofNode, error) { + proofs := [2][]ProofNode{} + leftProof, err := GetProof(leftBoundary, tri) + if err != nil { + return proofs, err + } + rightProof, err := GetProof(rightBoundary, tri) + if err != nil { + return proofs, err + } + proofs[0] = leftProof + proofs[1] = rightProof + return proofs, nil } -func isEdge(parentKey *Key, sNode storageNode) bool { +func isEdge(parentKey *Key, sNode StorageNode) bool { sNodeLen := sNode.key.len if parentKey == nil { // Root return sNodeLen != 0 @@ -63,7 +84,7 @@ func isEdge(parentKey *Key, sNode storageNode) bool { // Note: we need to account for the fact that Junos Trie has nodes that are Binary AND Edge, // whereas the protocol requires nodes that are Binary XOR Edge -func transformNode(tri *Trie, parentKey *Key, sNode storageNode) (*Edge, *Binary, error) { +func transformNode(tri *Trie, parentKey *Key, sNode StorageNode) (*Edge, *Binary, error) { isEdgeBool := isEdge(parentKey, sNode) var edge *Edge @@ -87,7 +108,7 @@ func transformNode(tri *Trie, parentKey *Key, sNode storageNode) (*Edge, *Binary } rightHash := rNode.Value - if isEdge(sNode.key, storageNode{node: rNode, key: sNode.node.Right}) { + if isEdge(sNode.key, StorageNode{node: rNode, key: sNode.node.Right}) { edgePath := path(sNode.node.Right, sNode.key) rEdge := ProofNode{Edge: &Edge{ Path: &edgePath, @@ -96,7 +117,7 @@ func transformNode(tri *Trie, parentKey *Key, sNode storageNode) (*Edge, *Binary rightHash = rEdge.Hash(tri.hash) } leftHash := lNode.Value - if isEdge(sNode.key, storageNode{node: lNode, key: sNode.node.Left}) { + if isEdge(sNode.key, StorageNode{node: lNode, key: sNode.node.Left}) { edgePath := path(sNode.node.Left, sNode.key) lEdge := ProofNode{Edge: &Edge{ Path: &edgePath, @@ -113,6 +134,8 @@ func transformNode(tri *Trie, parentKey *Key, sNode storageNode) (*Edge, *Binary } // https://github.com/eqlabs/pathfinder/blob/main/crates/merkle-tree/src/tree.rs#L514 +// GetProof generates a set of proof nodes from the root to the leaf. +// The proof never contains the leaf node if it is set, as we already know it's hash. func GetProof(key *Key, tri *Trie) ([]ProofNode, error) { nodesFromRoot, err := tri.nodesFromRoot(key) if err != nil { @@ -147,11 +170,12 @@ func GetProof(key *Key, tri *Trie) ([]ProofNode, error) { // https://github.com/eqlabs/pathfinder/blob/main/crates/merkle-tree/src/tree.rs#L2006 func VerifyProof(root *felt.Felt, key *Key, value *felt.Felt, proofs []ProofNode, hash hashFunc) bool { expectedHash := root - remainingPath := key - for _, proofNode := range proofs { + remainingPath := NewKey(key.len, key.bitset[:]) + for i, proofNode := range proofs { if !proofNode.Hash(hash).Equal(expectedHash) { return false } + switch { case proofNode.Binary != nil: if remainingPath.Test(remainingPath.Len() - 1) { @@ -165,6 +189,14 @@ func VerifyProof(root *felt.Felt, key *Key, value *felt.Felt, proofs []ProofNode if err != nil { return false } + + // Todo: + // If we are verifying the key doesn't exist, then we should + // update subKey to point in the other direction + if value == nil && i == len(proofs)-1 { + return true + } + if !proofNode.Edge.Path.Equal(subKey) { return false } @@ -172,5 +204,314 @@ func VerifyProof(root *felt.Felt, key *Key, value *felt.Felt, proofs []ProofNode remainingPath.Truncate(251 - proofNode.Edge.Path.Len()) //nolint:gomnd } } + return expectedHash.Equal(value) } + +// VerifyRangeProof verifies the range proof for the given range of keys. +// This is achieved by constructing a trie from the boundary proofs, and the supplied key-values. +// If the root of the reconstructed trie matches the supplied root, then the verification passes. +// If the trie is constructed incorrectly then the root will have an incorrect key(len,path), and value, +// and therefore it's hash won't match the expected root. +// ref: https://github.com/ethereum/go-ethereum/blob/v1.14.3/trie/proof.go#L484 +func VerifyRangeProof(root *felt.Felt, keys, values []*felt.Felt, proofKeys [2]*Key, proofValues [2]*felt.Felt, + proofs [2][]ProofNode, hash hashFunc, +) (bool, error) { + // Step 0: checks + if len(keys) != len(values) { + return false, fmt.Errorf("inconsistent proof data, number of keys: %d, number of values: %d", len(keys), len(values)) + } + + // Ensure all keys are monotonic increasing + if err := ensureMonotonicIncreasing(proofKeys, keys); err != nil { + return false, err + } + + // Ensure the inner values contain no deletions + for _, value := range values { + if value.Equal(&felt.Zero) { + return false, errors.New("range contains deletion") + } + } + + // Step 1: Verify proofs, and get proof paths + var proofPaths [2][]StorageNode + var err error + for i := 0; i < 2; i++ { + if proofs[i] != nil { + if !VerifyProof(root, proofKeys[i], proofValues[i], proofs[i], hash) { + return false, fmt.Errorf("invalid proof for key %x", proofKeys[i].String()) + } + + proofPaths[i], err = ProofToPath(proofs[i], proofKeys[i], hash) + if err != nil { + return false, err + } + } + } + + // Step 2: Build trie from proofPaths and keys + tmpTrie, err := BuildTrie(proofPaths[0], proofPaths[1], keys, values) + if err != nil { + return false, err + } + + // Verify that the recomputed root hash matches the provided root hash + recomputedRoot, err := tmpTrie.Root() + if err != nil { + return false, err + } + if !recomputedRoot.Equal(root) { + return false, errors.New("root hash mismatch") + } + + return true, nil +} + +func ensureMonotonicIncreasing(proofKeys [2]*Key, keys []*felt.Felt) error { + if proofKeys[0] != nil { + leftProofFelt := proofKeys[0].Felt() + if leftProofFelt.Cmp(keys[0]) >= 0 { + return errors.New("range is not monotonically increasing") + } + } + if proofKeys[1] != nil { + rightProofFelt := proofKeys[1].Felt() + if keys[len(keys)-1].Cmp(&rightProofFelt) >= 0 { + return errors.New("range is not monotonically increasing") + } + } + if len(keys) >= 2 { + for i := 0; i < len(keys)-1; i++ { + if keys[i].Cmp(keys[i+1]) >= 0 { + return errors.New("range is not monotonically increasing") + } + } + } + return nil +} + +// compressNode determines if the node needs compressed, and if so, the len needed to arrive at the next key +func compressNode(idx int, proofNodes []ProofNode, hashF hashFunc) (int, uint8, error) { + parent := &proofNodes[idx] + + if idx == len(proofNodes)-1 { + if parent.Edge != nil { + return 1, parent.Len(), nil + } + return 0, parent.Len(), nil + } + + child := &proofNodes[idx+1] + + switch { + case parent.Edge != nil && child.Binary != nil: + return 1, parent.Edge.Path.len, nil + case parent.Binary != nil && child.Edge != nil: + childHash := child.Hash(hashF) + if parent.Binary.LeftHash.Equal(childHash) || parent.Binary.RightHash.Equal(childHash) { + return 1, child.Edge.Path.len, nil + } else { + return 0, 0, errors.New("can't determine the child hash from the parent and child") + } + } + + return 0, 1, nil +} + +func assignChild(i, compressedParent int, parentNode *Node, + nilKey, leafKey, parentKey *Key, proofNodes []ProofNode, hashF hashFunc, +) (*Key, error) { + childInd := i + compressedParent + 1 + childKey, err := getChildKey(childInd, parentKey, leafKey, nilKey, proofNodes, hashF) + if err != nil { + return nil, err + } + if leafKey.Test(leafKey.len - parentKey.len - 1) { + parentNode.Right = childKey + parentNode.Left = nilKey + } else { + parentNode.Right = nilKey + parentNode.Left = childKey + } + return childKey, nil +} + +// ProofToPath returns a set of storage nodes from the root to the end of the proof path. +// The storage nodes will have the hashes of the children, but only the key of the child +// along the path outlined by the proof. +func ProofToPath(proofNodes []ProofNode, leafKey *Key, hashF hashFunc) ([]StorageNode, error) { + pathNodes := []StorageNode{} + + // Child keys that can't be derived are set to nilKey, so that we can store the node + zeroFeltBytes := new(felt.Felt).Bytes() + nilKey := NewKey(0, zeroFeltBytes[:]) + + for i, pNode := range proofNodes { + // Keep moving along the path (may need to skip nodes that were compressed into the last path node) + if i != 0 { + if skipNode(pNode, pathNodes, hashF) { + continue + } + } + + var parentKey *Key + parentNode := Node{} + + // Set the key of the current node + compressParent, compressParentOffset, err := compressNode(i, proofNodes, hashF) + if err != nil { + return nil, err + } + parentKey, err = getParentKey(i, compressParentOffset, leafKey, pNode, pathNodes, proofNodes) + if err != nil { + return nil, err + } + + // Don't store leafs along proof paths + if parentKey.len == 251 { //nolint:gomnd + break + } + + // Set the value of the current node + parentNode.Value = pNode.Hash(hashF) + + // Set the child key of the current node. + childKey, err := assignChild(i, compressParent, &parentNode, &nilKey, leafKey, parentKey, proofNodes, hashF) + if err != nil { + return nil, err + } + + // Set the LeftHash and RightHash values + parentNode.LeftHash, parentNode.RightHash, err = getLeftRightHash(i, proofNodes) + if err != nil { + return nil, err + } + pathNodes = append(pathNodes, StorageNode{key: parentKey, node: &parentNode}) + + // break early since we don't store leafs along proof paths, or if no more nodes exist along the proof paths + if childKey.len == 0 || childKey.len == 251 { + break + } + } + return pathNodes, nil +} + +func skipNode(pNode ProofNode, pathNodes []StorageNode, hashF hashFunc) bool { + lastNode := pathNodes[len(pathNodes)-1].node + noLeftMatch, noRightMatch := false, false + if lastNode.LeftHash != nil && !pNode.Hash(hashF).Equal(lastNode.LeftHash) { + noLeftMatch = true + } + if lastNode.RightHash != nil && !pNode.Hash(hashF).Equal(lastNode.RightHash) { + noRightMatch = true + } + if noLeftMatch && noRightMatch { + return true + } + return false +} + +func getLeftRightHash(parentInd int, proofNodes []ProofNode) (*felt.Felt, *felt.Felt, error) { + parent := &proofNodes[parentInd] + if parent.Binary == nil { + if parentInd+1 > len(proofNodes)-1 { + return nil, nil, errors.New("cant get hash of children from proof node, out of range") + } + parent = &proofNodes[parentInd+1] + } + return parent.Binary.LeftHash, parent.Binary.RightHash, nil +} + +func getParentKey(idx int, compressedParentOffset uint8, leafKey *Key, + pNode ProofNode, pathNodes []StorageNode, proofNodes []ProofNode, +) (*Key, error) { + var crntKey *Key + var err error + + var height uint8 + if len(pathNodes) > 0 { + if proofNodes[idx].Edge != nil { + height = pathNodes[len(pathNodes)-1].key.len + proofNodes[idx].Edge.Path.len + } else { + height = pathNodes[len(pathNodes)-1].key.len + 1 + } + } else { + height = 0 + } + + if pNode.Binary != nil { + crntKey, err = leafKey.SubKey(height) + } else { + crntKey, err = leafKey.SubKey(height + compressedParentOffset) + } + return crntKey, err +} + +func getChildKey(childIdx int, crntKey, leafKey, nilKey *Key, proofNodes []ProofNode, hashF hashFunc) (*Key, error) { + if childIdx > len(proofNodes)-1 { + return nilKey, nil + } + + compressChild, compressChildOffset, err := compressNode(childIdx, proofNodes, hashF) + if err != nil { + return nil, err + } + + if crntKey.len+uint8(compressChild)+compressChildOffset == 251 { //nolint:gomnd + return nilKey, nil + } + + return leafKey.SubKey(crntKey.len + uint8(compressChild) + compressChildOffset) +} + +// BuildTrie builds a trie using the proof paths (including inner nodes), and then sets all the keys-values (leaves) +func BuildTrie(leftProofPath, rightProofPath []StorageNode, keys, values []*felt.Felt) (*Trie, error) { //nolint:gocyclo + tempTrie, err := NewTriePedersen(newMemStorage(), 251) //nolint:gomnd + if err != nil { + return nil, err + } + + // merge proof paths + for i := range min(len(leftProofPath), len(rightProofPath)) { + // Can't store nil keys so stop merging + if leftProofPath[i].node.Left == nil || leftProofPath[i].node.Right == nil || + rightProofPath[i].node.Left == nil || rightProofPath[i].node.Right == nil { + break + } + if leftProofPath[i].key.Equal(rightProofPath[i].key) { + leftProofPath[i].node.Right = rightProofPath[i].node.Right + rightProofPath[i].node.Left = leftProofPath[i].node.Left + } else { + break + } + } + + for _, sNode := range leftProofPath { + if sNode.node.Left == nil || sNode.node.Right == nil { + break + } + _, err := tempTrie.PutInner(sNode.key, sNode.node) + if err != nil { + return nil, err + } + } + + for _, sNode := range rightProofPath { + if sNode.node.Left == nil || sNode.node.Right == nil { + break + } + _, err := tempTrie.PutInner(sNode.key, sNode.node) + if err != nil { + return nil, err + } + } + + for i := range len(keys) { + _, err := tempTrie.PutWithProof(keys[i], values[i], leftProofPath, rightProofPath) + if err != nil { + return nil, err + } + } + return tempTrie, nil +} diff --git a/core/trie/proof_test.go b/core/trie/proof_test.go index 9356db86a4..a566ac2d02 100644 --- a/core/trie/proof_test.go +++ b/core/trie/proof_test.go @@ -1,7 +1,6 @@ package trie_test import ( - "fmt" "testing" "github.com/NethermindEth/juno/core/crypto" @@ -14,9 +13,9 @@ import ( ) func buildSimpleTrie(t *testing.T) *trie.Trie { - // (250, 0, x1) + // (250, 0, x1) edge // | - // (0,0,x1) + // (0,0,x1) binary // / \ // (2) (3) // Build trie @@ -24,7 +23,7 @@ func buildSimpleTrie(t *testing.T) *trie.Trie { txn, err := memdb.NewTransaction(true) require.NoError(t, err) - tempTrie, err := trie.NewTriePedersen(trie.NewStorage(txn, []byte{1}), 251) + tempTrie, err := trie.NewTriePedersen(trie.NewStorage(txn, []byte{0}), 251) require.NoError(t, err) // Update trie @@ -44,12 +43,18 @@ func buildSimpleTrie(t *testing.T) *trie.Trie { } func buildSimpleBinaryRootTrie(t *testing.T) *trie.Trie { + // PF // (0, 0, x) // / \ // (250, 0, cc) (250, 11111.., dd) // | | // (cc) (dd) - // Build trie + + // JUNO + // (0, 0, x) + // / \ + // (251, 0, cc) (251, 11111.., dd) + memdb := pebble.NewMemTest(t) txn, err := memdb.NewTransaction(true) require.NoError(t, err) @@ -135,8 +140,120 @@ func buildSimpleDoubleBinaryTrie(t *testing.T) (*trie.Trie, []trie.ProofNode) { return tempTrie, expectedProofNodes } +func build3KeyTrie(t *testing.T) *trie.Trie { + // Starknet + // -------- + // + // Edge + // | + // Binary with len 249 parent + // / \ + // Binary (250) Edge with len 250 + // / \ / + // 0x4 0x5 0x6 child + + // Juno + // ---- + // + // Node (path 249) + // / \ + // Node (binary) \ + // / \ / + // 0x4 0x5 0x6 + + // Build trie + memdb := pebble.NewMemTest(t) + txn, err := memdb.NewTransaction(true) + require.NoError(t, err) + + tempTrie, err := trie.NewTriePedersen(trie.NewStorage(txn, []byte{0}), 251) + require.NoError(t, err) + + // Update trie + key1 := new(felt.Felt).SetUint64(0) + key2 := new(felt.Felt).SetUint64(1) + key3 := new(felt.Felt).SetUint64(2) + value1 := new(felt.Felt).SetUint64(4) + value2 := new(felt.Felt).SetUint64(5) + value3 := new(felt.Felt).SetUint64(6) + + _, err = tempTrie.Put(key1, value1) + require.NoError(t, err) + + _, err = tempTrie.Put(key3, value3) + require.NoError(t, err) + _, err = tempTrie.Put(key2, value2) + require.NoError(t, err) + + require.NoError(t, tempTrie.Commit()) + return tempTrie +} + +func build4KeyTrie(t *testing.T) *trie.Trie { + // Juno + // 248 + // / \ + // 249 \ + // / \ \ + // 250 \ \ + // / \ /\ /\ + // 0 1 2 4 + + // Juno - should be able to reconstruct this from proofs + // 248 + // / \ + // 249 // Note we cant derive the right key, but need to store it's hash + // / \ + // 250 \ + // / \ / (Left hash set, no key) + // 0 + + // Pathfinder (???) + // 0 Edge + // | + // 248 Binary + // / \ + // 249 \ Binary Edge ?? + // / \ \ + // 250 250 250 Binary Edge ?? + // / \ / / + // 0 1 2 4 + + // Build trie + memdb := pebble.NewMemTest(t) + txn, err := memdb.NewTransaction(true) + require.NoError(t, err) + + tempTrie, err := trie.NewTriePedersen(trie.NewStorage(txn, []byte{0}), 251) + require.NoError(t, err) + + // Update trie + key1 := new(felt.Felt).SetUint64(0) + key2 := new(felt.Felt).SetUint64(1) + key3 := new(felt.Felt).SetUint64(2) + key5 := new(felt.Felt).SetUint64(4) + value1 := new(felt.Felt).SetUint64(4) + value2 := new(felt.Felt).SetUint64(5) + value3 := new(felt.Felt).SetUint64(6) + value5 := new(felt.Felt).SetUint64(7) + + _, err = tempTrie.Put(key1, value1) + require.NoError(t, err) + + _, err = tempTrie.Put(key3, value3) + require.NoError(t, err) + _, err = tempTrie.Put(key2, value2) + require.NoError(t, err) + _, err = tempTrie.Put(key5, value5) + require.NoError(t, err) + + require.NoError(t, tempTrie.Commit()) + + return tempTrie +} + func TestGetProof(t *testing.T) { - t.Run("Simple Trie - simple binary", func(t *testing.T) { + t.Run("GP Simple Trie - simple binary", func(t *testing.T) { tempTrie := buildSimpleTrie(t) zero := trie.NewKey(250, []byte{0}) @@ -160,13 +277,13 @@ func TestGetProof(t *testing.T) { require.NoError(t, err) // Better inspection - for _, pNode := range proofNodes { - pNode.PrettyPrint() - } + // for _, pNode := range proofNodes { + // pNode.PrettyPrint() + // } require.Equal(t, expectedProofNodes, proofNodes) }) - t.Run("Simple Trie - simple double binary", func(t *testing.T) { + t.Run("GP Simple Trie - simple double binary", func(t *testing.T) { tempTrie, expectedProofNodes := buildSimpleDoubleBinaryTrie(t) expectedProofNodes[2] = trie.ProofNode{ @@ -182,13 +299,13 @@ func TestGetProof(t *testing.T) { require.NoError(t, err) // Better inspection - for _, pNode := range proofNodes { - pNode.PrettyPrint() - } + // for _, pNode := range proofNodes { + // pNode.PrettyPrint() + // } require.Equal(t, expectedProofNodes, proofNodes) }) - t.Run("Simple Trie - simple double binary edge", func(t *testing.T) { + t.Run("GP Simple Trie - simple double binary edge", func(t *testing.T) { tempTrie, expectedProofNodes := buildSimpleDoubleBinaryTrie(t) leafFelt := new(felt.Felt).SetUint64(3).Bytes() leafKey := trie.NewKey(251, leafFelt[:]) @@ -196,13 +313,13 @@ func TestGetProof(t *testing.T) { require.NoError(t, err) // Better inspection - for _, pNode := range proofNodes { - pNode.PrettyPrint() - } + // for _, pNode := range proofNodes { + // pNode.PrettyPrint() + // } require.Equal(t, expectedProofNodes, proofNodes) }) - t.Run("Simple Trie - simple binary root", func(t *testing.T) { + t.Run("GP Simple Trie - simple binary root", func(t *testing.T) { tempTrie := buildSimpleBinaryRootTrie(t) key1Bytes := new(felt.Felt).SetUint64(0).Bytes() @@ -228,13 +345,13 @@ func TestGetProof(t *testing.T) { require.NoError(t, err) // Better inspection - for _, pNode := range proofNodes { - pNode.PrettyPrint() - } + // for _, pNode := range proofNodes { + // pNode.PrettyPrint() + // } require.Equal(t, expectedProofNodes, proofNodes) }) - t.Run("Simple Trie - left-right edge", func(t *testing.T) { + t.Run("GP Simple Trie - left-right edge", func(t *testing.T) { // (251,0xff,0xaa) // / // \ @@ -272,14 +389,13 @@ func TestGetProof(t *testing.T) { require.NoError(t, err) // Better inspection - for i, pNode := range proofNodes { - fmt.Println(i) - pNode.PrettyPrint() - } + // for _, pNode := range proofNodes { + // pNode.PrettyPrint() + // } require.Equal(t, expectedProofNodes, proofNodes) }) - t.Run("Simple Trie - proof for non-set key", func(t *testing.T) { + t.Run("GP Simple Trie - proof for non-set key", func(t *testing.T) { tempTrie, expectedProofNodes := buildSimpleDoubleBinaryTrie(t) leafFelt := new(felt.Felt).SetUint64(123).Bytes() // The (root) edge node would have a shorter len if this key was set @@ -294,7 +410,7 @@ func TestGetProof(t *testing.T) { require.Equal(t, expectedProofNodes[0:2], proofNodes) }) - t.Run("Simple Trie - proof for inner key", func(t *testing.T) { + t.Run("GP Simple Trie - proof for inner key", func(t *testing.T) { tempTrie, expectedProofNodes := buildSimpleDoubleBinaryTrie(t) innerFelt := new(felt.Felt).SetUint64(2).Bytes() @@ -309,7 +425,7 @@ func TestGetProof(t *testing.T) { require.Equal(t, expectedProofNodes[0:2], proofNodes) }) - t.Run("Simple Trie - proof for non-set key, with leafs set to right and left", func(t *testing.T) { + t.Run("GP Simple Trie - proof for non-set key, with leafs set to right and left", func(t *testing.T) { tempTrie, expectedProofNodes := buildSimpleDoubleBinaryTrie(t) leafFelt := new(felt.Felt).SetUint64(2).Bytes() @@ -327,7 +443,7 @@ func TestGetProof(t *testing.T) { func TestVerifyProof(t *testing.T) { // https://github.com/eqlabs/pathfinder/blob/main/crates/merkle-tree/src/tree.rs#L2137 - t.Run("Simple binary trie", func(t *testing.T) { + t.Run("VP Simple binary trie", func(t *testing.T) { tempTrie := buildSimpleTrie(t) zero := trie.NewKey(250, []byte{0}) expectedProofNodes := []trie.ProofNode{ @@ -347,14 +463,15 @@ func TestVerifyProof(t *testing.T) { root, err := tempTrie.Root() require.NoError(t, err) - key1Bytes := new(felt.Felt).SetUint64(0).Bytes() - key1 := trie.NewKey(251, key1Bytes[:]) val1 := new(felt.Felt).SetUint64(2) - assert.True(t, trie.VerifyProof(root, &key1, val1, expectedProofNodes, crypto.Pedersen)) + + zeroFeltBytes := new(felt.Felt).SetUint64(0).Bytes() + leafkey := trie.NewKey(251, zeroFeltBytes[:]) + assert.True(t, trie.VerifyProof(root, &leafkey, val1, expectedProofNodes, crypto.Pedersen)) }) // https://github.com/eqlabs/pathfinder/blob/main/crates/merkle-tree/src/tree.rs#L2167 - t.Run("Simple double binary trie", func(t *testing.T) { + t.Run("VP Simple double binary trie", func(t *testing.T) { tempTrie, _ := buildSimpleDoubleBinaryTrie(t) zero := trie.NewKey(249, []byte{0}) expectedProofNodes := []trie.ProofNode{ @@ -380,13 +497,52 @@ func TestVerifyProof(t *testing.T) { root, err := tempTrie.Root() require.NoError(t, err) - key1Bytes := new(felt.Felt).SetUint64(0).Bytes() - key1 := trie.NewKey(251, key1Bytes[:]) val1 := new(felt.Felt).SetUint64(2) - require.True(t, trie.VerifyProof(root, &key1, val1, expectedProofNodes, crypto.Pedersen)) + zeroFeltBytes := new(felt.Felt).SetUint64(0).Bytes() + leafkey := trie.NewKey(251, zeroFeltBytes[:]) + assert.True(t, trie.VerifyProof(root, &leafkey, val1, expectedProofNodes, crypto.Pedersen)) + }) + + t.Run("VP three key trie", func(t *testing.T) { + tempTrie := build3KeyTrie(t) + zero := trie.NewKey(249, []byte{0}) + felt2 := new(felt.Felt).SetUint64(0).Bytes() + lastPath := trie.NewKey(1, felt2[:]) + expectedProofNodes := []trie.ProofNode{ + { + Edge: &trie.Edge{ + Path: &zero, + Child: utils.HexToFelt(t, "0x0768DEB8D0795D80AAAC2E5E326141F33044759F97A1BF092D8EB9C4E4BE9234"), + }, + }, + { + Binary: &trie.Binary{ + LeftHash: utils.HexToFelt(t, "0x057166F9476D0A2D6875124251841EB85A9AE37462FAE3CBF7304BCD593938E7"), + RightHash: utils.HexToFelt(t, "0x060FBDE29F96F706498EFD132DC7F312A4C99A9AE051BF152C2AF2B3CAF31E5B"), + }, + }, + { + Edge: &trie.Edge{ + Path: &lastPath, + Child: utils.HexToFelt(t, "0x6"), + }, + }, + } + + root, err := tempTrie.Root() + require.NoError(t, err) + val6 := new(felt.Felt).SetUint64(6) + + twoFeltBytes := new(felt.Felt).SetUint64(2).Bytes() + leafkey := trie.NewKey(251, twoFeltBytes[:]) + gotProof, err := trie.GetProof(&leafkey, tempTrie) + require.NoError(t, err) + require.Equal(t, expectedProofNodes, gotProof) + + assert.True(t, trie.VerifyProof(root, &leafkey, val6, expectedProofNodes, crypto.Pedersen)) }) - t.Run("non existent key - less than root edge", func(t *testing.T) { + t.Run("VP non existent key - less than root edge", func(t *testing.T) { tempTrie, _ := buildSimpleDoubleBinaryTrie(t) nonExistentKey := trie.NewKey(123, []byte{0}) // Diverges before the root node (len root node = 249) @@ -400,7 +556,7 @@ func TestVerifyProof(t *testing.T) { require.False(t, trie.VerifyProof(root, &nonExistentKey, nonExistentKeyValue, proofNodes, crypto.Pedersen)) }) - t.Run("non existent leaf key", func(t *testing.T) { + t.Run("VP non existent leaf key", func(t *testing.T) { tempTrie, _ := buildSimpleDoubleBinaryTrie(t) nonExistentKeyByte := new(felt.Felt).SetUint64(2).Bytes() // Key not set @@ -415,3 +571,301 @@ func TestVerifyProof(t *testing.T) { require.False(t, trie.VerifyProof(root, &nonExistentKey, nonExistentKeyValue, proofNodes, crypto.Pedersen)) }) } + +func TestProofToPath(t *testing.T) { + t.Run("PTP Proof To Path Simple binary trie proof to path", func(t *testing.T) { + tempTrie := buildSimpleTrie(t) + zeroFeltByte := new(felt.Felt).Bytes() + zero := trie.NewKey(250, zeroFeltByte[:]) + leafValue := utils.HexToFelt(t, "0x0000000000000000000000000000000000000000000000000000000000000002") + siblingValue := utils.HexToFelt(t, "0x0000000000000000000000000000000000000000000000000000000000000003") + proofNodes := []trie.ProofNode{ + { + Edge: &trie.Edge{ + Path: &zero, + Child: utils.HexToFelt(t, "0x05774FA77B3D843AE9167ABD61CF80365A9B2B02218FC2F628494B5BDC9B33B8"), + }, + }, + { + Binary: &trie.Binary{ + LeftHash: leafValue, + RightHash: siblingValue, + }, + }, + } + + zeroFeltBytes := new(felt.Felt).SetUint64(0).Bytes() + leafkey := trie.NewKey(251, zeroFeltBytes[:]) + sns, err := trie.ProofToPath(proofNodes, &leafkey, crypto.Pedersen) + require.NoError(t, err) + + rootKey := tempTrie.RootKey() + + require.Equal(t, 1, len(sns)) + require.Equal(t, rootKey.Len(), sns[0].Key().Len()) + require.Equal(t, leafValue.String(), sns[0].Node().LeftHash.String()) + require.Equal(t, siblingValue.String(), sns[0].Node().RightHash.String()) + }) + + t.Run("PTP Simple double binary trie proof to path", func(t *testing.T) { + tempTrie := buildSimpleBinaryRootTrie(t) + + zeroFeltBytes := new(felt.Felt).SetUint64(0).Bytes() + leafkey := trie.NewKey(251, zeroFeltBytes[:]) + path1 := trie.NewKey(250, zeroFeltBytes[:]) + proofNodes := []trie.ProofNode{ + { + Binary: &trie.Binary{ + LeftHash: utils.HexToFelt(t, "0x06E08BF82793229338CE60B65D1845F836C8E2FBFE2BC59FF24AEDBD8BA219C4"), + RightHash: utils.HexToFelt(t, "0x04F9B8E66212FB528C0C1BD02F43309C53B895AA7D9DC91180001BDD28A588FA"), + }, + }, + { + Edge: &trie.Edge{ + Path: &path1, + Child: utils.HexToFelt(t, "0xcc"), + }, + }, + } + + siblingValue := utils.HexToFelt(t, "0xdd") + sns, err := trie.ProofToPath(proofNodes, &leafkey, crypto.Pedersen) + require.NoError(t, err) + rootKey := tempTrie.RootKey() + rootNode, err := tempTrie.GetNodeFromKey(rootKey) + require.NoError(t, err) + leftNode, err := tempTrie.GetNodeFromKey(rootNode.Left) + require.NoError(t, err) + require.Equal(t, 1, len(sns)) + require.Equal(t, rootKey.Len(), sns[0].Key().Len()) + require.Equal(t, leftNode.HashFromParent(rootKey, rootNode.Left, crypto.Pedersen).String(), sns[0].Node().LeftHash.String()) + require.NotEqual(t, siblingValue.String(), sns[0].Node().RightHash.String()) + }) + + t.Run("PTP boundary proofs with three key trie", func(t *testing.T) { + tri := build3KeyTrie(t) + rootKey := tri.RootKey() + rootNode, err := tri.GetNodeFromKey(rootKey) + require.NoError(t, err) + + zeroFeltBytes := new(felt.Felt).SetUint64(0).Bytes() + zeroLeafkey := trie.NewKey(251, zeroFeltBytes[:]) + zeroLeafValue := new(felt.Felt).SetUint64(4) + oneLeafValue := new(felt.Felt).SetUint64(5) + twoFeltBytes := new(felt.Felt).SetUint64(2).Bytes() + twoLeafkey := trie.NewKey(251, twoFeltBytes[:]) + bProofs, err := trie.GetBoundaryProofs(&zeroLeafkey, &twoLeafkey, tri) + require.NoError(t, err) + + // Test 1 + leftProofPath, err := trie.ProofToPath(bProofs[0], &zeroLeafkey, crypto.Pedersen) + require.Equal(t, 2, len(leftProofPath)) + require.NoError(t, err) + left, err := tri.GetNodeFromKey(rootNode.Left) + require.NoError(t, err) + right, err := tri.GetNodeFromKey(rootNode.Right) + require.NoError(t, err) + require.Equal(t, rootKey, leftProofPath[0].Key()) + require.Equal(t, left.HashFromParent(rootKey, rootNode.Left, crypto.Pedersen).String(), leftProofPath[0].Node().LeftHash.String()) + require.Equal(t, right.HashFromParent(rootKey, rootNode.Right, crypto.Pedersen).String(), leftProofPath[0].Node().RightHash.String()) + require.Equal(t, rootNode.Left, leftProofPath[1].Key()) + require.Equal(t, zeroLeafValue.String(), leftProofPath[1].Node().LeftHash.String()) + require.Equal(t, oneLeafValue.String(), leftProofPath[1].Node().RightHash.String()) + + // Test 2 + rightProofPath, err := trie.ProofToPath(bProofs[1], &twoLeafkey, crypto.Pedersen) + require.Equal(t, 1, len(rightProofPath)) + require.NoError(t, err) + require.Equal(t, rootKey, rightProofPath[0].Key()) + require.NotEqual(t, rootNode.Right, rightProofPath[0].Node().Right) + require.NotEqual(t, uint8(0), rightProofPath[0].Node().Right) + require.Equal(t, right.HashFromParent(rootKey, rootNode.Right, crypto.Pedersen).String(), rightProofPath[0].Node().RightHash.String()) + }) +} + +func TestBuildTrie(t *testing.T) { + t.Run("Simple binary trie proof to path", func(t *testing.T) { + // Node (edge path 249) + // / \ + // Node (binary) 0x6 (leaf) + // / \ + // 0x4 0x5 (leaf, leaf) + + tri := build3KeyTrie(t) + rootKey := tri.RootKey() + rootCommitment, err := tri.Root() + require.NoError(t, err) + rootNode, err := tri.GetNodeFromKey(rootKey) + require.NoError(t, err) + leftNode, err := tri.GetNodeFromKey(rootNode.Left) + require.NoError(t, err) + leftleftNode, err := tri.GetNodeFromKey(leftNode.Left) + require.NoError(t, err) + leftrightNode, err := tri.GetNodeFromKey(leftNode.Right) + require.NoError(t, err) + + zeroFeltBytes := new(felt.Felt).SetUint64(0).Bytes() + zeroLeafkey := trie.NewKey(251, zeroFeltBytes[:]) + twoFeltBytes := new(felt.Felt).SetUint64(2).Bytes() + twoLeafkey := trie.NewKey(251, twoFeltBytes[:]) + bProofs, err := trie.GetBoundaryProofs(&zeroLeafkey, &twoLeafkey, tri) + require.NoError(t, err) + + leftProof, err := trie.ProofToPath(bProofs[0], &zeroLeafkey, crypto.Pedersen) + require.NoError(t, err) + + rightProof, err := trie.ProofToPath(bProofs[1], &twoLeafkey, crypto.Pedersen) + require.NoError(t, err) + + keys := []*felt.Felt{new(felt.Felt).SetUint64(1)} + values := []*felt.Felt{new(felt.Felt).SetUint64(5)} + builtTrie, err := trie.BuildTrie(leftProof, rightProof, keys, values) + require.NoError(t, err) + + builtRootKey := builtTrie.RootKey() + builtRootNode, err := builtTrie.GetNodeFromKey(builtRootKey) + require.NoError(t, err) + builtLeftNode, err := builtTrie.GetNodeFromKey(builtRootNode.Left) + require.NoError(t, err) + builtLeftRightNode, err := builtTrie.GetNodeFromKey(builtLeftNode.Right) + require.NoError(t, err) + + // Assert the structure / keys correct + require.Equal(t, rootKey, builtRootKey) + require.Equal(t, rootNode.Left, builtRootNode.Left, "left fail") + require.Equal(t, leftrightNode.Right, builtLeftRightNode.Right, "right fail") + require.Equal(t, uint8(0), builtRootNode.Right.Len(), "right fail") + require.Equal(t, uint8(0), builtLeftNode.Left.Len(), "left left fail") + + // Assert the leaf nodes have the correct values + require.Equal(t, leftleftNode.Value.String(), builtLeftNode.LeftHash.String(), "should be 0x4") + require.Equal(t, leftrightNode.Value.String(), builtLeftRightNode.Value.String(), "should be 0x5") + + // Given the above two asserts pass, we should be able to reconstruct the correct commitment + reconstructedRootCommitment, err := builtTrie.Root() + require.NoError(t, err) + require.Equal(t, rootCommitment.String(), reconstructedRootCommitment.String(), "root commitment not equal") + }) +} + +func TestVerifyRangeProof(t *testing.T) { + t.Run("VPR two proofs, single key trie", func(t *testing.T) { + // Node (edge path 249) + // / \ + // Node (binary) 0x6 (leaf) + // / \ + // 0x4 0x5 (leaf, leaf) + + zeroFeltBytes := new(felt.Felt).SetUint64(0).Bytes() + zeroLeafkey := trie.NewKey(251, zeroFeltBytes[:]) + twoFeltBytes := new(felt.Felt).SetUint64(2).Bytes() + twoLeafkey := trie.NewKey(251, twoFeltBytes[:]) + + tri := build3KeyTrie(t) + keys := []*felt.Felt{new(felt.Felt).SetUint64(1)} + values := []*felt.Felt{new(felt.Felt).SetUint64(5)} + proofKeys := [2]*trie.Key{&zeroLeafkey, &twoLeafkey} + proofValues := [2]*felt.Felt{new(felt.Felt).SetUint64(4), new(felt.Felt).SetUint64(6)} + rootCommitment, err := tri.Root() + require.NoError(t, err) + proofs, err := trie.GetBoundaryProofs(proofKeys[0], proofKeys[1], tri) + require.NoError(t, err) + verif, err := trie.VerifyRangeProof(rootCommitment, keys, values, proofKeys, proofValues, proofs, crypto.Pedersen) + require.NoError(t, err) + require.True(t, verif) + }) + + t.Run("VPR all keys provided, no proofs needed", func(t *testing.T) { + // Node (edge path 249) + // / \ + // Node (binary) 0x6 (leaf) + // / \ + // 0x4 0x5 (leaf, leaf) + tri := build3KeyTrie(t) + keys := []*felt.Felt{new(felt.Felt).SetUint64(0), new(felt.Felt).SetUint64(1), new(felt.Felt).SetUint64(2)} + values := []*felt.Felt{new(felt.Felt).SetUint64(4), new(felt.Felt).SetUint64(5), new(felt.Felt).SetUint64(6)} + proofKeys := [2]*trie.Key{} + proofValues := [2]*felt.Felt{} + proofs := [2][]trie.ProofNode{} + rootCommitment, err := tri.Root() + require.NoError(t, err) + verif, err := trie.VerifyRangeProof(rootCommitment, keys, values, proofKeys, proofValues, proofs, crypto.Pedersen) + require.NoError(t, err) + require.True(t, verif) + }) + + t.Run("VPR left proof, all right keys", func(t *testing.T) { + // Node (edge path 249) + // / \ + // Node (binary) 0x6 (leaf) + // / \ + // 0x4 0x5 (leaf, leaf) + + zeroFeltBytes := new(felt.Felt).SetUint64(0).Bytes() + zeroLeafkey := trie.NewKey(251, zeroFeltBytes[:]) + + tri := build3KeyTrie(t) + keys := []*felt.Felt{new(felt.Felt).SetUint64(1), new(felt.Felt).SetUint64(2)} + values := []*felt.Felt{new(felt.Felt).SetUint64(5), new(felt.Felt).SetUint64(6)} + proofKeys := [2]*trie.Key{&zeroLeafkey} + proofValues := [2]*felt.Felt{new(felt.Felt).SetUint64(4)} + leftProof, err := trie.GetProof(proofKeys[0], tri) + require.NoError(t, err) + proofs := [2][]trie.ProofNode{leftProof} + rootCommitment, err := tri.Root() + require.NoError(t, err) + verif, err := trie.VerifyRangeProof(rootCommitment, keys, values, proofKeys, proofValues, proofs, crypto.Pedersen) + require.NoError(t, err) + require.True(t, verif) + }) + + t.Run("VPR right proof, all left keys", func(t *testing.T) { + // Node (edge path 249) + // / \ + // Node (binary) 0x6 (leaf) + // / \ + // 0x4 0x5 (leaf, leaf) + twoFeltBytes := new(felt.Felt).SetUint64(2).Bytes() + twoLeafkey := trie.NewKey(251, twoFeltBytes[:]) + + tri := build3KeyTrie(t) + keys := []*felt.Felt{new(felt.Felt).SetUint64(0), new(felt.Felt).SetUint64(1)} + values := []*felt.Felt{new(felt.Felt).SetUint64(4), new(felt.Felt).SetUint64(5)} + proofKeys := [2]*trie.Key{nil, &twoLeafkey} + proofValues := [2]*felt.Felt{nil, new(felt.Felt).SetUint64(6)} + rightProof, err := trie.GetProof(proofKeys[1], tri) + require.NoError(t, err) + proofs := [2][]trie.ProofNode{nil, rightProof} + rootCommitment, err := tri.Root() + require.NoError(t, err) + verif, err := trie.VerifyRangeProof(rootCommitment, keys, values, proofKeys, proofValues, proofs, crypto.Pedersen) + require.NoError(t, err) + require.True(t, verif) + }) + + t.Run("VPR left proof, all inner keys, right proof with non-set key", func(t *testing.T) { + zeroFeltBytes := new(felt.Felt).SetUint64(0).Bytes() + zeroLeafkey := trie.NewKey(251, zeroFeltBytes[:]) + + threeFeltBytes := new(felt.Felt).SetUint64(3).Bytes() + threeLeafkey := trie.NewKey(251, threeFeltBytes[:]) + + tri := build4KeyTrie(t) + keys := []*felt.Felt{new(felt.Felt).SetUint64(1), new(felt.Felt).SetUint64(2)} + values := []*felt.Felt{new(felt.Felt).SetUint64(5), new(felt.Felt).SetUint64(6)} + proofKeys := [2]*trie.Key{&zeroLeafkey, &threeLeafkey} + proofValues := [2]*felt.Felt{new(felt.Felt).SetUint64(4), nil} + leftProof, err := trie.GetProof(proofKeys[0], tri) + require.NoError(t, err) + rightProof, err := trie.GetProof(proofKeys[1], tri) + require.NoError(t, err) + + proofs := [2][]trie.ProofNode{leftProof, rightProof} + rootCommitment, err := tri.Root() + require.NoError(t, err) + + verif, err := trie.VerifyRangeProof(rootCommitment, keys, values, proofKeys, proofValues, proofs, crypto.Pedersen) + require.NoError(t, err) + require.True(t, verif) + }) +} diff --git a/core/trie/trie.go b/core/trie/trie.go index 2496b724d4..4339f39cd1 100644 --- a/core/trie/trie.go +++ b/core/trie/trie.go @@ -130,24 +130,41 @@ func path(key, parentKey *Key) Key { // storageNode is the on-disk representation of a [Node], // where key is the storage key and node is the value. -type storageNode struct { +type StorageNode struct { key *Key node *Node } +func (sn *StorageNode) Key() *Key { + return sn.key +} + +func (sn *StorageNode) Node() *Node { + return sn.node +} + +func NewStorageNode(key *Key, node *Node) *StorageNode { + return &StorageNode{key: key, node: node} +} + // nodesFromRoot enumerates the set of [Node] objects that need to be traversed from the root // of the Trie to the node which is given by the key. // The [storageNode]s are returned in descending order beginning with the root. -func (t *Trie) nodesFromRoot(key *Key) ([]storageNode, error) { - var nodes []storageNode +func (t *Trie) nodesFromRoot(key *Key) ([]StorageNode, error) { + var nodes []StorageNode cur := t.rootKey for cur != nil { + // proof nodes set "nil" nodes to zero + if len(nodes) > 0 && cur.len == 0 { + return nodes, nil + } + node, err := t.storage.Get(cur) if err != nil { return nil, err } - nodes = append(nodes, storageNode{ + nodes = append(nodes, StorageNode{ key: cur, node: node, }) @@ -217,7 +234,7 @@ func (t *Trie) handleEmptyTrie(old felt.Felt, nodeKey Key, node *Node, value *fe return &old, nil } -func (t *Trie) deleteExistingKey(sibling storageNode, nodeKey Key, nodes []storageNode) (*felt.Felt, error) { +func (t *Trie) deleteExistingKey(sibling StorageNode, nodeKey Key, nodes []StorageNode) (*felt.Felt, error) { if nodeKey.Equal(sibling.key) { // we have to deference the Value, since the Node can released back // to the NodePool and be reused anytime @@ -230,7 +247,7 @@ func (t *Trie) deleteExistingKey(sibling storageNode, nodeKey Key, nodes []stora return nil, nil } -func (t *Trie) replaceLinkWithNewParent(key *Key, commonKey Key, siblingParent storageNode) { +func (t *Trie) replaceLinkWithNewParent(key *Key, commonKey Key, siblingParent StorageNode) { if siblingParent.node.Left.Equal(key) { *siblingParent.node.Left = commonKey } else { @@ -238,38 +255,58 @@ func (t *Trie) replaceLinkWithNewParent(key *Key, commonKey Key, siblingParent s } } -func (t *Trie) insertOrUpdateValue(nodeKey *Key, node *Node, nodes []storageNode, sibling storageNode) error { +func (t *Trie) insertOrUpdateValue(nodeKey *Key, node *Node, nodes []StorageNode, sibling StorageNode, siblingIsParentProof bool) error { commonKey, _ := findCommonKey(nodeKey, sibling.key) newParent := &Node{} var leftChild, rightChild *Node + var err error - if nodeKey.Test(nodeKey.Len() - commonKey.Len() - 1) { - newParent.Left, newParent.Right = sibling.key, nodeKey - leftChild, rightChild = sibling.node, node + // Update the (proof) parents child and hash + if siblingIsParentProof { + newParent, err = t.GetNodeFromKey(&commonKey) + if err != nil { + return nil + } + if nodeKey.Test(nodeKey.Len() - commonKey.Len() - 1) { + newParent.Right = nodeKey + newParent.RightHash = node.Hash(nodeKey, t.hash) + } else { + newParent.Left = nodeKey + newParent.LeftHash = node.Hash(nodeKey, t.hash) + } + if err := t.storage.Put(&commonKey, newParent); err != nil { + return err + } + t.dirtyNodes = append(t.dirtyNodes, &commonKey) } else { - newParent.Left, newParent.Right = nodeKey, sibling.key - leftChild, rightChild = node, sibling.node - } + if nodeKey.Test(nodeKey.Len() - commonKey.Len() - 1) { + newParent.Left, newParent.Right = sibling.key, nodeKey + leftChild, rightChild = sibling.node, node + } else { + newParent.Left, newParent.Right = nodeKey, sibling.key + leftChild, rightChild = node, sibling.node + } - leftPath := path(newParent.Left, &commonKey) - rightPath := path(newParent.Right, &commonKey) + leftPath := path(newParent.Left, &commonKey) + rightPath := path(newParent.Right, &commonKey) - newParent.Value = t.hash(leftChild.Hash(&leftPath, t.hash), rightChild.Hash(&rightPath, t.hash)) - if err := t.storage.Put(&commonKey, newParent); err != nil { - return err - } + newParent.Value = t.hash(leftChild.Hash(&leftPath, t.hash), rightChild.Hash(&rightPath, t.hash)) + if err := t.storage.Put(&commonKey, newParent); err != nil { + return err + } - if len(nodes) > 1 { // sibling has a parent - siblingParent := (nodes)[len(nodes)-2] + if len(nodes) > 1 { // sibling has a parent + siblingParent := (nodes)[len(nodes)-2] - t.replaceLinkWithNewParent(sibling.key, commonKey, siblingParent) - if err := t.storage.Put(siblingParent.key, siblingParent.node); err != nil { - return err + t.replaceLinkWithNewParent(sibling.key, commonKey, siblingParent) + if err := t.storage.Put(siblingParent.key, siblingParent.node); err != nil { + return err + } + t.dirtyNodes = append(t.dirtyNodes, &commonKey) + } else { + t.setRootKey(&commonKey) } - t.dirtyNodes = append(t.dirtyNodes, &commonKey) - } else { - t.setRootKey(&commonKey) } if err := t.storage.Put(nodeKey, node); err != nil { @@ -296,7 +333,7 @@ func (t *Trie) Put(key, value *felt.Felt) (*felt.Felt, error) { return oldValue, err } - nodes, err := t.nodesFromRoot(&nodeKey) + nodes, err := t.nodesFromRoot(&nodeKey) // correct for key,value if err != nil { return nil, err } @@ -321,8 +358,79 @@ func (t *Trie) Put(key, value *felt.Felt) (*felt.Felt, error) { // trying to insert 0 to a key that does not exist return nil, nil // no-op } + err := t.insertOrUpdateValue(&nodeKey, node, nodes, sibling, false) + if err != nil { + return nil, err + } + return &old, nil + } +} - err := t.insertOrUpdateValue(&nodeKey, node, nodes, sibling) +// Put updates the corresponding `value` for a `key` +func (t *Trie) PutWithProof(key, value *felt.Felt, lProofPath, rProofPath []StorageNode) (*felt.Felt, error) { + if key.Cmp(t.maxKey) > 0 { + return nil, fmt.Errorf("key %s exceeds trie height %d", key, t.height) + } + + old := felt.Zero + nodeKey := t.feltToKey(key) + node := &Node{ + Value: value, + } + + oldValue, err := t.updateLeaf(nodeKey, node, value) + // xor operation, because we don't want to return result if the error is nil and the old value is nil + if (err != nil) != (oldValue != nil) { + return oldValue, err + } + + nodes, err := t.nodesFromRoot(&nodeKey) // correct for key,value + if err != nil { + return nil, err + } + defer func() { + for _, n := range nodes { + nodePool.Put(n.node) + } + }() + + // empty trie, make new value root + if len(nodes) == 0 { + return t.handleEmptyTrie(old, nodeKey, node, value) + } else { + // Since we short-circuit in leaf updates, we will only end up here for deletions + // Delete if key already exist + sibling := nodes[len(nodes)-1] + oldValue, err = t.deleteExistingKey(sibling, nodeKey, nodes) + // xor operation, because we don't want to return if the error is nil and the old value is nil + if (err != nil) != (oldValue != nil) { + return oldValue, err + } else if value.IsZero() { + // trying to insert 0 to a key that does not exist + return nil, nil // no-op + } + + // override the sibling to be the parent if it's a proof + parentIsProof, found := false, false + for _, proof := range lProofPath { + if proof.key.Equal(sibling.key) { + sibling = proof + parentIsProof = true + found = true + break + } + } + if !found { + for _, proof := range rProofPath { + if proof.key.Equal(sibling.key) { + sibling = proof + parentIsProof = true + break + } + } + } + + err := t.insertOrUpdateValue(&nodeKey, node, nodes, sibling, parentIsProof) if err != nil { return nil, err } @@ -330,12 +438,26 @@ func (t *Trie) Put(key, value *felt.Felt) (*felt.Felt, error) { } } +// Put updates the corresponding `value` for a `key` +func (t *Trie) PutInner(key *Key, node *Node) (*felt.Felt, error) { + if err := t.storage.Put(key, node); err != nil { + return nil, err + } + if t.rootKey == nil { + t.setRootKey(key) + } + return &felt.Zero, nil +} + func (t *Trie) setRootKey(newRootKey *Key) { t.rootKey = newRootKey t.rootKeyIsDirty = true } -func (t *Trie) updateValueIfDirty(key *Key) (*Node, error) { +func (t *Trie) updateValueIfDirty(key *Key) (*Node, error) { //nolint:gocyclo + zeroFeltBytes := new(felt.Felt).Bytes() + nilKey := NewKey(0, zeroFeltBytes[:]) + node, err := t.storage.Get(key) if err != nil { return nil, err @@ -356,49 +478,76 @@ func (t *Trie) updateValueIfDirty(key *Key) (*Node, error) { } } + // Update inner proof nodes + if node.Left.Equal(&nilKey) && node.Right.Equal(&nilKey) { // leaf + shouldUpdate = false + } else if node.Left.Equal(&nilKey) || node.Right.Equal(&nilKey) { // inner + shouldUpdate = true + } if !shouldUpdate { return node, nil } + var leftIsProof, rightIsProof bool + var leftHash, rightHash *felt.Felt + if node.Left.Equal(&nilKey) { + leftIsProof = true + leftHash = node.LeftHash + } + if node.Right.Equal(&nilKey) { + rightIsProof = true + rightHash = node.RightHash + } + // To avoid over-extending, only use concurrent updates when we are not too // deep in to traversing the trie. const concurrencyMaxDepth = 8 // heuristically selected value var leftChild, rightChild *Node if key.len <= concurrencyMaxDepth { - leftChild, rightChild, err = t.updateChildTriesConcurrently(node) + leftChild, rightChild, err = t.updateChildTriesConcurrently(node, leftIsProof, rightIsProof) } else { - leftChild, rightChild, err = t.updateChildTriesSerially(node) + leftChild, rightChild, err = t.updateChildTriesSerially(node, leftIsProof, rightIsProof) } if err != nil { return nil, err } - defer nodePool.Put(leftChild) - defer nodePool.Put(rightChild) - - leftPath := path(node.Left, key) - rightPath := path(node.Right, key) - - node.Value = t.hash(leftChild.Hash(&leftPath, t.hash), rightChild.Hash(&rightPath, t.hash)) + if !leftIsProof { + leftPath := path(node.Left, key) + defer nodePool.Put(leftChild) + leftHash = leftChild.Hash(&leftPath, t.hash) + } + if !rightIsProof { + rightPath := path(node.Right, key) + defer nodePool.Put(rightChild) + rightHash = rightChild.Hash(&rightPath, t.hash) + } + node.Value = t.hash(leftHash, rightHash) if err = t.storage.Put(key, node); err != nil { return nil, err } return node, nil } -func (t *Trie) updateChildTriesSerially(root *Node) (*Node, *Node, error) { - leftChild, err := t.updateValueIfDirty(root.Left) - if err != nil { - return nil, nil, err +func (t *Trie) updateChildTriesSerially(root *Node, leftIsProof, rightIsProof bool) (*Node, *Node, error) { + var leftChild, rightChild *Node + var err error + if !leftIsProof { + leftChild, err = t.updateValueIfDirty(root.Left) + if err != nil { + return nil, nil, err + } } - rightChild, err := t.updateValueIfDirty(root.Right) - if err != nil { - return nil, nil, err + if !rightIsProof { + rightChild, err = t.updateValueIfDirty(root.Right) + if err != nil { + return nil, nil, err + } } return leftChild, rightChild, nil } -func (t *Trie) updateChildTriesConcurrently(root *Node) (*Node, *Node, error) { +func (t *Trie) updateChildTriesConcurrently(root *Node, leftIsProof, rightIsProof bool) (*Node, *Node, error) { var leftChild, rightChild *Node var lErr, rErr error @@ -406,9 +555,13 @@ func (t *Trie) updateChildTriesConcurrently(root *Node) (*Node, *Node, error) { wg.Add(1) go func() { defer wg.Done() - leftChild, lErr = t.updateValueIfDirty(root.Left) + if !leftIsProof { + leftChild, lErr = t.updateValueIfDirty(root.Left) + } }() - rightChild, rErr = t.updateValueIfDirty(root.Right) + if !rightIsProof { + rightChild, rErr = t.updateValueIfDirty(root.Right) + } wg.Wait() if lErr != nil { @@ -421,7 +574,7 @@ func (t *Trie) updateChildTriesConcurrently(root *Node) (*Node, *Node, error) { } // deleteLast deletes the last node in the given list -func (t *Trie) deleteLast(nodes []storageNode) error { +func (t *Trie) deleteLast(nodes []StorageNode) error { last := nodes[len(nodes)-1] if err := t.storage.Delete(last.key); err != nil { return err From 4218b2db825b6c46e3e0ad24e9f1c4f1f614c7ca Mon Sep 17 00:00:00 2001 From: wojciechos Date: Mon, 1 Jul 2024 15:04:26 +0200 Subject: [PATCH 13/69] Update CI/CD pipeline naming, image repository, and secrets var (#1919) --- .../{build-and-deploy.yml => ci-cd-pipeline.yml} | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) rename .github/workflows/{build-and-deploy.yml => ci-cd-pipeline.yml} (94%) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/ci-cd-pipeline.yml similarity index 94% rename from .github/workflows/build-and-deploy.yml rename to .github/workflows/ci-cd-pipeline.yml index cab2c5c192..0c36675bbd 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/ci-cd-pipeline.yml @@ -1,11 +1,11 @@ -name: Docker Build, Publish and Deploy +name: CI/CD pipeline env: DOCKER_REGISTRY: nethermind.jfrog.io - REPO_DEV: angkor-docker-local-dev - REPO_STAGING: angkor-docker-local-staging - REPO_PROD: angkor-docker-local-prod + REPO_DEV: nubia-docker-local-dev + REPO_STAGING: nubia-docker-local-staging + REPO_PROD: nubia-docker-local-prod on: @@ -37,7 +37,7 @@ jobs: - name: Login to registry run: | - docker login ${{ env.DOCKER_REGISTRY }} -u ${{ vars.ARTIFACTORY_ANGKOR_USER }} -p ${{ secrets.ARTIFACTORY_ANGKOR_CONTRIBUTOR }} + docker login ${{ env.DOCKER_REGISTRY }} -u ${{ vars.ARTIFACTORY_ANGKOR_USER }} -p ${{ secrets.ARTIFACTORY_NUBIA_CONTRIBUTOR}} - name: Build and Push uses: docker/build-push-action@v5 From 70c9ccfeb8db00f5e46ee304df3c60b45b0910ac Mon Sep 17 00:00:00 2001 From: wojciechos Date: Tue, 2 Jul 2024 11:22:53 +0200 Subject: [PATCH 14/69] Fix pipeline deployment with correct access token (#1921) Use Nubia user instead of Angkor for artifactory --- .github/workflows/ci-cd-pipeline.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-cd-pipeline.yml b/.github/workflows/ci-cd-pipeline.yml index 0c36675bbd..7c87540485 100644 --- a/.github/workflows/ci-cd-pipeline.yml +++ b/.github/workflows/ci-cd-pipeline.yml @@ -37,7 +37,7 @@ jobs: - name: Login to registry run: | - docker login ${{ env.DOCKER_REGISTRY }} -u ${{ vars.ARTIFACTORY_ANGKOR_USER }} -p ${{ secrets.ARTIFACTORY_NUBIA_CONTRIBUTOR}} + docker login ${{ env.DOCKER_REGISTRY }} -u ${{ vars.ARTIFACTORY_NUBIA_USER }} -p ${{ secrets.ARTIFACTORY_NUBIA_CONTRIBUTOR}} - name: Build and Push uses: docker/build-push-action@v5 @@ -87,7 +87,7 @@ jobs: uses: jfrog/setup-jfrog-cli@v4 env: JF_URL: ${{ vars.JFROG_URL}} - JF_ACCESS_TOKEN: ${{ secrets.ARTIFACTORY_ANGKOR_CONTRIBUTOR }} + JF_ACCESS_TOKEN: ${{ secrets.ARTIFACTORY_NUBIA_CONTRIBUTOR }} - name: Promote to Staging run: | @@ -117,7 +117,7 @@ jobs: uses: jfrog/setup-jfrog-cli@v4 env: JF_URL: ${{ vars.JFROG_URL}} - JF_ACCESS_TOKEN: ${{ secrets.ARTIFACTORY_ANGKOR_CONTRIBUTOR }} + JF_ACCESS_TOKEN: ${{ secrets.ARTIFACTORY_NUBIA_CONTRIBUTOR }} - name: Promote to Production run: | From 2b51b4f4dcdba9db928127a7c1828caff22d5608 Mon Sep 17 00:00:00 2001 From: Kirill Date: Tue, 2 Jul 2024 17:54:51 +0300 Subject: [PATCH 15/69] Add --versioned-constants-file flag (#1920) --- cmd/juno/juno.go | 94 ++++++++++++++++-------------- node/node.go | 48 ++++++++------- vm/rust/src/lib.rs | 37 +++++++++++- vm/rust/src/versioned_constants.rs | 5 ++ vm/vm.go | 34 +++++++++++ vm/vm_test.go | 16 +++++ 6 files changed, 168 insertions(+), 66 deletions(-) create mode 100644 vm/rust/src/versioned_constants.rs diff --git a/cmd/juno/juno.go b/cmd/juno/juno.go index 0c68968e90..51d685c2bf 100644 --- a/cmd/juno/juno.go +++ b/cmd/juno/juno.go @@ -38,50 +38,51 @@ Juno is a Go implementation of a Starknet full-node client created by Nethermind ` const ( - configF = "config" - logLevelF = "log-level" - httpF = "http" - httpHostF = "http-host" - httpPortF = "http-port" - wsF = "ws" - wsHostF = "ws-host" - wsPortF = "ws-port" - dbPathF = "db-path" - networkF = "network" - ethNodeF = "eth-node" - pprofF = "pprof" - pprofHostF = "pprof-host" - pprofPortF = "pprof-port" - colourF = "colour" - pendingPollIntervalF = "pending-poll-interval" - p2pF = "p2p" - p2pAddrF = "p2p-addr" - p2pPeersF = "p2p-peers" - p2pFeederNodeF = "p2p-feeder-node" - p2pPrivateKey = "p2p-private-key" - metricsF = "metrics" - metricsHostF = "metrics-host" - metricsPortF = "metrics-port" - grpcF = "grpc" - grpcHostF = "grpc-host" - grpcPortF = "grpc-port" - maxVMsF = "max-vms" - maxVMQueueF = "max-vm-queue" - remoteDBF = "remote-db" - rpcMaxBlockScanF = "rpc-max-block-scan" - dbCacheSizeF = "db-cache-size" - dbMaxHandlesF = "db-max-handles" - gwAPIKeyF = "gw-api-key" //nolint: gosec - gwTimeoutF = "gw-timeout" //nolint: gosec - cnNameF = "cn-name" - cnFeederURLF = "cn-feeder-url" - cnGatewayURLF = "cn-gateway-url" - cnL1ChainIDF = "cn-l1-chain-id" - cnL2ChainIDF = "cn-l2-chain-id" - cnCoreContractAddressF = "cn-core-contract-address" - cnUnverifiableRangeF = "cn-unverifiable-range" - callMaxStepsF = "rpc-call-max-steps" - corsEnableF = "rpc-cors-enable" + configF = "config" + logLevelF = "log-level" + httpF = "http" + httpHostF = "http-host" + httpPortF = "http-port" + wsF = "ws" + wsHostF = "ws-host" + wsPortF = "ws-port" + dbPathF = "db-path" + networkF = "network" + ethNodeF = "eth-node" + pprofF = "pprof" + pprofHostF = "pprof-host" + pprofPortF = "pprof-port" + colourF = "colour" + pendingPollIntervalF = "pending-poll-interval" + p2pF = "p2p" + p2pAddrF = "p2p-addr" + p2pPeersF = "p2p-peers" + p2pFeederNodeF = "p2p-feeder-node" + p2pPrivateKey = "p2p-private-key" + metricsF = "metrics" + metricsHostF = "metrics-host" + metricsPortF = "metrics-port" + grpcF = "grpc" + grpcHostF = "grpc-host" + grpcPortF = "grpc-port" + maxVMsF = "max-vms" + maxVMQueueF = "max-vm-queue" + remoteDBF = "remote-db" + rpcMaxBlockScanF = "rpc-max-block-scan" + dbCacheSizeF = "db-cache-size" + dbMaxHandlesF = "db-max-handles" + gwAPIKeyF = "gw-api-key" //nolint: gosec + gwTimeoutF = "gw-timeout" //nolint: gosec + cnNameF = "cn-name" + cnFeederURLF = "cn-feeder-url" + cnGatewayURLF = "cn-gateway-url" + cnL1ChainIDF = "cn-l1-chain-id" + cnL2ChainIDF = "cn-l2-chain-id" + cnCoreContractAddressF = "cn-core-contract-address" + cnUnverifiableRangeF = "cn-unverifiable-range" + callMaxStepsF = "rpc-call-max-steps" + corsEnableF = "rpc-cors-enable" + versionedConstantsFileF = "versioned-constants-file" defaultConfig = "" defaulHost = "localhost" @@ -117,6 +118,7 @@ const ( defaultCallMaxSteps = 4_000_000 defaultGwTimeout = 5 * time.Second defaultCorsEnable = false + defaultVersionedConstantsFile = "" configFlagUsage = "The YAML configuration file." logLevelFlagUsage = "Options: trace, debug, info, warn, error." @@ -165,7 +167,8 @@ const ( gwTimeoutUsage = "Timeout for requests made to the gateway" //nolint: gosec callMaxStepsUsage = "Maximum number of steps to be executed in starknet_call requests. " + "The upper limit is 4 million steps, and any higher value will still be capped at 4 million." - corsEnableUsage = "Enable CORS on RPC endpoints" + corsEnableUsage = "Enable CORS on RPC endpoints" + versionedConstantsFileUsage = "Use custom versioned constants from provided file" ) var Version string @@ -345,6 +348,7 @@ func NewCmd(config *node.Config, run func(*cobra.Command, []string) error) *cobr junoCmd.Flags().Uint(callMaxStepsF, defaultCallMaxSteps, callMaxStepsUsage) junoCmd.Flags().Duration(gwTimeoutF, defaultGwTimeout, gwTimeoutUsage) junoCmd.Flags().Bool(corsEnableF, defaultCorsEnable, corsEnableUsage) + junoCmd.Flags().String(versionedConstantsFileF, defaultVersionedConstantsFile, versionedConstantsFileUsage) junoCmd.MarkFlagsMutuallyExclusive(p2pFeederNodeF, p2pPeersF) junoCmd.AddCommand(GenP2PKeyPair()) diff --git a/node/node.go b/node/node.go index 98b63750bb..1c92bae2ff 100644 --- a/node/node.go +++ b/node/node.go @@ -44,26 +44,27 @@ const ( // Config is the top-level juno configuration. type Config struct { - LogLevel utils.LogLevel `mapstructure:"log-level"` - HTTP bool `mapstructure:"http"` - HTTPHost string `mapstructure:"http-host"` - HTTPPort uint16 `mapstructure:"http-port"` - RPCCorsEnable bool `mapstructure:"rpc-cors-enable"` - Websocket bool `mapstructure:"ws"` - WebsocketHost string `mapstructure:"ws-host"` - WebsocketPort uint16 `mapstructure:"ws-port"` - GRPC bool `mapstructure:"grpc"` - GRPCHost string `mapstructure:"grpc-host"` - GRPCPort uint16 `mapstructure:"grpc-port"` - DatabasePath string `mapstructure:"db-path"` - Network utils.Network `mapstructure:"network"` - EthNode string `mapstructure:"eth-node"` - Pprof bool `mapstructure:"pprof"` - PprofHost string `mapstructure:"pprof-host"` - PprofPort uint16 `mapstructure:"pprof-port"` - Colour bool `mapstructure:"colour"` - PendingPollInterval time.Duration `mapstructure:"pending-poll-interval"` - RemoteDB string `mapstructure:"remote-db"` + LogLevel utils.LogLevel `mapstructure:"log-level"` + HTTP bool `mapstructure:"http"` + HTTPHost string `mapstructure:"http-host"` + HTTPPort uint16 `mapstructure:"http-port"` + RPCCorsEnable bool `mapstructure:"rpc-cors-enable"` + Websocket bool `mapstructure:"ws"` + WebsocketHost string `mapstructure:"ws-host"` + WebsocketPort uint16 `mapstructure:"ws-port"` + GRPC bool `mapstructure:"grpc"` + GRPCHost string `mapstructure:"grpc-host"` + GRPCPort uint16 `mapstructure:"grpc-port"` + DatabasePath string `mapstructure:"db-path"` + Network utils.Network `mapstructure:"network"` + EthNode string `mapstructure:"eth-node"` + Pprof bool `mapstructure:"pprof"` + PprofHost string `mapstructure:"pprof-host"` + PprofPort uint16 `mapstructure:"pprof-port"` + Colour bool `mapstructure:"colour"` + PendingPollInterval time.Duration `mapstructure:"pending-poll-interval"` + RemoteDB string `mapstructure:"remote-db"` + VersionedConstantsFile string `mapstructure:"versioned-constants-file"` Metrics bool `mapstructure:"metrics"` MetricsHost string `mapstructure:"metrics-host"` @@ -140,6 +141,13 @@ func New(cfg *Config, version string) (*Node, error) { //nolint:gocyclo,funlen } } + if cfg.VersionedConstantsFile != "" { + err = vm.SetVersionedConstants(cfg.VersionedConstantsFile) + if err != nil { + return nil, fmt.Errorf("failed to set versioned constants: %w", err) + } + } + client := feeder.NewClient(cfg.Network.FeederURL).WithUserAgent(ua).WithLogger(log). WithTimeout(cfg.GatewayTimeout).WithAPIKey(cfg.GatewayAPIKey) synchronizer := sync.New(chain, adaptfeeder.New(client), log, cfg.PendingPollInterval, dbIsRemote) diff --git a/vm/rust/src/lib.rs b/vm/rust/src/lib.rs index 54a9c9ab3a..2a7207c9f4 100644 --- a/vm/rust/src/lib.rs +++ b/vm/rust/src/lib.rs @@ -433,11 +433,14 @@ lazy_static! { }; } +#[allow(static_mut_refs)] fn get_versioned_constants(version: *const c_char) -> VersionedConstants { let version_str = unsafe { CStr::from_ptr(version) }.to_str().unwrap(); let version = StarknetVersion::from_str(&version_str).unwrap_or(StarknetVersion::from_str(&"0.0.0").unwrap()); - if version < StarknetVersion::from_str(&"0.13.1").unwrap() { + if let Some(constants) = unsafe{ &CUSTOM_VERSIONED_CONSTANTS } { + constants.clone() + } else if version < StarknetVersion::from_str(&"0.13.1").unwrap() { CONSTANTS.get(&"0.13.0".to_string()).unwrap().to_owned() } else if version < StarknetVersion::from_str(&"0.13.1.1").unwrap() { CONSTANTS.get(&"0.13.1".to_string()).unwrap().to_owned() @@ -478,4 +481,36 @@ impl FromStr for StarknetVersion { Ok(StarknetVersion(a, b, c, d)) } +} + +static mut CUSTOM_VERSIONED_CONSTANTS: Option = None; + +#[no_mangle] +pub extern "C" fn setVersionedConstants(json_bytes: *const c_char) -> *const c_char { + let json_str = unsafe { + match CStr::from_ptr(json_bytes).to_str() { + Ok(s) => s, + Err(_) => return CString::new("Failed to convert JSON bytes to string").unwrap().into_raw(), + } + }; + + match serde_json::from_str(json_str) { + Ok(parsed) => unsafe { + CUSTOM_VERSIONED_CONSTANTS = Some(parsed); + CString::new("").unwrap().into_raw() // No error, return an empty string + }, + Err(_) => CString::new("Failed to parse JSON").unwrap().into_raw(), + } +} + +#[no_mangle] +pub extern "C" fn freeString(s: *mut c_char) { + if !s.is_null() { + unsafe { + // Convert the raw C string pointer back to a CString. This operation + // takes ownership of the memory again and ensures it gets deallocated + // when drop function returns. + drop(CString::from_raw(s)); + } + } } \ No newline at end of file diff --git a/vm/rust/src/versioned_constants.rs b/vm/rust/src/versioned_constants.rs new file mode 100644 index 0000000000..1b1f197af8 --- /dev/null +++ b/vm/rust/src/versioned_constants.rs @@ -0,0 +1,5 @@ +use blockifier::versioned_constants::VersionedConstants; +use std::{ + ffi::{c_char, c_uchar, c_void, CStr} +} + diff --git a/vm/vm.go b/vm/vm.go index bc3c3f0645..d20eeae826 100644 --- a/vm/vm.go +++ b/vm/vm.go @@ -35,6 +35,9 @@ extern void cairoVMExecute(char* txns_json, char* classes_json, char* paid_fees_ BlockInfo* block_info_ptr, uintptr_t readerHandle, char* chain_id, unsigned char skip_charge_fee, unsigned char skip_validate, unsigned char err_on_revert); +extern char* setVersionedConstants(char* json); +extern void freeString(char* str); + #cgo vm_debug LDFLAGS: -L./rust/target/debug -ljuno_starknet_rs -ldl -lm #cgo !vm_debug LDFLAGS: -L./rust/target/release -ljuno_starknet_rs -ldl -lm */ @@ -44,6 +47,8 @@ import ( "encoding/json" "errors" "fmt" + "io" + "os" "runtime" "runtime/cgo" "unsafe" @@ -220,6 +225,8 @@ func (v *vm) Call(callInfo *CallInfo, blockInfo *BlockInfo, state core.StateRead handle := cgo.NewHandle(context) defer handle.Delete() + C.setVersionedConstants(C.CString("my_json")) + cCallInfo, callInfoPinner := makeCCallInfo(callInfo) cBlockInfo := makeCBlockInfo(blockInfo, useBlobData) chainID := C.CString(network.L2ChainID) @@ -351,3 +358,30 @@ func marshalTxnsAndDeclaredClasses(txns []core.Transaction, declaredClasses []co return txnsJSON, classesJSON, nil } + +func SetVersionedConstants(filename string) error { + fd, err := os.Open(filename) + if err != nil { + return err + } + defer fd.Close() + + buff, err := io.ReadAll(fd) + if err != nil { + return err + } + + jsonStr := C.CString(string(buff)) + if errCStr := C.setVersionedConstants(jsonStr); errCStr != nil { + var errStr string = C.GoString(errCStr) + // empty string is not an error + if errStr != "" { + err = errors.New(errStr) + } + // here we rely on free call on Rust side, because on Go side we can have different allocator + C.freeString((*C.char)(unsafe.Pointer(errCStr))) + } + C.free(unsafe.Pointer(jsonStr)) + + return err +} diff --git a/vm/vm_test.go b/vm/vm_test.go index 4194e8a96b..dc65cb2179 100644 --- a/vm/vm_test.go +++ b/vm/vm_test.go @@ -2,6 +2,7 @@ package vm import ( "context" + "os" "reflect" "testing" @@ -224,3 +225,18 @@ func TestExecute(t *testing.T) { require.NoError(t, err) }) } + +func TestSetVersionedConstants(t *testing.T) { + t.Run("ok", func(t *testing.T) { + err := SetVersionedConstants("./rust/versioned_constants_13_1.json") + assert.NoError(t, err) + }) + t.Run("not valid json", func(t *testing.T) { + fd, err := os.CreateTemp("", "versioned_constants_test*") + require.NoError(t, err) + defer os.Remove(fd.Name()) + + err = SetVersionedConstants(fd.Name()) + assert.ErrorContains(t, err, "Failed to parse JSON") + }) +} From 8ad70a80959741b75e647e5e450f3b6246ed8542 Mon Sep 17 00:00:00 2001 From: Mario Apra Date: Wed, 3 Jul 2024 09:46:07 +0100 Subject: [PATCH 16/69] Misc Fixes - ignore juno artifacts in .gitignore and add requirement for implicit dependency on `pkg-config` (#1923) * chore: Ignore Juno artifacts in .gitignore * chore: Update system dependencies in README.md Turns out pkg-config is required: ``` $ make juno ... jemalloc: exec: "pkg-config": executable file not found in $PATH ``` --- .gitignore | 4 ++++ README.md | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6c02bffbab..ab462fe4b2 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,7 @@ config/ # pyenv .python-version + +# Default path for Juno DB files. It will get created if you follow the +# README and/or run `./build/juno` command. +juno/ diff --git a/README.md b/README.md index 1fdd6e6323..66e2d948ae 100644 --- a/README.md +++ b/README.md @@ -49,18 +49,20 @@ the official Golang [download](https://go.dev/doc/install) page. - [Rust](https://www.rust-lang.org/tools/install). - A C compiler: `gcc` or `clang`. -- Install `jemalloc` on your system: +- Install `jemalloc` and `pkg-config` on your system: - macOS ```bash brew install jemalloc + brew install pkg-config ``` - Ubuntu ```bash sudo apt-get install -y libjemalloc-dev + sudo apt-get install -y pkg-config ``` - To ensure a successful build, you either need to synchronize the tags from the upstream repository or create a new tag. From f8f0b4842d75c90d89172be458d90144f715ac34 Mon Sep 17 00:00:00 2001 From: wojciechos Date: Wed, 3 Jul 2024 14:54:14 +0200 Subject: [PATCH 17/69] Update db snapshot for mainnet (#1924) --- README.md | 4 ++-- docs/docs/snapshots.md | 4 ++-- docs/versioned_docs/version-0.11.8/snapshots.md | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 66e2d948ae..914a2f58fa 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,7 @@ Use the provided snapshots to quickly sync your Juno node with the current state | Version | Size | Block | Download Link | | ------- | ---- | ----- | ------------- | -| **>=v0.9.2** | **182 GB** | **640855** | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.7_640855.tar) | +| **>=v0.9.2** | **172 GB** | **654464** | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654464.tar) | #### Sepolia @@ -126,7 +126,7 @@ Use the provided snapshots to quickly sync your Juno node with the current state Fetch the snapshot from the provided URL: ```bash - wget -O juno_mainnet.tar https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.7_640855.tar + wget -O juno_mainnet.tar https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654464.tar ``` 2. **Prepare Directory** diff --git a/docs/docs/snapshots.md b/docs/docs/snapshots.md index df70d26d9a..9b05cd058f 100644 --- a/docs/docs/snapshots.md +++ b/docs/docs/snapshots.md @@ -10,7 +10,7 @@ You can download a snapshot of the Juno database to reduce the network syncing t | Version | Size | Block | Download Link | | ------------ | ---------- | ---------- | ----------------------------------------------------------------------------------------------------- | -| **>=v0.9.2** | **182 GB** | **640855** | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.7_640855.tar) | +| **>=v0.9.2** | **172 GB** | **654464** | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654464.tar) | ## Sepolia @@ -25,7 +25,7 @@ You can download a snapshot of the Juno database to reduce the network syncing t First, download a snapshot from one of the provided URLs: ```bash -wget -O juno_mainnet.tar https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.7_640855.tar +wget -O juno_mainnet.tar https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654464.tar ``` ### 2. Prepare a directory diff --git a/docs/versioned_docs/version-0.11.8/snapshots.md b/docs/versioned_docs/version-0.11.8/snapshots.md index df70d26d9a..9b05cd058f 100644 --- a/docs/versioned_docs/version-0.11.8/snapshots.md +++ b/docs/versioned_docs/version-0.11.8/snapshots.md @@ -10,7 +10,7 @@ You can download a snapshot of the Juno database to reduce the network syncing t | Version | Size | Block | Download Link | | ------------ | ---------- | ---------- | ----------------------------------------------------------------------------------------------------- | -| **>=v0.9.2** | **182 GB** | **640855** | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.7_640855.tar) | +| **>=v0.9.2** | **172 GB** | **654464** | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654464.tar) | ## Sepolia @@ -25,7 +25,7 @@ You can download a snapshot of the Juno database to reduce the network syncing t First, download a snapshot from one of the provided URLs: ```bash -wget -O juno_mainnet.tar https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.7_640855.tar +wget -O juno_mainnet.tar https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654464.tar ``` ### 2. Prepare a directory From aaad8a7e059580a5ac085894912b056712e1a8e8 Mon Sep 17 00:00:00 2001 From: Kirill Date: Fri, 5 Jul 2024 01:30:09 +0300 Subject: [PATCH 18/69] Use ctx in BucketMigrator (#1521) --- migration/bucket_migrator.go | 36 ++++++++++++++++++++++++++++++- migration/bucket_migrator_test.go | 4 ++-- migration/migration.go | 8 +++---- migration/migration_pkg_test.go | 8 +++---- 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/migration/bucket_migrator.go b/migration/bucket_migrator.go index 8b404545df..9bd2899a88 100644 --- a/migration/bucket_migrator.go +++ b/migration/bucket_migrator.go @@ -3,6 +3,10 @@ package migration import ( "bytes" "context" + "errors" + "os" + "os/signal" + "syscall" "github.com/NethermindEth/juno/db" "github.com/NethermindEth/juno/utils" @@ -72,14 +76,43 @@ func (m *BucketMigrator) Before(_ []byte) error { return nil } -func (m *BucketMigrator) Migrate(_ context.Context, txn db.Transaction, network *utils.Network) ([]byte, error) { +func (m *BucketMigrator) Migrate(ctx context.Context, txn db.Transaction, network *utils.Network, log utils.SimpleLogger) ([]byte, error) { remainingInBatch := m.batchSize iterator, err := txn.NewIterator() if err != nil { return nil, err } + var ( + firstInterrupt = ctx.Done() + secondInterrupt chan os.Signal // initially nil + ) for iterator.Seek(m.startFrom); iterator.Valid(); iterator.Next() { + select { + case <-firstInterrupt: + if errors.Is(ctx.Err(), context.Canceled) { + msg := "WARNING: Migration is in progress, but you tried to interrupt it.\n" + + "Database may be in an inconsistent state.\n" + + "To force cancellation and potentially corrupt data, send interrupt signal again.\n" + + "Otherwise, please allow the migration to complete." + log.Warnw(msg) + + // after context canceled on upper level there is no way to check how many interrupts were made from ctx.Done() + // but we can Initialise additional channel to receive the signals, they will be copied by runtime and provided + // to all callers (i.e. here and on upper level) + secondInterrupt = make(chan os.Signal, 1) + signal.Notify(secondInterrupt, os.Interrupt, syscall.SIGTERM) + // if we don't set firstInterrupt to nil this case may be fired all the time because + // execution order of cases in select is not guaranteed and selecting from nil channel is blocked operation + firstInterrupt = nil + } + case <-secondInterrupt: + err := errors.New("migration interrupt") + return nil, utils.RunAndWrapOnError(iterator.Close, err) + default: + // keep going + } + key := iterator.Key() if !bytes.HasPrefix(key, m.target.Key()) { break @@ -104,6 +137,7 @@ func (m *BucketMigrator) Migrate(_ context.Context, txn db.Transaction, network } } } + signal.Stop(secondInterrupt) return nil, iterator.Close() } diff --git a/migration/bucket_migrator_test.go b/migration/bucket_migrator_test.go index 79c540f572..19891e37b7 100644 --- a/migration/bucket_migrator_test.go +++ b/migration/bucket_migrator_test.go @@ -40,13 +40,13 @@ func TestBucketMover(t *testing.T) { err error ) err = testDB.Update(func(txn db.Transaction) error { - intermediateState, err = mover.Migrate(context.Background(), txn, &utils.Mainnet) + intermediateState, err = mover.Migrate(context.Background(), txn, &utils.Mainnet, nil) require.ErrorIs(t, err, migration.ErrCallWithNewTransaction) return nil }) require.NoError(t, err) err = testDB.Update(func(txn db.Transaction) error { - intermediateState, err = mover.Migrate(context.Background(), txn, &utils.Mainnet) + intermediateState, err = mover.Migrate(context.Background(), txn, &utils.Mainnet, nil) require.NoError(t, err) return nil }) diff --git a/migration/migration.go b/migration/migration.go index 3a69ac5b85..11e00c9c34 100644 --- a/migration/migration.go +++ b/migration/migration.go @@ -32,13 +32,13 @@ type schemaMetadata struct { type Migration interface { Before(intermediateState []byte) error // Migration should return intermediate state whenever it requests new txn or detects cancelled ctx. - Migrate(context.Context, db.Transaction, *utils.Network) ([]byte, error) + Migrate(context.Context, db.Transaction, *utils.Network, utils.SimpleLogger) ([]byte, error) } type MigrationFunc func(db.Transaction, *utils.Network) error // Migrate returns f(txn). -func (f MigrationFunc) Migrate(_ context.Context, txn db.Transaction, network *utils.Network) ([]byte, error) { +func (f MigrationFunc) Migrate(_ context.Context, txn db.Transaction, network *utils.Network, _ utils.SimpleLogger) ([]byte, error) { return nil, f(txn, network) } @@ -112,7 +112,7 @@ func migrateIfNeeded(ctx context.Context, targetDB db.DB, network *utils.Network for { callWithNewTransaction := false if dbErr := targetDB.Update(func(txn db.Transaction) error { - metadata.IntermediateState, err = migration.Migrate(ctx, txn, network) + metadata.IntermediateState, err = migration.Migrate(ctx, txn, network, log) switch { case err == nil || errors.Is(err, ctx.Err()): if metadata.IntermediateState == nil { @@ -366,7 +366,7 @@ func (n *node) _UnmarshalBinary(data []byte) error { return err } -func (m *changeTrieNodeEncoding) Migrate(_ context.Context, txn db.Transaction, _ *utils.Network) ([]byte, error) { +func (m *changeTrieNodeEncoding) Migrate(_ context.Context, txn db.Transaction, _ *utils.Network, _ utils.SimpleLogger) ([]byte, error) { // If we made n a trie.Node, the encoder would fall back to the custom encoding methods. // We instead define a cutom struct to force the encoder to use the default encoding. var n node diff --git a/migration/migration_pkg_test.go b/migration/migration_pkg_test.go index 709bd11bfe..e9015a68f8 100644 --- a/migration/migration_pkg_test.go +++ b/migration/migration_pkg_test.go @@ -143,7 +143,7 @@ func TestChangeTrieNodeEncoding(t *testing.T) { m := new(changeTrieNodeEncoding) require.NoError(t, m.Before(nil)) require.NoError(t, testdb.Update(func(txn db.Transaction) error { - _, err := m.Migrate(context.Background(), txn, &utils.Mainnet) + _, err := m.Migrate(context.Background(), txn, &utils.Mainnet, nil) return err })) @@ -427,7 +427,7 @@ type testMigration struct { before func([]byte) error } -func (f testMigration) Migrate(ctx context.Context, txn db.Transaction, network *utils.Network) ([]byte, error) { +func (f testMigration) Migrate(ctx context.Context, txn db.Transaction, network *utils.Network, _ utils.SimpleLogger) ([]byte, error) { return f.exec(ctx, txn, network) } @@ -507,7 +507,7 @@ func TestChangeStateDiffStructEmptyDB(t *testing.T) { require.NoError(t, testdb.Update(func(txn db.Transaction) error { migrator := NewBucketMigrator(db.StateUpdatesByBlockNumber, changeStateDiffStruct) require.NoError(t, migrator.Before(nil)) - intermediateState, err := migrator.Migrate(context.Background(), txn, &utils.Mainnet) + intermediateState, err := migrator.Migrate(context.Background(), txn, &utils.Mainnet, nil) require.NoError(t, err) require.Nil(t, intermediateState) @@ -584,7 +584,7 @@ func TestChangeStateDiffStruct(t *testing.T) { require.NoError(t, testdb.Update(func(txn db.Transaction) error { migrator := NewBucketMigrator(db.StateUpdatesByBlockNumber, changeStateDiffStruct) require.NoError(t, migrator.Before(nil)) - intermediateState, err := migrator.Migrate(context.Background(), txn, &utils.Mainnet) + intermediateState, err := migrator.Migrate(context.Background(), txn, &utils.Mainnet, nil) require.NoError(t, err) require.Nil(t, intermediateState) return nil From f977358184101dc955ddebbee25e10a6febe7da0 Mon Sep 17 00:00:00 2001 From: wojciechos Date: Fri, 5 Jul 2024 10:57:28 +0200 Subject: [PATCH 19/69] Fix corrupted db snapshot (#1927) --- README.md | 4 ++-- docs/docs/snapshots.md | 2 +- docs/versioned_docs/version-0.11.8/snapshots.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 914a2f58fa..4dcac4a138 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,7 @@ Use the provided snapshots to quickly sync your Juno node with the current state | Version | Size | Block | Download Link | | ------- | ---- | ----- | ------------- | -| **>=v0.9.2** | **172 GB** | **654464** | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654464.tar) | +| **>=v0.9.2** | **172 GB** | **654881** | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654881.tar) | #### Sepolia @@ -126,7 +126,7 @@ Use the provided snapshots to quickly sync your Juno node with the current state Fetch the snapshot from the provided URL: ```bash - wget -O juno_mainnet.tar https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654464.tar + wget -O juno_mainnet.tar https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654881.tar ``` 2. **Prepare Directory** diff --git a/docs/docs/snapshots.md b/docs/docs/snapshots.md index 9b05cd058f..6fe913fdc4 100644 --- a/docs/docs/snapshots.md +++ b/docs/docs/snapshots.md @@ -10,7 +10,7 @@ You can download a snapshot of the Juno database to reduce the network syncing t | Version | Size | Block | Download Link | | ------------ | ---------- | ---------- | ----------------------------------------------------------------------------------------------------- | -| **>=v0.9.2** | **172 GB** | **654464** | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654464.tar) | +| **>=v0.9.2** | **172 GB** | **654881** | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654881.tar) | ## Sepolia diff --git a/docs/versioned_docs/version-0.11.8/snapshots.md b/docs/versioned_docs/version-0.11.8/snapshots.md index 9b05cd058f..8b817685fe 100644 --- a/docs/versioned_docs/version-0.11.8/snapshots.md +++ b/docs/versioned_docs/version-0.11.8/snapshots.md @@ -10,7 +10,7 @@ You can download a snapshot of the Juno database to reduce the network syncing t | Version | Size | Block | Download Link | | ------------ | ---------- | ---------- | ----------------------------------------------------------------------------------------------------- | -| **>=v0.9.2** | **172 GB** | **654464** | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654464.tar) | +| **>=v0.9.2** | **172 GB** | **654881** | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654881.tar) | ## Sepolia @@ -25,7 +25,7 @@ You can download a snapshot of the Juno database to reduce the network syncing t First, download a snapshot from one of the provided URLs: ```bash -wget -O juno_mainnet.tar https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654464.tar +wget -O juno_mainnet.tar https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654881.tar ``` ### 2. Prepare a directory From 7fd3305a95b36e0189e17a50f0a77b947882011f Mon Sep 17 00:00:00 2001 From: Mario Apra Date: Sat, 6 Jul 2024 15:08:42 +0100 Subject: [PATCH 20/69] Fix how to staging promotion (#1928) Fix how to promote to staging and prod environments Fix how to get DOCKER_IMAGE_TAG: By using GITHUB_ENV, only the steps on the same job will be able to get the value. When trying to get it from steps from different jobs the value is empty. This was causing issues to promote to staging because it was trying to promote EVERYTHING in dev to staging. Luckly there was a check to not allow to overwrite the same tag, so things that were already promoted couldn't be overwritten By using GITHUB_OUTPUT instead, it is now possible to get the variable on any step from any subsequent job Add deployment version verification for staging and production: The CI/CD pipeline has been updated to include a new step for verifying the deployment version in the staging and production environments. This ensures that the correct version of the Docker image is deployed to each environment before running the tests Add set -ux to deployment verification script: - -u will treat any unitialized variable as an error - -x will print the command that is being executed This will make sure that cases where the EXPECTED_VERSION not being passed won't cause any problem. One example where the variable was not set and the job succeeded: https://github.com/NethermindEth/juno/actions/runs/9800486115/job/27062611554#step:3:15 By using -x, it will be useful to understand exactly what's the expected version, so no confusion will be made Add Manual gate to run tests in production Since the deployment to production is a manual process, creating a artificial environment makes it possible for the tests to run only after a deployment is actually done. This avoids the issue where the tests will start to run without the environment be ready. --- .github/workflow-scripts/verify_deployment.sh | 2 ++ .github/workflows/ci-cd-pipeline.yml | 36 +++++++++++++++---- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/.github/workflow-scripts/verify_deployment.sh b/.github/workflow-scripts/verify_deployment.sh index b2a2682b3e..be70f828b4 100644 --- a/.github/workflow-scripts/verify_deployment.sh +++ b/.github/workflow-scripts/verify_deployment.sh @@ -1,5 +1,7 @@ #!/bin/bash +set -ux + URL=$1 EXPECTED_VERSION=$2 MAX_ATTEMPTS=30 diff --git a/.github/workflows/ci-cd-pipeline.yml b/.github/workflows/ci-cd-pipeline.yml index 7c87540485..d0ac28301e 100644 --- a/.github/workflows/ci-cd-pipeline.yml +++ b/.github/workflows/ci-cd-pipeline.yml @@ -21,6 +21,8 @@ permissions: jobs: build_docker_image: runs-on: ubuntu-latest + outputs: + DOCKER_IMAGE_TAG: ${{ steps.set_tag.outputs.DOCKER_IMAGE_TAG }} steps: - name: Checkout @@ -29,8 +31,15 @@ jobs: fetch-depth: 0 - name: Define image tag + id: set_tag run: | - echo "DOCKER_IMAGE_TAG=$(git describe --tags)" >> $GITHUB_ENV + export DOCKER_IMAGE_TAG=$(git describe --tags) + + # This one is to be able to use the image tag in the next steps in this job + echo "DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG" >> $GITHUB_ENV + + # This one is to be able to use the image tag in the next jobs + echo "DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG" >> $GITHUB_OUTPUT - name: Setup Docker Buildx uses: docker/setup-buildx-action@v3 @@ -61,7 +70,8 @@ jobs: uses: actions/checkout@v4 - name: Verify Deployment Version (Dev) - run: bash .github/workflow-scripts/verify_deployment.sh ${{ secrets.DEV_SEPOLIA_URL }} ${{ env.DOCKER_IMAGE_TAG }} + run: | + bash .github/workflow-scripts/verify_deployment.sh ${{ secrets.DEV_SEPOLIA_URL }} ${{ needs.build_docker_image.outputs.DOCKER_IMAGE_TAG }} dev-starknet-rs-tests: needs: [validate_dev] @@ -91,7 +101,11 @@ jobs: - name: Promote to Staging run: | - jf rt dpr juno/${{ env.DOCKER_IMAGE_TAG }} ${{ env.REPO_DEV }} ${{ env.REPO_STAGING }} + jf rt dpr juno/${{ needs.build_docker_image.outputs.DOCKER_IMAGE_TAG }} ${{ env.REPO_DEV }} ${{ env.REPO_STAGING }} + + - name: Verify Deployment Version (Staging) + run: | + bash .github/workflow-scripts/verify_deployment.sh ${{ secrets.STAGING_SEPOLIA_URL }} ${{ needs.build_docker_image.outputs.DOCKER_IMAGE_TAG }} staging-starknet-rs-tests: needs: [promote_to_staging] @@ -121,16 +135,26 @@ jobs: - name: Promote to Production run: | - jf rt dpr juno/${{ env.DOCKER_IMAGE_TAG }} ${{ env.REPO_STAGING }} ${{ env.REPO_PROD }} + jf rt dpr juno/${{ needs.build_docker_image.outputs.DOCKER_IMAGE_TAG }} ${{ env.REPO_STAGING }} ${{ env.REPO_PROD }} - prod-starknet-rs-tests: + test_in_production: needs: [promote_to_production] + runs-on: ubuntu-latest + environment: + name: ProductionTests # Artificial gate to enforce manual approval + steps: + - name: Starting production tests + run: | + echo "Tests in production will start shortly." + + prod-starknet-rs-tests: + needs: [test_in_production] uses: ./.github/workflows/starknet-rs-tests.yml secrets: STARKNET_RPC: ${{ secrets.PROD_SEPOLIA_URL }}/v0_6 prod-starknet-js-tests: - needs: [promote_to_production] + needs: [test_in_production] uses: ./.github/workflows/starknet-js-tests.yml secrets: TEST_RPC_URL: ${{ secrets.PROD_SEPOLIA_URL }}/v0_7 From 40229260e3607107c5fbea81c743effbd600f5fb Mon Sep 17 00:00:00 2001 From: Mario Apra Date: Mon, 8 Jul 2024 15:12:03 +0100 Subject: [PATCH 21/69] Fix indentation in ci-cd-pipeline.yml (#1931) The test_in_production job had two extra spaces, making the YAML file invalid, since it couldn't detect that this was a job but as a step, and steps can't have the same attributes as jobs --- .github/workflows/ci-cd-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-cd-pipeline.yml b/.github/workflows/ci-cd-pipeline.yml index d0ac28301e..d5c8662a1b 100644 --- a/.github/workflows/ci-cd-pipeline.yml +++ b/.github/workflows/ci-cd-pipeline.yml @@ -137,7 +137,7 @@ jobs: run: | jf rt dpr juno/${{ needs.build_docker_image.outputs.DOCKER_IMAGE_TAG }} ${{ env.REPO_STAGING }} ${{ env.REPO_PROD }} - test_in_production: + test_in_production: needs: [promote_to_production] runs-on: ubuntu-latest environment: From 65c0d6c693d99b880a635a6ea7e6bbba09e27570 Mon Sep 17 00:00:00 2001 From: Kirill Date: Tue, 9 Jul 2024 01:02:26 +0300 Subject: [PATCH 22/69] Update p2p implementation according to recent spec (#1858) --- Makefile | 15 +- adapters/core2p2p/block.go | 48 +- adapters/core2p2p/class.go | 18 +- adapters/core2p2p/felt.go | 10 + adapters/core2p2p/receipt.go | 29 +- adapters/core2p2p/state.go | 16 +- adapters/core2p2p/transaction.go | 90 +- adapters/p2p2core/block.go | 53 +- adapters/p2p2core/class.go | 80 +- adapters/p2p2core/felt.go | 5 + adapters/p2p2core/receipt.go | 12 +- adapters/p2p2core/state.go | 51 +- adapters/p2p2core/transaction.go | 88 +- core/block.go | 2 +- core/transaction.go | 4 + p2p/p2p.go | 18 +- p2p/starknet/block_bodies.go | 226 ---- p2p/starknet/client.go | 39 +- p2p/starknet/handlers.go | 389 ++++-- p2p/starknet/ids.go | 26 +- p2p/starknet/p2p/proto/block.proto | 86 -- p2p/starknet/p2p/proto/class.proto | 57 + p2p/starknet/p2p/proto/common.proto | 54 +- p2p/starknet/p2p/proto/discovery.proto | 19 - p2p/starknet/p2p/proto/event.proto | 24 +- p2p/starknet/p2p/proto/header.proto | 56 + p2p/starknet/p2p/proto/mempool.proto | 30 - p2p/starknet/p2p/proto/receipt.proto | 89 +- p2p/starknet/p2p/proto/snapshot.proto | 109 -- p2p/starknet/p2p/proto/state.proto | 79 +- p2p/starknet/p2p/proto/transaction.proto | 200 +-- p2p/starknet/spec/block.pb.go | 1096 ---------------- p2p/starknet/spec/class.pb.go | 821 ++++++++++++ p2p/starknet/spec/common.pb.go | 452 ++++--- p2p/starknet/spec/event.pb.go | 192 +-- p2p/starknet/spec/header.pb.go | 699 ++++++++++ p2p/starknet/spec/receipt.pb.go | 812 ++++-------- p2p/starknet/spec/snapshot.pb.go | 1509 ---------------------- p2p/starknet/spec/state.pb.go | 887 +++---------- p2p/starknet/spec/transaction.pb.go | 1342 ++++++++++--------- p2p/starknet/starknet_test.go | 2 +- p2p/sync.go | 478 +++---- utils/network.go | 5 - 43 files changed, 4251 insertions(+), 6066 deletions(-) delete mode 100644 p2p/starknet/block_bodies.go delete mode 100644 p2p/starknet/p2p/proto/block.proto create mode 100644 p2p/starknet/p2p/proto/class.proto delete mode 100644 p2p/starknet/p2p/proto/discovery.proto create mode 100644 p2p/starknet/p2p/proto/header.proto delete mode 100644 p2p/starknet/p2p/proto/mempool.proto delete mode 100644 p2p/starknet/p2p/proto/snapshot.proto delete mode 100644 p2p/starknet/spec/block.pb.go create mode 100644 p2p/starknet/spec/class.pb.go create mode 100644 p2p/starknet/spec/header.pb.go delete mode 100644 p2p/starknet/spec/snapshot.pb.go diff --git a/Makefile b/Makefile index 87cadb6cd3..e2bae30eec 100644 --- a/Makefile +++ b/Makefile @@ -87,7 +87,7 @@ clean: ## clean project builds help: ## show this help @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' -feedernode: +feedernode: juno-cached ./build/juno \ --network=sepolia \ --log-level=debug \ @@ -98,7 +98,9 @@ feedernode: --p2p-private-key="5f6cdc3aebcc74af494df054876100368ef6126e3a33fa65b90c765b381ffc37a0a63bbeeefab0740f24a6a38dabb513b9233254ad0020c721c23e69bc820089" \ --metrics-port=9090 -node1: +node1: juno-cached +# todo remove rm before merge + rm -rf ./p2p-dbs/node1/ && \ ./build/juno \ --network=sepolia \ --log-level=debug \ @@ -132,3 +134,12 @@ node3: --p2p-private-key="54a695e2a5d5717d5ba8730efcafe6f17251a1955733cffc55a4085fbf7f5d2c1b4009314092069ef7ca9b364ce3eb3072531c64dfb2799c6bad76720a5bdff0" \ --metrics-port=9093 +pathfinder: juno-cached + ./build/juno \ + --network=sepolia \ + --log-level=debug \ + --db-path=./p2p-dbs/node-pathfinder \ + --p2p \ + --p2p-peers=/ip4/127.0.0.1/tcp/8888/p2p/12D3KooWF1JrZWQoBiBSjsFSuLbDiDvqcmJQRLaFQLmpVkHA9duk \ + --p2p-private-key="54a695e2a5d5717d5ba8730efcafe6f17251a1955733cffc55a4085fbf7f5d2c1b4009314092069ef7ca9b364ce3eb3072531c64dfb2799c6bad76720a5bdff0" \ + --metrics-port=9094 diff --git a/adapters/core2p2p/block.go b/adapters/core2p2p/block.go index 262c35ef86..ea290e8f04 100644 --- a/adapters/core2p2p/block.go +++ b/adapters/core2p2p/block.go @@ -1,13 +1,12 @@ package core2p2p import ( - "time" + "fmt" "github.com/NethermindEth/juno/core" "github.com/NethermindEth/juno/core/felt" "github.com/NethermindEth/juno/p2p/starknet/spec" "github.com/NethermindEth/juno/utils" - "google.golang.org/protobuf/types/known/timestamppb" ) func AdaptBlockID(header *core.Header) *spec.BlockID { @@ -28,29 +27,44 @@ func AdaptSignature(sig []*felt.Felt) *spec.ConsensusSignature { } } -func AdaptHeader(header *core.Header, commitments *core.BlockCommitments) *spec.BlockHeader { - return &spec.BlockHeader{ +func AdaptHeader(header *core.Header, commitments *core.BlockCommitments) *spec.SignedBlockHeader { + return &spec.SignedBlockHeader{ + BlockHash: AdaptHash(header.Hash), ParentHash: AdaptHash(header.ParentHash), Number: header.Number, - Time: timestamppb.New(time.Unix(int64(header.Timestamp), 0)), + Time: header.Timestamp, SequencerAddress: AdaptAddress(header.SequencerAddress), - ProofFact: nil, // not defined yet - Receipts: nil, // not defined yet - StateDiffs: nil, // not defined yet - State: &spec.Patricia{ - Height: core.ContractStorageTrieHeight, - Root: AdaptHash(header.GlobalStateRoot), - }, - Transactions: &spec.Merkle{ - NLeaves: uint32(header.TransactionCount), + StateRoot: AdaptHash(header.GlobalStateRoot), + Transactions: &spec.Patricia{ + NLeaves: header.TransactionCount, Root: AdaptHash(commitments.TransactionCommitment), }, - Events: &spec.Merkle{ - NLeaves: uint32(header.EventCount), + Events: &spec.Patricia{ + NLeaves: header.EventCount, Root: AdaptHash(commitments.EventCommitment), }, + // todo fill receipts + Receipts: nil, ProtocolVersion: header.ProtocolVersion, - GasPrice: AdaptFelt(header.GasPrice), + GasPriceFri: AdaptUint128(header.GasPrice), + Signatures: utils.Map(header.Signatures, AdaptSignature), + // todo(kirill) set these fields + StateDiffCommitment: nil, + GasPriceWei: AdaptUint128(header.GasPriceSTRK), + DataGasPriceFri: AdaptUint128(header.L1DataGasPrice.PriceInFri), + DataGasPriceWei: AdaptUint128(header.L1DataGasPrice.PriceInWei), + L1DataAvailabilityMode: adaptL1DA(header.L1DAMode), + } +} + +func adaptL1DA(da core.L1DAMode) spec.L1DataAvailabilityMode { + switch da { + case core.Calldata: + return spec.L1DataAvailabilityMode_Calldata + case core.Blob: + return spec.L1DataAvailabilityMode_Blob + default: + panic(fmt.Errorf("unknown L1DAMode %v", da)) } } diff --git a/adapters/core2p2p/class.go b/adapters/core2p2p/class.go index d23adac275..0b3badf537 100644 --- a/adapters/core2p2p/class.go +++ b/adapters/core2p2p/class.go @@ -1,7 +1,6 @@ package core2p2p import ( - "encoding/json" "fmt" "github.com/NethermindEth/juno/core" @@ -19,25 +18,20 @@ func AdaptClass(class core.Class) *spec.Class { return &spec.Class{ Class: &spec.Class_Cairo0{ Cairo0: &spec.Cairo0Class{ - Abi: v.Abi, + Abi: string(v.Abi), Externals: utils.Map(v.Externals, adaptEntryPoint), L1Handlers: utils.Map(v.L1Handlers, adaptEntryPoint), Constructors: utils.Map(v.Constructors, adaptEntryPoint), - Program: []byte(v.Program), + Program: v.Program, }, }, + Domain: 0, // todo(kirill) recheck } case *core.Cairo1Class: - // Todo: Add compiled class struct to p2p spec. For now we will use json encoding - compiledBytes, err := json.Marshal(v.Compiled) - if err != nil { - panic(fmt.Errorf("unable to marshal compiled class hash to json: %v", err)) - } - return &spec.Class{ Class: &spec.Class_Cairo1{ Cairo1: &spec.Cairo1Class{ - Abi: []byte(v.Abi), + Abi: v.Abi, EntryPoints: &spec.Cairo1EntryPoints{ Externals: utils.Map(v.EntryPoints.External, adaptSierra), L1Handlers: utils.Map(v.EntryPoints.L1Handler, adaptSierra), @@ -45,9 +39,9 @@ func AdaptClass(class core.Class) *spec.Class { }, Program: utils.Map(v.Program, AdaptFelt), ContractClassVersion: v.SemanticVersion, - Compiled: compiledBytes, }, }, + Domain: 0, // todo(kirill) recheck } default: panic(fmt.Errorf("unsupported cairo class %T (version=%d)", v, class.Version())) @@ -64,6 +58,6 @@ func adaptSierra(e core.SierraEntryPoint) *spec.SierraEntryPoint { func adaptEntryPoint(e core.EntryPoint) *spec.EntryPoint { return &spec.EntryPoint{ Selector: AdaptFelt(e.Selector), - Offset: AdaptFelt(e.Offset), + Offset: e.Offset.Uint64(), } } diff --git a/adapters/core2p2p/felt.go b/adapters/core2p2p/felt.go index cfaa9ab396..67cf3cfc84 100644 --- a/adapters/core2p2p/felt.go +++ b/adapters/core2p2p/felt.go @@ -45,3 +45,13 @@ func AdaptAddress(f *felt.Felt) *spec.Address { Elements: f.Marshal(), } } + +func AdaptUint128(f *felt.Felt) *spec.Uint128 { + // bits represents value in little endian byte order + // i.e. first is least significant byte + bits := f.Bits() + return &spec.Uint128{ + Low: bits[0], + High: bits[1], + } +} diff --git a/adapters/core2p2p/receipt.go b/adapters/core2p2p/receipt.go index 6ac6c87aac..dafc692cf8 100644 --- a/adapters/core2p2p/receipt.go +++ b/adapters/core2p2p/receipt.go @@ -2,6 +2,7 @@ package core2p2p import ( "github.com/NethermindEth/juno/core" + "github.com/NethermindEth/juno/core/felt" "github.com/NethermindEth/juno/p2p/starknet/spec" "github.com/NethermindEth/juno/utils" ) @@ -62,13 +63,28 @@ func AdaptReceipt(r *core.TransactionReceipt, txn core.Transaction) *spec.Receip } func receiptCommon(r *core.TransactionReceipt) *spec.Receipt_Common { + var revertReason *string + if r.RevertReason != "" { + revertReason = &r.RevertReason + } + return &spec.Receipt_Common{ - TransactionHash: AdaptHash(r.TransactionHash), ActualFee: AdaptFelt(r.Fee), + PriceUnit: adaptPriceUnit(r.FeeUnit), MessagesSent: utils.Map(r.L2ToL1Message, AdaptMessageToL1), ExecutionResources: AdaptExecutionResources(r.ExecutionResources), - RevertReason: r.RevertReason, - ConsumedMessage: nil, // todo(kirill) recheck + RevertReason: revertReason, + } +} + +func adaptPriceUnit(unit core.FeeUnit) spec.PriceUnit { + switch unit { + case core.WEI: + return spec.PriceUnit_Wei + case core.STRK: + return spec.PriceUnit_Fri // todo(kirill) recheck + default: + panic("unreachable adaptPriceUnit") } } @@ -85,6 +101,11 @@ func AdaptExecutionResources(er *core.ExecutionResources) *spec.Receipt_Executio return nil } + var l1Gas, l1DataGas *spec.Felt252 + if da := er.DataAvailability; da != nil { // todo(kirill) check that it might be null + l1Gas = AdaptFelt(new(felt.Felt).SetUint64(da.L1Gas)) + l1DataGas = AdaptFelt(new(felt.Felt).SetUint64(da.L1DataGas)) + } return &spec.Receipt_ExecutionResources{ Builtins: &spec.Receipt_ExecutionResources_BuiltinCounter{ Bitwise: uint32(er.BuiltinInstanceCounter.Bitwise), @@ -98,5 +119,7 @@ func AdaptExecutionResources(er *core.ExecutionResources) *spec.Receipt_Executio }, Steps: uint32(er.Steps), MemoryHoles: uint32(er.MemoryHoles), + L1Gas: l1Gas, + L1DataGas: l1DataGas, } } diff --git a/adapters/core2p2p/state.go b/adapters/core2p2p/state.go index 3ebfcbd0c8..ef4d023541 100644 --- a/adapters/core2p2p/state.go +++ b/adapters/core2p2p/state.go @@ -6,12 +6,13 @@ import ( "github.com/NethermindEth/juno/utils" ) -func AdaptStateDiff(addr, nonce *felt.Felt, diff map[felt.Felt]*felt.Felt) *spec.StateDiff_ContractDiff { - return &spec.StateDiff_ContractDiff{ +func AdaptContractDiff(addr, nonce, classHash *felt.Felt, storageDiff map[felt.Felt]*felt.Felt) *spec.ContractDiff { + return &spec.ContractDiff{ Address: AdaptAddress(addr), Nonce: AdaptFelt(nonce), - ClassHash: nil, // This will need to be set if deployed_contracts and replaced_classes are removed from StateDiff - Values: AdaptStorageDiff(diff), + ClassHash: AdaptHash(classHash), // This will need to be set if deployed_contracts and replaced_classes are removed from StateDiff + Values: AdaptStorageDiff(storageDiff), + Domain: 0, } } @@ -23,10 +24,3 @@ func AdaptStorageDiff(diff map[felt.Felt]*felt.Felt) []*spec.ContractStoredValue } }) } - -func AdaptAddressClassHashPair(address felt.Felt, classHash *felt.Felt) *spec.StateDiff_ContractAddrToClassHash { - return &spec.StateDiff_ContractAddrToClassHash{ - ContractAddr: AdaptAddress(&address), - ClassHash: AdaptHash(classHash), - } -} diff --git a/adapters/core2p2p/transaction.go b/adapters/core2p2p/transaction.go index 358a884856..d8ce842e3e 100644 --- a/adapters/core2p2p/transaction.go +++ b/adapters/core2p2p/transaction.go @@ -6,6 +6,7 @@ import ( "github.com/NethermindEth/juno/core" "github.com/NethermindEth/juno/core/felt" "github.com/NethermindEth/juno/p2p/starknet/spec" + "github.com/NethermindEth/juno/utils" ) //nolint:funlen,gocyclo @@ -35,18 +36,16 @@ func AdaptTransaction(transaction core.Transaction) *spec.Transaction { case tx.Version.Is(3): specTx.Txn = &spec.Transaction_DeployAccountV3_{ DeployAccountV3: &spec.Transaction_DeployAccountV3{ - MaxFee: AdaptFelt(tx.MaxFee), - Signature: AdaptAccountSignature(tx.Signature()), - ClassHash: AdaptHash(tx.ClassHash), - Nonce: AdaptFelt(tx.Nonce), - AddressSalt: AdaptFelt(tx.ContractAddressSalt), - Calldata: AdaptFeltSlice(tx.ConstructorCallData), - L1Gas: adaptResourceLimits(tx.ResourceBounds[core.ResourceL1Gas]), - L2Gas: adaptResourceLimits(tx.ResourceBounds[core.ResourceL2Gas]), - Tip: AdaptFelt(new(felt.Felt).SetUint64(tx.Tip)), - Paymaster: nil, - NonceDomain: fmt.Sprintf("%v", tx.NonceDAMode), - FeeDomain: fmt.Sprintf("%v", tx.FeeDAMode), + Signature: AdaptAccountSignature(tx.Signature()), + ClassHash: AdaptHash(tx.ClassHash), + Nonce: AdaptFelt(tx.Nonce), + AddressSalt: AdaptFelt(tx.ContractAddressSalt), + Calldata: AdaptFeltSlice(tx.ConstructorCallData), + ResourceBounds: adaptResourceBounds(tx.ResourceBounds), + Tip: tx.Tip, + PaymasterData: utils.Map(tx.PaymasterData, AdaptFelt), + NonceDataAvailabilityMode: adaptVolitionDomain(tx.NonceDAMode), + FeeDataAvailabilityMode: adaptVolitionDomain(tx.FeeDAMode), }, } default: @@ -81,24 +80,23 @@ func AdaptTransaction(transaction core.Transaction) *spec.Transaction { Signature: AdaptAccountSignature(tx.Signature()), ClassHash: AdaptHash(tx.ClassHash), Nonce: AdaptFelt(tx.Nonce), - CompiledClassHash: AdaptFelt(tx.CompiledClassHash), + CompiledClassHash: AdaptHash(tx.CompiledClassHash), }, } case tx.Version.Is(3): specTx.Txn = &spec.Transaction_DeclareV3_{ DeclareV3: &spec.Transaction_DeclareV3{ - Sender: AdaptAddress(tx.SenderAddress), - MaxFee: AdaptFelt(tx.MaxFee), - Signature: AdaptAccountSignature(tx.Signature()), - ClassHash: AdaptHash(tx.ClassHash), - Nonce: AdaptFelt(tx.Nonce), - CompiledClassHash: AdaptFelt(tx.CompiledClassHash), - L1Gas: adaptResourceLimits(tx.ResourceBounds[core.ResourceL1Gas]), - L2Gas: adaptResourceLimits(tx.ResourceBounds[core.ResourceL2Gas]), - Tip: AdaptFelt(new(felt.Felt).SetUint64(tx.Tip)), - Paymaster: nil, - NonceDomain: fmt.Sprintf("%v", tx.NonceDAMode), - FeeDomain: fmt.Sprintf("%v", tx.FeeDAMode), + Sender: AdaptAddress(tx.SenderAddress), + Signature: AdaptAccountSignature(tx.Signature()), + ClassHash: AdaptHash(tx.ClassHash), + Nonce: AdaptFelt(tx.Nonce), + CompiledClassHash: AdaptHash(tx.CompiledClassHash), + ResourceBounds: adaptResourceBounds(tx.ResourceBounds), + Tip: tx.Tip, + PaymasterData: utils.Map(tx.PaymasterData, AdaptFelt), + AccountDeploymentData: utils.Map(tx.AccountDeploymentData, AdaptFelt), + NonceDataAvailabilityMode: adaptVolitionDomain(tx.NonceDAMode), + FeeDataAvailabilityMode: adaptVolitionDomain(tx.FeeDAMode), }, } default: @@ -129,17 +127,16 @@ func AdaptTransaction(transaction core.Transaction) *spec.Transaction { case tx.Version.Is(3): specTx.Txn = &spec.Transaction_InvokeV3_{ InvokeV3: &spec.Transaction_InvokeV3{ - Sender: AdaptAddress(tx.SenderAddress), - MaxFee: AdaptFelt(tx.MaxFee), - Signature: AdaptAccountSignature(tx.Signature()), - Calldata: AdaptFeltSlice(tx.CallData), - Nonce: AdaptFelt(tx.Nonce), - L1Gas: adaptResourceLimits(tx.ResourceBounds[core.ResourceL1Gas]), - L2Gas: adaptResourceLimits(tx.ResourceBounds[core.ResourceL2Gas]), - Tip: AdaptFelt(new(felt.Felt).SetUint64(tx.Tip)), - Paymaster: nil, - NonceDomain: fmt.Sprintf("%v", tx.NonceDAMode), - FeeDomain: fmt.Sprintf("%v", tx.FeeDAMode), + Sender: AdaptAddress(tx.SenderAddress), + Signature: AdaptAccountSignature(tx.Signature()), + Calldata: AdaptFeltSlice(tx.CallData), + ResourceBounds: adaptResourceBounds(tx.ResourceBounds), + Tip: tx.Tip, + PaymasterData: utils.Map(tx.PaymasterData, AdaptFelt), + AccountDeploymentData: utils.Map(tx.AccountDeploymentData, AdaptFelt), + NonceDataAvailabilityMode: adaptVolitionDomain(tx.NonceDAMode), + FeeDataAvailabilityMode: adaptVolitionDomain(tx.FeeDAMode), + Nonce: AdaptFelt(tx.Nonce), }, } default: @@ -160,19 +157,27 @@ func adaptResourceLimits(bounds core.ResourceBounds) *spec.ResourceLimits { } } +func adaptResourceBounds(rb map[core.Resource]core.ResourceBounds) *spec.ResourceBounds { + return &spec.ResourceBounds{ + L1Gas: adaptResourceLimits(rb[core.ResourceL1Gas]), + L2Gas: adaptResourceLimits(rb[core.ResourceL2Gas]), + } +} + func adaptDeployTransaction(tx *core.DeployTransaction) *spec.Transaction_Deploy_ { return &spec.Transaction_Deploy_{ Deploy: &spec.Transaction_Deploy{ ClassHash: AdaptHash(tx.ClassHash), AddressSalt: AdaptFelt(tx.ContractAddressSalt), Calldata: AdaptFeltSlice(tx.ConstructorCallData), + Version: 0, // todo(kirill) remove field from spec? tx is deprecated so no future versions }, } } func adaptL1HandlerTransaction(tx *core.L1HandlerTransaction) *spec.Transaction_L1Handler { return &spec.Transaction_L1Handler{ - L1Handler: &spec.Transaction_L1HandlerV1{ + L1Handler: &spec.Transaction_L1HandlerV0{ Nonce: AdaptFelt(tx.Nonce), Address: AdaptAddress(tx.ContractAddress), EntryPointSelector: AdaptFelt(tx.EntryPointSelector), @@ -180,3 +185,14 @@ func adaptL1HandlerTransaction(tx *core.L1HandlerTransaction) *spec.Transaction_ }, } } + +func adaptVolitionDomain(mode core.DataAvailabilityMode) spec.VolitionDomain { + switch mode { + case core.DAModeL1: + return spec.VolitionDomain_L1 + case core.DAModeL2: + return spec.VolitionDomain_L2 + default: + panic("unreachable in adaptVolitionDomain") + } +} diff --git a/adapters/p2p2core/block.go b/adapters/p2p2core/block.go index 5c29ed0c83..4b54d12f9a 100644 --- a/adapters/p2p2core/block.go +++ b/adapters/p2p2core/block.go @@ -1,10 +1,13 @@ package p2p2core import ( + "fmt" + "github.com/NethermindEth/juno/core" "github.com/NethermindEth/juno/core/felt" "github.com/NethermindEth/juno/p2p/starknet/spec" "github.com/NethermindEth/juno/utils" + "github.com/bits-and-blooms/bloom/v3" ) func AdaptEvent(e *spec.Event) *core.Event { @@ -19,27 +22,41 @@ func AdaptEvent(e *spec.Event) *core.Event { } } -func AdaptSignature(cs *spec.ConsensusSignature) []*felt.Felt { - return []*felt.Felt{AdaptFelt(cs.R), AdaptFelt(cs.S)} -} - -func AdaptBlockHeader(h *spec.BlockHeader, signatures []*spec.ConsensusSignature) core.Header { - return core.Header{ - Hash: nil, // todo: add this when building the block +func AdaptBlockHeader(h *spec.SignedBlockHeader, eventsBloom *bloom.BloomFilter) *core.Header { + return &core.Header{ + Hash: AdaptHash(h.BlockHash), ParentHash: AdaptHash(h.ParentHash), Number: h.Number, - GlobalStateRoot: AdaptHash(h.State.Root), + GlobalStateRoot: AdaptHash(h.StateRoot), SequencerAddress: AdaptAddress(h.SequencerAddress), - TransactionCount: uint64(h.Transactions.NLeaves), - EventCount: uint64(h.Events.NLeaves), - Timestamp: uint64(h.Time.AsTime().Unix()), + TransactionCount: h.Transactions.NLeaves, + EventCount: h.Events.NLeaves, + Timestamp: h.Time, ProtocolVersion: h.ProtocolVersion, - EventsBloom: nil, // Todo: add this in when building the block - GasPrice: AdaptFelt(h.GasPrice), - Signatures: utils.Map(signatures, AdaptSignature), - // todo(kirill) recheck fields - GasPriceSTRK: nil, - L1DAMode: 0, - L1DataGasPrice: nil, + EventsBloom: eventsBloom, + Signatures: utils.Map(h.Signatures, adaptSignature), + L1DAMode: adaptDA(h.L1DataAvailabilityMode), + L1DataGasPrice: &core.GasPrice{ + PriceInWei: AdaptUint128(h.DataGasPriceWei), + PriceInFri: AdaptUint128(h.DataGasPriceFri), + }, + // todo(kirill) check prices + GasPrice: AdaptUint128(h.GasPriceWei), + GasPriceSTRK: AdaptUint128(h.GasPriceFri), + } +} + +func adaptSignature(cs *spec.ConsensusSignature) []*felt.Felt { + return []*felt.Felt{AdaptFelt(cs.R), AdaptFelt(cs.S)} +} + +func adaptDA(da spec.L1DataAvailabilityMode) core.L1DAMode { + switch da { + case spec.L1DataAvailabilityMode_Calldata: + return core.Calldata + case spec.L1DataAvailabilityMode_Blob: + return core.Blob + default: + panic(fmt.Errorf("unsupported DA mode %v", da)) } } diff --git a/adapters/p2p2core/class.go b/adapters/p2p2core/class.go index bef52e82bc..8094a03006 100644 --- a/adapters/p2p2core/class.go +++ b/adapters/p2p2core/class.go @@ -4,9 +4,12 @@ import ( "encoding/json" "fmt" + "github.com/NethermindEth/juno/adapters/sn2core" "github.com/NethermindEth/juno/core" "github.com/NethermindEth/juno/core/crypto" + "github.com/NethermindEth/juno/core/felt" "github.com/NethermindEth/juno/p2p/starknet/spec" + "github.com/NethermindEth/juno/starknet" "github.com/NethermindEth/juno/utils" ) @@ -17,44 +20,54 @@ func AdaptClass(class *spec.Class) core.Class { switch cls := class.Class.(type) { case *spec.Class_Cairo0: + adaptEP := func(points []*spec.EntryPoint) []core.EntryPoint { + // usage of NonNilSlice is essential because relevant core class fields are non nil + return utils.Map(utils.NonNilSlice(points), adaptEntryPoint) + } + cairo0 := cls.Cairo0 return &core.Cairo0Class{ - Abi: cairo0.Abi, - Externals: utils.Map(cairo0.Externals, adaptEntryPoint), - L1Handlers: utils.Map(cairo0.L1Handlers, adaptEntryPoint), - Constructors: utils.Map(cairo0.Constructors, adaptEntryPoint), - Program: string(cairo0.Program), + Abi: json.RawMessage(cairo0.Abi), + Externals: adaptEP(cairo0.Externals), + L1Handlers: adaptEP(cairo0.L1Handlers), + Constructors: adaptEP(cairo0.Constructors), + Program: cairo0.Program, } case *spec.Class_Cairo1: cairo1 := cls.Cairo1 - abiHash, err := crypto.StarknetKeccak(cairo1.Abi) + abiHash, err := crypto.StarknetKeccak([]byte(cairo1.Abi)) if err != nil { panic(err) } - // Todo: remove once compiled class hash is added to p2p spec. - compiledC := new(core.CompiledClass) - if err := json.Unmarshal(cairo1.Compiled, compiledC); err != nil { - panic(fmt.Errorf("unable to unmarshal json compiled class: %v", err)) + program := utils.Map(cairo1.Program, AdaptFelt) + compiled, err := createCompiledClass(cairo1) + if err != nil { + panic(err) } - program := utils.Map(cairo1.Program, AdaptFelt) + adaptEP := func(points []*spec.SierraEntryPoint) []core.SierraEntryPoint { + // usage of NonNilSlice is essential because relevant core class fields are non nil + return utils.Map(utils.NonNilSlice(points), adaptSierra) + } + + entryPoints := cairo1.EntryPoints return &core.Cairo1Class{ - Abi: string(cairo1.Abi), + Abi: cairo1.Abi, AbiHash: abiHash, EntryPoints: struct { Constructor []core.SierraEntryPoint External []core.SierraEntryPoint L1Handler []core.SierraEntryPoint }{ - Constructor: utils.Map(cairo1.EntryPoints.Constructors, adaptSierra), - External: utils.Map(cairo1.EntryPoints.Externals, adaptSierra), - L1Handler: utils.Map(cairo1.EntryPoints.L1Handlers, adaptSierra), + Constructor: adaptEP(entryPoints.Constructors), + External: adaptEP(entryPoints.Externals), + L1Handler: adaptEP(entryPoints.L1Handlers), }, Program: program, ProgramHash: crypto.PoseidonArray(program...), SemanticVersion: cairo1.ContractClassVersion, - Compiled: compiledC, + Compiled: compiled, } default: panic(fmt.Errorf("unsupported class %T", cls)) @@ -71,6 +84,39 @@ func adaptSierra(e *spec.SierraEntryPoint) core.SierraEntryPoint { func adaptEntryPoint(e *spec.EntryPoint) core.EntryPoint { return core.EntryPoint{ Selector: AdaptFelt(e.Selector), - Offset: AdaptFelt(e.Offset), + Offset: new(felt.Felt).SetUint64(e.Offset), + } +} + +func createCompiledClass(cairo1 *spec.Cairo1Class) (*core.CompiledClass, error) { + if cairo1 == nil { + return nil, nil + } + + adapt := func(ep *spec.SierraEntryPoint) starknet.SierraEntryPoint { + return starknet.SierraEntryPoint{ + Index: ep.Index, + Selector: AdaptFelt(ep.Selector), + } } + ep := cairo1.EntryPoints + def := &starknet.SierraDefinition{ + Abi: cairo1.Abi, + EntryPoints: starknet.SierraEntryPoints{ + // WARNING: usage of utils.NonNilSlice is essential, otherwise compilation will finish with errors + // todo move NonNilSlice to Compile ? + Constructor: utils.Map(utils.NonNilSlice(ep.Constructors), adapt), + External: utils.Map(utils.NonNilSlice(ep.Externals), adapt), + L1Handler: utils.Map(utils.NonNilSlice(ep.L1Handlers), adapt), + }, + Program: utils.Map(cairo1.Program, AdaptFelt), + Version: cairo1.ContractClassVersion, + } + + compiledClass, err := starknet.Compile(def) + if err != nil { + return nil, err + } + + return sn2core.AdaptCompiledClass(compiledClass) } diff --git a/adapters/p2p2core/felt.go b/adapters/p2p2core/felt.go index 5e558f6433..62c5f64cd7 100644 --- a/adapters/p2p2core/felt.go +++ b/adapters/p2p2core/felt.go @@ -29,3 +29,8 @@ func adapt(v interface{ GetElements() []byte }) *felt.Felt { return new(felt.Felt).SetBytes(v.GetElements()) } + +func AdaptUint128(u *spec.Uint128) *felt.Felt { + // todo handle u128 + return &felt.Zero +} diff --git a/adapters/p2p2core/receipt.go b/adapters/p2p2core/receipt.go index 32383fe7dd..d53f9e54b2 100644 --- a/adapters/p2p2core/receipt.go +++ b/adapters/p2p2core/receipt.go @@ -2,11 +2,13 @@ package p2p2core import ( "github.com/NethermindEth/juno/core" + "github.com/NethermindEth/juno/core/felt" "github.com/NethermindEth/juno/p2p/starknet/spec" "github.com/NethermindEth/juno/utils" ) -func AdaptReceipt(r *spec.Receipt) *core.TransactionReceipt { +// todo change type of txHash to spec +func AdaptReceipt(r *spec.Receipt, txHash *felt.Felt) *core.TransactionReceipt { var common *spec.Receipt_Common switch r.Type.(type) { @@ -29,9 +31,9 @@ func AdaptReceipt(r *spec.Receipt) *core.TransactionReceipt { ExecutionResources: adaptExecutionResources(common.ExecutionResources), L1ToL2Message: nil, L2ToL1Message: utils.Map(common.MessagesSent, adaptMessageToL1), - TransactionHash: AdaptHash(common.TransactionHash), - Reverted: common.RevertReason != "", // todo is it correct? - RevertReason: common.RevertReason, + TransactionHash: txHash, + Reverted: common.RevertReason != nil, // todo is it correct? + RevertReason: common.GetRevertReason(), } } @@ -60,7 +62,7 @@ func adaptExecutionResources(er *spec.Receipt_ExecutionResources) *core.Executio func adaptMessageToL1(m *spec.MessageToL1) *core.L2ToL1Message { return &core.L2ToL1Message{ From: AdaptFelt(m.FromAddress), - Payload: utils.Map(m.Payload, AdaptFelt), To: AdaptEthAddress(m.ToAddress), + Payload: utils.Map(m.Payload, AdaptFelt), } } diff --git a/adapters/p2p2core/state.go b/adapters/p2p2core/state.go index fa6e857c37..a51958798c 100644 --- a/adapters/p2p2core/state.go +++ b/adapters/p2p2core/state.go @@ -1,15 +1,17 @@ package p2p2core import ( + "errors" "fmt" "github.com/NethermindEth/juno/core" "github.com/NethermindEth/juno/core/felt" + "github.com/NethermindEth/juno/db" "github.com/NethermindEth/juno/p2p/starknet/spec" "github.com/NethermindEth/juno/utils" ) -func AdaptStateDiff(s *spec.StateDiff, classes []*spec.Class) *core.StateDiff { +func AdaptStateDiff(reader core.StateReader, contractDiffs []*spec.ContractDiff, classes []*spec.Class) *core.StateDiff { var ( declaredV0Classes []*felt.Felt declaredV1Classes = make(map[felt.Felt]*felt.Felt) @@ -25,28 +27,60 @@ func AdaptStateDiff(s *spec.StateDiff, classes []*spec.Class) *core.StateDiff { declaredV0Classes = append(declaredV0Classes, h) case *core.Cairo1Class: declaredV1Classes[*h] = c.Compiled.Hash() + // todo add type? } } + var deployedContracts, replacedClasses []addrToClassHash // addr -> {key -> value, ...} storageDiffs := make(map[felt.Felt]map[felt.Felt]*felt.Felt) nonces := make(map[felt.Felt]*felt.Felt) - for _, diff := range s.ContractDiffs { + for _, diff := range contractDiffs { address := AdaptAddress(diff.Address) if diff.Nonce != nil { nonces[*address] = AdaptFelt(diff.Nonce) } storageDiffs[*address] = utils.ToMap(diff.Values, adaptStoredValue) + + // todo recheck this logic + if diff.ClassHash != nil { + addrToClsHash := addrToClassHash{ + addr: diff.Address, + classHash: diff.ClassHash, + } + + var stateClassHash *felt.Felt + if reader == nil { + // zero block + stateClassHash = &felt.Zero + } else { + var err error + stateClassHash, err = reader.ContractClassHash(address) + if err != nil { + if errors.Is(err, db.ErrKeyNotFound) { + stateClassHash = &felt.Zero + } else { + panic(err) + } + } + } + + if !stateClassHash.IsZero() { + replacedClasses = append(replacedClasses, addrToClsHash) + } else { + deployedContracts = append(deployedContracts, addrToClsHash) + } + } } return &core.StateDiff{ StorageDiffs: storageDiffs, Nonces: nonces, - DeployedContracts: utils.ToMap(s.DeployedContracts, adaptAddrToClassHash), + DeployedContracts: utils.ToMap(deployedContracts, adaptAddrToClassHash), DeclaredV0Classes: declaredV0Classes, DeclaredV1Classes: declaredV1Classes, - ReplacedClasses: utils.ToMap(s.ReplacedClasses, adaptAddrToClassHash), + ReplacedClasses: utils.ToMap(replacedClasses, adaptAddrToClassHash), } } @@ -54,7 +88,12 @@ func adaptStoredValue(v *spec.ContractStoredValue) (felt.Felt, *felt.Felt) { return *AdaptFelt(v.Key), AdaptFelt(v.Value) } +type addrToClassHash struct { + addr *spec.Address + classHash *spec.Hash +} + // todo rename -func adaptAddrToClassHash(v *spec.StateDiff_ContractAddrToClassHash) (felt.Felt, *felt.Felt) { - return *AdaptAddress(v.ContractAddr), AdaptHash(v.ClassHash) +func adaptAddrToClassHash(v addrToClassHash) (felt.Felt, *felt.Felt) { + return *AdaptAddress(v.addr), AdaptHash(v.classHash) } diff --git a/adapters/p2p2core/transaction.go b/adapters/p2p2core/transaction.go index 9a3112ea53..7abd23cc26 100644 --- a/adapters/p2p2core/transaction.go +++ b/adapters/p2p2core/transaction.go @@ -2,7 +2,6 @@ package p2p2core import ( "fmt" - "strconv" "github.com/NethermindEth/juno/core" "github.com/NethermindEth/juno/core/felt" @@ -83,7 +82,7 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact TransactionSignature: adaptAccountSignature(tx.Signature), Nonce: AdaptFelt(tx.Nonce), Version: txVersion(2), - CompiledClassHash: AdaptFelt(tx.CompiledClassHash), + CompiledClassHash: AdaptHash(tx.CompiledClassHash), // version 3 fields (zero values) ResourceBounds: nil, PaymasterData: nil, @@ -98,34 +97,34 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact case *spec.Transaction_DeclareV3_: tx := t.GetDeclareV3() - nDAMode, err := strconv.ParseUint(tx.GetNonceDomain(), 10, 32) + nDAMode, err := adaptVolitionDomain(tx.NonceDataAvailabilityMode) if err != nil { - panic(fmt.Sprintf("Failed to convert Nonce DA mode: %v to uint32", tx.GetNonceDomain())) + panic(fmt.Sprintf("Failed to convert Nonce DA mode: %v to uint32", tx.NonceDataAvailabilityMode)) } - fDAMode, err := strconv.ParseUint(tx.GetFeeDomain(), 10, 32) + fDAMode, err := adaptVolitionDomain(tx.FeeDataAvailabilityMode) if err != nil { - panic(fmt.Sprintf("Failed to convert Fee DA mode: %v to uint32", tx.GetFeeDomain())) + panic(fmt.Sprintf("Failed to convert Fee DA mode: %v to uint32", tx.FeeDataAvailabilityMode)) } declareTx := &core.DeclareTransaction{ TransactionHash: nil, // overridden below ClassHash: AdaptHash(tx.ClassHash), SenderAddress: AdaptAddress(tx.Sender), - MaxFee: AdaptFelt(tx.MaxFee), + MaxFee: nil, // in 3 version this field was removed TransactionSignature: adaptAccountSignature(tx.Signature), Nonce: AdaptFelt(tx.Nonce), Version: txVersion(3), - CompiledClassHash: AdaptFelt(tx.CompiledClassHash), - Tip: AdaptFelt(tx.Tip).Uint64(), + CompiledClassHash: AdaptHash(tx.CompiledClassHash), + Tip: tx.Tip, ResourceBounds: map[core.Resource]core.ResourceBounds{ - core.ResourceL1Gas: adaptResourceLimits(tx.L1Gas), - core.ResourceL2Gas: adaptResourceLimits(tx.L2Gas), + core.ResourceL1Gas: adaptResourceLimits(tx.ResourceBounds.L1Gas), + core.ResourceL2Gas: adaptResourceLimits(tx.ResourceBounds.L2Gas), }, - PaymasterData: nil, // Todo: P2P needs to change the pay master data to a list - AccountDeploymentData: nil, // Todo: update p2p spec to include this - NonceDAMode: core.DataAvailabilityMode(nDAMode), - FeeDAMode: core.DataAvailabilityMode(fDAMode), + PaymasterData: utils.Map(tx.PaymasterData, AdaptFelt), + AccountDeploymentData: utils.Map(tx.AccountDeploymentData, AdaptFelt), + NonceDAMode: nDAMode, + FeeDAMode: fDAMode, } declareTx.TransactionHash = hash(declareTx) @@ -178,14 +177,14 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact case *spec.Transaction_DeployAccountV3_: tx := t.GetDeployAccountV3() - nDAMode, err := strconv.ParseUint(tx.GetNonceDomain(), 10, 32) + nDAMode, err := adaptVolitionDomain(tx.NonceDataAvailabilityMode) if err != nil { - panic(fmt.Sprintf("Failed to convert Nonce DA mode: %v to uint32", tx.GetNonceDomain())) + panic(fmt.Sprintf("Failed to convert Nonce DA mode: %v to uint32", tx.NonceDataAvailabilityMode)) } - fDAMode, err := strconv.ParseUint(tx.GetFeeDomain(), 10, 32) + fDAMode, err := adaptVolitionDomain(tx.FeeDataAvailabilityMode) if err != nil { - panic(fmt.Sprintf("Failed to convert Fee DA mode: %v to uint32", tx.GetFeeDomain())) + panic(fmt.Sprintf("Failed to convert Fee DA mode: %v to uint32", tx.FeeDataAvailabilityMode)) } addressSalt := AdaptFelt(tx.AddressSalt) @@ -200,17 +199,17 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact ConstructorCallData: callData, Version: txVersion(3), }, - MaxFee: AdaptFelt(tx.MaxFee), + MaxFee: nil, // todo(kirill) update spec? missing field TransactionSignature: adaptAccountSignature(tx.Signature), Nonce: AdaptFelt(tx.Nonce), - Tip: AdaptFelt(tx.Tip).Uint64(), + Tip: tx.Tip, ResourceBounds: map[core.Resource]core.ResourceBounds{ - core.ResourceL1Gas: adaptResourceLimits(tx.L1Gas), - core.ResourceL2Gas: adaptResourceLimits(tx.L2Gas), + core.ResourceL1Gas: adaptResourceLimits(tx.ResourceBounds.L1Gas), + core.ResourceL2Gas: adaptResourceLimits(tx.ResourceBounds.L2Gas), }, - PaymasterData: nil, // Todo: P2P needs to change the pay master data to a list - NonceDAMode: core.DataAvailabilityMode(nDAMode), - FeeDAMode: core.DataAvailabilityMode(fDAMode), + PaymasterData: utils.Map(tx.PaymasterData, AdaptFelt), + NonceDAMode: nDAMode, + FeeDAMode: fDAMode, } deployAccTx.DeployTransaction.TransactionHash = hash(deployAccTx) @@ -243,7 +242,7 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact tx := t.GetInvokeV1() invTx := &core.InvokeTransaction{ TransactionHash: nil, // overridden below - ContractAddress: nil, // not used in v1 + ContractAddress: nil, // todo call core.ContractAddress() ? Nonce: AdaptFelt(tx.Nonce), SenderAddress: AdaptAddress(tx.Sender), CallData: utils.Map(tx.Calldata, AdaptFelt), @@ -265,34 +264,34 @@ func AdaptTransaction(t *spec.Transaction, network *utils.Network) core.Transact case *spec.Transaction_InvokeV3_: tx := t.GetInvokeV3() - nDAMode, err := strconv.ParseUint(tx.GetNonceDomain(), 10, 32) + nDAMode, err := adaptVolitionDomain(tx.NonceDataAvailabilityMode) if err != nil { - panic(fmt.Sprintf("Failed to convert Nonce DA mode: %v to uint32", tx.GetNonceDomain())) + panic(fmt.Sprintf("Failed to convert Nonce DA mode: %v to uint32", tx.NonceDataAvailabilityMode)) } - fDAMode, err := strconv.ParseUint(tx.GetFeeDomain(), 10, 32) + fDAMode, err := adaptVolitionDomain(tx.FeeDataAvailabilityMode) if err != nil { - panic(fmt.Sprintf("Failed to convert Fee DA mode: %v to uint32", tx.GetFeeDomain())) + panic(fmt.Sprintf("Failed to convert Fee DA mode: %v to uint32", tx.FeeDataAvailabilityMode)) } invTx := &core.InvokeTransaction{ TransactionHash: nil, // overridden below - ContractAddress: nil, // is it ok? + ContractAddress: nil, // todo call core.ContractAddress() ? CallData: utils.Map(tx.Calldata, AdaptFelt), TransactionSignature: adaptAccountSignature(tx.Signature), - MaxFee: AdaptFelt(tx.MaxFee), + MaxFee: nil, // in 3 version this field was removed Version: txVersion(3), Nonce: AdaptFelt(tx.Nonce), SenderAddress: AdaptAddress(tx.Sender), EntryPointSelector: nil, - Tip: AdaptFelt(tx.Tip).Uint64(), + Tip: tx.Tip, ResourceBounds: map[core.Resource]core.ResourceBounds{ - core.ResourceL1Gas: adaptResourceLimits(tx.L1Gas), - core.ResourceL2Gas: adaptResourceLimits(tx.L2Gas), + core.ResourceL1Gas: adaptResourceLimits(tx.ResourceBounds.L1Gas), + core.ResourceL2Gas: adaptResourceLimits(tx.ResourceBounds.L2Gas), }, - PaymasterData: nil, // Todo: P2P needs to change the pay master data to a list - NonceDAMode: core.DataAvailabilityMode(nDAMode), - FeeDAMode: core.DataAvailabilityMode(fDAMode), + PaymasterData: utils.Map(tx.PaymasterData, AdaptFelt), + NonceDAMode: nDAMode, + FeeDAMode: fDAMode, AccountDeploymentData: nil, // todo(kirill) recheck } invTx.TransactionHash = hash(invTx) @@ -330,3 +329,14 @@ func adaptAccountSignature(s *spec.AccountSignature) []*felt.Felt { func txVersion(v uint64) *core.TransactionVersion { return new(core.TransactionVersion).SetUint64(v) } + +func adaptVolitionDomain(v spec.VolitionDomain) (core.DataAvailabilityMode, error) { + switch v { + case spec.VolitionDomain_L1: + return core.DAModeL1, nil + case spec.VolitionDomain_L2: + return core.DAModeL2, nil + default: + return 0, fmt.Errorf("unknown volition domain %d", v) + } +} diff --git a/core/block.go b/core/block.go index 44bb78a46c..8c51bdfaf1 100644 --- a/core/block.go +++ b/core/block.go @@ -88,7 +88,7 @@ func VerifyBlockHash(b *Block, network *utils.Network) (*BlockCommitments, error unverifiableRange := metaInfo.UnverifiableRange skipVerification := unverifiableRange != nil && b.Number >= unverifiableRange[0] && b.Number <= unverifiableRange[1] //nolint:gocritic - + // todo should we still keep it after p2p ? if !skipVerification { if err := VerifyTransactions(b.Transactions, network, b.ProtocolVersion); err != nil { return nil, err diff --git a/core/transaction.go b/core/transaction.go index 1f22c5dcb2..ac0b8cdffb 100644 --- a/core/transaction.go +++ b/core/transaction.go @@ -263,6 +263,7 @@ type InvokeTransaction struct { // 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 @@ -313,6 +314,7 @@ type DeclareTransaction struct { // 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 @@ -411,6 +413,8 @@ func TransactionHash(transaction Transaction, n *utils.Network) (*felt.Felt, err case *InvokeTransaction: return invokeTransactionHash(t, n) case *DeployTransaction: + // it's not always correct assumption because p2p peers do not provide this field + // so essentially we might return nil field for non-sepolia network and p2p sync // deploy transactions are deprecated after re-genesis therefore we don't verify // transaction hash return t.TransactionHash, nil diff --git a/p2p/p2p.go b/p2p/p2p.go index c1ef8153e6..18bc8af761 100644 --- a/p2p/p2p.go +++ b/p2p/p2p.go @@ -93,7 +93,7 @@ func NewWithHost(p2phost host.Host, peers string, feederNode bool, bc *blockchai } } - p2pdht, err := makeDHT(p2phost, snNetwork, peersAddrInfoS) + p2pdht, err := makeDHT(p2phost, peersAddrInfoS) if err != nil { return nil, err } @@ -114,9 +114,9 @@ func NewWithHost(p2phost host.Host, peers string, feederNode bool, bc *blockchai return s, nil } -func makeDHT(p2phost host.Host, snNetwork *utils.Network, addrInfos []peer.AddrInfo) (*dht.IpfsDHT, error) { +func makeDHT(p2phost host.Host, addrInfos []peer.AddrInfo) (*dht.IpfsDHT, error) { return dht.New(context.Background(), p2phost, - dht.ProtocolPrefix(snNetwork.ProtocolID()), + dht.ProtocolPrefix(starknet.Prefix), dht.BootstrapPeers(addrInfos...), dht.RoutingTableRefreshPeriod(routingTableRefreshPeriod), dht.Mode(dht.ModeServer), @@ -220,13 +220,11 @@ func (s *Service) Run(ctx context.Context) error { } func (s *Service) setProtocolHandlers() { - s.SetProtocolHandler(starknet.BlockHeadersPID(s.network), s.handler.BlockHeadersHandler) - s.SetProtocolHandler(starknet.CurrentBlockHeaderPID(s.network), s.handler.CurrentBlockHeaderHandler) - s.SetProtocolHandler(starknet.ReceiptsPID(s.network), s.handler.ReceiptsHandler) - // todo discuss protocol id (should it be included in BlockHeadersPID) - s.SetProtocolHandler(starknet.BlockBodiesPID(s.network), s.handler.BlockBodiesHandler) - s.SetProtocolHandler(starknet.EventsPID(s.network), s.handler.EventsHandler) - s.SetProtocolHandler(starknet.TransactionsPID(s.network), s.handler.TransactionsHandler) + s.SetProtocolHandler(starknet.HeadersPID(), s.handler.HeadersHandler) + s.SetProtocolHandler(starknet.EventsPID(), s.handler.EventsHandler) + s.SetProtocolHandler(starknet.TransactionsPID(), s.handler.TransactionsHandler) + s.SetProtocolHandler(starknet.ClassesPID(), s.handler.ClassesHandler) + s.SetProtocolHandler(starknet.StateDiffPID(), s.handler.StateDiffHandler) } func (s *Service) callAndLogErr(f func() error, msg string) { diff --git a/p2p/starknet/block_bodies.go b/p2p/starknet/block_bodies.go deleted file mode 100644 index 2baa0761c7..0000000000 --- a/p2p/starknet/block_bodies.go +++ /dev/null @@ -1,226 +0,0 @@ -package starknet - -import ( - "crypto/rand" - "slices" - - "github.com/NethermindEth/juno/adapters/core2p2p" - "github.com/NethermindEth/juno/blockchain" - "github.com/NethermindEth/juno/core" - "github.com/NethermindEth/juno/core/felt" - "github.com/NethermindEth/juno/p2p/starknet/spec" - "github.com/NethermindEth/juno/utils" - "google.golang.org/protobuf/proto" -) - -type blockBodyStep int - -const ( - _ blockBodyStep = iota - - sendDiff // initial - sendClasses - sendProof - sendBlockFin - terminal // final step -) - -type blockBodyIterator struct { - log utils.SimpleLogger - stateReader core.StateReader - stateCloser func() error - - step blockBodyStep - header *core.Header - - stateUpdate *core.StateUpdate -} - -func newBlockBodyIterator(bcReader blockchain.Reader, header *core.Header, log utils.SimpleLogger) (*blockBodyIterator, error) { - stateUpdate, err := bcReader.StateUpdateByNumber(header.Number) - if err != nil { - return nil, err - } - - stateReader, closer, err := bcReader.StateAtBlockNumber(header.Number) - if err != nil { - return nil, err - } - - return &blockBodyIterator{ - step: sendDiff, - header: header, - log: log, - stateReader: stateReader, - stateCloser: closer, - stateUpdate: stateUpdate, - }, nil -} - -func (b *blockBodyIterator) hasNext() bool { - return slices.Contains([]blockBodyStep{ - sendDiff, - sendClasses, - sendProof, - sendBlockFin, - }, b.step) -} - -// Either BlockBodiesResponse_Diff, *_Classes, *_Proof, *_Fin -func (b *blockBodyIterator) next() (msg proto.Message, valid bool) { - switch b.step { - case sendDiff: - msg, valid = b.diff() - b.step = sendClasses - case sendClasses: - msg, valid = b.classes() - b.step = sendProof - case sendProof: - msg, valid = b.proof() - b.step = sendBlockFin - case sendBlockFin: - // fin changes step to terminal internally - msg, valid = b.fin() - case terminal: - panic("next called on terminal step") - default: - b.log.Errorw("Unknown step in blockBodyIterator", "step", b.step) - } - - return -} - -func (b *blockBodyIterator) classes() (proto.Message, bool) { - var classes []*spec.Class - - stateDiff := b.stateUpdate.StateDiff - - for _, hash := range stateDiff.DeclaredV0Classes { - cls, err := b.stateReader.Class(hash) - if err != nil { - return b.fin() - } - - classes = append(classes, core2p2p.AdaptClass(cls.Class)) - } - for classHash := range stateDiff.DeclaredV1Classes { - cls, err := b.stateReader.Class(&classHash) - if err != nil { - return b.fin() - } - classes = append(classes, core2p2p.AdaptClass(cls.Class)) - } - - res := &spec.BlockBodiesResponse{ - Id: b.blockID(), - BodyMessage: &spec.BlockBodiesResponse_Classes{ - Classes: &spec.Classes{ - Domain: 0, - Classes: classes, - }, - }, - } - - return res, true -} - -type contractDiff struct { - address *felt.Felt - storageDiffs map[felt.Felt]*felt.Felt - nonce *felt.Felt -} - -func (b *blockBodyIterator) diff() (proto.Message, bool) { - var err error - diff := b.stateUpdate.StateDiff - - modifiedContracts := make(map[felt.Felt]*contractDiff) - - initContractDiff := func(addr *felt.Felt) *contractDiff { - return &contractDiff{address: addr} - } - updateModifiedContracts := func(addr felt.Felt, f func(*contractDiff)) error { - cDiff, ok := modifiedContracts[addr] - if !ok { - cDiff = initContractDiff(&addr) - if err != nil { - return err - } - modifiedContracts[addr] = cDiff - } - - f(cDiff) - return nil - } - - for addr, n := range diff.Nonces { - err = updateModifiedContracts(addr, func(diff *contractDiff) { - diff.nonce = n - }) - if err != nil { - b.log.Errorw("Failed to update modified contract", "err", err) - return b.fin() - } - } - - for addr, sDiff := range diff.StorageDiffs { - err = updateModifiedContracts(addr, func(diff *contractDiff) { - diff.storageDiffs = sDiff - }) - if err != nil { - b.log.Errorw("Failed to update modified contract", "err", err) - return b.fin() - } - } - - var contractDiffs []*spec.StateDiff_ContractDiff - for _, c := range modifiedContracts { - contractDiffs = append(contractDiffs, core2p2p.AdaptStateDiff(c.address, c.nonce, c.storageDiffs)) - } - - return &spec.BlockBodiesResponse{ - Id: b.blockID(), - BodyMessage: &spec.BlockBodiesResponse_Diff{ - Diff: &spec.StateDiff{ - Domain: 0, - ContractDiffs: contractDiffs, - ReplacedClasses: utils.ToSlice(diff.ReplacedClasses, core2p2p.AdaptAddressClassHashPair), - DeployedContracts: utils.ToSlice(diff.DeployedContracts, core2p2p.AdaptAddressClassHashPair), - }, - }, - }, true -} - -func (b *blockBodyIterator) fin() (proto.Message, bool) { - b.step = terminal - if err := b.stateCloser(); err != nil { - b.log.Errorw("Call to state closer failed", "err", err) - } - return &spec.BlockBodiesResponse{ - Id: b.blockID(), - BodyMessage: &spec.BlockBodiesResponse_Fin{}, - }, true -} - -func (b *blockBodyIterator) proof() (proto.Message, bool) { - // proof size is currently 142K - proof := make([]byte, 142*1024) //nolint:gomnd - _, err := rand.Read(proof) - if err != nil { - b.log.Errorw("Failed to generate rand proof", "err", err) - return b.fin() - } - - return &spec.BlockBodiesResponse{ - Id: b.blockID(), - BodyMessage: &spec.BlockBodiesResponse_Proof{ - Proof: &spec.BlockProof{ - Proof: proof, - }, - }, - }, true -} - -func (b *blockBodyIterator) blockID() *spec.BlockID { - return core2p2p.AdaptBlockID(b.header) -} diff --git a/p2p/starknet/client.go b/p2p/starknet/client.go index 6ddffe68d0..e273b84f7c 100644 --- a/p2p/starknet/client.go +++ b/p2p/starknet/client.go @@ -4,6 +4,7 @@ import ( "context" "errors" "io" + "time" "github.com/NethermindEth/juno/p2p/starknet/spec" "github.com/NethermindEth/juno/utils" @@ -14,7 +15,10 @@ import ( "google.golang.org/protobuf/proto" ) -const unmarshalMaxSize = 15 * utils.Megabyte +const ( + unmarshalMaxSize = 15 * utils.Megabyte + readTimeout = 5 * time.Second +) type NewStreamFunc func(ctx context.Context, pids ...protocol.ID) (network.Stream, error) @@ -59,9 +63,14 @@ func requestAndReceiveStream[ReqT proto.Message, ResT proto.Message](ctx context return nil, err } + err = stream.SetReadDeadline(time.Now().Add(readTimeout)) + if err != nil { + return nil, err + } + id := stream.ID() if err := sendAndCloseWrite(stream, req); err != nil { - log.Debugw("sendAndCloseWrite (stream is not closed)", "err", err, "streamID", id) + log.Errorw("sendAndCloseWrite (stream is not closed)", "err", err, "streamID", id) return nil, err } @@ -69,7 +78,7 @@ func requestAndReceiveStream[ReqT proto.Message, ResT proto.Message](ctx context defer func() { closeErr := stream.Close() if closeErr != nil { - log.Debugw("Error while closing stream", "err", closeErr) + log.Errorw("Error while closing stream", "err", closeErr) } }() @@ -91,34 +100,26 @@ func requestAndReceiveStream[ReqT proto.Message, ResT proto.Message](ctx context }, nil } -func (c *Client) RequestCurrentBlockHeader( - ctx context.Context, req *spec.CurrentBlockHeaderRequest, -) (iter.Seq[*spec.BlockHeadersResponse], error) { - return requestAndReceiveStream[*spec.CurrentBlockHeaderRequest, *spec.BlockHeadersResponse](ctx, c.newStream, - CurrentBlockHeaderPID(c.network), req, c.log) -} - func (c *Client) RequestBlockHeaders( ctx context.Context, req *spec.BlockHeadersRequest, ) (iter.Seq[*spec.BlockHeadersResponse], error) { return requestAndReceiveStream[*spec.BlockHeadersRequest, *spec.BlockHeadersResponse]( - ctx, c.newStream, BlockHeadersPID(c.network), req, c.log) + ctx, c.newStream, HeadersPID(), req, c.log) } -func (c *Client) RequestBlockBodies(ctx context.Context, req *spec.BlockBodiesRequest) (iter.Seq[*spec.BlockBodiesResponse], error) { - return requestAndReceiveStream[*spec.BlockBodiesRequest, *spec.BlockBodiesResponse]( - ctx, c.newStream, BlockBodiesPID(c.network), req, c.log) +func (c *Client) RequestEvents(ctx context.Context, req *spec.EventsRequest) (iter.Seq[*spec.EventsResponse], error) { + return requestAndReceiveStream[*spec.EventsRequest, *spec.EventsResponse](ctx, c.newStream, EventsPID(), req, c.log) } -func (c *Client) RequestEvents(ctx context.Context, req *spec.EventsRequest) (iter.Seq[*spec.EventsResponse], error) { - return requestAndReceiveStream[*spec.EventsRequest, *spec.EventsResponse](ctx, c.newStream, EventsPID(c.network), req, c.log) +func (c *Client) RequestClasses(ctx context.Context, req *spec.ClassesRequest) (iter.Seq[*spec.ClassesResponse], error) { + return requestAndReceiveStream[*spec.ClassesRequest, *spec.ClassesResponse](ctx, c.newStream, ClassesPID(), req, c.log) } -func (c *Client) RequestReceipts(ctx context.Context, req *spec.ReceiptsRequest) (iter.Seq[*spec.ReceiptsResponse], error) { - return requestAndReceiveStream[*spec.ReceiptsRequest, *spec.ReceiptsResponse](ctx, c.newStream, ReceiptsPID(c.network), req, c.log) +func (c *Client) RequestStateDiffs(ctx context.Context, req *spec.StateDiffsRequest) (iter.Seq[*spec.StateDiffsResponse], error) { + return requestAndReceiveStream[*spec.StateDiffsRequest, *spec.StateDiffsResponse](ctx, c.newStream, StateDiffPID(), req, c.log) } func (c *Client) RequestTransactions(ctx context.Context, req *spec.TransactionsRequest) (iter.Seq[*spec.TransactionsResponse], error) { return requestAndReceiveStream[*spec.TransactionsRequest, *spec.TransactionsResponse]( - ctx, c.newStream, TransactionsPID(c.network), req, c.log) + ctx, c.newStream, TransactionsPID(), req, c.log) } diff --git a/p2p/starknet/handlers.go b/p2p/starknet/handlers.go index 302831fb02..2893268792 100644 --- a/p2p/starknet/handlers.go +++ b/p2p/starknet/handlers.go @@ -11,6 +11,7 @@ import ( "github.com/NethermindEth/juno/adapters/p2p2core" "github.com/NethermindEth/juno/blockchain" "github.com/NethermindEth/juno/core" + "github.com/NethermindEth/juno/core/felt" "github.com/NethermindEth/juno/p2p/starknet/spec" "github.com/NethermindEth/juno/utils" "github.com/NethermindEth/juno/utils/iter" @@ -21,15 +22,21 @@ import ( type Handler struct { bcReader blockchain.Reader - ctx context.Context log utils.SimpleLogger + + ctx context.Context + cancel context.CancelFunc + wg sync.WaitGroup } func NewHandler(bcReader blockchain.Reader, log utils.SimpleLogger) *Handler { + ctx, cancel := context.WithCancel(context.Background()) return &Handler{ bcReader: bcReader, log: log, - ctx: context.Background(), + ctx: ctx, + cancel: cancel, + wg: sync.WaitGroup{}, } } @@ -46,9 +53,12 @@ func getBuffer() *bytes.Buffer { return buffer } -func streamHandler[ReqT proto.Message](ctx context.Context, stream network.Stream, - reqHandler func(req ReqT) (iter.Seq[proto.Message], error), log utils.SimpleLogger, +func streamHandler[ReqT proto.Message](ctx context.Context, wg *sync.WaitGroup, + stream network.Stream, reqHandler func(req ReqT) (iter.Seq[proto.Message], error), log utils.SimpleLogger, ) { + wg.Add(1) + defer wg.Done() + defer func() { if err := stream.Close(); err != nil { log.Debugw("Error closing stream", "peer", stream.ID(), "protocol", stream.Protocol(), "err", err) @@ -95,55 +105,29 @@ func streamHandler[ReqT proto.Message](ctx context.Context, stream network.Strea }) } -func (h *Handler) BlockHeadersHandler(stream network.Stream) { - streamHandler[*spec.BlockHeadersRequest](h.ctx, stream, h.onBlockHeadersRequest, h.log) -} - -func (h *Handler) BlockBodiesHandler(stream network.Stream) { - streamHandler[*spec.BlockBodiesRequest](h.ctx, stream, h.onBlockBodiesRequest, h.log) +func (h *Handler) HeadersHandler(stream network.Stream) { + streamHandler[*spec.BlockHeadersRequest](h.ctx, &h.wg, stream, h.onHeadersRequest, h.log) } func (h *Handler) EventsHandler(stream network.Stream) { - streamHandler[*spec.EventsRequest](h.ctx, stream, h.onEventsRequest, h.log) -} - -func (h *Handler) ReceiptsHandler(stream network.Stream) { - streamHandler[*spec.ReceiptsRequest](h.ctx, stream, h.onReceiptsRequest, h.log) + streamHandler[*spec.EventsRequest](h.ctx, &h.wg, stream, h.onEventsRequest, h.log) } func (h *Handler) TransactionsHandler(stream network.Stream) { - streamHandler[*spec.TransactionsRequest](h.ctx, stream, h.onTransactionsRequest, h.log) + streamHandler[*spec.TransactionsRequest](h.ctx, &h.wg, stream, h.onTransactionsRequest, h.log) } -func (h *Handler) CurrentBlockHeaderHandler(stream network.Stream) { - streamHandler[*spec.CurrentBlockHeaderRequest](h.ctx, stream, h.onCurrentBlockHeaderRequest, h.log) +func (h *Handler) ClassesHandler(stream network.Stream) { + streamHandler[*spec.ClassesRequest](h.ctx, &h.wg, stream, h.onClassesRequest, h.log) } -func (h *Handler) onCurrentBlockHeaderRequest(*spec.CurrentBlockHeaderRequest) (iter.Seq[proto.Message], error) { - curHeight, err := h.bcReader.Height() - if err != nil { - return nil, err - } - - return h.onBlockHeadersRequest(&spec.BlockHeadersRequest{ - Iteration: &spec.Iteration{ - Start: &spec.Iteration_BlockNumber{ - BlockNumber: curHeight, - }, - Direction: spec.Iteration_Forward, - Limit: 1, - Step: 1, - }, - }) +func (h *Handler) StateDiffHandler(stream network.Stream) { + streamHandler[*spec.StateDiffsRequest](h.ctx, &h.wg, stream, h.onStateDiffRequest, h.log) } -func (h *Handler) onBlockHeadersRequest(req *spec.BlockHeadersRequest) (iter.Seq[proto.Message], error) { +func (h *Handler) onHeadersRequest(req *spec.BlockHeadersRequest) (iter.Seq[proto.Message], error) { finMsg := &spec.BlockHeadersResponse{ - Part: []*spec.BlockHeadersResponsePart{ - { - HeaderMessage: &spec.BlockHeadersResponsePart_Fin{}, - }, - }, + HeaderMessage: &spec.BlockHeadersResponse_Fin{}, } return h.processIterationRequest(req.Iteration, finMsg, func(it blockDataAccessor) (proto.Message, error) { @@ -160,136 +144,236 @@ func (h *Handler) onBlockHeadersRequest(req *spec.BlockHeadersRequest) (iter.Seq } return &spec.BlockHeadersResponse{ - Part: []*spec.BlockHeadersResponsePart{ - { - HeaderMessage: &spec.BlockHeadersResponsePart_Header{ - Header: core2p2p.AdaptHeader(header, commitments), - }, - }, - { - HeaderMessage: &spec.BlockHeadersResponsePart_Signatures{ - Signatures: &spec.Signatures{ - Block: core2p2p.AdaptBlockID(header), - Signatures: utils.Map(header.Signatures, core2p2p.AdaptSignature), - }, - }, - }, + HeaderMessage: &spec.BlockHeadersResponse_Header{ + Header: core2p2p.AdaptHeader(header, commitments), }, }, nil }) } -func (h *Handler) onBlockBodiesRequest(req *spec.BlockBodiesRequest) (iter.Seq[proto.Message], error) { - it, err := h.newIterator(req.Iteration) - if err != nil { - return nil, err +func (h *Handler) onEventsRequest(req *spec.EventsRequest) (iter.Seq[proto.Message], error) { + finMsg := &spec.EventsResponse{ + EventMessage: &spec.EventsResponse_Fin{}, } + return h.processIterationRequestMulti(req.Iteration, finMsg, func(it blockDataAccessor) ([]proto.Message, error) { + block, err := it.Block() + if err != nil { + return nil, err + } - return func(yield func(proto.Message) bool) { - outerLoop: - for it.Valid() { - header, err := it.Header() - if err != nil { - h.log.Debugw("Failed to fetch header", "blockNumber", it.BlockNumber(), "err", err) - break - } - - h.log.Debugw("Creating Block Body Iterator", "blockNumber", header.Number) - bodyIterator, err := newBlockBodyIterator(h.bcReader, header, h.log) - if err != nil { - h.log.Debugw("Failed to create block body iterator", "blockNumber", it.BlockNumber(), "err", err) - break - } - - for bodyIterator.hasNext() { - msg, ok := bodyIterator.next() - if !ok { - break - } - - if !yield(msg) { - break outerLoop - } + responses := make([]proto.Message, 0, len(block.Receipts)) + for _, receipt := range block.Receipts { + for _, event := range receipt.Events { + responses = append(responses, &spec.EventsResponse{ + EventMessage: &spec.EventsResponse_Event{ + Event: core2p2p.AdaptEvent(event, receipt.TransactionHash), + }, + }) } - - it.Next() } - finMsg := &spec.BlockBodiesResponse{ - BodyMessage: &spec.BlockBodiesResponse_Fin{}, - } - yield(finMsg) - }, nil + return responses, nil + }) } -func (h *Handler) onEventsRequest(req *spec.EventsRequest) (iter.Seq[proto.Message], error) { - finMsg := &spec.EventsResponse{ - Responses: &spec.EventsResponse_Fin{}, +func (h *Handler) onTransactionsRequest(req *spec.TransactionsRequest) (iter.Seq[proto.Message], error) { + finMsg := &spec.TransactionsResponse{ + TransactionMessage: &spec.TransactionsResponse_Fin{}, } - return h.processIterationRequest(req.Iteration, finMsg, func(it blockDataAccessor) (proto.Message, error) { + return h.processIterationRequestMulti(req.Iteration, finMsg, func(it blockDataAccessor) ([]proto.Message, error) { block, err := it.Block() if err != nil { return nil, err } - events := make([]*spec.Event, 0, len(block.Receipts)) - for _, receipt := range block.Receipts { - for _, event := range receipt.Events { - events = append(events, core2p2p.AdaptEvent(event, receipt.TransactionHash)) + responses := make([]proto.Message, len(block.Transactions)) + for i, tx := range block.Transactions { + receipt := block.Receipts[i] + + responses[i] = &spec.TransactionsResponse{ + TransactionMessage: &spec.TransactionsResponse_TransactionWithReceipt{ + TransactionWithReceipt: &spec.TransactionWithReceipt{ + Transaction: core2p2p.AdaptTransaction(tx), + Receipt: core2p2p.AdaptReceipt(receipt, tx), + }, + }, } } - return &spec.EventsResponse{ - Id: core2p2p.AdaptBlockID(block.Header), - Responses: &spec.EventsResponse_Events{ - Events: &spec.Events{ - Items: events, - }, - }, - }, nil + return responses, nil }) } -func (h *Handler) onReceiptsRequest(req *spec.ReceiptsRequest) (iter.Seq[proto.Message], error) { - finMsg := &spec.ReceiptsResponse{Responses: &spec.ReceiptsResponse_Fin{}} - return h.processIterationRequest(req.Iteration, finMsg, func(it blockDataAccessor) (proto.Message, error) { +//nolint:gocyclo +func (h *Handler) onStateDiffRequest(req *spec.StateDiffsRequest) (iter.Seq[proto.Message], error) { + finMsg := &spec.StateDiffsResponse{ + StateDiffMessage: &spec.StateDiffsResponse_Fin{}, + } + return h.processIterationRequestMulti(req.Iteration, finMsg, func(it blockDataAccessor) ([]proto.Message, error) { block, err := it.Block() if err != nil { return nil, err } + blockNumber := block.Number - receipts := make([]*spec.Receipt, len(block.Receipts)) - for i := 0; i < len(block.Receipts); i++ { - receipts[i] = core2p2p.AdaptReceipt(block.Receipts[i], block.Transactions[i]) + stateUpdate, err := h.bcReader.StateUpdateByNumber(blockNumber) + if err != nil { + return nil, err } + diff := stateUpdate.StateDiff - return &spec.ReceiptsResponse{ - Id: core2p2p.AdaptBlockID(block.Header), - Responses: &spec.ReceiptsResponse_Receipts{ - Receipts: &spec.Receipts{Items: receipts}, - }, - }, nil + type contractDiff struct { + address *felt.Felt + storageDiffs map[felt.Felt]*felt.Felt + nonce *felt.Felt + classHash *felt.Felt // set only if contract deployed or replaced + } + modifiedContracts := make(map[felt.Felt]*contractDiff) + + initContractDiff := func(addr *felt.Felt) *contractDiff { + return &contractDiff{address: addr} + } + updateModifiedContracts := func(addr felt.Felt, f func(*contractDiff)) error { + cDiff, ok := modifiedContracts[addr] + if !ok { + cDiff = initContractDiff(&addr) + if err != nil { + return err + } + modifiedContracts[addr] = cDiff + } + + f(cDiff) + return nil + } + + for addr, n := range diff.Nonces { + err = updateModifiedContracts(addr, func(diff *contractDiff) { + diff.nonce = n + }) + if err != nil { + return nil, err + } + } + + for addr, sDiff := range diff.StorageDiffs { + err = updateModifiedContracts(addr, func(diff *contractDiff) { + diff.storageDiffs = sDiff + }) + if err != nil { + return nil, err + } + } + + for addr, classHash := range diff.DeployedContracts { + classHashCopy := classHash + err = updateModifiedContracts(addr, func(diff *contractDiff) { + diff.classHash = classHashCopy + }) + if err != nil { + return nil, err + } + } + + for addr, classHash := range diff.ReplacedClasses { + classHashCopy := classHash + err = updateModifiedContracts(addr, func(diff *contractDiff) { + diff.classHash = classHashCopy + }) + if err != nil { + return nil, err + } + } + + var responses []proto.Message + for _, c := range modifiedContracts { + responses = append(responses, &spec.StateDiffsResponse{ + StateDiffMessage: &spec.StateDiffsResponse_ContractDiff{ + ContractDiff: core2p2p.AdaptContractDiff(c.address, c.nonce, c.classHash, c.storageDiffs), + }, + }) + } + + for _, classHash := range diff.DeclaredV0Classes { + responses = append(responses, &spec.StateDiffsResponse{ + StateDiffMessage: &spec.StateDiffsResponse_DeclaredClass{ + DeclaredClass: &spec.DeclaredClass{ + ClassHash: core2p2p.AdaptHash(classHash), + CompiledClassHash: nil, // for cairo0 it's nil + }, + }, + }) + } + for classHash, compiledHash := range diff.DeclaredV1Classes { + responses = append(responses, &spec.StateDiffsResponse{ + StateDiffMessage: &spec.StateDiffsResponse_DeclaredClass{ + DeclaredClass: &spec.DeclaredClass{ + ClassHash: core2p2p.AdaptHash(&classHash), + CompiledClassHash: core2p2p.AdaptHash(compiledHash), + }, + }, + }) + } + + return responses, nil }) } -func (h *Handler) onTransactionsRequest(req *spec.TransactionsRequest) (iter.Seq[proto.Message], error) { - finMsg := &spec.TransactionsResponse{ - Responses: &spec.TransactionsResponse_Fin{}, +func (h *Handler) onClassesRequest(req *spec.ClassesRequest) (iter.Seq[proto.Message], error) { + finMsg := &spec.ClassesResponse{ + ClassMessage: &spec.ClassesResponse_Fin{}, } - return h.processIterationRequest(req.Iteration, finMsg, func(it blockDataAccessor) (proto.Message, error) { + return h.processIterationRequestMulti(req.Iteration, finMsg, func(it blockDataAccessor) ([]proto.Message, error) { block, err := it.Block() if err != nil { return nil, err } + blockNumber := block.Number + + stateUpdate, err := h.bcReader.StateUpdateByNumber(blockNumber) + if err != nil { + return nil, err + } - return &spec.TransactionsResponse{ - Id: core2p2p.AdaptBlockID(block.Header), - Responses: &spec.TransactionsResponse_Transactions{ - Transactions: &spec.Transactions{ - Items: utils.Map(block.Transactions, core2p2p.AdaptTransaction), + stateReader, closer, err := h.bcReader.StateAtBlockNumber(blockNumber) + if err != nil { + return nil, err + } + defer func() { + if closeErr := closer(); closeErr != nil { + h.log.Errorw("Failed to close state reader", "err", closeErr) + } + }() + + stateDiff := stateUpdate.StateDiff + + var responses []proto.Message + for _, hash := range stateDiff.DeclaredV0Classes { + cls, err := stateReader.Class(hash) + if err != nil { + return nil, err + } + + responses = append(responses, &spec.ClassesResponse{ + ClassMessage: &spec.ClassesResponse_Class{ + Class: core2p2p.AdaptClass(cls.Class), }, - }, - }, nil + }) + } + for classHash := range stateDiff.DeclaredV1Classes { + cls, err := stateReader.Class(&classHash) + if err != nil { + return nil, err + } + + responses = append(responses, &spec.ClassesResponse{ + ClassMessage: &spec.ClassesResponse_Class{ + Class: core2p2p.AdaptClass(cls.Class), + }, + }) + } + + return responses, nil }) } @@ -342,6 +426,45 @@ func (h *Handler) processIterationRequest(iteration *spec.Iteration, finMsg prot }, nil } +type iterationProcessorMulti = func(it blockDataAccessor) ([]proto.Message, error) + +func (h *Handler) processIterationRequestMulti(iteration *spec.Iteration, finMsg proto.Message, + getMsg iterationProcessorMulti, +) (iter.Seq[proto.Message], error) { + it, err := h.newIterator(iteration) + if err != nil { + return nil, err + } + + type yieldFunc = func(proto.Message) bool + return func(yield yieldFunc) { + // while iterator is valid + for it.Valid() { + // pass it to handler function (some might be interested in header, others in entire block) + messages, err := getMsg(it) + if err != nil { + h.log.Errorw("Failed to generate data", "blockNumber", it.BlockNumber(), "err", err) + break + } + + for _, msg := range messages { + // push generated msg to caller + if !yield(msg) { + // if caller is not interested in remaining data (example: connection to a peer is closed) exit + // note that in this case we won't send finMsg + return + } + } + + it.Next() + } + + // either we iterated over whole sequence or reached break statement in loop above + // note that return value of yield is not checked because this is the last message anyway + yield(finMsg) + }, nil +} + func (h *Handler) newIterator(it *spec.Iteration) (*iterator, error) { forward := it.Direction == spec.Iteration_Forward // todo restrict limit max value ? @@ -354,3 +477,11 @@ func (h *Handler) newIterator(it *spec.Iteration) (*iterator, error) { return nil, fmt.Errorf("unsupported iteration start type %T", v) } } + +func (h *Handler) Close() { + fmt.Println("Canceling") + h.cancel() + fmt.Println("Waiting") + h.wg.Wait() + fmt.Println("Done") +} diff --git a/p2p/starknet/ids.go b/p2p/starknet/ids.go index 93f0e24ca5..d1b97b0ad2 100644 --- a/p2p/starknet/ids.go +++ b/p2p/starknet/ids.go @@ -1,31 +1,27 @@ package starknet import ( - "github.com/NethermindEth/juno/utils" "github.com/libp2p/go-libp2p/core/protocol" ) -// Todo: consider merging this with BlockHeadersPID -func CurrentBlockHeaderPID(n *utils.Network) protocol.ID { - return n.ProtocolID() + "/current_header/0" -} +const Prefix = "/starknet" -func BlockHeadersPID(n *utils.Network) protocol.ID { - return n.ProtocolID() + "/block_headers/0" +func HeadersPID() protocol.ID { + return Prefix + "/headers/0.1.0-rc.0" } -func BlockBodiesPID(n *utils.Network) protocol.ID { - return n.ProtocolID() + "/block_bodies/0" +func EventsPID() protocol.ID { + return Prefix + "/events/0.1.0-rc.0" } -func EventsPID(n *utils.Network) protocol.ID { - return n.ProtocolID() + "/events/0" +func TransactionsPID() protocol.ID { + return Prefix + "/transactions/0.1.0-rc.0" } -func ReceiptsPID(n *utils.Network) protocol.ID { - return n.ProtocolID() + "/receipts/0" +func ClassesPID() protocol.ID { + return Prefix + "/classes/0.1.0-rc.0" } -func TransactionsPID(n *utils.Network) protocol.ID { - return n.ProtocolID() + "/transactions/0" +func StateDiffPID() protocol.ID { + return Prefix + "/state_diffs/0.1.0-rc.0" } diff --git a/p2p/starknet/p2p/proto/block.proto b/p2p/starknet/p2p/proto/block.proto deleted file mode 100644 index 46c19fb7ce..0000000000 --- a/p2p/starknet/p2p/proto/block.proto +++ /dev/null @@ -1,86 +0,0 @@ -syntax = "proto3"; -import "p2p/proto/common.proto"; -import "p2p/proto/state.proto"; -import "google/protobuf/timestamp.proto"; - -// for now, we assume a small consensus, so this fits in 1M. Else, these will be repeated -message Signatures { - BlockID block = 1; - - repeated ConsensusSignature signatures = 2; // - // can be more explicit here about the signature structure as this is not part of account abstraction -} - -// Note: commitments may change to be for the previous blocks like comet/tendermint -// hash of block header sent to L1 -message BlockHeader { - Hash parent_hash = 1; - uint64 number = 2; - google.protobuf.Timestamp time = 3; // TODO: see if this needs to be Felt252 or can be converted - Address sequencer_address = 4; - Merkle state_diffs = 5; // By order of (contract, key), taking last in case of duplicates. - // This means the proposer needs to sort after finishing the block (TBD: patricia? ) - // State is optional and appears every X blocks for the last block. This is to support - // snapshot sync and also so that light nodes can sync on state without state diffs. - Patricia state = 6; // hash of contract and class patricia tries. Same as in L1. Later more trees will be included - Hash proof_fact = 7; // for Kth block behind. A hash of the output of the proof - - // The following merkles can be built on the fly while sequencing/validating txs. - Merkle transactions = 8; // By order of execution. TBD: required? the client can execute (powerful machine) and match state diff - Merkle events = 9; // By order of issuance. TBD: in receipts? - Merkle receipts = 10; // By order of issuance. - string protocol_version = 11; // Starknet version - Felt252 gas_price = 12; -} - -message BlockProof { - bytes proof = 1; // proof size is currently 142K -} - -// sent to all peers (except the ones this was received from, if any). -// for a fraction of peers, also send the GetBlockHeaders and GetBlockBodies response (as if they asked for it for this block) -message NewBlock { - oneof maybe_full { - BlockID id = 1; - BlockHeadersResponse header = 2; - BlockBodiesResponse body = 3; - } -} - -// Requests a peer's CurrentBlockHeader -message CurrentBlockHeaderRequest {} - -// result is (BlockHeader, Signature?)* in order of creation (incr/dec) -message BlockHeadersRequest { - Iteration iteration = 1; -} - -message BlockHeadersResponsePart { - oneof header_message { - BlockHeader header = 1; - Signatures signatures = 2; - Fin fin = 3; // no support for interleaving for now - } -} - -message BlockHeadersResponse { - repeated BlockHeadersResponsePart part = 1; -} - -// result is (StateDiff*, Classes*, BlockProof?)* currently in creation order (incr/dec), but may change in the future -message BlockBodiesRequest { - Iteration iteration = 1; -} - -message BlockBodiesResponse { - optional BlockID id = 1; // may not appear if Fin is sent to end the whole response - - oneof body_message { - StateDiff diff = 2; - Classes classes = 3; - BlockProof proof = 4; - Fin fin = 5; - } -} - - diff --git a/p2p/starknet/p2p/proto/class.proto b/p2p/starknet/p2p/proto/class.proto new file mode 100644 index 0000000000..d3cb20d163 --- /dev/null +++ b/p2p/starknet/p2p/proto/class.proto @@ -0,0 +1,57 @@ +syntax = "proto3"; +import "p2p/proto/common.proto"; + +option go_package = "github.com/NethermindEth/juno/p2p/starknet/spec"; + + +message EntryPoint { + Felt252 selector = 1; + uint64 offset = 2; +} + +message Cairo0Class { + string abi = 1; + repeated EntryPoint externals = 2; + repeated EntryPoint l1_handlers = 3; + repeated EntryPoint constructors = 4; + // Compressed in base64 representation. + string program = 5; +} + +message SierraEntryPoint { + uint64 index = 1; + Felt252 selector = 2; +} + +message Cairo1EntryPoints { + repeated SierraEntryPoint externals = 1; + repeated SierraEntryPoint l1_handlers = 2; + repeated SierraEntryPoint constructors = 3; +} + +message Cairo1Class { + string abi = 1; + Cairo1EntryPoints entry_points = 2; + repeated Felt252 program = 3; + string contract_class_version = 4; +} + +message Class { + oneof class { + Cairo0Class cairo0 = 1; + Cairo1Class cairo1 = 2; + } + uint32 domain = 3; +} + +message ClassesRequest { + Iteration iteration = 1; +} + +// Responses are sent ordered by the order given in the request. +message ClassesResponse { + oneof class_message { + Class class = 1; + Fin fin = 2; // Fin is sent after the peer sent all the data or when it encountered a block that it doesn't have its classes. + } +} \ No newline at end of file diff --git a/p2p/starknet/p2p/proto/common.proto b/p2p/starknet/p2p/proto/common.proto index 88b5744519..6e83439716 100644 --- a/p2p/starknet/p2p/proto/common.proto +++ b/p2p/starknet/p2p/proto/common.proto @@ -1,5 +1,7 @@ syntax = "proto3"; +option go_package = "github.com/NethermindEth/juno/p2p/starknet/spec"; + message Felt252 { bytes elements = 1; } @@ -20,25 +22,40 @@ message PeerID { bytes id = 1; } +message Uint128 { + uint64 low = 1; + uint64 high = 2; +} + message ConsensusSignature { Felt252 r = 1; Felt252 s = 2; } -message Merkle { - uint32 n_leaves = 1; // needed to know the height, so as to how many nodes to expect in a proof. - // and also when receiving all leaves, how many to expect - Hash root = 2; +message Patricia { + uint64 n_leaves = 1; // needed to know the height, so as to how many nodes to expect in a proof. + // and also when receiving all leaves, how many to expect + Hash root = 2; } -message Patricia { - uint32 height = 1; - Hash root = 2; +message StateDiffCommitment { + uint64 state_diff_length = 1; + Hash root = 2; } message BlockID { uint64 number = 1; - Hash header = 2; + Hash header = 2; +} + +enum L1DataAvailabilityMode { + Calldata = 0; + Blob = 1; +} + +enum VolitionDomain { + L1 = 0; + L2 = 1; } message Iteration { @@ -48,27 +65,14 @@ message Iteration { } oneof start { uint64 block_number = 1; - Hash header = 2; + Hash header = 2; } Direction direction = 3; - uint64 limit = 4; - uint64 step = 5; // to allow interleaving from several nodes + uint64 limit = 4; + uint64 step = 5; // to allow interleaving from several nodes // bool interleave = 6; // return results in any order of blocks, per block the messages should still be in the order specified } // mark the end of a stream of messages // TBD: may not be required if we open a stream per request. -message Fin { - enum Error { - busy = 0; - too_much = 1; - unknown = 2; - pruned = 3; - } - optional Error error = 1; -} - - - - - +message Fin {} \ No newline at end of file diff --git a/p2p/starknet/p2p/proto/discovery.proto b/p2p/starknet/p2p/proto/discovery.proto deleted file mode 100644 index 50ef44887e..0000000000 --- a/p2p/starknet/p2p/proto/discovery.proto +++ /dev/null @@ -1,19 +0,0 @@ -syntax = "proto3"; - -import "p2p/proto/common.proto"; - -// do we need this? capabilities are protocols (but need arguments, e.g. history length) -/* -message NewNode -{ - PeerID id = 1; - - repeated string capabilities = 2; -} - -message KnownNodes -{ - PeerID id = 1; //id of publishing node - repeated PeerID nodes = 2; //nodes known to the publishing node -} -*/ diff --git a/p2p/starknet/p2p/proto/event.proto b/p2p/starknet/p2p/proto/event.proto index 00cb57dea0..832008064a 100644 --- a/p2p/starknet/p2p/proto/event.proto +++ b/p2p/starknet/p2p/proto/event.proto @@ -1,27 +1,23 @@ syntax = "proto3"; import "p2p/proto/common.proto"; +option go_package = "github.com/NethermindEth/juno/p2p/starknet/spec"; + message Event { Hash transaction_hash = 1; - Felt252 from_address = 2; - repeated Felt252 keys = 3; - repeated Felt252 data = 4; + Felt252 from_address = 3; // looks like mistake? + repeated Felt252 keys = 4; + repeated Felt252 data = 5; } message EventsRequest { Iteration iteration = 1; } -message Events { - repeated Event items = 1; -} - -// can be several in a single reply +// Responses are sent ordered by the order given in the request. message EventsResponse { - optional BlockID id = 1; // may not appear if Fin is sent to end the whole response - - oneof responses { - Events events = 2; - Fin fin = 3; + oneof event_message { + Event event = 1; + Fin fin = 2; // Fin is sent after the peer sent all the data or when it encountered a block that it doesn't have its events. } -} +} \ No newline at end of file diff --git a/p2p/starknet/p2p/proto/header.proto b/p2p/starknet/p2p/proto/header.proto new file mode 100644 index 0000000000..12d765ad9f --- /dev/null +++ b/p2p/starknet/p2p/proto/header.proto @@ -0,0 +1,56 @@ +syntax = "proto3"; +import "p2p/proto/common.proto"; + +option go_package = "github.com/NethermindEth/juno/p2p/starknet/spec"; + +// Note: commitments may change to be for the previous blocks like comet/tendermint +// hash of block header sent to L1 +message SignedBlockHeader { + Hash block_hash = 1; // For the structure of the block hash, see https://docs.starknet.io/documentation/architecture_and_concepts/Network_Architecture/header/#block_hash + Hash parent_hash = 2; + uint64 number = 3; // This can be deduced from context. We can consider removing this field. + uint64 time = 4; // Encoded in Unix time. + Address sequencer_address = 5; + Hash state_root = 6; // Patricia root of contract and class patricia tries. Each of those tries are of height 251. Same as in L1. Later more trees will be included + StateDiffCommitment state_diff_commitment = 7; // The state diff commitment returned by the Starknet Feeder Gateway + // For more info, see https://community.starknet.io/t/introducing-p2p-authentication-and-mismatch-resolution-in-v0-12-2/97993 + // The leaves contain a hash of the transaction hash and transaction signature. + Patricia transactions = 8; // By order of execution. TBD: required? the client can execute (powerful machine) and match state diff + Patricia events = 9; // By order of issuance. TBD: in receipts? + Hash receipts = 10; // By order of issuance. This is a patricia root. No need for length because it's the same length as transactions. + string protocol_version = 11; // Starknet version + Uint128 gas_price_fri = 12; + Uint128 gas_price_wei = 13; + Uint128 data_gas_price_fri = 14; + Uint128 data_gas_price_wei = 15; + L1DataAvailabilityMode l1_data_availability_mode = 16; + // for now, we assume a small consensus, so this fits in 1M. Else, these will be repeated and extracted from this message. + repeated ConsensusSignature signatures = 17; + // can be more explicit here about the signature structure as this is not part of account abstraction +} + +// sent to all peers (except the ones this was received from, if any). +// for a fraction of peers, also send the GetBlockHeaders response (as if they asked for it for this block) +message NewBlock { + oneof maybe_full { + BlockID id = 1; + BlockHeadersResponse header = 2; + } +} + + +message BlockHeadersRequest { + Iteration iteration = 1; +} + +// Responses are sent ordered by the order given in the request. +message BlockHeadersResponse { + oneof header_message { + SignedBlockHeader header = 1; + Fin fin = 2; // Fin is sent after the peer sent all the data or when it encountered a block that it doesn't have its header. + } +} + +message BlockProof { + repeated bytes proof = 1; +} \ No newline at end of file diff --git a/p2p/starknet/p2p/proto/mempool.proto b/p2p/starknet/p2p/proto/mempool.proto deleted file mode 100644 index fc8b4dd4cb..0000000000 --- a/p2p/starknet/p2p/proto/mempool.proto +++ /dev/null @@ -1,30 +0,0 @@ -syntax = "proto3"; - -import "p2p/proto/common.proto"; -import "p2p/proto/transaction.proto"; - -// Support also non-validating node that wants to know of the mempool (e.g. to estimate fee in case of first price) -// Result is PooledTransactions+ -message PooledTransactionsRequest -{ - message Known { - oneof known { - Hashes txs = 1; // for mempool of 2000 txs, this will be 64K. Can use Hash32 instead (8K)... - uint64 marker = 2; // since last returned marker. - } - } - optional Known known = 1; -} - -// Can be also a push, similar to NewBlock. So a full node that accepts a new transaction from a wallet -// can propagate it without being pulled -// nodes should track state diffs to know when txs have been included (the contract nonce increases) -message PolledTransactionsResponse { - optional uint64 marker = 1; // optional, if the peer supports that. - bool baseline = 2; // means treat all data as baseline, not diff (may be if 'known' was sent but the mempool was reset/reorged - - oneof responses { - Transactions pending = 3; // if 'known' is given, they will be only txs added after the known - Fin fin = 4; - } -} diff --git a/p2p/starknet/p2p/proto/receipt.proto b/p2p/starknet/p2p/proto/receipt.proto index 74e36d876d..ffadabedc2 100644 --- a/p2p/starknet/p2p/proto/receipt.proto +++ b/p2p/starknet/p2p/proto/receipt.proto @@ -1,49 +1,49 @@ syntax = "proto3"; import "p2p/proto/common.proto"; +option go_package = "github.com/NethermindEth/juno/p2p/starknet/spec"; + message MessageToL1 { - Felt252 from_address = 1; - repeated Felt252 payload = 2; - EthereumAddress to_address = 3; + Felt252 from_address = 2; + repeated Felt252 payload = 3; + EthereumAddress to_address = 4; } -message EthereumAddress { - bytes elements = 1; +enum PriceUnit { + Wei = 0; + Fri = 1; } -message MessageToL2 { - EthereumAddress from_address = 1; - repeated Felt252 payload = 2; - Felt252 to_address = 3; - Felt252 entry_point_selector = 4; - Felt252 nonce = 5; +message EthereumAddress { + bytes elements = 1; } message Receipt { message ExecutionResources { message BuiltinCounter { - uint32 bitwise = 1; - uint32 ecdsa = 2; - uint32 ec_op = 3; - uint32 pedersen = 4; + uint32 bitwise = 1; + uint32 ecdsa = 2; + uint32 ec_op = 3; + uint32 pedersen = 4; uint32 range_check = 5; - uint32 poseidon = 6; - uint32 keccak = 7; - uint32 output = 8; + uint32 poseidon = 6; + uint32 keccak = 7; + uint32 output = 8; } - BuiltinCounter builtins = 1; - uint32 steps = 2; - uint32 memory_holes = 3; + BuiltinCounter builtins = 1; + uint32 steps = 2; + uint32 memory_holes = 3; + Felt252 l1_gas = 4; + Felt252 l1_data_gas = 5; } message Common { - Hash transaction_hash = 1; - Felt252 actual_fee = 2; - repeated MessageToL1 messages_sent = 3; - ExecutionResources execution_resources = 4; - string revert_reason = 5; - optional MessageToL2 consumed_message = 6; + Felt252 actual_fee = 2; + PriceUnit price_unit = 3; + repeated MessageToL1 messages_sent = 4; + ExecutionResources execution_resources = 5; + optional string revert_reason = 6; } @@ -52,8 +52,8 @@ message Receipt { } message L1Handler { - Common common = 1; - Hash msg_hash = 2; + Common common = 1; + Hash msg_hash = 2; } message Declare { @@ -66,32 +66,15 @@ message Receipt { } message DeployAccount { - Common common = 1; + Common common = 1; Felt252 contract_address = 2; } oneof type { - Invoke invoke = 1; - L1Handler l1_handler = 2; - Declare declare = 3; - Deploy deprecated_deploy = 4; - DeployAccount deploy_account = 5; - } -} - -message ReceiptsRequest { - Iteration iteration = 1; -} - -message Receipts { - repeated Receipt items = 2; -} - -message ReceiptsResponse { - optional BlockID id = 1; // may not appear if Fin is sent to end the whole response - - oneof responses { - Receipts receipts = 2; - Fin fin = 3; + Invoke invoke = 1; + L1Handler l1_handler = 2; + Declare declare = 3; + Deploy deprecated_deploy = 4; + DeployAccount deploy_account = 5; } -} +} \ No newline at end of file diff --git a/p2p/starknet/p2p/proto/snapshot.proto b/p2p/starknet/p2p/proto/snapshot.proto deleted file mode 100644 index 3f866747f9..0000000000 --- a/p2p/starknet/p2p/proto/snapshot.proto +++ /dev/null @@ -1,109 +0,0 @@ -syntax = "proto3"; - -import "p2p/proto/common.proto"; -import "p2p/proto/state.proto"; - -message PatriciaNode { - message Edge { - uint32 length = 1; - Felt252 path = 2; // as bits of left/right - Felt252 value = 3; - } - message Binary { - Felt252 left = 1; - Felt252 right = 2; - } - - oneof node { - Edge edge = 1; - Binary binary = 2; - } -} - -// non leaf nodes required to build the trie given the range (leaves) -message PatriciaRangeProof { - repeated PatriciaNode nodes = 1; -} - -// leafs of the contract state tree -message ContractState { - Address address = 1; // the key - Hash class = 2; - Hash storage = 3; // patricia - uint64 nonce = 4; -} - -// request a range from the contract state tree that matches the given root (block) -// starts at 'start' and ends no more than 'end'. -// the result is (ContractRange+, PatriciaRangeProof)* -message ContractRangeRequest { - uint32 domain = 1; // volition - Hash state_root = 2; - Address start = 3; - Address end = 4; - uint32 chunks_per_proof = 5; // how many ContractRange items to send before sending a proof -} - -// stream of leaves in the contracts tree -message ContractRange { - repeated ContractState state = 1; -} - -message ContractRangeResponse { - optional Hash root = 1; // may not appear if Fin is sent to end the whole response - optional Hash contracts_root = 2;// may not appear if Fin is sent to end the whole response - optional Hash classes_root = 3;// may not appear if Fin is sent to end the whole response - oneof responses { - ContractRange range = 4; - Fin fin = 5; - } -} - -// duplicate of GetContractRange. Can introduce a 'type' instead. -// result is (Classes+, PatriciaRangeProof)* -message ClassRangeRequest { - Hash root = 1; - Hash start = 2; - Hash end = 3; - uint32 chunks_per_proof = 4; -} - -message ClassRangeResponse { - optional Hash root = 1; // may not appear if Fin is sent to end the whole response - optional Hash contracts_root = 2;// may not appear if Fin is sent to end the whole response - optional Hash classes_root = 3;// may not appear if Fin is sent to end the whole response - oneof responses { - Classes classes = 4; - Fin fin = 5; - } -} - -// A position in some contract's state tree is identified by the state tree's root and the key in it -message StorageLeafQuery { - Hash contract_storage_root = 1; - Felt252 key = 2; -} - -message StorageRangeQuery { - StorageLeafQuery start = 1; - StorageLeafQuery end = 2; -} - -// result is (ContractStorageRange+, PatriciaRangeProof)* -message ContractStorageRequest { - uint32 domain = 1; // volition - Hash state_root = 2; - repeated StorageRangeQuery query = 3; -} - -message ContractStorage { - repeated ContractStoredValue keyValue = 2; -} - -message ContractStorageResponse { - optional Hash state_root = 1; // may not appear if Fin is sent to end the whole response - oneof responses { - ContractStorage storage = 2; - Fin fin = 3; - } -} diff --git a/p2p/starknet/p2p/proto/state.proto b/p2p/starknet/p2p/proto/state.proto index 9415db619e..79f33fcafe 100644 --- a/p2p/starknet/p2p/proto/state.proto +++ b/p2p/starknet/p2p/proto/state.proto @@ -1,6 +1,7 @@ syntax = "proto3"; import "p2p/proto/common.proto"; +option go_package = "github.com/NethermindEth/juno/p2p/starknet/spec"; // optimized for flat storage, not through a trie (not sharing key prefixes) message ContractStoredValue { @@ -8,71 +9,29 @@ message ContractStoredValue { Felt252 value = 2; } -message StateDiff -{ - // a bit more efficient than the state sync separation - message ContractDiff { - Address address = 1; - optional Felt252 nonce = 2; - optional Felt252 class_hash = 3; // can change for replace_class or new contract - repeated ContractStoredValue values = 4; - } - - message ContractAddrToClassHash { - Address contract_addr = 1; - Hash class_hash = 2; - } - - uint32 domain = 1; // volition state domain - repeated ContractDiff contract_diffs = 2; - repeated ContractAddrToClassHash replaced_classes = 3; - repeated ContractAddrToClassHash deployed_contracts = 4; -} - -message EntryPoint { - Felt252 selector = 1; - Felt252 offset = 2; +message ContractDiff { + Address address = 1; + optional Felt252 nonce = 2; // Present only if the nonce was updated + optional Hash class_hash = 3; // Present only if the contract was deployed or replaced in this block. + repeated ContractStoredValue values = 4; + VolitionDomain domain = 5; } -message Cairo0Class { - bytes abi = 1; - repeated EntryPoint externals = 2; - repeated EntryPoint l1_handlers = 3; - repeated EntryPoint constructors = 4; - bytes program = 5; +message DeclaredClass { + Hash class_hash = 1; + optional Hash compiled_class_hash = 2; // Present only if the class is Cairo1 } -message SierraEntryPoint { - uint64 index = 1; - Felt252 selector = 2; +message StateDiffsRequest { + Iteration iteration = 1; } -message Cairo1EntryPoints { - repeated SierraEntryPoint externals = 1; - repeated SierraEntryPoint l1_handlers = 2; - repeated SierraEntryPoint constructors = 3; -} - -message Cairo1Class { - bytes abi = 1; - Cairo1EntryPoints entry_points = 2; - repeated Felt252 program = 3; - string contract_class_version = 4; - bytes compiled = 5; -} - -// is it better to separate the definition from the hashes? (will need to repeate the hashes -// for the definitions stream) -// or, make the definitions optional? maybe it is enough to know only that a class exists, not its definition -// which may be fetched lazily later. -message Class { - oneof class { - Cairo0Class cairo0 = 1; - Cairo1Class cairo1 = 2; +// Responses are sent ordered by the order given in the request. +message StateDiffsResponse { + // All of the messages related to a block need to be sent before a message from the next block is sent. + oneof state_diff_message { + ContractDiff contract_diff = 1; // Multiple contract diffs for the same contract may appear continuously if the diff is too large or if it's more convenient. + DeclaredClass declared_class = 2; + Fin fin = 3; // Fin is sent after the peer sent all the data or when it encountered a block that it doesn't have its state diff. } -} - -message Classes { - uint32 domain = 1; - repeated Class classes = 2; } \ No newline at end of file diff --git a/p2p/starknet/p2p/proto/transaction.proto b/p2p/starknet/p2p/proto/transaction.proto index 5877b12517..4736d78f6f 100644 --- a/p2p/starknet/p2p/proto/transaction.proto +++ b/p2p/starknet/p2p/proto/transaction.proto @@ -1,154 +1,168 @@ syntax = "proto3"; import "p2p/proto/common.proto"; +import "p2p/proto/receipt.proto"; + +option go_package = "github.com/NethermindEth/juno/p2p/starknet/spec"; message ResourceLimits { - Felt252 max_amount = 1; + Felt252 max_amount = 1; Felt252 max_price_per_unit = 2; } +message ResourceBounds { + ResourceLimits l1_gas = 1; + ResourceLimits l2_gas = 2; +} + message AccountSignature { repeated Felt252 parts = 1; } +// This is a transaction that is already accepted in a block. Once we have a mempool, we will define +// a separate message for BroadcastedTransaction. message Transaction { message DeclareV0 { - Address sender = 1; - Felt252 max_fee = 2; - AccountSignature signature = 3; - Hash class_hash = 4; + Address sender = 1; + Felt252 max_fee = 2; + AccountSignature signature = 3; + Hash class_hash = 4; } message DeclareV1 { - Address sender = 1; - Felt252 max_fee = 2; - AccountSignature signature = 3; - Hash class_hash = 4; - Felt252 nonce = 5; + Address sender = 1; + Felt252 max_fee = 2; + AccountSignature signature = 3; + Hash class_hash = 4; + Felt252 nonce = 5; } message DeclareV2 { - Address sender = 1; - Felt252 max_fee = 2; - AccountSignature signature = 3; - Hash class_hash = 4; - Felt252 nonce = 5; - Felt252 compiled_class_hash = 6; + Address sender = 1; + Felt252 max_fee = 2; + AccountSignature signature = 3; + Hash class_hash = 4; + Felt252 nonce = 5; + Hash compiled_class_hash = 6; } + // see https://external.integration.starknet.io/feeder_gateway/get_transaction?transactionHash=0x41d1f5206ef58a443e7d3d1ca073171ec25fa75313394318fc83a074a6631c3 message DeclareV3 { - Address sender = 1; - Felt252 max_fee = 2; - AccountSignature signature = 3; - Hash class_hash = 4; - Felt252 nonce = 5; - Felt252 compiled_class_hash = 6; - ResourceLimits l1_gas = 7; - ResourceLimits l2_gas = 8; - Felt252 tip = 9; - Address paymaster = 10; - string nonce_domain = 11; - string fee_domain = 12; + Address sender = 1; + AccountSignature signature = 2; + Hash class_hash = 3; + Felt252 nonce = 4; + Hash compiled_class_hash = 5; + ResourceBounds resource_bounds = 6; + uint64 tip = 7; + repeated Felt252 paymaster_data = 8; + repeated Felt252 account_deployment_data = 9; + VolitionDomain nonce_data_availability_mode = 10; + VolitionDomain fee_data_availability_mode = 11; } message Deploy { - Hash class_hash = 1; - Felt252 address_salt = 2; + Hash class_hash = 1; + Felt252 address_salt = 2; repeated Felt252 calldata = 3; + uint32 version = 4; } message DeployAccountV1 { - Felt252 max_fee = 1; - AccountSignature signature = 2; - Hash class_hash = 3; - Felt252 nonce = 4; - Felt252 address_salt = 5; - repeated Felt252 calldata = 6; + Felt252 max_fee = 1; + AccountSignature signature = 2; + Hash class_hash = 3; + Felt252 nonce = 4; + Felt252 address_salt = 5; + repeated Felt252 calldata = 6; } + // see https://external.integration.starknet.io/feeder_gateway/get_transaction?transactionHash=0x29fd7881f14380842414cdfdd8d6c0b1f2174f8916edcfeb1ede1eb26ac3ef0 message DeployAccountV3 { - Felt252 max_fee = 1; - AccountSignature signature = 2; - Hash class_hash = 3; - Felt252 nonce = 4; - Felt252 address_salt = 5; - repeated Felt252 calldata = 6; - ResourceLimits l1_gas = 7; - ResourceLimits l2_gas = 8; - Felt252 tip = 9; - Address paymaster = 10; - string nonce_domain = 11; - string fee_domain = 12; + AccountSignature signature = 1; + Hash class_hash = 2; + Felt252 nonce = 3; + Felt252 address_salt = 4; + repeated Felt252 calldata = 5; + ResourceBounds resource_bounds = 6; + uint64 tip = 7; + repeated Felt252 paymaster_data = 8; + VolitionDomain nonce_data_availability_mode = 9; + VolitionDomain fee_data_availability_mode = 10; } message InvokeV0 { - Felt252 max_fee = 1; - AccountSignature signature = 2; - Address address = 3; - Felt252 entry_point_selector = 4; - repeated Felt252 calldata = 5; + Felt252 max_fee = 1; + AccountSignature signature = 2; + Address address = 3; + Felt252 entry_point_selector = 4; + repeated Felt252 calldata = 5; } message InvokeV1 { - Address sender = 1; - Felt252 max_fee = 2; - AccountSignature signature = 3; - repeated Felt252 calldata = 4; - Felt252 nonce = 5; + Address sender = 1; + Felt252 max_fee = 2; + AccountSignature signature = 3; + repeated Felt252 calldata = 4; + Felt252 nonce = 5; } + // see https://external.integration.starknet.io/feeder_gateway/get_transaction?transactionHash=0x41906f1c314cca5f43170ea75d3b1904196a10101190d2b12a41cc61cfd17c message InvokeV3 { - Address sender = 1; - Felt252 max_fee = 2; - AccountSignature signature = 3; - repeated Felt252 calldata = 4; - ResourceLimits l1_gas = 5; - ResourceLimits l2_gas = 6; - Felt252 tip = 7; - Address paymaster = 8; - string nonce_domain = 9; - string fee_domain = 10; - Felt252 nonce = 11; + Address sender = 1; + AccountSignature signature = 2; + repeated Felt252 calldata = 3; + ResourceBounds resource_bounds = 4; + uint64 tip = 5; + repeated Felt252 paymaster_data = 6; + repeated Felt252 account_deployment_data = 7; + VolitionDomain nonce_data_availability_mode = 8; + VolitionDomain fee_data_availability_mode = 9; + Felt252 nonce = 10; } - message L1HandlerV1 { - Felt252 nonce = 1; - Address address = 2; - Felt252 entry_point_selector = 3; - repeated Felt252 calldata = 4; + message L1HandlerV0 { + Felt252 nonce = 1; + Address address = 2; + Felt252 entry_point_selector = 3; + repeated Felt252 calldata = 4; } oneof txn { - DeclareV0 declare_v0 = 1; - DeclareV1 declare_v1 = 2; - DeclareV2 declare_v2 = 3; - DeclareV3 declare_v3 = 4; - Deploy deploy = 5; + DeclareV0 declare_v0 = 1; + DeclareV1 declare_v1 = 2; + DeclareV2 declare_v2 = 3; + DeclareV3 declare_v3 = 4; + Deploy deploy = 5; DeployAccountV1 deploy_account_v1 = 6; DeployAccountV3 deploy_account_v3 = 7; - InvokeV0 invoke_v0 = 8; - InvokeV1 invoke_v1 = 9; - InvokeV3 invoke_v3 = 10; - L1HandlerV1 l1_handler = 11; + InvokeV0 invoke_v0 = 8; + InvokeV1 invoke_v1 = 9; + InvokeV3 invoke_v3 = 10; + L1HandlerV0 l1_handler = 11; } } +message TransactionWithReceipt { + Transaction transaction = 1; + Receipt receipt = 2; +} + // TBD: can support a flag to return tx hashes only, good for standalone mempool to remove them, // or any node that keeps track of transaction streaming in the consensus. message TransactionsRequest { Iteration iteration = 1; } -// can be several in a single reply -message Transactions { - repeated Transaction items = 1; -} - +// Responses are sent ordered by the order given in the request. The order inside each block is +// according to the execution order. message TransactionsResponse { - optional BlockID id = 1; // may not appear if Fin is sent to end the whole response - - oneof responses { - Transactions transactions = 2; - Fin fin = 3; + oneof transaction_message { + TransactionWithReceipt transaction_with_receipt = 1; + Fin fin = 2; // Fin is sent after the peer sent all the data or when it encountered a block that it doesn't have its transactions. } +} + +message Transactions { + repeated Transaction transactions = 1; } \ No newline at end of file diff --git a/p2p/starknet/spec/block.pb.go b/p2p/starknet/spec/block.pb.go deleted file mode 100644 index 055ab743ea..0000000000 --- a/p2p/starknet/spec/block.pb.go +++ /dev/null @@ -1,1096 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.4 -// source: p2p/proto/block.proto - -package spec - -import ( - reflect "reflect" - sync "sync" - - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// for now, we assume a small consensus, so this fits in 1M. Else, these will be repeated -type Signatures struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Block *BlockID `protobuf:"bytes,1,opt,name=block,proto3" json:"block,omitempty"` - Signatures []*ConsensusSignature `protobuf:"bytes,2,rep,name=signatures,proto3" json:"signatures,omitempty"` // -} - -func (x *Signatures) Reset() { - *x = Signatures{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_block_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Signatures) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Signatures) ProtoMessage() {} - -func (x *Signatures) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_block_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Signatures.ProtoReflect.Descriptor instead. -func (*Signatures) Descriptor() ([]byte, []int) { - return file_p2p_proto_block_proto_rawDescGZIP(), []int{0} -} - -func (x *Signatures) GetBlock() *BlockID { - if x != nil { - return x.Block - } - return nil -} - -func (x *Signatures) GetSignatures() []*ConsensusSignature { - if x != nil { - return x.Signatures - } - return nil -} - -// Note: commitments may change to be for the previous blocks like comet/tendermint -// hash of block header sent to L1 -type BlockHeader struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ParentHash *Hash `protobuf:"bytes,1,opt,name=parent_hash,json=parentHash,proto3" json:"parent_hash,omitempty"` - Number uint64 `protobuf:"varint,2,opt,name=number,proto3" json:"number,omitempty"` - Time *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=time,proto3" json:"time,omitempty"` // TODO: see if this needs to be Felt252 or can be converted - SequencerAddress *Address `protobuf:"bytes,4,opt,name=sequencer_address,json=sequencerAddress,proto3" json:"sequencer_address,omitempty"` - StateDiffs *Merkle `protobuf:"bytes,5,opt,name=state_diffs,json=stateDiffs,proto3" json:"state_diffs,omitempty"` // By order of (contract, key), taking last in case of duplicates. - // This means the proposer needs to sort after finishing the block (TBD: patricia? ) - // State is optional and appears every X blocks for the last block. This is to support - // snapshot sync and also so that light nodes can sync on state without state diffs. - State *Patricia `protobuf:"bytes,6,opt,name=state,proto3" json:"state,omitempty"` // hash of contract and class patricia tries. Same as in L1. Later more trees will be included - ProofFact *Hash `protobuf:"bytes,7,opt,name=proof_fact,json=proofFact,proto3" json:"proof_fact,omitempty"` // for Kth block behind. A hash of the output of the proof - // The following merkles can be built on the fly while sequencing/validating txs. - Transactions *Merkle `protobuf:"bytes,8,opt,name=transactions,proto3" json:"transactions,omitempty"` // By order of execution. TBD: required? the client can execute (powerful machine) and match state diff - Events *Merkle `protobuf:"bytes,9,opt,name=events,proto3" json:"events,omitempty"` // By order of issuance. TBD: in receipts? - Receipts *Merkle `protobuf:"bytes,10,opt,name=receipts,proto3" json:"receipts,omitempty"` // By order of issuance. - ProtocolVersion string `protobuf:"bytes,11,opt,name=protocol_version,json=protocolVersion,proto3" json:"protocol_version,omitempty"` // Starknet version - GasPrice *Felt252 `protobuf:"bytes,12,opt,name=gas_price,json=gasPrice,proto3" json:"gas_price,omitempty"` -} - -func (x *BlockHeader) Reset() { - *x = BlockHeader{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_block_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BlockHeader) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BlockHeader) ProtoMessage() {} - -func (x *BlockHeader) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_block_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BlockHeader.ProtoReflect.Descriptor instead. -func (*BlockHeader) Descriptor() ([]byte, []int) { - return file_p2p_proto_block_proto_rawDescGZIP(), []int{1} -} - -func (x *BlockHeader) GetParentHash() *Hash { - if x != nil { - return x.ParentHash - } - return nil -} - -func (x *BlockHeader) GetNumber() uint64 { - if x != nil { - return x.Number - } - return 0 -} - -func (x *BlockHeader) GetTime() *timestamppb.Timestamp { - if x != nil { - return x.Time - } - return nil -} - -func (x *BlockHeader) GetSequencerAddress() *Address { - if x != nil { - return x.SequencerAddress - } - return nil -} - -func (x *BlockHeader) GetStateDiffs() *Merkle { - if x != nil { - return x.StateDiffs - } - return nil -} - -func (x *BlockHeader) GetState() *Patricia { - if x != nil { - return x.State - } - return nil -} - -func (x *BlockHeader) GetProofFact() *Hash { - if x != nil { - return x.ProofFact - } - return nil -} - -func (x *BlockHeader) GetTransactions() *Merkle { - if x != nil { - return x.Transactions - } - return nil -} - -func (x *BlockHeader) GetEvents() *Merkle { - if x != nil { - return x.Events - } - return nil -} - -func (x *BlockHeader) GetReceipts() *Merkle { - if x != nil { - return x.Receipts - } - return nil -} - -func (x *BlockHeader) GetProtocolVersion() string { - if x != nil { - return x.ProtocolVersion - } - return "" -} - -func (x *BlockHeader) GetGasPrice() *Felt252 { - if x != nil { - return x.GasPrice - } - return nil -} - -type BlockProof struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Proof []byte `protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"` // proof size is currently 142K -} - -func (x *BlockProof) Reset() { - *x = BlockProof{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_block_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BlockProof) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BlockProof) ProtoMessage() {} - -func (x *BlockProof) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_block_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BlockProof.ProtoReflect.Descriptor instead. -func (*BlockProof) Descriptor() ([]byte, []int) { - return file_p2p_proto_block_proto_rawDescGZIP(), []int{2} -} - -func (x *BlockProof) GetProof() []byte { - if x != nil { - return x.Proof - } - return nil -} - -// sent to all peers (except the ones this was received from, if any). -// for a fraction of peers, also send the GetBlockHeaders and GetBlockBodies response (as if they asked for it for this block) -type NewBlock struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to MaybeFull: - // - // *NewBlock_Id - // *NewBlock_Header - // *NewBlock_Body - MaybeFull isNewBlock_MaybeFull `protobuf_oneof:"maybe_full"` -} - -func (x *NewBlock) Reset() { - *x = NewBlock{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_block_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NewBlock) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NewBlock) ProtoMessage() {} - -func (x *NewBlock) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_block_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NewBlock.ProtoReflect.Descriptor instead. -func (*NewBlock) Descriptor() ([]byte, []int) { - return file_p2p_proto_block_proto_rawDescGZIP(), []int{3} -} - -func (m *NewBlock) GetMaybeFull() isNewBlock_MaybeFull { - if m != nil { - return m.MaybeFull - } - return nil -} - -func (x *NewBlock) GetId() *BlockID { - if x, ok := x.GetMaybeFull().(*NewBlock_Id); ok { - return x.Id - } - return nil -} - -func (x *NewBlock) GetHeader() *BlockHeadersResponse { - if x, ok := x.GetMaybeFull().(*NewBlock_Header); ok { - return x.Header - } - return nil -} - -func (x *NewBlock) GetBody() *BlockBodiesResponse { - if x, ok := x.GetMaybeFull().(*NewBlock_Body); ok { - return x.Body - } - return nil -} - -type isNewBlock_MaybeFull interface { - isNewBlock_MaybeFull() -} - -type NewBlock_Id struct { - Id *BlockID `protobuf:"bytes,1,opt,name=id,proto3,oneof"` -} - -type NewBlock_Header struct { - Header *BlockHeadersResponse `protobuf:"bytes,2,opt,name=header,proto3,oneof"` -} - -type NewBlock_Body struct { - Body *BlockBodiesResponse `protobuf:"bytes,3,opt,name=body,proto3,oneof"` -} - -func (*NewBlock_Id) isNewBlock_MaybeFull() {} - -func (*NewBlock_Header) isNewBlock_MaybeFull() {} - -func (*NewBlock_Body) isNewBlock_MaybeFull() {} - -// Requests a peer's CurrentBlockHeader -type CurrentBlockHeaderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CurrentBlockHeaderRequest) Reset() { - *x = CurrentBlockHeaderRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_block_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CurrentBlockHeaderRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CurrentBlockHeaderRequest) ProtoMessage() {} - -func (x *CurrentBlockHeaderRequest) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_block_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CurrentBlockHeaderRequest.ProtoReflect.Descriptor instead. -func (*CurrentBlockHeaderRequest) Descriptor() ([]byte, []int) { - return file_p2p_proto_block_proto_rawDescGZIP(), []int{4} -} - -// result is (BlockHeader, Signature?)* in order of creation (incr/dec) -type BlockHeadersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Iteration *Iteration `protobuf:"bytes,1,opt,name=iteration,proto3" json:"iteration,omitempty"` -} - -func (x *BlockHeadersRequest) Reset() { - *x = BlockHeadersRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_block_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BlockHeadersRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BlockHeadersRequest) ProtoMessage() {} - -func (x *BlockHeadersRequest) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_block_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BlockHeadersRequest.ProtoReflect.Descriptor instead. -func (*BlockHeadersRequest) Descriptor() ([]byte, []int) { - return file_p2p_proto_block_proto_rawDescGZIP(), []int{5} -} - -func (x *BlockHeadersRequest) GetIteration() *Iteration { - if x != nil { - return x.Iteration - } - return nil -} - -type BlockHeadersResponsePart struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to HeaderMessage: - // - // *BlockHeadersResponsePart_Header - // *BlockHeadersResponsePart_Signatures - // *BlockHeadersResponsePart_Fin - HeaderMessage isBlockHeadersResponsePart_HeaderMessage `protobuf_oneof:"header_message"` -} - -func (x *BlockHeadersResponsePart) Reset() { - *x = BlockHeadersResponsePart{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_block_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BlockHeadersResponsePart) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BlockHeadersResponsePart) ProtoMessage() {} - -func (x *BlockHeadersResponsePart) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_block_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BlockHeadersResponsePart.ProtoReflect.Descriptor instead. -func (*BlockHeadersResponsePart) Descriptor() ([]byte, []int) { - return file_p2p_proto_block_proto_rawDescGZIP(), []int{6} -} - -func (m *BlockHeadersResponsePart) GetHeaderMessage() isBlockHeadersResponsePart_HeaderMessage { - if m != nil { - return m.HeaderMessage - } - return nil -} - -func (x *BlockHeadersResponsePart) GetHeader() *BlockHeader { - if x, ok := x.GetHeaderMessage().(*BlockHeadersResponsePart_Header); ok { - return x.Header - } - return nil -} - -func (x *BlockHeadersResponsePart) GetSignatures() *Signatures { - if x, ok := x.GetHeaderMessage().(*BlockHeadersResponsePart_Signatures); ok { - return x.Signatures - } - return nil -} - -func (x *BlockHeadersResponsePart) GetFin() *Fin { - if x, ok := x.GetHeaderMessage().(*BlockHeadersResponsePart_Fin); ok { - return x.Fin - } - return nil -} - -type isBlockHeadersResponsePart_HeaderMessage interface { - isBlockHeadersResponsePart_HeaderMessage() -} - -type BlockHeadersResponsePart_Header struct { - Header *BlockHeader `protobuf:"bytes,1,opt,name=header,proto3,oneof"` -} - -type BlockHeadersResponsePart_Signatures struct { - Signatures *Signatures `protobuf:"bytes,2,opt,name=signatures,proto3,oneof"` -} - -type BlockHeadersResponsePart_Fin struct { - Fin *Fin `protobuf:"bytes,3,opt,name=fin,proto3,oneof"` // no support for interleaving for now -} - -func (*BlockHeadersResponsePart_Header) isBlockHeadersResponsePart_HeaderMessage() {} - -func (*BlockHeadersResponsePart_Signatures) isBlockHeadersResponsePart_HeaderMessage() {} - -func (*BlockHeadersResponsePart_Fin) isBlockHeadersResponsePart_HeaderMessage() {} - -type BlockHeadersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Part []*BlockHeadersResponsePart `protobuf:"bytes,1,rep,name=part,proto3" json:"part,omitempty"` -} - -func (x *BlockHeadersResponse) Reset() { - *x = BlockHeadersResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_block_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BlockHeadersResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BlockHeadersResponse) ProtoMessage() {} - -func (x *BlockHeadersResponse) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_block_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BlockHeadersResponse.ProtoReflect.Descriptor instead. -func (*BlockHeadersResponse) Descriptor() ([]byte, []int) { - return file_p2p_proto_block_proto_rawDescGZIP(), []int{7} -} - -func (x *BlockHeadersResponse) GetPart() []*BlockHeadersResponsePart { - if x != nil { - return x.Part - } - return nil -} - -// result is (StateDiff*, Classes*, BlockProof?)* currently in creation order (incr/dec), but may change in the future -type BlockBodiesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Iteration *Iteration `protobuf:"bytes,1,opt,name=iteration,proto3" json:"iteration,omitempty"` -} - -func (x *BlockBodiesRequest) Reset() { - *x = BlockBodiesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_block_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BlockBodiesRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BlockBodiesRequest) ProtoMessage() {} - -func (x *BlockBodiesRequest) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_block_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BlockBodiesRequest.ProtoReflect.Descriptor instead. -func (*BlockBodiesRequest) Descriptor() ([]byte, []int) { - return file_p2p_proto_block_proto_rawDescGZIP(), []int{8} -} - -func (x *BlockBodiesRequest) GetIteration() *Iteration { - if x != nil { - return x.Iteration - } - return nil -} - -type BlockBodiesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id *BlockID `protobuf:"bytes,1,opt,name=id,proto3,oneof" json:"id,omitempty"` // may not appear if Fin is sent to end the whole response - // Types that are assignable to BodyMessage: - // - // *BlockBodiesResponse_Diff - // *BlockBodiesResponse_Classes - // *BlockBodiesResponse_Proof - // *BlockBodiesResponse_Fin - BodyMessage isBlockBodiesResponse_BodyMessage `protobuf_oneof:"body_message"` -} - -func (x *BlockBodiesResponse) Reset() { - *x = BlockBodiesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_block_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BlockBodiesResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BlockBodiesResponse) ProtoMessage() {} - -func (x *BlockBodiesResponse) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_block_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BlockBodiesResponse.ProtoReflect.Descriptor instead. -func (*BlockBodiesResponse) Descriptor() ([]byte, []int) { - return file_p2p_proto_block_proto_rawDescGZIP(), []int{9} -} - -func (x *BlockBodiesResponse) GetId() *BlockID { - if x != nil { - return x.Id - } - return nil -} - -func (m *BlockBodiesResponse) GetBodyMessage() isBlockBodiesResponse_BodyMessage { - if m != nil { - return m.BodyMessage - } - return nil -} - -func (x *BlockBodiesResponse) GetDiff() *StateDiff { - if x, ok := x.GetBodyMessage().(*BlockBodiesResponse_Diff); ok { - return x.Diff - } - return nil -} - -func (x *BlockBodiesResponse) GetClasses() *Classes { - if x, ok := x.GetBodyMessage().(*BlockBodiesResponse_Classes); ok { - return x.Classes - } - return nil -} - -func (x *BlockBodiesResponse) GetProof() *BlockProof { - if x, ok := x.GetBodyMessage().(*BlockBodiesResponse_Proof); ok { - return x.Proof - } - return nil -} - -func (x *BlockBodiesResponse) GetFin() *Fin { - if x, ok := x.GetBodyMessage().(*BlockBodiesResponse_Fin); ok { - return x.Fin - } - return nil -} - -type isBlockBodiesResponse_BodyMessage interface { - isBlockBodiesResponse_BodyMessage() -} - -type BlockBodiesResponse_Diff struct { - Diff *StateDiff `protobuf:"bytes,2,opt,name=diff,proto3,oneof"` -} - -type BlockBodiesResponse_Classes struct { - Classes *Classes `protobuf:"bytes,3,opt,name=classes,proto3,oneof"` -} - -type BlockBodiesResponse_Proof struct { - Proof *BlockProof `protobuf:"bytes,4,opt,name=proof,proto3,oneof"` -} - -type BlockBodiesResponse_Fin struct { - Fin *Fin `protobuf:"bytes,5,opt,name=fin,proto3,oneof"` -} - -func (*BlockBodiesResponse_Diff) isBlockBodiesResponse_BodyMessage() {} - -func (*BlockBodiesResponse_Classes) isBlockBodiesResponse_BodyMessage() {} - -func (*BlockBodiesResponse_Proof) isBlockBodiesResponse_BodyMessage() {} - -func (*BlockBodiesResponse_Fin) isBlockBodiesResponse_BodyMessage() {} - -var File_p2p_proto_block_proto protoreflect.FileDescriptor - -var file_p2p_proto_block_proto_rawDesc = []byte{ - 0x0a, 0x15, 0x70, 0x32, 0x70, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x70, 0x32, 0x70, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x15, 0x70, 0x32, 0x70, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x61, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x44, 0x52, 0x05, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x33, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x43, 0x6f, 0x6e, 0x73, - 0x65, 0x6e, 0x73, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xea, 0x03, 0x0a, 0x0b, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0b, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, - 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x11, 0x73, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, - 0x10, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x28, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, - 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x44, 0x69, 0x66, 0x66, 0x73, 0x12, 0x1f, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x50, 0x61, 0x74, - 0x72, 0x69, 0x63, 0x69, 0x61, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0a, - 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x46, 0x61, - 0x63, 0x74, 0x12, 0x2b, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, - 0x65, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x1f, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x07, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x23, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x08, 0x72, 0x65, 0x63, - 0x65, 0x69, 0x70, 0x74, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x25, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x08, 0x67, - 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x22, 0x22, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x91, 0x01, 0x0a, 0x08, - 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x44, 0x48, 0x00, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x2f, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x06, 0x68, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6f, 0x64, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x04, 0x62, 0x6f, 0x64, - 0x79, 0x42, 0x0c, 0x0a, 0x0a, 0x6d, 0x61, 0x79, 0x62, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x22, - 0x1b, 0x0a, 0x19, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3f, 0x0a, 0x13, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x09, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9d, 0x01, - 0x0a, 0x18, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x06, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x12, 0x2d, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x12, 0x18, 0x0a, 0x03, 0x66, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x04, - 0x2e, 0x46, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x66, 0x69, 0x6e, 0x42, 0x10, 0x0a, 0x0e, 0x68, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x45, 0x0a, - 0x14, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x70, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x72, 0x74, 0x52, 0x04, - 0x70, 0x61, 0x72, 0x74, 0x22, 0x3e, 0x0a, 0x12, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6f, 0x64, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x09, 0x69, 0x74, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, - 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x69, 0x74, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd2, 0x01, 0x0a, 0x13, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6f, - 0x64, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x49, 0x44, 0x48, 0x01, 0x52, 0x02, 0x69, 0x64, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x04, 0x64, - 0x69, 0x66, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x44, 0x69, 0x66, 0x66, 0x48, 0x00, 0x52, 0x04, 0x64, 0x69, 0x66, 0x66, 0x12, 0x24, 0x0a, - 0x07, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, - 0x2e, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x48, - 0x00, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x18, 0x0a, 0x03, 0x66, 0x69, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x04, 0x2e, 0x46, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x66, - 0x69, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x69, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, -} - -var ( - file_p2p_proto_block_proto_rawDescOnce sync.Once - file_p2p_proto_block_proto_rawDescData = file_p2p_proto_block_proto_rawDesc -) - -func file_p2p_proto_block_proto_rawDescGZIP() []byte { - file_p2p_proto_block_proto_rawDescOnce.Do(func() { - file_p2p_proto_block_proto_rawDescData = protoimpl.X.CompressGZIP(file_p2p_proto_block_proto_rawDescData) - }) - return file_p2p_proto_block_proto_rawDescData -} - -var ( - file_p2p_proto_block_proto_msgTypes = make([]protoimpl.MessageInfo, 10) - file_p2p_proto_block_proto_goTypes = []interface{}{ - (*Signatures)(nil), // 0: Signatures - (*BlockHeader)(nil), // 1: BlockHeader - (*BlockProof)(nil), // 2: BlockProof - (*NewBlock)(nil), // 3: NewBlock - (*CurrentBlockHeaderRequest)(nil), // 4: CurrentBlockHeaderRequest - (*BlockHeadersRequest)(nil), // 5: BlockHeadersRequest - (*BlockHeadersResponsePart)(nil), // 6: BlockHeadersResponsePart - (*BlockHeadersResponse)(nil), // 7: BlockHeadersResponse - (*BlockBodiesRequest)(nil), // 8: BlockBodiesRequest - (*BlockBodiesResponse)(nil), // 9: BlockBodiesResponse - (*BlockID)(nil), // 10: BlockID - (*ConsensusSignature)(nil), // 11: ConsensusSignature - (*Hash)(nil), // 12: Hash - (*timestamppb.Timestamp)(nil), // 13: google.protobuf.Timestamp - (*Address)(nil), // 14: Address - (*Merkle)(nil), // 15: Merkle - (*Patricia)(nil), // 16: Patricia - (*Felt252)(nil), // 17: Felt252 - (*Iteration)(nil), // 18: Iteration - (*Fin)(nil), // 19: Fin - (*StateDiff)(nil), // 20: StateDiff - (*Classes)(nil), // 21: Classes - } -) - -var file_p2p_proto_block_proto_depIdxs = []int32{ - 10, // 0: Signatures.block:type_name -> BlockID - 11, // 1: Signatures.signatures:type_name -> ConsensusSignature - 12, // 2: BlockHeader.parent_hash:type_name -> Hash - 13, // 3: BlockHeader.time:type_name -> google.protobuf.Timestamp - 14, // 4: BlockHeader.sequencer_address:type_name -> Address - 15, // 5: BlockHeader.state_diffs:type_name -> Merkle - 16, // 6: BlockHeader.state:type_name -> Patricia - 12, // 7: BlockHeader.proof_fact:type_name -> Hash - 15, // 8: BlockHeader.transactions:type_name -> Merkle - 15, // 9: BlockHeader.events:type_name -> Merkle - 15, // 10: BlockHeader.receipts:type_name -> Merkle - 17, // 11: BlockHeader.gas_price:type_name -> Felt252 - 10, // 12: NewBlock.id:type_name -> BlockID - 7, // 13: NewBlock.header:type_name -> BlockHeadersResponse - 9, // 14: NewBlock.body:type_name -> BlockBodiesResponse - 18, // 15: BlockHeadersRequest.iteration:type_name -> Iteration - 1, // 16: BlockHeadersResponsePart.header:type_name -> BlockHeader - 0, // 17: BlockHeadersResponsePart.signatures:type_name -> Signatures - 19, // 18: BlockHeadersResponsePart.fin:type_name -> Fin - 6, // 19: BlockHeadersResponse.part:type_name -> BlockHeadersResponsePart - 18, // 20: BlockBodiesRequest.iteration:type_name -> Iteration - 10, // 21: BlockBodiesResponse.id:type_name -> BlockID - 20, // 22: BlockBodiesResponse.diff:type_name -> StateDiff - 21, // 23: BlockBodiesResponse.classes:type_name -> Classes - 2, // 24: BlockBodiesResponse.proof:type_name -> BlockProof - 19, // 25: BlockBodiesResponse.fin:type_name -> Fin - 26, // [26:26] is the sub-list for method output_type - 26, // [26:26] is the sub-list for method input_type - 26, // [26:26] is the sub-list for extension type_name - 26, // [26:26] is the sub-list for extension extendee - 0, // [0:26] is the sub-list for field type_name -} - -func init() { file_p2p_proto_block_proto_init() } -func file_p2p_proto_block_proto_init() { - if File_p2p_proto_block_proto != nil { - return - } - file_p2p_proto_common_proto_init() - file_p2p_proto_state_proto_init() - if !protoimpl.UnsafeEnabled { - file_p2p_proto_block_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Signatures); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_block_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockHeader); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_block_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockProof); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_block_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewBlock); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_block_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CurrentBlockHeaderRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_block_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockHeadersRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_block_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockHeadersResponsePart); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_block_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockHeadersResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_block_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockBodiesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_block_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockBodiesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_p2p_proto_block_proto_msgTypes[3].OneofWrappers = []interface{}{ - (*NewBlock_Id)(nil), - (*NewBlock_Header)(nil), - (*NewBlock_Body)(nil), - } - file_p2p_proto_block_proto_msgTypes[6].OneofWrappers = []interface{}{ - (*BlockHeadersResponsePart_Header)(nil), - (*BlockHeadersResponsePart_Signatures)(nil), - (*BlockHeadersResponsePart_Fin)(nil), - } - file_p2p_proto_block_proto_msgTypes[9].OneofWrappers = []interface{}{ - (*BlockBodiesResponse_Diff)(nil), - (*BlockBodiesResponse_Classes)(nil), - (*BlockBodiesResponse_Proof)(nil), - (*BlockBodiesResponse_Fin)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_p2p_proto_block_proto_rawDesc, - NumEnums: 0, - NumMessages: 10, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_p2p_proto_block_proto_goTypes, - DependencyIndexes: file_p2p_proto_block_proto_depIdxs, - MessageInfos: file_p2p_proto_block_proto_msgTypes, - }.Build() - File_p2p_proto_block_proto = out.File - file_p2p_proto_block_proto_rawDesc = nil - file_p2p_proto_block_proto_goTypes = nil - file_p2p_proto_block_proto_depIdxs = nil -} diff --git a/p2p/starknet/spec/class.pb.go b/p2p/starknet/spec/class.pb.go new file mode 100644 index 0000000000..a9aaf29c00 --- /dev/null +++ b/p2p/starknet/spec/class.pb.go @@ -0,0 +1,821 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v4.25.1 +// source: p2p/proto/class.proto + +package spec + +import ( + reflect "reflect" + sync "sync" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type EntryPoint struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Selector *Felt252 `protobuf:"bytes,1,opt,name=selector,proto3" json:"selector,omitempty"` + Offset uint64 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"` +} + +func (x *EntryPoint) Reset() { + *x = EntryPoint{} + if protoimpl.UnsafeEnabled { + mi := &file_p2p_proto_class_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EntryPoint) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EntryPoint) ProtoMessage() {} + +func (x *EntryPoint) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_class_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EntryPoint.ProtoReflect.Descriptor instead. +func (*EntryPoint) Descriptor() ([]byte, []int) { + return file_p2p_proto_class_proto_rawDescGZIP(), []int{0} +} + +func (x *EntryPoint) GetSelector() *Felt252 { + if x != nil { + return x.Selector + } + return nil +} + +func (x *EntryPoint) GetOffset() uint64 { + if x != nil { + return x.Offset + } + return 0 +} + +type Cairo0Class struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Abi string `protobuf:"bytes,1,opt,name=abi,proto3" json:"abi,omitempty"` + Externals []*EntryPoint `protobuf:"bytes,2,rep,name=externals,proto3" json:"externals,omitempty"` + L1Handlers []*EntryPoint `protobuf:"bytes,3,rep,name=l1_handlers,json=l1Handlers,proto3" json:"l1_handlers,omitempty"` + Constructors []*EntryPoint `protobuf:"bytes,4,rep,name=constructors,proto3" json:"constructors,omitempty"` + // Compressed in base64 representation. + Program string `protobuf:"bytes,5,opt,name=program,proto3" json:"program,omitempty"` +} + +func (x *Cairo0Class) Reset() { + *x = Cairo0Class{} + if protoimpl.UnsafeEnabled { + mi := &file_p2p_proto_class_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Cairo0Class) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Cairo0Class) ProtoMessage() {} + +func (x *Cairo0Class) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_class_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Cairo0Class.ProtoReflect.Descriptor instead. +func (*Cairo0Class) Descriptor() ([]byte, []int) { + return file_p2p_proto_class_proto_rawDescGZIP(), []int{1} +} + +func (x *Cairo0Class) GetAbi() string { + if x != nil { + return x.Abi + } + return "" +} + +func (x *Cairo0Class) GetExternals() []*EntryPoint { + if x != nil { + return x.Externals + } + return nil +} + +func (x *Cairo0Class) GetL1Handlers() []*EntryPoint { + if x != nil { + return x.L1Handlers + } + return nil +} + +func (x *Cairo0Class) GetConstructors() []*EntryPoint { + if x != nil { + return x.Constructors + } + return nil +} + +func (x *Cairo0Class) GetProgram() string { + if x != nil { + return x.Program + } + return "" +} + +type SierraEntryPoint struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Index uint64 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"` + Selector *Felt252 `protobuf:"bytes,2,opt,name=selector,proto3" json:"selector,omitempty"` +} + +func (x *SierraEntryPoint) Reset() { + *x = SierraEntryPoint{} + if protoimpl.UnsafeEnabled { + mi := &file_p2p_proto_class_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SierraEntryPoint) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SierraEntryPoint) ProtoMessage() {} + +func (x *SierraEntryPoint) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_class_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SierraEntryPoint.ProtoReflect.Descriptor instead. +func (*SierraEntryPoint) Descriptor() ([]byte, []int) { + return file_p2p_proto_class_proto_rawDescGZIP(), []int{2} +} + +func (x *SierraEntryPoint) GetIndex() uint64 { + if x != nil { + return x.Index + } + return 0 +} + +func (x *SierraEntryPoint) GetSelector() *Felt252 { + if x != nil { + return x.Selector + } + return nil +} + +type Cairo1EntryPoints struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Externals []*SierraEntryPoint `protobuf:"bytes,1,rep,name=externals,proto3" json:"externals,omitempty"` + L1Handlers []*SierraEntryPoint `protobuf:"bytes,2,rep,name=l1_handlers,json=l1Handlers,proto3" json:"l1_handlers,omitempty"` + Constructors []*SierraEntryPoint `protobuf:"bytes,3,rep,name=constructors,proto3" json:"constructors,omitempty"` +} + +func (x *Cairo1EntryPoints) Reset() { + *x = Cairo1EntryPoints{} + if protoimpl.UnsafeEnabled { + mi := &file_p2p_proto_class_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Cairo1EntryPoints) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Cairo1EntryPoints) ProtoMessage() {} + +func (x *Cairo1EntryPoints) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_class_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Cairo1EntryPoints.ProtoReflect.Descriptor instead. +func (*Cairo1EntryPoints) Descriptor() ([]byte, []int) { + return file_p2p_proto_class_proto_rawDescGZIP(), []int{3} +} + +func (x *Cairo1EntryPoints) GetExternals() []*SierraEntryPoint { + if x != nil { + return x.Externals + } + return nil +} + +func (x *Cairo1EntryPoints) GetL1Handlers() []*SierraEntryPoint { + if x != nil { + return x.L1Handlers + } + return nil +} + +func (x *Cairo1EntryPoints) GetConstructors() []*SierraEntryPoint { + if x != nil { + return x.Constructors + } + return nil +} + +type Cairo1Class struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Abi string `protobuf:"bytes,1,opt,name=abi,proto3" json:"abi,omitempty"` + EntryPoints *Cairo1EntryPoints `protobuf:"bytes,2,opt,name=entry_points,json=entryPoints,proto3" json:"entry_points,omitempty"` + Program []*Felt252 `protobuf:"bytes,3,rep,name=program,proto3" json:"program,omitempty"` + ContractClassVersion string `protobuf:"bytes,4,opt,name=contract_class_version,json=contractClassVersion,proto3" json:"contract_class_version,omitempty"` +} + +func (x *Cairo1Class) Reset() { + *x = Cairo1Class{} + if protoimpl.UnsafeEnabled { + mi := &file_p2p_proto_class_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Cairo1Class) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Cairo1Class) ProtoMessage() {} + +func (x *Cairo1Class) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_class_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Cairo1Class.ProtoReflect.Descriptor instead. +func (*Cairo1Class) Descriptor() ([]byte, []int) { + return file_p2p_proto_class_proto_rawDescGZIP(), []int{4} +} + +func (x *Cairo1Class) GetAbi() string { + if x != nil { + return x.Abi + } + return "" +} + +func (x *Cairo1Class) GetEntryPoints() *Cairo1EntryPoints { + if x != nil { + return x.EntryPoints + } + return nil +} + +func (x *Cairo1Class) GetProgram() []*Felt252 { + if x != nil { + return x.Program + } + return nil +} + +func (x *Cairo1Class) GetContractClassVersion() string { + if x != nil { + return x.ContractClassVersion + } + return "" +} + +type Class struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Class: + // + // *Class_Cairo0 + // *Class_Cairo1 + Class isClass_Class `protobuf_oneof:"class"` + Domain uint32 `protobuf:"varint,3,opt,name=domain,proto3" json:"domain,omitempty"` +} + +func (x *Class) Reset() { + *x = Class{} + if protoimpl.UnsafeEnabled { + mi := &file_p2p_proto_class_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Class) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Class) ProtoMessage() {} + +func (x *Class) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_class_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Class.ProtoReflect.Descriptor instead. +func (*Class) Descriptor() ([]byte, []int) { + return file_p2p_proto_class_proto_rawDescGZIP(), []int{5} +} + +func (m *Class) GetClass() isClass_Class { + if m != nil { + return m.Class + } + return nil +} + +func (x *Class) GetCairo0() *Cairo0Class { + if x, ok := x.GetClass().(*Class_Cairo0); ok { + return x.Cairo0 + } + return nil +} + +func (x *Class) GetCairo1() *Cairo1Class { + if x, ok := x.GetClass().(*Class_Cairo1); ok { + return x.Cairo1 + } + return nil +} + +func (x *Class) GetDomain() uint32 { + if x != nil { + return x.Domain + } + return 0 +} + +type isClass_Class interface { + isClass_Class() +} + +type Class_Cairo0 struct { + Cairo0 *Cairo0Class `protobuf:"bytes,1,opt,name=cairo0,proto3,oneof"` +} + +type Class_Cairo1 struct { + Cairo1 *Cairo1Class `protobuf:"bytes,2,opt,name=cairo1,proto3,oneof"` +} + +func (*Class_Cairo0) isClass_Class() {} + +func (*Class_Cairo1) isClass_Class() {} + +type ClassesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Iteration *Iteration `protobuf:"bytes,1,opt,name=iteration,proto3" json:"iteration,omitempty"` +} + +func (x *ClassesRequest) Reset() { + *x = ClassesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_p2p_proto_class_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClassesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClassesRequest) ProtoMessage() {} + +func (x *ClassesRequest) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_class_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClassesRequest.ProtoReflect.Descriptor instead. +func (*ClassesRequest) Descriptor() ([]byte, []int) { + return file_p2p_proto_class_proto_rawDescGZIP(), []int{6} +} + +func (x *ClassesRequest) GetIteration() *Iteration { + if x != nil { + return x.Iteration + } + return nil +} + +// Responses are sent ordered by the order given in the request. +type ClassesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to ClassMessage: + // + // *ClassesResponse_Class + // *ClassesResponse_Fin + ClassMessage isClassesResponse_ClassMessage `protobuf_oneof:"class_message"` +} + +func (x *ClassesResponse) Reset() { + *x = ClassesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_p2p_proto_class_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClassesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClassesResponse) ProtoMessage() {} + +func (x *ClassesResponse) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_class_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClassesResponse.ProtoReflect.Descriptor instead. +func (*ClassesResponse) Descriptor() ([]byte, []int) { + return file_p2p_proto_class_proto_rawDescGZIP(), []int{7} +} + +func (m *ClassesResponse) GetClassMessage() isClassesResponse_ClassMessage { + if m != nil { + return m.ClassMessage + } + return nil +} + +func (x *ClassesResponse) GetClass() *Class { + if x, ok := x.GetClassMessage().(*ClassesResponse_Class); ok { + return x.Class + } + return nil +} + +func (x *ClassesResponse) GetFin() *Fin { + if x, ok := x.GetClassMessage().(*ClassesResponse_Fin); ok { + return x.Fin + } + return nil +} + +type isClassesResponse_ClassMessage interface { + isClassesResponse_ClassMessage() +} + +type ClassesResponse_Class struct { + Class *Class `protobuf:"bytes,1,opt,name=class,proto3,oneof"` +} + +type ClassesResponse_Fin struct { + Fin *Fin `protobuf:"bytes,2,opt,name=fin,proto3,oneof"` // Fin is sent after the peer sent all the data or when it encountered a block that it doesn't have its classes. +} + +func (*ClassesResponse_Class) isClassesResponse_ClassMessage() {} + +func (*ClassesResponse_Fin) isClassesResponse_ClassMessage() {} + +var File_p2p_proto_class_proto protoreflect.FileDescriptor + +var file_p2p_proto_class_proto_rawDesc = []byte{ + 0x0a, 0x15, 0x70, 0x32, 0x70, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x70, 0x32, 0x70, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x4a, 0x0a, 0x0a, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x24, 0x0a, + 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0xc3, 0x01, 0x0a, 0x0b, + 0x43, 0x61, 0x69, 0x72, 0x6f, 0x30, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, + 0x62, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x62, 0x69, 0x12, 0x29, 0x0a, + 0x09, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0b, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x09, 0x65, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x73, 0x12, 0x2c, 0x0a, 0x0b, 0x6c, 0x31, 0x5f, 0x68, + 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0a, 0x6c, 0x31, 0x48, 0x61, + 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x73, 0x12, 0x2f, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x67, 0x72, + 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, + 0x6d, 0x22, 0x4e, 0x0a, 0x10, 0x53, 0x69, 0x65, 0x72, 0x72, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x24, 0x0a, 0x08, 0x73, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, + 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x22, 0xaf, 0x01, 0x0a, 0x11, 0x43, 0x61, 0x69, 0x72, 0x6f, 0x31, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x2f, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x53, 0x69, 0x65, + 0x72, 0x72, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x09, 0x65, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x73, 0x12, 0x32, 0x0a, 0x0b, 0x6c, 0x31, 0x5f, 0x68, + 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x53, 0x69, 0x65, 0x72, 0x72, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x52, 0x0a, 0x6c, 0x31, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x73, 0x12, 0x35, 0x0a, 0x0c, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x53, 0x69, 0x65, 0x72, 0x72, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x6f, 0x72, 0x73, 0x22, 0xb0, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x69, 0x72, 0x6f, 0x31, 0x43, 0x6c, + 0x61, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x62, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x61, 0x62, 0x69, 0x12, 0x35, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x43, 0x61, + 0x69, 0x72, 0x6f, 0x31, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x52, + 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x07, + 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, + 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, + 0x12, 0x34, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x14, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x78, 0x0a, 0x05, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, + 0x26, 0x0a, 0x06, 0x63, 0x61, 0x69, 0x72, 0x6f, 0x30, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0c, 0x2e, 0x43, 0x61, 0x69, 0x72, 0x6f, 0x30, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x00, 0x52, + 0x06, 0x63, 0x61, 0x69, 0x72, 0x6f, 0x30, 0x12, 0x26, 0x0a, 0x06, 0x63, 0x61, 0x69, 0x72, 0x6f, + 0x31, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x43, 0x61, 0x69, 0x72, 0x6f, 0x31, + 0x43, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x69, 0x72, 0x6f, 0x31, 0x12, + 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, + 0x22, 0x3a, 0x0a, 0x0e, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x28, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x09, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5c, 0x0a, 0x0f, + 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x1e, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x06, + 0x2e, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x00, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, + 0x18, 0x0a, 0x03, 0x66, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x04, 0x2e, 0x46, + 0x69, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x66, 0x69, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x64, 0x45, 0x74, 0x68, 0x2f, 0x6a, 0x75, 0x6e, 0x6f, 0x2f, 0x70, 0x32, 0x70, 0x2f, + 0x73, 0x74, 0x61, 0x72, 0x6b, 0x6e, 0x65, 0x74, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_p2p_proto_class_proto_rawDescOnce sync.Once + file_p2p_proto_class_proto_rawDescData = file_p2p_proto_class_proto_rawDesc +) + +func file_p2p_proto_class_proto_rawDescGZIP() []byte { + file_p2p_proto_class_proto_rawDescOnce.Do(func() { + file_p2p_proto_class_proto_rawDescData = protoimpl.X.CompressGZIP(file_p2p_proto_class_proto_rawDescData) + }) + return file_p2p_proto_class_proto_rawDescData +} + +var ( + file_p2p_proto_class_proto_msgTypes = make([]protoimpl.MessageInfo, 8) + file_p2p_proto_class_proto_goTypes = []interface{}{ + (*EntryPoint)(nil), // 0: EntryPoint + (*Cairo0Class)(nil), // 1: Cairo0Class + (*SierraEntryPoint)(nil), // 2: SierraEntryPoint + (*Cairo1EntryPoints)(nil), // 3: Cairo1EntryPoints + (*Cairo1Class)(nil), // 4: Cairo1Class + (*Class)(nil), // 5: Class + (*ClassesRequest)(nil), // 6: ClassesRequest + (*ClassesResponse)(nil), // 7: ClassesResponse + (*Felt252)(nil), // 8: Felt252 + (*Iteration)(nil), // 9: Iteration + (*Fin)(nil), // 10: Fin + } +) +var file_p2p_proto_class_proto_depIdxs = []int32{ + 8, // 0: EntryPoint.selector:type_name -> Felt252 + 0, // 1: Cairo0Class.externals:type_name -> EntryPoint + 0, // 2: Cairo0Class.l1_handlers:type_name -> EntryPoint + 0, // 3: Cairo0Class.constructors:type_name -> EntryPoint + 8, // 4: SierraEntryPoint.selector:type_name -> Felt252 + 2, // 5: Cairo1EntryPoints.externals:type_name -> SierraEntryPoint + 2, // 6: Cairo1EntryPoints.l1_handlers:type_name -> SierraEntryPoint + 2, // 7: Cairo1EntryPoints.constructors:type_name -> SierraEntryPoint + 3, // 8: Cairo1Class.entry_points:type_name -> Cairo1EntryPoints + 8, // 9: Cairo1Class.program:type_name -> Felt252 + 1, // 10: Class.cairo0:type_name -> Cairo0Class + 4, // 11: Class.cairo1:type_name -> Cairo1Class + 9, // 12: ClassesRequest.iteration:type_name -> Iteration + 5, // 13: ClassesResponse.class:type_name -> Class + 10, // 14: ClassesResponse.fin:type_name -> Fin + 15, // [15:15] is the sub-list for method output_type + 15, // [15:15] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name +} + +func init() { file_p2p_proto_class_proto_init() } +func file_p2p_proto_class_proto_init() { + if File_p2p_proto_class_proto != nil { + return + } + file_p2p_proto_common_proto_init() + if !protoimpl.UnsafeEnabled { + file_p2p_proto_class_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EntryPoint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2p_proto_class_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Cairo0Class); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2p_proto_class_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SierraEntryPoint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2p_proto_class_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Cairo1EntryPoints); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2p_proto_class_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Cairo1Class); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2p_proto_class_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Class); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2p_proto_class_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClassesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2p_proto_class_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClassesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_p2p_proto_class_proto_msgTypes[5].OneofWrappers = []interface{}{ + (*Class_Cairo0)(nil), + (*Class_Cairo1)(nil), + } + file_p2p_proto_class_proto_msgTypes[7].OneofWrappers = []interface{}{ + (*ClassesResponse_Class)(nil), + (*ClassesResponse_Fin)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_p2p_proto_class_proto_rawDesc, + NumEnums: 0, + NumMessages: 8, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_p2p_proto_class_proto_goTypes, + DependencyIndexes: file_p2p_proto_class_proto_depIdxs, + MessageInfos: file_p2p_proto_class_proto_msgTypes, + }.Build() + File_p2p_proto_class_proto = out.File + file_p2p_proto_class_proto_rawDesc = nil + file_p2p_proto_class_proto_goTypes = nil + file_p2p_proto_class_proto_depIdxs = nil +} diff --git a/p2p/starknet/spec/common.pb.go b/p2p/starknet/spec/common.pb.go index b7270b5420..78be23ee1f 100644 --- a/p2p/starknet/spec/common.pb.go +++ b/p2p/starknet/spec/common.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.4 +// protoc-gen-go v1.26.0 +// protoc v4.25.1 // source: p2p/proto/common.proto package spec @@ -21,101 +21,141 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type Iteration_Direction int32 +type L1DataAvailabilityMode int32 const ( - Iteration_Forward Iteration_Direction = 0 - Iteration_Backward Iteration_Direction = 1 + L1DataAvailabilityMode_Calldata L1DataAvailabilityMode = 0 + L1DataAvailabilityMode_Blob L1DataAvailabilityMode = 1 ) -// Enum value maps for Iteration_Direction. +// Enum value maps for L1DataAvailabilityMode. var ( - Iteration_Direction_name = map[int32]string{ - 0: "Forward", - 1: "Backward", + L1DataAvailabilityMode_name = map[int32]string{ + 0: "Calldata", + 1: "Blob", } - Iteration_Direction_value = map[string]int32{ - "Forward": 0, - "Backward": 1, + L1DataAvailabilityMode_value = map[string]int32{ + "Calldata": 0, + "Blob": 1, } ) -func (x Iteration_Direction) Enum() *Iteration_Direction { - p := new(Iteration_Direction) +func (x L1DataAvailabilityMode) Enum() *L1DataAvailabilityMode { + p := new(L1DataAvailabilityMode) *p = x return p } -func (x Iteration_Direction) String() string { +func (x L1DataAvailabilityMode) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (Iteration_Direction) Descriptor() protoreflect.EnumDescriptor { +func (L1DataAvailabilityMode) Descriptor() protoreflect.EnumDescriptor { return file_p2p_proto_common_proto_enumTypes[0].Descriptor() } -func (Iteration_Direction) Type() protoreflect.EnumType { +func (L1DataAvailabilityMode) Type() protoreflect.EnumType { return &file_p2p_proto_common_proto_enumTypes[0] } -func (x Iteration_Direction) Number() protoreflect.EnumNumber { +func (x L1DataAvailabilityMode) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } -// Deprecated: Use Iteration_Direction.Descriptor instead. -func (Iteration_Direction) EnumDescriptor() ([]byte, []int) { - return file_p2p_proto_common_proto_rawDescGZIP(), []int{9, 0} +// Deprecated: Use L1DataAvailabilityMode.Descriptor instead. +func (L1DataAvailabilityMode) EnumDescriptor() ([]byte, []int) { + return file_p2p_proto_common_proto_rawDescGZIP(), []int{0} } -type Fin_Error int32 +type VolitionDomain int32 const ( - Fin_busy Fin_Error = 0 - Fin_too_much Fin_Error = 1 - Fin_unknown Fin_Error = 2 - Fin_pruned Fin_Error = 3 + VolitionDomain_L1 VolitionDomain = 0 + VolitionDomain_L2 VolitionDomain = 1 ) -// Enum value maps for Fin_Error. +// Enum value maps for VolitionDomain. var ( - Fin_Error_name = map[int32]string{ - 0: "busy", - 1: "too_much", - 2: "unknown", - 3: "pruned", - } - Fin_Error_value = map[string]int32{ - "busy": 0, - "too_much": 1, - "unknown": 2, - "pruned": 3, + VolitionDomain_name = map[int32]string{ + 0: "L1", + 1: "L2", + } + VolitionDomain_value = map[string]int32{ + "L1": 0, + "L2": 1, } ) -func (x Fin_Error) Enum() *Fin_Error { - p := new(Fin_Error) +func (x VolitionDomain) Enum() *VolitionDomain { + p := new(VolitionDomain) *p = x return p } -func (x Fin_Error) String() string { +func (x VolitionDomain) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (Fin_Error) Descriptor() protoreflect.EnumDescriptor { +func (VolitionDomain) Descriptor() protoreflect.EnumDescriptor { return file_p2p_proto_common_proto_enumTypes[1].Descriptor() } -func (Fin_Error) Type() protoreflect.EnumType { +func (VolitionDomain) Type() protoreflect.EnumType { return &file_p2p_proto_common_proto_enumTypes[1] } -func (x Fin_Error) Number() protoreflect.EnumNumber { +func (x VolitionDomain) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } -// Deprecated: Use Fin_Error.Descriptor instead. -func (Fin_Error) EnumDescriptor() ([]byte, []int) { +// Deprecated: Use VolitionDomain.Descriptor instead. +func (VolitionDomain) EnumDescriptor() ([]byte, []int) { + return file_p2p_proto_common_proto_rawDescGZIP(), []int{1} +} + +type Iteration_Direction int32 + +const ( + Iteration_Forward Iteration_Direction = 0 + Iteration_Backward Iteration_Direction = 1 +) + +// Enum value maps for Iteration_Direction. +var ( + Iteration_Direction_name = map[int32]string{ + 0: "Forward", + 1: "Backward", + } + Iteration_Direction_value = map[string]int32{ + "Forward": 0, + "Backward": 1, + } +) + +func (x Iteration_Direction) Enum() *Iteration_Direction { + p := new(Iteration_Direction) + *p = x + return p +} + +func (x Iteration_Direction) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Iteration_Direction) Descriptor() protoreflect.EnumDescriptor { + return file_p2p_proto_common_proto_enumTypes[2].Descriptor() +} + +func (Iteration_Direction) Type() protoreflect.EnumType { + return &file_p2p_proto_common_proto_enumTypes[2] +} + +func (x Iteration_Direction) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Iteration_Direction.Descriptor instead. +func (Iteration_Direction) EnumDescriptor() ([]byte, []int) { return file_p2p_proto_common_proto_rawDescGZIP(), []int{10, 0} } @@ -354,6 +394,61 @@ func (x *PeerID) GetId() []byte { return nil } +type Uint128 struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Low uint64 `protobuf:"varint,1,opt,name=low,proto3" json:"low,omitempty"` + High uint64 `protobuf:"varint,2,opt,name=high,proto3" json:"high,omitempty"` +} + +func (x *Uint128) Reset() { + *x = Uint128{} + if protoimpl.UnsafeEnabled { + mi := &file_p2p_proto_common_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Uint128) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Uint128) ProtoMessage() {} + +func (x *Uint128) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_common_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Uint128.ProtoReflect.Descriptor instead. +func (*Uint128) Descriptor() ([]byte, []int) { + return file_p2p_proto_common_proto_rawDescGZIP(), []int{5} +} + +func (x *Uint128) GetLow() uint64 { + if x != nil { + return x.Low + } + return 0 +} + +func (x *Uint128) GetHigh() uint64 { + if x != nil { + return x.High + } + return 0 +} + type ConsensusSignature struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -366,7 +461,7 @@ type ConsensusSignature struct { func (x *ConsensusSignature) Reset() { *x = ConsensusSignature{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_common_proto_msgTypes[5] + mi := &file_p2p_proto_common_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -379,7 +474,7 @@ func (x *ConsensusSignature) String() string { func (*ConsensusSignature) ProtoMessage() {} func (x *ConsensusSignature) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_common_proto_msgTypes[5] + mi := &file_p2p_proto_common_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -392,7 +487,7 @@ func (x *ConsensusSignature) ProtoReflect() protoreflect.Message { // Deprecated: Use ConsensusSignature.ProtoReflect.Descriptor instead. func (*ConsensusSignature) Descriptor() ([]byte, []int) { - return file_p2p_proto_common_proto_rawDescGZIP(), []int{5} + return file_p2p_proto_common_proto_rawDescGZIP(), []int{6} } func (x *ConsensusSignature) GetR() *Felt252 { @@ -409,33 +504,33 @@ func (x *ConsensusSignature) GetS() *Felt252 { return nil } -type Merkle struct { +type Patricia struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - NLeaves uint32 `protobuf:"varint,1,opt,name=n_leaves,json=nLeaves,proto3" json:"n_leaves,omitempty"` // needed to know the height, so as to how many nodes to expect in a proof. + NLeaves uint64 `protobuf:"varint,1,opt,name=n_leaves,json=nLeaves,proto3" json:"n_leaves,omitempty"` // needed to know the height, so as to how many nodes to expect in a proof. // and also when receiving all leaves, how many to expect Root *Hash `protobuf:"bytes,2,opt,name=root,proto3" json:"root,omitempty"` } -func (x *Merkle) Reset() { - *x = Merkle{} +func (x *Patricia) Reset() { + *x = Patricia{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_common_proto_msgTypes[6] + mi := &file_p2p_proto_common_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Merkle) String() string { +func (x *Patricia) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Merkle) ProtoMessage() {} +func (*Patricia) ProtoMessage() {} -func (x *Merkle) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_common_proto_msgTypes[6] +func (x *Patricia) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_common_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -446,51 +541,51 @@ func (x *Merkle) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Merkle.ProtoReflect.Descriptor instead. -func (*Merkle) Descriptor() ([]byte, []int) { - return file_p2p_proto_common_proto_rawDescGZIP(), []int{6} +// Deprecated: Use Patricia.ProtoReflect.Descriptor instead. +func (*Patricia) Descriptor() ([]byte, []int) { + return file_p2p_proto_common_proto_rawDescGZIP(), []int{7} } -func (x *Merkle) GetNLeaves() uint32 { +func (x *Patricia) GetNLeaves() uint64 { if x != nil { return x.NLeaves } return 0 } -func (x *Merkle) GetRoot() *Hash { +func (x *Patricia) GetRoot() *Hash { if x != nil { return x.Root } return nil } -type Patricia struct { +type StateDiffCommitment struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Height uint32 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` - Root *Hash `protobuf:"bytes,2,opt,name=root,proto3" json:"root,omitempty"` + StateDiffLength uint64 `protobuf:"varint,1,opt,name=state_diff_length,json=stateDiffLength,proto3" json:"state_diff_length,omitempty"` + Root *Hash `protobuf:"bytes,2,opt,name=root,proto3" json:"root,omitempty"` } -func (x *Patricia) Reset() { - *x = Patricia{} +func (x *StateDiffCommitment) Reset() { + *x = StateDiffCommitment{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_common_proto_msgTypes[7] + mi := &file_p2p_proto_common_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Patricia) String() string { +func (x *StateDiffCommitment) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Patricia) ProtoMessage() {} +func (*StateDiffCommitment) ProtoMessage() {} -func (x *Patricia) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_common_proto_msgTypes[7] +func (x *StateDiffCommitment) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_common_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -501,19 +596,19 @@ func (x *Patricia) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Patricia.ProtoReflect.Descriptor instead. -func (*Patricia) Descriptor() ([]byte, []int) { - return file_p2p_proto_common_proto_rawDescGZIP(), []int{7} +// Deprecated: Use StateDiffCommitment.ProtoReflect.Descriptor instead. +func (*StateDiffCommitment) Descriptor() ([]byte, []int) { + return file_p2p_proto_common_proto_rawDescGZIP(), []int{8} } -func (x *Patricia) GetHeight() uint32 { +func (x *StateDiffCommitment) GetStateDiffLength() uint64 { if x != nil { - return x.Height + return x.StateDiffLength } return 0 } -func (x *Patricia) GetRoot() *Hash { +func (x *StateDiffCommitment) GetRoot() *Hash { if x != nil { return x.Root } @@ -532,7 +627,7 @@ type BlockID struct { func (x *BlockID) Reset() { *x = BlockID{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_common_proto_msgTypes[8] + mi := &file_p2p_proto_common_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -545,7 +640,7 @@ func (x *BlockID) String() string { func (*BlockID) ProtoMessage() {} func (x *BlockID) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_common_proto_msgTypes[8] + mi := &file_p2p_proto_common_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -558,7 +653,7 @@ func (x *BlockID) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockID.ProtoReflect.Descriptor instead. func (*BlockID) Descriptor() ([]byte, []int) { - return file_p2p_proto_common_proto_rawDescGZIP(), []int{8} + return file_p2p_proto_common_proto_rawDescGZIP(), []int{9} } func (x *BlockID) GetNumber() uint64 { @@ -593,7 +688,7 @@ type Iteration struct { func (x *Iteration) Reset() { *x = Iteration{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_common_proto_msgTypes[9] + mi := &file_p2p_proto_common_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -606,7 +701,7 @@ func (x *Iteration) String() string { func (*Iteration) ProtoMessage() {} func (x *Iteration) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_common_proto_msgTypes[9] + mi := &file_p2p_proto_common_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -619,7 +714,7 @@ func (x *Iteration) ProtoReflect() protoreflect.Message { // Deprecated: Use Iteration.ProtoReflect.Descriptor instead. func (*Iteration) Descriptor() ([]byte, []int) { - return file_p2p_proto_common_proto_rawDescGZIP(), []int{9} + return file_p2p_proto_common_proto_rawDescGZIP(), []int{10} } func (m *Iteration) GetStart() isIteration_Start { @@ -686,14 +781,12 @@ type Fin struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - Error *Fin_Error `protobuf:"varint,1,opt,name=error,proto3,enum=Fin_Error,oneof" json:"error,omitempty"` } func (x *Fin) Reset() { *x = Fin{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_common_proto_msgTypes[10] + mi := &file_p2p_proto_common_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -706,7 +799,7 @@ func (x *Fin) String() string { func (*Fin) ProtoMessage() {} func (x *Fin) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_common_proto_msgTypes[10] + mi := &file_p2p_proto_common_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -719,14 +812,7 @@ func (x *Fin) ProtoReflect() protoreflect.Message { // Deprecated: Use Fin.ProtoReflect.Descriptor instead. func (*Fin) Descriptor() ([]byte, []int) { - return file_p2p_proto_common_proto_rawDescGZIP(), []int{10} -} - -func (x *Fin) GetError() Fin_Error { - if x != nil && x.Error != nil { - return *x.Error - } - return Fin_busy + return file_p2p_proto_common_proto_rawDescGZIP(), []int{11} } var File_p2p_proto_common_proto protoreflect.FileDescriptor @@ -744,45 +830,52 @@ var file_p2p_proto_common_proto_rawDesc = []byte{ 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x18, 0x0a, 0x06, 0x50, 0x65, 0x65, 0x72, 0x49, 0x44, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, 0x12, 0x43, - 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x12, 0x16, 0x0a, 0x01, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, - 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x01, 0x72, 0x12, 0x16, 0x0a, 0x01, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x01, - 0x73, 0x22, 0x3e, 0x0a, 0x06, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6e, - 0x5f, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6e, - 0x4c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x04, 0x72, 0x6f, 0x6f, - 0x74, 0x22, 0x3d, 0x0a, 0x08, 0x50, 0x61, 0x74, 0x72, 0x69, 0x63, 0x69, 0x61, 0x12, 0x16, 0x0a, - 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x19, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, - 0x22, 0x40, 0x0a, 0x07, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x22, 0xe0, 0x01, 0x0a, 0x09, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x23, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x48, 0x00, 0x52, 0x06, - 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x49, 0x74, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x73, 0x74, 0x65, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, - 0x73, 0x74, 0x65, 0x70, 0x22, 0x26, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x10, 0x00, 0x12, 0x0c, - 0x0a, 0x08, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x10, 0x01, 0x42, 0x07, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x22, 0x70, 0x0a, 0x03, 0x46, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x46, 0x69, - 0x6e, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x88, 0x01, 0x01, 0x22, 0x38, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x08, 0x0a, 0x04, - 0x62, 0x75, 0x73, 0x79, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x74, 0x6f, 0x6f, 0x5f, 0x6d, 0x75, - 0x63, 0x68, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, - 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x70, 0x72, 0x75, 0x6e, 0x65, 0x64, 0x10, 0x03, 0x42, 0x08, 0x0a, - 0x06, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2f, 0x0a, 0x07, 0x55, + 0x69, 0x6e, 0x74, 0x31, 0x32, 0x38, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x03, 0x6c, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, 0x67, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x68, 0x69, 0x67, 0x68, 0x22, 0x44, 0x0a, 0x12, + 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x12, 0x16, 0x0a, 0x01, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, + 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x01, 0x72, 0x12, 0x16, 0x0a, 0x01, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, + 0x01, 0x73, 0x22, 0x40, 0x0a, 0x08, 0x50, 0x61, 0x74, 0x72, 0x69, 0x63, 0x69, 0x61, 0x12, 0x19, + 0x0a, 0x08, 0x6e, 0x5f, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x07, 0x6e, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x04, 0x72, 0x6f, 0x6f, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x04, + 0x72, 0x6f, 0x6f, 0x74, 0x22, 0x5c, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x65, 0x44, 0x69, 0x66, + 0x66, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x44, 0x69, 0x66, + 0x66, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x19, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x04, 0x72, 0x6f, + 0x6f, 0x74, 0x22, 0x40, 0x0a, 0x07, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x44, 0x12, 0x16, 0x0a, + 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x06, 0x68, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x22, 0xe0, 0x01, 0x0a, 0x09, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x48, 0x00, + 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x49, 0x74, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x74, 0x65, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x04, 0x73, 0x74, 0x65, 0x70, 0x22, 0x26, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x10, 0x00, + 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x10, 0x01, 0x42, 0x07, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x22, 0x05, 0x0a, 0x03, 0x46, 0x69, 0x6e, 0x2a, 0x30, + 0x0a, 0x16, 0x4c, 0x31, 0x44, 0x61, 0x74, 0x61, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x61, 0x6c, 0x6c, + 0x64, 0x61, 0x74, 0x61, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x6c, 0x6f, 0x62, 0x10, 0x01, + 0x2a, 0x20, 0x0a, 0x0e, 0x56, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x12, 0x06, 0x0a, 0x02, 0x4c, 0x31, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4c, 0x32, + 0x10, 0x01, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x64, 0x45, 0x74, 0x68, 0x2f, 0x6a, + 0x75, 0x6e, 0x6f, 0x2f, 0x70, 0x32, 0x70, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x6b, 0x6e, 0x65, 0x74, + 0x2f, 0x73, 0x70, 0x65, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -798,40 +891,40 @@ func file_p2p_proto_common_proto_rawDescGZIP() []byte { } var ( - file_p2p_proto_common_proto_enumTypes = make([]protoimpl.EnumInfo, 2) - file_p2p_proto_common_proto_msgTypes = make([]protoimpl.MessageInfo, 11) + file_p2p_proto_common_proto_enumTypes = make([]protoimpl.EnumInfo, 3) + file_p2p_proto_common_proto_msgTypes = make([]protoimpl.MessageInfo, 12) file_p2p_proto_common_proto_goTypes = []interface{}{ - (Iteration_Direction)(0), // 0: Iteration.Direction - (Fin_Error)(0), // 1: Fin.Error - (*Felt252)(nil), // 2: Felt252 - (*Hash)(nil), // 3: Hash - (*Hashes)(nil), // 4: Hashes - (*Address)(nil), // 5: Address - (*PeerID)(nil), // 6: PeerID - (*ConsensusSignature)(nil), // 7: ConsensusSignature - (*Merkle)(nil), // 8: Merkle - (*Patricia)(nil), // 9: Patricia - (*BlockID)(nil), // 10: BlockID - (*Iteration)(nil), // 11: Iteration - (*Fin)(nil), // 12: Fin + (L1DataAvailabilityMode)(0), // 0: L1DataAvailabilityMode + (VolitionDomain)(0), // 1: VolitionDomain + (Iteration_Direction)(0), // 2: Iteration.Direction + (*Felt252)(nil), // 3: Felt252 + (*Hash)(nil), // 4: Hash + (*Hashes)(nil), // 5: Hashes + (*Address)(nil), // 6: Address + (*PeerID)(nil), // 7: PeerID + (*Uint128)(nil), // 8: Uint128 + (*ConsensusSignature)(nil), // 9: ConsensusSignature + (*Patricia)(nil), // 10: Patricia + (*StateDiffCommitment)(nil), // 11: StateDiffCommitment + (*BlockID)(nil), // 12: BlockID + (*Iteration)(nil), // 13: Iteration + (*Fin)(nil), // 14: Fin } ) - var file_p2p_proto_common_proto_depIdxs = []int32{ - 3, // 0: Hashes.items:type_name -> Hash - 2, // 1: ConsensusSignature.r:type_name -> Felt252 - 2, // 2: ConsensusSignature.s:type_name -> Felt252 - 3, // 3: Merkle.root:type_name -> Hash - 3, // 4: Patricia.root:type_name -> Hash - 3, // 5: BlockID.header:type_name -> Hash - 3, // 6: Iteration.header:type_name -> Hash - 0, // 7: Iteration.direction:type_name -> Iteration.Direction - 1, // 8: Fin.error:type_name -> Fin.Error - 9, // [9:9] is the sub-list for method output_type - 9, // [9:9] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name + 4, // 0: Hashes.items:type_name -> Hash + 3, // 1: ConsensusSignature.r:type_name -> Felt252 + 3, // 2: ConsensusSignature.s:type_name -> Felt252 + 4, // 3: Patricia.root:type_name -> Hash + 4, // 4: StateDiffCommitment.root:type_name -> Hash + 4, // 5: BlockID.header:type_name -> Hash + 4, // 6: Iteration.header:type_name -> Hash + 2, // 7: Iteration.direction:type_name -> Iteration.Direction + 8, // [8:8] is the sub-list for method output_type + 8, // [8:8] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name } func init() { file_p2p_proto_common_proto_init() } @@ -901,7 +994,7 @@ func file_p2p_proto_common_proto_init() { } } file_p2p_proto_common_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConsensusSignature); i { + switch v := v.(*Uint128); i { case 0: return &v.state case 1: @@ -913,7 +1006,7 @@ func file_p2p_proto_common_proto_init() { } } file_p2p_proto_common_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Merkle); i { + switch v := v.(*ConsensusSignature); i { case 0: return &v.state case 1: @@ -937,7 +1030,7 @@ func file_p2p_proto_common_proto_init() { } } file_p2p_proto_common_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockID); i { + switch v := v.(*StateDiffCommitment); i { case 0: return &v.state case 1: @@ -949,7 +1042,7 @@ func file_p2p_proto_common_proto_init() { } } file_p2p_proto_common_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Iteration); i { + switch v := v.(*BlockID); i { case 0: return &v.state case 1: @@ -961,6 +1054,18 @@ func file_p2p_proto_common_proto_init() { } } file_p2p_proto_common_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Iteration); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2p_proto_common_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Fin); i { case 0: return &v.state @@ -973,18 +1078,17 @@ func file_p2p_proto_common_proto_init() { } } } - file_p2p_proto_common_proto_msgTypes[9].OneofWrappers = []interface{}{ + file_p2p_proto_common_proto_msgTypes[10].OneofWrappers = []interface{}{ (*Iteration_BlockNumber)(nil), (*Iteration_Header)(nil), } - file_p2p_proto_common_proto_msgTypes[10].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_p2p_proto_common_proto_rawDesc, - NumEnums: 2, - NumMessages: 11, + NumEnums: 3, + NumMessages: 12, NumExtensions: 0, NumServices: 0, }, diff --git a/p2p/starknet/spec/event.pb.go b/p2p/starknet/spec/event.pb.go index c3d21f897f..0475603f66 100644 --- a/p2p/starknet/spec/event.pb.go +++ b/p2p/starknet/spec/event.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.4 +// protoc-gen-go v1.26.0 +// protoc v4.25.1 // source: p2p/proto/event.proto package spec @@ -27,9 +27,9 @@ type Event struct { unknownFields protoimpl.UnknownFields TransactionHash *Hash `protobuf:"bytes,1,opt,name=transaction_hash,json=transactionHash,proto3" json:"transaction_hash,omitempty"` - FromAddress *Felt252 `protobuf:"bytes,2,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` - Keys []*Felt252 `protobuf:"bytes,3,rep,name=keys,proto3" json:"keys,omitempty"` - Data []*Felt252 `protobuf:"bytes,4,rep,name=data,proto3" json:"data,omitempty"` + FromAddress *Felt252 `protobuf:"bytes,3,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` // looks like mistake? + Keys []*Felt252 `protobuf:"bytes,4,rep,name=keys,proto3" json:"keys,omitempty"` + Data []*Felt252 `protobuf:"bytes,5,rep,name=data,proto3" json:"data,omitempty"` } func (x *Event) Reset() { @@ -139,71 +139,23 @@ func (x *EventsRequest) GetIteration() *Iteration { return nil } -type Events struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Event `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *Events) Reset() { - *x = Events{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_event_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Events) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Events) ProtoMessage() {} - -func (x *Events) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_event_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Events.ProtoReflect.Descriptor instead. -func (*Events) Descriptor() ([]byte, []int) { - return file_p2p_proto_event_proto_rawDescGZIP(), []int{2} -} - -func (x *Events) GetItems() []*Event { - if x != nil { - return x.Items - } - return nil -} - -// can be several in a single reply +// Responses are sent ordered by the order given in the request. type EventsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id *BlockID `protobuf:"bytes,1,opt,name=id,proto3,oneof" json:"id,omitempty"` // may not appear if Fin is sent to end the whole response - // Types that are assignable to Responses: + // Types that are assignable to EventMessage: // - // *EventsResponse_Events + // *EventsResponse_Event // *EventsResponse_Fin - Responses isEventsResponse_Responses `protobuf_oneof:"responses"` + EventMessage isEventsResponse_EventMessage `protobuf_oneof:"event_message"` } func (x *EventsResponse) Reset() { *x = EventsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_event_proto_msgTypes[3] + mi := &file_p2p_proto_event_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -216,7 +168,7 @@ func (x *EventsResponse) String() string { func (*EventsResponse) ProtoMessage() {} func (x *EventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_event_proto_msgTypes[3] + mi := &file_p2p_proto_event_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -229,52 +181,45 @@ func (x *EventsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsResponse.ProtoReflect.Descriptor instead. func (*EventsResponse) Descriptor() ([]byte, []int) { - return file_p2p_proto_event_proto_rawDescGZIP(), []int{3} -} - -func (x *EventsResponse) GetId() *BlockID { - if x != nil { - return x.Id - } - return nil + return file_p2p_proto_event_proto_rawDescGZIP(), []int{2} } -func (m *EventsResponse) GetResponses() isEventsResponse_Responses { +func (m *EventsResponse) GetEventMessage() isEventsResponse_EventMessage { if m != nil { - return m.Responses + return m.EventMessage } return nil } -func (x *EventsResponse) GetEvents() *Events { - if x, ok := x.GetResponses().(*EventsResponse_Events); ok { - return x.Events +func (x *EventsResponse) GetEvent() *Event { + if x, ok := x.GetEventMessage().(*EventsResponse_Event); ok { + return x.Event } return nil } func (x *EventsResponse) GetFin() *Fin { - if x, ok := x.GetResponses().(*EventsResponse_Fin); ok { + if x, ok := x.GetEventMessage().(*EventsResponse_Fin); ok { return x.Fin } return nil } -type isEventsResponse_Responses interface { - isEventsResponse_Responses() +type isEventsResponse_EventMessage interface { + isEventsResponse_EventMessage() } -type EventsResponse_Events struct { - Events *Events `protobuf:"bytes,2,opt,name=events,proto3,oneof"` +type EventsResponse_Event struct { + Event *Event `protobuf:"bytes,1,opt,name=event,proto3,oneof"` } type EventsResponse_Fin struct { - Fin *Fin `protobuf:"bytes,3,opt,name=fin,proto3,oneof"` + Fin *Fin `protobuf:"bytes,2,opt,name=fin,proto3,oneof"` // Fin is sent after the peer sent all the data or when it encountered a block that it doesn't have its events. } -func (*EventsResponse_Events) isEventsResponse_Responses() {} +func (*EventsResponse_Event) isEventsResponse_EventMessage() {} -func (*EventsResponse_Fin) isEventsResponse_Responses() {} +func (*EventsResponse_Fin) isEventsResponse_EventMessage() {} var File_p2p_proto_event_proto protoreflect.FileDescriptor @@ -286,28 +231,26 @@ var file_p2p_proto_event_proto_rawDesc = []byte{ 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2b, 0x0a, 0x0c, 0x66, - 0x72, 0x6f, 0x6d, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x72, 0x6f, 0x6d, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, - 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x1c, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, + 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x1c, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x39, 0x0a, 0x0d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x26, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x06, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x0e, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x44, - 0x48, 0x01, 0x52, 0x02, 0x69, 0x64, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x06, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x48, 0x00, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x03, - 0x66, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x04, 0x2e, 0x46, 0x69, 0x6e, 0x48, - 0x00, 0x52, 0x03, 0x66, 0x69, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x73, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x69, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x5b, 0x0a, 0x0e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x1e, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x06, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x18, 0x0a, 0x03, 0x66, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x04, + 0x2e, 0x46, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x66, 0x69, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x31, 0x5a, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x65, 0x74, 0x68, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x64, 0x45, 0x74, 0x68, 0x2f, 0x6a, 0x75, 0x6e, 0x6f, 0x2f, 0x70, 0x32, + 0x70, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x6b, 0x6e, 0x65, 0x74, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -323,35 +266,30 @@ func file_p2p_proto_event_proto_rawDescGZIP() []byte { } var ( - file_p2p_proto_event_proto_msgTypes = make([]protoimpl.MessageInfo, 4) + file_p2p_proto_event_proto_msgTypes = make([]protoimpl.MessageInfo, 3) file_p2p_proto_event_proto_goTypes = []interface{}{ (*Event)(nil), // 0: Event (*EventsRequest)(nil), // 1: EventsRequest - (*Events)(nil), // 2: Events - (*EventsResponse)(nil), // 3: EventsResponse - (*Hash)(nil), // 4: Hash - (*Felt252)(nil), // 5: Felt252 - (*Iteration)(nil), // 6: Iteration - (*BlockID)(nil), // 7: BlockID - (*Fin)(nil), // 8: Fin + (*EventsResponse)(nil), // 2: EventsResponse + (*Hash)(nil), // 3: Hash + (*Felt252)(nil), // 4: Felt252 + (*Iteration)(nil), // 5: Iteration + (*Fin)(nil), // 6: Fin } ) - var file_p2p_proto_event_proto_depIdxs = []int32{ - 4, // 0: Event.transaction_hash:type_name -> Hash - 5, // 1: Event.from_address:type_name -> Felt252 - 5, // 2: Event.keys:type_name -> Felt252 - 5, // 3: Event.data:type_name -> Felt252 - 6, // 4: EventsRequest.iteration:type_name -> Iteration - 0, // 5: Events.items:type_name -> Event - 7, // 6: EventsResponse.id:type_name -> BlockID - 2, // 7: EventsResponse.events:type_name -> Events - 8, // 8: EventsResponse.fin:type_name -> Fin - 9, // [9:9] is the sub-list for method output_type - 9, // [9:9] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name + 3, // 0: Event.transaction_hash:type_name -> Hash + 4, // 1: Event.from_address:type_name -> Felt252 + 4, // 2: Event.keys:type_name -> Felt252 + 4, // 3: Event.data:type_name -> Felt252 + 5, // 4: EventsRequest.iteration:type_name -> Iteration + 0, // 5: EventsResponse.event:type_name -> Event + 6, // 6: EventsResponse.fin:type_name -> Fin + 7, // [7:7] is the sub-list for method output_type + 7, // [7:7] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name } func init() { file_p2p_proto_event_proto_init() } @@ -386,18 +324,6 @@ func file_p2p_proto_event_proto_init() { } } file_p2p_proto_event_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Events); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_event_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EventsResponse); i { case 0: return &v.state @@ -410,8 +336,8 @@ func file_p2p_proto_event_proto_init() { } } } - file_p2p_proto_event_proto_msgTypes[3].OneofWrappers = []interface{}{ - (*EventsResponse_Events)(nil), + file_p2p_proto_event_proto_msgTypes[2].OneofWrappers = []interface{}{ + (*EventsResponse_Event)(nil), (*EventsResponse_Fin)(nil), } type x struct{} @@ -420,7 +346,7 @@ func file_p2p_proto_event_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_p2p_proto_event_proto_rawDesc, NumEnums: 0, - NumMessages: 4, + NumMessages: 3, NumExtensions: 0, NumServices: 0, }, diff --git a/p2p/starknet/spec/header.pb.go b/p2p/starknet/spec/header.pb.go new file mode 100644 index 0000000000..36ad83289e --- /dev/null +++ b/p2p/starknet/spec/header.pb.go @@ -0,0 +1,699 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v4.25.1 +// source: p2p/proto/header.proto + +package spec + +import ( + reflect "reflect" + sync "sync" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Note: commitments may change to be for the previous blocks like comet/tendermint +// hash of block header sent to L1 +type SignedBlockHeader struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BlockHash *Hash `protobuf:"bytes,1,opt,name=block_hash,json=blockHash,proto3" json:"block_hash,omitempty"` // For the structure of the block hash, see https://docs.starknet.io/documentation/architecture_and_concepts/Network_Architecture/header/#block_hash + ParentHash *Hash `protobuf:"bytes,2,opt,name=parent_hash,json=parentHash,proto3" json:"parent_hash,omitempty"` + Number uint64 `protobuf:"varint,3,opt,name=number,proto3" json:"number,omitempty"` // This can be deduced from context. We can consider removing this field. + Time uint64 `protobuf:"varint,4,opt,name=time,proto3" json:"time,omitempty"` // Encoded in Unix time. + SequencerAddress *Address `protobuf:"bytes,5,opt,name=sequencer_address,json=sequencerAddress,proto3" json:"sequencer_address,omitempty"` + StateRoot *Hash `protobuf:"bytes,6,opt,name=state_root,json=stateRoot,proto3" json:"state_root,omitempty"` // Patricia root of contract and class patricia tries. Each of those tries are of height 251. Same as in L1. Later more trees will be included + StateDiffCommitment *StateDiffCommitment `protobuf:"bytes,7,opt,name=state_diff_commitment,json=stateDiffCommitment,proto3" json:"state_diff_commitment,omitempty"` // The state diff commitment returned by the Starknet Feeder Gateway + // For more info, see https://community.starknet.io/t/introducing-p2p-authentication-and-mismatch-resolution-in-v0-12-2/97993 + // The leaves contain a hash of the transaction hash and transaction signature. + Transactions *Patricia `protobuf:"bytes,8,opt,name=transactions,proto3" json:"transactions,omitempty"` // By order of execution. TBD: required? the client can execute (powerful machine) and match state diff + Events *Patricia `protobuf:"bytes,9,opt,name=events,proto3" json:"events,omitempty"` // By order of issuance. TBD: in receipts? + Receipts *Hash `protobuf:"bytes,10,opt,name=receipts,proto3" json:"receipts,omitempty"` // By order of issuance. This is a patricia root. No need for length because it's the same length as transactions. + ProtocolVersion string `protobuf:"bytes,11,opt,name=protocol_version,json=protocolVersion,proto3" json:"protocol_version,omitempty"` // Starknet version + GasPriceFri *Uint128 `protobuf:"bytes,12,opt,name=gas_price_fri,json=gasPriceFri,proto3" json:"gas_price_fri,omitempty"` + GasPriceWei *Uint128 `protobuf:"bytes,13,opt,name=gas_price_wei,json=gasPriceWei,proto3" json:"gas_price_wei,omitempty"` + DataGasPriceFri *Uint128 `protobuf:"bytes,14,opt,name=data_gas_price_fri,json=dataGasPriceFri,proto3" json:"data_gas_price_fri,omitempty"` + DataGasPriceWei *Uint128 `protobuf:"bytes,15,opt,name=data_gas_price_wei,json=dataGasPriceWei,proto3" json:"data_gas_price_wei,omitempty"` + L1DataAvailabilityMode L1DataAvailabilityMode `protobuf:"varint,16,opt,name=l1_data_availability_mode,json=l1DataAvailabilityMode,proto3,enum=L1DataAvailabilityMode" json:"l1_data_availability_mode,omitempty"` + // for now, we assume a small consensus, so this fits in 1M. Else, these will be repeated and extracted from this message. + Signatures []*ConsensusSignature `protobuf:"bytes,17,rep,name=signatures,proto3" json:"signatures,omitempty"` // can be more explicit here about the signature structure as this is not part of account abstraction +} + +func (x *SignedBlockHeader) Reset() { + *x = SignedBlockHeader{} + if protoimpl.UnsafeEnabled { + mi := &file_p2p_proto_header_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SignedBlockHeader) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SignedBlockHeader) ProtoMessage() {} + +func (x *SignedBlockHeader) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_header_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SignedBlockHeader.ProtoReflect.Descriptor instead. +func (*SignedBlockHeader) Descriptor() ([]byte, []int) { + return file_p2p_proto_header_proto_rawDescGZIP(), []int{0} +} + +func (x *SignedBlockHeader) GetBlockHash() *Hash { + if x != nil { + return x.BlockHash + } + return nil +} + +func (x *SignedBlockHeader) GetParentHash() *Hash { + if x != nil { + return x.ParentHash + } + return nil +} + +func (x *SignedBlockHeader) GetNumber() uint64 { + if x != nil { + return x.Number + } + return 0 +} + +func (x *SignedBlockHeader) GetTime() uint64 { + if x != nil { + return x.Time + } + return 0 +} + +func (x *SignedBlockHeader) GetSequencerAddress() *Address { + if x != nil { + return x.SequencerAddress + } + return nil +} + +func (x *SignedBlockHeader) GetStateRoot() *Hash { + if x != nil { + return x.StateRoot + } + return nil +} + +func (x *SignedBlockHeader) GetStateDiffCommitment() *StateDiffCommitment { + if x != nil { + return x.StateDiffCommitment + } + return nil +} + +func (x *SignedBlockHeader) GetTransactions() *Patricia { + if x != nil { + return x.Transactions + } + return nil +} + +func (x *SignedBlockHeader) GetEvents() *Patricia { + if x != nil { + return x.Events + } + return nil +} + +func (x *SignedBlockHeader) GetReceipts() *Hash { + if x != nil { + return x.Receipts + } + return nil +} + +func (x *SignedBlockHeader) GetProtocolVersion() string { + if x != nil { + return x.ProtocolVersion + } + return "" +} + +func (x *SignedBlockHeader) GetGasPriceFri() *Uint128 { + if x != nil { + return x.GasPriceFri + } + return nil +} + +func (x *SignedBlockHeader) GetGasPriceWei() *Uint128 { + if x != nil { + return x.GasPriceWei + } + return nil +} + +func (x *SignedBlockHeader) GetDataGasPriceFri() *Uint128 { + if x != nil { + return x.DataGasPriceFri + } + return nil +} + +func (x *SignedBlockHeader) GetDataGasPriceWei() *Uint128 { + if x != nil { + return x.DataGasPriceWei + } + return nil +} + +func (x *SignedBlockHeader) GetL1DataAvailabilityMode() L1DataAvailabilityMode { + if x != nil { + return x.L1DataAvailabilityMode + } + return L1DataAvailabilityMode_Calldata +} + +func (x *SignedBlockHeader) GetSignatures() []*ConsensusSignature { + if x != nil { + return x.Signatures + } + return nil +} + +// sent to all peers (except the ones this was received from, if any). +// for a fraction of peers, also send the GetBlockHeaders response (as if they asked for it for this block) +type NewBlock struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to MaybeFull: + // + // *NewBlock_Id + // *NewBlock_Header + MaybeFull isNewBlock_MaybeFull `protobuf_oneof:"maybe_full"` +} + +func (x *NewBlock) Reset() { + *x = NewBlock{} + if protoimpl.UnsafeEnabled { + mi := &file_p2p_proto_header_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NewBlock) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NewBlock) ProtoMessage() {} + +func (x *NewBlock) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_header_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NewBlock.ProtoReflect.Descriptor instead. +func (*NewBlock) Descriptor() ([]byte, []int) { + return file_p2p_proto_header_proto_rawDescGZIP(), []int{1} +} + +func (m *NewBlock) GetMaybeFull() isNewBlock_MaybeFull { + if m != nil { + return m.MaybeFull + } + return nil +} + +func (x *NewBlock) GetId() *BlockID { + if x, ok := x.GetMaybeFull().(*NewBlock_Id); ok { + return x.Id + } + return nil +} + +func (x *NewBlock) GetHeader() *BlockHeadersResponse { + if x, ok := x.GetMaybeFull().(*NewBlock_Header); ok { + return x.Header + } + return nil +} + +type isNewBlock_MaybeFull interface { + isNewBlock_MaybeFull() +} + +type NewBlock_Id struct { + Id *BlockID `protobuf:"bytes,1,opt,name=id,proto3,oneof"` +} + +type NewBlock_Header struct { + Header *BlockHeadersResponse `protobuf:"bytes,2,opt,name=header,proto3,oneof"` +} + +func (*NewBlock_Id) isNewBlock_MaybeFull() {} + +func (*NewBlock_Header) isNewBlock_MaybeFull() {} + +type BlockHeadersRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Iteration *Iteration `protobuf:"bytes,1,opt,name=iteration,proto3" json:"iteration,omitempty"` +} + +func (x *BlockHeadersRequest) Reset() { + *x = BlockHeadersRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_p2p_proto_header_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BlockHeadersRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BlockHeadersRequest) ProtoMessage() {} + +func (x *BlockHeadersRequest) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_header_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BlockHeadersRequest.ProtoReflect.Descriptor instead. +func (*BlockHeadersRequest) Descriptor() ([]byte, []int) { + return file_p2p_proto_header_proto_rawDescGZIP(), []int{2} +} + +func (x *BlockHeadersRequest) GetIteration() *Iteration { + if x != nil { + return x.Iteration + } + return nil +} + +// Responses are sent ordered by the order given in the request. +type BlockHeadersResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to HeaderMessage: + // + // *BlockHeadersResponse_Header + // *BlockHeadersResponse_Fin + HeaderMessage isBlockHeadersResponse_HeaderMessage `protobuf_oneof:"header_message"` +} + +func (x *BlockHeadersResponse) Reset() { + *x = BlockHeadersResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_p2p_proto_header_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BlockHeadersResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BlockHeadersResponse) ProtoMessage() {} + +func (x *BlockHeadersResponse) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_header_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BlockHeadersResponse.ProtoReflect.Descriptor instead. +func (*BlockHeadersResponse) Descriptor() ([]byte, []int) { + return file_p2p_proto_header_proto_rawDescGZIP(), []int{3} +} + +func (m *BlockHeadersResponse) GetHeaderMessage() isBlockHeadersResponse_HeaderMessage { + if m != nil { + return m.HeaderMessage + } + return nil +} + +func (x *BlockHeadersResponse) GetHeader() *SignedBlockHeader { + if x, ok := x.GetHeaderMessage().(*BlockHeadersResponse_Header); ok { + return x.Header + } + return nil +} + +func (x *BlockHeadersResponse) GetFin() *Fin { + if x, ok := x.GetHeaderMessage().(*BlockHeadersResponse_Fin); ok { + return x.Fin + } + return nil +} + +type isBlockHeadersResponse_HeaderMessage interface { + isBlockHeadersResponse_HeaderMessage() +} + +type BlockHeadersResponse_Header struct { + Header *SignedBlockHeader `protobuf:"bytes,1,opt,name=header,proto3,oneof"` +} + +type BlockHeadersResponse_Fin struct { + Fin *Fin `protobuf:"bytes,2,opt,name=fin,proto3,oneof"` // Fin is sent after the peer sent all the data or when it encountered a block that it doesn't have its header. +} + +func (*BlockHeadersResponse_Header) isBlockHeadersResponse_HeaderMessage() {} + +func (*BlockHeadersResponse_Fin) isBlockHeadersResponse_HeaderMessage() {} + +type BlockProof struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Proof [][]byte `protobuf:"bytes,1,rep,name=proof,proto3" json:"proof,omitempty"` +} + +func (x *BlockProof) Reset() { + *x = BlockProof{} + if protoimpl.UnsafeEnabled { + mi := &file_p2p_proto_header_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BlockProof) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BlockProof) ProtoMessage() {} + +func (x *BlockProof) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_header_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BlockProof.ProtoReflect.Descriptor instead. +func (*BlockProof) Descriptor() ([]byte, []int) { + return file_p2p_proto_header_proto_rawDescGZIP(), []int{4} +} + +func (x *BlockProof) GetProof() [][]byte { + if x != nil { + return x.Proof + } + return nil +} + +var File_p2p_proto_header_proto protoreflect.FileDescriptor + +var file_p2p_proto_header_proto_rawDesc = []byte{ + 0x0a, 0x16, 0x70, 0x32, 0x70, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x70, 0x32, 0x70, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0xa7, 0x06, 0x0a, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, + 0x68, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x26, 0x0a, 0x0b, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, + 0x12, 0x35, 0x0a, 0x11, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x72, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x10, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x72, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, + 0x73, 0x68, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x48, 0x0a, + 0x15, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x44, 0x69, 0x66, 0x66, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x13, 0x73, 0x74, 0x61, 0x74, 0x65, 0x44, 0x69, 0x66, 0x66, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, + 0x50, 0x61, 0x74, 0x72, 0x69, 0x63, 0x69, 0x61, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x50, 0x61, 0x74, 0x72, 0x69, 0x63, 0x69, + 0x61, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x08, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x70, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, + 0x73, 0x68, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x12, 0x29, 0x0a, 0x10, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x0d, 0x67, 0x61, 0x73, 0x5f, 0x70, + 0x72, 0x69, 0x63, 0x65, 0x5f, 0x66, 0x72, 0x69, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, + 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x31, 0x32, 0x38, 0x52, 0x0b, 0x67, 0x61, 0x73, 0x50, 0x72, 0x69, + 0x63, 0x65, 0x46, 0x72, 0x69, 0x12, 0x2c, 0x0a, 0x0d, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, + 0x63, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x55, + 0x69, 0x6e, 0x74, 0x31, 0x32, 0x38, 0x52, 0x0b, 0x67, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x57, 0x65, 0x69, 0x12, 0x35, 0x0a, 0x12, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x67, 0x61, 0x73, 0x5f, + 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x66, 0x72, 0x69, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x08, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x31, 0x32, 0x38, 0x52, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x47, + 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x46, 0x72, 0x69, 0x12, 0x35, 0x0a, 0x12, 0x64, 0x61, + 0x74, 0x61, 0x5f, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x77, 0x65, 0x69, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x31, 0x32, 0x38, + 0x52, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x57, 0x65, + 0x69, 0x12, 0x52, 0x0a, 0x19, 0x6c, 0x31, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x10, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x4c, 0x31, 0x44, 0x61, 0x74, 0x61, 0x41, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x16, 0x6c, + 0x31, 0x44, 0x61, 0x74, 0x61, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x43, 0x6f, 0x6e, 0x73, + 0x65, 0x6e, 0x73, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x65, 0x0a, 0x08, 0x4e, 0x65, + 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x44, 0x48, 0x00, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x2f, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x06, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x42, 0x0c, 0x0a, 0x0a, 0x6d, 0x61, 0x79, 0x62, 0x65, 0x5f, 0x66, 0x75, 0x6c, + 0x6c, 0x22, 0x3f, 0x0a, 0x13, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x49, 0x74, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x14, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x68, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x53, 0x69, 0x67, + 0x6e, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00, + 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x03, 0x66, 0x69, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x04, 0x2e, 0x46, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x66, + 0x69, 0x6e, 0x42, 0x10, 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x22, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0c, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x64, 0x45, 0x74, 0x68, 0x2f, 0x6a, 0x75, 0x6e, 0x6f, 0x2f, 0x70, 0x32, 0x70, 0x2f, 0x73, 0x74, + 0x61, 0x72, 0x6b, 0x6e, 0x65, 0x74, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_p2p_proto_header_proto_rawDescOnce sync.Once + file_p2p_proto_header_proto_rawDescData = file_p2p_proto_header_proto_rawDesc +) + +func file_p2p_proto_header_proto_rawDescGZIP() []byte { + file_p2p_proto_header_proto_rawDescOnce.Do(func() { + file_p2p_proto_header_proto_rawDescData = protoimpl.X.CompressGZIP(file_p2p_proto_header_proto_rawDescData) + }) + return file_p2p_proto_header_proto_rawDescData +} + +var ( + file_p2p_proto_header_proto_msgTypes = make([]protoimpl.MessageInfo, 5) + file_p2p_proto_header_proto_goTypes = []interface{}{ + (*SignedBlockHeader)(nil), // 0: SignedBlockHeader + (*NewBlock)(nil), // 1: NewBlock + (*BlockHeadersRequest)(nil), // 2: BlockHeadersRequest + (*BlockHeadersResponse)(nil), // 3: BlockHeadersResponse + (*BlockProof)(nil), // 4: BlockProof + (*Hash)(nil), // 5: Hash + (*Address)(nil), // 6: Address + (*StateDiffCommitment)(nil), // 7: StateDiffCommitment + (*Patricia)(nil), // 8: Patricia + (*Uint128)(nil), // 9: Uint128 + (L1DataAvailabilityMode)(0), // 10: L1DataAvailabilityMode + (*ConsensusSignature)(nil), // 11: ConsensusSignature + (*BlockID)(nil), // 12: BlockID + (*Iteration)(nil), // 13: Iteration + (*Fin)(nil), // 14: Fin + } +) +var file_p2p_proto_header_proto_depIdxs = []int32{ + 5, // 0: SignedBlockHeader.block_hash:type_name -> Hash + 5, // 1: SignedBlockHeader.parent_hash:type_name -> Hash + 6, // 2: SignedBlockHeader.sequencer_address:type_name -> Address + 5, // 3: SignedBlockHeader.state_root:type_name -> Hash + 7, // 4: SignedBlockHeader.state_diff_commitment:type_name -> StateDiffCommitment + 8, // 5: SignedBlockHeader.transactions:type_name -> Patricia + 8, // 6: SignedBlockHeader.events:type_name -> Patricia + 5, // 7: SignedBlockHeader.receipts:type_name -> Hash + 9, // 8: SignedBlockHeader.gas_price_fri:type_name -> Uint128 + 9, // 9: SignedBlockHeader.gas_price_wei:type_name -> Uint128 + 9, // 10: SignedBlockHeader.data_gas_price_fri:type_name -> Uint128 + 9, // 11: SignedBlockHeader.data_gas_price_wei:type_name -> Uint128 + 10, // 12: SignedBlockHeader.l1_data_availability_mode:type_name -> L1DataAvailabilityMode + 11, // 13: SignedBlockHeader.signatures:type_name -> ConsensusSignature + 12, // 14: NewBlock.id:type_name -> BlockID + 3, // 15: NewBlock.header:type_name -> BlockHeadersResponse + 13, // 16: BlockHeadersRequest.iteration:type_name -> Iteration + 0, // 17: BlockHeadersResponse.header:type_name -> SignedBlockHeader + 14, // 18: BlockHeadersResponse.fin:type_name -> Fin + 19, // [19:19] is the sub-list for method output_type + 19, // [19:19] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name +} + +func init() { file_p2p_proto_header_proto_init() } +func file_p2p_proto_header_proto_init() { + if File_p2p_proto_header_proto != nil { + return + } + file_p2p_proto_common_proto_init() + if !protoimpl.UnsafeEnabled { + file_p2p_proto_header_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SignedBlockHeader); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2p_proto_header_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NewBlock); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2p_proto_header_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BlockHeadersRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2p_proto_header_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BlockHeadersResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2p_proto_header_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BlockProof); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_p2p_proto_header_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*NewBlock_Id)(nil), + (*NewBlock_Header)(nil), + } + file_p2p_proto_header_proto_msgTypes[3].OneofWrappers = []interface{}{ + (*BlockHeadersResponse_Header)(nil), + (*BlockHeadersResponse_Fin)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_p2p_proto_header_proto_rawDesc, + NumEnums: 0, + NumMessages: 5, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_p2p_proto_header_proto_goTypes, + DependencyIndexes: file_p2p_proto_header_proto_depIdxs, + MessageInfos: file_p2p_proto_header_proto_msgTypes, + }.Build() + File_p2p_proto_header_proto = out.File + file_p2p_proto_header_proto_rawDesc = nil + file_p2p_proto_header_proto_goTypes = nil + file_p2p_proto_header_proto_depIdxs = nil +} diff --git a/p2p/starknet/spec/receipt.pb.go b/p2p/starknet/spec/receipt.pb.go index d760772b2b..680e7dceb1 100644 --- a/p2p/starknet/spec/receipt.pb.go +++ b/p2p/starknet/spec/receipt.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.4 +// protoc-gen-go v1.26.0 +// protoc v4.25.1 // source: p2p/proto/receipt.proto package spec @@ -21,14 +21,60 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type PriceUnit int32 + +const ( + PriceUnit_Wei PriceUnit = 0 + PriceUnit_Fri PriceUnit = 1 +) + +// Enum value maps for PriceUnit. +var ( + PriceUnit_name = map[int32]string{ + 0: "Wei", + 1: "Fri", + } + PriceUnit_value = map[string]int32{ + "Wei": 0, + "Fri": 1, + } +) + +func (x PriceUnit) Enum() *PriceUnit { + p := new(PriceUnit) + *p = x + return p +} + +func (x PriceUnit) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PriceUnit) Descriptor() protoreflect.EnumDescriptor { + return file_p2p_proto_receipt_proto_enumTypes[0].Descriptor() +} + +func (PriceUnit) Type() protoreflect.EnumType { + return &file_p2p_proto_receipt_proto_enumTypes[0] +} + +func (x PriceUnit) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use PriceUnit.Descriptor instead. +func (PriceUnit) EnumDescriptor() ([]byte, []int) { + return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{0} +} + type MessageToL1 struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - FromAddress *Felt252 `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` - Payload []*Felt252 `protobuf:"bytes,2,rep,name=payload,proto3" json:"payload,omitempty"` - ToAddress *EthereumAddress `protobuf:"bytes,3,opt,name=to_address,json=toAddress,proto3" json:"to_address,omitempty"` + FromAddress *Felt252 `protobuf:"bytes,2,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` + Payload []*Felt252 `protobuf:"bytes,3,rep,name=payload,proto3" json:"payload,omitempty"` + ToAddress *EthereumAddress `protobuf:"bytes,4,opt,name=to_address,json=toAddress,proto3" json:"to_address,omitempty"` } func (x *MessageToL1) Reset() { @@ -131,85 +177,6 @@ func (x *EthereumAddress) GetElements() []byte { return nil } -type MessageToL2 struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - FromAddress *EthereumAddress `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` - Payload []*Felt252 `protobuf:"bytes,2,rep,name=payload,proto3" json:"payload,omitempty"` - ToAddress *Felt252 `protobuf:"bytes,3,opt,name=to_address,json=toAddress,proto3" json:"to_address,omitempty"` - EntryPointSelector *Felt252 `protobuf:"bytes,4,opt,name=entry_point_selector,json=entryPointSelector,proto3" json:"entry_point_selector,omitempty"` - Nonce *Felt252 `protobuf:"bytes,5,opt,name=nonce,proto3" json:"nonce,omitempty"` -} - -func (x *MessageToL2) Reset() { - *x = MessageToL2{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_receipt_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MessageToL2) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MessageToL2) ProtoMessage() {} - -func (x *MessageToL2) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_receipt_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MessageToL2.ProtoReflect.Descriptor instead. -func (*MessageToL2) Descriptor() ([]byte, []int) { - return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{2} -} - -func (x *MessageToL2) GetFromAddress() *EthereumAddress { - if x != nil { - return x.FromAddress - } - return nil -} - -func (x *MessageToL2) GetPayload() []*Felt252 { - if x != nil { - return x.Payload - } - return nil -} - -func (x *MessageToL2) GetToAddress() *Felt252 { - if x != nil { - return x.ToAddress - } - return nil -} - -func (x *MessageToL2) GetEntryPointSelector() *Felt252 { - if x != nil { - return x.EntryPointSelector - } - return nil -} - -func (x *MessageToL2) GetNonce() *Felt252 { - if x != nil { - return x.Nonce - } - return nil -} - type Receipt struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -228,7 +195,7 @@ type Receipt struct { func (x *Receipt) Reset() { *x = Receipt{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_receipt_proto_msgTypes[3] + mi := &file_p2p_proto_receipt_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -241,7 +208,7 @@ func (x *Receipt) String() string { func (*Receipt) ProtoMessage() {} func (x *Receipt) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_receipt_proto_msgTypes[3] + mi := &file_p2p_proto_receipt_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -254,7 +221,7 @@ func (x *Receipt) ProtoReflect() protoreflect.Message { // Deprecated: Use Receipt.ProtoReflect.Descriptor instead. func (*Receipt) Descriptor() ([]byte, []int) { - return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{3} + return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{2} } func (m *Receipt) GetType() isReceipt_Type { @@ -333,189 +300,6 @@ func (*Receipt_DeprecatedDeploy) isReceipt_Type() {} func (*Receipt_DeployAccount_) isReceipt_Type() {} -type ReceiptsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Iteration *Iteration `protobuf:"bytes,1,opt,name=iteration,proto3" json:"iteration,omitempty"` -} - -func (x *ReceiptsRequest) Reset() { - *x = ReceiptsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_receipt_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ReceiptsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ReceiptsRequest) ProtoMessage() {} - -func (x *ReceiptsRequest) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_receipt_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ReceiptsRequest.ProtoReflect.Descriptor instead. -func (*ReceiptsRequest) Descriptor() ([]byte, []int) { - return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{4} -} - -func (x *ReceiptsRequest) GetIteration() *Iteration { - if x != nil { - return x.Iteration - } - return nil -} - -type Receipts struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Receipt `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *Receipts) Reset() { - *x = Receipts{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_receipt_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Receipts) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Receipts) ProtoMessage() {} - -func (x *Receipts) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_receipt_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Receipts.ProtoReflect.Descriptor instead. -func (*Receipts) Descriptor() ([]byte, []int) { - return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{5} -} - -func (x *Receipts) GetItems() []*Receipt { - if x != nil { - return x.Items - } - return nil -} - -type ReceiptsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id *BlockID `protobuf:"bytes,1,opt,name=id,proto3,oneof" json:"id,omitempty"` // may not appear if Fin is sent to end the whole response - // Types that are assignable to Responses: - // - // *ReceiptsResponse_Receipts - // *ReceiptsResponse_Fin - Responses isReceiptsResponse_Responses `protobuf_oneof:"responses"` -} - -func (x *ReceiptsResponse) Reset() { - *x = ReceiptsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_receipt_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ReceiptsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ReceiptsResponse) ProtoMessage() {} - -func (x *ReceiptsResponse) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_receipt_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ReceiptsResponse.ProtoReflect.Descriptor instead. -func (*ReceiptsResponse) Descriptor() ([]byte, []int) { - return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{6} -} - -func (x *ReceiptsResponse) GetId() *BlockID { - if x != nil { - return x.Id - } - return nil -} - -func (m *ReceiptsResponse) GetResponses() isReceiptsResponse_Responses { - if m != nil { - return m.Responses - } - return nil -} - -func (x *ReceiptsResponse) GetReceipts() *Receipts { - if x, ok := x.GetResponses().(*ReceiptsResponse_Receipts); ok { - return x.Receipts - } - return nil -} - -func (x *ReceiptsResponse) GetFin() *Fin { - if x, ok := x.GetResponses().(*ReceiptsResponse_Fin); ok { - return x.Fin - } - return nil -} - -type isReceiptsResponse_Responses interface { - isReceiptsResponse_Responses() -} - -type ReceiptsResponse_Receipts struct { - Receipts *Receipts `protobuf:"bytes,2,opt,name=receipts,proto3,oneof"` -} - -type ReceiptsResponse_Fin struct { - Fin *Fin `protobuf:"bytes,3,opt,name=fin,proto3,oneof"` -} - -func (*ReceiptsResponse_Receipts) isReceiptsResponse_Responses() {} - -func (*ReceiptsResponse_Fin) isReceiptsResponse_Responses() {} - type Receipt_ExecutionResources struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -524,12 +308,14 @@ type Receipt_ExecutionResources struct { Builtins *Receipt_ExecutionResources_BuiltinCounter `protobuf:"bytes,1,opt,name=builtins,proto3" json:"builtins,omitempty"` Steps uint32 `protobuf:"varint,2,opt,name=steps,proto3" json:"steps,omitempty"` MemoryHoles uint32 `protobuf:"varint,3,opt,name=memory_holes,json=memoryHoles,proto3" json:"memory_holes,omitempty"` + L1Gas *Felt252 `protobuf:"bytes,4,opt,name=l1_gas,json=l1Gas,proto3" json:"l1_gas,omitempty"` + L1DataGas *Felt252 `protobuf:"bytes,5,opt,name=l1_data_gas,json=l1DataGas,proto3" json:"l1_data_gas,omitempty"` } func (x *Receipt_ExecutionResources) Reset() { *x = Receipt_ExecutionResources{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_receipt_proto_msgTypes[7] + mi := &file_p2p_proto_receipt_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -542,7 +328,7 @@ func (x *Receipt_ExecutionResources) String() string { func (*Receipt_ExecutionResources) ProtoMessage() {} func (x *Receipt_ExecutionResources) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_receipt_proto_msgTypes[7] + mi := &file_p2p_proto_receipt_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -555,7 +341,7 @@ func (x *Receipt_ExecutionResources) ProtoReflect() protoreflect.Message { // Deprecated: Use Receipt_ExecutionResources.ProtoReflect.Descriptor instead. func (*Receipt_ExecutionResources) Descriptor() ([]byte, []int) { - return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{3, 0} + return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{2, 0} } func (x *Receipt_ExecutionResources) GetBuiltins() *Receipt_ExecutionResources_BuiltinCounter { @@ -579,23 +365,36 @@ func (x *Receipt_ExecutionResources) GetMemoryHoles() uint32 { return 0 } +func (x *Receipt_ExecutionResources) GetL1Gas() *Felt252 { + if x != nil { + return x.L1Gas + } + return nil +} + +func (x *Receipt_ExecutionResources) GetL1DataGas() *Felt252 { + if x != nil { + return x.L1DataGas + } + return nil +} + type Receipt_Common struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TransactionHash *Hash `protobuf:"bytes,1,opt,name=transaction_hash,json=transactionHash,proto3" json:"transaction_hash,omitempty"` ActualFee *Felt252 `protobuf:"bytes,2,opt,name=actual_fee,json=actualFee,proto3" json:"actual_fee,omitempty"` - MessagesSent []*MessageToL1 `protobuf:"bytes,3,rep,name=messages_sent,json=messagesSent,proto3" json:"messages_sent,omitempty"` - ExecutionResources *Receipt_ExecutionResources `protobuf:"bytes,4,opt,name=execution_resources,json=executionResources,proto3" json:"execution_resources,omitempty"` - RevertReason string `protobuf:"bytes,5,opt,name=revert_reason,json=revertReason,proto3" json:"revert_reason,omitempty"` - ConsumedMessage *MessageToL2 `protobuf:"bytes,6,opt,name=consumed_message,json=consumedMessage,proto3,oneof" json:"consumed_message,omitempty"` + PriceUnit PriceUnit `protobuf:"varint,3,opt,name=price_unit,json=priceUnit,proto3,enum=PriceUnit" json:"price_unit,omitempty"` + MessagesSent []*MessageToL1 `protobuf:"bytes,4,rep,name=messages_sent,json=messagesSent,proto3" json:"messages_sent,omitempty"` + ExecutionResources *Receipt_ExecutionResources `protobuf:"bytes,5,opt,name=execution_resources,json=executionResources,proto3" json:"execution_resources,omitempty"` + RevertReason *string `protobuf:"bytes,6,opt,name=revert_reason,json=revertReason,proto3,oneof" json:"revert_reason,omitempty"` } func (x *Receipt_Common) Reset() { *x = Receipt_Common{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_receipt_proto_msgTypes[8] + mi := &file_p2p_proto_receipt_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -608,7 +407,7 @@ func (x *Receipt_Common) String() string { func (*Receipt_Common) ProtoMessage() {} func (x *Receipt_Common) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_receipt_proto_msgTypes[8] + mi := &file_p2p_proto_receipt_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -621,21 +420,21 @@ func (x *Receipt_Common) ProtoReflect() protoreflect.Message { // Deprecated: Use Receipt_Common.ProtoReflect.Descriptor instead. func (*Receipt_Common) Descriptor() ([]byte, []int) { - return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{3, 1} + return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{2, 1} } -func (x *Receipt_Common) GetTransactionHash() *Hash { +func (x *Receipt_Common) GetActualFee() *Felt252 { if x != nil { - return x.TransactionHash + return x.ActualFee } return nil } -func (x *Receipt_Common) GetActualFee() *Felt252 { +func (x *Receipt_Common) GetPriceUnit() PriceUnit { if x != nil { - return x.ActualFee + return x.PriceUnit } - return nil + return PriceUnit_Wei } func (x *Receipt_Common) GetMessagesSent() []*MessageToL1 { @@ -653,19 +452,12 @@ func (x *Receipt_Common) GetExecutionResources() *Receipt_ExecutionResources { } func (x *Receipt_Common) GetRevertReason() string { - if x != nil { - return x.RevertReason + if x != nil && x.RevertReason != nil { + return *x.RevertReason } return "" } -func (x *Receipt_Common) GetConsumedMessage() *MessageToL2 { - if x != nil { - return x.ConsumedMessage - } - return nil -} - type Receipt_Invoke struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -677,7 +469,7 @@ type Receipt_Invoke struct { func (x *Receipt_Invoke) Reset() { *x = Receipt_Invoke{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_receipt_proto_msgTypes[9] + mi := &file_p2p_proto_receipt_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -690,7 +482,7 @@ func (x *Receipt_Invoke) String() string { func (*Receipt_Invoke) ProtoMessage() {} func (x *Receipt_Invoke) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_receipt_proto_msgTypes[9] + mi := &file_p2p_proto_receipt_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -703,7 +495,7 @@ func (x *Receipt_Invoke) ProtoReflect() protoreflect.Message { // Deprecated: Use Receipt_Invoke.ProtoReflect.Descriptor instead. func (*Receipt_Invoke) Descriptor() ([]byte, []int) { - return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{3, 2} + return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{2, 2} } func (x *Receipt_Invoke) GetCommon() *Receipt_Common { @@ -725,7 +517,7 @@ type Receipt_L1Handler struct { func (x *Receipt_L1Handler) Reset() { *x = Receipt_L1Handler{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_receipt_proto_msgTypes[10] + mi := &file_p2p_proto_receipt_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -738,7 +530,7 @@ func (x *Receipt_L1Handler) String() string { func (*Receipt_L1Handler) ProtoMessage() {} func (x *Receipt_L1Handler) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_receipt_proto_msgTypes[10] + mi := &file_p2p_proto_receipt_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -751,7 +543,7 @@ func (x *Receipt_L1Handler) ProtoReflect() protoreflect.Message { // Deprecated: Use Receipt_L1Handler.ProtoReflect.Descriptor instead. func (*Receipt_L1Handler) Descriptor() ([]byte, []int) { - return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{3, 3} + return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{2, 3} } func (x *Receipt_L1Handler) GetCommon() *Receipt_Common { @@ -779,7 +571,7 @@ type Receipt_Declare struct { func (x *Receipt_Declare) Reset() { *x = Receipt_Declare{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_receipt_proto_msgTypes[11] + mi := &file_p2p_proto_receipt_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -792,7 +584,7 @@ func (x *Receipt_Declare) String() string { func (*Receipt_Declare) ProtoMessage() {} func (x *Receipt_Declare) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_receipt_proto_msgTypes[11] + mi := &file_p2p_proto_receipt_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -805,7 +597,7 @@ func (x *Receipt_Declare) ProtoReflect() protoreflect.Message { // Deprecated: Use Receipt_Declare.ProtoReflect.Descriptor instead. func (*Receipt_Declare) Descriptor() ([]byte, []int) { - return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{3, 4} + return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{2, 4} } func (x *Receipt_Declare) GetCommon() *Receipt_Common { @@ -827,7 +619,7 @@ type Receipt_Deploy struct { func (x *Receipt_Deploy) Reset() { *x = Receipt_Deploy{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_receipt_proto_msgTypes[12] + mi := &file_p2p_proto_receipt_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -840,7 +632,7 @@ func (x *Receipt_Deploy) String() string { func (*Receipt_Deploy) ProtoMessage() {} func (x *Receipt_Deploy) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_receipt_proto_msgTypes[12] + mi := &file_p2p_proto_receipt_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -853,7 +645,7 @@ func (x *Receipt_Deploy) ProtoReflect() protoreflect.Message { // Deprecated: Use Receipt_Deploy.ProtoReflect.Descriptor instead. func (*Receipt_Deploy) Descriptor() ([]byte, []int) { - return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{3, 5} + return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{2, 5} } func (x *Receipt_Deploy) GetCommon() *Receipt_Common { @@ -882,7 +674,7 @@ type Receipt_DeployAccount struct { func (x *Receipt_DeployAccount) Reset() { *x = Receipt_DeployAccount{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_receipt_proto_msgTypes[13] + mi := &file_p2p_proto_receipt_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -895,7 +687,7 @@ func (x *Receipt_DeployAccount) String() string { func (*Receipt_DeployAccount) ProtoMessage() {} func (x *Receipt_DeployAccount) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_receipt_proto_msgTypes[13] + mi := &file_p2p_proto_receipt_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -908,7 +700,7 @@ func (x *Receipt_DeployAccount) ProtoReflect() protoreflect.Message { // Deprecated: Use Receipt_DeployAccount.ProtoReflect.Descriptor instead. func (*Receipt_DeployAccount) Descriptor() ([]byte, []int) { - return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{3, 6} + return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{2, 6} } func (x *Receipt_DeployAccount) GetCommon() *Receipt_Common { @@ -943,7 +735,7 @@ type Receipt_ExecutionResources_BuiltinCounter struct { func (x *Receipt_ExecutionResources_BuiltinCounter) Reset() { *x = Receipt_ExecutionResources_BuiltinCounter{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_receipt_proto_msgTypes[14] + mi := &file_p2p_proto_receipt_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -956,7 +748,7 @@ func (x *Receipt_ExecutionResources_BuiltinCounter) String() string { func (*Receipt_ExecutionResources_BuiltinCounter) ProtoMessage() {} func (x *Receipt_ExecutionResources_BuiltinCounter) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_receipt_proto_msgTypes[14] + mi := &file_p2p_proto_receipt_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -969,7 +761,7 @@ func (x *Receipt_ExecutionResources_BuiltinCounter) ProtoReflect() protoreflect. // Deprecated: Use Receipt_ExecutionResources_BuiltinCounter.ProtoReflect.Descriptor instead. func (*Receipt_ExecutionResources_BuiltinCounter) Descriptor() ([]byte, []int) { - return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{3, 0, 0} + return file_p2p_proto_receipt_proto_rawDescGZIP(), []int{2, 0, 0} } func (x *Receipt_ExecutionResources_BuiltinCounter) GetBitwise() uint32 { @@ -1036,136 +828,112 @@ var file_p2p_proto_receipt_proto_rawDesc = []byte{ 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8f, 0x01, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x4c, 0x31, 0x12, 0x2b, 0x0a, 0x0c, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x22, - 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2f, 0x0a, 0x0a, 0x74, 0x6f, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x09, 0x74, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x2d, 0x0a, 0x0f, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x22, 0xeb, 0x01, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x6f, - 0x4c, 0x32, 0x12, 0x33, 0x0a, 0x0c, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x75, 0x6d, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, 0x66, 0x72, 0x6f, 0x6d, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, - 0x35, 0x32, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x27, 0x0a, 0x0a, 0x74, - 0x6f, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x09, 0x74, 0x6f, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x3a, 0x0a, 0x14, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x12, 0x65, 0x6e, - 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x12, 0x1e, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, - 0x22, 0x8e, 0x0b, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x29, 0x0a, 0x06, - 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x48, 0x00, 0x52, - 0x06, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x6c, 0x31, 0x5f, 0x68, 0x61, - 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, 0x4c, 0x31, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x48, - 0x00, 0x52, 0x09, 0x6c, 0x31, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x07, - 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x48, - 0x00, 0x52, 0x07, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x12, 0x3e, 0x0a, 0x11, 0x64, 0x65, - 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x48, 0x00, 0x52, 0x10, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, - 0x61, 0x74, 0x65, 0x64, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x3f, 0x0a, 0x0e, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0xf6, 0x02, 0x0a, 0x12, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x12, 0x46, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, 0x45, + 0x74, 0x73, 0x22, 0x96, 0x0b, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x29, + 0x0a, 0x06, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, + 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x48, + 0x00, 0x52, 0x06, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x6c, 0x31, 0x5f, + 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, 0x4c, 0x31, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, + 0x72, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x31, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x12, 0x2c, + 0x0a, 0x07, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, + 0x65, 0x48, 0x00, 0x52, 0x07, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x12, 0x3e, 0x0a, 0x11, + 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, + 0x74, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x48, 0x00, 0x52, 0x10, 0x64, 0x65, 0x70, 0x72, + 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x3f, 0x0a, 0x0e, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0xc1, 0x03, + 0x0a, 0x12, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, + 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x52, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x65, + 0x70, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x68, 0x6f, 0x6c, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x48, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x06, 0x6c, 0x31, 0x5f, 0x67, 0x61, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, + 0x05, 0x6c, 0x31, 0x47, 0x61, 0x73, 0x12, 0x28, 0x0a, 0x0b, 0x6c, 0x31, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x5f, 0x67, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, + 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x09, 0x6c, 0x31, 0x44, 0x61, 0x74, 0x61, 0x47, 0x61, 0x73, + 0x1a, 0xde, 0x01, 0x0a, 0x0e, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x69, 0x74, 0x77, 0x69, 0x73, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x69, 0x74, 0x77, 0x69, 0x73, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x65, 0x63, 0x64, 0x73, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x65, 0x63, + 0x64, 0x73, 0x61, 0x12, 0x13, 0x0a, 0x05, 0x65, 0x63, 0x5f, 0x6f, 0x70, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x04, 0x65, 0x63, 0x4f, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x65, 0x64, 0x65, + 0x72, 0x73, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x65, 0x64, 0x65, + 0x72, 0x73, 0x65, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x61, 0x6e, 0x67, 0x65, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x65, 0x69, 0x64, 0x6f, + 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x65, 0x69, 0x64, 0x6f, + 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6b, 0x65, 0x63, 0x63, 0x61, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x06, 0x6b, 0x65, 0x63, 0x63, 0x61, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x1a, 0x99, 0x02, 0x0a, 0x06, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0a, + 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x66, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x09, 0x61, 0x63, 0x74, 0x75, + 0x61, 0x6c, 0x46, 0x65, 0x65, 0x12, 0x29, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x75, + 0x6e, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x55, 0x6e, 0x69, 0x74, 0x52, 0x09, 0x70, 0x72, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x69, 0x74, + 0x12, 0x31, 0x0a, 0x0d, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x6e, + 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x54, 0x6f, 0x4c, 0x31, 0x52, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x53, + 0x65, 0x6e, 0x74, 0x12, 0x4c, 0x0a, 0x13, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x12, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, - 0x52, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, - 0x65, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x65, 0x70, 0x73, - 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x68, 0x6f, 0x6c, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x48, 0x6f, - 0x6c, 0x65, 0x73, 0x1a, 0xde, 0x01, 0x0a, 0x0e, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x69, 0x74, 0x77, 0x69, 0x73, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x69, 0x74, 0x77, 0x69, 0x73, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x65, 0x63, 0x64, 0x73, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x65, 0x63, 0x64, 0x73, 0x61, 0x12, 0x13, 0x0a, 0x05, 0x65, 0x63, 0x5f, 0x6f, 0x70, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x65, 0x63, 0x4f, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x65, 0x64, 0x65, 0x72, 0x73, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, - 0x65, 0x64, 0x65, 0x72, 0x73, 0x65, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x61, 0x6e, 0x67, 0x65, - 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x65, - 0x69, 0x64, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x65, - 0x69, 0x64, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6b, 0x65, 0x63, 0x63, 0x61, 0x6b, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6b, 0x65, 0x63, 0x63, 0x61, 0x6b, 0x12, 0x16, 0x0a, 0x06, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x1a, 0xdc, 0x02, 0x0a, 0x06, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, - 0x30, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, - 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, - 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x61, 0x73, - 0x68, 0x12, 0x27, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x66, 0x65, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, - 0x09, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x46, 0x65, 0x65, 0x12, 0x31, 0x0a, 0x0d, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x4c, 0x31, 0x52, - 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x4c, 0x0a, - 0x13, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x70, 0x74, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x12, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, - 0x65, 0x76, 0x65, 0x72, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x12, 0x3c, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x4c, 0x32, 0x48, 0x00, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6d, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x42, 0x13, - 0x0a, 0x11, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x1a, 0x31, 0x0a, 0x06, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0x27, 0x0a, + 0x73, 0x12, 0x28, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x65, + 0x72, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x5f, + 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x1a, 0x31, 0x0a, + 0x06, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0x27, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, + 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x1a, 0x56, 0x0a, 0x09, 0x4c, 0x31, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x06, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x1a, 0x56, 0x0a, 0x09, 0x4c, 0x31, 0x48, 0x61, 0x6e, 0x64, - 0x6c, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x5f, 0x68, 0x61, + 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, + 0x07, 0x6d, 0x73, 0x67, 0x48, 0x61, 0x73, 0x68, 0x1a, 0x32, 0x0a, 0x07, 0x44, 0x65, 0x63, 0x6c, + 0x61, 0x72, 0x65, 0x12, 0x27, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x08, - 0x6d, 0x73, 0x67, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, - 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x48, 0x61, 0x73, 0x68, 0x1a, 0x32, - 0x0a, 0x07, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x12, 0x27, 0x0a, 0x06, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x63, 0x65, - 0x69, 0x70, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x1a, 0x66, 0x0a, 0x06, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x27, 0x0a, 0x06, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x06, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x6d, 0x0a, 0x0d, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x06, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x06, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, - 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, - 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, - 0x63, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x22, 0x3b, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2a, - 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x12, 0x1e, 0x0a, 0x05, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x65, 0x63, 0x65, - 0x69, 0x70, 0x74, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x88, 0x01, 0x0a, 0x10, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x49, 0x44, 0x48, 0x01, 0x52, 0x02, 0x69, 0x64, 0x88, 0x01, 0x01, 0x12, 0x27, - 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x09, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x48, 0x00, 0x52, 0x08, 0x72, - 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x03, 0x66, 0x69, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x04, 0x2e, 0x46, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x66, 0x69, - 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x42, 0x05, - 0x0a, 0x03, 0x5f, 0x69, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x1a, 0x66, 0x0a, 0x06, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x27, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, + 0x33, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, + 0x32, 0x35, 0x32, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x1a, 0x6d, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x33, + 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, + 0x35, 0x32, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x1d, 0x0a, 0x09, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x07, 0x0a, 0x03, 0x57, 0x65, 0x69, 0x10, + 0x00, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x72, 0x69, 0x10, 0x01, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x64, 0x45, 0x74, 0x68, 0x2f, 0x6a, 0x75, 0x6e, 0x6f, 0x2f, 0x70, 0x32, 0x70, 0x2f, + 0x73, 0x74, 0x61, 0x72, 0x6b, 0x6e, 0x65, 0x74, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1181,69 +949,54 @@ func file_p2p_proto_receipt_proto_rawDescGZIP() []byte { } var ( - file_p2p_proto_receipt_proto_msgTypes = make([]protoimpl.MessageInfo, 15) - file_p2p_proto_receipt_proto_goTypes = []interface{}{ - (*MessageToL1)(nil), // 0: MessageToL1 - (*EthereumAddress)(nil), // 1: EthereumAddress - (*MessageToL2)(nil), // 2: MessageToL2 + file_p2p_proto_receipt_proto_enumTypes = make([]protoimpl.EnumInfo, 1) + file_p2p_proto_receipt_proto_msgTypes = make([]protoimpl.MessageInfo, 11) + file_p2p_proto_receipt_proto_goTypes = []interface{}{ + (PriceUnit)(0), // 0: PriceUnit + (*MessageToL1)(nil), // 1: MessageToL1 + (*EthereumAddress)(nil), // 2: EthereumAddress (*Receipt)(nil), // 3: Receipt - (*ReceiptsRequest)(nil), // 4: ReceiptsRequest - (*Receipts)(nil), // 5: Receipts - (*ReceiptsResponse)(nil), // 6: ReceiptsResponse - (*Receipt_ExecutionResources)(nil), // 7: Receipt.ExecutionResources - (*Receipt_Common)(nil), // 8: Receipt.Common - (*Receipt_Invoke)(nil), // 9: Receipt.Invoke - (*Receipt_L1Handler)(nil), // 10: Receipt.L1Handler - (*Receipt_Declare)(nil), // 11: Receipt.Declare - (*Receipt_Deploy)(nil), // 12: Receipt.Deploy - (*Receipt_DeployAccount)(nil), // 13: Receipt.DeployAccount - (*Receipt_ExecutionResources_BuiltinCounter)(nil), // 14: Receipt.ExecutionResources.BuiltinCounter - (*Felt252)(nil), // 15: Felt252 - (*Iteration)(nil), // 16: Iteration - (*BlockID)(nil), // 17: BlockID - (*Fin)(nil), // 18: Fin - (*Hash)(nil), // 19: Hash + (*Receipt_ExecutionResources)(nil), // 4: Receipt.ExecutionResources + (*Receipt_Common)(nil), // 5: Receipt.Common + (*Receipt_Invoke)(nil), // 6: Receipt.Invoke + (*Receipt_L1Handler)(nil), // 7: Receipt.L1Handler + (*Receipt_Declare)(nil), // 8: Receipt.Declare + (*Receipt_Deploy)(nil), // 9: Receipt.Deploy + (*Receipt_DeployAccount)(nil), // 10: Receipt.DeployAccount + (*Receipt_ExecutionResources_BuiltinCounter)(nil), // 11: Receipt.ExecutionResources.BuiltinCounter + (*Felt252)(nil), // 12: Felt252 + (*Hash)(nil), // 13: Hash } ) - var file_p2p_proto_receipt_proto_depIdxs = []int32{ - 15, // 0: MessageToL1.from_address:type_name -> Felt252 - 15, // 1: MessageToL1.payload:type_name -> Felt252 - 1, // 2: MessageToL1.to_address:type_name -> EthereumAddress - 1, // 3: MessageToL2.from_address:type_name -> EthereumAddress - 15, // 4: MessageToL2.payload:type_name -> Felt252 - 15, // 5: MessageToL2.to_address:type_name -> Felt252 - 15, // 6: MessageToL2.entry_point_selector:type_name -> Felt252 - 15, // 7: MessageToL2.nonce:type_name -> Felt252 - 9, // 8: Receipt.invoke:type_name -> Receipt.Invoke - 10, // 9: Receipt.l1_handler:type_name -> Receipt.L1Handler - 11, // 10: Receipt.declare:type_name -> Receipt.Declare - 12, // 11: Receipt.deprecated_deploy:type_name -> Receipt.Deploy - 13, // 12: Receipt.deploy_account:type_name -> Receipt.DeployAccount - 16, // 13: ReceiptsRequest.iteration:type_name -> Iteration - 3, // 14: Receipts.items:type_name -> Receipt - 17, // 15: ReceiptsResponse.id:type_name -> BlockID - 5, // 16: ReceiptsResponse.receipts:type_name -> Receipts - 18, // 17: ReceiptsResponse.fin:type_name -> Fin - 14, // 18: Receipt.ExecutionResources.builtins:type_name -> Receipt.ExecutionResources.BuiltinCounter - 19, // 19: Receipt.Common.transaction_hash:type_name -> Hash - 15, // 20: Receipt.Common.actual_fee:type_name -> Felt252 - 0, // 21: Receipt.Common.messages_sent:type_name -> MessageToL1 - 7, // 22: Receipt.Common.execution_resources:type_name -> Receipt.ExecutionResources - 2, // 23: Receipt.Common.consumed_message:type_name -> MessageToL2 - 8, // 24: Receipt.Invoke.common:type_name -> Receipt.Common - 8, // 25: Receipt.L1Handler.common:type_name -> Receipt.Common - 19, // 26: Receipt.L1Handler.msg_hash:type_name -> Hash - 8, // 27: Receipt.Declare.common:type_name -> Receipt.Common - 8, // 28: Receipt.Deploy.common:type_name -> Receipt.Common - 15, // 29: Receipt.Deploy.contract_address:type_name -> Felt252 - 8, // 30: Receipt.DeployAccount.common:type_name -> Receipt.Common - 15, // 31: Receipt.DeployAccount.contract_address:type_name -> Felt252 - 32, // [32:32] is the sub-list for method output_type - 32, // [32:32] is the sub-list for method input_type - 32, // [32:32] is the sub-list for extension type_name - 32, // [32:32] is the sub-list for extension extendee - 0, // [0:32] is the sub-list for field type_name + 12, // 0: MessageToL1.from_address:type_name -> Felt252 + 12, // 1: MessageToL1.payload:type_name -> Felt252 + 2, // 2: MessageToL1.to_address:type_name -> EthereumAddress + 6, // 3: Receipt.invoke:type_name -> Receipt.Invoke + 7, // 4: Receipt.l1_handler:type_name -> Receipt.L1Handler + 8, // 5: Receipt.declare:type_name -> Receipt.Declare + 9, // 6: Receipt.deprecated_deploy:type_name -> Receipt.Deploy + 10, // 7: Receipt.deploy_account:type_name -> Receipt.DeployAccount + 11, // 8: Receipt.ExecutionResources.builtins:type_name -> Receipt.ExecutionResources.BuiltinCounter + 12, // 9: Receipt.ExecutionResources.l1_gas:type_name -> Felt252 + 12, // 10: Receipt.ExecutionResources.l1_data_gas:type_name -> Felt252 + 12, // 11: Receipt.Common.actual_fee:type_name -> Felt252 + 0, // 12: Receipt.Common.price_unit:type_name -> PriceUnit + 1, // 13: Receipt.Common.messages_sent:type_name -> MessageToL1 + 4, // 14: Receipt.Common.execution_resources:type_name -> Receipt.ExecutionResources + 5, // 15: Receipt.Invoke.common:type_name -> Receipt.Common + 5, // 16: Receipt.L1Handler.common:type_name -> Receipt.Common + 13, // 17: Receipt.L1Handler.msg_hash:type_name -> Hash + 5, // 18: Receipt.Declare.common:type_name -> Receipt.Common + 5, // 19: Receipt.Deploy.common:type_name -> Receipt.Common + 12, // 20: Receipt.Deploy.contract_address:type_name -> Felt252 + 5, // 21: Receipt.DeployAccount.common:type_name -> Receipt.Common + 12, // 22: Receipt.DeployAccount.contract_address:type_name -> Felt252 + 23, // [23:23] is the sub-list for method output_type + 23, // [23:23] is the sub-list for method input_type + 23, // [23:23] is the sub-list for extension type_name + 23, // [23:23] is the sub-list for extension extendee + 0, // [0:23] is the sub-list for field type_name } func init() { file_p2p_proto_receipt_proto_init() } @@ -1278,18 +1031,6 @@ func file_p2p_proto_receipt_proto_init() { } } file_p2p_proto_receipt_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MessageToL2); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_receipt_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Receipt); i { case 0: return &v.state @@ -1301,43 +1042,7 @@ func file_p2p_proto_receipt_proto_init() { return nil } } - file_p2p_proto_receipt_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReceiptsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_receipt_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Receipts); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_receipt_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReceiptsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_receipt_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_p2p_proto_receipt_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Receipt_ExecutionResources); i { case 0: return &v.state @@ -1349,7 +1054,7 @@ func file_p2p_proto_receipt_proto_init() { return nil } } - file_p2p_proto_receipt_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_p2p_proto_receipt_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Receipt_Common); i { case 0: return &v.state @@ -1361,7 +1066,7 @@ func file_p2p_proto_receipt_proto_init() { return nil } } - file_p2p_proto_receipt_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_p2p_proto_receipt_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Receipt_Invoke); i { case 0: return &v.state @@ -1373,7 +1078,7 @@ func file_p2p_proto_receipt_proto_init() { return nil } } - file_p2p_proto_receipt_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_p2p_proto_receipt_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Receipt_L1Handler); i { case 0: return &v.state @@ -1385,7 +1090,7 @@ func file_p2p_proto_receipt_proto_init() { return nil } } - file_p2p_proto_receipt_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_p2p_proto_receipt_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Receipt_Declare); i { case 0: return &v.state @@ -1397,7 +1102,7 @@ func file_p2p_proto_receipt_proto_init() { return nil } } - file_p2p_proto_receipt_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_p2p_proto_receipt_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Receipt_Deploy); i { case 0: return &v.state @@ -1409,7 +1114,7 @@ func file_p2p_proto_receipt_proto_init() { return nil } } - file_p2p_proto_receipt_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_p2p_proto_receipt_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Receipt_DeployAccount); i { case 0: return &v.state @@ -1421,7 +1126,7 @@ func file_p2p_proto_receipt_proto_init() { return nil } } - file_p2p_proto_receipt_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_p2p_proto_receipt_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Receipt_ExecutionResources_BuiltinCounter); i { case 0: return &v.state @@ -1434,30 +1139,27 @@ func file_p2p_proto_receipt_proto_init() { } } } - file_p2p_proto_receipt_proto_msgTypes[3].OneofWrappers = []interface{}{ + file_p2p_proto_receipt_proto_msgTypes[2].OneofWrappers = []interface{}{ (*Receipt_Invoke_)(nil), (*Receipt_L1Handler_)(nil), (*Receipt_Declare_)(nil), (*Receipt_DeprecatedDeploy)(nil), (*Receipt_DeployAccount_)(nil), } - file_p2p_proto_receipt_proto_msgTypes[6].OneofWrappers = []interface{}{ - (*ReceiptsResponse_Receipts)(nil), - (*ReceiptsResponse_Fin)(nil), - } - file_p2p_proto_receipt_proto_msgTypes[8].OneofWrappers = []interface{}{} + file_p2p_proto_receipt_proto_msgTypes[4].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_p2p_proto_receipt_proto_rawDesc, - NumEnums: 0, - NumMessages: 15, + NumEnums: 1, + NumMessages: 11, NumExtensions: 0, NumServices: 0, }, GoTypes: file_p2p_proto_receipt_proto_goTypes, DependencyIndexes: file_p2p_proto_receipt_proto_depIdxs, + EnumInfos: file_p2p_proto_receipt_proto_enumTypes, MessageInfos: file_p2p_proto_receipt_proto_msgTypes, }.Build() File_p2p_proto_receipt_proto = out.File diff --git a/p2p/starknet/spec/snapshot.pb.go b/p2p/starknet/spec/snapshot.pb.go deleted file mode 100644 index c33f7ce135..0000000000 --- a/p2p/starknet/spec/snapshot.pb.go +++ /dev/null @@ -1,1509 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.4 -// source: p2p/proto/snapshot.proto - -package spec - -import ( - reflect "reflect" - sync "sync" - - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type PatriciaNode struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Node: - // - // *PatriciaNode_Edge_ - // *PatriciaNode_Binary_ - Node isPatriciaNode_Node `protobuf_oneof:"node"` -} - -func (x *PatriciaNode) Reset() { - *x = PatriciaNode{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_snapshot_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PatriciaNode) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PatriciaNode) ProtoMessage() {} - -func (x *PatriciaNode) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_snapshot_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PatriciaNode.ProtoReflect.Descriptor instead. -func (*PatriciaNode) Descriptor() ([]byte, []int) { - return file_p2p_proto_snapshot_proto_rawDescGZIP(), []int{0} -} - -func (m *PatriciaNode) GetNode() isPatriciaNode_Node { - if m != nil { - return m.Node - } - return nil -} - -func (x *PatriciaNode) GetEdge() *PatriciaNode_Edge { - if x, ok := x.GetNode().(*PatriciaNode_Edge_); ok { - return x.Edge - } - return nil -} - -func (x *PatriciaNode) GetBinary() *PatriciaNode_Binary { - if x, ok := x.GetNode().(*PatriciaNode_Binary_); ok { - return x.Binary - } - return nil -} - -type isPatriciaNode_Node interface { - isPatriciaNode_Node() -} - -type PatriciaNode_Edge_ struct { - Edge *PatriciaNode_Edge `protobuf:"bytes,1,opt,name=edge,proto3,oneof"` -} - -type PatriciaNode_Binary_ struct { - Binary *PatriciaNode_Binary `protobuf:"bytes,2,opt,name=binary,proto3,oneof"` -} - -func (*PatriciaNode_Edge_) isPatriciaNode_Node() {} - -func (*PatriciaNode_Binary_) isPatriciaNode_Node() {} - -// non leaf nodes required to build the trie given the range (leaves) -type PatriciaRangeProof struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Nodes []*PatriciaNode `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` -} - -func (x *PatriciaRangeProof) Reset() { - *x = PatriciaRangeProof{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_snapshot_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PatriciaRangeProof) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PatriciaRangeProof) ProtoMessage() {} - -func (x *PatriciaRangeProof) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_snapshot_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PatriciaRangeProof.ProtoReflect.Descriptor instead. -func (*PatriciaRangeProof) Descriptor() ([]byte, []int) { - return file_p2p_proto_snapshot_proto_rawDescGZIP(), []int{1} -} - -func (x *PatriciaRangeProof) GetNodes() []*PatriciaNode { - if x != nil { - return x.Nodes - } - return nil -} - -// leafs of the contract state tree -type ContractState struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address *Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` // the key - Class *Hash `protobuf:"bytes,2,opt,name=class,proto3" json:"class,omitempty"` - Storage *Hash `protobuf:"bytes,3,opt,name=storage,proto3" json:"storage,omitempty"` // patricia - Nonce uint64 `protobuf:"varint,4,opt,name=nonce,proto3" json:"nonce,omitempty"` -} - -func (x *ContractState) Reset() { - *x = ContractState{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_snapshot_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ContractState) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ContractState) ProtoMessage() {} - -func (x *ContractState) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_snapshot_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ContractState.ProtoReflect.Descriptor instead. -func (*ContractState) Descriptor() ([]byte, []int) { - return file_p2p_proto_snapshot_proto_rawDescGZIP(), []int{2} -} - -func (x *ContractState) GetAddress() *Address { - if x != nil { - return x.Address - } - return nil -} - -func (x *ContractState) GetClass() *Hash { - if x != nil { - return x.Class - } - return nil -} - -func (x *ContractState) GetStorage() *Hash { - if x != nil { - return x.Storage - } - return nil -} - -func (x *ContractState) GetNonce() uint64 { - if x != nil { - return x.Nonce - } - return 0 -} - -// request a range from the contract state tree that matches the given root (block) -// starts at 'start' and ends no more than 'end'. -// the result is (ContractRange+, PatriciaRangeProof)* -type ContractRangeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Domain uint32 `protobuf:"varint,1,opt,name=domain,proto3" json:"domain,omitempty"` // volition - StateRoot *Hash `protobuf:"bytes,2,opt,name=state_root,json=stateRoot,proto3" json:"state_root,omitempty"` - Start *Address `protobuf:"bytes,3,opt,name=start,proto3" json:"start,omitempty"` - End *Address `protobuf:"bytes,4,opt,name=end,proto3" json:"end,omitempty"` - ChunksPerProof uint32 `protobuf:"varint,5,opt,name=chunks_per_proof,json=chunksPerProof,proto3" json:"chunks_per_proof,omitempty"` // how many ContractRange items to send before sending a proof -} - -func (x *ContractRangeRequest) Reset() { - *x = ContractRangeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_snapshot_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ContractRangeRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ContractRangeRequest) ProtoMessage() {} - -func (x *ContractRangeRequest) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_snapshot_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ContractRangeRequest.ProtoReflect.Descriptor instead. -func (*ContractRangeRequest) Descriptor() ([]byte, []int) { - return file_p2p_proto_snapshot_proto_rawDescGZIP(), []int{3} -} - -func (x *ContractRangeRequest) GetDomain() uint32 { - if x != nil { - return x.Domain - } - return 0 -} - -func (x *ContractRangeRequest) GetStateRoot() *Hash { - if x != nil { - return x.StateRoot - } - return nil -} - -func (x *ContractRangeRequest) GetStart() *Address { - if x != nil { - return x.Start - } - return nil -} - -func (x *ContractRangeRequest) GetEnd() *Address { - if x != nil { - return x.End - } - return nil -} - -func (x *ContractRangeRequest) GetChunksPerProof() uint32 { - if x != nil { - return x.ChunksPerProof - } - return 0 -} - -// stream of leaves in the contracts tree -type ContractRange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - State []*ContractState `protobuf:"bytes,1,rep,name=state,proto3" json:"state,omitempty"` -} - -func (x *ContractRange) Reset() { - *x = ContractRange{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_snapshot_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ContractRange) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ContractRange) ProtoMessage() {} - -func (x *ContractRange) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_snapshot_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ContractRange.ProtoReflect.Descriptor instead. -func (*ContractRange) Descriptor() ([]byte, []int) { - return file_p2p_proto_snapshot_proto_rawDescGZIP(), []int{4} -} - -func (x *ContractRange) GetState() []*ContractState { - if x != nil { - return x.State - } - return nil -} - -type ContractRangeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Root *Hash `protobuf:"bytes,1,opt,name=root,proto3,oneof" json:"root,omitempty"` // may not appear if Fin is sent to end the whole response - ContractsRoot *Hash `protobuf:"bytes,2,opt,name=contracts_root,json=contractsRoot,proto3,oneof" json:"contracts_root,omitempty"` // may not appear if Fin is sent to end the whole response - ClassesRoot *Hash `protobuf:"bytes,3,opt,name=classes_root,json=classesRoot,proto3,oneof" json:"classes_root,omitempty"` // may not appear if Fin is sent to end the whole response - // Types that are assignable to Responses: - // - // *ContractRangeResponse_Range - // *ContractRangeResponse_Fin - Responses isContractRangeResponse_Responses `protobuf_oneof:"responses"` -} - -func (x *ContractRangeResponse) Reset() { - *x = ContractRangeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_snapshot_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ContractRangeResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ContractRangeResponse) ProtoMessage() {} - -func (x *ContractRangeResponse) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_snapshot_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ContractRangeResponse.ProtoReflect.Descriptor instead. -func (*ContractRangeResponse) Descriptor() ([]byte, []int) { - return file_p2p_proto_snapshot_proto_rawDescGZIP(), []int{5} -} - -func (x *ContractRangeResponse) GetRoot() *Hash { - if x != nil { - return x.Root - } - return nil -} - -func (x *ContractRangeResponse) GetContractsRoot() *Hash { - if x != nil { - return x.ContractsRoot - } - return nil -} - -func (x *ContractRangeResponse) GetClassesRoot() *Hash { - if x != nil { - return x.ClassesRoot - } - return nil -} - -func (m *ContractRangeResponse) GetResponses() isContractRangeResponse_Responses { - if m != nil { - return m.Responses - } - return nil -} - -func (x *ContractRangeResponse) GetRange() *ContractRange { - if x, ok := x.GetResponses().(*ContractRangeResponse_Range); ok { - return x.Range - } - return nil -} - -func (x *ContractRangeResponse) GetFin() *Fin { - if x, ok := x.GetResponses().(*ContractRangeResponse_Fin); ok { - return x.Fin - } - return nil -} - -type isContractRangeResponse_Responses interface { - isContractRangeResponse_Responses() -} - -type ContractRangeResponse_Range struct { - Range *ContractRange `protobuf:"bytes,4,opt,name=range,proto3,oneof"` -} - -type ContractRangeResponse_Fin struct { - Fin *Fin `protobuf:"bytes,5,opt,name=fin,proto3,oneof"` -} - -func (*ContractRangeResponse_Range) isContractRangeResponse_Responses() {} - -func (*ContractRangeResponse_Fin) isContractRangeResponse_Responses() {} - -// duplicate of GetContractRange. Can introduce a 'type' instead. -// result is (Classes+, PatriciaRangeProof)* -type ClassRangeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Root *Hash `protobuf:"bytes,1,opt,name=root,proto3" json:"root,omitempty"` - Start *Hash `protobuf:"bytes,2,opt,name=start,proto3" json:"start,omitempty"` - End *Hash `protobuf:"bytes,3,opt,name=end,proto3" json:"end,omitempty"` - ChunksPerProof uint32 `protobuf:"varint,4,opt,name=chunks_per_proof,json=chunksPerProof,proto3" json:"chunks_per_proof,omitempty"` -} - -func (x *ClassRangeRequest) Reset() { - *x = ClassRangeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_snapshot_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClassRangeRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClassRangeRequest) ProtoMessage() {} - -func (x *ClassRangeRequest) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_snapshot_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClassRangeRequest.ProtoReflect.Descriptor instead. -func (*ClassRangeRequest) Descriptor() ([]byte, []int) { - return file_p2p_proto_snapshot_proto_rawDescGZIP(), []int{6} -} - -func (x *ClassRangeRequest) GetRoot() *Hash { - if x != nil { - return x.Root - } - return nil -} - -func (x *ClassRangeRequest) GetStart() *Hash { - if x != nil { - return x.Start - } - return nil -} - -func (x *ClassRangeRequest) GetEnd() *Hash { - if x != nil { - return x.End - } - return nil -} - -func (x *ClassRangeRequest) GetChunksPerProof() uint32 { - if x != nil { - return x.ChunksPerProof - } - return 0 -} - -type ClassRangeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Root *Hash `protobuf:"bytes,1,opt,name=root,proto3,oneof" json:"root,omitempty"` // may not appear if Fin is sent to end the whole response - ContractsRoot *Hash `protobuf:"bytes,2,opt,name=contracts_root,json=contractsRoot,proto3,oneof" json:"contracts_root,omitempty"` // may not appear if Fin is sent to end the whole response - ClassesRoot *Hash `protobuf:"bytes,3,opt,name=classes_root,json=classesRoot,proto3,oneof" json:"classes_root,omitempty"` // may not appear if Fin is sent to end the whole response - // Types that are assignable to Responses: - // - // *ClassRangeResponse_Classes - // *ClassRangeResponse_Fin - Responses isClassRangeResponse_Responses `protobuf_oneof:"responses"` -} - -func (x *ClassRangeResponse) Reset() { - *x = ClassRangeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_snapshot_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClassRangeResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClassRangeResponse) ProtoMessage() {} - -func (x *ClassRangeResponse) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_snapshot_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClassRangeResponse.ProtoReflect.Descriptor instead. -func (*ClassRangeResponse) Descriptor() ([]byte, []int) { - return file_p2p_proto_snapshot_proto_rawDescGZIP(), []int{7} -} - -func (x *ClassRangeResponse) GetRoot() *Hash { - if x != nil { - return x.Root - } - return nil -} - -func (x *ClassRangeResponse) GetContractsRoot() *Hash { - if x != nil { - return x.ContractsRoot - } - return nil -} - -func (x *ClassRangeResponse) GetClassesRoot() *Hash { - if x != nil { - return x.ClassesRoot - } - return nil -} - -func (m *ClassRangeResponse) GetResponses() isClassRangeResponse_Responses { - if m != nil { - return m.Responses - } - return nil -} - -func (x *ClassRangeResponse) GetClasses() *Classes { - if x, ok := x.GetResponses().(*ClassRangeResponse_Classes); ok { - return x.Classes - } - return nil -} - -func (x *ClassRangeResponse) GetFin() *Fin { - if x, ok := x.GetResponses().(*ClassRangeResponse_Fin); ok { - return x.Fin - } - return nil -} - -type isClassRangeResponse_Responses interface { - isClassRangeResponse_Responses() -} - -type ClassRangeResponse_Classes struct { - Classes *Classes `protobuf:"bytes,4,opt,name=classes,proto3,oneof"` -} - -type ClassRangeResponse_Fin struct { - Fin *Fin `protobuf:"bytes,5,opt,name=fin,proto3,oneof"` -} - -func (*ClassRangeResponse_Classes) isClassRangeResponse_Responses() {} - -func (*ClassRangeResponse_Fin) isClassRangeResponse_Responses() {} - -// A position in some contract's state tree is identified by the state tree's root and the key in it -type StorageLeafQuery struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ContractStorageRoot *Hash `protobuf:"bytes,1,opt,name=contract_storage_root,json=contractStorageRoot,proto3" json:"contract_storage_root,omitempty"` - Key *Felt252 `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` -} - -func (x *StorageLeafQuery) Reset() { - *x = StorageLeafQuery{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_snapshot_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StorageLeafQuery) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StorageLeafQuery) ProtoMessage() {} - -func (x *StorageLeafQuery) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_snapshot_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StorageLeafQuery.ProtoReflect.Descriptor instead. -func (*StorageLeafQuery) Descriptor() ([]byte, []int) { - return file_p2p_proto_snapshot_proto_rawDescGZIP(), []int{8} -} - -func (x *StorageLeafQuery) GetContractStorageRoot() *Hash { - if x != nil { - return x.ContractStorageRoot - } - return nil -} - -func (x *StorageLeafQuery) GetKey() *Felt252 { - if x != nil { - return x.Key - } - return nil -} - -type StorageRangeQuery struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Start *StorageLeafQuery `protobuf:"bytes,1,opt,name=start,proto3" json:"start,omitempty"` - End *StorageLeafQuery `protobuf:"bytes,2,opt,name=end,proto3" json:"end,omitempty"` -} - -func (x *StorageRangeQuery) Reset() { - *x = StorageRangeQuery{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_snapshot_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StorageRangeQuery) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StorageRangeQuery) ProtoMessage() {} - -func (x *StorageRangeQuery) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_snapshot_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StorageRangeQuery.ProtoReflect.Descriptor instead. -func (*StorageRangeQuery) Descriptor() ([]byte, []int) { - return file_p2p_proto_snapshot_proto_rawDescGZIP(), []int{9} -} - -func (x *StorageRangeQuery) GetStart() *StorageLeafQuery { - if x != nil { - return x.Start - } - return nil -} - -func (x *StorageRangeQuery) GetEnd() *StorageLeafQuery { - if x != nil { - return x.End - } - return nil -} - -// result is (ContractStorageRange+, PatriciaRangeProof)* -type ContractStorageRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Domain uint32 `protobuf:"varint,1,opt,name=domain,proto3" json:"domain,omitempty"` // volition - StateRoot *Hash `protobuf:"bytes,2,opt,name=state_root,json=stateRoot,proto3" json:"state_root,omitempty"` - Query []*StorageRangeQuery `protobuf:"bytes,3,rep,name=query,proto3" json:"query,omitempty"` -} - -func (x *ContractStorageRequest) Reset() { - *x = ContractStorageRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_snapshot_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ContractStorageRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ContractStorageRequest) ProtoMessage() {} - -func (x *ContractStorageRequest) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_snapshot_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ContractStorageRequest.ProtoReflect.Descriptor instead. -func (*ContractStorageRequest) Descriptor() ([]byte, []int) { - return file_p2p_proto_snapshot_proto_rawDescGZIP(), []int{10} -} - -func (x *ContractStorageRequest) GetDomain() uint32 { - if x != nil { - return x.Domain - } - return 0 -} - -func (x *ContractStorageRequest) GetStateRoot() *Hash { - if x != nil { - return x.StateRoot - } - return nil -} - -func (x *ContractStorageRequest) GetQuery() []*StorageRangeQuery { - if x != nil { - return x.Query - } - return nil -} - -type ContractStorage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - KeyValue []*ContractStoredValue `protobuf:"bytes,2,rep,name=keyValue,proto3" json:"keyValue,omitempty"` -} - -func (x *ContractStorage) Reset() { - *x = ContractStorage{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_snapshot_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ContractStorage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ContractStorage) ProtoMessage() {} - -func (x *ContractStorage) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_snapshot_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ContractStorage.ProtoReflect.Descriptor instead. -func (*ContractStorage) Descriptor() ([]byte, []int) { - return file_p2p_proto_snapshot_proto_rawDescGZIP(), []int{11} -} - -func (x *ContractStorage) GetKeyValue() []*ContractStoredValue { - if x != nil { - return x.KeyValue - } - return nil -} - -type ContractStorageResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StateRoot *Hash `protobuf:"bytes,1,opt,name=state_root,json=stateRoot,proto3,oneof" json:"state_root,omitempty"` // may not appear if Fin is sent to end the whole response - // Types that are assignable to Responses: - // - // *ContractStorageResponse_Storage - // *ContractStorageResponse_Fin - Responses isContractStorageResponse_Responses `protobuf_oneof:"responses"` -} - -func (x *ContractStorageResponse) Reset() { - *x = ContractStorageResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_snapshot_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ContractStorageResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ContractStorageResponse) ProtoMessage() {} - -func (x *ContractStorageResponse) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_snapshot_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ContractStorageResponse.ProtoReflect.Descriptor instead. -func (*ContractStorageResponse) Descriptor() ([]byte, []int) { - return file_p2p_proto_snapshot_proto_rawDescGZIP(), []int{12} -} - -func (x *ContractStorageResponse) GetStateRoot() *Hash { - if x != nil { - return x.StateRoot - } - return nil -} - -func (m *ContractStorageResponse) GetResponses() isContractStorageResponse_Responses { - if m != nil { - return m.Responses - } - return nil -} - -func (x *ContractStorageResponse) GetStorage() *ContractStorage { - if x, ok := x.GetResponses().(*ContractStorageResponse_Storage); ok { - return x.Storage - } - return nil -} - -func (x *ContractStorageResponse) GetFin() *Fin { - if x, ok := x.GetResponses().(*ContractStorageResponse_Fin); ok { - return x.Fin - } - return nil -} - -type isContractStorageResponse_Responses interface { - isContractStorageResponse_Responses() -} - -type ContractStorageResponse_Storage struct { - Storage *ContractStorage `protobuf:"bytes,2,opt,name=storage,proto3,oneof"` -} - -type ContractStorageResponse_Fin struct { - Fin *Fin `protobuf:"bytes,3,opt,name=fin,proto3,oneof"` -} - -func (*ContractStorageResponse_Storage) isContractStorageResponse_Responses() {} - -func (*ContractStorageResponse_Fin) isContractStorageResponse_Responses() {} - -type PatriciaNode_Edge struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Length uint32 `protobuf:"varint,1,opt,name=length,proto3" json:"length,omitempty"` - Path *Felt252 `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` // as bits of left/right - Value *Felt252 `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *PatriciaNode_Edge) Reset() { - *x = PatriciaNode_Edge{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_snapshot_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PatriciaNode_Edge) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PatriciaNode_Edge) ProtoMessage() {} - -func (x *PatriciaNode_Edge) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_snapshot_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PatriciaNode_Edge.ProtoReflect.Descriptor instead. -func (*PatriciaNode_Edge) Descriptor() ([]byte, []int) { - return file_p2p_proto_snapshot_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *PatriciaNode_Edge) GetLength() uint32 { - if x != nil { - return x.Length - } - return 0 -} - -func (x *PatriciaNode_Edge) GetPath() *Felt252 { - if x != nil { - return x.Path - } - return nil -} - -func (x *PatriciaNode_Edge) GetValue() *Felt252 { - if x != nil { - return x.Value - } - return nil -} - -type PatriciaNode_Binary struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Left *Felt252 `protobuf:"bytes,1,opt,name=left,proto3" json:"left,omitempty"` - Right *Felt252 `protobuf:"bytes,2,opt,name=right,proto3" json:"right,omitempty"` -} - -func (x *PatriciaNode_Binary) Reset() { - *x = PatriciaNode_Binary{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_snapshot_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PatriciaNode_Binary) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PatriciaNode_Binary) ProtoMessage() {} - -func (x *PatriciaNode_Binary) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_snapshot_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PatriciaNode_Binary.ProtoReflect.Descriptor instead. -func (*PatriciaNode_Binary) Descriptor() ([]byte, []int) { - return file_p2p_proto_snapshot_proto_rawDescGZIP(), []int{0, 1} -} - -func (x *PatriciaNode_Binary) GetLeft() *Felt252 { - if x != nil { - return x.Left - } - return nil -} - -func (x *PatriciaNode_Binary) GetRight() *Felt252 { - if x != nil { - return x.Right - } - return nil -} - -var File_p2p_proto_snapshot_proto protoreflect.FileDescriptor - -var file_p2p_proto_snapshot_proto_rawDesc = []byte{ - 0x0a, 0x18, 0x70, 0x32, 0x70, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x70, 0x32, 0x70, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x15, 0x70, 0x32, 0x70, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x96, 0x02, 0x0a, 0x0c, 0x50, 0x61, - 0x74, 0x72, 0x69, 0x63, 0x69, 0x61, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x65, 0x64, - 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x50, 0x61, 0x74, 0x72, 0x69, - 0x63, 0x69, 0x61, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x48, 0x00, 0x52, 0x04, - 0x65, 0x64, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x50, 0x61, 0x74, 0x72, 0x69, 0x63, 0x69, 0x61, 0x4e, - 0x6f, 0x64, 0x65, 0x2e, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x48, 0x00, 0x52, 0x06, 0x62, 0x69, - 0x6e, 0x61, 0x72, 0x79, 0x1a, 0x5c, 0x0a, 0x04, 0x45, 0x64, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x04, 0x70, 0x61, - 0x74, 0x68, 0x12, 0x1e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x1a, 0x46, 0x0a, 0x06, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x04, - 0x6c, 0x65, 0x66, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, - 0x74, 0x32, 0x35, 0x32, 0x52, 0x04, 0x6c, 0x65, 0x66, 0x74, 0x12, 0x1e, 0x0a, 0x05, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, - 0x32, 0x35, 0x32, 0x52, 0x05, 0x72, 0x69, 0x67, 0x68, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x6e, 0x6f, - 0x64, 0x65, 0x22, 0x39, 0x0a, 0x12, 0x50, 0x61, 0x74, 0x72, 0x69, 0x63, 0x69, 0x61, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x23, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x50, 0x61, 0x74, 0x72, 0x69, 0x63, - 0x69, 0x61, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x87, 0x01, - 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x22, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x12, 0x1f, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0xba, 0x01, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, - 0x61, 0x73, 0x68, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x1e, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, - 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x68, - 0x75, 0x6e, 0x6b, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x50, 0x65, 0x72, 0x50, - 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x35, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x95, 0x02, 0x0a, 0x15, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x48, 0x01, 0x52, 0x04, 0x72, 0x6f, - 0x6f, 0x74, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x73, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, - 0x48, 0x61, 0x73, 0x68, 0x48, 0x02, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, - 0x73, 0x52, 0x6f, 0x6f, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x0c, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x65, 0x73, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, - 0x2e, 0x48, 0x61, 0x73, 0x68, 0x48, 0x03, 0x52, 0x0b, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, - 0x52, 0x6f, 0x6f, 0x74, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x12, - 0x18, 0x0a, 0x03, 0x66, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x04, 0x2e, 0x46, - 0x69, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x66, 0x69, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x42, - 0x11, 0x0a, 0x0f, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x73, 0x5f, 0x72, 0x6f, - 0x6f, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x5f, 0x72, - 0x6f, 0x6f, 0x74, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x52, 0x61, 0x6e, - 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x04, 0x72, 0x6f, 0x6f, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x04, - 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x1b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x17, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, - 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x68, - 0x75, 0x6e, 0x6b, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x50, 0x65, 0x72, 0x50, - 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x90, 0x02, 0x0a, 0x12, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x04, 0x72, - 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, - 0x48, 0x01, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x0e, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x73, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x48, 0x02, 0x52, 0x0d, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x73, 0x52, 0x6f, 0x6f, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2d, - 0x0a, 0x0c, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x48, 0x03, 0x52, 0x0b, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x52, 0x6f, 0x6f, 0x74, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, - 0x07, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, - 0x2e, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x03, 0x66, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x04, 0x2e, 0x46, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x66, 0x69, 0x6e, 0x42, 0x0b, 0x0a, - 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x72, - 0x6f, 0x6f, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, - 0x73, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x65, 0x73, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x22, 0x69, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x4c, 0x65, 0x61, 0x66, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x39, 0x0a, 0x15, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, - 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, - 0x68, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x1a, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x22, 0x61, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x61, 0x6e, - 0x67, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x4c, 0x65, 0x61, 0x66, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x12, 0x23, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x65, 0x61, 0x66, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, - 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, - 0x61, 0x73, 0x68, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x28, - 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x43, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x6b, - 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa8, 0x01, - 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x0a, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, - 0x48, 0x61, 0x73, 0x68, 0x48, 0x01, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, - 0x74, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x12, 0x18, 0x0a, 0x03, 0x66, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x04, 0x2e, 0x46, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x66, 0x69, 0x6e, 0x42, 0x0b, 0x0a, 0x09, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_p2p_proto_snapshot_proto_rawDescOnce sync.Once - file_p2p_proto_snapshot_proto_rawDescData = file_p2p_proto_snapshot_proto_rawDesc -) - -func file_p2p_proto_snapshot_proto_rawDescGZIP() []byte { - file_p2p_proto_snapshot_proto_rawDescOnce.Do(func() { - file_p2p_proto_snapshot_proto_rawDescData = protoimpl.X.CompressGZIP(file_p2p_proto_snapshot_proto_rawDescData) - }) - return file_p2p_proto_snapshot_proto_rawDescData -} - -var ( - file_p2p_proto_snapshot_proto_msgTypes = make([]protoimpl.MessageInfo, 15) - file_p2p_proto_snapshot_proto_goTypes = []interface{}{ - (*PatriciaNode)(nil), // 0: PatriciaNode - (*PatriciaRangeProof)(nil), // 1: PatriciaRangeProof - (*ContractState)(nil), // 2: ContractState - (*ContractRangeRequest)(nil), // 3: ContractRangeRequest - (*ContractRange)(nil), // 4: ContractRange - (*ContractRangeResponse)(nil), // 5: ContractRangeResponse - (*ClassRangeRequest)(nil), // 6: ClassRangeRequest - (*ClassRangeResponse)(nil), // 7: ClassRangeResponse - (*StorageLeafQuery)(nil), // 8: StorageLeafQuery - (*StorageRangeQuery)(nil), // 9: StorageRangeQuery - (*ContractStorageRequest)(nil), // 10: ContractStorageRequest - (*ContractStorage)(nil), // 11: ContractStorage - (*ContractStorageResponse)(nil), // 12: ContractStorageResponse - (*PatriciaNode_Edge)(nil), // 13: PatriciaNode.Edge - (*PatriciaNode_Binary)(nil), // 14: PatriciaNode.Binary - (*Address)(nil), // 15: Address - (*Hash)(nil), // 16: Hash - (*Fin)(nil), // 17: Fin - (*Classes)(nil), // 18: Classes - (*Felt252)(nil), // 19: Felt252 - (*ContractStoredValue)(nil), // 20: ContractStoredValue - } -) - -var file_p2p_proto_snapshot_proto_depIdxs = []int32{ - 13, // 0: PatriciaNode.edge:type_name -> PatriciaNode.Edge - 14, // 1: PatriciaNode.binary:type_name -> PatriciaNode.Binary - 0, // 2: PatriciaRangeProof.nodes:type_name -> PatriciaNode - 15, // 3: ContractState.address:type_name -> Address - 16, // 4: ContractState.class:type_name -> Hash - 16, // 5: ContractState.storage:type_name -> Hash - 16, // 6: ContractRangeRequest.state_root:type_name -> Hash - 15, // 7: ContractRangeRequest.start:type_name -> Address - 15, // 8: ContractRangeRequest.end:type_name -> Address - 2, // 9: ContractRange.state:type_name -> ContractState - 16, // 10: ContractRangeResponse.root:type_name -> Hash - 16, // 11: ContractRangeResponse.contracts_root:type_name -> Hash - 16, // 12: ContractRangeResponse.classes_root:type_name -> Hash - 4, // 13: ContractRangeResponse.range:type_name -> ContractRange - 17, // 14: ContractRangeResponse.fin:type_name -> Fin - 16, // 15: ClassRangeRequest.root:type_name -> Hash - 16, // 16: ClassRangeRequest.start:type_name -> Hash - 16, // 17: ClassRangeRequest.end:type_name -> Hash - 16, // 18: ClassRangeResponse.root:type_name -> Hash - 16, // 19: ClassRangeResponse.contracts_root:type_name -> Hash - 16, // 20: ClassRangeResponse.classes_root:type_name -> Hash - 18, // 21: ClassRangeResponse.classes:type_name -> Classes - 17, // 22: ClassRangeResponse.fin:type_name -> Fin - 16, // 23: StorageLeafQuery.contract_storage_root:type_name -> Hash - 19, // 24: StorageLeafQuery.key:type_name -> Felt252 - 8, // 25: StorageRangeQuery.start:type_name -> StorageLeafQuery - 8, // 26: StorageRangeQuery.end:type_name -> StorageLeafQuery - 16, // 27: ContractStorageRequest.state_root:type_name -> Hash - 9, // 28: ContractStorageRequest.query:type_name -> StorageRangeQuery - 20, // 29: ContractStorage.keyValue:type_name -> ContractStoredValue - 16, // 30: ContractStorageResponse.state_root:type_name -> Hash - 11, // 31: ContractStorageResponse.storage:type_name -> ContractStorage - 17, // 32: ContractStorageResponse.fin:type_name -> Fin - 19, // 33: PatriciaNode.Edge.path:type_name -> Felt252 - 19, // 34: PatriciaNode.Edge.value:type_name -> Felt252 - 19, // 35: PatriciaNode.Binary.left:type_name -> Felt252 - 19, // 36: PatriciaNode.Binary.right:type_name -> Felt252 - 37, // [37:37] is the sub-list for method output_type - 37, // [37:37] is the sub-list for method input_type - 37, // [37:37] is the sub-list for extension type_name - 37, // [37:37] is the sub-list for extension extendee - 0, // [0:37] is the sub-list for field type_name -} - -func init() { file_p2p_proto_snapshot_proto_init() } -func file_p2p_proto_snapshot_proto_init() { - if File_p2p_proto_snapshot_proto != nil { - return - } - file_p2p_proto_common_proto_init() - file_p2p_proto_state_proto_init() - if !protoimpl.UnsafeEnabled { - file_p2p_proto_snapshot_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PatriciaNode); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_snapshot_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PatriciaRangeProof); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_snapshot_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContractState); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_snapshot_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContractRangeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_snapshot_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContractRange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_snapshot_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContractRangeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_snapshot_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClassRangeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_snapshot_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClassRangeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_snapshot_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageLeafQuery); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_snapshot_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageRangeQuery); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_snapshot_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContractStorageRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_snapshot_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContractStorage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_snapshot_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContractStorageResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_snapshot_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PatriciaNode_Edge); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_snapshot_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PatriciaNode_Binary); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_p2p_proto_snapshot_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*PatriciaNode_Edge_)(nil), - (*PatriciaNode_Binary_)(nil), - } - file_p2p_proto_snapshot_proto_msgTypes[5].OneofWrappers = []interface{}{ - (*ContractRangeResponse_Range)(nil), - (*ContractRangeResponse_Fin)(nil), - } - file_p2p_proto_snapshot_proto_msgTypes[7].OneofWrappers = []interface{}{ - (*ClassRangeResponse_Classes)(nil), - (*ClassRangeResponse_Fin)(nil), - } - file_p2p_proto_snapshot_proto_msgTypes[12].OneofWrappers = []interface{}{ - (*ContractStorageResponse_Storage)(nil), - (*ContractStorageResponse_Fin)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_p2p_proto_snapshot_proto_rawDesc, - NumEnums: 0, - NumMessages: 15, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_p2p_proto_snapshot_proto_goTypes, - DependencyIndexes: file_p2p_proto_snapshot_proto_depIdxs, - MessageInfos: file_p2p_proto_snapshot_proto_msgTypes, - }.Build() - File_p2p_proto_snapshot_proto = out.File - file_p2p_proto_snapshot_proto_rawDesc = nil - file_p2p_proto_snapshot_proto_goTypes = nil - file_p2p_proto_snapshot_proto_depIdxs = nil -} diff --git a/p2p/starknet/spec/state.pb.go b/p2p/starknet/spec/state.pb.go index c4540e1034..ec257fba0e 100644 --- a/p2p/starknet/spec/state.pb.go +++ b/p2p/starknet/spec/state.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.4 +// protoc-gen-go v1.26.0 +// protoc v4.25.1 // source: p2p/proto/state.proto package spec @@ -77,19 +77,20 @@ func (x *ContractStoredValue) GetValue() *Felt252 { return nil } -type StateDiff struct { +type ContractDiff struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Domain uint32 `protobuf:"varint,1,opt,name=domain,proto3" json:"domain,omitempty"` // volition state domain - ContractDiffs []*StateDiff_ContractDiff `protobuf:"bytes,2,rep,name=contract_diffs,json=contractDiffs,proto3" json:"contract_diffs,omitempty"` - ReplacedClasses []*StateDiff_ContractAddrToClassHash `protobuf:"bytes,3,rep,name=replaced_classes,json=replacedClasses,proto3" json:"replaced_classes,omitempty"` - DeployedContracts []*StateDiff_ContractAddrToClassHash `protobuf:"bytes,4,rep,name=deployed_contracts,json=deployedContracts,proto3" json:"deployed_contracts,omitempty"` + Address *Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Nonce *Felt252 `protobuf:"bytes,2,opt,name=nonce,proto3,oneof" json:"nonce,omitempty"` // Present only if the nonce was updated + ClassHash *Hash `protobuf:"bytes,3,opt,name=class_hash,json=classHash,proto3,oneof" json:"class_hash,omitempty"` // Present only if the contract was deployed or replaced in this block. + Values []*ContractStoredValue `protobuf:"bytes,4,rep,name=values,proto3" json:"values,omitempty"` + Domain VolitionDomain `protobuf:"varint,5,opt,name=domain,proto3,enum=VolitionDomain" json:"domain,omitempty"` } -func (x *StateDiff) Reset() { - *x = StateDiff{} +func (x *ContractDiff) Reset() { + *x = ContractDiff{} if protoimpl.UnsafeEnabled { mi := &file_p2p_proto_state_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -97,13 +98,13 @@ func (x *StateDiff) Reset() { } } -func (x *StateDiff) String() string { +func (x *ContractDiff) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StateDiff) ProtoMessage() {} +func (*ContractDiff) ProtoMessage() {} -func (x *StateDiff) ProtoReflect() protoreflect.Message { +func (x *ContractDiff) ProtoReflect() protoreflect.Message { mi := &file_p2p_proto_state_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -115,50 +116,57 @@ func (x *StateDiff) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StateDiff.ProtoReflect.Descriptor instead. -func (*StateDiff) Descriptor() ([]byte, []int) { +// Deprecated: Use ContractDiff.ProtoReflect.Descriptor instead. +func (*ContractDiff) Descriptor() ([]byte, []int) { return file_p2p_proto_state_proto_rawDescGZIP(), []int{1} } -func (x *StateDiff) GetDomain() uint32 { +func (x *ContractDiff) GetAddress() *Address { if x != nil { - return x.Domain + return x.Address } - return 0 + return nil } -func (x *StateDiff) GetContractDiffs() []*StateDiff_ContractDiff { +func (x *ContractDiff) GetNonce() *Felt252 { if x != nil { - return x.ContractDiffs + return x.Nonce } return nil } -func (x *StateDiff) GetReplacedClasses() []*StateDiff_ContractAddrToClassHash { +func (x *ContractDiff) GetClassHash() *Hash { if x != nil { - return x.ReplacedClasses + return x.ClassHash } return nil } -func (x *StateDiff) GetDeployedContracts() []*StateDiff_ContractAddrToClassHash { +func (x *ContractDiff) GetValues() []*ContractStoredValue { if x != nil { - return x.DeployedContracts + return x.Values } return nil } -type EntryPoint struct { +func (x *ContractDiff) GetDomain() VolitionDomain { + if x != nil { + return x.Domain + } + return VolitionDomain_L1 +} + +type DeclaredClass struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Selector *Felt252 `protobuf:"bytes,1,opt,name=selector,proto3" json:"selector,omitempty"` - Offset *Felt252 `protobuf:"bytes,2,opt,name=offset,proto3" json:"offset,omitempty"` + ClassHash *Hash `protobuf:"bytes,1,opt,name=class_hash,json=classHash,proto3" json:"class_hash,omitempty"` + CompiledClassHash *Hash `protobuf:"bytes,2,opt,name=compiled_class_hash,json=compiledClassHash,proto3,oneof" json:"compiled_class_hash,omitempty"` // Present only if the class is Cairo1 } -func (x *EntryPoint) Reset() { - *x = EntryPoint{} +func (x *DeclaredClass) Reset() { + *x = DeclaredClass{} if protoimpl.UnsafeEnabled { mi := &file_p2p_proto_state_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -166,13 +174,13 @@ func (x *EntryPoint) Reset() { } } -func (x *EntryPoint) String() string { +func (x *DeclaredClass) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EntryPoint) ProtoMessage() {} +func (*DeclaredClass) ProtoMessage() {} -func (x *EntryPoint) ProtoReflect() protoreflect.Message { +func (x *DeclaredClass) ProtoReflect() protoreflect.Message { mi := &file_p2p_proto_state_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -184,39 +192,35 @@ func (x *EntryPoint) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EntryPoint.ProtoReflect.Descriptor instead. -func (*EntryPoint) Descriptor() ([]byte, []int) { +// Deprecated: Use DeclaredClass.ProtoReflect.Descriptor instead. +func (*DeclaredClass) Descriptor() ([]byte, []int) { return file_p2p_proto_state_proto_rawDescGZIP(), []int{2} } -func (x *EntryPoint) GetSelector() *Felt252 { +func (x *DeclaredClass) GetClassHash() *Hash { if x != nil { - return x.Selector + return x.ClassHash } return nil } -func (x *EntryPoint) GetOffset() *Felt252 { +func (x *DeclaredClass) GetCompiledClassHash() *Hash { if x != nil { - return x.Offset + return x.CompiledClassHash } return nil } -type Cairo0Class struct { +type StateDiffsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Abi []byte `protobuf:"bytes,1,opt,name=abi,proto3" json:"abi,omitempty"` - Externals []*EntryPoint `protobuf:"bytes,2,rep,name=externals,proto3" json:"externals,omitempty"` - L1Handlers []*EntryPoint `protobuf:"bytes,3,rep,name=l1_handlers,json=l1Handlers,proto3" json:"l1_handlers,omitempty"` - Constructors []*EntryPoint `protobuf:"bytes,4,rep,name=constructors,proto3" json:"constructors,omitempty"` - Program []byte `protobuf:"bytes,5,opt,name=program,proto3" json:"program,omitempty"` + Iteration *Iteration `protobuf:"bytes,1,opt,name=iteration,proto3" json:"iteration,omitempty"` } -func (x *Cairo0Class) Reset() { - *x = Cairo0Class{} +func (x *StateDiffsRequest) Reset() { + *x = StateDiffsRequest{} if protoimpl.UnsafeEnabled { mi := &file_p2p_proto_state_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -224,13 +228,13 @@ func (x *Cairo0Class) Reset() { } } -func (x *Cairo0Class) String() string { +func (x *StateDiffsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Cairo0Class) ProtoMessage() {} +func (*StateDiffsRequest) ProtoMessage() {} -func (x *Cairo0Class) ProtoReflect() protoreflect.Message { +func (x *StateDiffsRequest) ProtoReflect() protoreflect.Message { mi := &file_p2p_proto_state_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -242,57 +246,36 @@ func (x *Cairo0Class) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Cairo0Class.ProtoReflect.Descriptor instead. -func (*Cairo0Class) Descriptor() ([]byte, []int) { +// Deprecated: Use StateDiffsRequest.ProtoReflect.Descriptor instead. +func (*StateDiffsRequest) Descriptor() ([]byte, []int) { return file_p2p_proto_state_proto_rawDescGZIP(), []int{3} } -func (x *Cairo0Class) GetAbi() []byte { +func (x *StateDiffsRequest) GetIteration() *Iteration { if x != nil { - return x.Abi + return x.Iteration } return nil } -func (x *Cairo0Class) GetExternals() []*EntryPoint { - if x != nil { - return x.Externals - } - return nil -} - -func (x *Cairo0Class) GetL1Handlers() []*EntryPoint { - if x != nil { - return x.L1Handlers - } - return nil -} - -func (x *Cairo0Class) GetConstructors() []*EntryPoint { - if x != nil { - return x.Constructors - } - return nil -} - -func (x *Cairo0Class) GetProgram() []byte { - if x != nil { - return x.Program - } - return nil -} - -type SierraEntryPoint struct { +// Responses are sent ordered by the order given in the request. +type StateDiffsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Index uint64 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"` - Selector *Felt252 `protobuf:"bytes,2,opt,name=selector,proto3" json:"selector,omitempty"` + // All of the messages related to a block need to be sent before a message from the next block is sent. + // + // Types that are assignable to StateDiffMessage: + // + // *StateDiffsResponse_ContractDiff + // *StateDiffsResponse_DeclaredClass + // *StateDiffsResponse_Fin + StateDiffMessage isStateDiffsResponse_StateDiffMessage `protobuf_oneof:"state_diff_message"` } -func (x *SierraEntryPoint) Reset() { - *x = SierraEntryPoint{} +func (x *StateDiffsResponse) Reset() { + *x = StateDiffsResponse{} if protoimpl.UnsafeEnabled { mi := &file_p2p_proto_state_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -300,13 +283,13 @@ func (x *SierraEntryPoint) Reset() { } } -func (x *SierraEntryPoint) String() string { +func (x *StateDiffsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SierraEntryPoint) ProtoMessage() {} +func (*StateDiffsResponse) ProtoMessage() {} -func (x *SierraEntryPoint) ProtoReflect() protoreflect.Message { +func (x *StateDiffsResponse) ProtoReflect() protoreflect.Message { mi := &file_p2p_proto_state_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -318,433 +301,60 @@ func (x *SierraEntryPoint) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SierraEntryPoint.ProtoReflect.Descriptor instead. -func (*SierraEntryPoint) Descriptor() ([]byte, []int) { +// Deprecated: Use StateDiffsResponse.ProtoReflect.Descriptor instead. +func (*StateDiffsResponse) Descriptor() ([]byte, []int) { return file_p2p_proto_state_proto_rawDescGZIP(), []int{4} } -func (x *SierraEntryPoint) GetIndex() uint64 { - if x != nil { - return x.Index - } - return 0 -} - -func (x *SierraEntryPoint) GetSelector() *Felt252 { - if x != nil { - return x.Selector - } - return nil -} - -type Cairo1EntryPoints struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Externals []*SierraEntryPoint `protobuf:"bytes,1,rep,name=externals,proto3" json:"externals,omitempty"` - L1Handlers []*SierraEntryPoint `protobuf:"bytes,2,rep,name=l1_handlers,json=l1Handlers,proto3" json:"l1_handlers,omitempty"` - Constructors []*SierraEntryPoint `protobuf:"bytes,3,rep,name=constructors,proto3" json:"constructors,omitempty"` -} - -func (x *Cairo1EntryPoints) Reset() { - *x = Cairo1EntryPoints{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_state_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Cairo1EntryPoints) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Cairo1EntryPoints) ProtoMessage() {} - -func (x *Cairo1EntryPoints) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_state_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Cairo1EntryPoints.ProtoReflect.Descriptor instead. -func (*Cairo1EntryPoints) Descriptor() ([]byte, []int) { - return file_p2p_proto_state_proto_rawDescGZIP(), []int{5} -} - -func (x *Cairo1EntryPoints) GetExternals() []*SierraEntryPoint { - if x != nil { - return x.Externals - } - return nil -} - -func (x *Cairo1EntryPoints) GetL1Handlers() []*SierraEntryPoint { - if x != nil { - return x.L1Handlers - } - return nil -} - -func (x *Cairo1EntryPoints) GetConstructors() []*SierraEntryPoint { - if x != nil { - return x.Constructors - } - return nil -} - -type Cairo1Class struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Abi []byte `protobuf:"bytes,1,opt,name=abi,proto3" json:"abi,omitempty"` - EntryPoints *Cairo1EntryPoints `protobuf:"bytes,2,opt,name=entry_points,json=entryPoints,proto3" json:"entry_points,omitempty"` - Program []*Felt252 `protobuf:"bytes,3,rep,name=program,proto3" json:"program,omitempty"` - ContractClassVersion string `protobuf:"bytes,4,opt,name=contract_class_version,json=contractClassVersion,proto3" json:"contract_class_version,omitempty"` - Compiled []byte `protobuf:"bytes,5,opt,name=compiled,proto3" json:"compiled,omitempty"` -} - -func (x *Cairo1Class) Reset() { - *x = Cairo1Class{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_state_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Cairo1Class) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Cairo1Class) ProtoMessage() {} - -func (x *Cairo1Class) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_state_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Cairo1Class.ProtoReflect.Descriptor instead. -func (*Cairo1Class) Descriptor() ([]byte, []int) { - return file_p2p_proto_state_proto_rawDescGZIP(), []int{6} -} - -func (x *Cairo1Class) GetAbi() []byte { - if x != nil { - return x.Abi - } - return nil -} - -func (x *Cairo1Class) GetEntryPoints() *Cairo1EntryPoints { - if x != nil { - return x.EntryPoints - } - return nil -} - -func (x *Cairo1Class) GetProgram() []*Felt252 { - if x != nil { - return x.Program - } - return nil -} - -func (x *Cairo1Class) GetContractClassVersion() string { - if x != nil { - return x.ContractClassVersion - } - return "" -} - -func (x *Cairo1Class) GetCompiled() []byte { - if x != nil { - return x.Compiled - } - return nil -} - -// is it better to separate the definition from the hashes? (will need to repeate the hashes -// for the definitions stream) -// or, make the definitions optional? maybe it is enough to know only that a class exists, not its definition -// which may be fetched lazily later. -type Class struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Class: - // - // *Class_Cairo0 - // *Class_Cairo1 - Class isClass_Class `protobuf_oneof:"class"` -} - -func (x *Class) Reset() { - *x = Class{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_state_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Class) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Class) ProtoMessage() {} - -func (x *Class) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_state_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Class.ProtoReflect.Descriptor instead. -func (*Class) Descriptor() ([]byte, []int) { - return file_p2p_proto_state_proto_rawDescGZIP(), []int{7} -} - -func (m *Class) GetClass() isClass_Class { +func (m *StateDiffsResponse) GetStateDiffMessage() isStateDiffsResponse_StateDiffMessage { if m != nil { - return m.Class - } - return nil -} - -func (x *Class) GetCairo0() *Cairo0Class { - if x, ok := x.GetClass().(*Class_Cairo0); ok { - return x.Cairo0 - } - return nil -} - -func (x *Class) GetCairo1() *Cairo1Class { - if x, ok := x.GetClass().(*Class_Cairo1); ok { - return x.Cairo1 + return m.StateDiffMessage } return nil } -type isClass_Class interface { - isClass_Class() -} - -type Class_Cairo0 struct { - Cairo0 *Cairo0Class `protobuf:"bytes,1,opt,name=cairo0,proto3,oneof"` -} - -type Class_Cairo1 struct { - Cairo1 *Cairo1Class `protobuf:"bytes,2,opt,name=cairo1,proto3,oneof"` -} - -func (*Class_Cairo0) isClass_Class() {} - -func (*Class_Cairo1) isClass_Class() {} - -type Classes struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Domain uint32 `protobuf:"varint,1,opt,name=domain,proto3" json:"domain,omitempty"` - Classes []*Class `protobuf:"bytes,2,rep,name=classes,proto3" json:"classes,omitempty"` -} - -func (x *Classes) Reset() { - *x = Classes{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_state_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Classes) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Classes) ProtoMessage() {} - -func (x *Classes) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_state_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Classes.ProtoReflect.Descriptor instead. -func (*Classes) Descriptor() ([]byte, []int) { - return file_p2p_proto_state_proto_rawDescGZIP(), []int{8} -} - -func (x *Classes) GetDomain() uint32 { - if x != nil { - return x.Domain - } - return 0 -} - -func (x *Classes) GetClasses() []*Class { - if x != nil { - return x.Classes +func (x *StateDiffsResponse) GetContractDiff() *ContractDiff { + if x, ok := x.GetStateDiffMessage().(*StateDiffsResponse_ContractDiff); ok { + return x.ContractDiff } return nil } -// a bit more efficient than the state sync separation -type StateDiff_ContractDiff struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address *Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - Nonce *Felt252 `protobuf:"bytes,2,opt,name=nonce,proto3,oneof" json:"nonce,omitempty"` - ClassHash *Felt252 `protobuf:"bytes,3,opt,name=class_hash,json=classHash,proto3,oneof" json:"class_hash,omitempty"` // can change for replace_class or new contract - Values []*ContractStoredValue `protobuf:"bytes,4,rep,name=values,proto3" json:"values,omitempty"` -} - -func (x *StateDiff_ContractDiff) Reset() { - *x = StateDiff_ContractDiff{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_state_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StateDiff_ContractDiff) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StateDiff_ContractDiff) ProtoMessage() {} - -func (x *StateDiff_ContractDiff) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_state_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StateDiff_ContractDiff.ProtoReflect.Descriptor instead. -func (*StateDiff_ContractDiff) Descriptor() ([]byte, []int) { - return file_p2p_proto_state_proto_rawDescGZIP(), []int{1, 0} -} - -func (x *StateDiff_ContractDiff) GetAddress() *Address { - if x != nil { - return x.Address +func (x *StateDiffsResponse) GetDeclaredClass() *DeclaredClass { + if x, ok := x.GetStateDiffMessage().(*StateDiffsResponse_DeclaredClass); ok { + return x.DeclaredClass } return nil } -func (x *StateDiff_ContractDiff) GetNonce() *Felt252 { - if x != nil { - return x.Nonce +func (x *StateDiffsResponse) GetFin() *Fin { + if x, ok := x.GetStateDiffMessage().(*StateDiffsResponse_Fin); ok { + return x.Fin } return nil } -func (x *StateDiff_ContractDiff) GetClassHash() *Felt252 { - if x != nil { - return x.ClassHash - } - return nil +type isStateDiffsResponse_StateDiffMessage interface { + isStateDiffsResponse_StateDiffMessage() } -func (x *StateDiff_ContractDiff) GetValues() []*ContractStoredValue { - if x != nil { - return x.Values - } - return nil +type StateDiffsResponse_ContractDiff struct { + ContractDiff *ContractDiff `protobuf:"bytes,1,opt,name=contract_diff,json=contractDiff,proto3,oneof"` // Multiple contract diffs for the same contract may appear continuously if the diff is too large or if it's more convenient. } -type StateDiff_ContractAddrToClassHash struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ContractAddr *Address `protobuf:"bytes,1,opt,name=contract_addr,json=contractAddr,proto3" json:"contract_addr,omitempty"` - ClassHash *Hash `protobuf:"bytes,2,opt,name=class_hash,json=classHash,proto3" json:"class_hash,omitempty"` +type StateDiffsResponse_DeclaredClass struct { + DeclaredClass *DeclaredClass `protobuf:"bytes,2,opt,name=declared_class,json=declaredClass,proto3,oneof"` } -func (x *StateDiff_ContractAddrToClassHash) Reset() { - *x = StateDiff_ContractAddrToClassHash{} - if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_state_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StateDiff_ContractAddrToClassHash) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StateDiff_ContractAddrToClassHash) ProtoMessage() {} - -func (x *StateDiff_ContractAddrToClassHash) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_state_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) +type StateDiffsResponse_Fin struct { + Fin *Fin `protobuf:"bytes,3,opt,name=fin,proto3,oneof"` // Fin is sent after the peer sent all the data or when it encountered a block that it doesn't have its state diff. } -// Deprecated: Use StateDiff_ContractAddrToClassHash.ProtoReflect.Descriptor instead. -func (*StateDiff_ContractAddrToClassHash) Descriptor() ([]byte, []int) { - return file_p2p_proto_state_proto_rawDescGZIP(), []int{1, 1} -} +func (*StateDiffsResponse_ContractDiff) isStateDiffsResponse_StateDiffMessage() {} -func (x *StateDiff_ContractAddrToClassHash) GetContractAddr() *Address { - if x != nil { - return x.ContractAddr - } - return nil -} +func (*StateDiffsResponse_DeclaredClass) isStateDiffsResponse_StateDiffMessage() {} -func (x *StateDiff_ContractAddrToClassHash) GetClassHash() *Hash { - if x != nil { - return x.ClassHash - } - return nil -} +func (*StateDiffsResponse_Fin) isStateDiffsResponse_StateDiffMessage() {} var File_p2p_proto_state_proto protoreflect.FileDescriptor @@ -757,101 +367,50 @@ var file_p2p_proto_state_proto_rawDesc = []byte{ 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0xc4, 0x04, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x65, 0x44, 0x69, 0x66, 0x66, - 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x3e, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, 0x12, 0x4d, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x64, 0x64, 0x72, 0x54, 0x6f, 0x43, 0x6c, 0x61, - 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, - 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x64, 0x64, 0x72, 0x54, 0x6f, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x52, 0x11, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, - 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x73, 0x1a, 0xcc, 0x01, 0x0a, 0x0c, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x12, 0x22, 0x0a, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x23, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, - 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x48, 0x00, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, - 0x65, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x0a, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, - 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, - 0x35, 0x32, 0x48, 0x01, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x88, - 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x1a, 0x6e, 0x0a, 0x17, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x64, 0x64, 0x72, 0x54, 0x6f, 0x43, 0x6c, 0x61, 0x73, 0x73, - 0x48, 0x61, 0x73, 0x68, 0x12, 0x2d, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, - 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, - 0x64, 0x64, 0x72, 0x12, 0x24, 0x0a, 0x0a, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x09, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x22, 0x54, 0x0a, 0x0a, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, - 0x32, 0x35, 0x32, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x20, 0x0a, - 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, - 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, - 0xc3, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x69, 0x72, 0x6f, 0x30, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, - 0x10, 0x0a, 0x03, 0x61, 0x62, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x61, 0x62, - 0x69, 0x12, 0x29, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x73, 0x12, 0x2c, 0x0a, 0x0b, - 0x6c, 0x31, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0b, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0a, - 0x6c, 0x31, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x73, 0x12, 0x2f, 0x0a, 0x0c, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0b, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0c, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x22, 0x4e, 0x0a, 0x10, 0x53, 0x69, 0x65, 0x72, 0x72, 0x61, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x24, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x08, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0xaf, 0x01, 0x0a, 0x11, 0x43, 0x61, 0x69, 0x72, 0x6f, 0x31, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x2f, 0x0a, 0x09, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x53, 0x69, 0x65, 0x72, 0x72, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x73, 0x12, 0x32, 0x0a, 0x0b, - 0x6c, 0x31, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x53, 0x69, 0x65, 0x72, 0x72, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0a, 0x6c, 0x31, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x73, - 0x12, 0x35, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x53, 0x69, 0x65, 0x72, 0x72, 0x61, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x69, 0x72, - 0x6f, 0x31, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x62, 0x69, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x61, 0x62, 0x69, 0x12, 0x35, 0x0a, 0x0c, 0x65, 0x6e, 0x74, - 0x72, 0x79, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x43, 0x61, 0x69, 0x72, 0x6f, 0x31, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x73, 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, - 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x07, 0x70, 0x72, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x12, 0x34, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, - 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, - 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x63, 0x6f, - 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x22, 0x60, 0x0a, 0x05, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, - 0x26, 0x0a, 0x06, 0x63, 0x61, 0x69, 0x72, 0x6f, 0x30, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0c, 0x2e, 0x43, 0x61, 0x69, 0x72, 0x6f, 0x30, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x00, 0x52, - 0x06, 0x63, 0x61, 0x69, 0x72, 0x6f, 0x30, 0x12, 0x26, 0x0a, 0x06, 0x63, 0x61, 0x69, 0x72, 0x6f, - 0x31, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x43, 0x61, 0x69, 0x72, 0x6f, 0x31, - 0x43, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x69, 0x72, 0x6f, 0x31, 0x42, - 0x07, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x43, 0x0a, 0x07, 0x43, 0x6c, 0x61, 0x73, - 0x73, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x07, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x06, 0x2e, 0x43, - 0x6c, 0x61, 0x73, 0x73, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x75, 0x65, 0x22, 0xf2, 0x01, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x44, + 0x69, 0x66, 0x66, 0x12, 0x22, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x23, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, + 0x48, 0x00, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0a, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x48, 0x01, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, + 0x48, 0x61, 0x73, 0x68, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, + 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x56, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x08, + 0x0a, 0x06, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x22, 0x89, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x63, 0x6c, + 0x61, 0x72, 0x65, 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x0a, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, + 0x48, 0x61, 0x73, 0x68, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x12, + 0x3a, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, + 0x61, 0x73, 0x68, 0x48, 0x00, 0x52, 0x11, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x43, + 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, + 0x61, 0x73, 0x68, 0x22, 0x3d, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x74, 0x65, 0x44, 0x69, 0x66, 0x66, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x49, 0x74, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0xb3, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x74, 0x65, 0x44, 0x69, 0x66, 0x66, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x48, + 0x00, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x12, + 0x37, 0x0a, 0x0e, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, + 0x65, 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x63, 0x6c, 0x61, + 0x72, 0x65, 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x03, 0x66, 0x69, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x04, 0x2e, 0x46, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x66, + 0x69, 0x6e, 0x42, 0x14, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x66, 0x66, + 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x64, 0x45, 0x74, 0x68, 0x2f, 0x6a, 0x75, 0x6e, 0x6f, 0x2f, 0x70, 0x32, 0x70, 0x2f, 0x73, 0x74, + 0x61, 0x72, 0x6b, 0x6e, 0x65, 0x74, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -867,56 +426,40 @@ func file_p2p_proto_state_proto_rawDescGZIP() []byte { } var ( - file_p2p_proto_state_proto_msgTypes = make([]protoimpl.MessageInfo, 11) + file_p2p_proto_state_proto_msgTypes = make([]protoimpl.MessageInfo, 5) file_p2p_proto_state_proto_goTypes = []interface{}{ - (*ContractStoredValue)(nil), // 0: ContractStoredValue - (*StateDiff)(nil), // 1: StateDiff - (*EntryPoint)(nil), // 2: EntryPoint - (*Cairo0Class)(nil), // 3: Cairo0Class - (*SierraEntryPoint)(nil), // 4: SierraEntryPoint - (*Cairo1EntryPoints)(nil), // 5: Cairo1EntryPoints - (*Cairo1Class)(nil), // 6: Cairo1Class - (*Class)(nil), // 7: Class - (*Classes)(nil), // 8: Classes - (*StateDiff_ContractDiff)(nil), // 9: StateDiff.ContractDiff - (*StateDiff_ContractAddrToClassHash)(nil), // 10: StateDiff.ContractAddrToClassHash - (*Felt252)(nil), // 11: Felt252 - (*Address)(nil), // 12: Address - (*Hash)(nil), // 13: Hash + (*ContractStoredValue)(nil), // 0: ContractStoredValue + (*ContractDiff)(nil), // 1: ContractDiff + (*DeclaredClass)(nil), // 2: DeclaredClass + (*StateDiffsRequest)(nil), // 3: StateDiffsRequest + (*StateDiffsResponse)(nil), // 4: StateDiffsResponse + (*Felt252)(nil), // 5: Felt252 + (*Address)(nil), // 6: Address + (*Hash)(nil), // 7: Hash + (VolitionDomain)(0), // 8: VolitionDomain + (*Iteration)(nil), // 9: Iteration + (*Fin)(nil), // 10: Fin } ) - var file_p2p_proto_state_proto_depIdxs = []int32{ - 11, // 0: ContractStoredValue.key:type_name -> Felt252 - 11, // 1: ContractStoredValue.value:type_name -> Felt252 - 9, // 2: StateDiff.contract_diffs:type_name -> StateDiff.ContractDiff - 10, // 3: StateDiff.replaced_classes:type_name -> StateDiff.ContractAddrToClassHash - 10, // 4: StateDiff.deployed_contracts:type_name -> StateDiff.ContractAddrToClassHash - 11, // 5: EntryPoint.selector:type_name -> Felt252 - 11, // 6: EntryPoint.offset:type_name -> Felt252 - 2, // 7: Cairo0Class.externals:type_name -> EntryPoint - 2, // 8: Cairo0Class.l1_handlers:type_name -> EntryPoint - 2, // 9: Cairo0Class.constructors:type_name -> EntryPoint - 11, // 10: SierraEntryPoint.selector:type_name -> Felt252 - 4, // 11: Cairo1EntryPoints.externals:type_name -> SierraEntryPoint - 4, // 12: Cairo1EntryPoints.l1_handlers:type_name -> SierraEntryPoint - 4, // 13: Cairo1EntryPoints.constructors:type_name -> SierraEntryPoint - 5, // 14: Cairo1Class.entry_points:type_name -> Cairo1EntryPoints - 11, // 15: Cairo1Class.program:type_name -> Felt252 - 3, // 16: Class.cairo0:type_name -> Cairo0Class - 6, // 17: Class.cairo1:type_name -> Cairo1Class - 7, // 18: Classes.classes:type_name -> Class - 12, // 19: StateDiff.ContractDiff.address:type_name -> Address - 11, // 20: StateDiff.ContractDiff.nonce:type_name -> Felt252 - 11, // 21: StateDiff.ContractDiff.class_hash:type_name -> Felt252 - 0, // 22: StateDiff.ContractDiff.values:type_name -> ContractStoredValue - 12, // 23: StateDiff.ContractAddrToClassHash.contract_addr:type_name -> Address - 13, // 24: StateDiff.ContractAddrToClassHash.class_hash:type_name -> Hash - 25, // [25:25] is the sub-list for method output_type - 25, // [25:25] is the sub-list for method input_type - 25, // [25:25] is the sub-list for extension type_name - 25, // [25:25] is the sub-list for extension extendee - 0, // [0:25] is the sub-list for field type_name + 5, // 0: ContractStoredValue.key:type_name -> Felt252 + 5, // 1: ContractStoredValue.value:type_name -> Felt252 + 6, // 2: ContractDiff.address:type_name -> Address + 5, // 3: ContractDiff.nonce:type_name -> Felt252 + 7, // 4: ContractDiff.class_hash:type_name -> Hash + 0, // 5: ContractDiff.values:type_name -> ContractStoredValue + 8, // 6: ContractDiff.domain:type_name -> VolitionDomain + 7, // 7: DeclaredClass.class_hash:type_name -> Hash + 7, // 8: DeclaredClass.compiled_class_hash:type_name -> Hash + 9, // 9: StateDiffsRequest.iteration:type_name -> Iteration + 1, // 10: StateDiffsResponse.contract_diff:type_name -> ContractDiff + 2, // 11: StateDiffsResponse.declared_class:type_name -> DeclaredClass + 10, // 12: StateDiffsResponse.fin:type_name -> Fin + 13, // [13:13] is the sub-list for method output_type + 13, // [13:13] is the sub-list for method input_type + 13, // [13:13] is the sub-list for extension type_name + 13, // [13:13] is the sub-list for extension extendee + 0, // [0:13] is the sub-list for field type_name } func init() { file_p2p_proto_state_proto_init() } @@ -939,7 +482,7 @@ func file_p2p_proto_state_proto_init() { } } file_p2p_proto_state_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StateDiff); i { + switch v := v.(*ContractDiff); i { case 0: return &v.state case 1: @@ -951,7 +494,7 @@ func file_p2p_proto_state_proto_init() { } } file_p2p_proto_state_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EntryPoint); i { + switch v := v.(*DeclaredClass); i { case 0: return &v.state case 1: @@ -963,7 +506,7 @@ func file_p2p_proto_state_proto_init() { } } file_p2p_proto_state_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cairo0Class); i { + switch v := v.(*StateDiffsRequest); i { case 0: return &v.state case 1: @@ -975,79 +518,7 @@ func file_p2p_proto_state_proto_init() { } } file_p2p_proto_state_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SierraEntryPoint); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_state_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cairo1EntryPoints); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_state_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cairo1Class); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_state_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Class); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_state_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Classes); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_state_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StateDiff_ContractDiff); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p2p_proto_state_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StateDiff_ContractAddrToClassHash); i { + switch v := v.(*StateDiffsResponse); i { case 0: return &v.state case 1: @@ -1059,18 +530,20 @@ func file_p2p_proto_state_proto_init() { } } } - file_p2p_proto_state_proto_msgTypes[7].OneofWrappers = []interface{}{ - (*Class_Cairo0)(nil), - (*Class_Cairo1)(nil), + file_p2p_proto_state_proto_msgTypes[1].OneofWrappers = []interface{}{} + file_p2p_proto_state_proto_msgTypes[2].OneofWrappers = []interface{}{} + file_p2p_proto_state_proto_msgTypes[4].OneofWrappers = []interface{}{ + (*StateDiffsResponse_ContractDiff)(nil), + (*StateDiffsResponse_DeclaredClass)(nil), + (*StateDiffsResponse_Fin)(nil), } - file_p2p_proto_state_proto_msgTypes[9].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_p2p_proto_state_proto_rawDesc, NumEnums: 0, - NumMessages: 11, + NumMessages: 5, NumExtensions: 0, NumServices: 0, }, diff --git a/p2p/starknet/spec/transaction.pb.go b/p2p/starknet/spec/transaction.pb.go index 6a1a76fc90..b6e1d2d94d 100644 --- a/p2p/starknet/spec/transaction.pb.go +++ b/p2p/starknet/spec/transaction.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.4 +// protoc-gen-go v1.26.0 +// protoc v4.25.1 // source: p2p/proto/transaction.proto package spec @@ -76,6 +76,61 @@ func (x *ResourceLimits) GetMaxPricePerUnit() *Felt252 { return nil } +type ResourceBounds struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + L1Gas *ResourceLimits `protobuf:"bytes,1,opt,name=l1_gas,json=l1Gas,proto3" json:"l1_gas,omitempty"` + L2Gas *ResourceLimits `protobuf:"bytes,2,opt,name=l2_gas,json=l2Gas,proto3" json:"l2_gas,omitempty"` +} + +func (x *ResourceBounds) Reset() { + *x = ResourceBounds{} + if protoimpl.UnsafeEnabled { + mi := &file_p2p_proto_transaction_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceBounds) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceBounds) ProtoMessage() {} + +func (x *ResourceBounds) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_transaction_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResourceBounds.ProtoReflect.Descriptor instead. +func (*ResourceBounds) Descriptor() ([]byte, []int) { + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{1} +} + +func (x *ResourceBounds) GetL1Gas() *ResourceLimits { + if x != nil { + return x.L1Gas + } + return nil +} + +func (x *ResourceBounds) GetL2Gas() *ResourceLimits { + if x != nil { + return x.L2Gas + } + return nil +} + type AccountSignature struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -87,7 +142,7 @@ type AccountSignature struct { func (x *AccountSignature) Reset() { *x = AccountSignature{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_transaction_proto_msgTypes[1] + mi := &file_p2p_proto_transaction_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -100,7 +155,7 @@ func (x *AccountSignature) String() string { func (*AccountSignature) ProtoMessage() {} func (x *AccountSignature) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_transaction_proto_msgTypes[1] + mi := &file_p2p_proto_transaction_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -113,7 +168,7 @@ func (x *AccountSignature) ProtoReflect() protoreflect.Message { // Deprecated: Use AccountSignature.ProtoReflect.Descriptor instead. func (*AccountSignature) Descriptor() ([]byte, []int) { - return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{1} + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{2} } func (x *AccountSignature) GetParts() []*Felt252 { @@ -123,6 +178,8 @@ func (x *AccountSignature) GetParts() []*Felt252 { return nil } +// This is a transaction that is already accepted in a block. Once we have a mempool, we will define +// a separate message for BroadcastedTransaction. type Transaction struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -147,7 +204,7 @@ type Transaction struct { func (x *Transaction) Reset() { *x = Transaction{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_transaction_proto_msgTypes[2] + mi := &file_p2p_proto_transaction_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -160,7 +217,7 @@ func (x *Transaction) String() string { func (*Transaction) ProtoMessage() {} func (x *Transaction) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_transaction_proto_msgTypes[2] + mi := &file_p2p_proto_transaction_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -173,7 +230,7 @@ func (x *Transaction) ProtoReflect() protoreflect.Message { // Deprecated: Use Transaction.ProtoReflect.Descriptor instead. func (*Transaction) Descriptor() ([]byte, []int) { - return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{2} + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{3} } func (m *Transaction) GetTxn() isTransaction_Txn { @@ -253,7 +310,7 @@ func (x *Transaction) GetInvokeV3() *Transaction_InvokeV3 { return nil } -func (x *Transaction) GetL1Handler() *Transaction_L1HandlerV1 { +func (x *Transaction) GetL1Handler() *Transaction_L1HandlerV0 { if x, ok := x.GetTxn().(*Transaction_L1Handler); ok { return x.L1Handler } @@ -305,7 +362,7 @@ type Transaction_InvokeV3_ struct { } type Transaction_L1Handler struct { - L1Handler *Transaction_L1HandlerV1 `protobuf:"bytes,11,opt,name=l1_handler,json=l1Handler,proto3,oneof"` + L1Handler *Transaction_L1HandlerV0 `protobuf:"bytes,11,opt,name=l1_handler,json=l1Handler,proto3,oneof"` } func (*Transaction_DeclareV0_) isTransaction_Txn() {} @@ -330,33 +387,32 @@ func (*Transaction_InvokeV3_) isTransaction_Txn() {} func (*Transaction_L1Handler) isTransaction_Txn() {} -// TBD: can support a flag to return tx hashes only, good for standalone mempool to remove them, -// or any node that keeps track of transaction streaming in the consensus. -type TransactionsRequest struct { +type TransactionWithReceipt struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Iteration *Iteration `protobuf:"bytes,1,opt,name=iteration,proto3" json:"iteration,omitempty"` + Transaction *Transaction `protobuf:"bytes,1,opt,name=transaction,proto3" json:"transaction,omitempty"` + Receipt *Receipt `protobuf:"bytes,2,opt,name=receipt,proto3" json:"receipt,omitempty"` } -func (x *TransactionsRequest) Reset() { - *x = TransactionsRequest{} +func (x *TransactionWithReceipt) Reset() { + *x = TransactionWithReceipt{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_transaction_proto_msgTypes[3] + mi := &file_p2p_proto_transaction_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TransactionsRequest) String() string { +func (x *TransactionWithReceipt) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TransactionsRequest) ProtoMessage() {} +func (*TransactionWithReceipt) ProtoMessage() {} -func (x *TransactionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_transaction_proto_msgTypes[3] +func (x *TransactionWithReceipt) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_transaction_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -367,44 +423,52 @@ func (x *TransactionsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TransactionsRequest.ProtoReflect.Descriptor instead. -func (*TransactionsRequest) Descriptor() ([]byte, []int) { - return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{3} +// Deprecated: Use TransactionWithReceipt.ProtoReflect.Descriptor instead. +func (*TransactionWithReceipt) Descriptor() ([]byte, []int) { + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{4} } -func (x *TransactionsRequest) GetIteration() *Iteration { +func (x *TransactionWithReceipt) GetTransaction() *Transaction { if x != nil { - return x.Iteration + return x.Transaction } return nil } -// can be several in a single reply -type Transactions struct { +func (x *TransactionWithReceipt) GetReceipt() *Receipt { + if x != nil { + return x.Receipt + } + return nil +} + +// TBD: can support a flag to return tx hashes only, good for standalone mempool to remove them, +// or any node that keeps track of transaction streaming in the consensus. +type TransactionsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Items []*Transaction `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Iteration *Iteration `protobuf:"bytes,1,opt,name=iteration,proto3" json:"iteration,omitempty"` } -func (x *Transactions) Reset() { - *x = Transactions{} +func (x *TransactionsRequest) Reset() { + *x = TransactionsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_transaction_proto_msgTypes[4] + mi := &file_p2p_proto_transaction_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Transactions) String() string { +func (x *TransactionsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Transactions) ProtoMessage() {} +func (*TransactionsRequest) ProtoMessage() {} -func (x *Transactions) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_transaction_proto_msgTypes[4] +func (x *TransactionsRequest) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_transaction_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -415,35 +479,36 @@ func (x *Transactions) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Transactions.ProtoReflect.Descriptor instead. -func (*Transactions) Descriptor() ([]byte, []int) { - return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{4} +// Deprecated: Use TransactionsRequest.ProtoReflect.Descriptor instead. +func (*TransactionsRequest) Descriptor() ([]byte, []int) { + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{5} } -func (x *Transactions) GetItems() []*Transaction { +func (x *TransactionsRequest) GetIteration() *Iteration { if x != nil { - return x.Items + return x.Iteration } return nil } +// Responses are sent ordered by the order given in the request. The order inside each block is +// according to the execution order. type TransactionsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id *BlockID `protobuf:"bytes,1,opt,name=id,proto3,oneof" json:"id,omitempty"` // may not appear if Fin is sent to end the whole response - // Types that are assignable to Responses: + // Types that are assignable to TransactionMessage: // - // *TransactionsResponse_Transactions + // *TransactionsResponse_TransactionWithReceipt // *TransactionsResponse_Fin - Responses isTransactionsResponse_Responses `protobuf_oneof:"responses"` + TransactionMessage isTransactionsResponse_TransactionMessage `protobuf_oneof:"transaction_message"` } func (x *TransactionsResponse) Reset() { *x = TransactionsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_transaction_proto_msgTypes[5] + mi := &file_p2p_proto_transaction_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -456,7 +521,7 @@ func (x *TransactionsResponse) String() string { func (*TransactionsResponse) ProtoMessage() {} func (x *TransactionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_transaction_proto_msgTypes[5] + mi := &file_p2p_proto_transaction_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -469,52 +534,92 @@ func (x *TransactionsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionsResponse.ProtoReflect.Descriptor instead. func (*TransactionsResponse) Descriptor() ([]byte, []int) { - return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{5} -} - -func (x *TransactionsResponse) GetId() *BlockID { - if x != nil { - return x.Id - } - return nil + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{6} } -func (m *TransactionsResponse) GetResponses() isTransactionsResponse_Responses { +func (m *TransactionsResponse) GetTransactionMessage() isTransactionsResponse_TransactionMessage { if m != nil { - return m.Responses + return m.TransactionMessage } return nil } -func (x *TransactionsResponse) GetTransactions() *Transactions { - if x, ok := x.GetResponses().(*TransactionsResponse_Transactions); ok { - return x.Transactions +func (x *TransactionsResponse) GetTransactionWithReceipt() *TransactionWithReceipt { + if x, ok := x.GetTransactionMessage().(*TransactionsResponse_TransactionWithReceipt); ok { + return x.TransactionWithReceipt } return nil } func (x *TransactionsResponse) GetFin() *Fin { - if x, ok := x.GetResponses().(*TransactionsResponse_Fin); ok { + if x, ok := x.GetTransactionMessage().(*TransactionsResponse_Fin); ok { return x.Fin } return nil } -type isTransactionsResponse_Responses interface { - isTransactionsResponse_Responses() +type isTransactionsResponse_TransactionMessage interface { + isTransactionsResponse_TransactionMessage() } -type TransactionsResponse_Transactions struct { - Transactions *Transactions `protobuf:"bytes,2,opt,name=transactions,proto3,oneof"` +type TransactionsResponse_TransactionWithReceipt struct { + TransactionWithReceipt *TransactionWithReceipt `protobuf:"bytes,1,opt,name=transaction_with_receipt,json=transactionWithReceipt,proto3,oneof"` } type TransactionsResponse_Fin struct { - Fin *Fin `protobuf:"bytes,3,opt,name=fin,proto3,oneof"` + Fin *Fin `protobuf:"bytes,2,opt,name=fin,proto3,oneof"` // Fin is sent after the peer sent all the data or when it encountered a block that it doesn't have its transactions. } -func (*TransactionsResponse_Transactions) isTransactionsResponse_Responses() {} +func (*TransactionsResponse_TransactionWithReceipt) isTransactionsResponse_TransactionMessage() {} -func (*TransactionsResponse_Fin) isTransactionsResponse_Responses() {} +func (*TransactionsResponse_Fin) isTransactionsResponse_TransactionMessage() {} + +type Transactions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Transactions []*Transaction `protobuf:"bytes,1,rep,name=transactions,proto3" json:"transactions,omitempty"` +} + +func (x *Transactions) Reset() { + *x = Transactions{} + if protoimpl.UnsafeEnabled { + mi := &file_p2p_proto_transaction_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Transactions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Transactions) ProtoMessage() {} + +func (x *Transactions) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_transaction_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Transactions.ProtoReflect.Descriptor instead. +func (*Transactions) Descriptor() ([]byte, []int) { + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{7} +} + +func (x *Transactions) GetTransactions() []*Transaction { + if x != nil { + return x.Transactions + } + return nil +} type Transaction_DeclareV0 struct { state protoimpl.MessageState @@ -530,7 +635,7 @@ type Transaction_DeclareV0 struct { func (x *Transaction_DeclareV0) Reset() { *x = Transaction_DeclareV0{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_transaction_proto_msgTypes[6] + mi := &file_p2p_proto_transaction_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -543,7 +648,7 @@ func (x *Transaction_DeclareV0) String() string { func (*Transaction_DeclareV0) ProtoMessage() {} func (x *Transaction_DeclareV0) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_transaction_proto_msgTypes[6] + mi := &file_p2p_proto_transaction_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -556,7 +661,7 @@ func (x *Transaction_DeclareV0) ProtoReflect() protoreflect.Message { // Deprecated: Use Transaction_DeclareV0.ProtoReflect.Descriptor instead. func (*Transaction_DeclareV0) Descriptor() ([]byte, []int) { - return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{2, 0} + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{3, 0} } func (x *Transaction_DeclareV0) GetSender() *Address { @@ -602,7 +707,7 @@ type Transaction_DeclareV1 struct { func (x *Transaction_DeclareV1) Reset() { *x = Transaction_DeclareV1{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_transaction_proto_msgTypes[7] + mi := &file_p2p_proto_transaction_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -615,7 +720,7 @@ func (x *Transaction_DeclareV1) String() string { func (*Transaction_DeclareV1) ProtoMessage() {} func (x *Transaction_DeclareV1) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_transaction_proto_msgTypes[7] + mi := &file_p2p_proto_transaction_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -628,7 +733,7 @@ func (x *Transaction_DeclareV1) ProtoReflect() protoreflect.Message { // Deprecated: Use Transaction_DeclareV1.ProtoReflect.Descriptor instead. func (*Transaction_DeclareV1) Descriptor() ([]byte, []int) { - return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{2, 1} + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{3, 1} } func (x *Transaction_DeclareV1) GetSender() *Address { @@ -676,13 +781,13 @@ type Transaction_DeclareV2 struct { Signature *AccountSignature `protobuf:"bytes,3,opt,name=signature,proto3" json:"signature,omitempty"` ClassHash *Hash `protobuf:"bytes,4,opt,name=class_hash,json=classHash,proto3" json:"class_hash,omitempty"` Nonce *Felt252 `protobuf:"bytes,5,opt,name=nonce,proto3" json:"nonce,omitempty"` - CompiledClassHash *Felt252 `protobuf:"bytes,6,opt,name=compiled_class_hash,json=compiledClassHash,proto3" json:"compiled_class_hash,omitempty"` + CompiledClassHash *Hash `protobuf:"bytes,6,opt,name=compiled_class_hash,json=compiledClassHash,proto3" json:"compiled_class_hash,omitempty"` } func (x *Transaction_DeclareV2) Reset() { *x = Transaction_DeclareV2{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_transaction_proto_msgTypes[8] + mi := &file_p2p_proto_transaction_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -695,7 +800,7 @@ func (x *Transaction_DeclareV2) String() string { func (*Transaction_DeclareV2) ProtoMessage() {} func (x *Transaction_DeclareV2) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_transaction_proto_msgTypes[8] + mi := &file_p2p_proto_transaction_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -708,7 +813,7 @@ func (x *Transaction_DeclareV2) ProtoReflect() protoreflect.Message { // Deprecated: Use Transaction_DeclareV2.ProtoReflect.Descriptor instead. func (*Transaction_DeclareV2) Descriptor() ([]byte, []int) { - return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{2, 2} + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{3, 2} } func (x *Transaction_DeclareV2) GetSender() *Address { @@ -746,36 +851,36 @@ func (x *Transaction_DeclareV2) GetNonce() *Felt252 { return nil } -func (x *Transaction_DeclareV2) GetCompiledClassHash() *Felt252 { +func (x *Transaction_DeclareV2) GetCompiledClassHash() *Hash { if x != nil { return x.CompiledClassHash } return nil } +// see https://external.integration.starknet.io/feeder_gateway/get_transaction?transactionHash=0x41d1f5206ef58a443e7d3d1ca073171ec25fa75313394318fc83a074a6631c3 type Transaction_DeclareV3 struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Sender *Address `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` - MaxFee *Felt252 `protobuf:"bytes,2,opt,name=max_fee,json=maxFee,proto3" json:"max_fee,omitempty"` - Signature *AccountSignature `protobuf:"bytes,3,opt,name=signature,proto3" json:"signature,omitempty"` - ClassHash *Hash `protobuf:"bytes,4,opt,name=class_hash,json=classHash,proto3" json:"class_hash,omitempty"` - Nonce *Felt252 `protobuf:"bytes,5,opt,name=nonce,proto3" json:"nonce,omitempty"` - CompiledClassHash *Felt252 `protobuf:"bytes,6,opt,name=compiled_class_hash,json=compiledClassHash,proto3" json:"compiled_class_hash,omitempty"` - L1Gas *ResourceLimits `protobuf:"bytes,7,opt,name=l1_gas,json=l1Gas,proto3" json:"l1_gas,omitempty"` - L2Gas *ResourceLimits `protobuf:"bytes,8,opt,name=l2_gas,json=l2Gas,proto3" json:"l2_gas,omitempty"` - Tip *Felt252 `protobuf:"bytes,9,opt,name=tip,proto3" json:"tip,omitempty"` - Paymaster *Address `protobuf:"bytes,10,opt,name=paymaster,proto3" json:"paymaster,omitempty"` - NonceDomain string `protobuf:"bytes,11,opt,name=nonce_domain,json=nonceDomain,proto3" json:"nonce_domain,omitempty"` - FeeDomain string `protobuf:"bytes,12,opt,name=fee_domain,json=feeDomain,proto3" json:"fee_domain,omitempty"` + Sender *Address `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + Signature *AccountSignature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + ClassHash *Hash `protobuf:"bytes,3,opt,name=class_hash,json=classHash,proto3" json:"class_hash,omitempty"` + Nonce *Felt252 `protobuf:"bytes,4,opt,name=nonce,proto3" json:"nonce,omitempty"` + CompiledClassHash *Hash `protobuf:"bytes,5,opt,name=compiled_class_hash,json=compiledClassHash,proto3" json:"compiled_class_hash,omitempty"` + ResourceBounds *ResourceBounds `protobuf:"bytes,6,opt,name=resource_bounds,json=resourceBounds,proto3" json:"resource_bounds,omitempty"` + Tip uint64 `protobuf:"varint,7,opt,name=tip,proto3" json:"tip,omitempty"` + PaymasterData []*Felt252 `protobuf:"bytes,8,rep,name=paymaster_data,json=paymasterData,proto3" json:"paymaster_data,omitempty"` + AccountDeploymentData []*Felt252 `protobuf:"bytes,9,rep,name=account_deployment_data,json=accountDeploymentData,proto3" json:"account_deployment_data,omitempty"` + NonceDataAvailabilityMode VolitionDomain `protobuf:"varint,10,opt,name=nonce_data_availability_mode,json=nonceDataAvailabilityMode,proto3,enum=VolitionDomain" json:"nonce_data_availability_mode,omitempty"` + FeeDataAvailabilityMode VolitionDomain `protobuf:"varint,11,opt,name=fee_data_availability_mode,json=feeDataAvailabilityMode,proto3,enum=VolitionDomain" json:"fee_data_availability_mode,omitempty"` } func (x *Transaction_DeclareV3) Reset() { *x = Transaction_DeclareV3{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_transaction_proto_msgTypes[9] + mi := &file_p2p_proto_transaction_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -788,7 +893,7 @@ func (x *Transaction_DeclareV3) String() string { func (*Transaction_DeclareV3) ProtoMessage() {} func (x *Transaction_DeclareV3) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_transaction_proto_msgTypes[9] + mi := &file_p2p_proto_transaction_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -801,7 +906,7 @@ func (x *Transaction_DeclareV3) ProtoReflect() protoreflect.Message { // Deprecated: Use Transaction_DeclareV3.ProtoReflect.Descriptor instead. func (*Transaction_DeclareV3) Descriptor() ([]byte, []int) { - return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{2, 3} + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{3, 3} } func (x *Transaction_DeclareV3) GetSender() *Address { @@ -811,13 +916,6 @@ func (x *Transaction_DeclareV3) GetSender() *Address { return nil } -func (x *Transaction_DeclareV3) GetMaxFee() *Felt252 { - if x != nil { - return x.MaxFee - } - return nil -} - func (x *Transaction_DeclareV3) GetSignature() *AccountSignature { if x != nil { return x.Signature @@ -839,53 +937,53 @@ func (x *Transaction_DeclareV3) GetNonce() *Felt252 { return nil } -func (x *Transaction_DeclareV3) GetCompiledClassHash() *Felt252 { +func (x *Transaction_DeclareV3) GetCompiledClassHash() *Hash { if x != nil { return x.CompiledClassHash } return nil } -func (x *Transaction_DeclareV3) GetL1Gas() *ResourceLimits { +func (x *Transaction_DeclareV3) GetResourceBounds() *ResourceBounds { if x != nil { - return x.L1Gas + return x.ResourceBounds } return nil } -func (x *Transaction_DeclareV3) GetL2Gas() *ResourceLimits { +func (x *Transaction_DeclareV3) GetTip() uint64 { if x != nil { - return x.L2Gas + return x.Tip } - return nil + return 0 } -func (x *Transaction_DeclareV3) GetTip() *Felt252 { +func (x *Transaction_DeclareV3) GetPaymasterData() []*Felt252 { if x != nil { - return x.Tip + return x.PaymasterData } return nil } -func (x *Transaction_DeclareV3) GetPaymaster() *Address { +func (x *Transaction_DeclareV3) GetAccountDeploymentData() []*Felt252 { if x != nil { - return x.Paymaster + return x.AccountDeploymentData } return nil } -func (x *Transaction_DeclareV3) GetNonceDomain() string { +func (x *Transaction_DeclareV3) GetNonceDataAvailabilityMode() VolitionDomain { if x != nil { - return x.NonceDomain + return x.NonceDataAvailabilityMode } - return "" + return VolitionDomain_L1 } -func (x *Transaction_DeclareV3) GetFeeDomain() string { +func (x *Transaction_DeclareV3) GetFeeDataAvailabilityMode() VolitionDomain { if x != nil { - return x.FeeDomain + return x.FeeDataAvailabilityMode } - return "" + return VolitionDomain_L1 } type Transaction_Deploy struct { @@ -896,12 +994,13 @@ type Transaction_Deploy struct { ClassHash *Hash `protobuf:"bytes,1,opt,name=class_hash,json=classHash,proto3" json:"class_hash,omitempty"` AddressSalt *Felt252 `protobuf:"bytes,2,opt,name=address_salt,json=addressSalt,proto3" json:"address_salt,omitempty"` Calldata []*Felt252 `protobuf:"bytes,3,rep,name=calldata,proto3" json:"calldata,omitempty"` + Version uint32 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"` } func (x *Transaction_Deploy) Reset() { *x = Transaction_Deploy{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_transaction_proto_msgTypes[10] + mi := &file_p2p_proto_transaction_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -914,7 +1013,7 @@ func (x *Transaction_Deploy) String() string { func (*Transaction_Deploy) ProtoMessage() {} func (x *Transaction_Deploy) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_transaction_proto_msgTypes[10] + mi := &file_p2p_proto_transaction_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -927,7 +1026,7 @@ func (x *Transaction_Deploy) ProtoReflect() protoreflect.Message { // Deprecated: Use Transaction_Deploy.ProtoReflect.Descriptor instead. func (*Transaction_Deploy) Descriptor() ([]byte, []int) { - return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{2, 4} + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{3, 4} } func (x *Transaction_Deploy) GetClassHash() *Hash { @@ -951,6 +1050,13 @@ func (x *Transaction_Deploy) GetCalldata() []*Felt252 { return nil } +func (x *Transaction_Deploy) GetVersion() uint32 { + if x != nil { + return x.Version + } + return 0 +} + type Transaction_DeployAccountV1 struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -967,7 +1073,7 @@ type Transaction_DeployAccountV1 struct { func (x *Transaction_DeployAccountV1) Reset() { *x = Transaction_DeployAccountV1{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_transaction_proto_msgTypes[11] + mi := &file_p2p_proto_transaction_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -980,7 +1086,7 @@ func (x *Transaction_DeployAccountV1) String() string { func (*Transaction_DeployAccountV1) ProtoMessage() {} func (x *Transaction_DeployAccountV1) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_transaction_proto_msgTypes[11] + mi := &file_p2p_proto_transaction_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -993,7 +1099,7 @@ func (x *Transaction_DeployAccountV1) ProtoReflect() protoreflect.Message { // Deprecated: Use Transaction_DeployAccountV1.ProtoReflect.Descriptor instead. func (*Transaction_DeployAccountV1) Descriptor() ([]byte, []int) { - return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{2, 5} + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{3, 5} } func (x *Transaction_DeployAccountV1) GetMaxFee() *Felt252 { @@ -1038,29 +1144,28 @@ func (x *Transaction_DeployAccountV1) GetCalldata() []*Felt252 { return nil } +// see https://external.integration.starknet.io/feeder_gateway/get_transaction?transactionHash=0x29fd7881f14380842414cdfdd8d6c0b1f2174f8916edcfeb1ede1eb26ac3ef0 type Transaction_DeployAccountV3 struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - MaxFee *Felt252 `protobuf:"bytes,1,opt,name=max_fee,json=maxFee,proto3" json:"max_fee,omitempty"` - Signature *AccountSignature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` - ClassHash *Hash `protobuf:"bytes,3,opt,name=class_hash,json=classHash,proto3" json:"class_hash,omitempty"` - Nonce *Felt252 `protobuf:"bytes,4,opt,name=nonce,proto3" json:"nonce,omitempty"` - AddressSalt *Felt252 `protobuf:"bytes,5,opt,name=address_salt,json=addressSalt,proto3" json:"address_salt,omitempty"` - Calldata []*Felt252 `protobuf:"bytes,6,rep,name=calldata,proto3" json:"calldata,omitempty"` - L1Gas *ResourceLimits `protobuf:"bytes,7,opt,name=l1_gas,json=l1Gas,proto3" json:"l1_gas,omitempty"` - L2Gas *ResourceLimits `protobuf:"bytes,8,opt,name=l2_gas,json=l2Gas,proto3" json:"l2_gas,omitempty"` - Tip *Felt252 `protobuf:"bytes,9,opt,name=tip,proto3" json:"tip,omitempty"` - Paymaster *Address `protobuf:"bytes,10,opt,name=paymaster,proto3" json:"paymaster,omitempty"` - NonceDomain string `protobuf:"bytes,11,opt,name=nonce_domain,json=nonceDomain,proto3" json:"nonce_domain,omitempty"` - FeeDomain string `protobuf:"bytes,12,opt,name=fee_domain,json=feeDomain,proto3" json:"fee_domain,omitempty"` + Signature *AccountSignature `protobuf:"bytes,1,opt,name=signature,proto3" json:"signature,omitempty"` + ClassHash *Hash `protobuf:"bytes,2,opt,name=class_hash,json=classHash,proto3" json:"class_hash,omitempty"` + Nonce *Felt252 `protobuf:"bytes,3,opt,name=nonce,proto3" json:"nonce,omitempty"` + AddressSalt *Felt252 `protobuf:"bytes,4,opt,name=address_salt,json=addressSalt,proto3" json:"address_salt,omitempty"` + Calldata []*Felt252 `protobuf:"bytes,5,rep,name=calldata,proto3" json:"calldata,omitempty"` + ResourceBounds *ResourceBounds `protobuf:"bytes,6,opt,name=resource_bounds,json=resourceBounds,proto3" json:"resource_bounds,omitempty"` + Tip uint64 `protobuf:"varint,7,opt,name=tip,proto3" json:"tip,omitempty"` + PaymasterData []*Felt252 `protobuf:"bytes,8,rep,name=paymaster_data,json=paymasterData,proto3" json:"paymaster_data,omitempty"` + NonceDataAvailabilityMode VolitionDomain `protobuf:"varint,9,opt,name=nonce_data_availability_mode,json=nonceDataAvailabilityMode,proto3,enum=VolitionDomain" json:"nonce_data_availability_mode,omitempty"` + FeeDataAvailabilityMode VolitionDomain `protobuf:"varint,10,opt,name=fee_data_availability_mode,json=feeDataAvailabilityMode,proto3,enum=VolitionDomain" json:"fee_data_availability_mode,omitempty"` } func (x *Transaction_DeployAccountV3) Reset() { *x = Transaction_DeployAccountV3{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_transaction_proto_msgTypes[12] + mi := &file_p2p_proto_transaction_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1073,7 +1178,7 @@ func (x *Transaction_DeployAccountV3) String() string { func (*Transaction_DeployAccountV3) ProtoMessage() {} func (x *Transaction_DeployAccountV3) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_transaction_proto_msgTypes[12] + mi := &file_p2p_proto_transaction_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1086,14 +1191,7 @@ func (x *Transaction_DeployAccountV3) ProtoReflect() protoreflect.Message { // Deprecated: Use Transaction_DeployAccountV3.ProtoReflect.Descriptor instead. func (*Transaction_DeployAccountV3) Descriptor() ([]byte, []int) { - return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{2, 6} -} - -func (x *Transaction_DeployAccountV3) GetMaxFee() *Felt252 { - if x != nil { - return x.MaxFee - } - return nil + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{3, 6} } func (x *Transaction_DeployAccountV3) GetSignature() *AccountSignature { @@ -1131,46 +1229,39 @@ func (x *Transaction_DeployAccountV3) GetCalldata() []*Felt252 { return nil } -func (x *Transaction_DeployAccountV3) GetL1Gas() *ResourceLimits { - if x != nil { - return x.L1Gas - } - return nil -} - -func (x *Transaction_DeployAccountV3) GetL2Gas() *ResourceLimits { +func (x *Transaction_DeployAccountV3) GetResourceBounds() *ResourceBounds { if x != nil { - return x.L2Gas + return x.ResourceBounds } return nil } -func (x *Transaction_DeployAccountV3) GetTip() *Felt252 { +func (x *Transaction_DeployAccountV3) GetTip() uint64 { if x != nil { return x.Tip } - return nil + return 0 } -func (x *Transaction_DeployAccountV3) GetPaymaster() *Address { +func (x *Transaction_DeployAccountV3) GetPaymasterData() []*Felt252 { if x != nil { - return x.Paymaster + return x.PaymasterData } return nil } -func (x *Transaction_DeployAccountV3) GetNonceDomain() string { +func (x *Transaction_DeployAccountV3) GetNonceDataAvailabilityMode() VolitionDomain { if x != nil { - return x.NonceDomain + return x.NonceDataAvailabilityMode } - return "" + return VolitionDomain_L1 } -func (x *Transaction_DeployAccountV3) GetFeeDomain() string { +func (x *Transaction_DeployAccountV3) GetFeeDataAvailabilityMode() VolitionDomain { if x != nil { - return x.FeeDomain + return x.FeeDataAvailabilityMode } - return "" + return VolitionDomain_L1 } type Transaction_InvokeV0 struct { @@ -1188,7 +1279,7 @@ type Transaction_InvokeV0 struct { func (x *Transaction_InvokeV0) Reset() { *x = Transaction_InvokeV0{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_transaction_proto_msgTypes[13] + mi := &file_p2p_proto_transaction_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1201,7 +1292,7 @@ func (x *Transaction_InvokeV0) String() string { func (*Transaction_InvokeV0) ProtoMessage() {} func (x *Transaction_InvokeV0) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_transaction_proto_msgTypes[13] + mi := &file_p2p_proto_transaction_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1214,7 +1305,7 @@ func (x *Transaction_InvokeV0) ProtoReflect() protoreflect.Message { // Deprecated: Use Transaction_InvokeV0.ProtoReflect.Descriptor instead. func (*Transaction_InvokeV0) Descriptor() ([]byte, []int) { - return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{2, 7} + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{3, 7} } func (x *Transaction_InvokeV0) GetMaxFee() *Felt252 { @@ -1267,7 +1358,7 @@ type Transaction_InvokeV1 struct { func (x *Transaction_InvokeV1) Reset() { *x = Transaction_InvokeV1{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_transaction_proto_msgTypes[14] + mi := &file_p2p_proto_transaction_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1280,7 +1371,7 @@ func (x *Transaction_InvokeV1) String() string { func (*Transaction_InvokeV1) ProtoMessage() {} func (x *Transaction_InvokeV1) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_transaction_proto_msgTypes[14] + mi := &file_p2p_proto_transaction_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1293,7 +1384,7 @@ func (x *Transaction_InvokeV1) ProtoReflect() protoreflect.Message { // Deprecated: Use Transaction_InvokeV1.ProtoReflect.Descriptor instead. func (*Transaction_InvokeV1) Descriptor() ([]byte, []int) { - return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{2, 8} + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{3, 8} } func (x *Transaction_InvokeV1) GetSender() *Address { @@ -1331,28 +1422,28 @@ func (x *Transaction_InvokeV1) GetNonce() *Felt252 { return nil } +// see https://external.integration.starknet.io/feeder_gateway/get_transaction?transactionHash=0x41906f1c314cca5f43170ea75d3b1904196a10101190d2b12a41cc61cfd17c type Transaction_InvokeV3 struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Sender *Address `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` - MaxFee *Felt252 `protobuf:"bytes,2,opt,name=max_fee,json=maxFee,proto3" json:"max_fee,omitempty"` - Signature *AccountSignature `protobuf:"bytes,3,opt,name=signature,proto3" json:"signature,omitempty"` - Calldata []*Felt252 `protobuf:"bytes,4,rep,name=calldata,proto3" json:"calldata,omitempty"` - L1Gas *ResourceLimits `protobuf:"bytes,5,opt,name=l1_gas,json=l1Gas,proto3" json:"l1_gas,omitempty"` - L2Gas *ResourceLimits `protobuf:"bytes,6,opt,name=l2_gas,json=l2Gas,proto3" json:"l2_gas,omitempty"` - Tip *Felt252 `protobuf:"bytes,7,opt,name=tip,proto3" json:"tip,omitempty"` - Paymaster *Address `protobuf:"bytes,8,opt,name=paymaster,proto3" json:"paymaster,omitempty"` - NonceDomain string `protobuf:"bytes,9,opt,name=nonce_domain,json=nonceDomain,proto3" json:"nonce_domain,omitempty"` - FeeDomain string `protobuf:"bytes,10,opt,name=fee_domain,json=feeDomain,proto3" json:"fee_domain,omitempty"` - Nonce *Felt252 `protobuf:"bytes,11,opt,name=nonce,proto3" json:"nonce,omitempty"` + Sender *Address `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + Signature *AccountSignature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + Calldata []*Felt252 `protobuf:"bytes,3,rep,name=calldata,proto3" json:"calldata,omitempty"` + ResourceBounds *ResourceBounds `protobuf:"bytes,4,opt,name=resource_bounds,json=resourceBounds,proto3" json:"resource_bounds,omitempty"` + Tip uint64 `protobuf:"varint,5,opt,name=tip,proto3" json:"tip,omitempty"` + PaymasterData []*Felt252 `protobuf:"bytes,6,rep,name=paymaster_data,json=paymasterData,proto3" json:"paymaster_data,omitempty"` + AccountDeploymentData []*Felt252 `protobuf:"bytes,7,rep,name=account_deployment_data,json=accountDeploymentData,proto3" json:"account_deployment_data,omitempty"` + NonceDataAvailabilityMode VolitionDomain `protobuf:"varint,8,opt,name=nonce_data_availability_mode,json=nonceDataAvailabilityMode,proto3,enum=VolitionDomain" json:"nonce_data_availability_mode,omitempty"` + FeeDataAvailabilityMode VolitionDomain `protobuf:"varint,9,opt,name=fee_data_availability_mode,json=feeDataAvailabilityMode,proto3,enum=VolitionDomain" json:"fee_data_availability_mode,omitempty"` + Nonce *Felt252 `protobuf:"bytes,10,opt,name=nonce,proto3" json:"nonce,omitempty"` } func (x *Transaction_InvokeV3) Reset() { *x = Transaction_InvokeV3{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_transaction_proto_msgTypes[15] + mi := &file_p2p_proto_transaction_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1365,7 +1456,7 @@ func (x *Transaction_InvokeV3) String() string { func (*Transaction_InvokeV3) ProtoMessage() {} func (x *Transaction_InvokeV3) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_transaction_proto_msgTypes[15] + mi := &file_p2p_proto_transaction_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1378,7 +1469,7 @@ func (x *Transaction_InvokeV3) ProtoReflect() protoreflect.Message { // Deprecated: Use Transaction_InvokeV3.ProtoReflect.Descriptor instead. func (*Transaction_InvokeV3) Descriptor() ([]byte, []int) { - return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{2, 9} + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{3, 9} } func (x *Transaction_InvokeV3) GetSender() *Address { @@ -1388,13 +1479,6 @@ func (x *Transaction_InvokeV3) GetSender() *Address { return nil } -func (x *Transaction_InvokeV3) GetMaxFee() *Felt252 { - if x != nil { - return x.MaxFee - } - return nil -} - func (x *Transaction_InvokeV3) GetSignature() *AccountSignature { if x != nil { return x.Signature @@ -1409,46 +1493,46 @@ func (x *Transaction_InvokeV3) GetCalldata() []*Felt252 { return nil } -func (x *Transaction_InvokeV3) GetL1Gas() *ResourceLimits { +func (x *Transaction_InvokeV3) GetResourceBounds() *ResourceBounds { if x != nil { - return x.L1Gas + return x.ResourceBounds } return nil } -func (x *Transaction_InvokeV3) GetL2Gas() *ResourceLimits { +func (x *Transaction_InvokeV3) GetTip() uint64 { if x != nil { - return x.L2Gas + return x.Tip } - return nil + return 0 } -func (x *Transaction_InvokeV3) GetTip() *Felt252 { +func (x *Transaction_InvokeV3) GetPaymasterData() []*Felt252 { if x != nil { - return x.Tip + return x.PaymasterData } return nil } -func (x *Transaction_InvokeV3) GetPaymaster() *Address { +func (x *Transaction_InvokeV3) GetAccountDeploymentData() []*Felt252 { if x != nil { - return x.Paymaster + return x.AccountDeploymentData } return nil } -func (x *Transaction_InvokeV3) GetNonceDomain() string { +func (x *Transaction_InvokeV3) GetNonceDataAvailabilityMode() VolitionDomain { if x != nil { - return x.NonceDomain + return x.NonceDataAvailabilityMode } - return "" + return VolitionDomain_L1 } -func (x *Transaction_InvokeV3) GetFeeDomain() string { +func (x *Transaction_InvokeV3) GetFeeDataAvailabilityMode() VolitionDomain { if x != nil { - return x.FeeDomain + return x.FeeDataAvailabilityMode } - return "" + return VolitionDomain_L1 } func (x *Transaction_InvokeV3) GetNonce() *Felt252 { @@ -1458,7 +1542,7 @@ func (x *Transaction_InvokeV3) GetNonce() *Felt252 { return nil } -type Transaction_L1HandlerV1 struct { +type Transaction_L1HandlerV0 struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1469,23 +1553,23 @@ type Transaction_L1HandlerV1 struct { Calldata []*Felt252 `protobuf:"bytes,4,rep,name=calldata,proto3" json:"calldata,omitempty"` } -func (x *Transaction_L1HandlerV1) Reset() { - *x = Transaction_L1HandlerV1{} +func (x *Transaction_L1HandlerV0) Reset() { + *x = Transaction_L1HandlerV0{} if protoimpl.UnsafeEnabled { - mi := &file_p2p_proto_transaction_proto_msgTypes[16] + mi := &file_p2p_proto_transaction_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Transaction_L1HandlerV1) String() string { +func (x *Transaction_L1HandlerV0) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Transaction_L1HandlerV1) ProtoMessage() {} +func (*Transaction_L1HandlerV0) ProtoMessage() {} -func (x *Transaction_L1HandlerV1) ProtoReflect() protoreflect.Message { - mi := &file_p2p_proto_transaction_proto_msgTypes[16] +func (x *Transaction_L1HandlerV0) ProtoReflect() protoreflect.Message { + mi := &file_p2p_proto_transaction_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1496,33 +1580,33 @@ func (x *Transaction_L1HandlerV1) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Transaction_L1HandlerV1.ProtoReflect.Descriptor instead. -func (*Transaction_L1HandlerV1) Descriptor() ([]byte, []int) { - return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{2, 10} +// Deprecated: Use Transaction_L1HandlerV0.ProtoReflect.Descriptor instead. +func (*Transaction_L1HandlerV0) Descriptor() ([]byte, []int) { + return file_p2p_proto_transaction_proto_rawDescGZIP(), []int{3, 10} } -func (x *Transaction_L1HandlerV1) GetNonce() *Felt252 { +func (x *Transaction_L1HandlerV0) GetNonce() *Felt252 { if x != nil { return x.Nonce } return nil } -func (x *Transaction_L1HandlerV1) GetAddress() *Address { +func (x *Transaction_L1HandlerV0) GetAddress() *Address { if x != nil { return x.Address } return nil } -func (x *Transaction_L1HandlerV1) GetEntryPointSelector() *Felt252 { +func (x *Transaction_L1HandlerV0) GetEntryPointSelector() *Felt252 { if x != nil { return x.EntryPointSelector } return nil } -func (x *Transaction_L1HandlerV1) GetCalldata() []*Felt252 { +func (x *Transaction_L1HandlerV0) GetCalldata() []*Felt252 { if x != nil { return x.Calldata } @@ -1535,209 +1619,214 @@ var file_p2p_proto_transaction_proto_rawDesc = []byte{ 0x0a, 0x1b, 0x70, 0x32, 0x70, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x70, 0x32, 0x70, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x70, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, - 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x35, 0x0a, 0x12, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x65, - 0x72, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, - 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x50, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x74, 0x22, 0x32, 0x0a, 0x10, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x05, 0x70, - 0x61, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, - 0x74, 0x32, 0x35, 0x32, 0x52, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x22, 0xcf, 0x1c, 0x0a, 0x0b, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x0a, 0x64, - 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x5f, 0x76, 0x30, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, - 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, 0x30, 0x48, 0x00, 0x52, 0x09, 0x64, 0x65, 0x63, 0x6c, 0x61, - 0x72, 0x65, 0x56, 0x30, 0x12, 0x37, 0x0a, 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x5f, - 0x76, 0x31, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, 0x31, - 0x48, 0x00, 0x52, 0x09, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, 0x31, 0x12, 0x37, 0x0a, - 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x5f, 0x76, 0x32, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, 0x32, 0x48, 0x00, 0x52, 0x09, 0x64, 0x65, 0x63, - 0x6c, 0x61, 0x72, 0x65, 0x56, 0x32, 0x12, 0x37, 0x0a, 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, - 0x65, 0x5f, 0x76, 0x33, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x54, 0x72, 0x61, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x70, 0x32, 0x70, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x70, + 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, + 0x12, 0x27, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x09, + 0x6d, 0x61, 0x78, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x12, 0x6d, 0x61, 0x78, + 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, + 0x0f, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x69, 0x63, 0x65, 0x50, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x74, + 0x22, 0x60, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x6f, 0x75, 0x6e, + 0x64, 0x73, 0x12, 0x26, 0x0a, 0x06, 0x6c, 0x31, 0x5f, 0x67, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x73, 0x52, 0x05, 0x6c, 0x31, 0x47, 0x61, 0x73, 0x12, 0x26, 0x0a, 0x06, 0x6c, 0x32, + 0x5f, 0x67, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x05, 0x6c, 0x32, 0x47, + 0x61, 0x73, 0x22, 0x32, 0x0a, 0x10, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, + 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x22, 0xd3, 0x1e, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, + 0x65, 0x5f, 0x76, 0x30, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, - 0x56, 0x33, 0x48, 0x00, 0x52, 0x09, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, 0x33, 0x12, - 0x2d, 0x0a, 0x06, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x48, 0x00, 0x52, 0x06, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x4a, - 0x0a, 0x11, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x5f, 0x76, 0x31, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x31, 0x48, 0x00, 0x52, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x31, 0x12, 0x4a, 0x0a, 0x11, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x76, 0x33, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x56, 0x33, 0x48, 0x00, 0x52, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x33, 0x12, 0x34, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, - 0x5f, 0x76, 0x30, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x30, - 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x30, 0x12, 0x34, 0x0a, 0x09, - 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x5f, 0x76, 0x31, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, - 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x31, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, - 0x56, 0x31, 0x12, 0x34, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x5f, 0x76, 0x33, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x33, 0x48, 0x00, 0x52, 0x08, - 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x33, 0x12, 0x39, 0x0a, 0x0a, 0x6c, 0x31, 0x5f, 0x68, - 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x31, 0x48, 0x61, 0x6e, - 0x64, 0x6c, 0x65, 0x72, 0x56, 0x31, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x31, 0x48, 0x61, 0x6e, 0x64, - 0x6c, 0x65, 0x72, 0x1a, 0xa7, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, - 0x30, 0x12, 0x20, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x06, 0x73, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x65, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x06, - 0x6d, 0x61, 0x78, 0x46, 0x65, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0a, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, - 0x73, 0x68, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x1a, 0xc7, 0x01, - 0x0a, 0x09, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, 0x31, 0x12, 0x20, 0x0a, 0x06, 0x73, - 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, - 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, - 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x46, 0x65, 0x65, - 0x12, 0x2f, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x12, 0x24, 0x0a, 0x0a, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x09, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, - 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x1a, 0x81, 0x02, 0x0a, 0x09, 0x44, 0x65, 0x63, 0x6c, - 0x61, 0x72, 0x65, 0x56, 0x32, 0x12, 0x20, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, - 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x66, - 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, - 0x35, 0x32, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x46, 0x65, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0a, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, - 0x68, 0x12, 0x1e, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, - 0x65, 0x12, 0x38, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, - 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x11, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x1a, 0xd7, 0x03, 0x0a, 0x09, - 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, 0x33, 0x12, 0x20, 0x0a, 0x06, 0x73, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x07, 0x6d, - 0x61, 0x78, 0x5f, 0x66, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, - 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x46, 0x65, 0x65, 0x12, 0x2f, - 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, - 0x24, 0x0a, 0x0a, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x05, - 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x38, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, - 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x11, 0x63, 0x6f, - 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x12, - 0x26, 0x0a, 0x06, 0x6c, 0x31, 0x5f, 0x67, 0x61, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, - 0x52, 0x05, 0x6c, 0x31, 0x47, 0x61, 0x73, 0x12, 0x26, 0x0a, 0x06, 0x6c, 0x32, 0x5f, 0x67, 0x61, - 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x05, 0x6c, 0x32, 0x47, 0x61, 0x73, 0x12, - 0x1a, 0x0a, 0x03, 0x74, 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, - 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x03, 0x74, 0x69, 0x70, 0x12, 0x26, 0x0a, 0x09, 0x70, - 0x61, 0x79, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, - 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5f, 0x64, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x6f, 0x6e, 0x63, 0x65, - 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x5f, 0x64, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x65, 0x44, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x1a, 0x81, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x12, 0x24, 0x0a, 0x0a, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x09, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2b, 0x0a, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x5f, 0x73, 0x61, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, - 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x0b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, - 0x61, 0x6c, 0x74, 0x12, 0x24, 0x0a, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, - 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x1a, 0xfe, 0x01, 0x0a, 0x0f, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x31, 0x12, 0x21, 0x0a, - 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x65, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, - 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x46, 0x65, 0x65, - 0x12, 0x2f, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x12, 0x24, 0x0a, 0x0a, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x09, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, - 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x5f, 0x73, 0x61, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, - 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x0b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x53, 0x61, 0x6c, 0x74, 0x12, 0x24, 0x0a, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, - 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x1a, 0xd4, 0x03, 0x0a, 0x0f, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x33, 0x12, 0x21, - 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x65, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x56, 0x30, 0x48, 0x00, 0x52, 0x09, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, 0x30, 0x12, + 0x37, 0x0a, 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x5f, 0x76, 0x31, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, 0x31, 0x48, 0x00, 0x52, 0x09, 0x64, + 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, 0x31, 0x12, 0x37, 0x0a, 0x0a, 0x64, 0x65, 0x63, 0x6c, + 0x61, 0x72, 0x65, 0x5f, 0x76, 0x32, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, + 0x72, 0x65, 0x56, 0x32, 0x48, 0x00, 0x52, 0x09, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, + 0x32, 0x12, 0x37, 0x0a, 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x5f, 0x76, 0x33, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, 0x33, 0x48, 0x00, 0x52, + 0x09, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, 0x33, 0x12, 0x2d, 0x0a, 0x06, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x48, + 0x00, 0x52, 0x06, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x4a, 0x0a, 0x11, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x76, 0x31, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x56, 0x31, 0x48, 0x00, 0x52, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x56, 0x31, 0x12, 0x4a, 0x0a, 0x11, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x76, 0x33, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x33, 0x48, 0x00, + 0x52, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, + 0x33, 0x12, 0x34, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x5f, 0x76, 0x30, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x30, 0x48, 0x00, 0x52, 0x08, 0x69, + 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x30, 0x12, 0x34, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x6f, 0x6b, + 0x65, 0x5f, 0x76, 0x31, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x56, + 0x31, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x31, 0x12, 0x34, 0x0a, + 0x09, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x5f, 0x76, 0x33, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, + 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x33, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x6f, 0x6b, + 0x65, 0x56, 0x33, 0x12, 0x39, 0x0a, 0x0a, 0x6c, 0x31, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, + 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x31, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x56, + 0x30, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x31, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x1a, 0xa7, + 0x01, 0x0a, 0x09, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, 0x30, 0x12, 0x20, 0x0a, 0x06, + 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x21, + 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x46, 0x65, - 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, + 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0a, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x09, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, - 0x32, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x0c, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x5f, 0x73, 0x61, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, - 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x0b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x53, 0x61, 0x6c, 0x74, 0x12, 0x24, 0x0a, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, - 0x32, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x12, 0x26, 0x0a, 0x06, 0x6c, - 0x31, 0x5f, 0x67, 0x61, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x05, 0x6c, 0x31, - 0x47, 0x61, 0x73, 0x12, 0x26, 0x0a, 0x06, 0x6c, 0x32, 0x5f, 0x67, 0x61, 0x73, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x73, 0x52, 0x05, 0x6c, 0x32, 0x47, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x03, 0x74, - 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, - 0x35, 0x32, 0x52, 0x03, 0x74, 0x69, 0x70, 0x12, 0x26, 0x0a, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x61, - 0x73, 0x74, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x12, - 0x21, 0x0a, 0x0c, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x44, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x1a, 0xe4, 0x01, 0x0a, 0x08, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x30, 0x12, 0x21, - 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x65, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x46, 0x65, - 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x12, 0x22, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3a, 0x0a, 0x14, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x12, - 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x12, 0x24, 0x0a, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x08, - 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x1a, 0xc6, 0x01, 0x0a, 0x08, 0x49, 0x6e, 0x76, - 0x6f, 0x6b, 0x65, 0x56, 0x31, 0x12, 0x20, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, - 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x66, - 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x09, 0x63, + 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x1a, 0xc7, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x63, + 0x6c, 0x61, 0x72, 0x65, 0x56, 0x31, 0x12, 0x20, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, + 0x66, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, + 0x32, 0x35, 0x32, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x46, 0x65, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0a, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, + 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x05, 0x6e, 0x6f, 0x6e, + 0x63, 0x65, 0x1a, 0xfe, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, 0x32, + 0x12, 0x20, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x12, 0x21, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x65, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x06, 0x6d, + 0x61, 0x78, 0x46, 0x65, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0a, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, + 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, + 0x68, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x05, + 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, + 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x35, 0x0a, 0x13, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, + 0x61, 0x73, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, + 0x52, 0x11, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x48, + 0x61, 0x73, 0x68, 0x1a, 0xba, 0x04, 0x0a, 0x09, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x56, + 0x33, 0x12, 0x20, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x06, 0x73, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0a, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, + 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, + 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x05, 0x6e, 0x6f, + 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, + 0x32, 0x35, 0x32, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x35, 0x0a, 0x13, 0x63, 0x6f, + 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, + 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x11, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, + 0x68, 0x12, 0x38, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x0e, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x74, + 0x69, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x74, 0x69, 0x70, 0x12, 0x2f, 0x0a, + 0x0e, 0x70, 0x61, 0x79, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, + 0x0d, 0x70, 0x61, 0x79, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, + 0x0a, 0x17, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x15, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x50, 0x0a, 0x1c, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x56, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x19, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x6f, + 0x64, 0x65, 0x12, 0x4c, 0x0a, 0x1a, 0x66, 0x65, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x56, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x17, 0x66, 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, 0x65, + 0x1a, 0x9b, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x24, 0x0a, 0x0a, 0x63, + 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, + 0x68, 0x12, 0x2b, 0x0a, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x61, 0x6c, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, + 0x32, 0x52, 0x0b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x61, 0x6c, 0x74, 0x12, 0x24, + 0x0a, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0xfe, + 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x56, 0x31, 0x12, 0x21, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x65, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x06, 0x6d, + 0x61, 0x78, 0x46, 0x65, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0a, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, + 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, + 0x68, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x05, + 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, + 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x0c, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x61, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x0b, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x61, 0x6c, 0x74, 0x12, 0x24, 0x0a, 0x08, 0x63, 0x61, 0x6c, + 0x6c, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, + 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x1a, + 0xf8, 0x03, 0x0a, 0x0f, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x56, 0x33, 0x12, 0x2f, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0a, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x68, 0x61, + 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, + 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x05, 0x6e, 0x6f, + 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, + 0x32, 0x35, 0x32, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x0c, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x61, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x0b, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x53, 0x61, 0x6c, 0x74, 0x12, 0x24, 0x0a, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, + 0x32, 0x35, 0x32, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, + 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x69, 0x70, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x74, 0x69, 0x70, 0x12, 0x2f, 0x0a, 0x0e, 0x70, 0x61, 0x79, + 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x0d, 0x70, 0x61, 0x79, + 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x50, 0x0a, 0x1c, 0x6e, 0x6f, + 0x6e, 0x63, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x0f, 0x2e, 0x56, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x52, 0x19, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x41, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x4c, 0x0a, 0x1a, + 0x66, 0x65, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x0f, 0x2e, 0x56, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x52, 0x17, 0x66, 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x1a, 0xe4, 0x01, 0x0a, 0x08, 0x49, + 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x30, 0x12, 0x21, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x66, + 0x65, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x46, 0x65, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x08, 0x63, - 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, + 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x22, 0x0a, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x3a, 0x0a, 0x14, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, + 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x12, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x24, 0x0a, 0x08, 0x63, + 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x1e, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, - 0x65, 0x1a, 0x9c, 0x03, 0x0a, 0x08, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x33, 0x12, 0x20, + 0x61, 0x1a, 0xc6, 0x01, 0x0a, 0x08, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x31, 0x12, 0x20, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, @@ -1747,52 +1836,82 @@ var file_p2p_proto_transaction_proto_rawDesc = []byte{ 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, - 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x12, 0x26, 0x0a, 0x06, 0x6c, 0x31, - 0x5f, 0x67, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x05, 0x6c, 0x31, 0x47, - 0x61, 0x73, 0x12, 0x26, 0x0a, 0x06, 0x6c, 0x32, 0x5f, 0x67, 0x61, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x69, 0x6d, - 0x69, 0x74, 0x73, 0x52, 0x05, 0x6c, 0x32, 0x47, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x03, 0x74, 0x69, - 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, - 0x32, 0x52, 0x03, 0x74, 0x69, 0x70, 0x12, 0x26, 0x0a, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x52, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x12, 0x21, - 0x0a, 0x0c, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, - 0x12, 0x1e, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, - 0x1a, 0xb3, 0x01, 0x0a, 0x0b, 0x4c, 0x31, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x56, 0x31, - 0x12, 0x1e, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, - 0x12, 0x22, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x3a, 0x0a, 0x14, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x12, 0x65, 0x6e, - 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x12, 0x24, 0x0a, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x08, 0x63, 0x61, - 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x42, 0x05, 0x0a, 0x03, 0x74, 0x78, 0x6e, 0x22, 0x3f, 0x0a, - 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x32, - 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, - 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x14, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, - 0x44, 0x48, 0x01, 0x52, 0x02, 0x69, 0x64, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x0c, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0d, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, - 0x00, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x18, 0x0a, 0x03, 0x66, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x04, 0x2e, 0x46, - 0x69, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x66, 0x69, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x69, 0x64, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x05, 0x6e, 0x6f, + 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, + 0x32, 0x35, 0x32, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x1a, 0x82, 0x04, 0x0a, 0x08, 0x49, + 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x33, 0x12, 0x20, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x08, 0x63, 0x61, + 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, + 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x38, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x69, + 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x74, 0x69, 0x70, 0x12, 0x2f, 0x0a, 0x0e, + 0x70, 0x61, 0x79, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x0d, + 0x70, 0x61, 0x79, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, + 0x17, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, + 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x15, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x50, 0x0a, 0x1c, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x56, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x19, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, + 0x65, 0x12, 0x4c, 0x0a, 0x1a, 0x66, 0x65, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x56, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x17, 0x66, 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, 0x41, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, + 0x1e, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, + 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x1a, + 0xb3, 0x01, 0x0a, 0x0b, 0x4c, 0x31, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x56, 0x30, 0x12, + 0x1e, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, + 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, + 0x22, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x08, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x3a, 0x0a, 0x14, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x12, 0x65, 0x6e, 0x74, + 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, + 0x24, 0x0a, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x08, 0x2e, 0x46, 0x65, 0x6c, 0x74, 0x32, 0x35, 0x32, 0x52, 0x08, 0x63, 0x61, 0x6c, + 0x6c, 0x64, 0x61, 0x74, 0x61, 0x42, 0x05, 0x0a, 0x03, 0x74, 0x78, 0x6e, 0x22, 0x6c, 0x0a, 0x16, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x52, + 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x2e, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, + 0x74, 0x52, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x22, 0x3f, 0x0a, 0x13, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x28, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x09, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9c, 0x01, 0x0a, 0x14, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x18, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x48, + 0x00, 0x52, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, + 0x74, 0x68, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x18, 0x0a, 0x03, 0x66, 0x69, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x04, 0x2e, 0x46, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x03, + 0x66, 0x69, 0x6e, 0x42, 0x15, 0x0a, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x40, 0x0a, 0x0c, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x0c, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x31, 0x5a, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x65, 0x74, 0x68, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x64, 0x45, 0x74, 0x68, 0x2f, 0x6a, 0x75, 0x6e, 0x6f, 0x2f, 0x70, 0x32, + 0x70, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x6b, 0x6e, 0x65, 0x74, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1808,126 +1927,130 @@ func file_p2p_proto_transaction_proto_rawDescGZIP() []byte { } var ( - file_p2p_proto_transaction_proto_msgTypes = make([]protoimpl.MessageInfo, 17) + file_p2p_proto_transaction_proto_msgTypes = make([]protoimpl.MessageInfo, 19) file_p2p_proto_transaction_proto_goTypes = []interface{}{ (*ResourceLimits)(nil), // 0: ResourceLimits - (*AccountSignature)(nil), // 1: AccountSignature - (*Transaction)(nil), // 2: Transaction - (*TransactionsRequest)(nil), // 3: TransactionsRequest - (*Transactions)(nil), // 4: Transactions - (*TransactionsResponse)(nil), // 5: TransactionsResponse - (*Transaction_DeclareV0)(nil), // 6: Transaction.DeclareV0 - (*Transaction_DeclareV1)(nil), // 7: Transaction.DeclareV1 - (*Transaction_DeclareV2)(nil), // 8: Transaction.DeclareV2 - (*Transaction_DeclareV3)(nil), // 9: Transaction.DeclareV3 - (*Transaction_Deploy)(nil), // 10: Transaction.Deploy - (*Transaction_DeployAccountV1)(nil), // 11: Transaction.DeployAccountV1 - (*Transaction_DeployAccountV3)(nil), // 12: Transaction.DeployAccountV3 - (*Transaction_InvokeV0)(nil), // 13: Transaction.InvokeV0 - (*Transaction_InvokeV1)(nil), // 14: Transaction.InvokeV1 - (*Transaction_InvokeV3)(nil), // 15: Transaction.InvokeV3 - (*Transaction_L1HandlerV1)(nil), // 16: Transaction.L1HandlerV1 - (*Felt252)(nil), // 17: Felt252 - (*Iteration)(nil), // 18: Iteration - (*BlockID)(nil), // 19: BlockID - (*Fin)(nil), // 20: Fin - (*Address)(nil), // 21: Address - (*Hash)(nil), // 22: Hash + (*ResourceBounds)(nil), // 1: ResourceBounds + (*AccountSignature)(nil), // 2: AccountSignature + (*Transaction)(nil), // 3: Transaction + (*TransactionWithReceipt)(nil), // 4: TransactionWithReceipt + (*TransactionsRequest)(nil), // 5: TransactionsRequest + (*TransactionsResponse)(nil), // 6: TransactionsResponse + (*Transactions)(nil), // 7: Transactions + (*Transaction_DeclareV0)(nil), // 8: Transaction.DeclareV0 + (*Transaction_DeclareV1)(nil), // 9: Transaction.DeclareV1 + (*Transaction_DeclareV2)(nil), // 10: Transaction.DeclareV2 + (*Transaction_DeclareV3)(nil), // 11: Transaction.DeclareV3 + (*Transaction_Deploy)(nil), // 12: Transaction.Deploy + (*Transaction_DeployAccountV1)(nil), // 13: Transaction.DeployAccountV1 + (*Transaction_DeployAccountV3)(nil), // 14: Transaction.DeployAccountV3 + (*Transaction_InvokeV0)(nil), // 15: Transaction.InvokeV0 + (*Transaction_InvokeV1)(nil), // 16: Transaction.InvokeV1 + (*Transaction_InvokeV3)(nil), // 17: Transaction.InvokeV3 + (*Transaction_L1HandlerV0)(nil), // 18: Transaction.L1HandlerV0 + (*Felt252)(nil), // 19: Felt252 + (*Receipt)(nil), // 20: Receipt + (*Iteration)(nil), // 21: Iteration + (*Fin)(nil), // 22: Fin + (*Address)(nil), // 23: Address + (*Hash)(nil), // 24: Hash + (VolitionDomain)(0), // 25: VolitionDomain } ) - var file_p2p_proto_transaction_proto_depIdxs = []int32{ - 17, // 0: ResourceLimits.max_amount:type_name -> Felt252 - 17, // 1: ResourceLimits.max_price_per_unit:type_name -> Felt252 - 17, // 2: AccountSignature.parts:type_name -> Felt252 - 6, // 3: Transaction.declare_v0:type_name -> Transaction.DeclareV0 - 7, // 4: Transaction.declare_v1:type_name -> Transaction.DeclareV1 - 8, // 5: Transaction.declare_v2:type_name -> Transaction.DeclareV2 - 9, // 6: Transaction.declare_v3:type_name -> Transaction.DeclareV3 - 10, // 7: Transaction.deploy:type_name -> Transaction.Deploy - 11, // 8: Transaction.deploy_account_v1:type_name -> Transaction.DeployAccountV1 - 12, // 9: Transaction.deploy_account_v3:type_name -> Transaction.DeployAccountV3 - 13, // 10: Transaction.invoke_v0:type_name -> Transaction.InvokeV0 - 14, // 11: Transaction.invoke_v1:type_name -> Transaction.InvokeV1 - 15, // 12: Transaction.invoke_v3:type_name -> Transaction.InvokeV3 - 16, // 13: Transaction.l1_handler:type_name -> Transaction.L1HandlerV1 - 18, // 14: TransactionsRequest.iteration:type_name -> Iteration - 2, // 15: Transactions.items:type_name -> Transaction - 19, // 16: TransactionsResponse.id:type_name -> BlockID - 4, // 17: TransactionsResponse.transactions:type_name -> Transactions - 20, // 18: TransactionsResponse.fin:type_name -> Fin - 21, // 19: Transaction.DeclareV0.sender:type_name -> Address - 17, // 20: Transaction.DeclareV0.max_fee:type_name -> Felt252 - 1, // 21: Transaction.DeclareV0.signature:type_name -> AccountSignature - 22, // 22: Transaction.DeclareV0.class_hash:type_name -> Hash - 21, // 23: Transaction.DeclareV1.sender:type_name -> Address - 17, // 24: Transaction.DeclareV1.max_fee:type_name -> Felt252 - 1, // 25: Transaction.DeclareV1.signature:type_name -> AccountSignature - 22, // 26: Transaction.DeclareV1.class_hash:type_name -> Hash - 17, // 27: Transaction.DeclareV1.nonce:type_name -> Felt252 - 21, // 28: Transaction.DeclareV2.sender:type_name -> Address - 17, // 29: Transaction.DeclareV2.max_fee:type_name -> Felt252 - 1, // 30: Transaction.DeclareV2.signature:type_name -> AccountSignature - 22, // 31: Transaction.DeclareV2.class_hash:type_name -> Hash - 17, // 32: Transaction.DeclareV2.nonce:type_name -> Felt252 - 17, // 33: Transaction.DeclareV2.compiled_class_hash:type_name -> Felt252 - 21, // 34: Transaction.DeclareV3.sender:type_name -> Address - 17, // 35: Transaction.DeclareV3.max_fee:type_name -> Felt252 - 1, // 36: Transaction.DeclareV3.signature:type_name -> AccountSignature - 22, // 37: Transaction.DeclareV3.class_hash:type_name -> Hash - 17, // 38: Transaction.DeclareV3.nonce:type_name -> Felt252 - 17, // 39: Transaction.DeclareV3.compiled_class_hash:type_name -> Felt252 - 0, // 40: Transaction.DeclareV3.l1_gas:type_name -> ResourceLimits - 0, // 41: Transaction.DeclareV3.l2_gas:type_name -> ResourceLimits - 17, // 42: Transaction.DeclareV3.tip:type_name -> Felt252 - 21, // 43: Transaction.DeclareV3.paymaster:type_name -> Address - 22, // 44: Transaction.Deploy.class_hash:type_name -> Hash - 17, // 45: Transaction.Deploy.address_salt:type_name -> Felt252 - 17, // 46: Transaction.Deploy.calldata:type_name -> Felt252 - 17, // 47: Transaction.DeployAccountV1.max_fee:type_name -> Felt252 - 1, // 48: Transaction.DeployAccountV1.signature:type_name -> AccountSignature - 22, // 49: Transaction.DeployAccountV1.class_hash:type_name -> Hash - 17, // 50: Transaction.DeployAccountV1.nonce:type_name -> Felt252 - 17, // 51: Transaction.DeployAccountV1.address_salt:type_name -> Felt252 - 17, // 52: Transaction.DeployAccountV1.calldata:type_name -> Felt252 - 17, // 53: Transaction.DeployAccountV3.max_fee:type_name -> Felt252 - 1, // 54: Transaction.DeployAccountV3.signature:type_name -> AccountSignature - 22, // 55: Transaction.DeployAccountV3.class_hash:type_name -> Hash - 17, // 56: Transaction.DeployAccountV3.nonce:type_name -> Felt252 - 17, // 57: Transaction.DeployAccountV3.address_salt:type_name -> Felt252 - 17, // 58: Transaction.DeployAccountV3.calldata:type_name -> Felt252 - 0, // 59: Transaction.DeployAccountV3.l1_gas:type_name -> ResourceLimits - 0, // 60: Transaction.DeployAccountV3.l2_gas:type_name -> ResourceLimits - 17, // 61: Transaction.DeployAccountV3.tip:type_name -> Felt252 - 21, // 62: Transaction.DeployAccountV3.paymaster:type_name -> Address - 17, // 63: Transaction.InvokeV0.max_fee:type_name -> Felt252 - 1, // 64: Transaction.InvokeV0.signature:type_name -> AccountSignature - 21, // 65: Transaction.InvokeV0.address:type_name -> Address - 17, // 66: Transaction.InvokeV0.entry_point_selector:type_name -> Felt252 - 17, // 67: Transaction.InvokeV0.calldata:type_name -> Felt252 - 21, // 68: Transaction.InvokeV1.sender:type_name -> Address - 17, // 69: Transaction.InvokeV1.max_fee:type_name -> Felt252 - 1, // 70: Transaction.InvokeV1.signature:type_name -> AccountSignature - 17, // 71: Transaction.InvokeV1.calldata:type_name -> Felt252 - 17, // 72: Transaction.InvokeV1.nonce:type_name -> Felt252 - 21, // 73: Transaction.InvokeV3.sender:type_name -> Address - 17, // 74: Transaction.InvokeV3.max_fee:type_name -> Felt252 - 1, // 75: Transaction.InvokeV3.signature:type_name -> AccountSignature - 17, // 76: Transaction.InvokeV3.calldata:type_name -> Felt252 - 0, // 77: Transaction.InvokeV3.l1_gas:type_name -> ResourceLimits - 0, // 78: Transaction.InvokeV3.l2_gas:type_name -> ResourceLimits - 17, // 79: Transaction.InvokeV3.tip:type_name -> Felt252 - 21, // 80: Transaction.InvokeV3.paymaster:type_name -> Address - 17, // 81: Transaction.InvokeV3.nonce:type_name -> Felt252 - 17, // 82: Transaction.L1HandlerV1.nonce:type_name -> Felt252 - 21, // 83: Transaction.L1HandlerV1.address:type_name -> Address - 17, // 84: Transaction.L1HandlerV1.entry_point_selector:type_name -> Felt252 - 17, // 85: Transaction.L1HandlerV1.calldata:type_name -> Felt252 - 86, // [86:86] is the sub-list for method output_type - 86, // [86:86] is the sub-list for method input_type - 86, // [86:86] is the sub-list for extension type_name - 86, // [86:86] is the sub-list for extension extendee - 0, // [0:86] is the sub-list for field type_name + 19, // 0: ResourceLimits.max_amount:type_name -> Felt252 + 19, // 1: ResourceLimits.max_price_per_unit:type_name -> Felt252 + 0, // 2: ResourceBounds.l1_gas:type_name -> ResourceLimits + 0, // 3: ResourceBounds.l2_gas:type_name -> ResourceLimits + 19, // 4: AccountSignature.parts:type_name -> Felt252 + 8, // 5: Transaction.declare_v0:type_name -> Transaction.DeclareV0 + 9, // 6: Transaction.declare_v1:type_name -> Transaction.DeclareV1 + 10, // 7: Transaction.declare_v2:type_name -> Transaction.DeclareV2 + 11, // 8: Transaction.declare_v3:type_name -> Transaction.DeclareV3 + 12, // 9: Transaction.deploy:type_name -> Transaction.Deploy + 13, // 10: Transaction.deploy_account_v1:type_name -> Transaction.DeployAccountV1 + 14, // 11: Transaction.deploy_account_v3:type_name -> Transaction.DeployAccountV3 + 15, // 12: Transaction.invoke_v0:type_name -> Transaction.InvokeV0 + 16, // 13: Transaction.invoke_v1:type_name -> Transaction.InvokeV1 + 17, // 14: Transaction.invoke_v3:type_name -> Transaction.InvokeV3 + 18, // 15: Transaction.l1_handler:type_name -> Transaction.L1HandlerV0 + 3, // 16: TransactionWithReceipt.transaction:type_name -> Transaction + 20, // 17: TransactionWithReceipt.receipt:type_name -> Receipt + 21, // 18: TransactionsRequest.iteration:type_name -> Iteration + 4, // 19: TransactionsResponse.transaction_with_receipt:type_name -> TransactionWithReceipt + 22, // 20: TransactionsResponse.fin:type_name -> Fin + 3, // 21: Transactions.transactions:type_name -> Transaction + 23, // 22: Transaction.DeclareV0.sender:type_name -> Address + 19, // 23: Transaction.DeclareV0.max_fee:type_name -> Felt252 + 2, // 24: Transaction.DeclareV0.signature:type_name -> AccountSignature + 24, // 25: Transaction.DeclareV0.class_hash:type_name -> Hash + 23, // 26: Transaction.DeclareV1.sender:type_name -> Address + 19, // 27: Transaction.DeclareV1.max_fee:type_name -> Felt252 + 2, // 28: Transaction.DeclareV1.signature:type_name -> AccountSignature + 24, // 29: Transaction.DeclareV1.class_hash:type_name -> Hash + 19, // 30: Transaction.DeclareV1.nonce:type_name -> Felt252 + 23, // 31: Transaction.DeclareV2.sender:type_name -> Address + 19, // 32: Transaction.DeclareV2.max_fee:type_name -> Felt252 + 2, // 33: Transaction.DeclareV2.signature:type_name -> AccountSignature + 24, // 34: Transaction.DeclareV2.class_hash:type_name -> Hash + 19, // 35: Transaction.DeclareV2.nonce:type_name -> Felt252 + 24, // 36: Transaction.DeclareV2.compiled_class_hash:type_name -> Hash + 23, // 37: Transaction.DeclareV3.sender:type_name -> Address + 2, // 38: Transaction.DeclareV3.signature:type_name -> AccountSignature + 24, // 39: Transaction.DeclareV3.class_hash:type_name -> Hash + 19, // 40: Transaction.DeclareV3.nonce:type_name -> Felt252 + 24, // 41: Transaction.DeclareV3.compiled_class_hash:type_name -> Hash + 1, // 42: Transaction.DeclareV3.resource_bounds:type_name -> ResourceBounds + 19, // 43: Transaction.DeclareV3.paymaster_data:type_name -> Felt252 + 19, // 44: Transaction.DeclareV3.account_deployment_data:type_name -> Felt252 + 25, // 45: Transaction.DeclareV3.nonce_data_availability_mode:type_name -> VolitionDomain + 25, // 46: Transaction.DeclareV3.fee_data_availability_mode:type_name -> VolitionDomain + 24, // 47: Transaction.Deploy.class_hash:type_name -> Hash + 19, // 48: Transaction.Deploy.address_salt:type_name -> Felt252 + 19, // 49: Transaction.Deploy.calldata:type_name -> Felt252 + 19, // 50: Transaction.DeployAccountV1.max_fee:type_name -> Felt252 + 2, // 51: Transaction.DeployAccountV1.signature:type_name -> AccountSignature + 24, // 52: Transaction.DeployAccountV1.class_hash:type_name -> Hash + 19, // 53: Transaction.DeployAccountV1.nonce:type_name -> Felt252 + 19, // 54: Transaction.DeployAccountV1.address_salt:type_name -> Felt252 + 19, // 55: Transaction.DeployAccountV1.calldata:type_name -> Felt252 + 2, // 56: Transaction.DeployAccountV3.signature:type_name -> AccountSignature + 24, // 57: Transaction.DeployAccountV3.class_hash:type_name -> Hash + 19, // 58: Transaction.DeployAccountV3.nonce:type_name -> Felt252 + 19, // 59: Transaction.DeployAccountV3.address_salt:type_name -> Felt252 + 19, // 60: Transaction.DeployAccountV3.calldata:type_name -> Felt252 + 1, // 61: Transaction.DeployAccountV3.resource_bounds:type_name -> ResourceBounds + 19, // 62: Transaction.DeployAccountV3.paymaster_data:type_name -> Felt252 + 25, // 63: Transaction.DeployAccountV3.nonce_data_availability_mode:type_name -> VolitionDomain + 25, // 64: Transaction.DeployAccountV3.fee_data_availability_mode:type_name -> VolitionDomain + 19, // 65: Transaction.InvokeV0.max_fee:type_name -> Felt252 + 2, // 66: Transaction.InvokeV0.signature:type_name -> AccountSignature + 23, // 67: Transaction.InvokeV0.address:type_name -> Address + 19, // 68: Transaction.InvokeV0.entry_point_selector:type_name -> Felt252 + 19, // 69: Transaction.InvokeV0.calldata:type_name -> Felt252 + 23, // 70: Transaction.InvokeV1.sender:type_name -> Address + 19, // 71: Transaction.InvokeV1.max_fee:type_name -> Felt252 + 2, // 72: Transaction.InvokeV1.signature:type_name -> AccountSignature + 19, // 73: Transaction.InvokeV1.calldata:type_name -> Felt252 + 19, // 74: Transaction.InvokeV1.nonce:type_name -> Felt252 + 23, // 75: Transaction.InvokeV3.sender:type_name -> Address + 2, // 76: Transaction.InvokeV3.signature:type_name -> AccountSignature + 19, // 77: Transaction.InvokeV3.calldata:type_name -> Felt252 + 1, // 78: Transaction.InvokeV3.resource_bounds:type_name -> ResourceBounds + 19, // 79: Transaction.InvokeV3.paymaster_data:type_name -> Felt252 + 19, // 80: Transaction.InvokeV3.account_deployment_data:type_name -> Felt252 + 25, // 81: Transaction.InvokeV3.nonce_data_availability_mode:type_name -> VolitionDomain + 25, // 82: Transaction.InvokeV3.fee_data_availability_mode:type_name -> VolitionDomain + 19, // 83: Transaction.InvokeV3.nonce:type_name -> Felt252 + 19, // 84: Transaction.L1HandlerV0.nonce:type_name -> Felt252 + 23, // 85: Transaction.L1HandlerV0.address:type_name -> Address + 19, // 86: Transaction.L1HandlerV0.entry_point_selector:type_name -> Felt252 + 19, // 87: Transaction.L1HandlerV0.calldata:type_name -> Felt252 + 88, // [88:88] is the sub-list for method output_type + 88, // [88:88] is the sub-list for method input_type + 88, // [88:88] is the sub-list for extension type_name + 88, // [88:88] is the sub-list for extension extendee + 0, // [0:88] is the sub-list for field type_name } func init() { file_p2p_proto_transaction_proto_init() } @@ -1936,6 +2059,7 @@ func file_p2p_proto_transaction_proto_init() { return } file_p2p_proto_common_proto_init() + file_p2p_proto_receipt_proto_init() if !protoimpl.UnsafeEnabled { file_p2p_proto_transaction_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResourceLimits); i { @@ -1950,7 +2074,7 @@ func file_p2p_proto_transaction_proto_init() { } } file_p2p_proto_transaction_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AccountSignature); i { + switch v := v.(*ResourceBounds); i { case 0: return &v.state case 1: @@ -1962,7 +2086,7 @@ func file_p2p_proto_transaction_proto_init() { } } file_p2p_proto_transaction_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Transaction); i { + switch v := v.(*AccountSignature); i { case 0: return &v.state case 1: @@ -1974,7 +2098,7 @@ func file_p2p_proto_transaction_proto_init() { } } file_p2p_proto_transaction_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionsRequest); i { + switch v := v.(*Transaction); i { case 0: return &v.state case 1: @@ -1986,7 +2110,7 @@ func file_p2p_proto_transaction_proto_init() { } } file_p2p_proto_transaction_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Transactions); i { + switch v := v.(*TransactionWithReceipt); i { case 0: return &v.state case 1: @@ -1998,7 +2122,7 @@ func file_p2p_proto_transaction_proto_init() { } } file_p2p_proto_transaction_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionsResponse); i { + switch v := v.(*TransactionsRequest); i { case 0: return &v.state case 1: @@ -2010,7 +2134,7 @@ func file_p2p_proto_transaction_proto_init() { } } file_p2p_proto_transaction_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Transaction_DeclareV0); i { + switch v := v.(*TransactionsResponse); i { case 0: return &v.state case 1: @@ -2022,7 +2146,7 @@ func file_p2p_proto_transaction_proto_init() { } } file_p2p_proto_transaction_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Transaction_DeclareV1); i { + switch v := v.(*Transactions); i { case 0: return &v.state case 1: @@ -2034,7 +2158,7 @@ func file_p2p_proto_transaction_proto_init() { } } file_p2p_proto_transaction_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Transaction_DeclareV2); i { + switch v := v.(*Transaction_DeclareV0); i { case 0: return &v.state case 1: @@ -2046,7 +2170,7 @@ func file_p2p_proto_transaction_proto_init() { } } file_p2p_proto_transaction_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Transaction_DeclareV3); i { + switch v := v.(*Transaction_DeclareV1); i { case 0: return &v.state case 1: @@ -2058,7 +2182,7 @@ func file_p2p_proto_transaction_proto_init() { } } file_p2p_proto_transaction_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Transaction_Deploy); i { + switch v := v.(*Transaction_DeclareV2); i { case 0: return &v.state case 1: @@ -2070,7 +2194,7 @@ func file_p2p_proto_transaction_proto_init() { } } file_p2p_proto_transaction_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Transaction_DeployAccountV1); i { + switch v := v.(*Transaction_DeclareV3); i { case 0: return &v.state case 1: @@ -2082,7 +2206,7 @@ func file_p2p_proto_transaction_proto_init() { } } file_p2p_proto_transaction_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Transaction_DeployAccountV3); i { + switch v := v.(*Transaction_Deploy); i { case 0: return &v.state case 1: @@ -2094,7 +2218,7 @@ func file_p2p_proto_transaction_proto_init() { } } file_p2p_proto_transaction_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Transaction_InvokeV0); i { + switch v := v.(*Transaction_DeployAccountV1); i { case 0: return &v.state case 1: @@ -2106,7 +2230,7 @@ func file_p2p_proto_transaction_proto_init() { } } file_p2p_proto_transaction_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Transaction_InvokeV1); i { + switch v := v.(*Transaction_DeployAccountV3); i { case 0: return &v.state case 1: @@ -2118,7 +2242,7 @@ func file_p2p_proto_transaction_proto_init() { } } file_p2p_proto_transaction_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Transaction_InvokeV3); i { + switch v := v.(*Transaction_InvokeV0); i { case 0: return &v.state case 1: @@ -2130,7 +2254,31 @@ func file_p2p_proto_transaction_proto_init() { } } file_p2p_proto_transaction_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Transaction_L1HandlerV1); i { + switch v := v.(*Transaction_InvokeV1); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2p_proto_transaction_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Transaction_InvokeV3); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2p_proto_transaction_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Transaction_L1HandlerV0); i { case 0: return &v.state case 1: @@ -2142,7 +2290,7 @@ func file_p2p_proto_transaction_proto_init() { } } } - file_p2p_proto_transaction_proto_msgTypes[2].OneofWrappers = []interface{}{ + file_p2p_proto_transaction_proto_msgTypes[3].OneofWrappers = []interface{}{ (*Transaction_DeclareV0_)(nil), (*Transaction_DeclareV1_)(nil), (*Transaction_DeclareV2_)(nil), @@ -2155,8 +2303,8 @@ func file_p2p_proto_transaction_proto_init() { (*Transaction_InvokeV3_)(nil), (*Transaction_L1Handler)(nil), } - file_p2p_proto_transaction_proto_msgTypes[5].OneofWrappers = []interface{}{ - (*TransactionsResponse_Transactions)(nil), + file_p2p_proto_transaction_proto_msgTypes[6].OneofWrappers = []interface{}{ + (*TransactionsResponse_TransactionWithReceipt)(nil), (*TransactionsResponse_Fin)(nil), } type x struct{} @@ -2165,7 +2313,7 @@ func file_p2p_proto_transaction_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_p2p_proto_transaction_proto_rawDesc, NumEnums: 0, - NumMessages: 17, + NumMessages: 19, NumExtensions: 0, NumServices: 0, }, diff --git a/p2p/starknet/starknet_test.go b/p2p/starknet/starknet_test.go index d0f45c1b98..05d3b6dc67 100644 --- a/p2p/starknet/starknet_test.go +++ b/p2p/starknet/starknet_test.go @@ -25,7 +25,7 @@ package starknet_test // // handlerHost := mockNet.Host(handlerID) // handlerHost.SetStreamHandler(starknet.CurrentBlockHeaderPID(testNetwork), handler.CurrentBlockHeaderHandler) -// handlerHost.SetStreamHandler(starknet.BlockHeadersPID(&testNetwork), handler.BlockHeadersHandler) +// handlerHost.SetStreamHandler(starknet.HeadersPID(&testNetwork), handler.HeadersHandler) // handlerHost.SetStreamHandler(starknet.BlockBodiesPID(&testNetwork), handler.BlockBodiesHandler) // handlerHost.SetStreamHandler(starknet.EventsPID(&testNetwork), handler.EventsHandler) // handlerHost.SetStreamHandler(starknet.ReceiptsPID(&testNetwork), handler.ReceiptsHandler) diff --git a/p2p/sync.go b/p2p/sync.go index 40ca12903f..61afb503ee 100644 --- a/p2p/sync.go +++ b/p2p/sync.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "math/rand" + "reflect" "time" "github.com/NethermindEth/juno/adapters/p2p2core" @@ -17,6 +18,7 @@ import ( junoSync "github.com/NethermindEth/juno/sync" "github.com/NethermindEth/juno/utils" "github.com/NethermindEth/juno/utils/pipeline" + "github.com/davecgh/go-spew/spew" "github.com/libp2p/go-libp2p/core/host" "github.com/libp2p/go-libp2p/core/network" "github.com/libp2p/go-libp2p/core/peer" @@ -24,8 +26,6 @@ import ( "go.uber.org/zap" ) -const maxBlocks = 100 - type syncService struct { host host.Host network *utils.Network @@ -46,120 +46,72 @@ func newSyncService(bc *blockchain.Blockchain, h host.Host, n *utils.Network, lo } } -func (s *syncService) randomNodeHeight(ctx context.Context) (int, error) { - headersIt, err := s.client.RequestCurrentBlockHeader(ctx, &spec.CurrentBlockHeaderRequest{}) - if err != nil { - return 0, err - } - - var header *spec.BlockHeader - headersIt(func(res *spec.BlockHeadersResponse) bool { - for _, part := range res.GetPart() { - if _, ok := part.HeaderMessage.(*spec.BlockHeadersResponsePart_Header); ok { - header = part.GetHeader() - // found header - time to stop iterator - return false - } - } - - return true - }) - - return int(header.Number), nil -} - -const retryDuration = 5 * time.Second - -//nolint:funlen,gocyclo +//nolint:funlen func (s *syncService) start(ctx context.Context) { ctx, cancel := context.WithCancel(ctx) defer cancel() s.client = starknet.NewClient(s.randomPeerStream, s.network, s.log) - var randHeight int for i := 0; ; i++ { if err := ctx.Err(); err != nil { break } - s.log.Debugw("Continuous iteration", "i", i) iterCtx, cancelIteration := context.WithCancel(ctx) - var err error - randHeight, err = s.randomNodeHeight(iterCtx) - if err != nil { - cancelIteration() - if errors.Is(err, errNoPeers) { - s.log.Infow("No peers available", "retrying in", retryDuration.String()) - s.sleep(retryDuration) - } else { - s.logError("Failed to get random node height", err) - } - continue - } - var nextHeight int - if curHeight, err := s.blockchain.Height(); err == nil { //nolint:govet + if curHeight, err := s.blockchain.Height(); err == nil { nextHeight = int(curHeight) + 1 } else if !errors.Is(db.ErrKeyNotFound, err) { s.log.Errorw("Failed to get current height", "err", err) } - blockBehind := randHeight - (nextHeight - 1) - if blockBehind <= 0 { - s.log.Infow("Random node height is the same or less as local height", " retrying in", retryDuration.String(), - "Random node height", randHeight, "Current height", nextHeight-1) - cancelIteration() - s.sleep(retryDuration) - continue - } - - s.log.Infow("Start Pipeline", "Random node height", randHeight, "Current height", nextHeight-1, "Start", nextHeight, "End", - nextHeight+min(blockBehind, maxBlocks)) + s.log.Infow("Start Pipeline", "Current height", nextHeight-1, "Start", nextHeight) - commonIt := s.createIterator(uint64(nextHeight), uint64(min(blockBehind, maxBlocks))) - headersAndSigsCh, err := s.genHeadersAndSigs(iterCtx, commonIt) + // todo change iteration to fetch several objects uint64(min(blockBehind, maxBlocks)) + blockNumber := uint64(nextHeight) + headersAndSigsCh, err := s.genHeadersAndSigs(iterCtx, blockNumber) if err != nil { s.logError("Failed to get block headers parts", err) cancelIteration() continue } - blockBodiesCh, err := s.genBlockBodies(iterCtx, commonIt) + txsCh, err := s.genTransactions(iterCtx, blockNumber) if err != nil { - s.logError("Failed to get block bodies", err) + s.logError("Failed to get transactions", err) cancelIteration() continue } - txsCh, err := s.genTransactions(iterCtx, commonIt) + eventsCh, err := s.genEvents(iterCtx, blockNumber) if err != nil { - s.logError("Failed to get transactions", err) + s.logError("Failed to get classes", err) cancelIteration() continue } - receiptsCh, err := s.genReceipts(iterCtx, commonIt) + classesCh, err := s.genClasses(iterCtx, blockNumber) if err != nil { - s.logError("Failed to get receipts", err) + s.logError("Failed to get classes", err) cancelIteration() continue } - eventsCh, err := s.genEvents(iterCtx, commonIt) + stateDiffsCh, err := s.genStateDiffs(iterCtx, blockNumber) if err != nil { - s.logError("Failed to get events", err) + s.logError("Failed to get state diffs", err) cancelIteration() continue } blocksCh := pipeline.Bridge(iterCtx, s.processSpecBlockParts(iterCtx, uint64(nextHeight), pipeline.FanIn(iterCtx, pipeline.Stage(iterCtx, headersAndSigsCh, specBlockPartsFunc[specBlockHeaderAndSigs]), - pipeline.Stage(iterCtx, blockBodiesCh, specBlockPartsFunc[specBlockBody]), - pipeline.Stage(iterCtx, txsCh, specBlockPartsFunc[specTransactions]), - pipeline.Stage(iterCtx, receiptsCh, specBlockPartsFunc[specReceipts]), + pipeline.Stage(iterCtx, classesCh, specBlockPartsFunc[specClasses]), + pipeline.Stage(iterCtx, stateDiffsCh, specBlockPartsFunc[specContractDiffs]), + pipeline.Stage(iterCtx, txsCh, specBlockPartsFunc[specTxWithReceipts]), pipeline.Stage(iterCtx, eventsCh, specBlockPartsFunc[specEvents]), ))) @@ -179,15 +131,15 @@ func (s *syncService) start(ctx context.Context) { break } - s.log.Infow("Stored Block", "number", b.block.Number, "hash", b.block.Hash.ShortString(), "root", - b.block.GlobalStateRoot.ShortString()) + s.log.Infow("Stored Block", "number", b.block.Number, "hash", b.block.Hash.ShortString(), + "root", b.block.GlobalStateRoot.ShortString()) s.listener.OnSyncStepDone(junoSync.OpStore, b.block.Number, time.Since(storeTimer)) } cancelIteration() } } -func specBlockPartsFunc[T specBlockHeaderAndSigs | specBlockBody | specTransactions | specReceipts | specEvents](i T) specBlockParts { +func specBlockPartsFunc[T specBlockHeaderAndSigs | specTxWithReceipts | specEvents | specClasses | specContractDiffs](i T) specBlockParts { return specBlockParts(i) } @@ -202,6 +154,8 @@ func (s *syncService) logError(msg string, err error) { } log.Errorw(msg, "err", err) + } else { + s.log.Debugw("Sync context canceled") } } @@ -224,10 +178,10 @@ func (s *syncService) processSpecBlockParts( defer close(orderedBlockBodiesCh) specBlockHeadersAndSigsM := make(map[uint64]specBlockHeaderAndSigs) - specBlockBodiesM := make(map[uint64]specBlockBody) - specTransactionsM := make(map[uint64]specTransactions) - specReceiptsM := make(map[uint64]specReceipts) + specClassesM := make(map[uint64]specClasses) + specTransactionsM := make(map[uint64]specTxWithReceipts) specEventsM := make(map[uint64]specEvents) + specContractDiffsM := make(map[uint64]specContractDiffs) curBlockNum := startingBlockNum for part := range specBlockPartsCh { @@ -236,38 +190,40 @@ func (s *syncService) processSpecBlockParts( default: switch p := part.(type) { case specBlockHeaderAndSigs: - s.log.Debugw("Received Block Header and Signatures", "blockNumber", p.header.Number) + s.log.Debugw("Received Block Header with signatures", "blockNumber", p.blockNumber()) if _, ok := specBlockHeadersAndSigsM[part.blockNumber()]; !ok { specBlockHeadersAndSigsM[part.blockNumber()] = p } - case specBlockBody: - s.log.Debugw("Received Block Body parts", "blockNumber", p.id.Number) - if _, ok := specBlockBodiesM[part.blockNumber()]; !ok { - specBlockBodiesM[part.blockNumber()] = p - } - case specTransactions: - s.log.Debugw("Received Transactions", "blockNumber", p.id.Number) + case specTxWithReceipts: + s.log.Debugw("Received Transactions with receipts", "blockNumber", p.blockNumber(), "txLen", len(p.txs)) if _, ok := specTransactionsM[part.blockNumber()]; !ok { specTransactionsM[part.blockNumber()] = p } - case specReceipts: - s.log.Debugw("Received Receipts", "blockNumber", p.id.Number) - if _, ok := specReceiptsM[part.blockNumber()]; !ok { - specReceiptsM[part.blockNumber()] = p - } case specEvents: - s.log.Debugw("Received Events", "blockNumber", p.id.Number) + s.log.Debugw("Received Events", "blockNumber", p.blockNumber(), "len", len(p.events)) if _, ok := specEventsM[part.blockNumber()]; !ok { specEventsM[part.blockNumber()] = p } + case specClasses: + s.log.Debugw("Received Classes", "blockNumber", p.blockNumber()) + if _, ok := specClassesM[part.blockNumber()]; !ok { + specClassesM[part.blockNumber()] = p + } + case specContractDiffs: + s.log.Debugw("Received ContractDiffs", "blockNumber", p.blockNumber()) + if _, ok := specContractDiffsM[part.blockNumber()]; !ok { + specContractDiffsM[part.blockNumber()] = p + } + default: + s.log.Warnw("Unsupported part type", "blockNumber", part.blockNumber(), "type", reflect.TypeOf(p)) } - headerAndSig, ok1 := specBlockHeadersAndSigsM[curBlockNum] - body, ok2 := specBlockBodiesM[curBlockNum] - txs, ok3 := specTransactionsM[curBlockNum] - rs, ok4 := specReceiptsM[curBlockNum] - es, ok5 := specEventsM[curBlockNum] - if ok1 && ok2 && ok3 && ok4 && ok5 { + headerAndSig, okHeader := specBlockHeadersAndSigsM[curBlockNum] + txs, okTxs := specTransactionsM[curBlockNum] + es, okEvents := specEventsM[curBlockNum] + cls, okClasses := specClassesM[curBlockNum] + diffs, okDiffs := specContractDiffsM[curBlockNum] + if okHeader && okTxs && okEvents && okClasses && okDiffs { s.log.Debugw(fmt.Sprintf("----- Received all block parts from peers for block number %d-----", curBlockNum)) select { @@ -277,7 +233,7 @@ func (s *syncService) processSpecBlockParts( if curBlockNum > 0 { // First check cache if the header is not present, then get it from the db. if oldHeader, ok := specBlockHeadersAndSigsM[curBlockNum-1]; ok { - prevBlockRoot = p2p2core.AdaptHash(oldHeader.header.State.Root) + prevBlockRoot = p2p2core.AdaptHash(oldHeader.header.StateRoot) } else { oldHeader, err := s.blockchain.BlockHeaderByNumber(curBlockNum - 1) if err != nil { @@ -288,16 +244,14 @@ func (s *syncService) processSpecBlockParts( } } - orderedBlockBodiesCh <- s.adaptAndSanityCheckBlock(ctx, headerAndSig.header, headerAndSig.sig, body.stateDiff, - body.classes, txs.txs, rs.receipts, es.events, prevBlockRoot) + orderedBlockBodiesCh <- s.adaptAndSanityCheckBlock(ctx, headerAndSig.header, diffs.contractDiffs, + cls.classes, txs.txs, txs.receipts, es.events, prevBlockRoot) } if curBlockNum > 0 { delete(specBlockHeadersAndSigsM, curBlockNum-1) } - delete(specBlockBodiesM, curBlockNum) delete(specTransactionsM, curBlockNum) - delete(specReceiptsM, curBlockNum) delete(specEventsM, curBlockNum) curBlockNum++ } @@ -307,8 +261,9 @@ func (s *syncService) processSpecBlockParts( return orderedBlockBodiesCh } -func (s *syncService) adaptAndSanityCheckBlock(ctx context.Context, header *spec.BlockHeader, sig *spec.Signatures, diff *spec.StateDiff, - classes *spec.Classes, txs *spec.Transactions, receipts *spec.Receipts, events *spec.Events, prevBlockRoot *felt.Felt, +//nolint:gocyclo,funlen +func (s *syncService) adaptAndSanityCheckBlock(ctx context.Context, header *spec.SignedBlockHeader, contractDiffs []*spec.ContractDiff, + classes []*spec.Class, txs []*spec.Transaction, receipts []*spec.Receipt, events []*spec.Event, prevBlockRoot *felt.Felt, ) <-chan blockBody { bodyCh := make(chan blockBody) go func() { @@ -320,29 +275,57 @@ func (s *syncService) adaptAndSanityCheckBlock(ctx context.Context, header *spec coreBlock := new(core.Block) var coreTxs []core.Transaction - for _, i := range txs.GetItems() { - coreTxs = append(coreTxs, p2p2core.AdaptTransaction(i, s.network)) + for _, tx := range txs { + coreTxs = append(coreTxs, p2p2core.AdaptTransaction(tx, s.network)) } coreBlock.Transactions = coreTxs txHashEventsM := make(map[felt.Felt][]*core.Event) - for _, item := range events.GetItems() { - txH := p2p2core.AdaptHash(item.TransactionHash) - txHashEventsM[*txH] = append(txHashEventsM[*txH], p2p2core.AdaptEvent(item)) + for _, event := range events { + txH := p2p2core.AdaptHash(event.TransactionHash) + txHashEventsM[*txH] = append(txHashEventsM[*txH], p2p2core.AdaptEvent(event)) } - coreReceipts := utils.Map(receipts.GetItems(), p2p2core.AdaptReceipt) + var coreReceipts []*core.TransactionReceipt + for i, r := range receipts { + txHash := coreTxs[i].Hash() + if txHash == nil { + spew.Dump(coreTxs[i]) + panic(fmt.Errorf("TX hash %d is nil", i)) + } + coreReceipts = append(coreReceipts, p2p2core.AdaptReceipt(r, txHash)) + } coreReceipts = utils.Map(coreReceipts, func(r *core.TransactionReceipt) *core.TransactionReceipt { r.Events = txHashEventsM[*r.TransactionHash] return r }) coreBlock.Receipts = coreReceipts - coreHeader := p2p2core.AdaptBlockHeader(header, sig.GetSignatures()) + eventsBloom := core.EventsBloom(coreBlock.Receipts) + coreBlock.Header = p2p2core.AdaptBlockHeader(header, eventsBloom) + + if int(coreBlock.TransactionCount) != len(coreBlock.Transactions) { + s.log.Errorw( + "Number of transactions != count", + "transactionCount", + coreBlock.TransactionCount, + "len(transactions)", + len(coreBlock.Transactions), + ) + return + } + if int(coreBlock.EventCount) != len(events) { + s.log.Errorw( + "Number of events != count", + "eventCount", + coreBlock.EventCount, + "len(events)", + len(events), + ) + return + } - coreBlock.Header = &coreHeader - coreBlock.EventsBloom = core.EventsBloom(coreBlock.Receipts) h, err := core.BlockHash(coreBlock) if err != nil { bodyCh <- blockBody{err: fmt.Errorf("block hash calculation error: %v", err)} @@ -351,8 +334,8 @@ func (s *syncService) adaptAndSanityCheckBlock(ctx context.Context, header *spec coreBlock.Hash = h newClasses := make(map[felt.Felt]core.Class) - for _, i := range classes.GetClasses() { - coreC := p2p2core.AdaptClass(i) + for _, cls := range classes { + coreC := p2p2core.AdaptClass(cls) h, err = coreC.Hash() if err != nil { bodyCh <- blockBody{err: fmt.Errorf("class hash calculation error: %v", err)} @@ -365,11 +348,26 @@ func (s *syncService) adaptAndSanityCheckBlock(ctx context.Context, header *spec // Note: Parts of the State Update are created from Blockchain object as the Store and SanityCheck functions require a State // Update but there is no such message in P2P. + stateReader, stateCloser, err := s.blockchain.StateAtBlockNumber(coreBlock.Number - 1) + if err != nil && !errors.Is(err, db.ErrKeyNotFound) { + // todo(kirill) change to shutdown + panic(err) + } + defer func() { + if stateCloser == nil { + return + } + + if closeErr := stateCloser(); closeErr != nil { + s.log.Errorw("Failed to close state reader", "err", closeErr) + } + }() + stateUpdate := &core.StateUpdate{ BlockHash: coreBlock.Hash, NewRoot: coreBlock.GlobalStateRoot, OldRoot: prevBlockRoot, - StateDiff: p2p2core.AdaptStateDiff(diff, classes.GetClasses()), + StateDiff: p2p2core.AdaptStateDiff(stateReader, contractDiffs, classes), } commitments, err := s.blockchain.SanityCheckNewHeight(coreBlock, stateUpdate, newClasses) @@ -393,15 +391,15 @@ type specBlockParts interface { } type specBlockHeaderAndSigs struct { - header *spec.BlockHeader - sig *spec.Signatures + header *spec.SignedBlockHeader } func (s specBlockHeaderAndSigs) blockNumber() uint64 { return s.header.Number } -func (s *syncService) genHeadersAndSigs(ctx context.Context, it *spec.Iteration) (<-chan specBlockHeaderAndSigs, error) { +func (s *syncService) genHeadersAndSigs(ctx context.Context, blockNumber uint64) (<-chan specBlockHeaderAndSigs, error) { + it := s.createIteratorForBlock(blockNumber) headersIt, err := s.client.RequestBlockHeaders(ctx, &spec.BlockHeadersRequest{Iteration: it}) if err != nil { return nil, err @@ -413,15 +411,14 @@ func (s *syncService) genHeadersAndSigs(ctx context.Context, it *spec.Iteration) headersIt(func(res *spec.BlockHeadersResponse) bool { headerAndSig := specBlockHeaderAndSigs{} - for _, part := range res.GetPart() { - switch part.HeaderMessage.(type) { - case *spec.BlockHeadersResponsePart_Header: - headerAndSig.header = part.GetHeader() - case *spec.BlockHeadersResponsePart_Signatures: - headerAndSig.sig = part.GetSignatures() - case *spec.BlockHeadersResponsePart_Fin: - return false - } + switch v := res.HeaderMessage.(type) { + case *spec.BlockHeadersResponse_Header: + headerAndSig.header = v.Header + case *spec.BlockHeadersResponse_Fin: + return false + default: + s.log.Warnw("Unexpected HeaderMessage from getBlockHeaders", "v", v) + return false } select { @@ -437,117 +434,111 @@ func (s *syncService) genHeadersAndSigs(ctx context.Context, it *spec.Iteration) return headersAndSigCh, nil } -type specBlockBody struct { - id *spec.BlockID - proof *spec.BlockProof - classes *spec.Classes - stateDiff *spec.StateDiff +type specClasses struct { + number uint64 + classes []*spec.Class } -func (s specBlockBody) blockNumber() uint64 { - return s.id.Number +func (s specClasses) blockNumber() uint64 { + return s.number } -func (s *syncService) genBlockBodies(ctx context.Context, it *spec.Iteration) (<-chan specBlockBody, error) { - blockIt, err := s.client.RequestBlockBodies(ctx, &spec.BlockBodiesRequest{Iteration: it}) +func (s *syncService) genClasses(ctx context.Context, blockNumber uint64) (<-chan specClasses, error) { + it := s.createIteratorForBlock(blockNumber) + classesIt, err := s.client.RequestClasses(ctx, &spec.ClassesRequest{Iteration: it}) if err != nil { return nil, err } - specBodiesCh := make(chan specBlockBody) + classesCh := make(chan specClasses) go func() { - defer close(specBodiesCh) - curBlockBody := new(specBlockBody) - // Assumes that all parts of the same block will arrive before the next block parts - // Todo: the above assumption may not be true. A peer may decide to send different parts of the block in different order - // If the above assumption is not true we should return separate channels for each of the parts. Also, see todo above specBlockBody - // on line 317 in p2p/sync.go - - blockIt(func(res *spec.BlockBodiesResponse) bool { - switch res.BodyMessage.(type) { - case *spec.BlockBodiesResponse_Classes: - if curBlockBody.id == nil { - curBlockBody.id = res.GetId() - } - curBlockBody.classes = res.GetClasses() - case *spec.BlockBodiesResponse_Diff: - if curBlockBody.id == nil { - curBlockBody.id = res.GetId() - } - curBlockBody.stateDiff = res.GetDiff() - case *spec.BlockBodiesResponse_Proof: - if curBlockBody.id == nil { - curBlockBody.id = res.GetId() - } - curBlockBody.proof = res.GetProof() - case *spec.BlockBodiesResponse_Fin: - if curBlockBody.id != nil { - select { - case <-ctx.Done(): - return false - default: - specBodiesCh <- *curBlockBody - curBlockBody = new(specBlockBody) - } - } + defer close(classesCh) + + var classes []*spec.Class + classesIt(func(res *spec.ClassesResponse) bool { + switch v := res.ClassMessage.(type) { + case *spec.ClassesResponse_Class: + classes = append(classes, v.Class) + return true + case *spec.ClassesResponse_Fin: + return false + default: + s.log.Warnw("Unexpected ClassMessage from getClasses", "v", v) + return false } - - return true }) - }() - return specBodiesCh, nil + select { + case <-ctx.Done(): + case classesCh <- specClasses{ + number: blockNumber, + classes: classes, + }: + s.log.Debugw("Received classes for block", "blockNumber", blockNumber, "lenClasses", len(classes)) + } + }() + return classesCh, nil } -type specReceipts struct { - id *spec.BlockID - receipts *spec.Receipts +type specContractDiffs struct { + number uint64 + contractDiffs []*spec.ContractDiff } -func (s specReceipts) blockNumber() uint64 { - return s.id.Number +func (s specContractDiffs) blockNumber() uint64 { + return s.number } -//nolint:dupl -func (s *syncService) genReceipts(ctx context.Context, it *spec.Iteration) (<-chan specReceipts, error) { - receiptsIt, err := s.client.RequestReceipts(ctx, &spec.ReceiptsRequest{Iteration: it}) +func (s *syncService) genStateDiffs(ctx context.Context, blockNumber uint64) (<-chan specContractDiffs, error) { + it := s.createIteratorForBlock(blockNumber) + stateDiffsIt, err := s.client.RequestStateDiffs(ctx, &spec.StateDiffsRequest{Iteration: it}) if err != nil { return nil, err } - receiptsCh := make(chan specReceipts) + stateDiffsCh := make(chan specContractDiffs) go func() { - defer close(receiptsCh) - - receiptsIt(func(res *spec.ReceiptsResponse) bool { - switch res.Responses.(type) { - case *spec.ReceiptsResponse_Receipts: - select { - case <-ctx.Done(): - return false - case receiptsCh <- specReceipts{res.GetId(), res.GetReceipts()}: - } - case *spec.ReceiptsResponse_Fin: + defer close(stateDiffsCh) + + var contractDiffs []*spec.ContractDiff + stateDiffsIt(func(res *spec.StateDiffsResponse) bool { + switch v := res.StateDiffMessage.(type) { + case *spec.StateDiffsResponse_ContractDiff: + contractDiffs = append(contractDiffs, v.ContractDiff) + return true + case *spec.StateDiffsResponse_DeclaredClass: + s.log.Warnw("Unimplemented message StateDiffsResponse_DeclaredClass") + return true + case *spec.StateDiffsResponse_Fin: + return false + default: + s.log.Warnw("Unexpected ClassMessage from getStateDiffs", "v", v) return false } - - return true }) - }() - return receiptsCh, nil + select { + case <-ctx.Done(): + case stateDiffsCh <- specContractDiffs{ + number: blockNumber, + contractDiffs: contractDiffs, + }: + } + }() + return stateDiffsCh, nil } type specEvents struct { - id *spec.BlockID - events *spec.Events + number uint64 + events []*spec.Event } func (s specEvents) blockNumber() uint64 { - return s.id.Number + return s.number } -func (s *syncService) genEvents(ctx context.Context, it *spec.Iteration) (<-chan specEvents, error) { +func (s *syncService) genEvents(ctx context.Context, blockNumber uint64) (<-chan specEvents, error) { + it := s.createIteratorForBlock(blockNumber) eventsIt, err := s.client.RequestEvents(ctx, &spec.EventsRequest{Iteration: it}) if err != nil { return nil, err @@ -557,59 +548,82 @@ func (s *syncService) genEvents(ctx context.Context, it *spec.Iteration) (<-chan go func() { defer close(eventsCh) + var events []*spec.Event eventsIt(func(res *spec.EventsResponse) bool { - switch res.Responses.(type) { - case *spec.EventsResponse_Events: - select { - case <-ctx.Done(): - return false - case eventsCh <- specEvents{res.GetId(), res.GetEvents()}: - return true - } + switch v := res.EventMessage.(type) { + case *spec.EventsResponse_Event: + events = append(events, v.Event) + return true case *spec.EventsResponse_Fin: return false + default: + s.log.Warnw("Unexpected EventMessage from getEvents", "v", v) + return false } - - return true }) + + select { + case <-ctx.Done(): + case eventsCh <- specEvents{ + number: blockNumber, + events: events, + }: + } }() return eventsCh, nil } -type specTransactions struct { - id *spec.BlockID - txs *spec.Transactions +type specTxWithReceipts struct { + number uint64 + txs []*spec.Transaction + receipts []*spec.Receipt } -func (s specTransactions) blockNumber() uint64 { - return s.id.Number +func (s specTxWithReceipts) blockNumber() uint64 { + return s.number } -//nolint:dupl -func (s *syncService) genTransactions(ctx context.Context, it *spec.Iteration) (<-chan specTransactions, error) { +func (s *syncService) genTransactions(ctx context.Context, blockNumber uint64) (<-chan specTxWithReceipts, error) { + it := s.createIteratorForBlock(blockNumber) txsIt, err := s.client.RequestTransactions(ctx, &spec.TransactionsRequest{Iteration: it}) if err != nil { return nil, err } - txsCh := make(chan specTransactions) + txsCh := make(chan specTxWithReceipts) go func() { defer close(txsCh) + var ( + transactions []*spec.Transaction + receipts []*spec.Receipt + ) txsIt(func(res *spec.TransactionsResponse) bool { - switch res.Responses.(type) { - case *spec.TransactionsResponse_Transactions: - select { - case <-ctx.Done(): - return false - case txsCh <- specTransactions{res.GetId(), res.GetTransactions()}: - } + switch v := res.TransactionMessage.(type) { + case *spec.TransactionsResponse_TransactionWithReceipt: + txWithReceipt := v.TransactionWithReceipt + transactions = append(transactions, txWithReceipt.Transaction) + receipts = append(receipts, txWithReceipt.Receipt) + return true case *spec.TransactionsResponse_Fin: return false + default: + s.log.Warnw("Unexpected TransactionMessage from getTransactions", "v", v) + return false } - - return true }) + + s.log.Debugw("Transactions length", "len", len(transactions)) + spexTxs := specTxWithReceipts{ + number: blockNumber, + txs: transactions, + receipts: receipts, + } + select { + case <-ctx.Done(): + return + case txsCh <- spexTxs: + } }() return txsCh, nil } @@ -654,14 +668,11 @@ func (s *syncService) removePeer(id peer.ID) { s.host.Peerstore().ClearAddrs(id) } -func (s *syncService) createIterator(start, limit uint64) *spec.Iteration { - if limit == 0 { - limit = 1 - } +func (s *syncService) createIteratorForBlock(blockNumber uint64) *spec.Iteration { return &spec.Iteration{ - Start: &spec.Iteration_BlockNumber{BlockNumber: start}, + Start: &spec.Iteration_BlockNumber{BlockNumber: blockNumber}, Direction: spec.Iteration_Forward, - Limit: limit, + Limit: 1, Step: 1, } } @@ -670,6 +681,7 @@ func (s *syncService) WithListener(l junoSync.EventListener) { s.listener = l } +//nolint:unused func (s *syncService) sleep(d time.Duration) { s.log.Debugw("Sleeping...", "for", d) time.Sleep(d) diff --git a/utils/network.go b/utils/network.go index fa86339653..eac5492c3d 100644 --- a/utils/network.go +++ b/utils/network.go @@ -8,7 +8,6 @@ import ( "github.com/NethermindEth/juno/core/felt" "github.com/ethereum/go-ethereum/common" - "github.com/libp2p/go-libp2p/core/protocol" "github.com/spf13/pflag" ) @@ -162,10 +161,6 @@ func (n *Network) L2ChainIDFelt() *felt.Felt { return new(felt.Felt).SetBytes([]byte(n.L2ChainID)) } -func (n *Network) ProtocolID() protocol.ID { - return protocol.ID(fmt.Sprintf("/starknet/%s", n.String())) -} - func knownNetworkNames() []string { networks := []Network{Mainnet, Sepolia, SepoliaIntegration} From c9aa5ce7d62657bc5e26aec9b5c96370221f646c Mon Sep 17 00:00:00 2001 From: Mario Apra Date: Tue, 9 Jul 2024 19:57:30 +0100 Subject: [PATCH 23/69] Update docs.starknet.io links (#1929) Some of the links were broken and some of them were redirecting. There were also cases where I couldn't find where it was refering to, so I decided to just delete the link This commit is co-authored. I got the inspiration from https://github.com/NethermindEth/juno/pull/1564 and I improved a little bit Co-authored-by: Krauspt --- README.md | 2 +- core/contract.go | 2 +- core/crypto/keccak.go | 2 +- core/crypto/pedersen_hash.go | 4 ++-- core/crypto/pedersen_hash_test.go | 3 +-- core/crypto/poseidon_hash.go | 4 ++-- core/state.go | 1 - core/trie/node.go | 2 +- core/trie/trie.go | 4 +--- utils/network.go | 2 +- 10 files changed, 11 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 4dcac4a138..b947d95c9a 100644 --- a/README.md +++ b/README.md @@ -166,7 +166,7 @@ After following these steps, Juno should be up and running on your machine, util ## ✔ Supported Features -- Starknet [v0.13.1](https://docs.starknet.io/documentation/starknet_versions/version_notes/) support. +- Starknet [v0.13.1](https://docs.starknet.io/starknet-versions/version-notes/) support. - JSON-RPC [v0.7.0](https://github.com/starkware-libs/starknet-specs/releases/tag/v0.7.0-rc2) (Available under `/v0_7` and default`/` endpoints) - `starknet_chainId` - `starknet_blockNumber` diff --git a/core/contract.go b/core/contract.go index fe679fd79d..2af1fd8c4c 100644 --- a/core/contract.go +++ b/core/contract.go @@ -69,7 +69,7 @@ func ContractAddress(callerAddress, classHash, salt *felt.Felt, constructorCallD prefix := new(felt.Felt).SetBytes([]byte("STARKNET_CONTRACT_ADDRESS")) callDataHash := crypto.PedersenArray(constructorCallData...) - // https://docs.starknet.io/documentation/architecture_and_concepts/Contracts/contract-address + // https://docs.starknet.io/architecture-and-concepts/smart-contracts/contract-address/ return crypto.PedersenArray( prefix, callerAddress, diff --git a/core/crypto/keccak.go b/core/crypto/keccak.go index bb217f9890..8bded1232b 100644 --- a/core/crypto/keccak.go +++ b/core/crypto/keccak.go @@ -7,7 +7,7 @@ import ( // StarknetKeccak implements [Starknet keccak] // -// [Starknet keccak]: https://docs.starknet.//io/documentation/develop/Hashing/hash-functions/#starknet_keccak +// [Starknet keccak]: https://docs.starknet.io/architecture-and-concepts/cryptography/hash-functions/#starknet_keccak func StarknetKeccak(b []byte) (*felt.Felt, error) { h := sha3.NewLegacyKeccak256() _, err := h.Write(b) diff --git a/core/crypto/pedersen_hash.go b/core/crypto/pedersen_hash.go index 8685af1a46..583d557cb9 100644 --- a/core/crypto/pedersen_hash.go +++ b/core/crypto/pedersen_hash.go @@ -8,7 +8,7 @@ import ( // PedersenArray implements [Pedersen array hashing]. // -// [Pedersen array hashing]: https://docs.starknet.io/documentation/develop/Hashing/hash-functions/#array_hashing +// [Pedersen array hashing]: https://docs.starknet.io/architecture-and-concepts/cryptography/hash-functions/#array_hashing func PedersenArray(elems ...*felt.Felt) *felt.Felt { var digest PedersenDigest return digest.Update(elems...).Finish() @@ -16,7 +16,7 @@ func PedersenArray(elems ...*felt.Felt) *felt.Felt { // Pedersen implements the [Pedersen hash]. // -// [Pedersen hash]: https://docs.starknet.io/documentation/develop/Hashing/hash-functions/#pedersen_hash +// [Pedersen hash]: https://docs.starknet.io/architecture-and-concepts/cryptography/hash-functions/#pedersen_hash func Pedersen(a, b *felt.Felt) *felt.Felt { hash := pedersenhash.Pedersen(a.Impl(), b.Impl()) return felt.NewFelt(&hash) diff --git a/core/crypto/pedersen_hash_test.go b/core/crypto/pedersen_hash_test.go index f4352dd594..d93dc5e774 100644 --- a/core/crypto/pedersen_hash_test.go +++ b/core/crypto/pedersen_hash_test.go @@ -58,8 +58,7 @@ func TestPedersenArray(t *testing.T) { // Contract address calculation. See the following links for how the // calculation is carried out and the result referenced. // - // https://docs.starknet.io/documentation/develop/Contracts/contract-address/ - // https://alpha4.starknet.io/feeder_gateway/get_transaction?transactionHash=0x1b50380d45ebd70876518203f131a12428b2ac1a3a75f1a74241a4abdd614e8 + // https://docs.starknet.io/architecture-and-concepts/smart-contracts/contract-address/ { input: []string{ // Hex representation of []byte("STARKNET_CONTRACT_ADDRESS"). diff --git a/core/crypto/poseidon_hash.go b/core/crypto/poseidon_hash.go index 623f108d35..eaf9e1f5c2 100644 --- a/core/crypto/poseidon_hash.go +++ b/core/crypto/poseidon_hash.go @@ -55,7 +55,7 @@ var two = new(felt.Felt).SetUint64(2) // Poseidon implements the [Poseidon hash]. // -// [Poseidon hash]: https://docs.starknet.io/documentation/architecture_and_concepts/Hashing/hash-functions/#poseidon_hash +// [Poseidon hash]: https://docs.starknet.io/architecture-and-concepts/cryptography/hash-functions/#poseidon_hash func Poseidon(x, y *felt.Felt) *felt.Felt { state := []felt.Felt{*x, *y, *two} HadesPermutation(state) @@ -70,7 +70,7 @@ var one = new(felt.Felt).SetUint64(1) // // PoseidonArray implements [Poseidon array hashing]. // -// [Poseidon array hashing]: https://docs.starknet.io/documentation/architecture_and_concepts/Hashing/hash-functions/#poseidon_array_hash +// [Poseidon array hashing]: https://docs.starknet.io/architecture-and-concepts/cryptography/hash-functions/#poseidon_array_hash func PoseidonArray(elems ...*felt.Felt) *felt.Felt { state := []felt.Felt{{}, {}, {}} diff --git a/core/state.go b/core/state.go index 97ea2163bf..e19b57b216 100644 --- a/core/state.go +++ b/core/state.go @@ -497,7 +497,6 @@ func (s *State) updateDeclaredClassesTrie(declaredClasses map[felt.Felt]*felt.Fe continue } - // https://docs.starknet.io/documentation/starknet_versions/upcoming_versions/#commitment leafValue := crypto.Poseidon(leafVersion, compiledClassHash) if _, err = classesTrie.Put(&classHash, leafValue); err != nil { return err diff --git a/core/trie/node.go b/core/trie/node.go index f2a5d92488..2975607390 100644 --- a/core/trie/node.go +++ b/core/trie/node.go @@ -8,6 +8,7 @@ import ( ) // A Node represents a node in the [Trie] +// https://docs.starknet.io/architecture-and-concepts/network-architecture/starknet-state/#trie_construction type Node struct { Value *felt.Felt Left *Key @@ -26,7 +27,6 @@ func (n *Node) Hash(path *Key, hashFunc hashFunc) *felt.Felt { } pathFelt := path.Felt() - // https://docs.starknet.io/documentation/develop/State/starknet-state/ hash := hashFunc(n.Value, &pathFelt) pathFelt.SetUint64(uint64(path.Len())) return hash.Add(hash, &pathFelt) diff --git a/core/trie/trie.go b/core/trie/trie.go index 4339f39cd1..772ccdce4c 100644 --- a/core/trie/trie.go +++ b/core/trie/trie.go @@ -31,7 +31,7 @@ type hashFunc func(*felt.Felt, *felt.Felt) *felt.Felt // - key: represents the storage key for trie [Node]s. It is the full path to the node from the // root. // -// [specification]: https://docs.starknet.io/documentation/develop/State/starknet-state/ +// [specification]: https://docs.starknet.io/architecture-and-concepts/network-architecture/starknet-state/#merkle_patricia_trie type Trie struct { height uint8 rootKey *Key @@ -117,8 +117,6 @@ func isSubset(longerKey, shorterKey *Key) bool { // path returns the path as mentioned in the [specification] for commitment calculations. // path is suffix of key that diverges from parentKey. For example, // for a key 0b1011 and parentKey 0b10, this function would return the path object of 0b0. -// -// [specification]: https://docs.starknet.io/documentation/develop/State/starknet-state/ func path(key, parentKey *Key) Key { path := *key // drop parent key, and one more MSB since left/right relation already encodes that information diff --git a/utils/network.go b/utils/network.go index eac5492c3d..430510e6fb 100644 --- a/utils/network.go +++ b/utils/network.go @@ -41,7 +41,7 @@ var ( _ pflag.Value = (*Network)(nil) _ encoding.TextUnmarshaler = (*Network)(nil) - // The docs states the addresses for each network: https://docs.starknet.io/documentation/useful_info/ + // The docs states the addresses for each network: https://docs.starknet.io/tools/important-addresses/ Mainnet = Network{ Name: "mainnet", FeederURL: "https://alpha-mainnet.starknet.io/feeder_gateway/", From f91bd60943ccb615c50e0ec4959aaa22dd00a52f Mon Sep 17 00:00:00 2001 From: Mario Apra Date: Thu, 11 Jul 2024 10:55:47 +0100 Subject: [PATCH 24/69] Fix how to promote to staging/prod (#1932) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add checkout step to promote_to_staging in ci-cd-pipeline.yml This is necessary because at the Verify Deployment Version step, there is a call for a file that is in the repository - Stop using jf cli to do the promotion For some reason the jf rt dpr moves/copies only ‘image’ without manifests. This means that instead of relying on jFrog to do the promotion, even though it will be sub-optimal, relying on Docker seems to be safer --- .github/workflows/ci-cd-pipeline.yml | 33 ++++++++++++++++++---------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci-cd-pipeline.yml b/.github/workflows/ci-cd-pipeline.yml index d5c8662a1b..44fdcb853c 100644 --- a/.github/workflows/ci-cd-pipeline.yml +++ b/.github/workflows/ci-cd-pipeline.yml @@ -93,15 +93,21 @@ jobs: environment: name: Staging steps: - - name: Setup JFrog CLI - uses: jfrog/setup-jfrog-cli@v4 - env: - JF_URL: ${{ vars.JFROG_URL}} - JF_ACCESS_TOKEN: ${{ secrets.ARTIFACTORY_NUBIA_CONTRIBUTOR }} + - name: Checkout + uses: actions/checkout@v4 + + - name: Login to registry + run: | + docker login ${{ env.DOCKER_REGISTRY }} -u ${{ vars.ARTIFACTORY_NUBIA_USER }} -p ${{ secrets.ARTIFACTORY_NUBIA_CONTRIBUTOR}} - name: Promote to Staging run: | - jf rt dpr juno/${{ needs.build_docker_image.outputs.DOCKER_IMAGE_TAG }} ${{ env.REPO_DEV }} ${{ env.REPO_STAGING }} + OLD_TAG=${{ env.DOCKER_REGISTRY }}/${{ env.REPO_DEV }}/juno:${{ needs.build_docker_image.outputs.DOCKER_IMAGE_TAG }} + NEW_TAG=${{ env.DOCKER_REGISTRY }}/${{ env.REPO_STAGING }}/juno:${{ needs.build_docker_image.outputs.DOCKER_IMAGE_TAG }} + + docker pull $OLD_TAG + docker tag $OLD_TAG $NEW_TAG + docker push $NEW_TAG - name: Verify Deployment Version (Staging) run: | @@ -127,15 +133,18 @@ jobs: environment: name: Production steps: - - name: Setup JFrog CLI - uses: jfrog/setup-jfrog-cli@v4 - env: - JF_URL: ${{ vars.JFROG_URL}} - JF_ACCESS_TOKEN: ${{ secrets.ARTIFACTORY_NUBIA_CONTRIBUTOR }} + - name: Login to registry + run: | + docker login ${{ env.DOCKER_REGISTRY }} -u ${{ vars.ARTIFACTORY_NUBIA_USER }} -p ${{ secrets.ARTIFACTORY_NUBIA_CONTRIBUTOR}} - name: Promote to Production run: | - jf rt dpr juno/${{ needs.build_docker_image.outputs.DOCKER_IMAGE_TAG }} ${{ env.REPO_STAGING }} ${{ env.REPO_PROD }} + OLD_TAG=${{ env.DOCKER_REGISTRY }}/${{ env.REPO_STAGING }}/juno:${{ needs.build_docker_image.outputs.DOCKER_IMAGE_TAG }} + NEW_TAG=${{ env.DOCKER_REGISTRY }}/${{ env.REPO_PROD }}/juno:${{ needs.build_docker_image.outputs.DOCKER_IMAGE_TAG }} + + docker pull $OLD_TAG + docker tag $OLD_TAG $NEW_TAG + docker push $NEW_TAG test_in_production: needs: [promote_to_production] From cad1149315964d4e4134d86936d44749a5c79c30 Mon Sep 17 00:00:00 2001 From: Mario Apra Date: Thu, 11 Jul 2024 16:48:03 +0100 Subject: [PATCH 25/69] Safely enable uploading report to Codecov (#1939) This is done by saving the coverage output as an workflow artifact then loading it on a separate job and uploading it to codecov. The reason why this is necessary is because when running the juno-test workflow from a fork / untrusted dev, the secrets is not available. This is done in order to secure the secrets to being exposed from an atacker that might want to create a PR and get them. More info: https://securitylab.github.com/research/github-actions-preventing-pwn-requests/ The second workflow will be trigger once the juno-test is completed so it only needs to download the artifact and upload to codecov. Since this workflow source code is only from main, in order for it to contain malicious code, it would've been required to go through a PR. I've also added a small script to comment to the PR, so it's clear that the codecov will be uploaded shortly. This can be reverted later on if it starts to become too spammy. --- .github/workflows/juno-test.yml | 11 ++++--- .github/workflows/upload-codecov.yml | 43 ++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/upload-codecov.yml diff --git a/.github/workflows/juno-test.yml b/.github/workflows/juno-test.yml index f1dbad0cfd..5acf5ab0d3 100644 --- a/.github/workflows/juno-test.yml +++ b/.github/workflows/juno-test.yml @@ -50,11 +50,10 @@ jobs: - name: Benchmark run: make benchmarks - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v4.2.0 + - uses: actions/upload-artifact@v4 if: matrix.os == 'ubuntu-latest' with: - token: ${{ secrets.CODECOV_TOKEN }} - fail_ci_if_error: true - files: ./coverage/coverage.out - verbose: true \ No newline at end of file + name: code_coverage + path: ./coverage/coverage.out + if-no-files-found: error + retention-days: 1 diff --git a/.github/workflows/upload-codecov.yml b/.github/workflows/upload-codecov.yml new file mode 100644 index 0000000000..353ba2871b --- /dev/null +++ b/.github/workflows/upload-codecov.yml @@ -0,0 +1,43 @@ +name: Upload Codecov + + +on: + workflow_run: + workflows: ["Juno Test"] + types: + - completed + +jobs: + upload: + runs-on: ubuntu-latest + if: github.event.workflow_run.conclusion == 'success' + steps: + - name: Download artifact + uses: dawidd6/action-download-artifact@v6 + with: + workflow: ${{ github.event.workflow_run.name }} + run_id: ${{ github.event.workflow_run.id }} + name: code_coverage + github_token: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v4.2.0 + if: matrix.os == 'ubuntu-latest' + with: + token: ${{ secrets.CODECOV_TOKEN }} + fail_ci_if_error: true + files: coverage.out + verbose: true + + - name: 'Comment on PR' + if: github.event.workflow_run.event == 'pull_request' + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + await github.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: ${{ github.event.workflow_run.pull_request.number }}, + body: 'Coverage report uploaded to Codecov. Results will be posted soon.' + }); From e7813a7ba09998dfe007bba4a701337189072358 Mon Sep 17 00:00:00 2001 From: Mario Apra Date: Thu, 11 Jul 2024 17:28:15 +0100 Subject: [PATCH 26/69] Fix how to upload coverage to codecov (#1943) When I copied the Upload coverage to Codecov step from the juno-test I forgot to remove the condition that it would only do it when running on ubuntu-latest machine. Also, the Comment on PR didn't work, so I'm just removing it since it doesn't provide much benefit --- .github/workflows/upload-codecov.yml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/.github/workflows/upload-codecov.yml b/.github/workflows/upload-codecov.yml index 353ba2871b..77960e2a67 100644 --- a/.github/workflows/upload-codecov.yml +++ b/.github/workflows/upload-codecov.yml @@ -22,22 +22,8 @@ jobs: - name: Upload coverage to Codecov uses: codecov/codecov-action@v4.2.0 - if: matrix.os == 'ubuntu-latest' with: token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: true files: coverage.out verbose: true - - - name: 'Comment on PR' - if: github.event.workflow_run.event == 'pull_request' - uses: actions/github-script@v7 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - await github.issues.createComment({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: ${{ github.event.workflow_run.pull_request.number }}, - body: 'Coverage report uploaded to Codecov. Results will be posted soon.' - }); From e180de296ee896eb9836b5578a159487572c5603 Mon Sep 17 00:00:00 2001 From: Mario Apra Date: Fri, 12 Jul 2024 16:19:18 +0100 Subject: [PATCH 27/69] Bump version of github actions (#1937) Bump version of github actions - actions/setup-go: Bumping it to v5. With the v5, cache is done by default, so there is no need to specify cache: true - actions/checkout: bumping it to v4 A lot of different improvements, but the one that made me decide to upgrade was to use node20 instead of node16. Node16 has en end of life on 11 Sep 2023 - codecov/codecov-action: bumping it to v4 (v4.5.0) It was hard-coded v4.2.0, meaning that the fixes around detecting if running from a fork (v4.3, v4.4 and v.4.5) were not backported, therefore making the job not being able to detect when it was running from a fork --- .github/workflows/juno-test.yml | 15 +++++++------- .github/workflows/upload-codecov.yml | 29 ---------------------------- 2 files changed, 7 insertions(+), 37 deletions(-) delete mode 100644 .github/workflows/upload-codecov.yml diff --git a/.github/workflows/juno-test.yml b/.github/workflows/juno-test.yml index 5acf5ab0d3..0e374ca68f 100644 --- a/.github/workflows/juno-test.yml +++ b/.github/workflows/juno-test.yml @@ -19,12 +19,11 @@ jobs: env: VM_DEBUG: true steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up go - uses: actions/setup-go@v4.1.0 + uses: actions/setup-go@v5 with: go-version-file: go.mod - cache: true - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 with: @@ -50,10 +49,10 @@ jobs: - name: Benchmark run: make benchmarks - - uses: actions/upload-artifact@v4 + - name: Upload coverage to Codecov if: matrix.os == 'ubuntu-latest' + uses: codecov/codecov-action@v4 with: - name: code_coverage - path: ./coverage/coverage.out - if-no-files-found: error - retention-days: 1 + token: ${{ secrets.CODECOV_TOKEN }} + fail_ci_if_error: true + files: coverage.out diff --git a/.github/workflows/upload-codecov.yml b/.github/workflows/upload-codecov.yml deleted file mode 100644 index 77960e2a67..0000000000 --- a/.github/workflows/upload-codecov.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Upload Codecov - - -on: - workflow_run: - workflows: ["Juno Test"] - types: - - completed - -jobs: - upload: - runs-on: ubuntu-latest - if: github.event.workflow_run.conclusion == 'success' - steps: - - name: Download artifact - uses: dawidd6/action-download-artifact@v6 - with: - workflow: ${{ github.event.workflow_run.name }} - run_id: ${{ github.event.workflow_run.id }} - name: code_coverage - github_token: ${{ secrets.GITHUB_TOKEN }} - - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v4.2.0 - with: - token: ${{ secrets.CODECOV_TOKEN }} - fail_ci_if_error: true - files: coverage.out - verbose: true From 7f924d30ce41f0397e6b53bcdf9cff8375535add Mon Sep 17 00:00:00 2001 From: Kirill Date: Mon, 15 Jul 2024 11:35:24 +0300 Subject: [PATCH 28/69] Remove duplicate libraries linked on MacOS (#1944) Explanation: -ldl is dynamic linking library and -lm is math library. Both are not needed for Mac OS because the OS use different linking mechanism and math is part of C stdlib anyway. --- Makefile | 2 ++ core/class_hash.go | 4 ++-- starknet/compiler.go | 4 ++-- vm/vm.go | 4 ++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index e2bae30eec..1de7c99ede 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,8 @@ endif ifeq ($(shell uname -s),Darwin) export CGO_LDFLAGS=-framework Foundation -framework SystemConfiguration +else + export CGO_LDFLAGS=-ldl -lm endif rustdeps: vm core-rust compiler diff --git a/core/class_hash.go b/core/class_hash.go index 9cc4f94990..be39065cf9 100644 --- a/core/class_hash.go +++ b/core/class_hash.go @@ -5,8 +5,8 @@ package core //#include // // extern void Cairo0ClassHash(char* class_json_str, char* hash); -// #cgo vm_debug LDFLAGS: -L./rust/target/debug -ljuno_starknet_core_rs -ldl -lm -// #cgo !vm_debug LDFLAGS: -L./rust/target/release -ljuno_starknet_core_rs -ldl -lm +// #cgo vm_debug LDFLAGS: -L./rust/target/debug -ljuno_starknet_core_rs +// #cgo !vm_debug LDFLAGS: -L./rust/target/release -ljuno_starknet_core_rs import "C" import ( diff --git a/starknet/compiler.go b/starknet/compiler.go index 3e006a66a3..99545ad1f1 100644 --- a/starknet/compiler.go +++ b/starknet/compiler.go @@ -6,8 +6,8 @@ package starknet // extern char* compileSierraToCasm(char* sierra_json); // extern void freeCstr(char* ptr); // -// #cgo vm_debug LDFLAGS: -L./rust/target/debug -ljuno_starknet_compiler_rs -ldl -lm -// #cgo !vm_debug LDFLAGS: -L./rust/target/release -ljuno_starknet_compiler_rs -ldl -lm +// #cgo vm_debug LDFLAGS: -L./rust/target/debug -ljuno_starknet_compiler_rs +// #cgo !vm_debug LDFLAGS: -L./rust/target/release -ljuno_starknet_compiler_rs import "C" import ( diff --git a/vm/vm.go b/vm/vm.go index d20eeae826..d0e677c351 100644 --- a/vm/vm.go +++ b/vm/vm.go @@ -38,8 +38,8 @@ extern void cairoVMExecute(char* txns_json, char* classes_json, char* paid_fees_ extern char* setVersionedConstants(char* json); extern void freeString(char* str); -#cgo vm_debug LDFLAGS: -L./rust/target/debug -ljuno_starknet_rs -ldl -lm -#cgo !vm_debug LDFLAGS: -L./rust/target/release -ljuno_starknet_rs -ldl -lm +#cgo vm_debug LDFLAGS: -L./rust/target/debug -ljuno_starknet_rs +#cgo !vm_debug LDFLAGS: -L./rust/target/release -ljuno_starknet_rs */ import "C" From b9ad12d0e33bd52c4fa69a905afd71d2bd635ce7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 10:26:11 +0100 Subject: [PATCH 29/69] Bump github.com/rs/cors from 1.10.1 to 1.11.0 (#1930) Bumps [github.com/rs/cors](https://github.com/rs/cors) from 1.10.1 to 1.11.0. - [Commits](https://github.com/rs/cors/compare/v1.10.1...v1.11.0) --- updated-dependencies: - dependency-name: github.com/rs/cors dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 3 +-- go.sum | 8 ++------ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 6cf54c0e9d..3c6a5fbd6c 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,6 @@ require ( github.com/ethereum/go-ethereum v1.13.10 github.com/fxamacker/cbor/v2 v2.5.0 github.com/go-playground/validator/v10 v10.17.0 - github.com/hashicorp/go-set/v2 v2.1.0 github.com/jinzhu/copier v0.4.0 github.com/libp2p/go-libp2p v0.32.2 github.com/libp2p/go-libp2p-kad-dht v0.25.2 @@ -21,7 +20,7 @@ require ( github.com/multiformats/go-multiaddr v0.12.1 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.19.0 - github.com/rs/cors v1.10.1 + github.com/rs/cors v1.11.0 github.com/sourcegraph/conc v0.3.0 github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 diff --git a/go.sum b/go.sum index c160d482e2..5e28245e32 100644 --- a/go.sum +++ b/go.sum @@ -224,8 +224,6 @@ github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpx github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-set/v2 v2.1.0 h1:iERPCQWks+I+4bTgy0CT2myZsCqNgBg79ZHqwniohXo= -github.com/hashicorp/go-set/v2 v2.1.0/go.mod h1:6q4nh8UCVZODn2tJ5RbJi8+ki7pjZBsAEYGt6yaGeTo= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= @@ -452,8 +450,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo= -github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/cors v1.11.0 h1:0B9GE/r9Bc2UxRMMtymBkHTenPkHDv0CW4Y98GBY+po= +github.com/rs/cors v1.11.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -466,8 +464,6 @@ github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWR github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shoenig/test v0.6.7 h1:k92ohN9VyRfZn0ezNfwamtIBT/5byyfLVktRmL/Jmek= -github.com/shoenig/test v0.6.7/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= From 7589ffe2153133a7bbec2549f4bb81213cd7761d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 13:06:04 +0300 Subject: [PATCH 30/69] Bump github.com/ethereum/go-ethereum from 1.13.10 to 1.13.15 (#1859) Bumps [github.com/ethereum/go-ethereum](https://github.com/ethereum/go-ethereum) from 1.13.10 to 1.13.15. - [Release notes](https://github.com/ethereum/go-ethereum/releases) - [Commits](https://github.com/ethereum/go-ethereum/compare/v1.13.10...v1.13.15) --- updated-dependencies: - dependency-name: github.com/ethereum/go-ethereum dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index 3c6a5fbd6c..75af5a6a0b 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/bits-and-blooms/bloom/v3 v3.6.0 github.com/cockroachdb/pebble v1.1.0 github.com/consensys/gnark-crypto v0.12.1 - github.com/ethereum/go-ethereum v1.13.10 + github.com/ethereum/go-ethereum v1.13.15 github.com/fxamacker/cbor/v2 v2.5.0 github.com/go-playground/validator/v10 v10.17.0 github.com/jinzhu/copier v0.4.0 diff --git a/go.sum b/go.sum index 5e28245e32..a2a6d7a4f7 100644 --- a/go.sum +++ b/go.sum @@ -100,10 +100,10 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= -github.com/ethereum/go-ethereum v1.13.10 h1:Ppdil79nN+Vc+mXfge0AuUgmKWuVv4eMqzoIVSdqZek= -github.com/ethereum/go-ethereum v1.13.10/go.mod h1:sc48XYQxCzH3fG9BcrXCOOgQk2JfZzNAmIKnceogzsA= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/ethereum/go-ethereum v1.13.15 h1:U7sSGYGo4SPjP6iNIifNoyIAiNjrmQkz6EwQG+/EZWo= +github.com/ethereum/go-ethereum v1.13.15/go.mod h1:TN8ZiHrdJwSe8Cb6x+p0hs5CxhJZPbqB7hHkaUXcmIU= +github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA= +github.com/fjl/memsize v0.0.2/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/flynn/noise v1.0.1 h1:vPp/jdQLXC6ppsXSj/pM3W1BIJ5FEHE2TulSJBpb43Y= github.com/flynn/noise v1.0.1/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= @@ -230,8 +230,8 @@ github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 h1:3JQNjnMRil1yD0IfZKHF9GxxWKDJGj8I0IqOUol//sw= -github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= +github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6wn4Ej8vjuVGxeHdan+bRb2ebyv4= +github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= From 5698ff5703daba5c4ff62a95327102a3bfae06a8 Mon Sep 17 00:00:00 2001 From: Artem Streltsov Date: Mon, 15 Jul 2024 19:44:11 +0500 Subject: [PATCH 31/69] Add new linters and fix their errors (#1936) --- .golangci.yaml | 2 ++ cmd/juno/juno.go | 2 +- core/state.go | 3 ++- core/trie/trie.go | 2 +- jsonrpc/http_test.go | 6 +++--- p2p/p2p.go | 2 +- p2p/p2p_test.go | 2 +- rpc/simulation.go | 4 ++-- rpc/trace.go | 2 +- 9 files changed, 14 insertions(+), 11 deletions(-) diff --git a/.golangci.yaml b/.golangci.yaml index 9cf93f1993..41570fb51a 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -91,6 +91,7 @@ linters: - lll - misspell - nakedret + - nilerr - noctx - nolintlint - staticcheck @@ -99,6 +100,7 @@ linters: - unconvert - unparam - unused + - usestdlibvars - whitespace - tparallel - gci diff --git a/cmd/juno/juno.go b/cmd/juno/juno.go index 51d685c2bf..a50068d7a4 100644 --- a/cmd/juno/juno.go +++ b/cmd/juno/juno.go @@ -248,7 +248,7 @@ func NewCmd(config *node.Config, run func(*cobra.Command, []string) error) *cobr v.SetEnvPrefix("JUNO") v.SetEnvKeyReplacer(strings.NewReplacer(".", "_", "-", "_")) if err := v.BindPFlags(cmd.Flags()); err != nil { - return nil + return nil //nolint:nilerr } // TextUnmarshallerHookFunc allows us to unmarshal values that satisfy the diff --git a/core/state.go b/core/state.go index e19b57b216..905446dc89 100644 --- a/core/state.go +++ b/core/state.go @@ -588,7 +588,8 @@ func (s *State) Revert(blockNumber uint64, update *StateUpdate) error { } func (s *State) removeDeclaredClasses(blockNumber uint64, v0Classes []*felt.Felt, v1Classes map[felt.Felt]*felt.Felt) error { - var classHashes []*felt.Felt + totalCapacity := len(v0Classes) + len(v1Classes) + classHashes := make([]*felt.Felt, 0, totalCapacity) classHashes = append(classHashes, v0Classes...) for classHash := range v1Classes { classHashes = append(classHashes, classHash.Clone()) diff --git a/core/trie/trie.go b/core/trie/trie.go index 772ccdce4c..c7baafb20a 100644 --- a/core/trie/trie.go +++ b/core/trie/trie.go @@ -264,7 +264,7 @@ func (t *Trie) insertOrUpdateValue(nodeKey *Key, node *Node, nodes []StorageNode if siblingIsParentProof { newParent, err = t.GetNodeFromKey(&commonKey) if err != nil { - return nil + return err } if nodeKey.Test(nodeKey.Len() - commonKey.Len() - 1) { newParent.Right = nodeKey diff --git a/jsonrpc/http_test.go b/jsonrpc/http_test.go index 8326b59f52..c1ec68d762 100644 --- a/jsonrpc/http_test.go +++ b/jsonrpc/http_test.go @@ -37,7 +37,7 @@ func TestHTTP(t *testing.T) { client := new(http.Client) msg := `{"jsonrpc" : "2.0", "method" : "echo", "params" : [ "abc123" ], "id" : 1}` - req, err := http.NewRequestWithContext(ctx, "POST", srv.URL, bytes.NewReader([]byte(msg))) + req, err := http.NewRequestWithContext(ctx, http.MethodPost, srv.URL, bytes.NewReader([]byte(msg))) require.NoError(t, err) resp, err := client.Do(req) require.NoError(t, err) @@ -55,7 +55,7 @@ func TestHTTP(t *testing.T) { t.Run("GET", func(t *testing.T) { t.Run("root path", func(t *testing.T) { - req, err := http.NewRequestWithContext(ctx, "GET", srv.URL, http.NoBody) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, srv.URL, http.NoBody) require.NoError(t, err) resp, err := client.Do(req) require.NoError(t, err) @@ -64,7 +64,7 @@ func TestHTTP(t *testing.T) { }) t.Run("non-root path", func(t *testing.T) { - req, err := http.NewRequestWithContext(ctx, "GET", srv.URL+"/notfound", http.NoBody) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, srv.URL+"/notfound", http.NoBody) require.NoError(t, err) resp, err := client.Do(req) require.NoError(t, err) diff --git a/p2p/p2p.go b/p2p/p2p.go index 18bc8af761..d93e24365d 100644 --- a/p2p/p2p.go +++ b/p2p/p2p.go @@ -240,7 +240,7 @@ func (s *Service) ListenAddrs() ([]multiaddr.Multiaddr, error) { return nil, err } - var listenAddrs []multiaddr.Multiaddr + listenAddrs := make([]multiaddr.Multiaddr, 0, len(s.host.Addrs())) for _, addr := range s.host.Addrs() { listenAddrs = append(listenAddrs, addr.Encapsulate(pidmhash)) } diff --git a/p2p/p2p_test.go b/p2p/p2p_test.go index 5b536fa09a..1a700786ef 100644 --- a/p2p/p2p_test.go +++ b/p2p/p2p_test.go @@ -42,7 +42,7 @@ func TestService(t *testing.T) { peerAddrs, err := peerA.ListenAddrs() require.NoError(t, err) - var peerAddrsString []string + peerAddrsString := make([]string, 0, len(peerAddrs)) for _, addr := range peerAddrs { peerAddrsString = append(peerAddrsString, addr.String()) } diff --git a/rpc/simulation.go b/rpc/simulation.go index e994e13732..4948c062ac 100644 --- a/rpc/simulation.go +++ b/rpc/simulation.go @@ -77,7 +77,7 @@ func (h *Handler) simulateTransactions(id BlockID, transactions []BroadcastedTra return nil, rpcErr } - var txns []core.Transaction + txns := make([]core.Transaction, 0, len(transactions)) var classes []core.Class paidFeesOnL1 := make([]*felt.Felt, 0) @@ -119,7 +119,7 @@ func (h *Handler) simulateTransactions(id BlockID, transactions []BroadcastedTra return nil, ErrUnexpectedError.CloneWithData(err.Error()) } - var result []SimulatedTransaction + result := make([]SimulatedTransaction, 0, len(overallFees)) for i, overallFee := range overallFees { feeUnit := feeUnit(txns[i]) diff --git a/rpc/trace.go b/rpc/trace.go index ea14ae1524..809a8481de 100644 --- a/rpc/trace.go +++ b/rpc/trace.go @@ -273,7 +273,7 @@ func (h *Handler) traceBlockTransactions(ctx context.Context, block *core.Block, return nil, ErrUnexpectedError.CloneWithData(err.Error()) } - var result []TracedBlockTransaction + result := make([]TracedBlockTransaction, 0, len(traces)) for index, trace := range traces { if !v0_6Response { feeUnit := feeUnit(block.Transactions[index]) From 50f6c92d0d82d4de3f9cb3d4caef15ba24ddc36a Mon Sep 17 00:00:00 2001 From: Ng Wei Han <47109095+weiihann@users.noreply.github.com> Date: Tue, 16 Jul 2024 22:23:43 +0800 Subject: [PATCH 32/69] Persist and load peers from separate database (#1935) --- db/buckets.go | 1 + node/node.go | 4 +- p2p/p2p.go | 98 ++++++++++++++++++++++++++++++++++++++++++++++--- p2p/p2p_test.go | 43 ++++++++++++++++++++++ p2p/peers.go | 43 ++++++++++++++++++++++ 5 files changed, 183 insertions(+), 6 deletions(-) create mode 100644 p2p/peers.go diff --git a/db/buckets.go b/db/buckets.go index 7b2476d70c..1fe4bf416a 100644 --- a/db/buckets.go +++ b/db/buckets.go @@ -32,6 +32,7 @@ const ( BlockCommitments Temporary // used temporarily for migrations SchemaIntermediateState + Peer // maps peer ID to peer multiaddresses ) // Key flattens a prefix and series of byte arrays into a single []byte. diff --git a/node/node.go b/node/node.go index 1c92bae2ff..e622078c90 100644 --- a/node/node.go +++ b/node/node.go @@ -120,6 +120,7 @@ func New(cfg *Config, version string) (*Node, error) { //nolint:gocyclo,funlen } else { database, err = pebble.New(cfg.DatabasePath, cfg.DBCacheSize, cfg.DBMaxHandles, dbLog) } + if err != nil { return nil, fmt.Errorf("open DB: %w", err) } @@ -164,7 +165,8 @@ func New(cfg *Config, version string) (*Node, error) { //nolint:gocyclo,funlen // Do not start the feeder synchronisation synchronizer = nil } - p2pService, err = p2p.New(cfg.P2PAddr, "juno", cfg.P2PPeers, cfg.P2PPrivateKey, cfg.P2PFeederNode, chain, &cfg.Network, log) + p2pService, err = p2p.New(cfg.P2PAddr, "juno", cfg.P2PPeers, cfg.P2PPrivateKey, cfg.P2PFeederNode, + chain, &cfg.Network, log, database) if err != nil { return nil, fmt.Errorf("set up p2p service: %w", err) } diff --git a/p2p/p2p.go b/p2p/p2p.go index d93e24365d..7565b55134 100644 --- a/p2p/p2p.go +++ b/p2p/p2p.go @@ -11,6 +11,7 @@ import ( "time" "github.com/NethermindEth/juno/blockchain" + "github.com/NethermindEth/juno/db" "github.com/NethermindEth/juno/p2p/starknet" junoSync "github.com/NethermindEth/juno/sync" "github.com/NethermindEth/juno/utils" @@ -48,10 +49,11 @@ type Service struct { synchroniser *syncService feederNode bool + database db.DB } func New(addr, userAgent, peers, privKeyStr string, feederNode bool, bc *blockchain.Blockchain, snNetwork *utils.Network, - log utils.SimpleLogger, + log utils.SimpleLogger, database db.DB, ) (*Service, error) { if addr == "" { // 0.0.0.0/tcp/0 will listen on any interface device and assing a free port. @@ -74,17 +76,27 @@ func New(addr, userAgent, peers, privKeyStr string, feederNode bool, bc *blockch // Todo: try to understand what will happen if user passes a multiaddr with p2p public and a private key which doesn't match. // For example, a user passes the following multiaddr: --p2p-addr=/ip4/0.0.0.0/tcp/7778/p2p/(SomePublicKey) and also passes a // --p2p-private-key="SomePrivateKey". However, the private public key pair don't match, in this case what will happen? - return NewWithHost(p2pHost, peers, feederNode, bc, snNetwork, log) + return NewWithHost(p2pHost, peers, feederNode, bc, snNetwork, log, database) } func NewWithHost(p2phost host.Host, peers string, feederNode bool, bc *blockchain.Blockchain, snNetwork *utils.Network, - log utils.SimpleLogger, + log utils.SimpleLogger, database db.DB, ) (*Service, error) { - peersAddrInfoS := []peer.AddrInfo{} + var ( + peersAddrInfoS []peer.AddrInfo + err error + ) + + peersAddrInfoS, err = loadPeers(database) + if err != nil { + log.Warnw("Failed to load peers", "err", err) + } + if peers != "" { splitted := strings.Split(peers, ",") for _, peerStr := range splitted { - peerAddr, err := peer.AddrInfoFromString(peerStr) + var peerAddr *peer.AddrInfo + peerAddr, err = peer.AddrInfoFromString(peerStr) if err != nil { return nil, fmt.Errorf("addr info from %q: %w", peerStr, err) } @@ -110,6 +122,7 @@ func NewWithHost(p2phost host.Host, peers string, feederNode bool, bc *blockchai feederNode: feederNode, topics: make(map[string]*pubsub.Topic), handler: starknet.NewHandler(bc, log), + database: database, } return s, nil } @@ -213,6 +226,9 @@ func (s *Service) Run(ctx context.Context) error { } <-ctx.Done() + if err := s.persistPeers(); err != nil { + s.log.Warnw("Failed to persist peers", "err", err) + } if err := s.dht.Close(); err != nil { s.log.Warnw("Failed stopping DHT", "err", err.Error()) } @@ -346,3 +362,75 @@ func (s *Service) WithListener(l junoSync.EventListener) { runMetrics(s.host.Peerstore()) s.synchroniser.WithListener(l) } + +// persistPeers stores the given peers in the peers database +func (s *Service) persistPeers() error { + txn, err := s.database.NewTransaction(true) + if err != nil { + return fmt.Errorf("create transaction: %w", err) + } + + store := s.host.Peerstore() + peers := store.Peers() + for _, peerID := range peers { + peerInfo := store.PeerInfo(peerID) + + encodedAddrs, err := EncodeAddrs(peerInfo.Addrs) + if err != nil { + return fmt.Errorf("encode addresses for peer %s: %w", peerID, err) + } + + if err := txn.Set(db.Peer.Key([]byte(peerID)), encodedAddrs); err != nil { + return fmt.Errorf("set data for peer %s: %w", peerID, err) + } + } + + if err := txn.Commit(); err != nil { + return fmt.Errorf("commit transaction: %w", err) + } + + s.log.Infow("Stored peers", "num", len(peers)) + + return nil +} + +// loadPeers loads the previously stored peers from the database +func loadPeers(database db.DB) ([]peer.AddrInfo, error) { + var peers []peer.AddrInfo + + err := database.View(func(txn db.Transaction) error { + it, err := txn.NewIterator() + if err != nil { + return fmt.Errorf("create iterator: %w", err) + } + defer it.Close() + + prefix := db.Peer.Key() + for it.Seek(prefix); it.Valid(); it.Next() { + peerIDBytes := it.Key()[len(prefix):] + peerID, err := peer.IDFromBytes(peerIDBytes) + if err != nil { + return fmt.Errorf("decode peer ID: %w", err) + } + + val, err := it.Value() + if err != nil { + return fmt.Errorf("get value: %w", err) + } + + addrs, err := decodeAddrs(val) + if err != nil { + return fmt.Errorf("decode addresses for peer %s: %w", peerID, err) + } + + peers = append(peers, peer.AddrInfo{ID: peerID, Addrs: addrs}) + } + + return nil + }) + if err != nil { + return nil, fmt.Errorf("load peers: %w", err) + } + + return peers, nil +} diff --git a/p2p/p2p_test.go b/p2p/p2p_test.go index 1a700786ef..e91281c48b 100644 --- a/p2p/p2p_test.go +++ b/p2p/p2p_test.go @@ -8,11 +8,15 @@ import ( "testing" "time" + "github.com/NethermindEth/juno/db" + "github.com/NethermindEth/juno/db/pebble" "github.com/NethermindEth/juno/p2p" "github.com/NethermindEth/juno/utils" "github.com/libp2p/go-libp2p/core/network" + "github.com/libp2p/go-libp2p/core/peer" "github.com/libp2p/go-libp2p/core/protocol" mocknet "github.com/libp2p/go-libp2p/p2p/net/mock" + "github.com/multiformats/go-multiaddr" "github.com/stretchr/testify/require" ) @@ -33,6 +37,7 @@ func TestService(t *testing.T) { nil, &utils.Integration, utils.NewNopZapLogger(), + nil, ) require.NoError(t, err) @@ -54,6 +59,7 @@ func TestService(t *testing.T) { nil, &utils.Integration, utils.NewNopZapLogger(), + nil, ) require.NoError(t, err) @@ -140,6 +146,7 @@ func TestInvalidKey(t *testing.T) { nil, &utils.Integration, utils.NewNopZapLogger(), + nil, ) require.Error(t, err) @@ -156,7 +163,43 @@ func TestValidKey(t *testing.T) { nil, &utils.Integration, utils.NewNopZapLogger(), + nil, ) require.NoError(t, err) } + +func TestLoadAndPersistPeers(t *testing.T) { + testDB := pebble.NewMemTest(t) + + txn, err := testDB.NewTransaction(true) + require.NoError(t, err) + + decodedID, err := peer.Decode("12D3KooWLdURCjbp1D7hkXWk6ZVfcMDPtsNnPHuxoTcWXFtvrxGG") + require.NoError(t, err) + + addrs := []multiaddr.Multiaddr{ + multiaddr.StringCast("/ip4/127.0.0.1/tcp/7777"), + } + encAddrs, err := p2p.EncodeAddrs(addrs) + require.NoError(t, err) + + err = txn.Set(db.Peer.Key([]byte(decodedID)), encAddrs) + require.NoError(t, err) + + err = txn.Commit() + require.NoError(t, err) + + _, err = p2p.New( + "/ip4/127.0.0.1/tcp/30301", + "peerA", + "", + "5f6cdc3aebcc74af494df054876100368ef6126e3a33fa65b90c765b381ffc37a0a63bbeeefab0740f24a6a38dabb513b9233254ad0020c721c23e69bc820089", + false, + nil, + &utils.Integration, + utils.NewNopZapLogger(), + testDB, + ) + require.NoError(t, err) +} diff --git a/p2p/peers.go b/p2p/peers.go new file mode 100644 index 0000000000..a5948281fb --- /dev/null +++ b/p2p/peers.go @@ -0,0 +1,43 @@ +package p2p + +import ( + "bytes" + "fmt" + + "github.com/fxamacker/cbor/v2" + "github.com/multiformats/go-multiaddr" +) + +// EncodeAddrs encodes a slice of multiaddrs into a byte slice +func EncodeAddrs(addrs []multiaddr.Multiaddr) ([]byte, error) { + multiAddrBytes := make([][]byte, len(addrs)) + for i, addr := range addrs { + multiAddrBytes[i] = addr.Bytes() + } + + var buf bytes.Buffer + if err := cbor.NewEncoder(&buf).Encode(multiAddrBytes); err != nil { + return nil, fmt.Errorf("encode addresses: %w", err) + } + + return buf.Bytes(), nil +} + +// decodeAddrs decodes a byte slice into a slice of multiaddrs +func decodeAddrs(b []byte) ([]multiaddr.Multiaddr, error) { + var multiAddrBytes [][]byte + if err := cbor.NewDecoder(bytes.NewReader(b)).Decode(&multiAddrBytes); err != nil { + return nil, fmt.Errorf("decode addresses: %w", err) + } + + addrs := make([]multiaddr.Multiaddr, 0, len(multiAddrBytes)) + for _, addrBytes := range multiAddrBytes { + addr, err := multiaddr.NewMultiaddrBytes(addrBytes) + if err != nil { + return nil, fmt.Errorf("parse multiaddr: %w", err) + } + addrs = append(addrs, addr) + } + + return addrs, nil +} From 66153d8c2220976e890335d09856efabd30ef65b Mon Sep 17 00:00:00 2001 From: Ngalim Siregar Date: Tue, 16 Jul 2024 22:35:58 +0700 Subject: [PATCH 33/69] Rename trie/TransactionStorage to Storage (#1788) --- core/trie/storage.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/trie/storage.go b/core/trie/storage.go index 61f3bd6821..c4e5ae0915 100644 --- a/core/trie/storage.go +++ b/core/trie/storage.go @@ -27,7 +27,7 @@ func getBuffer() *bytes.Buffer { return buffer } -// TransactionStorage is a database transaction on a trie. +// Storage is a database transaction on a trie. type Storage struct { txn db.Transaction prefix []byte From 6e90f2eed80ae20f52b2cc2ee8b4548945f78d39 Mon Sep 17 00:00:00 2001 From: Mario Apra Date: Wed, 17 Jul 2024 10:00:45 +0100 Subject: [PATCH 34/69] Separate tests with coverage and without coverage (#1953) Running code coverage slows down the run by ~20%. The commit separates the tests into two different jobs based on the operating system. The "Tests (Coverage)" job runs the tests with coverage and is only triggered on the "ubuntu-latest" OS, while the "Tests (No Coverage)" job runs the tests without coverage on other OSes. This change improves the test workflow and ensures that coverage only runs on the os that does uploads the result to Codecov. --- .github/workflows/juno-test.yml | 9 +++++++-- Makefile | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/juno-test.yml b/.github/workflows/juno-test.yml index 0e374ca68f..79b9177d22 100644 --- a/.github/workflows/juno-test.yml +++ b/.github/workflows/juno-test.yml @@ -42,10 +42,15 @@ jobs: - name: Install dependencies (macOS) if: runner.os == 'macOS' run: brew install jemalloc - - - name: Tests + + - name: Tests (Coverage) + if: matrix.os == 'ubuntu-latest' run: make test-cover + - name: Tests (No Coverage) + if: matrix.os != 'ubuntu-latest' + run: make test + - name: Benchmark run: make benchmarks diff --git a/Makefile b/Makefile index 1de7c99ede..d7ea372b18 100644 --- a/Makefile +++ b/Makefile @@ -54,7 +54,7 @@ test-race: clean-testcache rustdeps benchmarks: rustdeps ## benchmarking go test $(GO_TAGS) ./... -run=^# -bench=. -benchmem -test-cover: rustdeps ## tests with coverage +test-cover: clean-testcache rustdeps ## tests with coverage mkdir -p coverage go test $(GO_TAGS) -coverpkg=./... -coverprofile=coverage/coverage.out -covermode=atomic ./... go tool cover -html=coverage/coverage.out -o coverage/coverage.html From c5267cf543d202af3d6738b6ccf13038d0f6c990 Mon Sep 17 00:00:00 2001 From: Daniil Ankushin Date: Wed, 17 Jul 2024 22:00:49 +0300 Subject: [PATCH 35/69] Daniil/linter-update (#1957) * golangci-lint updated to v1.59.1 * The configuration option `run.skip-dirs` is deprecated, use `issues.exclude-dirs` * The configuration option `linters.govet.check-shadowing` is deprecated. Enabled `shadow` instead * The linter 'gomnd' is deprecated (since v1.58.0) due to: The linter has been renamed. Replaced by mnd. * directive `//nolint:goconst` is unused for linter "goconst". Deleted comments. --- .github/workflows/juno-lint.yml | 2 +- .golangci.yaml | 24 ++++++++++++------------ Makefile | 2 +- core/transaction.go | 2 +- core/trie/key.go | 2 +- core/trie/proof.go | 8 ++++---- migration/migration.go | 4 ++-- utils/log_test.go | 2 +- utils/network.go | 10 +++++----- utils/network_test.go | 2 +- 10 files changed, 29 insertions(+), 29 deletions(-) diff --git a/.github/workflows/juno-lint.yml b/.github/workflows/juno-lint.yml index c3455f1b4b..4656de7414 100644 --- a/.github/workflows/juno-lint.yml +++ b/.github/workflows/juno-lint.yml @@ -25,4 +25,4 @@ jobs: uses: golangci/golangci-lint-action@v3 with: # Optional: version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version - version: v1.56.2 \ No newline at end of file + version: v1.59.1 diff --git a/.golangci.yaml b/.golangci.yaml index 41570fb51a..8838350c20 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -31,7 +31,7 @@ linters-settings: min-complexity: 15 goimports: local-prefixes: github.com/golangci/golangci-lint - gomnd: + mnd: # don't include the "operation" and "assign" checks: - argument @@ -39,15 +39,15 @@ linters-settings: - condition - return ignored-numbers: - - '0' - - '1' - - '2' - - '3' + - "0" + - "1" + - "2" + - "3" ignored-functions: - strings.SplitN govet: - check-shadowing: true + shadow: true settings: printf: funcs: @@ -82,7 +82,7 @@ linters: - gocritic - gocyclo - gofumpt - - gomnd + - mnd - goprintffuncname - gosec - gosimple @@ -127,7 +127,7 @@ issues: exclude-rules: - path: _test\.go linters: - - gomnd + - mnd - funlen - lll - gosec @@ -156,11 +156,11 @@ issues: text: "SA1019: (.+).(GoVersion|LangVersion) is deprecated: use the global `run.go` instead." - path: pkg/golinters/unused.go text: "rangeValCopy: each iteration copies 160 bytes \\(consider pointers or indexing\\)" - -run: - timeout: 5m - skip-dirs: + exclude-dirs: - test/testdata_etc # test files - internal/cache # extracted from Go code - internal/renameio # extracted from Go code - internal/robustio # extracted from Go code + +run: + timeout: 5m diff --git a/Makefile b/Makefile index d7ea372b18..645e0d2c83 100644 --- a/Makefile +++ b/Makefile @@ -68,7 +68,7 @@ install-mockgen: go install go.uber.org/mock/mockgen@latest install-golangci-lint: - go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.56.2 + go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.59.1 lint: @which golangci-lint || make install-golangci-lint diff --git a/core/transaction.go b/core/transaction.go index ac0b8cdffb..bb7f2d8661 100644 --- a/core/transaction.go +++ b/core/transaction.go @@ -64,7 +64,7 @@ type ResourceBounds struct { } func (rb ResourceBounds) Bytes(resource Resource) []byte { - maxAmountBytes := make([]byte, 8) //nolint:gomnd + maxAmountBytes := make([]byte, 8) //nolint:mnd binary.BigEndian.PutUint64(maxAmountBytes, rb.MaxAmount) maxPriceBytes := rb.MaxPricePerUnit.Bytes() return slices.Concat( diff --git a/core/trie/key.go b/core/trie/key.go index db60754fb7..7f0e6af609 100644 --- a/core/trie/key.go +++ b/core/trie/key.go @@ -30,7 +30,7 @@ func (k *Key) SubKey(n uint8) (*Key, error) { } newKey := &Key{len: n} - copy(newKey.bitset[:], k.bitset[len(k.bitset)-int((k.len+7)/8):]) //nolint:gomnd + copy(newKey.bitset[:], k.bitset[len(k.bitset)-int((k.len+7)/8):]) //nolint:mnd // Shift right by the number of bits that are not needed shift := k.len - n diff --git a/core/trie/proof.go b/core/trie/proof.go index 6a9d7eb099..f8f0e325ad 100644 --- a/core/trie/proof.go +++ b/core/trie/proof.go @@ -201,7 +201,7 @@ func VerifyProof(root *felt.Felt, key *Key, value *felt.Felt, proofs []ProofNode return false } expectedHash = proofNode.Edge.Child - remainingPath.Truncate(251 - proofNode.Edge.Path.Len()) //nolint:gomnd + remainingPath.Truncate(251 - proofNode.Edge.Path.Len()) //nolint:mnd } } @@ -369,7 +369,7 @@ func ProofToPath(proofNodes []ProofNode, leafKey *Key, hashF hashFunc) ([]Storag } // Don't store leafs along proof paths - if parentKey.len == 251 { //nolint:gomnd + if parentKey.len == 251 { //nolint:mnd break } @@ -458,7 +458,7 @@ func getChildKey(childIdx int, crntKey, leafKey, nilKey *Key, proofNodes []Proof return nil, err } - if crntKey.len+uint8(compressChild)+compressChildOffset == 251 { //nolint:gomnd + if crntKey.len+uint8(compressChild)+compressChildOffset == 251 { //nolint:mnd return nilKey, nil } @@ -467,7 +467,7 @@ func getChildKey(childIdx int, crntKey, leafKey, nilKey *Key, proofNodes []Proof // BuildTrie builds a trie using the proof paths (including inner nodes), and then sets all the keys-values (leaves) func BuildTrie(leftProofPath, rightProofPath []StorageNode, keys, values []*felt.Felt) (*Trie, error) { //nolint:gocyclo - tempTrie, err := NewTriePedersen(newMemStorage(), 251) //nolint:gomnd + tempTrie, err := NewTriePedersen(newMemStorage(), 251) //nolint:mnd if err != nil { return nil, err } diff --git a/migration/migration.go b/migration/migration.go index 11e00c9c34..3c75bdd575 100644 --- a/migration/migration.go +++ b/migration/migration.go @@ -63,8 +63,8 @@ var defaultMigrations = []Migration{ NewBucketMigrator(db.ContractStorage, migrateTrieNodesFromBitsetToTrieKey(db.ContractStorage)). WithKeyFilter(nodesFilter(db.ContractStorage)), NewBucketMover(db.Temporary, db.ContractStorage), - NewBucketMigrator(db.StateUpdatesByBlockNumber, changeStateDiffStruct).WithBatchSize(100), //nolint:gomnd - NewBucketMigrator(db.Class, migrateCairo1CompiledClass).WithBatchSize(1_000), //nolint:gomnd + NewBucketMigrator(db.StateUpdatesByBlockNumber, changeStateDiffStruct).WithBatchSize(100), //nolint:mnd + NewBucketMigrator(db.Class, migrateCairo1CompiledClass).WithBatchSize(1_000), //nolint:mnd } var ErrCallWithNewTransaction = errors.New("call with new transaction") diff --git a/utils/log_test.go b/utils/log_test.go index 5f77b2735d..8a5954b872 100644 --- a/utils/log_test.go +++ b/utils/log_test.go @@ -20,7 +20,7 @@ var levelStrings = map[utils.LogLevel]string{ func TestLogLevelString(t *testing.T) { for level, str := range levelStrings { - t.Run("level "+str, func(t *testing.T) { //nolint:goconst + t.Run("level "+str, func(t *testing.T) { assert.Equal(t, str, level.String()) }) } diff --git a/utils/network.go b/utils/network.go index 430510e6fb..c0988c82f6 100644 --- a/utils/network.go +++ b/utils/network.go @@ -59,7 +59,7 @@ var ( FeederURL: "https://alpha4.starknet.io/feeder_gateway/", GatewayURL: "https://alpha4.starknet.io/gateway/", L2ChainID: "SN_GOERLI", - //nolint:gomnd + //nolint:mnd L1ChainID: big.NewInt(5), CoreContractAddress: common.HexToAddress("0xde29d060D45901Fb19ED6C6e959EB22d8626708e"), BlockHashMetaInfo: &BlockHashMetaInfo{ @@ -73,7 +73,7 @@ var ( FeederURL: "https://alpha4-2.starknet.io/feeder_gateway/", GatewayURL: "https://alpha4-2.starknet.io/gateway/", L2ChainID: "SN_GOERLI2", - //nolint:gomnd + //nolint:mnd L1ChainID: big.NewInt(5), CoreContractAddress: common.HexToAddress("0xa4eD3aD27c294565cB0DCc993BDdCC75432D498c"), BlockHashMetaInfo: &BlockHashMetaInfo{ @@ -86,7 +86,7 @@ var ( FeederURL: "https://external.integration.starknet.io/feeder_gateway/", GatewayURL: "https://external.integration.starknet.io/gateway/", L2ChainID: "SN_GOERLI", - //nolint:gomnd + //nolint:mnd L1ChainID: big.NewInt(5), CoreContractAddress: common.HexToAddress("0xd5c325D183C592C94998000C5e0EED9e6655c020"), BlockHashMetaInfo: &BlockHashMetaInfo{ @@ -100,7 +100,7 @@ var ( FeederURL: "https://alpha-sepolia.starknet.io/feeder_gateway/", GatewayURL: "https://alpha-sepolia.starknet.io/gateway/", L2ChainID: "SN_SEPOLIA", - //nolint:gomnd + //nolint:mnd L1ChainID: big.NewInt(11155111), CoreContractAddress: common.HexToAddress("0xE2Bb56ee936fd6433DC0F6e7e3b8365C906AA057"), BlockHashMetaInfo: &BlockHashMetaInfo{ @@ -113,7 +113,7 @@ var ( FeederURL: "https://integration-sepolia.starknet.io/feeder_gateway/", GatewayURL: "https://integration-sepolia.starknet.io/gateway/", L2ChainID: "SN_INTEGRATION_SEPOLIA", - //nolint:gomnd + //nolint:mnd L1ChainID: big.NewInt(11155111), CoreContractAddress: common.HexToAddress("0x4737c0c1B4D5b1A687B42610DdabEE781152359c"), BlockHashMetaInfo: &BlockHashMetaInfo{ diff --git a/utils/network_test.go b/utils/network_test.go index 6922969858..778f66545b 100644 --- a/utils/network_test.go +++ b/utils/network_test.go @@ -86,7 +86,7 @@ func TestNetwork(t *testing.T) { //nolint:dupl // see comment in utils/log_test.go func TestNetworkSet(t *testing.T) { for network, str := range networkStrings { - t.Run("network "+str, func(t *testing.T) { //nolint:goconst + t.Run("network "+str, func(t *testing.T) { n := new(utils.Network) require.NoError(t, n.Set(str)) assert.Equal(t, network, *n) From c2edc41437945d51705e67a9b36df9ed2a98926b Mon Sep 17 00:00:00 2001 From: Kirill Date: Thu, 18 Jul 2024 15:44:28 +0300 Subject: [PATCH 36/69] Add enumer tool. Generate using it helper functions for Bucket type (#1958) --- .github/codecov.yml | 3 +- db/buckets.go | 1 + db/buckets_enumer.go | 170 +++++++++++++++++++++++++++++++++++++++++++ go.mod | 2 + go.sum | 4 + 5 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 db/buckets_enumer.go diff --git a/.github/codecov.yml b/.github/codecov.yml index b286094391..8a1bf7a4e9 100644 --- a/.github/codecov.yml +++ b/.github/codecov.yml @@ -16,4 +16,5 @@ ignore: - p2p - adapters/core2p2p - adapters/p2p2core - - docs \ No newline at end of file + - docs + - "**/*_enumer.go" \ No newline at end of file diff --git a/db/buckets.go b/db/buckets.go index 1fe4bf416a..7ae5809e33 100644 --- a/db/buckets.go +++ b/db/buckets.go @@ -2,6 +2,7 @@ package db import "slices" +//go:generate go run github.com/dmarkham/enumer -type=Bucket -output=buckets_enumer.go type Bucket byte // Pebble does not support buckets to differentiate between groups of diff --git a/db/buckets_enumer.go b/db/buckets_enumer.go new file mode 100644 index 0000000000..ec9ab4438d --- /dev/null +++ b/db/buckets_enumer.go @@ -0,0 +1,170 @@ +// Code generated by "enumer -type=Bucket -output=buckets_enumer.go"; DO NOT EDIT. + +package db + +import ( + "fmt" + "strings" +) + +const _BucketName = "StateTrieUnusedContractClassHashContractStorageClassContractNonceChainHeightBlockHeaderNumbersByHashBlockHeadersByNumberTransactionBlockNumbersAndIndicesByHashTransactionsByBlockNumberAndIndexReceiptsByBlockNumberAndIndexStateUpdatesByBlockNumberClassesTrieContractStorageHistoryContractNonceHistoryContractClassHashHistoryContractDeploymentHeightL1HeightSchemaVersionPendingBlockCommitmentsTemporarySchemaIntermediateStatePeer" + +var _BucketIndex = [...]uint16{0, 9, 15, 32, 47, 52, 65, 76, 100, 120, 159, 192, 221, 246, 257, 279, 299, 323, 347, 355, 368, 375, 391, 400, 423, 427} + +const _BucketLowerName = "statetrieunusedcontractclasshashcontractstorageclasscontractnoncechainheightblockheadernumbersbyhashblockheadersbynumbertransactionblocknumbersandindicesbyhashtransactionsbyblocknumberandindexreceiptsbyblocknumberandindexstateupdatesbyblocknumberclassestriecontractstoragehistorycontractnoncehistorycontractclasshashhistorycontractdeploymentheightl1heightschemaversionpendingblockcommitmentstemporaryschemaintermediatestatepeer" + +func (i Bucket) String() string { + if i >= Bucket(len(_BucketIndex)-1) { + return fmt.Sprintf("Bucket(%d)", i) + } + return _BucketName[_BucketIndex[i]:_BucketIndex[i+1]] +} + +// An "invalid array index" compiler error signifies that the constant values have changed. +// Re-run the stringer command to generate them again. +func _BucketNoOp() { + var x [1]struct{} + _ = x[StateTrie-(0)] + _ = x[Unused-(1)] + _ = x[ContractClassHash-(2)] + _ = x[ContractStorage-(3)] + _ = x[Class-(4)] + _ = x[ContractNonce-(5)] + _ = x[ChainHeight-(6)] + _ = x[BlockHeaderNumbersByHash-(7)] + _ = x[BlockHeadersByNumber-(8)] + _ = x[TransactionBlockNumbersAndIndicesByHash-(9)] + _ = x[TransactionsByBlockNumberAndIndex-(10)] + _ = x[ReceiptsByBlockNumberAndIndex-(11)] + _ = x[StateUpdatesByBlockNumber-(12)] + _ = x[ClassesTrie-(13)] + _ = x[ContractStorageHistory-(14)] + _ = x[ContractNonceHistory-(15)] + _ = x[ContractClassHashHistory-(16)] + _ = x[ContractDeploymentHeight-(17)] + _ = x[L1Height-(18)] + _ = x[SchemaVersion-(19)] + _ = x[Pending-(20)] + _ = x[BlockCommitments-(21)] + _ = x[Temporary-(22)] + _ = x[SchemaIntermediateState-(23)] + _ = x[Peer-(24)] +} + +var _BucketValues = []Bucket{StateTrie, Unused, ContractClassHash, ContractStorage, Class, ContractNonce, ChainHeight, BlockHeaderNumbersByHash, BlockHeadersByNumber, TransactionBlockNumbersAndIndicesByHash, TransactionsByBlockNumberAndIndex, ReceiptsByBlockNumberAndIndex, StateUpdatesByBlockNumber, ClassesTrie, ContractStorageHistory, ContractNonceHistory, ContractClassHashHistory, ContractDeploymentHeight, L1Height, SchemaVersion, Pending, BlockCommitments, Temporary, SchemaIntermediateState, Peer} + +var _BucketNameToValueMap = map[string]Bucket{ + _BucketName[0:9]: StateTrie, + _BucketLowerName[0:9]: StateTrie, + _BucketName[9:15]: Unused, + _BucketLowerName[9:15]: Unused, + _BucketName[15:32]: ContractClassHash, + _BucketLowerName[15:32]: ContractClassHash, + _BucketName[32:47]: ContractStorage, + _BucketLowerName[32:47]: ContractStorage, + _BucketName[47:52]: Class, + _BucketLowerName[47:52]: Class, + _BucketName[52:65]: ContractNonce, + _BucketLowerName[52:65]: ContractNonce, + _BucketName[65:76]: ChainHeight, + _BucketLowerName[65:76]: ChainHeight, + _BucketName[76:100]: BlockHeaderNumbersByHash, + _BucketLowerName[76:100]: BlockHeaderNumbersByHash, + _BucketName[100:120]: BlockHeadersByNumber, + _BucketLowerName[100:120]: BlockHeadersByNumber, + _BucketName[120:159]: TransactionBlockNumbersAndIndicesByHash, + _BucketLowerName[120:159]: TransactionBlockNumbersAndIndicesByHash, + _BucketName[159:192]: TransactionsByBlockNumberAndIndex, + _BucketLowerName[159:192]: TransactionsByBlockNumberAndIndex, + _BucketName[192:221]: ReceiptsByBlockNumberAndIndex, + _BucketLowerName[192:221]: ReceiptsByBlockNumberAndIndex, + _BucketName[221:246]: StateUpdatesByBlockNumber, + _BucketLowerName[221:246]: StateUpdatesByBlockNumber, + _BucketName[246:257]: ClassesTrie, + _BucketLowerName[246:257]: ClassesTrie, + _BucketName[257:279]: ContractStorageHistory, + _BucketLowerName[257:279]: ContractStorageHistory, + _BucketName[279:299]: ContractNonceHistory, + _BucketLowerName[279:299]: ContractNonceHistory, + _BucketName[299:323]: ContractClassHashHistory, + _BucketLowerName[299:323]: ContractClassHashHistory, + _BucketName[323:347]: ContractDeploymentHeight, + _BucketLowerName[323:347]: ContractDeploymentHeight, + _BucketName[347:355]: L1Height, + _BucketLowerName[347:355]: L1Height, + _BucketName[355:368]: SchemaVersion, + _BucketLowerName[355:368]: SchemaVersion, + _BucketName[368:375]: Pending, + _BucketLowerName[368:375]: Pending, + _BucketName[375:391]: BlockCommitments, + _BucketLowerName[375:391]: BlockCommitments, + _BucketName[391:400]: Temporary, + _BucketLowerName[391:400]: Temporary, + _BucketName[400:423]: SchemaIntermediateState, + _BucketLowerName[400:423]: SchemaIntermediateState, + _BucketName[423:427]: Peer, + _BucketLowerName[423:427]: Peer, +} + +var _BucketNames = []string{ + _BucketName[0:9], + _BucketName[9:15], + _BucketName[15:32], + _BucketName[32:47], + _BucketName[47:52], + _BucketName[52:65], + _BucketName[65:76], + _BucketName[76:100], + _BucketName[100:120], + _BucketName[120:159], + _BucketName[159:192], + _BucketName[192:221], + _BucketName[221:246], + _BucketName[246:257], + _BucketName[257:279], + _BucketName[279:299], + _BucketName[299:323], + _BucketName[323:347], + _BucketName[347:355], + _BucketName[355:368], + _BucketName[368:375], + _BucketName[375:391], + _BucketName[391:400], + _BucketName[400:423], + _BucketName[423:427], +} + +// BucketString retrieves an enum value from the enum constants string name. +// Throws an error if the param is not part of the enum. +func BucketString(s string) (Bucket, error) { + if val, ok := _BucketNameToValueMap[s]; ok { + return val, nil + } + + if val, ok := _BucketNameToValueMap[strings.ToLower(s)]; ok { + return val, nil + } + return 0, fmt.Errorf("%s does not belong to Bucket values", s) +} + +// BucketValues returns all values of the enum +func BucketValues() []Bucket { + return _BucketValues +} + +// BucketStrings returns a slice of all String values of the enum +func BucketStrings() []string { + strs := make([]string, len(_BucketNames)) + copy(strs, _BucketNames) + return strs +} + +// IsABucket returns "true" if the value is listed in the enum definition. "false" otherwise +func (i Bucket) IsABucket() bool { + for _, v := range _BucketValues { + if i == v { + return true + } + } + return false +} diff --git a/go.mod b/go.mod index 75af5a6a0b..4318371bdb 100644 --- a/go.mod +++ b/go.mod @@ -55,6 +55,7 @@ require ( github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect github.com/deckarep/golang-set/v2 v2.6.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect + github.com/dmarkham/enumer v1.5.10 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/elastic/gosigar v0.14.2 // indirect github.com/ethereum/c-kzg-4844 v0.4.0 // indirect @@ -134,6 +135,7 @@ require ( github.com/onsi/ginkgo/v2 v2.15.0 // indirect github.com/opencontainers/runtime-spec v1.1.0 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/pascaldekloe/name v1.0.0 // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect github.com/pelletier/go-toml/v2 v2.2.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect diff --git a/go.sum b/go.sum index a2a6d7a4f7..09bf9a54fc 100644 --- a/go.sum +++ b/go.sum @@ -87,6 +87,8 @@ github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5il github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/dmarkham/enumer v1.5.10 h1:ygL0L6quiTiH1jpp68DyvsWaea6MaZLZrTTkIS++R0M= +github.com/dmarkham/enumer v1.5.10/go.mod h1:e4VILe2b1nYK3JKJpRmNdl5xbDQvELc6tQ8b+GsGk6E= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= @@ -405,6 +407,8 @@ github.com/opencontainers/runtime-spec v1.1.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/ github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= +github.com/pascaldekloe/name v1.0.0 h1:n7LKFgHixETzxpRv2R77YgPUFo85QHGZKrdaYm7eY5U= +github.com/pascaldekloe/name v1.0.0/go.mod h1:Z//MfYJnH4jVpQ9wkclwu2I2MkHmXTlT9wR5UZScttM= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= github.com/pelletier/go-toml/v2 v2.2.0 h1:QLgLl2yMN7N+ruc31VynXs1vhMZa7CeHHejIeBAsoHo= From 407673ae75a53770d8b2bef743223bdfcaf25ee8 Mon Sep 17 00:00:00 2001 From: wojciechos Date: Thu, 18 Jul 2024 22:11:29 +0200 Subject: [PATCH 37/69] Add test race detection to pipeline. Fix race conditions in tests (#1956) --- .github/workflows/juno-test.yml | 4 ++++ Makefile | 6 +++++- sync/sync_test.go | 13 +++---------- utils/throttler_test.go | 14 ++++++++++---- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/.github/workflows/juno-test.yml b/.github/workflows/juno-test.yml index 79b9177d22..3a781db401 100644 --- a/.github/workflows/juno-test.yml +++ b/.github/workflows/juno-test.yml @@ -50,6 +50,10 @@ jobs: - name: Tests (No Coverage) if: matrix.os != 'ubuntu-latest' run: make test + + - name: Tests (Race Detection) + if: matrix.os == 'ubuntu-latest' + run: make test-race - name: Benchmark run: make benchmarks diff --git a/Makefile b/Makefile index 645e0d2c83..b6963b075a 100644 --- a/Makefile +++ b/Makefile @@ -12,8 +12,12 @@ endif ifeq ($(shell uname -s),Darwin) export CGO_LDFLAGS=-framework Foundation -framework SystemConfiguration + # for test-race we need to pass -ldflags to fix linker warnings on macOS + # see https://github.com/golang/go/issues/61229#issuecomment-1988965927 + TEST_RACE_LDFLAGS=-ldflags=-extldflags=-Wl,-ld_classic else export CGO_LDFLAGS=-ldl -lm + TEST_RACE_LDFLAGS= endif rustdeps: vm core-rust compiler @@ -49,7 +53,7 @@ test-cached: rustdeps ## tests with existing cache go test $(GO_TAGS) ./... test-race: clean-testcache rustdeps - go test $(GO_TAGS) ./... -race + go test $(GO_TAGS) ./... -race $(TEST_RACE_LDFLAGS) benchmarks: rustdeps ## benchmarking go test $(GO_TAGS) ./... -run=^# -bench=. -benchmem diff --git a/sync/sync_test.go b/sync/sync_test.go index 96181d2d89..4f1d8a096a 100644 --- a/sync/sync_test.go +++ b/sync/sync_test.go @@ -24,8 +24,6 @@ import ( const timeout = time.Second func TestSyncBlocks(t *testing.T) { - t.Parallel() - mockCtrl := gomock.NewController(t) t.Cleanup(mockCtrl.Finish) @@ -56,7 +54,6 @@ func TestSyncBlocks(t *testing.T) { } log := utils.NewNopZapLogger() t.Run("sync multiple blocks in an empty db", func(t *testing.T) { - t.Parallel() testDB := pebble.NewMemTest(t) bc := blockchain.New(testDB, &utils.Mainnet) synchronizer := sync.New(bc, gw, log, time.Duration(0), false) @@ -69,7 +66,6 @@ func TestSyncBlocks(t *testing.T) { }) t.Run("sync multiple blocks in a non-empty db", func(t *testing.T) { - t.Parallel() testDB := pebble.NewMemTest(t) bc := blockchain.New(testDB, &utils.Mainnet) b0, err := gw.BlockByNumber(context.Background(), 0) @@ -88,7 +84,6 @@ func TestSyncBlocks(t *testing.T) { }) t.Run("sync multiple blocks, with an unreliable gw", func(t *testing.T) { - t.Parallel() testDB := pebble.NewMemTest(t) bc := blockchain.New(testDB, &utils.Mainnet) @@ -142,7 +137,6 @@ func TestSyncBlocks(t *testing.T) { } func TestReorg(t *testing.T) { - t.Parallel() mainClient := feeder.NewTestClient(t, &utils.Mainnet) mainGw := adaptfeeder.New(mainClient) @@ -153,22 +147,21 @@ func TestReorg(t *testing.T) { // sync to integration for 2 blocks bc := blockchain.New(testDB, &utils.Integration) - synchronizer := sync.New(bc, integGw, utils.NewNopZapLogger(), time.Duration(0), false) + synchronizer := sync.New(bc, integGw, utils.NewNopZapLogger(), 0, false) ctx, cancel := context.WithTimeout(context.Background(), timeout) require.NoError(t, synchronizer.Run(ctx)) cancel() t.Run("resync to mainnet with the same db", func(t *testing.T) { - t.Parallel() - bc = blockchain.New(testDB, &utils.Mainnet) + bc := blockchain.New(testDB, &utils.Mainnet) // Ensure current head is Integration head head, err := bc.HeadsHeader() require.NoError(t, err) require.Equal(t, utils.HexToFelt(t, "0x34e815552e42c5eb5233b99de2d3d7fd396e575df2719bf98e7ed2794494f86"), head.Hash) - synchronizer = sync.New(bc, mainGw, utils.NewNopZapLogger(), time.Duration(0), false) + synchronizer = sync.New(bc, mainGw, utils.NewNopZapLogger(), 0, false) ctx, cancel = context.WithTimeout(context.Background(), timeout) require.NoError(t, synchronizer.Run(ctx)) cancel() diff --git a/utils/throttler_test.go b/utils/throttler_test.go index e8d2148684..efeb9c52a2 100644 --- a/utils/throttler_test.go +++ b/utils/throttler_test.go @@ -2,6 +2,8 @@ package utils_test import ( "errors" + "sync" + "sync/atomic" "testing" "time" @@ -13,18 +15,22 @@ import ( func TestThrottler(t *testing.T) { throttledRes := utils.NewThrottler(2, new(int)).WithMaxQueueLen(2) waitOn := make(chan struct{}) - ranCount := 0 + var runCount int64 doer := func(ptr *int) error { if ptr == nil { return errors.New("nilptr") } <-waitOn - ranCount++ + atomic.AddInt64(&runCount, 1) return nil } + + var wg sync.WaitGroup do := func() { + wg.Add(1) go func() { + defer wg.Done() require.NoError(t, throttledRes.Do(doer)) }() time.Sleep(time.Millisecond) @@ -52,6 +58,6 @@ func TestThrottler(t *testing.T) { // release the jobs waiting waitOn <- struct{}{} waitOn <- struct{}{} - time.Sleep(time.Millisecond) - assert.Equal(t, 4, ranCount) + wg.Wait() + assert.Equal(t, int64(4), runCount) } From 464e6231699de0d5ab422ac655e8ed3a28c017e7 Mon Sep 17 00:00:00 2001 From: Kirill Date: Fri, 19 Jul 2024 16:31:34 +0300 Subject: [PATCH 38/69] Disable make test-race in github workflow (#1960) --- .github/workflows/juno-test.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/juno-test.yml b/.github/workflows/juno-test.yml index 3a781db401..311c30a5b6 100644 --- a/.github/workflows/juno-test.yml +++ b/.github/workflows/juno-test.yml @@ -50,10 +50,11 @@ jobs: - name: Tests (No Coverage) if: matrix.os != 'ubuntu-latest' run: make test - - - name: Tests (Race Detection) - if: matrix.os == 'ubuntu-latest' - run: make test-race + +# Tests with race condition detector are flaky; we're disabling them for now +# - name: Tests (Race Detection) +# if: matrix.os == 'ubuntu-latest' +# run: make test-race - name: Benchmark run: make benchmarks From 04a58d2818be62fbe369e472e90c98ecbfa0c2c5 Mon Sep 17 00:00:00 2001 From: IronGauntlets Date: Tue, 26 Mar 2024 15:13:05 +0000 Subject: [PATCH 39/69] Update juno command's Use field --- cmd/juno/juno.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/juno/juno.go b/cmd/juno/juno.go index a50068d7a4..7dcb21b81e 100644 --- a/cmd/juno/juno.go +++ b/cmd/juno/juno.go @@ -217,7 +217,7 @@ func main() { //nolint:funlen func NewCmd(config *node.Config, run func(*cobra.Command, []string) error) *cobra.Command { junoCmd := &cobra.Command{ - Use: "juno [flags]", + Use: "juno", Short: "Starknet client implementation in Go.", Version: Version, RunE: run, From abcb8ab318ff5329c4d1cf68ebd6d18092cab005 Mon Sep 17 00:00:00 2001 From: IronGauntlets Date: Tue, 26 Mar 2024 15:13:37 +0000 Subject: [PATCH 40/69] Update TestConfigPrecedence comment --- cmd/juno/juno_test.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cmd/juno/juno_test.go b/cmd/juno/juno_test.go index a677dc9007..162f41a525 100644 --- a/cmd/juno/juno_test.go +++ b/cmd/juno/juno_test.go @@ -24,12 +24,11 @@ func TestConfigPrecedence(t *testing.T) { pwd, err := os.Getwd() require.NoError(t, err) - // The purpose of these tests are to ensure the precedence of our config + // The purpose of these tests is to ensure the precedence of our config // values is respected. Since viper offers this feature, it would be // redundant to enumerate all combinations. Thus, only a select few are // tested for sanity. These tests are not intended to perform semantics - // checks on the config, those will be checked by the StarknetNode - // implementation. + // checks on the config, those will be checked by the node implementation. defaultHost := "localhost" defaultLogLevel := utils.INFO defaultHTTP := false From b509c260c001413d7b65ffa89820ef552a769a6b Mon Sep 17 00:00:00 2001 From: IronGauntlets Date: Tue, 26 Mar 2024 15:14:25 +0000 Subject: [PATCH 41/69] Add db-size subcommand to juno command --- cmd/juno/juno.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/cmd/juno/juno.go b/cmd/juno/juno.go index 7dcb21b81e..bd4d68e2d4 100644 --- a/cmd/juno/juno.go +++ b/cmd/juno/juno.go @@ -350,7 +350,9 @@ func NewCmd(config *node.Config, run func(*cobra.Command, []string) error) *cobr junoCmd.Flags().Bool(corsEnableF, defaultCorsEnable, corsEnableUsage) junoCmd.Flags().String(versionedConstantsFileF, defaultVersionedConstantsFile, versionedConstantsFileUsage) junoCmd.MarkFlagsMutuallyExclusive(p2pFeederNodeF, p2pPeersF) + junoCmd.AddCommand(GenP2PKeyPair()) + junoCmd.AddCommand(DBSize()) return junoCmd } @@ -388,3 +390,30 @@ func GenP2PKeyPair() *cobra.Command { }, } } + +func DBSize() *cobra.Command { + dbSizeCmd := &cobra.Command{ + Use: "db-size", + Short: "Calculate's Juno's DB size.", + RunE: func(cmd *cobra.Command, args []string) error { + dbPath, err := cmd.Flags().GetString(dbPathF) + if err != nil { + return err + } + + _, err = fmt.Fprintln(cmd.OutOrStdout(), dbPath) + if err != nil { + return err + } + + return nil + }, + } + + // Persistent Flag was not used from the Juno command because GenP2PKeyPair would also inherit it while PersistentPreRun was not used + // because none of the subcommand required access to the node.Config. + defaultDBPath, dbPathShort := "", "p" + dbSizeCmd.Flags().StringP(dbPathF, dbPathShort, defaultDBPath, dbPathUsage) + + return dbSizeCmd +} From 6b38bb75271c380f63ba6db234719420ddbef6b0 Mon Sep 17 00:00:00 2001 From: IronGauntlets Date: Tue, 26 Mar 2024 16:20:41 +0000 Subject: [PATCH 42/69] Use cmd.OutorStdout() for printing in cmd/juno --- cmd/juno/juno.go | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/cmd/juno/juno.go b/cmd/juno/juno.go index bd4d68e2d4..31d62d7f12 100644 --- a/cmd/juno/juno.go +++ b/cmd/juno/juno.go @@ -190,7 +190,10 @@ func main() { config := new(node.Config) cmd := NewCmd(config, func(cmd *cobra.Command, _ []string) error { - fmt.Printf(greeting, Version) + _, err := fmt.Fprintf(cmd.OutOrStdout(), greeting, Version) + if err != nil { + return err + } n, err := node.New(config, Version) if err != nil { @@ -361,7 +364,7 @@ func GenP2PKeyPair() *cobra.Command { return &cobra.Command{ Use: "genp2pkeypair", Short: "Generate private key pair for p2p.", - RunE: func(*cobra.Command, []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { priv, pub, id, err := p2p.GenKeyPair() if err != nil { return err @@ -374,7 +377,10 @@ func GenP2PKeyPair() *cobra.Command { privHex := make([]byte, hex.EncodedLen(len(rawPriv))) hex.Encode(privHex, rawPriv) - fmt.Println("P2P Private Key:", string(privHex)) + _, err = fmt.Fprintln(cmd.OutOrStdout(), "P2P Private Key:", string(privHex)) + if err != nil { + return err + } rawPub, err := pub.Raw() if err != nil { @@ -383,10 +389,13 @@ func GenP2PKeyPair() *cobra.Command { pubHex := make([]byte, hex.EncodedLen(len(rawPub))) hex.Encode(pubHex, rawPub) - fmt.Println("P2P Public Key:", string(pubHex)) + _, err = fmt.Fprintln(cmd.OutOrStdout(), "P2P Public Key:", string(pubHex)) + if err != nil { + return err + } - fmt.Println("P2P PeerID:", id) - return nil + _, err = fmt.Fprintln(cmd.OutOrStdout(), "P2P PeerID:", id) + return err }, } } From 76423ae9de2e7d8f62c90b594104313bcf7399a4 Mon Sep 17 00:00:00 2001 From: IronGauntlets Date: Fri, 29 Mar 2024 15:25:30 +0000 Subject: [PATCH 43/69] Add CalculatePrefixSize() --- db/pebble/db.go | 30 +++++++++++++++++++++++++++ db/pebble/db_test.go | 49 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) diff --git a/db/pebble/db.go b/db/pebble/db.go index c55a4e3847..deee808f7e 100644 --- a/db/pebble/db.go +++ b/db/pebble/db.go @@ -1,6 +1,7 @@ package pebble import ( + "context" "sync" "testing" @@ -108,3 +109,32 @@ func (d *DB) Update(fn func(txn db.Transaction) error) error { func (d *DB) Impl() any { return d.pebble } + +func CalculatePrefixSize(ctx context.Context, pDB *DB, prefix []byte) (uint, error) { + var ( + err error + size uint + v []byte + ) + + const upperBoundofPrefix = 0xff + pebbleDB := pDB.Impl().(*pebble.DB) + it, err := pebbleDB.NewIter(&pebble.IterOptions{LowerBound: prefix, UpperBound: append(prefix, upperBoundofPrefix)}) + if err != nil { + // No need to call utils.RunAndWrapOnError() since iterator couldn't be created + return 0, err + } + + for it.First(); it.Valid(); it.Next() { + if ctx.Err() != nil { + return size, utils.RunAndWrapOnError(it.Close, ctx.Err()) + } + v, err = it.ValueAndErr() + if err != nil { + return 0, utils.RunAndWrapOnError(it.Close, err) + } + size += uint(len(it.Key()) + len(v)) + } + + return size, utils.RunAndWrapOnError(it.Close, err) +} diff --git a/db/pebble/db_test.go b/db/pebble/db_test.go index d277c2816a..a51e9e4c24 100644 --- a/db/pebble/db_test.go +++ b/db/pebble/db_test.go @@ -1,6 +1,7 @@ package pebble_test import ( + "context" "encoding/binary" "fmt" "sync" @@ -417,3 +418,51 @@ func TestPanic(t *testing.T) { })) }) } + +func TestCalculatePrefixSize(t *testing.T) { + t.Run("empty db", func(t *testing.T) { + testDB := pebble.NewMemTest(t).(*pebble.DB) + + s, err := pebble.CalculatePrefixSize(context.Background(), testDB, []byte("0")) + require.NoError(t, err) + assert.Equal(t, uint(0), s) + }) + + t.Run("non empty db but empty prefix", func(t *testing.T) { + testDB := pebble.NewMemTest(t) + require.NoError(t, testDB.Update(func(txn db.Transaction) error { + return txn.Set(append([]byte("0"), []byte("randomKey")...), []byte("someValue")) + })) + s, err := pebble.CalculatePrefixSize(context.Background(), testDB.(*pebble.DB), []byte("1")) + require.NoError(t, err) + assert.Equal(t, uint(0), s) + }) + + t.Run("size of all key value pair with the same prefix", func(t *testing.T) { + p := []byte("0") + k1, v1 := append(p, []byte("key1")...), []byte("value1") //nolint: gocritic + k2, v2 := append(p, []byte("key2")...), []byte("value2") //nolint: gocritic + k3, v3 := append(p, []byte("key3")...), []byte("value3") //nolint: gocritic + expectedSize := uint(len(k1) + len(v1) + len(k2) + len(v2) + len(k3) + len(v3)) + + testDB := pebble.NewMemTest(t) + require.NoError(t, testDB.Update(func(txn db.Transaction) error { + require.NoError(t, txn.Set(k1, v1)) + require.NoError(t, txn.Set(k2, v2)) + return txn.Set(k3, v3) + })) + + s, err := pebble.CalculatePrefixSize(context.Background(), testDB.(*pebble.DB), p) + require.NoError(t, err) + assert.Equal(t, expectedSize, s) + + t.Run("exit when context is cancelled", func(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + cancel() + + s, err := pebble.CalculatePrefixSize(ctx, testDB.(*pebble.DB), p) + assert.EqualError(t, err, context.Canceled.Error()) + assert.Equal(t, uint(0), s) + }) + }) +} From 7bb5ef2099a5bd4e4b2219db13de86bd8481a376 Mon Sep 17 00:00:00 2001 From: IronGauntlets Date: Fri, 29 Mar 2024 16:23:22 +0000 Subject: [PATCH 44/69] Add db/pebble.NewWithOptions --- db/pebble/db.go | 30 +++++++++++++++++++----------- node/node.go | 7 +------ node/node_test.go | 2 +- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/db/pebble/db.go b/db/pebble/db.go index deee808f7e..6b4869fb9f 100644 --- a/db/pebble/db.go +++ b/db/pebble/db.go @@ -2,6 +2,7 @@ package pebble import ( "context" + "fmt" "sync" "testing" @@ -13,7 +14,8 @@ import ( const ( // minCache is the minimum amount of memory in megabytes to allocate to pebble read and write caching. - minCache = 8 + // This is also pebble's default value. + minCacheSizeMB = 8 ) var _ db.DB = (*DB)(nil) @@ -24,19 +26,25 @@ type DB struct { listener db.EventListener } -// New opens a new database at the given path -func New(path string, cache uint, maxOpenFiles int, logger pebble.Logger) (db.DB, error) { +// New opens a new database at the given path with default options +func New(path string) (db.DB, error) { + return newPebble(path, nil) +} + +func NewWithOptions(path string, cacheSizeMB uint, maxOpenFiles int, colouredLogger bool) (db.DB, error) { // Ensure that the specified cache size meets a minimum threshold. - cache = max(minCache, cache) - pDB, err := newPebble(path, &pebble.Options{ - Logger: logger, - Cache: pebble.NewCache(int64(cache * utils.Megabyte)), - MaxOpenFiles: maxOpenFiles, - }) + cacheSizeMB = max(cacheSizeMB, minCacheSizeMB) + + dbLog, err := utils.NewZapLogger(utils.ERROR, colouredLogger) if err != nil { - return nil, err + return nil, fmt.Errorf("create DB logger: %w", err) } - return pDB, nil + + return newPebble(path, &pebble.Options{ + Logger: dbLog, + Cache: pebble.NewCache(int64(cacheSizeMB * utils.Megabyte)), + MaxOpenFiles: maxOpenFiles, + }) } // NewMem opens a new in-memory database diff --git a/node/node.go b/node/node.go index e622078c90..be6753ab41 100644 --- a/node/node.go +++ b/node/node.go @@ -108,17 +108,12 @@ func New(cfg *Config, version string) (*Node, error) { //nolint:gocyclo,funlen return nil, err } - dbLog, err := utils.NewZapLogger(utils.ERROR, cfg.Colour) - if err != nil { - return nil, fmt.Errorf("create DB logger: %w", err) - } - dbIsRemote := cfg.RemoteDB != "" var database db.DB if dbIsRemote { database, err = remote.New(cfg.RemoteDB, context.TODO(), log, grpc.WithTransportCredentials(insecure.NewCredentials())) } else { - database, err = pebble.New(cfg.DatabasePath, cfg.DBCacheSize, cfg.DBMaxHandles, dbLog) + database, err = pebble.NewWithOptions(cfg.DatabasePath, cfg.DBCacheSize, cfg.DBMaxHandles, cfg.Colour) } if err != nil { diff --git a/node/node_test.go b/node/node_test.go index 0a6642ac4e..a9287e0e4e 100644 --- a/node/node_test.go +++ b/node/node_test.go @@ -67,7 +67,7 @@ func TestNetworkVerificationOnNonEmptyDB(t *testing.T) { t.Run(description, func(t *testing.T) { dbPath := t.TempDir() log := utils.NewNopZapLogger() - database, err := pebble.New(dbPath, 1, 1, log) + database, err := pebble.New(dbPath) require.NoError(t, err) chain := blockchain.New(database, &network) syncer := sync.New(chain, adaptfeeder.New(feeder.NewTestClient(t, &network)), log, 0, false) From ad71d8bd6f3649075294e9f41c2d35b049cfba4c Mon Sep 17 00:00:00 2001 From: IronGauntlets Date: Fri, 29 Mar 2024 17:45:09 +0000 Subject: [PATCH 45/69] Calculate Juno's DB size --- cmd/juno/juno.go | 57 ++++++++++++++++++++++++++++++++++++++++++-- utils/slices.go | 9 +++++++ utils/slices_test.go | 15 ++++++++++++ 3 files changed, 79 insertions(+), 2 deletions(-) diff --git a/cmd/juno/juno.go b/cmd/juno/juno.go index 31d62d7f12..e7f36361ce 100644 --- a/cmd/juno/juno.go +++ b/cmd/juno/juno.go @@ -14,6 +14,8 @@ import ( "syscall" "time" + "github.com/NethermindEth/juno/db" + "github.com/NethermindEth/juno/db/pebble" _ "github.com/NethermindEth/juno/jemalloc" "github.com/NethermindEth/juno/node" "github.com/NethermindEth/juno/p2p" @@ -410,12 +412,63 @@ func DBSize() *cobra.Command { return err } - _, err = fmt.Fprintln(cmd.OutOrStdout(), dbPath) + if dbPath == "" { + return fmt.Errorf("--%v cannot be empty", dbPathF) + } + + pebbleDB, err := pebble.New(dbPath) if err != nil { return err } - return nil + var totalSize, stateSizeWithoutHistory, stateSizeWithHistory uint + + _, err = fmt.Fprintln(cmd.OutOrStdout(), "Total number of DB buckets:", len(db.BucketValues())) + if err != nil { + return err + } + + var bucketSize uint + for _, b := range db.BucketValues() { + bucketSize, err = pebble.CalculatePrefixSize(cmd.Context(), pebbleDB.(*pebble.DB), []byte{byte(b)}) + if err != nil { + return err + } + + _, err = fmt.Fprintln(cmd.OutOrStdout(), uint(b)+1, "Size of", b, "=", bucketSize) + if err != nil { + return err + } + + totalSize += bucketSize + + if utils.AnyOf(db.StateTrie, db.ContractStorage, db.Class, db.ContractNonce, + db.ContractDeploymentHeight, b) { + stateSizeWithoutHistory += bucketSize + stateSizeWithHistory += bucketSize + } + + if utils.AnyOf(db.ContractStorageHistory, db.ContractNonceHistory, db.ContractClassHashHistory, b) { + stateSizeWithHistory += bucketSize + } + } + + _, err = fmt.Fprintln(cmd.OutOrStdout()) + if err != nil { + return err + } + _, err = fmt.Fprintln(cmd.OutOrStdout(), "State size without history =", stateSizeWithoutHistory) + if err != nil { + return err + } + + _, err = fmt.Fprintln(cmd.OutOrStdout(), "State size with history =", stateSizeWithHistory) + if err != nil { + return err + } + + _, err = fmt.Fprintln(cmd.OutOrStdout(), "Total DB size =", totalSize) + return err }, } diff --git a/utils/slices.go b/utils/slices.go index c4ed49ee41..789c06ba31 100644 --- a/utils/slices.go +++ b/utils/slices.go @@ -30,3 +30,12 @@ func Filter[T any](slice []T, f func(T) bool) []T { func All[T any](slice []T, f func(T) bool) bool { return slices.IndexFunc(slice, func(e T) bool { return !f(e) }) == -1 } + +func AnyOf[T comparable](e T, values ...T) bool { + for _, v := range values { + if e == v { + return true + } + } + return false +} diff --git a/utils/slices_test.go b/utils/slices_test.go index 4f73958960..9ef6fcff66 100644 --- a/utils/slices_test.go +++ b/utils/slices_test.go @@ -58,3 +58,18 @@ func TestAll(t *testing.T) { assert.True(t, allOdd) }) } + +func TestAnyOf(t *testing.T) { + t.Run("nil args", func(t *testing.T) { + var input []int + assert.False(t, AnyOf(0, input...)) + }) + + t.Run("element is in args", func(t *testing.T) { + assert.True(t, AnyOf("2", "1", "2", "3", "4", "5", "6")) + }) + + t.Run("element is not in args", func(t *testing.T) { + assert.False(t, AnyOf("9", "1", "2", "3", "4", "5", "6")) + }) +} From 22853478af5af532b1a5a8a3539409e03a3f351e Mon Sep 17 00:00:00 2001 From: IronGauntlets Date: Thu, 18 Jul 2024 21:44:36 +0100 Subject: [PATCH 46/69] Move GenP2PKeyPari to genp2pkeypair.go --- cmd/juno/genp2pkeypair.go | 49 +++++++++++++++++++++++++++++++++++++++ cmd/juno/juno.go | 42 --------------------------------- 2 files changed, 49 insertions(+), 42 deletions(-) create mode 100644 cmd/juno/genp2pkeypair.go diff --git a/cmd/juno/genp2pkeypair.go b/cmd/juno/genp2pkeypair.go new file mode 100644 index 0000000000..8be1d0dd12 --- /dev/null +++ b/cmd/juno/genp2pkeypair.go @@ -0,0 +1,49 @@ +package main + +import ( + "encoding/hex" + "fmt" + + "github.com/NethermindEth/juno/p2p" + "github.com/spf13/cobra" +) + +func GenP2PKeyPair() *cobra.Command { + return &cobra.Command{ + Use: "genp2pkeypair", + Short: "Generate private key pair for p2p.", + RunE: func(cmd *cobra.Command, _ []string) error { + priv, pub, id, err := p2p.GenKeyPair() + if err != nil { + return err + } + + rawPriv, err := priv.Raw() + if err != nil { + return err + } + + privHex := make([]byte, hex.EncodedLen(len(rawPriv))) + hex.Encode(privHex, rawPriv) + _, err = fmt.Fprintln(cmd.OutOrStdout(), "P2P Private Key:", string(privHex)) + if err != nil { + return err + } + + rawPub, err := pub.Raw() + if err != nil { + return err + } + + pubHex := make([]byte, hex.EncodedLen(len(rawPub))) + hex.Encode(pubHex, rawPub) + _, err = fmt.Fprintln(cmd.OutOrStdout(), "P2P Public Key:", string(pubHex)) + if err != nil { + return err + } + + _, err = fmt.Fprintln(cmd.OutOrStdout(), "P2P PeerID:", id) + return err + }, + } +} diff --git a/cmd/juno/juno.go b/cmd/juno/juno.go index e7f36361ce..3cfff1f64b 100644 --- a/cmd/juno/juno.go +++ b/cmd/juno/juno.go @@ -2,7 +2,6 @@ package main import ( "context" - "encoding/hex" "fmt" "math" "math/big" @@ -18,7 +17,6 @@ import ( "github.com/NethermindEth/juno/db/pebble" _ "github.com/NethermindEth/juno/jemalloc" "github.com/NethermindEth/juno/node" - "github.com/NethermindEth/juno/p2p" "github.com/NethermindEth/juno/utils" "github.com/ethereum/go-ethereum/common" "github.com/mitchellh/mapstructure" @@ -362,46 +360,6 @@ func NewCmd(config *node.Config, run func(*cobra.Command, []string) error) *cobr return junoCmd } -func GenP2PKeyPair() *cobra.Command { - return &cobra.Command{ - Use: "genp2pkeypair", - Short: "Generate private key pair for p2p.", - RunE: func(cmd *cobra.Command, _ []string) error { - priv, pub, id, err := p2p.GenKeyPair() - if err != nil { - return err - } - - rawPriv, err := priv.Raw() - if err != nil { - return err - } - - privHex := make([]byte, hex.EncodedLen(len(rawPriv))) - hex.Encode(privHex, rawPriv) - _, err = fmt.Fprintln(cmd.OutOrStdout(), "P2P Private Key:", string(privHex)) - if err != nil { - return err - } - - rawPub, err := pub.Raw() - if err != nil { - return err - } - - pubHex := make([]byte, hex.EncodedLen(len(rawPub))) - hex.Encode(pubHex, rawPub) - _, err = fmt.Fprintln(cmd.OutOrStdout(), "P2P Public Key:", string(pubHex)) - if err != nil { - return err - } - - _, err = fmt.Fprintln(cmd.OutOrStdout(), "P2P PeerID:", id) - return err - }, - } -} - func DBSize() *cobra.Command { dbSizeCmd := &cobra.Command{ Use: "db-size", From 3608694bf02e5896c432fea2150a7640d8421f6f Mon Sep 17 00:00:00 2001 From: IronGauntlets Date: Thu, 18 Jul 2024 21:45:34 +0100 Subject: [PATCH 47/69] Move DBSize to dbsize.go --- cmd/juno/dbsize.go | 88 ++++++++++++++++++++++++++++++++++++++++++++++ cmd/juno/juno.go | 80 ----------------------------------------- 2 files changed, 88 insertions(+), 80 deletions(-) create mode 100644 cmd/juno/dbsize.go diff --git a/cmd/juno/dbsize.go b/cmd/juno/dbsize.go new file mode 100644 index 0000000000..11f1dbb6f4 --- /dev/null +++ b/cmd/juno/dbsize.go @@ -0,0 +1,88 @@ +package main + +import ( + "fmt" + + "github.com/NethermindEth/juno/db" + "github.com/NethermindEth/juno/db/pebble" + "github.com/NethermindEth/juno/utils" + "github.com/spf13/cobra" +) + +func DBSize() *cobra.Command { + dbSizeCmd := &cobra.Command{ + Use: "db-size", + Short: "Calculate's Juno's DB size.", + RunE: func(cmd *cobra.Command, args []string) error { + dbPath, err := cmd.Flags().GetString(dbPathF) + if err != nil { + return err + } + + if dbPath == "" { + return fmt.Errorf("--%v cannot be empty", dbPathF) + } + + pebbleDB, err := pebble.New(dbPath) + if err != nil { + return err + } + + var totalSize, stateSizeWithoutHistory, stateSizeWithHistory uint + + _, err = fmt.Fprintln(cmd.OutOrStdout(), "Total number of DB buckets:", len(db.BucketValues())) + if err != nil { + return err + } + + var bucketSize uint + for _, b := range db.BucketValues() { + bucketSize, err = pebble.CalculatePrefixSize(cmd.Context(), pebbleDB.(*pebble.DB), []byte{byte(b)}) + if err != nil { + return err + } + + _, err = fmt.Fprintln(cmd.OutOrStdout(), uint(b)+1, "Size of", b, "=", bucketSize) + if err != nil { + return err + } + + totalSize += bucketSize + + if utils.AnyOf(b, db.StateTrie, db.ContractStorage, db.Class, db.ContractNonce, + db.ContractDeploymentHeight) { + stateSizeWithoutHistory += bucketSize + stateSizeWithHistory += bucketSize + } + + if utils.AnyOf(b, db.ContractStorageHistory, db.ContractNonceHistory, db.ContractClassHashHistory) { + stateSizeWithHistory += bucketSize + } + } + + _, err = fmt.Fprintln(cmd.OutOrStdout()) + if err != nil { + return err + } + _, err = fmt.Fprintln(cmd.OutOrStdout(), "State size without history =", stateSizeWithoutHistory) + if err != nil { + return err + } + + _, err = fmt.Fprintln(cmd.OutOrStdout(), "State size with history =", stateSizeWithHistory) + if err != nil { + return err + } + + _, err = fmt.Fprintln(cmd.OutOrStdout(), "Total DB size =", totalSize) + return err + }, + } + + // Persistent Flag was not used from the Juno command because GenP2PKeyPair would also inherit it while PersistentPreRun was not used + // because none of the subcommand required access to the node.Config. + defaultDBPath, dbPathShort := "", "p" + dbSizeCmd.Flags().StringP(dbPathF, dbPathShort, defaultDBPath, dbPathUsage) + + return dbSizeCmd +} diff --git a/cmd/juno/juno.go b/cmd/juno/juno.go index 3cfff1f64b..65ffa90c51 100644 --- a/cmd/juno/juno.go +++ b/cmd/juno/juno.go @@ -13,8 +13,6 @@ import ( "syscall" "time" - "github.com/NethermindEth/juno/db" - "github.com/NethermindEth/juno/db/pebble" _ "github.com/NethermindEth/juno/jemalloc" "github.com/NethermindEth/juno/node" "github.com/NethermindEth/juno/utils" @@ -359,81 +357,3 @@ func NewCmd(config *node.Config, run func(*cobra.Command, []string) error) *cobr return junoCmd } - -func DBSize() *cobra.Command { - dbSizeCmd := &cobra.Command{ - Use: "db-size", - Short: "Calculate's Juno's DB size.", - RunE: func(cmd *cobra.Command, args []string) error { - dbPath, err := cmd.Flags().GetString(dbPathF) - if err != nil { - return err - } - - if dbPath == "" { - return fmt.Errorf("--%v cannot be empty", dbPathF) - } - - pebbleDB, err := pebble.New(dbPath) - if err != nil { - return err - } - - var totalSize, stateSizeWithoutHistory, stateSizeWithHistory uint - - _, err = fmt.Fprintln(cmd.OutOrStdout(), "Total number of DB buckets:", len(db.BucketValues())) - if err != nil { - return err - } - - var bucketSize uint - for _, b := range db.BucketValues() { - bucketSize, err = pebble.CalculatePrefixSize(cmd.Context(), pebbleDB.(*pebble.DB), []byte{byte(b)}) - if err != nil { - return err - } - - _, err = fmt.Fprintln(cmd.OutOrStdout(), uint(b)+1, "Size of", b, "=", bucketSize) - if err != nil { - return err - } - - totalSize += bucketSize - - if utils.AnyOf(db.StateTrie, db.ContractStorage, db.Class, db.ContractNonce, - db.ContractDeploymentHeight, b) { - stateSizeWithoutHistory += bucketSize - stateSizeWithHistory += bucketSize - } - - if utils.AnyOf(db.ContractStorageHistory, db.ContractNonceHistory, db.ContractClassHashHistory, b) { - stateSizeWithHistory += bucketSize - } - } - - _, err = fmt.Fprintln(cmd.OutOrStdout()) - if err != nil { - return err - } - _, err = fmt.Fprintln(cmd.OutOrStdout(), "State size without history =", stateSizeWithoutHistory) - if err != nil { - return err - } - - _, err = fmt.Fprintln(cmd.OutOrStdout(), "State size with history =", stateSizeWithHistory) - if err != nil { - return err - } - - _, err = fmt.Fprintln(cmd.OutOrStdout(), "Total DB size =", totalSize) - return err - }, - } - - // Persistent Flag was not used from the Juno command because GenP2PKeyPair would also inherit it while PersistentPreRun was not used - // because none of the subcommand required access to the node.Config. - defaultDBPath, dbPathShort := "", "p" - dbSizeCmd.Flags().StringP(dbPathF, dbPathShort, defaultDBPath, dbPathUsage) - - return dbSizeCmd -} From 06b233924168deb6ac72122999766d1c5aa62242 Mon Sep 17 00:00:00 2001 From: Ng Wei Han <47109095+weiihann@users.noreply.github.com> Date: Sat, 20 Jul 2024 05:46:45 +0800 Subject: [PATCH 48/69] Include semantic version in agent name (#1906) * Include client version in p2p agent name * Construct agent name in p2p package * Use fmt.Sprintf to construct agent name --- node/node.go | 2 +- p2p/p2p.go | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/node/node.go b/node/node.go index be6753ab41..fedc9a79e7 100644 --- a/node/node.go +++ b/node/node.go @@ -160,7 +160,7 @@ func New(cfg *Config, version string) (*Node, error) { //nolint:gocyclo,funlen // Do not start the feeder synchronisation synchronizer = nil } - p2pService, err = p2p.New(cfg.P2PAddr, "juno", cfg.P2PPeers, cfg.P2PPrivateKey, cfg.P2PFeederNode, + p2pService, err = p2p.New(cfg.P2PAddr, version, cfg.P2PPeers, cfg.P2PPrivateKey, cfg.P2PFeederNode, chain, &cfg.Network, log, database) if err != nil { return nil, fmt.Errorf("set up p2p service: %w", err) diff --git a/p2p/p2p.go b/p2p/p2p.go index 7565b55134..61b62cc416 100644 --- a/p2p/p2p.go +++ b/p2p/p2p.go @@ -10,6 +10,7 @@ import ( "sync" "time" + "github.com/Masterminds/semver/v3" "github.com/NethermindEth/juno/blockchain" "github.com/NethermindEth/juno/db" "github.com/NethermindEth/juno/p2p/starknet" @@ -32,6 +33,7 @@ import ( const ( keyLength = 2048 routingTableRefreshPeriod = 1 * time.Second + clientName = "juno" ) type Service struct { @@ -52,7 +54,7 @@ type Service struct { database db.DB } -func New(addr, userAgent, peers, privKeyStr string, feederNode bool, bc *blockchain.Blockchain, snNetwork *utils.Network, +func New(addr, version, peers, privKeyStr string, feederNode bool, bc *blockchain.Blockchain, snNetwork *utils.Network, log utils.SimpleLogger, database db.DB, ) (*Service, error) { if addr == "" { @@ -69,7 +71,7 @@ func New(addr, userAgent, peers, privKeyStr string, feederNode bool, bc *blockch return nil, err } - p2pHost, err := libp2p.New(libp2p.ListenAddrs(sourceMultiAddr), libp2p.Identity(prvKey), libp2p.UserAgent(userAgent)) + p2pHost, err := libp2p.New(libp2p.ListenAddrs(sourceMultiAddr), libp2p.Identity(prvKey), libp2p.UserAgent(makeAgentName(version))) if err != nil { return nil, err } @@ -434,3 +436,13 @@ func loadPeers(database db.DB) ([]peer.AddrInfo, error) { return peers, nil } + +func makeAgentName(version string) string { + modVer := "0.0.0" + semVer, err := semver.NewVersion(version) + if err == nil { + modVer = fmt.Sprintf("%d.%d.%d", semVer.Major(), semVer.Minor(), semVer.Patch()) + } + + return fmt.Sprintf("%s/%s", clientName, modVer) +} From 0ea8fe1af4213eec97849148e9c6aaff362de4c3 Mon Sep 17 00:00:00 2001 From: Aneeque Date: Tue, 23 Jul 2024 09:13:52 +0100 Subject: [PATCH 49/69] Use previously Unused bucket for Peers' storage (#1962) --- db/buckets.go | 3 +- db/buckets_enumer.go | 152 ++++++++++++++++---------------- migration/migration.go | 3 +- migration/migration_pkg_test.go | 4 +- 4 files changed, 79 insertions(+), 83 deletions(-) diff --git a/db/buckets.go b/db/buckets.go index 7ae5809e33..3918eb5f29 100644 --- a/db/buckets.go +++ b/db/buckets.go @@ -10,7 +10,7 @@ type Bucket byte // man's bucket alternative. const ( StateTrie Bucket = iota // state metadata (e.g., the state root) - Unused // Previously held contract storage roots and is now unused. May be reused in the future. + Peer // maps peer ID to peer multiaddresses ContractClassHash // maps contract addresses and class hashes ContractStorage // contract storages Class // maps class hashes to classes @@ -33,7 +33,6 @@ const ( BlockCommitments Temporary // used temporarily for migrations SchemaIntermediateState - Peer // maps peer ID to peer multiaddresses ) // Key flattens a prefix and series of byte arrays into a single []byte. diff --git a/db/buckets_enumer.go b/db/buckets_enumer.go index ec9ab4438d..0501198b61 100644 --- a/db/buckets_enumer.go +++ b/db/buckets_enumer.go @@ -7,11 +7,11 @@ import ( "strings" ) -const _BucketName = "StateTrieUnusedContractClassHashContractStorageClassContractNonceChainHeightBlockHeaderNumbersByHashBlockHeadersByNumberTransactionBlockNumbersAndIndicesByHashTransactionsByBlockNumberAndIndexReceiptsByBlockNumberAndIndexStateUpdatesByBlockNumberClassesTrieContractStorageHistoryContractNonceHistoryContractClassHashHistoryContractDeploymentHeightL1HeightSchemaVersionPendingBlockCommitmentsTemporarySchemaIntermediateStatePeer" +const _BucketName = "StateTriePeerContractClassHashContractStorageClassContractNonceChainHeightBlockHeaderNumbersByHashBlockHeadersByNumberTransactionBlockNumbersAndIndicesByHashTransactionsByBlockNumberAndIndexReceiptsByBlockNumberAndIndexStateUpdatesByBlockNumberClassesTrieContractStorageHistoryContractNonceHistoryContractClassHashHistoryContractDeploymentHeightL1HeightSchemaVersionPendingBlockCommitmentsTemporarySchemaIntermediateState" -var _BucketIndex = [...]uint16{0, 9, 15, 32, 47, 52, 65, 76, 100, 120, 159, 192, 221, 246, 257, 279, 299, 323, 347, 355, 368, 375, 391, 400, 423, 427} +var _BucketIndex = [...]uint16{0, 9, 13, 30, 45, 50, 63, 74, 98, 118, 157, 190, 219, 244, 255, 277, 297, 321, 345, 353, 366, 373, 389, 398, 421} -const _BucketLowerName = "statetrieunusedcontractclasshashcontractstorageclasscontractnoncechainheightblockheadernumbersbyhashblockheadersbynumbertransactionblocknumbersandindicesbyhashtransactionsbyblocknumberandindexreceiptsbyblocknumberandindexstateupdatesbyblocknumberclassestriecontractstoragehistorycontractnoncehistorycontractclasshashhistorycontractdeploymentheightl1heightschemaversionpendingblockcommitmentstemporaryschemaintermediatestatepeer" +const _BucketLowerName = "statetriepeercontractclasshashcontractstorageclasscontractnoncechainheightblockheadernumbersbyhashblockheadersbynumbertransactionblocknumbersandindicesbyhashtransactionsbyblocknumberandindexreceiptsbyblocknumberandindexstateupdatesbyblocknumberclassestriecontractstoragehistorycontractnoncehistorycontractclasshashhistorycontractdeploymentheightl1heightschemaversionpendingblockcommitmentstemporaryschemaintermediatestate" func (i Bucket) String() string { if i >= Bucket(len(_BucketIndex)-1) { @@ -25,7 +25,7 @@ func (i Bucket) String() string { func _BucketNoOp() { var x [1]struct{} _ = x[StateTrie-(0)] - _ = x[Unused-(1)] + _ = x[Peer-(1)] _ = x[ContractClassHash-(2)] _ = x[ContractStorage-(3)] _ = x[Class-(4)] @@ -48,90 +48,86 @@ func _BucketNoOp() { _ = x[BlockCommitments-(21)] _ = x[Temporary-(22)] _ = x[SchemaIntermediateState-(23)] - _ = x[Peer-(24)] } -var _BucketValues = []Bucket{StateTrie, Unused, ContractClassHash, ContractStorage, Class, ContractNonce, ChainHeight, BlockHeaderNumbersByHash, BlockHeadersByNumber, TransactionBlockNumbersAndIndicesByHash, TransactionsByBlockNumberAndIndex, ReceiptsByBlockNumberAndIndex, StateUpdatesByBlockNumber, ClassesTrie, ContractStorageHistory, ContractNonceHistory, ContractClassHashHistory, ContractDeploymentHeight, L1Height, SchemaVersion, Pending, BlockCommitments, Temporary, SchemaIntermediateState, Peer} +var _BucketValues = []Bucket{StateTrie, Peer, ContractClassHash, ContractStorage, Class, ContractNonce, ChainHeight, BlockHeaderNumbersByHash, BlockHeadersByNumber, TransactionBlockNumbersAndIndicesByHash, TransactionsByBlockNumberAndIndex, ReceiptsByBlockNumberAndIndex, StateUpdatesByBlockNumber, ClassesTrie, ContractStorageHistory, ContractNonceHistory, ContractClassHashHistory, ContractDeploymentHeight, L1Height, SchemaVersion, Pending, BlockCommitments, Temporary, SchemaIntermediateState} var _BucketNameToValueMap = map[string]Bucket{ _BucketName[0:9]: StateTrie, _BucketLowerName[0:9]: StateTrie, - _BucketName[9:15]: Unused, - _BucketLowerName[9:15]: Unused, - _BucketName[15:32]: ContractClassHash, - _BucketLowerName[15:32]: ContractClassHash, - _BucketName[32:47]: ContractStorage, - _BucketLowerName[32:47]: ContractStorage, - _BucketName[47:52]: Class, - _BucketLowerName[47:52]: Class, - _BucketName[52:65]: ContractNonce, - _BucketLowerName[52:65]: ContractNonce, - _BucketName[65:76]: ChainHeight, - _BucketLowerName[65:76]: ChainHeight, - _BucketName[76:100]: BlockHeaderNumbersByHash, - _BucketLowerName[76:100]: BlockHeaderNumbersByHash, - _BucketName[100:120]: BlockHeadersByNumber, - _BucketLowerName[100:120]: BlockHeadersByNumber, - _BucketName[120:159]: TransactionBlockNumbersAndIndicesByHash, - _BucketLowerName[120:159]: TransactionBlockNumbersAndIndicesByHash, - _BucketName[159:192]: TransactionsByBlockNumberAndIndex, - _BucketLowerName[159:192]: TransactionsByBlockNumberAndIndex, - _BucketName[192:221]: ReceiptsByBlockNumberAndIndex, - _BucketLowerName[192:221]: ReceiptsByBlockNumberAndIndex, - _BucketName[221:246]: StateUpdatesByBlockNumber, - _BucketLowerName[221:246]: StateUpdatesByBlockNumber, - _BucketName[246:257]: ClassesTrie, - _BucketLowerName[246:257]: ClassesTrie, - _BucketName[257:279]: ContractStorageHistory, - _BucketLowerName[257:279]: ContractStorageHistory, - _BucketName[279:299]: ContractNonceHistory, - _BucketLowerName[279:299]: ContractNonceHistory, - _BucketName[299:323]: ContractClassHashHistory, - _BucketLowerName[299:323]: ContractClassHashHistory, - _BucketName[323:347]: ContractDeploymentHeight, - _BucketLowerName[323:347]: ContractDeploymentHeight, - _BucketName[347:355]: L1Height, - _BucketLowerName[347:355]: L1Height, - _BucketName[355:368]: SchemaVersion, - _BucketLowerName[355:368]: SchemaVersion, - _BucketName[368:375]: Pending, - _BucketLowerName[368:375]: Pending, - _BucketName[375:391]: BlockCommitments, - _BucketLowerName[375:391]: BlockCommitments, - _BucketName[391:400]: Temporary, - _BucketLowerName[391:400]: Temporary, - _BucketName[400:423]: SchemaIntermediateState, - _BucketLowerName[400:423]: SchemaIntermediateState, - _BucketName[423:427]: Peer, - _BucketLowerName[423:427]: Peer, + _BucketName[9:13]: Peer, + _BucketLowerName[9:13]: Peer, + _BucketName[13:30]: ContractClassHash, + _BucketLowerName[13:30]: ContractClassHash, + _BucketName[30:45]: ContractStorage, + _BucketLowerName[30:45]: ContractStorage, + _BucketName[45:50]: Class, + _BucketLowerName[45:50]: Class, + _BucketName[50:63]: ContractNonce, + _BucketLowerName[50:63]: ContractNonce, + _BucketName[63:74]: ChainHeight, + _BucketLowerName[63:74]: ChainHeight, + _BucketName[74:98]: BlockHeaderNumbersByHash, + _BucketLowerName[74:98]: BlockHeaderNumbersByHash, + _BucketName[98:118]: BlockHeadersByNumber, + _BucketLowerName[98:118]: BlockHeadersByNumber, + _BucketName[118:157]: TransactionBlockNumbersAndIndicesByHash, + _BucketLowerName[118:157]: TransactionBlockNumbersAndIndicesByHash, + _BucketName[157:190]: TransactionsByBlockNumberAndIndex, + _BucketLowerName[157:190]: TransactionsByBlockNumberAndIndex, + _BucketName[190:219]: ReceiptsByBlockNumberAndIndex, + _BucketLowerName[190:219]: ReceiptsByBlockNumberAndIndex, + _BucketName[219:244]: StateUpdatesByBlockNumber, + _BucketLowerName[219:244]: StateUpdatesByBlockNumber, + _BucketName[244:255]: ClassesTrie, + _BucketLowerName[244:255]: ClassesTrie, + _BucketName[255:277]: ContractStorageHistory, + _BucketLowerName[255:277]: ContractStorageHistory, + _BucketName[277:297]: ContractNonceHistory, + _BucketLowerName[277:297]: ContractNonceHistory, + _BucketName[297:321]: ContractClassHashHistory, + _BucketLowerName[297:321]: ContractClassHashHistory, + _BucketName[321:345]: ContractDeploymentHeight, + _BucketLowerName[321:345]: ContractDeploymentHeight, + _BucketName[345:353]: L1Height, + _BucketLowerName[345:353]: L1Height, + _BucketName[353:366]: SchemaVersion, + _BucketLowerName[353:366]: SchemaVersion, + _BucketName[366:373]: Pending, + _BucketLowerName[366:373]: Pending, + _BucketName[373:389]: BlockCommitments, + _BucketLowerName[373:389]: BlockCommitments, + _BucketName[389:398]: Temporary, + _BucketLowerName[389:398]: Temporary, + _BucketName[398:421]: SchemaIntermediateState, + _BucketLowerName[398:421]: SchemaIntermediateState, } var _BucketNames = []string{ _BucketName[0:9], - _BucketName[9:15], - _BucketName[15:32], - _BucketName[32:47], - _BucketName[47:52], - _BucketName[52:65], - _BucketName[65:76], - _BucketName[76:100], - _BucketName[100:120], - _BucketName[120:159], - _BucketName[159:192], - _BucketName[192:221], - _BucketName[221:246], - _BucketName[246:257], - _BucketName[257:279], - _BucketName[279:299], - _BucketName[299:323], - _BucketName[323:347], - _BucketName[347:355], - _BucketName[355:368], - _BucketName[368:375], - _BucketName[375:391], - _BucketName[391:400], - _BucketName[400:423], - _BucketName[423:427], + _BucketName[9:13], + _BucketName[13:30], + _BucketName[30:45], + _BucketName[45:50], + _BucketName[50:63], + _BucketName[63:74], + _BucketName[74:98], + _BucketName[98:118], + _BucketName[118:157], + _BucketName[157:190], + _BucketName[190:219], + _BucketName[219:244], + _BucketName[244:255], + _BucketName[255:277], + _BucketName[277:297], + _BucketName[297:321], + _BucketName[321:345], + _BucketName[345:353], + _BucketName[353:366], + _BucketName[366:373], + _BucketName[373:389], + _BucketName[389:398], + _BucketName[398:421], } // BucketString retrieves an enum value from the enum constants string name. diff --git a/migration/migration.go b/migration/migration.go index 3c75bdd575..631cc5c5f6 100644 --- a/migration/migration.go +++ b/migration/migration.go @@ -210,7 +210,8 @@ func relocateContractStorageRootKeys(txn db.Transaction, _ *utils.Network) error // Iterate over all entries in the old bucket, copying each into memory. // Even with millions of contracts, this shouldn't be too expensive. oldEntries := make(map[string][]byte) - oldPrefix := db.Unused.Key() + // Previously ContractStorageRoot were stored in the Peer bucket. + oldPrefix := db.Peer.Key() var value []byte for it.Seek(oldPrefix); it.Valid(); it.Next() { // Stop iterating once we're out of the old bucket. diff --git a/migration/migration_pkg_test.go b/migration/migration_pkg_test.go index e9015a68f8..fbcc168a90 100644 --- a/migration/migration_pkg_test.go +++ b/migration/migration_pkg_test.go @@ -54,7 +54,7 @@ func TestRelocateContractStorageRootKeys(t *testing.T) { for i := 0; i < numberOfContracts; i++ { exampleBytes := new(felt.Felt).SetUint64(uint64(i)).Bytes() // Use exampleBytes for the key suffix (the contract address) and the value. - err := txn.Set(db.Unused.Key(exampleBytes[:]), exampleBytes[:]) + err := txn.Set(db.Peer.Key(exampleBytes[:]), exampleBytes[:]) require.NoError(t, err) } @@ -72,7 +72,7 @@ func TestRelocateContractStorageRootKeys(t *testing.T) { })) // Old entry does not exist. - oldKey := db.Unused.Key(exampleBytes[:]) + oldKey := db.Peer.Key(exampleBytes[:]) err := txn.Get(oldKey, func(val []byte) error { return nil }) require.ErrorIs(t, db.ErrKeyNotFound, err) } From f48be088146911fd52997933f19112db695d28d9 Mon Sep 17 00:00:00 2001 From: Kirill Date: Tue, 23 Jul 2024 21:24:16 +0300 Subject: [PATCH 50/69] Remove returned error from crypto.StarknetKeccak function (#1963) --- adapters/p2p2core/class.go | 5 +---- adapters/sn2core/sn2core.go | 6 +----- core/crypto/keccak.go | 10 +++++++--- core/crypto/keccak_test.go | 5 +---- 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/adapters/p2p2core/class.go b/adapters/p2p2core/class.go index 8094a03006..40c5a7bc51 100644 --- a/adapters/p2p2core/class.go +++ b/adapters/p2p2core/class.go @@ -35,10 +35,7 @@ func AdaptClass(class *spec.Class) core.Class { } case *spec.Class_Cairo1: cairo1 := cls.Cairo1 - abiHash, err := crypto.StarknetKeccak([]byte(cairo1.Abi)) - if err != nil { - panic(err) - } + abiHash := crypto.StarknetKeccak([]byte(cairo1.Abi)) program := utils.Map(cairo1.Program, AdaptFelt) compiled, err := createCompiledClass(cairo1) diff --git a/adapters/sn2core/sn2core.go b/adapters/sn2core/sn2core.go index 326a643a3b..27b774cf6a 100644 --- a/adapters/sn2core/sn2core.go +++ b/adapters/sn2core/sn2core.go @@ -256,15 +256,11 @@ func AdaptCairo1Class(response *starknet.SierraDefinition, compiledClass *starkn class.ProgramHash = crypto.PoseidonArray(class.Program...) class.Abi = response.Abi - class.AbiHash, err = crypto.StarknetKeccak([]byte(class.Abi)) - if err != nil { - return nil, err - } + class.AbiHash = crypto.StarknetKeccak([]byte(class.Abi)) adapt := func(ep starknet.SierraEntryPoint) core.SierraEntryPoint { return core.SierraEntryPoint{Index: ep.Index, Selector: ep.Selector} } - class.EntryPoints.External = utils.Map(utils.NonNilSlice(response.EntryPoints.External), adapt) class.EntryPoints.L1Handler = utils.Map(utils.NonNilSlice(response.EntryPoints.L1Handler), adapt) class.EntryPoints.Constructor = utils.Map(utils.NonNilSlice(response.EntryPoints.Constructor), adapt) diff --git a/core/crypto/keccak.go b/core/crypto/keccak.go index 8bded1232b..5e2554d91a 100644 --- a/core/crypto/keccak.go +++ b/core/crypto/keccak.go @@ -1,6 +1,8 @@ package crypto import ( + "fmt" + "github.com/NethermindEth/juno/core/felt" "golang.org/x/crypto/sha3" ) @@ -8,14 +10,16 @@ import ( // StarknetKeccak implements [Starknet keccak] // // [Starknet keccak]: https://docs.starknet.io/architecture-and-concepts/cryptography/hash-functions/#starknet_keccak -func StarknetKeccak(b []byte) (*felt.Felt, error) { +func StarknetKeccak(b []byte) *felt.Felt { h := sha3.NewLegacyKeccak256() _, err := h.Write(b) if err != nil { - return nil, err + // actual implementation (sha3.state{} type) doesn't return error in Write method + // we keep this panic as an assertion in case they will modify the implementation + panic(fmt.Errorf("failed to write to LegacyKeccak256 hash: %w", err)) } d := h.Sum(nil) // Remove the first 6 bits from the first byte d[0] &= 3 - return new(felt.Felt).SetBytes(d), nil + return new(felt.Felt).SetBytes(d) } diff --git a/core/crypto/keccak_test.go b/core/crypto/keccak_test.go index 39dc24a0e7..5b5d7cbccc 100644 --- a/core/crypto/keccak_test.go +++ b/core/crypto/keccak_test.go @@ -6,7 +6,6 @@ import ( "github.com/NethermindEth/juno/core/crypto" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) func TestStarknetKeccak(t *testing.T) { @@ -22,11 +21,9 @@ func TestStarknetKeccak(t *testing.T) { t.Parallel() for _, test := range tests { - test := test t.Run(test.input, func(t *testing.T) { t.Parallel() - d, err := crypto.StarknetKeccak([]byte(test.input)) - require.NoError(t, err) + d := crypto.StarknetKeccak([]byte(test.input)) got := fmt.Sprintf("%x", d.Bytes()) assert.Equal(t, test.want, got) From 5dfb06ef4e7a36ed6f5ba3f74e735d5c402e55f2 Mon Sep 17 00:00:00 2001 From: IronGauntlets Date: Tue, 23 Jul 2024 23:58:43 +0100 Subject: [PATCH 51/69] Add StateDiff Length and Commitment to p2p Header --- adapters/core2p2p/block.go | 14 +++++++++----- core/state_update.go | 15 +++++++++++++++ core/state_update_test.go | 22 ++++++++++++++++++++++ p2p/starknet/handlers.go | 8 +++++++- p2p/sync.go | 1 + 5 files changed, 54 insertions(+), 6 deletions(-) diff --git a/adapters/core2p2p/block.go b/adapters/core2p2p/block.go index ea290e8f04..3495df361d 100644 --- a/adapters/core2p2p/block.go +++ b/adapters/core2p2p/block.go @@ -27,7 +27,9 @@ func AdaptSignature(sig []*felt.Felt) *spec.ConsensusSignature { } } -func AdaptHeader(header *core.Header, commitments *core.BlockCommitments) *spec.SignedBlockHeader { +func AdaptHeader(header *core.Header, commitments *core.BlockCommitments, + stateDiffCommitment *felt.Felt, stateDiffLength uint64, +) *spec.SignedBlockHeader { return &spec.SignedBlockHeader{ BlockHash: AdaptHash(header.Hash), ParentHash: AdaptHash(header.ParentHash), @@ -43,13 +45,15 @@ func AdaptHeader(header *core.Header, commitments *core.BlockCommitments) *spec. NLeaves: header.EventCount, Root: AdaptHash(commitments.EventCommitment), }, - // todo fill receipts - Receipts: nil, + // todo fill receipts with receipt commitment + Receipts: AdaptHash(&felt.Zero), ProtocolVersion: header.ProtocolVersion, GasPriceFri: AdaptUint128(header.GasPrice), Signatures: utils.Map(header.Signatures, AdaptSignature), - // todo(kirill) set these fields - StateDiffCommitment: nil, + StateDiffCommitment: &spec.StateDiffCommitment{ + StateDiffLength: stateDiffLength, + Root: AdaptHash(stateDiffCommitment), + }, GasPriceWei: AdaptUint128(header.GasPriceSTRK), DataGasPriceFri: AdaptUint128(header.L1DataGasPrice.PriceInFri), DataGasPriceWei: AdaptUint128(header.L1DataGasPrice.PriceInWei), diff --git a/core/state_update.go b/core/state_update.go index 63e291e402..8bb88f681e 100644 --- a/core/state_update.go +++ b/core/state_update.go @@ -35,6 +35,21 @@ func EmptyStateDiff() *StateDiff { } } +func (d *StateDiff) Length() uint64 { + var length int + + for _, storageDiff := range d.StorageDiffs { + length += len(storageDiff) + } + length += len(d.Nonces) + length += len(d.DeployedContracts) + length += len(d.DeclaredV0Classes) + length += len(d.DeclaredV1Classes) + length += len(d.ReplacedClasses) + + return uint64(length) +} + func (d *StateDiff) Commitment() *felt.Felt { version := felt.Zero var tmpFelt felt.Felt diff --git a/core/state_update_test.go b/core/state_update_test.go index 0d03b4f67e..7cecfb9a4c 100644 --- a/core/state_update_test.go +++ b/core/state_update_test.go @@ -2,6 +2,7 @@ package core_test import ( "context" + "fmt" "testing" "github.com/NethermindEth/juno/clients/feeder" @@ -42,3 +43,24 @@ func TestStateDiffCommitment(t *testing.T) { assert.Equal(t, utils.HexToFelt(t, test.expected), commitment) } } + +func TestStateDiffLength(t *testing.T) { + client := feeder.NewTestClient(t, &utils.Sepolia) + gw := adaptfeeder.New(client) + + for _, test := range []struct { + blockNum uint64 + expectedLength uint64 + }{ + {blockNum: 0, expectedLength: 11}, + {blockNum: 1, expectedLength: 1}, + {blockNum: 2, expectedLength: 1}, + } { + t.Run(fmt.Sprintf("blockNum=%d", test.blockNum), func(t *testing.T) { + su, err := gw.StateUpdate(context.Background(), test.blockNum) + require.NoError(t, err) + length := su.StateDiff.Length() + assert.Equal(t, test.expectedLength, length) + }) + } +} diff --git a/p2p/starknet/handlers.go b/p2p/starknet/handlers.go index 2893268792..cf09e6ba86 100644 --- a/p2p/starknet/handlers.go +++ b/p2p/starknet/handlers.go @@ -143,9 +143,15 @@ func (h *Handler) onHeadersRequest(req *spec.BlockHeadersRequest) (iter.Seq[prot return nil, err } + stateUpdate, err := h.bcReader.StateUpdateByNumber(header.Number) + if err != nil { + return nil, err + } + return &spec.BlockHeadersResponse{ HeaderMessage: &spec.BlockHeadersResponse_Header{ - Header: core2p2p.AdaptHeader(header, commitments), + Header: core2p2p.AdaptHeader(header, commitments, stateUpdate.StateDiff.Commitment(), + stateUpdate.StateDiff.Length()), }, }, nil }) diff --git a/p2p/sync.go b/p2p/sync.go index 61afb503ee..69be6d2f6f 100644 --- a/p2p/sync.go +++ b/p2p/sync.go @@ -656,6 +656,7 @@ func (s *syncService) randomPeerStream(ctx context.Context, pids ...protocol.ID) } stream, err := s.host.NewStream(ctx, randPeer, pids...) if err != nil { + s.log.Debugw("Error creating stream", "peer", randPeer, "err", err) s.removePeer(randPeer) return nil, err } From afa52dd5916eb67d77d72e18af2f0d20da8be725 Mon Sep 17 00:00:00 2001 From: IronGauntlets Date: Tue, 23 Jul 2024 23:59:51 +0100 Subject: [PATCH 52/69] Add KadPrefix() for discovery --- p2p/p2p.go | 2 +- p2p/starknet/ids.go | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/p2p/p2p.go b/p2p/p2p.go index 61b62cc416..74fb5ab855 100644 --- a/p2p/p2p.go +++ b/p2p/p2p.go @@ -131,7 +131,7 @@ func NewWithHost(p2phost host.Host, peers string, feederNode bool, bc *blockchai func makeDHT(p2phost host.Host, addrInfos []peer.AddrInfo) (*dht.IpfsDHT, error) { return dht.New(context.Background(), p2phost, - dht.ProtocolPrefix(starknet.Prefix), + dht.ProtocolPrefix(starknet.KadPrefix()), dht.BootstrapPeers(addrInfos...), dht.RoutingTableRefreshPeriod(routingTableRefreshPeriod), dht.Mode(dht.ModeServer), diff --git a/p2p/starknet/ids.go b/p2p/starknet/ids.go index d1b97b0ad2..67b695c3dc 100644 --- a/p2p/starknet/ids.go +++ b/p2p/starknet/ids.go @@ -6,6 +6,10 @@ import ( const Prefix = "/starknet" +func KadPrefix() protocol.ID { + return Prefix + "/kad" +} + func HeadersPID() protocol.ID { return Prefix + "/headers/0.1.0-rc.0" } From df01416d5ba8aad9d202d17cfdc86ed623ef4887 Mon Sep 17 00:00:00 2001 From: Kirill Date: Thu, 25 Jul 2024 17:10:54 +0300 Subject: [PATCH 53/69] Remove unused files/directories from .gitignore (#1976) --- .gitignore | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.gitignore b/.gitignore index ab462fe4b2..44e4b65aac 100644 --- a/.gitignore +++ b/.gitignore @@ -4,14 +4,8 @@ .dist build/ coverage/* -courtney/ -__pycache__/ config/ .envrc - -# pyenv -.python-version - # Default path for Juno DB files. It will get created if you follow the # README and/or run `./build/juno` command. juno/ From 4cddf0c421410ac0d2c7e0c339d7b9208b5df289 Mon Sep 17 00:00:00 2001 From: Kirill Date: Thu, 25 Jul 2024 18:58:32 +0300 Subject: [PATCH 54/69] Add calls to rust formatter for make format (#1977) --- Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index b6963b075a..c5a4db751b 100644 --- a/Makefile +++ b/Makefile @@ -81,7 +81,10 @@ lint: tidy: ## add missing and remove unused modules go mod tidy -format: ## run go formatter +format: ## run go & rust formatters + $(MAKE) -C vm/rust format + $(MAKE) -C core/rust format + $(MAKE) -C starknet/rust format gofumpt -l -w . clean: ## clean project builds From 62b354d4c828d7b405fc1e08d130790523f01ee0 Mon Sep 17 00:00:00 2001 From: Kirill Date: Fri, 26 Jul 2024 12:05:30 +0300 Subject: [PATCH 55/69] Update blockifier to 0.8.0-rc.1 (#1911) --- Dockerfile | 14 +- node/node.go | 2 +- node/throttled_vm.go | 3 +- rpc/trace_test.go | 15 +- starknet/rust/Cargo.toml | 2 +- vm/rust/Cargo.toml | 7 +- vm/rust/src/jsonrpc.rs | 98 ++-- vm/rust/src/juno_state_reader.rs | 74 +-- vm/rust/src/lib.rs | 240 +++++++--- vm/rust/versioned_constants_13_0.json | 208 ++++++-- vm/rust/versioned_constants_13_1.json | 249 +++++++--- vm/rust/versioned_constants_13_1_1.json | 599 ++++++++++++++++++++++++ vm/trace.go | 3 + vm/vm.go | 31 +- vm/vm_test.go | 14 +- 15 files changed, 1309 insertions(+), 250 deletions(-) create mode 100644 vm/rust/versioned_constants_13_1_1.json diff --git a/Dockerfile b/Dockerfile index ed40d57697..30b0c4b551 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,12 @@ # Stage 1: Build golang dependencies and binaries -FROM ubuntu:24.04 AS build +FROM ubuntu:24.10 AS build ARG VM_DEBUG -# Install Alpine Dependencies -# removal is temp. to fix https://github.com/orgs/community/discussions/120966 -RUN apt-get update && \ - apt-get install build-essential cargo git golang upx-ucl libjemalloc-dev libjemalloc2 -y + +RUN apt-get -qq update && \ + apt-get -qq install curl build-essential git golang upx-ucl libjemalloc-dev libjemalloc2 -y +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -q -y WORKDIR /app @@ -14,13 +14,13 @@ WORKDIR /app COPY . . # Build the project -RUN VM_DEBUG=${VM_DEBUG} make juno +RUN bash -c 'source ~/.cargo/env && VM_DEBUG=${VM_DEBUG} make juno' # Compress the executable with UPX RUN upx-ucl /app/build/juno # Stage 2: Build Docker image -FROM ubuntu:23.10 AS runtime +FROM ubuntu:24.10 AS runtime RUN apt-get update && apt-get install -y ca-certificates curl gawk grep libjemalloc-dev libjemalloc2 diff --git a/node/node.go b/node/node.go index fedc9a79e7..592cffd743 100644 --- a/node/node.go +++ b/node/node.go @@ -172,7 +172,7 @@ func New(cfg *Config, version string) (*Node, error) { //nolint:gocyclo,funlen services = append(services, synchronizer) } - throttledVM := NewThrottledVM(vm.New(log), cfg.MaxVMs, int32(cfg.MaxVMQueue)) + throttledVM := NewThrottledVM(vm.New(false, log), cfg.MaxVMs, int32(cfg.MaxVMQueue)) var syncReader sync.Reader = &sync.NoopSynchronizer{} if synchronizer != nil { diff --git a/node/throttled_vm.go b/node/throttled_vm.go index f502d134d9..7151867c00 100644 --- a/node/throttled_vm.go +++ b/node/throttled_vm.go @@ -31,7 +31,8 @@ func (tvm *ThrottledVM) Call(callInfo *vm.CallInfo, blockInfo *vm.BlockInfo, sta } func (tvm *ThrottledVM) Execute(txns []core.Transaction, declaredClasses []core.Class, paidFeesOnL1 []*felt.Felt, - blockInfo *vm.BlockInfo, state core.StateReader, network *utils.Network, skipChargeFee, skipValidate, errOnRevert, useBlobData bool, + blockInfo *vm.BlockInfo, state core.StateReader, network *utils.Network, skipChargeFee, skipValidate, errOnRevert, + useBlobData bool, ) ([]*felt.Felt, []*felt.Felt, []vm.TransactionTrace, error) { var ret []*felt.Felt var traces []vm.TransactionTrace diff --git a/rpc/trace_test.go b/rpc/trace_test.go index b575531745..b1a4debaf2 100644 --- a/rpc/trace_test.go +++ b/rpc/trace_test.go @@ -245,7 +245,8 @@ func TestTraceTransaction(t *testing.T) { consumedGas := []*felt.Felt{new(felt.Felt).SetUint64(1)} overallFee := []*felt.Felt{new(felt.Felt).SetUint64(1)} mockVM.EXPECT().Execute([]core.Transaction{tx}, []core.Class{declaredClass.Class}, []*felt.Felt{}, - &vm.BlockInfo{Header: header}, gomock.Any(), &utils.Mainnet, false, false, false, true).Return(overallFee, consumedGas, []vm.TransactionTrace{*vmTrace}, nil) + &vm.BlockInfo{Header: header}, gomock.Any(), &utils.Mainnet, false, false, false, true). + Return(overallFee, consumedGas, []vm.TransactionTrace{*vmTrace}, nil) trace, err := handler.TraceTransaction(context.Background(), *hash) require.Nil(t, err) @@ -324,7 +325,8 @@ func TestTraceTransactionV0_6(t *testing.T) { vmTrace := new(vm.TransactionTrace) require.NoError(t, json.Unmarshal(vmTraceJSON, vmTrace)) mockVM.EXPECT().Execute([]core.Transaction{tx}, []core.Class{declaredClass.Class}, []*felt.Felt{}, - &vm.BlockInfo{Header: header}, gomock.Any(), &utils.Mainnet, false, false, false, false).Return(nil, nil, []vm.TransactionTrace{*vmTrace}, nil) + &vm.BlockInfo{Header: header}, gomock.Any(), &utils.Mainnet, false, false, false, false). + Return(nil, nil, []vm.TransactionTrace{*vmTrace}, nil) trace, err := handler.TraceTransactionV0_6(context.Background(), *hash) require.Nil(t, err) @@ -379,7 +381,8 @@ func TestTraceTransactionV0_6(t *testing.T) { vmTrace := new(vm.TransactionTrace) require.NoError(t, json.Unmarshal(vmTraceJSON, vmTrace)) mockVM.EXPECT().Execute([]core.Transaction{tx}, []core.Class{declaredClass.Class}, []*felt.Felt{}, - &vm.BlockInfo{Header: header}, gomock.Any(), &utils.Mainnet, false, false, false, false).Return(nil, nil, []vm.TransactionTrace{*vmTrace}, nil) + &vm.BlockInfo{Header: header}, gomock.Any(), &utils.Mainnet, false, false, false, false). + Return(nil, nil, []vm.TransactionTrace{*vmTrace}, nil) trace, err := handler.TraceTransactionV0_6(context.Background(), *hash) require.Nil(t, err) @@ -470,7 +473,8 @@ func TestTraceBlockTransactions(t *testing.T) { vmTrace := vm.TransactionTrace{} require.NoError(t, json.Unmarshal(vmTraceJSON, &vmTrace)) mockVM.EXPECT().Execute(block.Transactions, []core.Class{declaredClass.Class}, paidL1Fees, &vm.BlockInfo{Header: header}, - gomock.Any(), n, false, false, false, false).Return(nil, []vm.TransactionTrace{vmTrace, vmTrace}, nil) + gomock.Any(), n, false, false, false, false). + Return(nil, []vm.TransactionTrace{vmTrace, vmTrace}, nil) result, err := handler.TraceBlockTransactions(context.Background(), rpc.BlockID{Hash: blockHash}) require.Nil(t, err) @@ -536,7 +540,8 @@ func TestTraceBlockTransactions(t *testing.T) { vmTrace := vm.TransactionTrace{} require.NoError(t, json.Unmarshal(vmTraceJSON, &vmTrace)) mockVM.EXPECT().Execute([]core.Transaction{tx}, []core.Class{declaredClass.Class}, []*felt.Felt{}, &vm.BlockInfo{Header: header}, - gomock.Any(), n, false, false, false, false).Return(nil, []vm.TransactionTrace{vmTrace}, nil) + gomock.Any(), n, false, false, false, false). + Return(nil, []vm.TransactionTrace{vmTrace}, nil) expectedResult := []rpc.TracedBlockTransaction{ { diff --git a/starknet/rust/Cargo.toml b/starknet/rust/Cargo.toml index 10fdc905dc..5a84b57548 100644 --- a/starknet/rust/Cargo.toml +++ b/starknet/rust/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" [dependencies] serde = "1.0.171" serde_json = { version = "1.0.96", features = ["raw_value"] } -cairo-lang-starknet-classes = "=2.6.0" +cairo-lang-starknet-classes = "=2.7.0-rc.3" [lib] crate-type = ["staticlib"] diff --git a/vm/rust/Cargo.toml b/vm/rust/Cargo.toml index fe134dc3cb..fc79bc297f 100644 --- a/vm/rust/Cargo.toml +++ b/vm/rust/Cargo.toml @@ -8,9 +8,10 @@ edition = "2021" [dependencies] serde = "1.0.171" serde_json = { version = "1.0.96", features = ["raw_value"] } -blockifier = "=0.6.0-rc.2" -starknet_api = "=0.10.0" -cairo-vm = "=0.9.2" +blockifier = "=0.8.0-rc.1" +starknet_api = "=0.13.0-rc.0" +cairo-vm = "=1.0.0-rc5" +starknet-types-core = { version = "0.1.5", features = ["hash", "prime-bigint"] } indexmap = "2.1.0" cached = "0.46.1" once_cell = "1.18.0" diff --git a/vm/rust/src/jsonrpc.rs b/vm/rust/src/jsonrpc.rs index 04984300f0..aa84f58a80 100644 --- a/vm/rust/src/jsonrpc.rs +++ b/vm/rust/src/jsonrpc.rs @@ -1,20 +1,19 @@ use blockifier; -use blockifier::execution::entry_point::CallType; use blockifier::execution::call_info::OrderedL2ToL1Message; -use cairo_vm::vm::runners::builtin_runner::{ - BITWISE_BUILTIN_NAME, EC_OP_BUILTIN_NAME, HASH_BUILTIN_NAME, - POSEIDON_BUILTIN_NAME, RANGE_CHECK_BUILTIN_NAME, SIGNATURE_BUILTIN_NAME, KECCAK_BUILTIN_NAME, - SEGMENT_ARENA_BUILTIN_NAME, -}; -use blockifier::state::cached_state::TransactionalState; +use blockifier::execution::entry_point::CallType; +use blockifier::state::cached_state::CachedState; +use blockifier::state::cached_state::{CommitmentStateDiff, TransactionalState}; use blockifier::state::errors::StateError; -use blockifier::state::state_api::{State, StateReader}; +use blockifier::state::state_api::StateReader; +use cairo_vm::types::builtin_name::BuiltinName; use serde::Serialize; -use starknet_api::core::{ClassHash, ContractAddress, EntryPointSelector, PatriciaKey, EthAddress}; +use starknet_api::core::{ClassHash, ContractAddress, EntryPointSelector, EthAddress, PatriciaKey}; use starknet_api::deprecated_contract_class::EntryPointType; -use starknet_api::hash::StarkFelt; use starknet_api::transaction::{Calldata, EventContent, L2ToL1Payload}; use starknet_api::transaction::{DeclareTransaction, Transaction as StarknetApiTransaction}; +use starknet_types_core::felt::Felt; + +type StarkFelt = Felt; use crate::juno_state_reader::JunoStateReader; @@ -22,7 +21,8 @@ use crate::juno_state_reader::JunoStateReader; #[serde(rename_all = "UPPERCASE")] pub enum TransactionType { // dummy type for implementing Default trait - #[default] Unknown, + #[default] + Unknown, Invoke, Declare, #[serde(rename = "DEPLOY_ACCOUNT")] @@ -104,10 +104,10 @@ type BlockifierTxInfo = blockifier::transaction::objects::TransactionExecutionIn pub fn new_transaction_trace( tx: &StarknetApiTransaction, info: BlockifierTxInfo, - state: &mut TransactionalState, + state: &mut TransactionalState>, ) -> Result { let mut trace = TransactionTrace::default(); - let mut deprecated_declared_class: Option = None; + let mut deprecated_declared_class_hash: Option = None; match tx { StarknetApiTransaction::L1Handler(_) => { trace.function_invocation = info.execute_call_info.map(|v| v.into()); @@ -134,7 +134,7 @@ pub fn new_transaction_trace( trace.validate_invocation = info.validate_call_info.map(|v| v.into()); trace.fee_transfer_invocation = info.fee_transfer_call_info.map(|v| v.into()); trace.r#type = TransactionType::Declare; - deprecated_declared_class = if info.revert_error.is_none() { + deprecated_declared_class_hash = if info.revert_error.is_none() { match declare_txn { DeclareTransaction::V0(_) => Some(declare_txn.class_hash()), DeclareTransaction::V1(_) => Some(declare_txn.class_hash()), @@ -150,7 +150,7 @@ pub fn new_transaction_trace( } }; - trace.state_diff = make_state_diff(state, deprecated_declared_class)?; + trace.state_diff = make_state_diff(state, deprecated_declared_class_hash)?; Ok(trace) } @@ -205,14 +205,38 @@ impl From for ExecutionResources { } else { None }, - range_check_builtin_applications: val.builtin_instance_counter.get(RANGE_CHECK_BUILTIN_NAME).cloned(), - pedersen_builtin_applications: val.builtin_instance_counter.get(HASH_BUILTIN_NAME).cloned(), - poseidon_builtin_applications: val.builtin_instance_counter.get(POSEIDON_BUILTIN_NAME).cloned(), - ec_op_builtin_applications: val.builtin_instance_counter.get(EC_OP_BUILTIN_NAME).cloned(), - ecdsa_builtin_applications: val.builtin_instance_counter.get(SIGNATURE_BUILTIN_NAME).cloned(), - bitwise_builtin_applications: val.builtin_instance_counter.get(BITWISE_BUILTIN_NAME).cloned(), - keccak_builtin_applications: val.builtin_instance_counter.get(KECCAK_BUILTIN_NAME).cloned(), - segment_arena_builtin: val.builtin_instance_counter.get(SEGMENT_ARENA_BUILTIN_NAME).cloned(), + range_check_builtin_applications: val + .builtin_instance_counter + .get(&BuiltinName::range_check) + .cloned(), + pedersen_builtin_applications: val + .builtin_instance_counter + .get(&BuiltinName::pedersen) + .cloned(), + poseidon_builtin_applications: val + .builtin_instance_counter + .get(&BuiltinName::poseidon) + .cloned(), + ec_op_builtin_applications: val + .builtin_instance_counter + .get(&BuiltinName::ec_op) + .cloned(), + ecdsa_builtin_applications: val + .builtin_instance_counter + .get(&BuiltinName::ecdsa) + .cloned(), + bitwise_builtin_applications: val + .builtin_instance_counter + .get(&BuiltinName::bitwise) + .cloned(), + keccak_builtin_applications: val + .builtin_instance_counter + .get(&BuiltinName::keccak) + .cloned(), + segment_arena_builtin: val + .builtin_instance_counter + .get(&BuiltinName::segment_arena) + .cloned(), } } } @@ -298,33 +322,35 @@ impl From for OrderedMessage { pub struct Retdata(pub Vec); fn make_state_diff( - state: &mut TransactionalState, - deprecated_declared_class: Option, + state: &mut TransactionalState>, + deprecated_declared_class_hash: Option, ) -> Result { - let diff = state.to_state_diff(); + let diff: CommitmentStateDiff = state.to_state_diff()?.into(); let mut deployed_contracts = Vec::new(); let mut replaced_classes = Vec::new(); - for pair in diff.address_to_class_hash { - let existing_class_hash = state.state.get_class_hash_at(pair.0)?; + for (addr, class_hash) in diff.address_to_class_hash { + let existing_class_hash = state.state.get_class_hash_at(addr)?; + let addr: StarkFelt = addr.into(); + if existing_class_hash == ClassHash::default() { #[rustfmt::skip] deployed_contracts.push(DeployedContract { - address: *pair.0.0.key(), - class_hash: pair.1.0, + address: addr, + class_hash: class_hash.0, }); } else { #[rustfmt::skip] replaced_classes.push(ReplacedClass { - contract_address: *pair.0.0.key(), - class_hash: pair.1.0, + contract_address: addr, + class_hash: class_hash.0, }); } } - let mut deprecated_declared_classes = Vec::default(); - if let Some(v) = deprecated_declared_class { - deprecated_declared_classes.push(v.0) + let mut deprecated_declared_class_hashes = Vec::default(); + if let Some(v) = deprecated_declared_class_hash { + deprecated_declared_class_hashes.push(v.0) } Ok(StateDiff { deployed_contracts, @@ -341,7 +367,7 @@ fn make_state_diff( class_hash: v.0.0, compiled_class_hash: v.1.0, }).collect(), - deprecated_declared_classes, + deprecated_declared_classes: deprecated_declared_class_hashes, #[rustfmt::skip] nonces: diff.address_to_nonce.into_iter().map(| v | Nonce { contract_address: *v.0.0.key(), diff --git a/vm/rust/src/juno_state_reader.rs b/vm/rust/src/juno_state_reader.rs index af662ea008..231fcfc36f 100644 --- a/vm/rust/src/juno_state_reader.rs +++ b/vm/rust/src/juno_state_reader.rs @@ -6,16 +6,23 @@ use std::{ use blockifier::execution::contract_class::ContractClass; use blockifier::state::errors::StateError; +use blockifier::state::state_api::UpdatableState; use blockifier::{ - execution::contract_class::{ClassInfo as BlockifierClassInfo, ContractClassV0, ContractClassV1}, + execution::contract_class::{ + ClassInfo as BlockifierClassInfo, ContractClassV0, ContractClassV1, + }, + state::cached_state::{ContractClassMapping, StateMaps}, state::state_api::{StateReader, StateResult}, }; use cached::{Cached, SizedCache}; use once_cell::sync::Lazy; use serde::Deserialize; use starknet_api::core::{ClassHash, CompiledClassHash, ContractAddress, Nonce}; -use starknet_api::hash::StarkFelt; use starknet_api::state::StorageKey; +use starknet_types_core::felt::Felt; +use std::collections::{HashMap, HashSet}; + +type StarkFelt = Felt; extern "C" { fn JunoFree(ptr: *const c_void); @@ -58,7 +65,7 @@ impl JunoStateReader { impl StateReader for JunoStateReader { fn get_storage_at( - &mut self, + &self, contract_address: ContractAddress, key: StorageKey, ) -> StateResult { @@ -82,7 +89,7 @@ impl StateReader for JunoStateReader { /// Returns the nonce of the given contract instance. /// Default: 0 for an uninitialized contract address. - fn get_nonce_at(&mut self, contract_address: ContractAddress) -> StateResult { + fn get_nonce_at(&self, contract_address: ContractAddress) -> StateResult { let addr = felt_to_byte_array(contract_address.0.key()); let ptr = unsafe { JunoStateGetNonceAt(self.handle, addr.as_ptr()) }; if ptr.is_null() { @@ -99,7 +106,7 @@ impl StateReader for JunoStateReader { /// Returns the class hash of the contract class at the given contract instance. /// Default: 0 (uninitialized class hash) for an uninitialized contract address. - fn get_class_hash_at(&mut self, contract_address: ContractAddress) -> StateResult { + fn get_class_hash_at(&self, contract_address: ContractAddress) -> StateResult { let addr = felt_to_byte_array(contract_address.0.key()); let ptr = unsafe { JunoStateGetClassHashAt(self.handle, addr.as_ptr()) }; if ptr.is_null() { @@ -116,10 +123,7 @@ impl StateReader for JunoStateReader { } /// Returns the contract class of the given class hash. - fn get_compiled_contract_class( - &mut self, - class_hash: ClassHash, - ) -> StateResult { + fn get_compiled_contract_class(&self, class_hash: ClassHash) -> StateResult { if let Some(cached_class) = CLASS_CACHE.lock().unwrap().cache_get(&class_hash) { // skip the cache if it comes from a height higher than ours. Class might be undefined on the height // that we are reading from right now. @@ -157,7 +161,7 @@ impl StateReader for JunoStateReader { unsafe { JunoFree(ptr as *const c_void) }; - class_info_res.map(| ci | ci.contract_class()).map_err(| err | { + class_info_res.map(|ci| ci.contract_class()).map_err(|err| { StateError::StateReadError(format!( "parsing JSON string for class hash {}: {}", class_hash.0, err @@ -167,22 +171,31 @@ impl StateReader for JunoStateReader { } /// Returns the compiled class hash of the given class hash. - fn get_compiled_class_hash( + fn get_compiled_class_hash(&self, _class_hash: ClassHash) -> StateResult { + unimplemented!() + } +} + +impl UpdatableState for JunoStateReader { + fn apply_writes( &mut self, - _class_hash: ClassHash, - ) -> StateResult { + _writes: &StateMaps, + _class_hash_to_class: &ContractClassMapping, + _visited_pcs: &HashMap>, + ) { unimplemented!() } } pub fn felt_to_byte_array(felt: &StarkFelt) -> [u8; 32] { - felt.bytes().try_into().expect("StarkFelt not [u8; 32]") + felt.to_bytes_be() + .try_into() + .expect("StarkFelt not [u8; 32]") } pub fn ptr_to_felt(bytes: *const c_uchar) -> StarkFelt { let slice = unsafe { slice::from_raw_parts(bytes, 32) }; - StarkFelt::new(slice.try_into().expect("Juno felt not [u8; 32]")) - .expect("cannot new Starkfelt from Juno bytes") + StarkFelt::from_bytes_be_slice(slice) } #[derive(Deserialize)] @@ -193,15 +206,22 @@ pub struct ClassInfo { } pub fn class_info_from_json_str(raw_json: &str) -> Result { - let class_info: ClassInfo = serde_json::from_str(raw_json).map_err(|err| format!("failed parsing class info: {:?}", err))?; - let class_def = class_info.contract_class.to_string(); - - let class: ContractClass = if let Ok(class) = ContractClassV0::try_from_json_string(class_def.as_str()) { - class.into() - } else if let Ok(class) = ContractClassV1::try_from_json_string(class_def.as_str()) { - class.into() - } else { - return Err("not a valid contract class".to_string()) - }; - return Ok(BlockifierClassInfo::new(&class.into(), class_info.sierra_program_length, class_info.abi_length).unwrap()); + let class_info: ClassInfo = serde_json::from_str(raw_json) + .map_err(|err| format!("failed parsing class info: {:?}", err))?; + let class_def = class_info.contract_class.to_string(); + + let class: ContractClass = + if let Ok(class) = ContractClassV0::try_from_json_string(class_def.as_str()) { + class.into() + } else if let Ok(class) = ContractClassV1::try_from_json_string(class_def.as_str()) { + class.into() + } else { + return Err("not a valid contract class".to_string()); + }; + return Ok(BlockifierClassInfo::new( + &class.into(), + class_info.sierra_program_length, + class_info.abi_length, + ) + .unwrap()); } diff --git a/vm/rust/src/lib.rs b/vm/rust/src/lib.rs index 2a7207c9f4..440de3e3b8 100644 --- a/vm/rust/src/lib.rs +++ b/vm/rust/src/lib.rs @@ -6,36 +6,55 @@ extern crate lazy_static; use crate::juno_state_reader::{ptr_to_felt, JunoStateReader}; use std::{ - collections::HashMap, ffi::{c_char, c_longlong, c_uchar, c_ulonglong, c_void, CStr, CString}, num::NonZeroU128, slice, sync::Arc + collections::HashMap, + ffi::{c_char, c_longlong, c_uchar, c_ulonglong, c_void, CStr, CString}, + num::NonZeroU128, + slice, + sync::Arc, }; +use blockifier::abi::constants::STORED_BLOCK_HASH_BUFFER; +use blockifier::blockifier::block::{ + pre_process_block, BlockInfo as BlockifierBlockInfo, BlockNumberHashPair, GasPrices, +}; +use blockifier::bouncer::BouncerConfig; +use blockifier::fee::{fee_utils, gas_usage}; +use blockifier::transaction::objects::GasVector; use blockifier::{ - block::{pre_process_block, BlockInfo as BlockifierBlockInfo, BlockNumberHashPair, GasPrices}, context::{BlockContext, ChainInfo, FeeTokenAddresses, TransactionContext}, execution::{ + context::{BlockContext, ChainInfo, FeeTokenAddresses, TransactionContext}, + execution::{ contract_class::ClassInfo, entry_point::{CallEntryPoint, CallType, EntryPointExecutionContext}, - }, fee::fee_utils::calculate_tx_fee, state::{cached_state::{CachedState, GlobalContractCache}, state_api::State}, transaction::{ + }, + state::{cached_state::CachedState, state_api::State}, + transaction::{ errors::TransactionExecutionError::{ - ContractConstructorExecutionFailed, - ExecutionError, - ValidateTransactionError, - }, objects::{DeprecatedTransactionInfo, HasRelatedFeeType, TransactionInfo}, transaction_execution::Transaction, transactions::ExecutableTransaction - }, versioned_constants::VersionedConstants + ContractConstructorExecutionFailed, ExecutionError, ValidateTransactionError, + }, + objects::{DeprecatedTransactionInfo, HasRelatedFeeType, TransactionInfo}, + transaction_execution::Transaction, + transactions::ExecutableTransaction, + }, + versioned_constants::VersionedConstants, }; use cairo_vm::vm::runners::cairo_runner::ExecutionResources; use juno_state_reader::{class_info_from_json_str, felt_to_byte_array}; use serde::Deserialize; -use starknet_api::{block::BlockHash, core::PatriciaKey, transaction::{Calldata, Transaction as StarknetApiTransaction, TransactionHash}}; use starknet_api::{ + block::BlockHash, + core::PatriciaKey, deprecated_contract_class::EntryPointType, - hash::StarkFelt, - transaction::Fee, + transaction::{Calldata, Fee, Transaction as StarknetApiTransaction, TransactionHash}, }; use starknet_api::{ core::{ChainId, ClassHash, ContractAddress, EntryPointSelector}, hash::StarkHash, }; +use starknet_types_core::felt::Felt; use std::str::FromStr; +type StarkFelt = Felt; + extern "C" { fn JunoReportError(reader_handle: usize, txnIndex: c_longlong, err: *const c_char); fn JunoAppendTrace(reader_handle: usize, json_trace: *const c_void, len: usize); @@ -51,7 +70,7 @@ pub struct CallInfo { pub class_hash: [c_uchar; 32], pub entry_point_selector: [c_uchar; 32], pub calldata: *const *const c_uchar, - pub len_calldata: usize + pub len_calldata: usize, } #[repr(C)] @@ -76,23 +95,25 @@ pub extern "C" fn cairoVMCall( reader_handle: usize, chain_id: *const c_char, max_steps: c_ulonglong, + concurrency_mode: c_uchar, ) { let block_info = unsafe { *block_info_ptr }; let call_info = unsafe { *call_info_ptr }; let reader = JunoStateReader::new(reader_handle, block_info.block_number); - let contract_addr_felt = StarkFelt::new(call_info.contract_address).unwrap(); + let contract_addr_felt = StarkFelt::from_bytes_be(&call_info.contract_address); let class_hash = if call_info.class_hash == [0; 32] { None } else { - Some(ClassHash(StarkFelt::new(call_info.class_hash).unwrap())) + Some(ClassHash(StarkFelt::from_bytes_be(&call_info.class_hash))) }; - let entry_point_selector_felt = StarkFelt::new(call_info.entry_point_selector).unwrap(); + let entry_point_selector_felt = StarkFelt::from_bytes_be(&call_info.entry_point_selector); let chain_id_str = unsafe { CStr::from_ptr(chain_id) }.to_str().unwrap(); let mut calldata_vec: Vec = Vec::with_capacity(call_info.len_calldata); if call_info.len_calldata > 0 { - let calldata_slice = unsafe { slice::from_raw_parts(call_info.calldata, call_info.len_calldata) }; + let calldata_slice = + unsafe { slice::from_raw_parts(call_info.calldata, call_info.len_calldata) }; for ptr in calldata_slice { let data = ptr_to_felt(ptr.cast()); calldata_vec.push(data); @@ -108,14 +129,21 @@ pub extern "C" fn cairoVMCall( class_hash: class_hash, code_address: None, caller_address: ContractAddress::default(), - initial_gas: get_versioned_constants(block_info.version).gas_cost("initial_gas_cost"), + initial_gas: get_versioned_constants(block_info.version).tx_initial_gas(), }; - let mut state = CachedState::new(reader, GlobalContractCache::new(1)); + let concurrency_mode = concurrency_mode == 1; + let mut state = CachedState::new(reader); let mut resources = ExecutionResources::default(); let context = EntryPointExecutionContext::new_invoke( Arc::new(TransactionContext { - block_context: build_block_context(&mut state, &block_info, chain_id_str, Some(max_steps)), + block_context: build_block_context( + &mut state, + &block_info, + chain_id_str, + Some(max_steps), + concurrency_mode, + ), tx_info: TransactionInfo::Deprecated(DeprecatedTransactionInfo::default()), }), false, @@ -153,7 +181,8 @@ pub extern "C" fn cairoVMExecute( chain_id: *const c_char, skip_charge_fee: c_uchar, skip_validate: c_uchar, - err_on_revert: c_uchar + err_on_revert: c_uchar, + concurrency_mode: c_uchar, ) { let block_info = unsafe { *block_info_ptr }; let reader = JunoStateReader::new(reader_handle, block_info.block_number); @@ -187,10 +216,17 @@ pub extern "C" fn cairoVMExecute( } }; - let mut state = CachedState::new(reader, GlobalContractCache::new(1)); + let mut state = CachedState::new(reader); let txns_and_query_bits = txns_and_query_bits.unwrap(); let mut classes = classes.unwrap(); - let block_context: BlockContext = build_block_context(&mut state, &block_info, chain_id_str, None); + let concurrency_mode = concurrency_mode == 1; + let block_context: BlockContext = build_block_context( + &mut state, + &block_info, + chain_id_str, + None, + concurrency_mode, + ); let charge_fee = skip_charge_fee == 0; let validate = skip_validate == 0; @@ -240,13 +276,17 @@ pub extern "C" fn cairoVMExecute( let mut txn_state = CachedState::create_transactional(&mut state); let fee_type; + let minimal_l1_gas_amount_vector: Option; let res = match txn.unwrap() { Transaction::AccountTransaction(t) => { fee_type = t.fee_type(); + minimal_l1_gas_amount_vector = + Some(gas_usage::estimate_minimal_gas_vector(&block_context, &t).unwrap()); t.execute(&mut txn_state, &block_context, charge_fee, validate) } Transaction::L1HandlerTransaction(t) => { fee_type = t.fee_type(); + minimal_l1_gas_amount_vector = None; t.execute(&mut txn_state, &block_context, charge_fee, validate) } }; @@ -254,20 +294,20 @@ pub extern "C" fn cairoVMExecute( match res { Err(error) => { let err_string = match &error { - ContractConstructorExecutionFailed(e) - | ExecutionError(e) - | ValidateTransactionError(e) => format!("{error} {e}"), - other => other.to_string() + ContractConstructorExecutionFailed(e) => format!("{error} {e}"), + ExecutionError { error: e, .. } | ValidateTransactionError { error: e, .. } => { + format!("{error} {e}") + } + other => other.to_string(), }; report_error( reader_handle, format!( "failed txn {} reason: {}", - txn_and_query_bit.txn_hash, - err_string, + txn_and_query_bit.txn_hash, err_string, ) .as_str(), - txn_index as i64 + txn_index as i64, ); return; } @@ -275,20 +315,39 @@ pub extern "C" fn cairoVMExecute( if t.is_reverted() && err_on_revert != 0 { report_error( reader_handle, - format!("reverted: {}", t.revert_error.unwrap()) - .as_str(), - txn_index as i64 + format!("reverted: {}", t.revert_error.unwrap()).as_str(), + txn_index as i64, ); return; } // we are estimating fee, override actual fee calculation - if t.actual_fee.0 == 0 { - t.actual_fee = calculate_tx_fee(&t.actual_resources, &block_context, &fee_type).unwrap(); + if t.transaction_receipt.fee.0 == 0 { + let minimal_l1_gas_amount_vector = + minimal_l1_gas_amount_vector.unwrap_or_default(); + let gas_consumed = t + .transaction_receipt + .gas + .l1_gas + .max(minimal_l1_gas_amount_vector.l1_gas); + let data_gas_consumed = t + .transaction_receipt + .gas + .l1_data_gas + .max(minimal_l1_gas_amount_vector.l1_data_gas); + + t.transaction_receipt.fee = fee_utils::get_fee_by_gas_vector( + block_context.block_info(), + GasVector { + l1_data_gas: data_gas_consumed, + l1_gas: gas_consumed, + }, + &fee_type, + ) } - let actual_fee = t.actual_fee.0.into(); - let data_gas_consumed = t.da_gas.l1_data_gas.into(); + let actual_fee = t.transaction_receipt.fee.0.into(); + let data_gas_consumed = t.transaction_receipt.da_gas.l1_data_gas.into(); let trace = jsonrpc::new_transaction_trace(&txn_and_query_bit.txn, t, &mut txn_state); @@ -300,14 +359,17 @@ pub extern "C" fn cairoVMExecute( trace.err().unwrap() ) .as_str(), - txn_index as i64 + txn_index as i64, ); return; } unsafe { JunoAppendActualFee(reader_handle, felt_to_byte_array(&actual_fee).as_ptr()); - JunoAppendDataGasConsumed(reader_handle, felt_to_byte_array(&data_gas_consumed).as_ptr()); + JunoAppendDataGasConsumed( + reader_handle, + felt_to_byte_array(&data_gas_consumed).as_ptr(), + ); } append_trace(reader_handle, trace.as_ref().unwrap(), &mut trace_buffer); } @@ -317,7 +379,8 @@ pub extern "C" fn cairoVMExecute( } fn felt_to_u128(felt: StarkFelt) -> u128 { - let bytes = felt.bytes(); + // todo find Into trait or similar + let bytes = felt.to_bytes_be(); let mut arr = [0u8; 16]; arr.copy_from_slice(&bytes[16..32]); @@ -380,19 +443,25 @@ fn build_block_context( block_info: &BlockInfo, chain_id_str: &str, max_steps: Option, + _concurrency_mode: bool, ) -> BlockContext { - let sequencer_addr = StarkFelt::new(block_info.sequencer_address).unwrap(); - let gas_price_wei_felt = StarkFelt::new(block_info.gas_price_wei).unwrap(); - let gas_price_fri_felt = StarkFelt::new(block_info.gas_price_fri).unwrap(); - let data_gas_price_wei_felt = StarkFelt::new(block_info.data_gas_price_wei).unwrap(); - let data_gas_price_fri_felt = StarkFelt::new(block_info.data_gas_price_fri).unwrap(); + let sequencer_addr = StarkFelt::from_bytes_be(&block_info.sequencer_address); + let gas_price_wei_felt = StarkFelt::from_bytes_be(&block_info.gas_price_wei); + let gas_price_fri_felt = StarkFelt::from_bytes_be(&block_info.gas_price_fri); + let data_gas_price_wei_felt = StarkFelt::from_bytes_be(&block_info.data_gas_price_wei); + let data_gas_price_fri_felt = StarkFelt::from_bytes_be(&block_info.data_gas_price_fri); let default_gas_price = NonZeroU128::new(1).unwrap(); let mut old_block_number_and_hash: Option = None; - if block_info.block_number >= 10 { - old_block_number_and_hash = Some(BlockNumberHashPair{ - number: starknet_api::block::BlockNumber(block_info.block_number - 10), - hash: BlockHash(StarkFelt::new(block_info.block_hash_to_be_revealed).unwrap()), + // STORED_BLOCK_HASH_BUFFER const is 10 for now + if block_info.block_number >= STORED_BLOCK_HASH_BUFFER { + old_block_number_and_hash = Some(BlockNumberHashPair { + number: starknet_api::block::BlockNumber( + block_info.block_number - STORED_BLOCK_HASH_BUFFER, + ), + hash: BlockHash(StarkFelt::from_bytes_be( + &block_info.block_hash_to_be_revealed, + )), }) } let mut constants = get_versioned_constants(block_info.version); @@ -400,35 +469,62 @@ fn build_block_context( constants.invoke_tx_max_n_steps = max_steps as u32; } - pre_process_block(state, old_block_number_and_hash, BlockifierBlockInfo{ + let block_info = BlockifierBlockInfo { block_number: starknet_api::block::BlockNumber(block_info.block_number), block_timestamp: starknet_api::block::BlockTimestamp(block_info.block_timestamp), sequencer_address: ContractAddress(PatriciaKey::try_from(sequencer_addr).unwrap()), gas_prices: GasPrices { - eth_l1_gas_price: NonZeroU128::new(felt_to_u128(gas_price_wei_felt)).unwrap_or(default_gas_price), - strk_l1_gas_price: NonZeroU128::new(felt_to_u128(gas_price_fri_felt)).unwrap_or(default_gas_price), - eth_l1_data_gas_price: NonZeroU128::new(felt_to_u128(data_gas_price_wei_felt)).unwrap_or(default_gas_price), - strk_l1_data_gas_price: NonZeroU128::new(felt_to_u128(data_gas_price_fri_felt)).unwrap_or(default_gas_price), + eth_l1_gas_price: NonZeroU128::new(felt_to_u128(gas_price_wei_felt)) + .unwrap_or(default_gas_price), + strk_l1_gas_price: NonZeroU128::new(felt_to_u128(gas_price_fri_felt)) + .unwrap_or(default_gas_price), + eth_l1_data_gas_price: NonZeroU128::new(felt_to_u128(data_gas_price_wei_felt)) + .unwrap_or(default_gas_price), + strk_l1_data_gas_price: NonZeroU128::new(felt_to_u128(data_gas_price_fri_felt)) + .unwrap_or(default_gas_price), }, use_kzg_da: block_info.use_blob_data == 1, - }, ChainInfo{ - chain_id: ChainId(chain_id_str.to_string()), + }; + let chain_info = ChainInfo { + chain_id: ChainId::from(chain_id_str.to_string()), fee_token_addresses: FeeTokenAddresses { // both addresses are the same for all networks - eth_fee_token_address: ContractAddress::try_from(StarkHash::try_from("0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7").unwrap()).unwrap(), - strk_fee_token_address: ContractAddress::try_from(StarkHash::try_from("0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d").unwrap()).unwrap(), + eth_fee_token_address: ContractAddress::try_from( + StarkHash::from_hex( + "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + ) + .unwrap(), + ) + .unwrap(), + strk_fee_token_address: ContractAddress::try_from( + StarkHash::from_hex( + "0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + ) + .unwrap(), + ) + .unwrap(), }, - }, constants).unwrap() -} - - + }; + pre_process_block(state, old_block_number_and_hash, block_info.block_number).unwrap(); + BlockContext::new(block_info, chain_info, constants, BouncerConfig::max()) +} lazy_static! { static ref CONSTANTS: HashMap = { let mut m = HashMap::new(); - m.insert("0.13.0".to_string(), serde_json::from_slice(include_bytes!("../versioned_constants_13_0.json")).unwrap()); - m.insert("0.13.1".to_string(), serde_json::from_slice(include_bytes!("../versioned_constants_13_1.json")).unwrap()); + m.insert( + "0.13.0".to_string(), + serde_json::from_slice(include_bytes!("../versioned_constants_13_0.json")).unwrap(), + ); + m.insert( + "0.13.1".to_string(), + serde_json::from_slice(include_bytes!("../versioned_constants_13_1.json")).unwrap(), + ); + m.insert( + "0.13.1.1".to_string(), + serde_json::from_slice(include_bytes!("../versioned_constants_13_1_1.json")).unwrap(), + ); m }; } @@ -436,20 +532,22 @@ lazy_static! { #[allow(static_mut_refs)] fn get_versioned_constants(version: *const c_char) -> VersionedConstants { let version_str = unsafe { CStr::from_ptr(version) }.to_str().unwrap(); - let version = StarknetVersion::from_str(&version_str).unwrap_or(StarknetVersion::from_str(&"0.0.0").unwrap()); + let version = StarknetVersion::from_str(&version_str) + .unwrap_or(StarknetVersion::from_str(&"0.0.0").unwrap()); - if let Some(constants) = unsafe{ &CUSTOM_VERSIONED_CONSTANTS } { + if let Some(constants) = unsafe { &CUSTOM_VERSIONED_CONSTANTS } { constants.clone() } else if version < StarknetVersion::from_str(&"0.13.1").unwrap() { CONSTANTS.get(&"0.13.0".to_string()).unwrap().to_owned() } else if version < StarknetVersion::from_str(&"0.13.1.1").unwrap() { CONSTANTS.get(&"0.13.1".to_string()).unwrap().to_owned() + } else if version < StarknetVersion::from_str(&"0.13.2").unwrap() { + CONSTANTS.get(&"0.13.1.1".to_string()).unwrap().to_owned() } else { VersionedConstants::latest_constants().to_owned() } } - #[derive(Default, PartialEq, Eq, PartialOrd, Ord)] pub struct StarknetVersion(u8, u8, u8, u8); @@ -490,14 +588,18 @@ pub extern "C" fn setVersionedConstants(json_bytes: *const c_char) -> *const c_c let json_str = unsafe { match CStr::from_ptr(json_bytes).to_str() { Ok(s) => s, - Err(_) => return CString::new("Failed to convert JSON bytes to string").unwrap().into_raw(), + Err(_) => { + return CString::new("Failed to convert JSON bytes to string") + .unwrap() + .into_raw() + } } }; match serde_json::from_str(json_str) { Ok(parsed) => unsafe { CUSTOM_VERSIONED_CONSTANTS = Some(parsed); - CString::new("").unwrap().into_raw() // No error, return an empty string + CString::new("").unwrap().into_raw() // No error, return an empty string }, Err(_) => CString::new("Failed to parse JSON").unwrap().into_raw(), } @@ -513,4 +615,4 @@ pub extern "C" fn freeString(s: *mut c_char) { drop(CString::from_raw(s)); } } -} \ No newline at end of file +} diff --git a/vm/rust/versioned_constants_13_0.json b/vm/rust/versioned_constants_13_0.json index 28bec8d829..1531f6fc13 100644 --- a/vm/rust/versioned_constants_13_0.json +++ b/vm/rust/versioned_constants_13_0.json @@ -137,6 +137,11 @@ "syscall_base_gas_cost": 1 }, "keccak_round_cost_gas_cost": 180000, + "sha256_process_block_gas_cost": { + "step_gas_cost": 0, + "range_check_gas_cost": 0, + "syscall_base_gas_cost": 0 + }, "error_block_number_out_of_range": "Block number out of range", "error_out_of_gas": "Out of gas", "error_invalid_input_len": "Invalid input length", @@ -333,6 +338,11 @@ "n_memory_holes": 0, "n_steps": 84 }, + "Sha256ProcessBlock": { + "builtin_instance_counter": {}, + "n_memory_holes": 0, + "n_steps": 0 + }, "StorageRead": { "builtin_instance_counter": {}, "n_memory_holes": 0, @@ -346,49 +356,189 @@ }, "execute_txs_inner": { "Declare": { - "builtin_instance_counter": { - "pedersen_builtin": 15, - "range_check_builtin": 63 + "resources": { + "constant": { + "builtin_instance_counter": { + "pedersen_builtin": 15, + "range_check_builtin": 63 + }, + "n_memory_holes": 0, + "n_steps": 2711 + }, + "calldata_factor": { + "n_steps": 0, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + } }, - "n_memory_holes": 0, - "n_steps": 2711 + "deprecated_resources": { + "constant": { + "builtin_instance_counter": { + "pedersen_builtin": 15, + "range_check_builtin": 63 + }, + "n_memory_holes": 0, + "n_steps": 2711 + }, + "calldata_factor": { + "n_steps": 0, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + } + } }, "DeployAccount": { - "builtin_instance_counter": { - "pedersen_builtin": 23, - "range_check_builtin": 83 + "resources": { + "constant": { + "builtin_instance_counter": { + "pedersen_builtin": 23, + "range_check_builtin": 83 + }, + "n_memory_holes": 0, + "n_steps": 3628 + }, + "calldata_factor": { + "n_steps": 0, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + } }, - "n_memory_holes": 0, - "n_steps": 3628 + "deprecated_resources": { + "constant": { + "builtin_instance_counter": { + "pedersen_builtin": 23, + "range_check_builtin": 83 + }, + "n_memory_holes": 0, + "n_steps": 3628 + }, + "calldata_factor": { + "n_steps": 0, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + } + } }, "InvokeFunction": { - "builtin_instance_counter": { - "pedersen_builtin": 16, - "range_check_builtin": 80 + "resources": { + "constant": { + "builtin_instance_counter": { + "pedersen_builtin": 16, + "range_check_builtin": 80 + }, + "n_memory_holes": 0, + "n_steps": 3382 + }, + "calldata_factor": { + "n_steps": 0, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + } }, - "n_memory_holes": 0, - "n_steps": 3382 + "deprecated_resources": { + "constant": { + "builtin_instance_counter": { + "pedersen_builtin": 16, + "range_check_builtin": 80 + }, + "n_memory_holes": 0, + "n_steps": 3382 + }, + "calldata_factor": { + "n_steps": 0, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + } + } }, "L1Handler": { - "builtin_instance_counter": { - "pedersen_builtin": 11, - "range_check_builtin": 17 + "resources": { + "constant": { + "builtin_instance_counter": { + "pedersen_builtin": 11, + "range_check_builtin": 17 + }, + "n_memory_holes": 0, + "n_steps": 1069 + }, + "calldata_factor": { + "n_steps": 0, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + } }, - "n_memory_holes": 0, - "n_steps": 1069 + "deprecated_resources": { + "constant": { + "builtin_instance_counter": { + "pedersen_builtin": 11, + "range_check_builtin": 17 + }, + "n_memory_holes": 0, + "n_steps": 1069 + }, + "calldata_factor": { + "n_steps": 0, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + } + } } + }, + "compute_os_kzg_commitment_info": { + "n_steps": 0, + "builtin_instance_counter": {}, + "n_memory_holes": 0 } }, "validate_max_n_steps": 1000000, "vm_resource_fee_cost": { - "bitwise_builtin": 0.32, - "ec_op_builtin": 5.12, - "ecdsa_builtin": 10.24, - "keccak_builtin": 10.24, - "n_steps": 0.005, - "output_builtin": 0, - "pedersen_builtin": 0.16, - "poseidon_builtin": 0.16, - "range_check_builtin": 0.08 + "add_mod_builtin": [ + 0, + 1 + ], + "bitwise_builtin": [ + 32, + 100 + ], + "ec_op_builtin": [ + 512, + 100 + ], + "ecdsa_builtin": [ + 1024, + 100 + ], + "keccak_builtin": [ + 1024, + 100 + ], + "mul_mod_builtin": [ + 0, + 1 + ], + "n_steps": [ + 5, + 1000 + ], + "output_builtin": [ + 0, + 1 + ], + "pedersen_builtin": [ + 16, + 100 + ], + "poseidon_builtin": [ + 16, + 100 + ], + "range_check_builtin": [ + 8, + 100 + ], + "range_check96_builtin": [ + 0, + 1 + ] } } diff --git a/vm/rust/versioned_constants_13_1.json b/vm/rust/versioned_constants_13_1.json index e66c7fb8d5..4e28f7b711 100644 --- a/vm/rust/versioned_constants_13_1.json +++ b/vm/rust/versioned_constants_13_1.json @@ -10,9 +10,18 @@ }, "invoke_tx_max_n_steps": 4000000, "l2_resource_gas_costs": { - "milligas_per_data_felt": 128, - "event_key_factor": 2, - "milligas_per_code_byte": 875 + "gas_per_data_felt": [ + 128, + 1000 + ], + "event_key_factor": [ + 2, + 1 + ], + "gas_per_code_byte": [ + 875, + 1000 + ] }, "max_recursion_depth": 50, "os_constants": { @@ -149,6 +158,11 @@ "syscall_base_gas_cost": 1 }, "keccak_round_cost_gas_cost": 180000, + "sha256_process_block_gas_cost": { + "step_gas_cost": 0, + "range_check_gas_cost": 0, + "syscall_base_gas_cost": 0 + }, "error_block_number_out_of_range": "Block number out of range", "error_out_of_gas": "Out of gas", "error_invalid_input_len": "Invalid input length", @@ -363,6 +377,11 @@ }, "n_memory_holes": 0 }, + "Sha256ProcessBlock": { + "builtin_instance_counter": {}, + "n_memory_holes": 0, + "n_steps": 0 + }, "StorageRead": { "n_steps": 87, "builtin_instance_counter": { @@ -380,83 +399,201 @@ }, "execute_txs_inner": { "Declare": { - "constant": { - "n_steps": 2839, - "builtin_instance_counter": { - "pedersen_builtin": 16, - "range_check_builtin": 63 + "resources": { + "constant": { + "n_steps": 2839, + "builtin_instance_counter": { + "pedersen_builtin": 16, + "range_check_builtin": 63 + }, + "n_memory_holes": 0 }, - "n_memory_holes": 0 + "calldata_factor": { + "n_steps": 0, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + } }, - "calldata_factor": { - "n_steps": 0, - "builtin_instance_counter": {}, - "n_memory_holes": 0 + "deprecated_resources": { + "constant": { + "n_steps": 2839, + "builtin_instance_counter": { + "pedersen_builtin": 16, + "range_check_builtin": 63 + }, + "n_memory_holes": 0 + }, + "calldata_factor": { + "n_steps": 0, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + } } }, "DeployAccount": { - "constant": { - "n_steps": 3792, - "builtin_instance_counter": { - "pedersen_builtin": 23, - "range_check_builtin": 83 + "resources": { + "constant": { + "n_steps": 3792, + "builtin_instance_counter": { + "pedersen_builtin": 23, + "range_check_builtin": 83 + }, + "n_memory_holes": 0 }, - "n_memory_holes": 0 + "calldata_factor": { + "n_steps": 21, + "builtin_instance_counter": { + "pedersen_builtin": 2 + }, + "n_memory_holes": 0 + } }, - "calldata_factor": { - "n_steps": 21, - "builtin_instance_counter": { - "pedersen_builtin": 2 + "deprecated_resources": { + "constant": { + "n_steps": 3792, + "builtin_instance_counter": { + "pedersen_builtin": 23, + "range_check_builtin": 83 + }, + "n_memory_holes": 0 }, - "n_memory_holes": 0 + "calldata_factor": { + "n_steps": 21, + "builtin_instance_counter": { + "pedersen_builtin": 2 + }, + "n_memory_holes": 0 + } } }, "InvokeFunction": { - "constant": { - "n_steps": 3546, - "builtin_instance_counter": { - "pedersen_builtin": 14, - "range_check_builtin": 80 + "resources": { + "constant": { + "n_steps": 3546, + "builtin_instance_counter": { + "pedersen_builtin": 14, + "range_check_builtin": 80 + }, + "n_memory_holes": 0 }, - "n_memory_holes": 0 + "calldata_factor": { + "n_steps": 8, + "builtin_instance_counter": { + "pedersen_builtin": 1 + }, + "n_memory_holes": 0 + } }, - "calldata_factor": { - "n_steps": 8, - "builtin_instance_counter": { - "pedersen_builtin": 1 + "deprecated_resources": { + "constant": { + "n_steps": 3546, + "builtin_instance_counter": { + "pedersen_builtin": 14, + "range_check_builtin": 80 + }, + "n_memory_holes": 0 }, - "n_memory_holes": 0 + "calldata_factor": { + "n_steps": 8, + "builtin_instance_counter": { + "pedersen_builtin": 1 + }, + "n_memory_holes": 0 + } } }, "L1Handler": { - "constant": { - "n_steps": 1146, - "builtin_instance_counter": { - "pedersen_builtin": 11, - "range_check_builtin": 17 + "resources": { + "constant": { + "n_steps": 1146, + "builtin_instance_counter": { + "pedersen_builtin": 11, + "range_check_builtin": 17 + }, + "n_memory_holes": 0 }, - "n_memory_holes": 0 + "calldata_factor": { + "n_steps": 13, + "builtin_instance_counter": { + "pedersen_builtin": 1 + }, + "n_memory_holes": 0 + } }, - "calldata_factor": { - "n_steps": 13, - "builtin_instance_counter": { - "pedersen_builtin": 1 + "deprecated_resources": { + "constant": { + "n_steps": 1146, + "builtin_instance_counter": { + "pedersen_builtin": 11, + "range_check_builtin": 17 + }, + "n_memory_holes": 0 }, - "n_memory_holes": 0 + "calldata_factor": { + "n_steps": 13, + "builtin_instance_counter": { + "pedersen_builtin": 1 + }, + "n_memory_holes": 0 + } } } + }, + "compute_os_kzg_commitment_info": { + "n_steps": 0, + "builtin_instance_counter": {}, + "n_memory_holes": 0 } }, "validate_max_n_steps": 1000000, "vm_resource_fee_cost": { - "bitwise_builtin": 0.16, - "ec_op_builtin": 2.56, - "ecdsa_builtin": 5.12, - "keccak_builtin": 5.12, - "n_steps": 0.0025, - "output_builtin": 0, - "pedersen_builtin": 0.08, - "poseidon_builtin": 0.08, - "range_check_builtin": 0.04 + "add_mod_builtin": [ + 0, + 1 + ], + "bitwise_builtin": [ + 16, + 100 + ], + "ec_op_builtin": [ + 256, + 100 + ], + "ecdsa_builtin": [ + 512, + 100 + ], + "keccak_builtin": [ + 512, + 100 + ], + "mul_mod_builtin": [ + 0, + 1 + ], + "n_steps": [ + 25, + 10000 + ], + "output_builtin": [ + 0, + 1 + ], + "pedersen_builtin": [ + 8, + 100 + ], + "poseidon_builtin": [ + 8, + 100 + ], + "range_check_builtin": [ + 4, + 100 + ], + "range_check96_builtin": [ + 0, + 1 + ] } -} \ No newline at end of file +} diff --git a/vm/rust/versioned_constants_13_1_1.json b/vm/rust/versioned_constants_13_1_1.json new file mode 100644 index 0000000000..791dac8b9b --- /dev/null +++ b/vm/rust/versioned_constants_13_1_1.json @@ -0,0 +1,599 @@ +{ + "tx_event_limits": { + "max_data_length": 300, + "max_keys_length": 50, + "max_n_emitted_events": 1000 + }, + "gateway": { + "max_calldata_length": 5000, + "max_contract_bytecode_size": 81920 + }, + "invoke_tx_max_n_steps": 4000000, + "l2_resource_gas_costs": { + "gas_per_data_felt": [ + 128, + 1000 + ], + "event_key_factor": [ + 2, + 1 + ], + "gas_per_code_byte": [ + 32, + 1000 + ] + }, + "max_recursion_depth": 50, + "os_constants": { + "nop_entry_point_offset": -1, + "entry_point_type_external": 0, + "entry_point_type_l1_handler": 1, + "entry_point_type_constructor": 2, + "l1_handler_version": 0, + "sierra_array_len_bound": 4294967296, + "constructor_entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "execute_entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "validate_entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "validate_declare_entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", + "validate_deploy_entry_point_selector": "0x36fcbf06cd96843058359e1a75928beacfac10727dab22a3972f0af8aa92895", + "transfer_entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "default_entry_point_selector": 0, + "block_hash_contract_address": 1, + "stored_block_hash_buffer": 10, + "step_gas_cost": 100, + "range_check_gas_cost": 70, + "memory_hole_gas_cost": 10, + "initial_gas_cost": { + "step_gas_cost": 100000000 + }, + "entry_point_initial_budget": { + "step_gas_cost": 100 + }, + "syscall_base_gas_cost": { + "step_gas_cost": 100 + }, + "entry_point_gas_cost": { + "entry_point_initial_budget": 1, + "step_gas_cost": 500 + }, + "fee_transfer_gas_cost": { + "entry_point_gas_cost": 1, + "step_gas_cost": 100 + }, + "transaction_gas_cost": { + "entry_point_gas_cost": 2, + "fee_transfer_gas_cost": 1, + "step_gas_cost": 100 + }, + "call_contract_gas_cost": { + "syscall_base_gas_cost": 1, + "step_gas_cost": 10, + "entry_point_gas_cost": 1 + }, + "deploy_gas_cost": { + "syscall_base_gas_cost": 1, + "step_gas_cost": 200, + "entry_point_gas_cost": 1 + }, + "get_block_hash_gas_cost": { + "syscall_base_gas_cost": 1, + "step_gas_cost": 50 + }, + "get_execution_info_gas_cost": { + "syscall_base_gas_cost": 1, + "step_gas_cost": 10 + }, + "library_call_gas_cost": { + "call_contract_gas_cost": 1 + }, + "replace_class_gas_cost": { + "syscall_base_gas_cost": 1, + "step_gas_cost": 50 + }, + "storage_read_gas_cost": { + "syscall_base_gas_cost": 1, + "step_gas_cost": 50 + }, + "storage_write_gas_cost": { + "syscall_base_gas_cost": 1, + "step_gas_cost": 50 + }, + "emit_event_gas_cost": { + "syscall_base_gas_cost": 1, + "step_gas_cost": 10 + }, + "send_message_to_l1_gas_cost": { + "syscall_base_gas_cost": 1, + "step_gas_cost": 50 + }, + "secp256k1_add_gas_cost": { + "step_gas_cost": 406, + "range_check_gas_cost": 29 + }, + "secp256k1_get_point_from_x_gas_cost": { + "step_gas_cost": 391, + "range_check_gas_cost": 30, + "memory_hole_gas_cost": 20 + }, + "secp256k1_get_xy_gas_cost": { + "step_gas_cost": 239, + "range_check_gas_cost": 11, + "memory_hole_gas_cost": 40 + }, + "secp256k1_mul_gas_cost": { + "step_gas_cost": 76501, + "range_check_gas_cost": 7045, + "memory_hole_gas_cost": 2 + }, + "secp256k1_new_gas_cost": { + "step_gas_cost": 475, + "range_check_gas_cost": 35, + "memory_hole_gas_cost": 40 + }, + "secp256r1_add_gas_cost": { + "step_gas_cost": 589, + "range_check_gas_cost": 57 + }, + "secp256r1_get_point_from_x_gas_cost": { + "step_gas_cost": 510, + "range_check_gas_cost": 44, + "memory_hole_gas_cost": 20 + }, + "secp256r1_get_xy_gas_cost": { + "step_gas_cost": 241, + "range_check_gas_cost": 11, + "memory_hole_gas_cost": 40 + }, + "secp256r1_mul_gas_cost": { + "step_gas_cost": 125340, + "range_check_gas_cost": 13961, + "memory_hole_gas_cost": 2 + }, + "secp256r1_new_gas_cost": { + "step_gas_cost": 594, + "range_check_gas_cost": 49, + "memory_hole_gas_cost": 40 + }, + "keccak_gas_cost": { + "syscall_base_gas_cost": 1 + }, + "keccak_round_cost_gas_cost": 180000, + "sha256_process_block_gas_cost": { + "step_gas_cost": 0, + "range_check_gas_cost": 0, + "syscall_base_gas_cost": 0 + }, + "error_block_number_out_of_range": "Block number out of range", + "error_out_of_gas": "Out of gas", + "error_invalid_input_len": "Invalid input length", + "error_invalid_argument": "Invalid argument", + "validated": "VALID", + "l1_gas": "L1_GAS", + "l2_gas": "L2_GAS", + "l1_gas_index": 0, + "l2_gas_index": 1, + "validate_rounding_consts": { + "validate_block_number_rounding": 100, + "validate_timestamp_rounding": 3600 + } + }, + "os_resources": { + "execute_syscalls": { + "CallContract": { + "n_steps": 760, + "builtin_instance_counter": { + "range_check_builtin": 20 + }, + "n_memory_holes": 0 + }, + "DelegateCall": { + "n_steps": 713, + "builtin_instance_counter": { + "range_check_builtin": 19 + }, + "n_memory_holes": 0 + }, + "DelegateL1Handler": { + "n_steps": 692, + "builtin_instance_counter": { + "range_check_builtin": 15 + }, + "n_memory_holes": 0 + }, + "Deploy": { + "n_steps": 1012, + "builtin_instance_counter": { + "pedersen_builtin": 7, + "range_check_builtin": 19 + }, + "n_memory_holes": 0 + }, + "EmitEvent": { + "n_steps": 61, + "builtin_instance_counter": { + "range_check_builtin": 1 + }, + "n_memory_holes": 0 + }, + "GetBlockHash": { + "n_steps": 104, + "builtin_instance_counter": { + "range_check_builtin": 2 + }, + "n_memory_holes": 0 + }, + "GetBlockNumber": { + "n_steps": 40, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + }, + "GetBlockTimestamp": { + "n_steps": 38, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + }, + "GetCallerAddress": { + "n_steps": 64, + "builtin_instance_counter": { + "range_check_builtin": 1 + }, + "n_memory_holes": 0 + }, + "GetContractAddress": { + "n_steps": 64, + "builtin_instance_counter": { + "range_check_builtin": 1 + }, + "n_memory_holes": 0 + }, + "GetExecutionInfo": { + "n_steps": 64, + "builtin_instance_counter": { + "range_check_builtin": 1 + }, + "n_memory_holes": 0 + }, + "GetSequencerAddress": { + "n_steps": 34, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + }, + "GetTxInfo": { + "n_steps": 64, + "builtin_instance_counter": { + "range_check_builtin": 1 + }, + "n_memory_holes": 0 + }, + "GetTxSignature": { + "n_steps": 44, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + }, + "Keccak": { + "n_steps": 381, + "builtin_instance_counter": { + "bitwise_builtin": 6, + "keccak_builtin": 1, + "range_check_builtin": 56 + }, + "n_memory_holes": 0 + }, + "LibraryCall": { + "n_steps": 751, + "builtin_instance_counter": { + "range_check_builtin": 20 + }, + "n_memory_holes": 0 + }, + "LibraryCallL1Handler": { + "n_steps": 659, + "builtin_instance_counter": { + "range_check_builtin": 15 + }, + "n_memory_holes": 0 + }, + "ReplaceClass": { + "n_steps": 98, + "builtin_instance_counter": { + "range_check_builtin": 1 + }, + "n_memory_holes": 0 + }, + "Secp256k1Add": { + "n_steps": 408, + "builtin_instance_counter": { + "range_check_builtin": 29 + }, + "n_memory_holes": 0 + }, + "Secp256k1GetPointFromX": { + "n_steps": 393, + "builtin_instance_counter": { + "range_check_builtin": 30 + }, + "n_memory_holes": 0 + }, + "Secp256k1GetXy": { + "n_steps": 205, + "builtin_instance_counter": { + "range_check_builtin": 11 + }, + "n_memory_holes": 0 + }, + "Secp256k1Mul": { + "n_steps": 76503, + "builtin_instance_counter": { + "range_check_builtin": 7045 + }, + "n_memory_holes": 0 + }, + "Secp256k1New": { + "n_steps": 459, + "builtin_instance_counter": { + "range_check_builtin": 35 + }, + "n_memory_holes": 0 + }, + "Secp256r1Add": { + "n_steps": 591, + "builtin_instance_counter": { + "range_check_builtin": 57 + }, + "n_memory_holes": 0 + }, + "Secp256r1GetPointFromX": { + "n_steps": 512, + "builtin_instance_counter": { + "range_check_builtin": 44 + }, + "n_memory_holes": 0 + }, + "Secp256r1GetXy": { + "n_steps": 207, + "builtin_instance_counter": { + "range_check_builtin": 11 + }, + "n_memory_holes": 0 + }, + "Secp256r1Mul": { + "n_steps": 125342, + "builtin_instance_counter": { + "range_check_builtin": 13961 + }, + "n_memory_holes": 0 + }, + "Secp256r1New": { + "n_steps": 578, + "builtin_instance_counter": { + "range_check_builtin": 49 + }, + "n_memory_holes": 0 + }, + "SendMessageToL1": { + "n_steps": 139, + "builtin_instance_counter": { + "range_check_builtin": 1 + }, + "n_memory_holes": 0 + }, + "Sha256ProcessBlock": { + "builtin_instance_counter": {}, + "n_memory_holes": 0, + "n_steps": 0 + }, + "StorageRead": { + "n_steps": 87, + "builtin_instance_counter": { + "range_check_builtin": 1 + }, + "n_memory_holes": 0 + }, + "StorageWrite": { + "n_steps": 89, + "builtin_instance_counter": { + "range_check_builtin": 1 + }, + "n_memory_holes": 0 + } + }, + "execute_txs_inner": { + "Declare": { + "resources": { + "constant": { + "n_steps": 2839, + "builtin_instance_counter": { + "pedersen_builtin": 16, + "range_check_builtin": 63 + }, + "n_memory_holes": 0 + }, + "calldata_factor": { + "n_steps": 0, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + } + }, + "deprecated_resources": { + "constant": { + "n_steps": 2839, + "builtin_instance_counter": { + "pedersen_builtin": 16, + "range_check_builtin": 63 + }, + "n_memory_holes": 0 + }, + "calldata_factor": { + "n_steps": 0, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + } + } + }, + "DeployAccount": { + "resources": { + "constant": { + "n_steps": 3792, + "builtin_instance_counter": { + "pedersen_builtin": 23, + "range_check_builtin": 83 + }, + "n_memory_holes": 0 + }, + "calldata_factor": { + "n_steps": 21, + "builtin_instance_counter": { + "pedersen_builtin": 2 + }, + "n_memory_holes": 0 + } + }, + "deprecated_resources": { + "constant": { + "n_steps": 3792, + "builtin_instance_counter": { + "pedersen_builtin": 23, + "range_check_builtin": 83 + }, + "n_memory_holes": 0 + }, + "calldata_factor": { + "n_steps": 21, + "builtin_instance_counter": { + "pedersen_builtin": 2 + }, + "n_memory_holes": 0 + } + } + }, + "InvokeFunction": { + "resources": { + "constant": { + "n_steps": 3546, + "builtin_instance_counter": { + "pedersen_builtin": 14, + "range_check_builtin": 80 + }, + "n_memory_holes": 0 + }, + "calldata_factor": { + "n_steps": 8, + "builtin_instance_counter": { + "pedersen_builtin": 1 + }, + "n_memory_holes": 0 + } + }, + "deprecated_resources": { + "constant": { + "n_steps": 3546, + "builtin_instance_counter": { + "pedersen_builtin": 14, + "range_check_builtin": 80 + }, + "n_memory_holes": 0 + }, + "calldata_factor": { + "n_steps": 8, + "builtin_instance_counter": { + "pedersen_builtin": 1 + }, + "n_memory_holes": 0 + } + } + }, + "L1Handler": { + "resources": { + "constant": { + "n_steps": 1146, + "builtin_instance_counter": { + "pedersen_builtin": 11, + "range_check_builtin": 17 + }, + "n_memory_holes": 0 + }, + "calldata_factor": { + "n_steps": 13, + "builtin_instance_counter": { + "pedersen_builtin": 1 + }, + "n_memory_holes": 0 + } + }, + "deprecated_resources": { + "constant": { + "n_steps": 1146, + "builtin_instance_counter": { + "pedersen_builtin": 11, + "range_check_builtin": 17 + }, + "n_memory_holes": 0 + }, + "calldata_factor": { + "n_steps": 13, + "builtin_instance_counter": { + "pedersen_builtin": 1 + }, + "n_memory_holes": 0 + } + } + } + }, + "compute_os_kzg_commitment_info": { + "n_steps": 0, + "builtin_instance_counter": {}, + "n_memory_holes": 0 + } + }, + "validate_max_n_steps": 1000000, + "vm_resource_fee_cost": { + "add_mod_builtin": [ + 0, + 1 + ], + "bitwise_builtin": [ + 16, + 100 + ], + "ec_op_builtin": [ + 256, + 100 + ], + "ecdsa_builtin": [ + 512, + 100 + ], + "keccak_builtin": [ + 512, + 100 + ], + "mul_mod_builtin": [ + 0, + 1 + ], + "n_steps": [ + 25, + 10000 + ], + "output_builtin": [ + 0, + 1 + ], + "pedersen_builtin": [ + 8, + 100 + ], + "poseidon_builtin": [ + 8, + 100 + ], + "range_check_builtin": [ + 4, + 100 + ], + "range_check96_builtin": [ + 0, + 1 + ] + } +} diff --git a/vm/trace.go b/vm/trace.go index bd284767b3..f17257ff41 100644 --- a/vm/trace.go +++ b/vm/trace.go @@ -232,6 +232,9 @@ type ComputationResources struct { Keccak uint64 `json:"keccak_builtin_applications,omitempty"` Poseidon uint64 `json:"poseidon_builtin_applications,omitempty"` SegmentArena uint64 `json:"segment_arena_builtin,omitempty"` + AddMod uint64 `json:"add_mod_builtin,omitempty"` + MulMod uint64 `json:"mul_mod_builtin,omitempty"` + RangeCheck96 uint64 `json:"range_check_96_builtin,omitempty"` } type DataAvailability struct { diff --git a/vm/vm.go b/vm/vm.go index d0e677c351..ba952ee1f7 100644 --- a/vm/vm.go +++ b/vm/vm.go @@ -29,11 +29,12 @@ typedef struct BlockInfo { } BlockInfo; extern void cairoVMCall(CallInfo* call_info_ptr, BlockInfo* block_info_ptr, uintptr_t readerHandle, char* chain_id, - unsigned long long max_steps); + unsigned long long max_steps, unsigned char concurrency_mode); extern void cairoVMExecute(char* txns_json, char* classes_json, char* paid_fees_on_l1_json, BlockInfo* block_info_ptr, uintptr_t readerHandle, char* chain_id, - unsigned char skip_charge_fee, unsigned char skip_validate, unsigned char err_on_revert); + unsigned char skip_charge_fee, unsigned char skip_validate, unsigned char err_on_revert, + unsigned char concurrency_mode); extern char* setVersionedConstants(char* json); extern void freeString(char* str); @@ -60,19 +61,22 @@ import ( //go:generate mockgen -destination=../mocks/mock_vm.go -package=mocks github.com/NethermindEth/juno/vm VM type VM interface { - Call(callInfo *CallInfo, blockInfo *BlockInfo, state core.StateReader, network *utils.Network, maxSteps uint64, useBlobData bool) ([]*felt.Felt, error) //nolint:lll + Call(callInfo *CallInfo, blockInfo *BlockInfo, state core.StateReader, network *utils.Network, + maxSteps uint64, useBlobData bool) ([]*felt.Felt, error) Execute(txns []core.Transaction, declaredClasses []core.Class, paidFeesOnL1 []*felt.Felt, blockInfo *BlockInfo, state core.StateReader, network *utils.Network, skipChargeFee, skipValidate, errOnRevert, useBlobData bool, ) ([]*felt.Felt, []*felt.Felt, []TransactionTrace, error) } type vm struct { - log utils.SimpleLogger + log utils.SimpleLogger + concurrencyMode bool } -func New(log utils.SimpleLogger) VM { +func New(concurrencyMode bool, log utils.SimpleLogger) VM { return &vm{ - log: log, + log: log, + concurrencyMode: concurrencyMode, } } @@ -225,6 +229,10 @@ func (v *vm) Call(callInfo *CallInfo, blockInfo *BlockInfo, state core.StateRead handle := cgo.NewHandle(context) defer handle.Delete() + var concurrencyModeByte byte + if v.concurrencyMode { + concurrencyModeByte = 1 + } C.setVersionedConstants(C.CString("my_json")) cCallInfo, callInfoPinner := makeCCallInfo(callInfo) @@ -235,7 +243,8 @@ func (v *vm) Call(callInfo *CallInfo, blockInfo *BlockInfo, state core.StateRead &cBlockInfo, C.uintptr_t(handle), chainID, - C.ulonglong(maxSteps), //nolint:gocritic + C.ulonglong(maxSteps), //nolint:gocritic + C.uchar(concurrencyModeByte), //nolint:gocritic ) callInfoPinner.Unpin() C.free(unsafe.Pointer(chainID)) @@ -288,6 +297,11 @@ func (v *vm) Execute(txns []core.Transaction, declaredClasses []core.Class, paid errOnRevertByte = 1 } + var concurrencyModeByte byte + if v.concurrencyMode { + concurrencyModeByte = 1 + } + cBlockInfo := makeCBlockInfo(blockInfo, useBlobData) chainID := C.CString(network.L2ChainID) C.cairoVMExecute(txnsJSONCstr, @@ -298,7 +312,8 @@ func (v *vm) Execute(txns []core.Transaction, declaredClasses []core.Class, paid chainID, C.uchar(skipChargeFeeByte), C.uchar(skipValidateByte), - C.uchar(errOnRevertByte), //nolint:gocritic + C.uchar(errOnRevertByte), //nolint:gocritic + C.uchar(concurrencyModeByte), //nolint:gocritic ) C.free(unsafe.Pointer(classesJSONCStr)) diff --git a/vm/vm_test.go b/vm/vm_test.go index dc65cb2179..63c830debb 100644 --- a/vm/vm_test.go +++ b/vm/vm_test.go @@ -50,7 +50,7 @@ func TestV0Call(t *testing.T) { entryPoint := utils.HexToFelt(t, "0x39e11d48192e4333233c7eb19d10ad67c362bb28580c604d67884c85da39695") - ret, err := New(nil).Call(&CallInfo{ + ret, err := New(false, nil).Call(&CallInfo{ ContractAddress: contractAddr, ClassHash: classHash, Selector: entryPoint, @@ -70,7 +70,7 @@ func TestV0Call(t *testing.T) { }, }, nil)) - ret, err = New(nil).Call(&CallInfo{ + ret, err = New(false, nil).Call(&CallInfo{ ContractAddress: contractAddr, ClassHash: classHash, Selector: entryPoint, @@ -116,7 +116,7 @@ func TestV1Call(t *testing.T) { // test_storage_read entryPoint := utils.HexToFelt(t, "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf") storageLocation := utils.HexToFelt(t, "0x44") - ret, err := New(log).Call(&CallInfo{ + ret, err := New(false, log).Call(&CallInfo{ ContractAddress: contractAddr, Selector: entryPoint, Calldata: []felt.Felt{ @@ -138,7 +138,7 @@ func TestV1Call(t *testing.T) { }, }, nil)) - ret, err = New(log).Call(&CallInfo{ + ret, err = New(false, log).Call(&CallInfo{ ContractAddress: contractAddr, Selector: entryPoint, Calldata: []felt.Felt{ @@ -182,7 +182,7 @@ func TestCall_MaxSteps(t *testing.T) { entryPoint := utils.HexToFelt(t, "0x39e11d48192e4333233c7eb19d10ad67c362bb28580c604d67884c85da39695") - _, err = New(nil).Call(&CallInfo{ + _, err = New(false, nil).Call(&CallInfo{ ContractAddress: contractAddr, ClassHash: classHash, Selector: entryPoint, @@ -203,7 +203,7 @@ func TestExecute(t *testing.T) { state := core.NewState(txn) t.Run("empty transaction list", func(t *testing.T) { - _, _, _, err := New(nil).Execute([]core.Transaction{}, []core.Class{}, []*felt.Felt{}, &BlockInfo{ + _, _, _, err := New(false, nil).Execute([]core.Transaction{}, []core.Class{}, []*felt.Felt{}, &BlockInfo{ Header: &core.Header{ Timestamp: 1666877926, SequencerAddress: utils.HexToFelt(t, "0x46a89ae102987331d369645031b49c27738ed096f2789c24449966da4c6de6b"), @@ -215,7 +215,7 @@ func TestExecute(t *testing.T) { require.NoError(t, err) }) t.Run("zero data", func(t *testing.T) { - _, _, _, err := New(nil).Execute(nil, nil, []*felt.Felt{}, &BlockInfo{ + _, _, _, err := New(false, nil).Execute(nil, nil, []*felt.Felt{}, &BlockInfo{ Header: &core.Header{ SequencerAddress: &felt.Zero, GasPrice: &felt.Zero, From df48ed96ac603d7242d818173804c8de905e0090 Mon Sep 17 00:00:00 2001 From: Kirill Date: Wed, 31 Jul 2024 00:34:51 +0300 Subject: [PATCH 56/69] Update hashing functions for 0.13.2 (#1964) Co-authored-by: IronGauntlets --- adapters/p2p2core/receipt.go | 5 + adapters/sn2core/sn2core.go | 12 + adapters/vm2core/vm2core.go | 4 + blockchain/blockchain.go | 5 +- blockchain/blockchain_test.go | 25 + clients/feeder/feeder_test.go | 16 + .../sepolia-integration/block/35748.json | 134 + .../sepolia-integration/block/35749.json | 526 + .../sepolia-integration/block/37500.json | 418 + .../sepolia-integration/block/38748.json | 14284 ++++++++++++++++ .../sepolia-integration/signature/16350.json | 12 +- .../sepolia-integration/signature/35748.json | 7 + .../sepolia-integration/signature/35749.json | 7 + .../sepolia-integration/signature/37500.json | 7 + .../sepolia-integration/signature/38748.json | 7 + .../state_update/35748.json | 41 + .../state_update/35749.json | 93 + .../state_update/37500.json | 68 + .../state_update/38748.json | 1569 ++ core/block.go | 120 +- core/block_test.go | 35 +- core/receipt.go | 83 + core/state_update.go | 187 +- core/state_update_test.go | 43 +- core/transaction.go | 116 +- core/transaction_test.go | 2 +- core/trie/trie.go | 12 +- core/trie/trie_test.go | 18 +- migration/migration.go | 2 +- node/node.go | 7 +- starknet/block.go | 3 + starknet/transaction.go | 9 + 32 files changed, 17747 insertions(+), 130 deletions(-) create mode 100644 clients/feeder/testdata/sepolia-integration/block/35748.json create mode 100644 clients/feeder/testdata/sepolia-integration/block/35749.json create mode 100644 clients/feeder/testdata/sepolia-integration/block/37500.json create mode 100644 clients/feeder/testdata/sepolia-integration/block/38748.json create mode 100644 clients/feeder/testdata/sepolia-integration/signature/35748.json create mode 100644 clients/feeder/testdata/sepolia-integration/signature/35749.json create mode 100644 clients/feeder/testdata/sepolia-integration/signature/37500.json create mode 100644 clients/feeder/testdata/sepolia-integration/signature/38748.json create mode 100644 clients/feeder/testdata/sepolia-integration/state_update/35748.json create mode 100644 clients/feeder/testdata/sepolia-integration/state_update/35749.json create mode 100644 clients/feeder/testdata/sepolia-integration/state_update/37500.json create mode 100644 clients/feeder/testdata/sepolia-integration/state_update/38748.json create mode 100644 core/receipt.go diff --git a/adapters/p2p2core/receipt.go b/adapters/p2p2core/receipt.go index d53f9e54b2..66c28a1499 100644 --- a/adapters/p2p2core/receipt.go +++ b/adapters/p2p2core/receipt.go @@ -52,10 +52,15 @@ func adaptExecutionResources(er *spec.Receipt_ExecutionResources) *core.Executio Keccak: uint64(er.GetBuiltins().GetKeccak()), Poseidon: uint64(er.GetBuiltins().GetPoseidon()), SegmentArena: 0, // todo(kirill) recheck + // todo(kirill) set fields after spec update + AddMod: 0, + MulMod: 0, + RangeCheck96: 0, }, DataAvailability: nil, // todo(kirill) recheck MemoryHoles: uint64(er.MemoryHoles), Steps: uint64(er.Steps), // todo SPEC 32 -> 64 bytes + TotalGasConsumed: nil, // todo(kirill) fill after spec update } } diff --git a/adapters/sn2core/sn2core.go b/adapters/sn2core/sn2core.go index 27b774cf6a..ead1605a64 100644 --- a/adapters/sn2core/sn2core.go +++ b/adapters/sn2core/sn2core.go @@ -79,6 +79,17 @@ func AdaptTransactionReceipt(response *starknet.TransactionReceipt) *core.Transa } } +func adaptGasConsumed(response *starknet.GasConsumed) *core.GasConsumed { + if response == nil { + return nil + } + + return &core.GasConsumed{ + L1Gas: response.L1Gas, + L1DataGas: response.L1DataGas, + } +} + func AdaptEvent(response *starknet.Event) *core.Event { if response == nil { return nil @@ -101,6 +112,7 @@ func AdaptExecutionResources(response *starknet.ExecutionResources) *core.Execut MemoryHoles: response.MemoryHoles, Steps: response.Steps, DataAvailability: (*core.DataAvailability)(response.DataAvailability), + TotalGasConsumed: adaptGasConsumed(response.TotalGasConsumed), } } diff --git a/adapters/vm2core/vm2core.go b/adapters/vm2core/vm2core.go index 0c73889932..3c83713740 100644 --- a/adapters/vm2core/vm2core.go +++ b/adapters/vm2core/vm2core.go @@ -22,10 +22,14 @@ func AdaptExecutionResources(resources *vm.ExecutionResources) *core.ExecutionRe Poseidon: resources.Poseidon, SegmentArena: resources.SegmentArena, Output: 0, // todo(kirill) recheck, add Output field to core? + AddMod: resources.AddMod, + MulMod: resources.MulMod, + RangeCheck96: resources.RangeCheck96, }, MemoryHoles: resources.MemoryHoles, Steps: resources.Steps, DataAvailability: adaptDA(resources.DataAvailability), + TotalGasConsumed: nil, // todo: fill after 0.13.2 } } diff --git a/blockchain/blockchain.go b/blockchain/blockchain.go index 36d622991c..ee2411c471 100644 --- a/blockchain/blockchain.go +++ b/blockchain/blockchain.go @@ -51,7 +51,7 @@ type Reader interface { var ( ErrParentDoesNotMatchHead = errors.New("block's parent hash does not match head block hash") - supportedStarknetVersion = semver.MustParse("0.13.1") + supportedStarknetVersion = semver.MustParse("0.13.2") ) func checkBlockVersion(protocolVersion string) error { @@ -340,6 +340,7 @@ func (b *Blockchain) Store(block *core.Block, blockCommitments *core.BlockCommit if err := verifyBlock(txn, block); err != nil { return err } + if err := core.NewState(txn).Update(block.Number, stateUpdate, newClasses); err != nil { return err } @@ -636,7 +637,7 @@ func (b *Blockchain) SanityCheckNewHeight(block *core.Block, stateUpdate *core.S return nil, err } - return core.VerifyBlockHash(block, b.network) + return core.VerifyBlockHash(block, b.network, stateUpdate.StateDiff) } type txAndReceiptDBKey struct { diff --git a/blockchain/blockchain_test.go b/blockchain/blockchain_test.go index 76ebc1b164..c0c3666a91 100644 --- a/blockchain/blockchain_test.go +++ b/blockchain/blockchain_test.go @@ -268,6 +268,31 @@ func TestStore(t *testing.T) { }) } +func TestBlockCommitments(t *testing.T) { + chain := blockchain.New(pebble.NewMemTest(t), &utils.Mainnet) + client := feeder.NewTestClient(t, &utils.Mainnet) + gw := adaptfeeder.New(client) + + b, err := gw.BlockByNumber(context.Background(), 0) + require.NoError(t, err) + + su, err := gw.StateUpdate(context.Background(), 0) + require.NoError(t, err) + + expectedCommitments := &core.BlockCommitments{ + TransactionCommitment: new(felt.Felt).SetUint64(1), + EventCommitment: new(felt.Felt).SetUint64(2), + ReceiptCommitment: new(felt.Felt).SetUint64(3), + StateDiffCommitment: new(felt.Felt).SetUint64(4), + } + + require.NoError(t, chain.Store(b, expectedCommitments, su, nil)) + + commitments, err := chain.BlockCommitmentsByNumber(0) + require.NoError(t, err) + require.Equal(t, expectedCommitments, commitments) +} + func TestTransactionAndReceipt(t *testing.T) { chain := blockchain.New(pebble.NewMemTest(t), &utils.Mainnet) diff --git a/clients/feeder/feeder_test.go b/clients/feeder/feeder_test.go index 8aa4fe94fa..a22590a943 100644 --- a/clients/feeder/feeder_test.go +++ b/clients/feeder/feeder_test.go @@ -334,6 +334,22 @@ func TestBlockHeaderV0131Unmarshal(t *testing.T) { require.Equal(t, uint64(128), block.Receipts[0].ExecutionResources.DataAvailability.L1DataGas) } +func TestBlockHeaderv0132Unmarshal(t *testing.T) { + client := feeder.NewTestClient(t, &utils.SepoliaIntegration) + block, err := client.Block(context.Background(), "35748") + require.NoError(t, err) + + // Only focus on checking the new fields + require.Equal(t, utils.HexToFelt(t, "0x1ea2a9cfa3df5297d58c0a04d09d276bc68d40fe64701305bbe2ed8f417e869"), block.Hash) + require.Equal(t, utils.HexToFelt(t, "0x77140bef51bbb4d1932f17cc5081825ff18465a1df4440ca0429a4fa80f1dc5"), block.ParentHash) + require.Equal(t, utils.HexToFelt(t, "0x6f12628d21a8df7f158b631d801fc0dd20034b9e22eca255bddc0c1c1bc283f"), block.ReceiptCommitment) + require.Equal(t, utils.HexToFelt(t, "0x23587c54d590b57b8e25acbf1e1a422eb4cd104e95ee4a681021a6bb7456afa"), block.StateDiffCommitment) + require.Equal(t, uint64(6), block.StateDiffLength) + require.Equal(t, "0.13.2", block.Version) + require.Equal(t, uint64(117620), block.Receipts[0].ExecutionResources.TotalGasConsumed.L1Gas) + require.Equal(t, uint64(192), block.Receipts[0].ExecutionResources.TotalGasConsumed.L1DataGas) +} + func TestClassV0Unmarshal(t *testing.T) { client := feeder.NewTestClient(t, &utils.Mainnet) diff --git a/clients/feeder/testdata/sepolia-integration/block/35748.json b/clients/feeder/testdata/sepolia-integration/block/35748.json new file mode 100644 index 0000000000..870aaf3836 --- /dev/null +++ b/clients/feeder/testdata/sepolia-integration/block/35748.json @@ -0,0 +1,134 @@ +{ + "block_hash": "0x1ea2a9cfa3df5297d58c0a04d09d276bc68d40fe64701305bbe2ed8f417e869", + "parent_block_hash": "0x77140bef51bbb4d1932f17cc5081825ff18465a1df4440ca0429a4fa80f1dc5", + "block_number": 35748, + "state_root": "0x38e01cbe2d5721780b2e1a478fd131f2ffcc099528dd2e1289f26b027127790", + "transaction_commitment": "0x54f43cf29b80cc83aef36f3195b73cb165ad12553eae147b4cce62adbf0b180", + "event_commitment": "0x12dfbe9dbbaba9c34b5a4c0ba622dcd8e2bb0264481c77f073008b59825a758", + "receipt_commitment": "0x6f12628d21a8df7f158b631d801fc0dd20034b9e22eca255bddc0c1c1bc283f", + "state_diff_commitment": "0x23587c54d590b57b8e25acbf1e1a422eb4cd104e95ee4a681021a6bb7456afa", + "state_diff_length": 6, + "status": "ACCEPTED_ON_L1", + "l1_da_mode": "BLOB", + "l1_gas_price": { + "price_in_wei": "0x7427e87c4", + "price_in_fri": "0x9346cee0949c" + }, + "l1_data_gas_price": { + "price_in_wei": "0x3b095dc6", + "price_in_fri": "0x4ada914d823" + }, + "transactions": [ + { + "transaction_hash": "0x5ac644bbd6ae98d3be2d988439854e33f0961e24f349a63b43e16d172bfe747", + "version": "0x2", + "max_fee": "0x4f6ac5195e92e4", + "signature": [ + "0x43ad3c7c77f7b7762db41ee9d33958813ee25efed77bc7199e08f4f40b1a59", + "0xfedb8715405faf28de29a07a3f3f06f078bac3fcb67ac7f5ae392e15a75921" + ], + "nonce": "0xd", + "class_hash": "0x2fd9e122406490dc0f299f3070eaaa8df854d97ff81b47e91da32b8cd9d757a", + "compiled_class_hash": "0x55d1e0ee31f8f937fc75b37045129fbe0e01747baacb44b89d2d3d2c649117e", + "sender_address": "0x472aa8128e01eb0df145810c9511a92852d62a68ba8198ce5fa414e6337a365", + "type": "DECLARE" + }, + { + "transaction_hash": "0x21bc0afe54123b946855e1bf9389d943313df5c5c396fbf0630234a44f6f592", + "version": "0x2", + "max_fee": "0xe6e9346a5ae75a", + "signature": [ + "0x12a928f7042a66c5419fc5182da6879c357f013335d8b61d0ad774009afbb40", + "0x63479f4343dc2f068bff99fbbf0027250a672999fb5675cee1f2d1a64d33844" + ], + "nonce": "0xe", + "class_hash": "0x19de7881922dbc95846b1bb9464dba34046c46470cfb5e18b4cb2892fd4111f", + "compiled_class_hash": "0x6506976af042088c9ea49e6cc9c9a12838ee6920bb989dce02f5c6467667367", + "sender_address": "0x472aa8128e01eb0df145810c9511a92852d62a68ba8198ce5fa414e6337a365", + "type": "DECLARE" + } + ], + "timestamp": 1720426817, + "sequencer_address": "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "transaction_receipts": [ + { + "execution_status": "SUCCEEDED", + "transaction_index": 0, + "transaction_hash": "0x5ac644bbd6ae98d3be2d988439854e33f0961e24f349a63b43e16d172bfe747", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x472aa8128e01eb0df145810c9511a92852d62a68ba8198ce5fa414e6337a365", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xd07af45c84550", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 3950, + "builtin_instance_counter": { + "pedersen_builtin": 16, + "range_check_builtin": 157, + "ecdsa_builtin": 1, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 117620, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xd07af45c84550" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 1, + "transaction_hash": "0x21bc0afe54123b946855e1bf9389d943313df5c5c396fbf0630234a44f6f592", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x472aa8128e01eb0df145810c9511a92852d62a68ba8198ce5fa414e6337a365", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x471426f16c4330", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 3950, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ecdsa_builtin": 1, + "range_check_builtin": 157, + "pedersen_builtin": 16 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 641644, + "l1_data_gas": 192 + } + }, + "actual_fee": "0x471426f16c4330" + } + ], + "starknet_version": "0.13.2" +} \ No newline at end of file diff --git a/clients/feeder/testdata/sepolia-integration/block/35749.json b/clients/feeder/testdata/sepolia-integration/block/35749.json new file mode 100644 index 0000000000..1118bb2952 --- /dev/null +++ b/clients/feeder/testdata/sepolia-integration/block/35749.json @@ -0,0 +1,526 @@ +{ + "block_hash": "0x23b37df7360bc6c434d32a6a4f46f1705efb4fdf7142bfd66929f5b40035a6", + "parent_block_hash": "0x1ea2a9cfa3df5297d58c0a04d09d276bc68d40fe64701305bbe2ed8f417e869", + "block_number": 35749, + "state_root": "0x8638b46e7b92719ae718dc352c793d1df15c55956be999a539e9a27c260337", + "transaction_commitment": "0x6e4a0087d38efb943193326a3e50f5b50f6affd893cbf750e4c5a7f51d118cd", + "event_commitment": "0x70e08de500e11f8bce2949735ff6ea749520235c7dbcf1b058f1142ec0f9d61", + "receipt_commitment": "0x6977f725ce9c5d88611dc180e5b70c78c7b1dc82a4bbe4947534a41c3c2965b", + "state_diff_commitment": "0x323feeef51cadc14d4a025eb541227b177f69d1e6052854de262ca5e18055a1", + "state_diff_length": 17, + "status": "ACCEPTED_ON_L1", + "l1_da_mode": "BLOB", + "l1_gas_price": { + "price_in_wei": "0x9c3948c46", + "price_in_fri": "0xc62a5896c8ed" + }, + "l1_data_gas_price": { + "price_in_wei": "0x55a8378e", + "price_in_fri": "0x6ca75229e0a" + }, + "transactions": [ + { + "transaction_hash": "0x639b6e601676d9a70b639b34b38626aa26d3c51ae6fae8195dfe7729b4573d4", + "version": "0x0", + "contract_address": "0x4c5772d1914fe6ce891b64eb35bf3522aeae1315647314aac58b01137607f3f", + "entry_point_selector": "0x2d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5", + "nonce": "0x4b", + "calldata": [ + "0x6bc7a9f029e5e0cfe84c5b8b1acc0ea952eaed3b", + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x29a2241af62c0000", + "0x0" + ], + "type": "L1_HANDLER" + }, + { + "transaction_hash": "0x37ebf44a83f3337bb61f8c572d100fbfcbe94b5a8f8a190bb38c06c2e9b2d53", + "version": "0x0", + "contract_address": "0x594c1582459ea03f77deaf9eb7e3917d6994a03c13405ba42867f83d85f085d", + "entry_point_selector": "0x2d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5", + "nonce": "0x4c", + "calldata": [ + "0x6fe45befc2c0e0f619d5ccfb6fa4d40590f6bc53", + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x10f0cf064dd59200000", + "0x0" + ], + "type": "L1_HANDLER" + }, + { + "transaction_hash": "0xcdfc5bfdcd4de0f3aa61271e0123cce9d153d543b08f85eb55e63d04ae9c74", + "version": "0x3", + "signature": [ + "0x708bd207d80d802385109c08fc8dbf1bec7f5adfe063f2e95913996e81005d3", + "0x59f731369dab2219f4f5562e38088eaa389105988fb9eac1966bdfc4fa5c103" + ], + "nonce": "0x0", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0xc3500", + "max_price_per_unit": "0xe35fa931a000" + }, + "L2_GAS": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "tip": "0x0", + "paymaster_data": [], + "sender_address": "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "contract_address_salt": "0xbd8c4621bc47bf25dfdd21b4317e5cb93184814a9432f4b53c1ff338b00fd", + "class_hash": "0x2fd9e122406490dc0f299f3070eaaa8df854d97ff81b47e91da32b8cd9d757a", + "constructor_calldata": [ + "0x406a640b3b70dad390d661c088df1fbaeb5162a07d57cf29ba794e2b0e3c804" + ], + "type": "DEPLOY_ACCOUNT" + }, + { + "transaction_hash": "0x6963ec558745a5eb34927ff945631d0157e842df64baafc0acdc45c7530c436", + "version": "0x1", + "max_fee": "0x354a6ba7a18000", + "signature": [ + "0x11c610f8578c27feea285705a89ff2b0ad5ec5aa0910bdf3f313332bd55d406", + "0x961786f7a83874a4d2dfbba3b893dcce74a4164b422692aa35cd60e6da3242" + ], + "nonce": "0x1", + "sender_address": "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "calldata": [ + "0x1", + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x2730079d734ee55315f4f141eaed376bddd8c2133523d223a344c5604e0f7f8", + "0x4", + "0x19de7881922dbc95846b1bb9464dba34046c46470cfb5e18b4cb2892fd4111f", + "0x2eac6e4530acbb64eeb07c7a1d81dbd359f14bc22edd20f149c0d63cdb356c7", + "0x0", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xc1a48191dd00ee2f05cb6b0c8f9e3e7767cbf13e55f0907f45339e662898c1", + "version": "0x3", + "signature": [ + "0x2ad5aee3fa655da192ebed4913e0dd7f295ac37d4b92c5a7546ca8fb28fd63c", + "0x1ecd893d8fe7a30e575b2a3af4f3ca1695537eca5ebf47e94a05d5db780ab6b" + ], + "nonce": "0x2", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0xc3500", + "max_price_per_unit": "0xe35fa931a000" + }, + "L2_GAS": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "tip": "0x0", + "paymaster_data": [], + "sender_address": "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "calldata": [ + "0x1", + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x2730079d734ee55315f4f141eaed376bddd8c2133523d223a344c5604e0f7f8", + "0x4", + "0x19de7881922dbc95846b1bb9464dba34046c46470cfb5e18b4cb2892fd4111f", + "0x2eac6e4530acbb64eeb07c7a1d81dbd359f14bc22edd20f149c0d63cdb356c8", + "0x0", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3b96f398134800efa13f9b6566ff7c23b2524e4d2f5d22d8fe9f684214473b2", + "version": "0x3", + "signature": [ + "0x1983a6378d753f2a3818470517cadb1e83299e1b2c060bd68a4b33062ad3d88", + "0x234dd02a8500a90fca140975c7fcdb4a356cf532d9d184d4fd7aa3eb44baf3b" + ], + "nonce": "0x3", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0xc3500", + "max_price_per_unit": "0xe35fa931a000" + }, + "L2_GAS": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "tip": "0x0", + "paymaster_data": [], + "sender_address": "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "calldata": [ + "0x1", + "0x65cdd7892656f7f89887c2c84bb3cea8f8c1b472a4f61838496c1fc7cc8733b", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x23bf06fbbf6634459b7cd052e704bcf80f07e85cbdede138ce8e1e3aace24ac", + "0x4617cc24c69548663a20ccd75a98355fab6a7c70b13cb427194943e34298ba6" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5d17a95dff10124142c65a247439ac7a33171b927f8e43b3d90360d6352bb83", + "version": "0x3", + "signature": [ + "0x34ee3d7ee07f00b8a91a9896a3505cc2a9660f62b95342c41ea45f91c4c9e11", + "0x19b88727c89ab7187569b1e3b639581d4f1dcd79a6b6242cf061f2931c5535" + ], + "nonce": "0x4", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0xc3500", + "max_price_per_unit": "0xe35fa931a000" + }, + "L2_GAS": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "tip": "0x0", + "paymaster_data": [], + "sender_address": "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "calldata": [ + "0x1", + "0x65cdd7892656f7f89887c2c84bb3cea8f8c1b472a4f61838496c1fc7cc8733b", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + } + ], + "timestamp": 1720427256, + "sequencer_address": "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "transaction_receipts": [ + { + "execution_status": "SUCCEEDED", + "transaction_index": 0, + "transaction_hash": "0x639b6e601676d9a70b639b34b38626aa26d3c51ae6fae8195dfe7729b4573d4", + "l1_to_l2_consumed_message": { + "from_address": "0x6BC7a9f029E5E0CFe84c5b8b1acC0EA952EAed3b", + "to_address": "0x4c5772d1914fe6ce891b64eb35bf3522aeae1315647314aac58b01137607f3f", + "selector": "0x2d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5", + "payload": [ + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x29a2241af62c0000", + "0x0" + ], + "nonce": "0x4b" + }, + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x0", + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x29a2241af62c0000", + "0x0" + ] + }, + { + "from_address": "0x4c5772d1914fe6ce891b64eb35bf3522aeae1315647314aac58b01137607f3f", + "keys": [ + "0x221e5a5008f7a28564f0eaa32cdeb0848d10657c449aed3e15d12150a7c2db3" + ], + "data": [ + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x29a2241af62c0000", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 10106, + "builtin_instance_counter": { + "range_check_builtin": 245, + "pedersen_builtin": 18, + "poseidon_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128 + }, + "total_gas_consumed": { + "l1_gas": 17430, + "l1_data_gas": 128 + } + }, + "actual_fee": "0x0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 1, + "transaction_hash": "0x37ebf44a83f3337bb61f8c572d100fbfcbe94b5a8f8a190bb38c06c2e9b2d53", + "l1_to_l2_consumed_message": { + "from_address": "0x6FE45BEFC2C0E0F619D5ccFB6fA4D40590f6bC53", + "to_address": "0x594c1582459ea03f77deaf9eb7e3917d6994a03c13405ba42867f83d85f085d", + "selector": "0x2d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5", + "payload": [ + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x10f0cf064dd59200000", + "0x0" + ], + "nonce": "0x4c" + }, + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x0", + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a" + ], + "data": [ + "0x10f0cf064dd59200000", + "0x0" + ] + }, + { + "from_address": "0x594c1582459ea03f77deaf9eb7e3917d6994a03c13405ba42867f83d85f085d", + "keys": [ + "0x221e5a5008f7a28564f0eaa32cdeb0848d10657c449aed3e15d12150a7c2db3" + ], + "data": [ + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x10f0cf064dd59200000", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 11999, + "builtin_instance_counter": { + "bitwise_builtin": 4, + "range_check_builtin": 410, + "pedersen_builtin": 20, + "poseidon_builtin": 9 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 320 + }, + "total_gas_consumed": { + "l1_gas": 17434, + "l1_data_gas": 320 + } + }, + "actual_fee": "0x0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 2, + "transaction_hash": "0xcdfc5bfdcd4de0f3aa61271e0123cce9d153d543b08f85eb55e63d04ae9c74", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x10c777568945b6", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5472, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 206, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 224 + }, + "total_gas_consumed": { + "l1_gas": 14, + "l1_data_gas": 224 + } + }, + "actual_fee": "0x10c777568945b6" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 3, + "transaction_hash": "0x6963ec558745a5eb34927ff945631d0157e842df64baafc0acdc45c7530c436", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1372c028dc4", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 8305, + "builtin_instance_counter": { + "pedersen_builtin": 29, + "poseidon_builtin": 5, + "range_check_builtin": 309, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 288 + }, + "total_gas_consumed": { + "l1_gas": 22, + "l1_data_gas": 288 + } + }, + "actual_fee": "0x1372c028dc4" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 4, + "transaction_hash": "0xc1a48191dd00ee2f05cb6b0c8f9e3e7767cbf13e55f0907f45339e662898c1", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x18ab6763e70f9e", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 8305, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "poseidon_builtin": 5, + "range_check_builtin": 309, + "pedersen_builtin": 29 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 288 + }, + "total_gas_consumed": { + "l1_gas": 22, + "l1_data_gas": 288 + } + }, + "actual_fee": "0x18ab6763e70f9e" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 5, + "transaction_hash": "0x3b96f398134800efa13f9b6566ff7c23b2524e4d2f5d22d8fe9f684214473b2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x157f99b5cef397", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 6833, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "poseidon_builtin": 5, + "range_check_builtin": 267, + "pedersen_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256 + }, + "total_gas_consumed": { + "l1_gas": 19, + "l1_data_gas": 256 + } + }, + "actual_fee": "0x157f99b5cef397" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 6, + "transaction_hash": "0x5d17a95dff10124142c65a247439ac7a33171b927f8e43b3d90360d6352bb83", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xfc7e01abb93d0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 6234, + "builtin_instance_counter": { + "pedersen_builtin": 18, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "range_check_builtin": 195 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128 + }, + "total_gas_consumed": { + "l1_gas": 16, + "l1_data_gas": 128 + } + }, + "actual_fee": "0xfc7e01abb93d0" + } + ], + "starknet_version": "0.13.2" +} \ No newline at end of file diff --git a/clients/feeder/testdata/sepolia-integration/block/37500.json b/clients/feeder/testdata/sepolia-integration/block/37500.json new file mode 100644 index 0000000000..ff059d7d03 --- /dev/null +++ b/clients/feeder/testdata/sepolia-integration/block/37500.json @@ -0,0 +1,418 @@ +{ + "block_hash": "0xf7471e29d9f546fce49b82c15eb3f2d62d27526884e7787277c9002b9cac83", + "parent_block_hash": "0x133666b2b23b7dd617bf33b6e67255aaa1c0cbf9e3141cf4cc3c57b849fd6f8", + "block_number": 37500, + "state_root": "0x702f54f4fc777b52bfe061727dd0c5fd42e233a22c5f1f0015ebc5926ef6269", + "transaction_commitment": "0x4eaf412ea378ca8faa0fd2be8741d2a6aba9257c89f7a34621a6f434fdd6968", + "event_commitment": "0x7cd0fe9642e37e269a58acf8dd9574cb8642ac7198555fe0e1f00c53bbc7fd1", + "receipt_commitment": "0x4452609f7a3f015fbc85c52d49376dd575b5e0b2c52f57989e72888ef9ddca1", + "state_diff_commitment": "0x114e85f23a3dc3febd8dccb01d701220dbf314dd30b2db2c649edcd4bc35b2b", + "state_diff_length": 12, + "status": "ACCEPTED_ON_L1", + "l1_da_mode": "BLOB", + "l1_gas_price": { + "price_in_wei": "0x3eb371c7", + "price_in_fri": "0x58a6cc20b68" + }, + "l1_data_gas_price": { + "price_in_wei": "0x186a0", + "price_in_fri": "0x15080c" + }, + "transactions": [ + { + "transaction_hash": "0x44b6906258a90541e6e4aed4fc7dac92437ddaabad90d23632b614e86e2dcab", + "version": "0x3", + "signature": [ + "0x841bb360b5193c00e3a68018861194daf5bea36df909517e2fc58c468574e2", + "0x4272438e23b5ee407dc9b7f4273f2e05cd70856dea0de2ab21da663aaa63e08" + ], + "nonce": "0xc74a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0xc3500", + "max_price_per_unit": "0x71afd498d0000" + }, + "L2_GAS": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "tip": "0x0", + "paymaster_data": [], + "sender_address": "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "calldata": [ + "0x5", + "0x4b4f08b68696ba6ca3fd389029d9bb995b4766137d3b677531bbf4daf4cdaaf", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x57bf0d97a5df93699924802cca2b94f116b8143b5461eed2a22f1678924db05", + "0x1a809bc02e2b01f90889c9f0f12fc328bfced04b5682c5ae560a83a8ea5f66d", + "0x13185b3ac5099a063cad6e464eb30ffa6a2852cb4a66de900cdd8617b7e3f9b", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x13185b3ac5099a063cad6e464eb30ffa6a2852cb4a66de900cdd8617b7e3f9b", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x3d6933bfd424d3116f778553944913a49af3b8a33f3bc830d5b1a4e1e462998", + "0x44462f71dbc43b3d14b2c6a24535e5d68e50a5bd02bdc1601a5c0944a799bb5", + "0x4b4f08b68696ba6ca3fd389029d9bb995b4766137d3b677531bbf4daf4cdaaf", + "0x241f3ff573208515225eb136d2132bb89bd593e4c844225ead202a1657cfe64", + "0x0", + "0x4b4f08b68696ba6ca3fd389029d9bb995b4766137d3b677531bbf4daf4cdaaf", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x2f78417b6726ecf2026e1af2be144746694cc95ee5a8e90f0ff48661bd6edd0", + "0x3", + "0x53fca29524498ed8f6ae7c3f89a448a945c1cf8191d3340a516f085131487c4", + "0x64eefe77c302f44b86564ab0a2d170bd67335b14286fc5a1c95db1dfd6224ea", + "0x25186844c66733b8933b0578e3d93957439f3919abe7c600c6bededa06a47f5", + "0x23ee8cb1edc358caaa2070cc26a33cf79f5cbc87ee65fefcc5b155af86a08c5" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4bb7f489b60c0bf2ca71b6450ac73c50086b83d524829081f6a77db1103a30a", + "version": "0x3", + "signature": [ + "0x7ba785f83928a040c9f5841f7cf41eac68bca516a664f507ef9519b1f18813b", + "0x2d45b9d3bcdbcbf76d9fe96c40dea02ea9f6030aacdb4db4853e3f63c6763ab" + ], + "nonce": "0xc74b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0xc3500", + "max_price_per_unit": "0x71afd498d0000" + }, + "L2_GAS": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "tip": "0x0", + "paymaster_data": [], + "sender_address": "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "calldata": [ + "0x4", + "0x13185b3ac5099a063cad6e464eb30ffa6a2852cb4a66de900cdd8617b7e3f9b", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x59f09cd5246b7e97df2628aa952b8b35ce8773bbbead9e9b296f2a7d47e47e9", + "0x3", + "0x3e0a7e8006ce6627d5045df3dafb13832af1601a01b893e3797755b58e0cba6", + "0x2632cd9a7f23c86320492ced6f9e8bae7b42df63d0c52e7cfcaf1f2fe1695e9", + "0x46faa07bfa1f4e6fccd5d55e9e076a614739b3eebf65bcd0c4aeceb24ac8fd3", + "0x9e8f7eee7186b67b5f3e8eaa6f1cc06385b40fb4cf6e8d7aea6ae3888e55f6", + "0x13185b3ac5099a063cad6e464eb30ffa6a2852cb4a66de900cdd8617b7e3f9b", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x4b4f08b68696ba6ca3fd389029d9bb995b4766137d3b677531bbf4daf4cdaaf", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x64382489d9f51a6bbd49f2790a0d5d085bf9e4819ebfe9ada2129000ad8279f", + "0x77f4adf16a16df35338fbfa45678d3428331df7240c9a2be7e3c66b832f7181", + "0x13185b3ac5099a063cad6e464eb30ffa6a2852cb4a66de900cdd8617b7e3f9b", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x49667a6a1ed14647a07a7282dbf17a06cc133f4abcd3274b27a914e6fcbf89b", + "0x3d033db8de9c3d64a3396ee9c875bbc68556cc9f2951ce58d645c014ac79b22" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6475d4835b56f3bf05fc4430d00ee7d36fc8879e71ad3d93f264623d48b1f46", + "version": "0x3", + "signature": [ + "0xcd8d6e56826b24a3920e70f4f112546554c62c9ad6254a0224a14cd4f69759", + "0x209213220664cb4d86396972c7ba170183d9f756c97dd9cdd55ccc90a9cda06" + ], + "nonce": "0xc74c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0xc3500", + "max_price_per_unit": "0x71afd498d0000" + }, + "L2_GAS": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "tip": "0x0", + "paymaster_data": [], + "sender_address": "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "calldata": [ + "0x5", + "0x13185b3ac5099a063cad6e464eb30ffa6a2852cb4a66de900cdd8617b7e3f9b", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x70bbe9682d50049c3297b4489b75cd818a935c783a8f4bf2955f58357ff0809", + "0x4b4f08b68696ba6ca3fd389029d9bb995b4766137d3b677531bbf4daf4cdaaf", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x61954db246f3ad51fdc03f45a7db0e35", + "0x18f525f1e58344fb4783dfdb14400b4f", + "0x13185b3ac5099a063cad6e464eb30ffa6a2852cb4a66de900cdd8617b7e3f9b", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x4e37e20ddf11c80fbf1bb53ca8d9bc11a7362b1c9209c749ccce9a909698a05", + "0x4b4f08b68696ba6ca3fd389029d9bb995b4766137d3b677531bbf4daf4cdaaf", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x77ceef1f69814554b166b6eb599e12e7c950b8635c78e7fdb3ca1470060e85d", + "0x5847d80389f672bf855d2c1e3a60ac472b67c7a92b00eee9e93ba7734a0e67b", + "0x4b4f08b68696ba6ca3fd389029d9bb995b4766137d3b677531bbf4daf4cdaaf", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xa45acf59021c58467b23962af751d6ca", + "0x489181d0de41fa8fb4dd612272ccadd2" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1e6bcdc4b2074abc0ea1e0fb8eec864317cc4b4c28e53abd5f776f6fbb15f60", + "version": "0x3", + "signature": [ + "0x12ed3767a5a50eda8cdc22e4532b8e0d42e445b3306657fc4e10b391f669e0", + "0xfc09dec214535dde57215ae373ad1fd7af17dacdb74744d828b017c57f340a" + ], + "nonce": "0xc74d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0xc3500", + "max_price_per_unit": "0x71afd498d0000" + }, + "L2_GAS": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "tip": "0x0", + "paymaster_data": [], + "sender_address": "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "calldata": [ + "0x4", + "0x4b4f08b68696ba6ca3fd389029d9bb995b4766137d3b677531bbf4daf4cdaaf", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x27420377e357df917f46f7da15f75eef9a54209b04f0e7c1ced77ebf946ac22", + "0x6a50b14efece100bb11677ee2d60b64ce87bb2016272b2f4680cd430411ff0f", + "0x13185b3ac5099a063cad6e464eb30ffa6a2852cb4a66de900cdd8617b7e3f9b", + "0x3604cea1cdb094a73a31144f14a3e5861613c008e1e879939ebc4827d10cd50", + "0x4", + "0x1e91a14420438f40f08486792bd70f80c10d42da783f41c7e64e6d18fcd528e", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x49da9aa978742794623aeb8962eca0d4c7bcd3e51cd5821e4588a712db15176", + "0x13185b3ac5099a063cad6e464eb30ffa6a2852cb4a66de900cdd8617b7e3f9b", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x5824decd0a03f4a6158888c7b32ab20a3c7da4a2111224736d8a9601ccdb128", + "0x5a7a736db3204fe897ebe35170d303011ba6894dc669ae2895d7d252c8b7d73", + "0x4b4f08b68696ba6ca3fd389029d9bb995b4766137d3b677531bbf4daf4cdaaf", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x7431f86a4b86525ba04a618ee9341ba2700f9140f7d3a4cef2bed168853aca", + "0x73d68a78c82678e56e8b773c93be758a2d78357e3873183df2113757249497e" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + } + ], + "timestamp": 1721499599, + "sequencer_address": "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "transaction_receipts": [ + { + "execution_status": "SUCCEEDED", + "transaction_index": 0, + "transaction_hash": "0x44b6906258a90541e6e4aed4fc7dac92437ddaabad90d23632b614e86e2dcab", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4b4f08b68696ba6ca3fd389029d9bb995b4766137d3b677531bbf4daf4cdaaf", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x2f78417b6726ecf2026e1af2be144746694cc95ee5a8e90f0ff48661bd6edd0", + "0x3", + "0x53fca29524498ed8f6ae7c3f89a448a945c1cf8191d3340a516f085131487c4", + "0x64eefe77c302f44b86564ab0a2d170bd67335b14286fc5a1c95db1dfd6224ea", + "0x25186844c66733b8933b0578e3d93957439f3919abe7c600c6bededa06a47f5" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1915b2820db5d8", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 266546, + "builtin_instance_counter": { + "poseidon_builtin": 7, + "pedersen_builtin": 40, + "range_check_builtin": 28894, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 384 + }, + "total_gas_consumed": { + "l1_gas": 1159, + "l1_data_gas": 384 + } + }, + "actual_fee": "0x1915b2820db5d8" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 1, + "transaction_hash": "0x4bb7f489b60c0bf2ca71b6450ac73c50086b83d524829081f6a77db1103a30a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x13185b3ac5099a063cad6e464eb30ffa6a2852cb4a66de900cdd8617b7e3f9b", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x59f09cd5246b7e97df2628aa952b8b35ce8773bbbead9e9b296f2a7d47e47e9", + "0x3", + "0x3e0a7e8006ce6627d5045df3dafb13832af1601a01b893e3797755b58e0cba6", + "0x2632cd9a7f23c86320492ced6f9e8bae7b42df63d0c52e7cfcaf1f2fe1695e9", + "0x46faa07bfa1f4e6fccd5d55e9e076a614739b3eebf65bcd0c4aeceb24ac8fd3" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xb6d8248f8a68", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 11630, + "builtin_instance_counter": { + "range_check_builtin": 477, + "poseidon_builtin": 7, + "pedersen_builtin": 37, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 384 + }, + "total_gas_consumed": { + "l1_gas": 33, + "l1_data_gas": 384 + } + }, + "actual_fee": "0xb6d8248f8a68" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 2, + "transaction_hash": "0x6475d4835b56f3bf05fc4430d00ee7d36fc8879e71ad3d93f264623d48b1f46", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x11a93bfb051b8", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 18903, + "builtin_instance_counter": { + "pedersen_builtin": 38, + "poseidon_builtin": 5, + "ec_op_builtin": 3, + "range_check_builtin": 1005 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256 + }, + "total_gas_consumed": { + "l1_gas": 51, + "l1_data_gas": 256 + } + }, + "actual_fee": "0x11a93bfb051b8" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 3, + "transaction_hash": "0x1e6bcdc4b2074abc0ea1e0fb8eec864317cc4b4c28e53abd5f776f6fbb15f60", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xc1ed0355a438", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 12431, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 37, + "range_check_builtin": 517, + "poseidon_builtin": 8 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 448 + }, + "total_gas_consumed": { + "l1_gas": 35, + "l1_data_gas": 448 + } + }, + "actual_fee": "0xc1ed0355a438" + } + ], + "starknet_version": "0.13.2" +} \ No newline at end of file diff --git a/clients/feeder/testdata/sepolia-integration/block/38748.json b/clients/feeder/testdata/sepolia-integration/block/38748.json new file mode 100644 index 0000000000..2b69a38fd0 --- /dev/null +++ b/clients/feeder/testdata/sepolia-integration/block/38748.json @@ -0,0 +1,14284 @@ +{ + "block_hash": "0x40b9de4d20b6537151895df0fa2520be3639a2a2a65915b5d27855efd1d78fe", + "parent_block_hash": "0x710baa1c4af671a3016fc23f881161b1241cf7664cc3e8de19d4b3395699ca4", + "block_number": 38748, + "state_root": "0x4628191c1b4000fdd0f64686a38b4701e42dafaa3ea730a6d57c55f69c3b618", + "transaction_commitment": "0x6271d5efad2c3b54b78f97ef2c53810b924b28c0b25109e943970d24aad613f", + "event_commitment": "0x5d1b7c74d6fadbcd14281d28916a34a59fc0e2f14b4b65898b4793e31567ed4", + "receipt_commitment": "0x1a6ecd3a1eb1b3d74d3c2a375c8c77d1fb5b860d0bdb13cda633c1541f090f5", + "state_diff_commitment": "0x2bb5df3dccd80b8eb8ad3f759b0ba045d467a79f032605d35380c87f8e730be", + "state_diff_length": 500, + "status": "ACCEPTED_ON_L1", + "l1_da_mode": "BLOB", + "l1_gas_price": { + "price_in_wei": "0x6da1f4747", + "price_in_fri": "0xa1889540f45b" + }, + "l1_data_gas_price": { + "price_in_wei": "0x186a0", + "price_in_fri": "0x186a0" + }, + "transactions": [ + { + "transaction_hash": "0x656a5948f817e538a4ea7ab86dadc1d351db38cb84fc34f43de45959f3d99e8", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x657d900335916a90a7db4eb281c8a76e407251ddb016fbf52b5482749d6a5bd", + "0xbc34650982498581456ffe671a44778313e5d2cb7df704292b32d26bbe7d9f" + ], + "nonce": "0x37", + "sender_address": "0x3732d673d40f828b64bfc85236012ce2c280d3c936aacfb8104f7d4c8c74bb0", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x84bde295632e0884a4da2ac3e59d450a5d1c50628480316202aa9b9258464b", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x77bf77fdacf7c42c92f88ccdc0e47faabe4fd544f8418880c9aedc9c122cdc8", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x6caa463e5c025aee7d50f8a0b289a94a46786899c6504241b302df840d16d60", + "0x526d302dab114955afdd0d66eb5bce39082f0d584400395ba99bf7098cb0b3e" + ], + "nonce": "0x20", + "sender_address": "0x4a724a4229813f34e274837684c652260f7621f76e9457942f05cb59fe4469d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x3fadcecafa9e47255cb635659c8998fc57e0ac8a780572a0b9936b4f1947a46", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3b5daa647e491e8fdd09e38901cbf8af8b3f6c4b9bed6c9519b015a8f7e3861", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x654bde5a25c800da95f18748cd48d901ecb244e6dbef156e5303f77363e37d4", + "0x4dfabaa6078f94d037853a7fbafc3bd1abb4095bc2bdb7ed6678acde84c534a" + ], + "nonce": "0x31", + "sender_address": "0x594a6c429ca64604465758db99ef286d5c00d847c8072fec3ff5f0e6b65cf64", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x56d6364ef2185be391153e866bd87a6a98cda9987f33e37df583c4d2bb3ec00", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x210d258284362c34cb0dd115cd12d5481ee07f424ca2179616e01314ec8520d", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x24811534f36ebd93f10a41f4d2388300496d47b216e8c57aadb63e57dbf4ce6", + "0x159ff011e40bd1792f46ccc474bab31780763069d9051075b44a0fa6d717d5f" + ], + "nonce": "0x32", + "sender_address": "0x1e6da06bc1d877fb69dd4110f38f0e5a206174c57305df51653141381aaaf43", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x27cb50f80270672f1fd0351a7abc49289ad9b1f8b34f21c0856f5016d1fdca", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x24f0b8d99ff58e931658c8c9db4db308375bc2ab028f39f3183326da621062b", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x7a77134f1a10dc9b4bd3c2586142aff951e9a71504ed8317d7d60425ea2741e", + "0x6808a05dc7e9119e1c6702ab572f438477ace3021e2248d7943633fb8c9d9b0" + ], + "nonce": "0x16", + "sender_address": "0xe04c9e37787de848379c7898612cde59fbf95ec633deeea3e34e81f1d7df56", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x1aa17d35edc3ee0c5b365595db91c1f48b9ad8dfb6a6b2aaa357d2bb01b4dbf", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x74c851a56435473eeee26bd0f33cfba5bcc2d86676847fe093ee10955b3e41c", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x15ec5a6b55b7cf7a2d3f05c1b44136951f60ebd3ef356b9cc8f01e69f1ced96", + "0x7215ff6f4455e2c149174e9581e9477c62c2f8ca90f1cfed4d8c3c570671e19" + ], + "nonce": "0x31", + "sender_address": "0x273d24a6e32e7dc5531d7e1d17df2b2f91b7c50da2c9142a78c02de878cdd5f", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x73a6c571a923b0de62c56e0ff8d91fa03d1940f12a3044923db283fe7d52bb", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x683e8de59fbdda5bf2655a5b56ca713dd4708b653e3ea2d0eed5fec5c782f59", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x21a0f5d8e1da1c39e2f7230161c0eb9b287a362127ecf72c932e0d6cf3a9764", + "0x490276ea7325261b1fba4b2562cc12fa6abe5ea55470c8971e287208d757572" + ], + "nonce": "0x3e", + "sender_address": "0x275c01d887730e6551ff416d8ef128d2a79afcbc244c776c819aefbea1818bb", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x785cea5ab7fc2a8b2ec4de10f787da9afc826be52dba9883becf9351d59d6ff", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3ef0b3561556607b1fd19468dfb5bbd66f493dc648d5a14dbda6943bec9481", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x69dc98b51c43a00864b8abeeb4aa9e0a3023f3b89b0fa59f60bd980f8c5a2cb", + "0x1b59d32cca82af0816915c2f99518a4debc18ecee7d41e09274237cb6414725" + ], + "nonce": "0x13", + "sender_address": "0x755a7995c1b920ef28e18c4978d73a1c935ce206722c4a8398a1735548abe2d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x29595745aa0c07dcaedb213ff8adda5a32a10184a3f8b67fa81372be9f84176", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3821214c3836ba0f4e58181ad0d0212acb5c448265f3f376f18c460531e2256", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x524d7fdb77b6a1ff37a83c1e5743b5f65992ed126a9cbbb9663c6d1db957967", + "0x7c37210ad72f743bfff2f1e558d6d6b9e327bae7dd13631946d9c0eb2879d25" + ], + "nonce": "0x2e", + "sender_address": "0x9529b7734deb881652cb0903f26875b01134cb0b091822f85edc697164e7d1", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x56c0469f6e05e124f8072a8e40dc278fc4788bc5ab2d9f083b2abae727d51f3", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xa8d6fa6804a4738c82f9ecb50b61d6ed0c6f0b5d095aa244a83390ebaad6e", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x796bbddccf599fb0bcdedd9af1e241dbf9233019ae7c5f1b79381ac41b665a", + "0x547c0a0a7ebfd8d9e09b5c0b2f309ce32923d4b208da92889073d11e2bd14c" + ], + "nonce": "0x21", + "sender_address": "0x350e280198d66aaecfeeb902b02089e026bc792f5ddfb88b04ebc92218f8fcb", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x54c2a598d057bcd861c7d9faaa527f829b5b8055e83dd0d733e5c0a5bcf392b", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2ed387a8556608d107de35e3314fbafe0bf2871af0b5d2034d92e56c899eaa4", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x70873881cb6567b50193aa73206e951fb2404faaee067c0d36bf3720e6437da", + "0x108a0e1c16ec51ce52b776fc1d98a467c52b101199ab32405c87378ecac6836" + ], + "nonce": "0x5f", + "sender_address": "0x2655cd6a02dcc25554bdddc055f304c84bb130828e1b162c82958bbc92dfee", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x1de3a6279c19fc65001bd37d37156e33b82a892a1620d14a82b8101b5fd2592", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6ad74b9ea5705c5b36c899b004acdde0680b383efcd0f4a6e6323aa254dfba5", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x59103443bcb42bbe0d7016d0b0f85a98e202ac3ea0dab1eaad6b163b0e6d4e2", + "0x59697218dc2719176f2c9cda0872cf16af1dc0419a7651ddd64d017e791838" + ], + "nonce": "0x32", + "sender_address": "0x11f8473d749770009ec91b9e6f723403f9be76e2c93c62919d14989aa9f343d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0xfa08ecebee06e3f4ab3024d55b2e1a5646a2e8f14054c21a22929c08444bf3", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x584739a828472d302c76113ca2380f66fad7e8db93a5b33bab83b26f57f6192", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x6b00b79d5d25b7de73a1168bf328edd2fd6001142f9790bcf26f570022c8331", + "0x480836a81e47b2f4332eee2bdbdb6138c840f53974586f4bda839b80143e019" + ], + "nonce": "0x7d", + "sender_address": "0x13372661462e9437e3be7442c0bb7f0a28642510ec3879927eebfdaa11c6b64", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x478a36fdc297561841694773015a2b756503f499b50d72415e6f92b731cb4e", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2d2ff22e0a1f3d6e43acb5da75ab4a7c9bc6219350953a0c29025271ac64bfe", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0xb85e34a831d216cdabab4a5c3cc212a5ee2bd36eb46b6c33e4982d0dccd915", + "0x191ed3326f108777e9dfb895054561e5a905849fc67eed139fd1ba620c77e5d" + ], + "nonce": "0x58", + "sender_address": "0x6133eb7e32610962c067accae847789b414e52ef69407bcda0dbc4e0562235e", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0xebcee6a064eb96a9c7046d247d108b5d724749ef666df3a110fd6de085cdbf", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x79f9d3d4aee74c24d0bd7c6f7ee78bfe5a3553fd6d9b3622c744bfcc0eef189", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x981bc5cef86ad67c04ceca17641b765a03da5e427c17b1a2116d33a28c99c1", + "0x265158bfd8680f4b54c05d5f570df0843e027807278378006c6acd8b22e409c" + ], + "nonce": "0x39", + "sender_address": "0x77c28f25bc25bd5207ab10317a8ad029b560f22d77b3492cc910236a2ce1278", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x1aaf85715f7f99649113cc8ae476ef19d6aea4626efd7690aba563582eaf876", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x14a53a8cebb83a7bde0734b5ca9687b1345e9933286eb0c6835d0bc6d937d6f", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x4e3c7ac72d6f8fcecc038b17354a761f5e3319f7b185d66569f51abf44b9f2a", + "0xf39c6585b60cd0d5195d7a8cd59ae84517ae23f7e7cf0429cb68859614d14d" + ], + "nonce": "0x11", + "sender_address": "0x87b5c2536abec4170cd59c7ad72798d6dd22bf2a77cb5d36cb68876d59d258", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x5fdef3d45e4cb5d8c05adf2c05d24d13ceaed27254cd4571beb9f8652cf6a69", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x140e311a333d622148eb3ab8aaf0facd38b74b5cffd5b48ce795fbda701009f", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x22014862a64f2ca192df99311a95d21905feda98ff91fd478419252ae145b59", + "0x474ecb407e6e0751455909415dea44ecd910caae0ceb3bc31ad5ef8441e0b8a" + ], + "nonce": "0x3f", + "sender_address": "0x3341e828e15b839729b07957cabc597cb6556e61649a0f3bf98578f4b542c9e", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x78acb5290012e08fbf2aca15c32d6d3a70d86b02a77568df648068695555a43", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2c51827298b7e36686f02c0bb9b43cfbe878d5a6332ffa430d63cbbe6993632", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x7d36ae5db2a7fae94dd83b0253727e200a40287519f15544295ca610147c8c4", + "0x66ca9766528fe59d828c033a0890b2d4fd9de8c1eb2476dfeae0f3310c13048" + ], + "nonce": "0x4d", + "sender_address": "0x2709f3ff0b285074ffbebef3078d2ccd7d26d0fd7bcd4422d8ceb5e9a6a40ff", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x660586392cd851387fa2a005d5e2f8045e4a56d423739c91b5586a3e5e3a271", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x13ee0bc0399bec6c2a8970ef0da8e655780a28be5909799db90057686c94c06", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x3f898ae50552c9435f9b9121af2738304f7f5e950f514e9ecf6731036cd2224", + "0x200967003b91404f533b9ab90e122155cf8a57e6abe63aa7c74d02978ecb5b2" + ], + "nonce": "0x1d", + "sender_address": "0x401930eb5465af9c93f63defae98fa9ededf374a901f24f1210a150923d10f7", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x4821573fb5df2b7a3ecb05bef19f7deff03c68c7f1eedcb2245ea5c04fe0dca", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x11d22470bc9f43107645caf334e36f403f0b352587ab9515742043b60bd8f41", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1b8a98a1241137491818bbc7a340f2ae9e4ebff26f4a6b57583b058d605e356", + "0x77801989490a00c830976cfe8e8e9a22b71930b8361b45622fb2807934be448" + ], + "nonce": "0x64", + "sender_address": "0x59c0424db8476a9d158e52848aea567f806afcb99141b8ef0a543758db2ce60", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x395e2721f3625ef250ef44e1d2f746b331891f2431b3df17d65e0037459a5a3", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2b5ed98f483bfbbf412eb2ef1b9075a16381f39a8296a951dd55085d6394e8a", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x3269d7fc94a01888aa6e7716074f07f8eb52c3371f34bb0c914e2ac4efa5b8a", + "0x1a8970dde3cff2962b6f522c11930f02159dff6195f3be712b40308bd2b712" + ], + "nonce": "0x46", + "sender_address": "0xcc4c8e4096a5dc1b161bde1c0207c34f82f4c0195cd428253f1baed6308d5a", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x33a0847247d19ba053893b0b31ffe11c0895e97806476fa383f70fe49f2585d", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2dc6f4e98d1aa63ceb803559f287084a84db3665306dd2bc52a1237934a415e", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x342df7c7040708652ae47f8b9205d9a292d1e7bf22aa4364378c634b755655d", + "0x79f251f59c6906f825e10ab7b85d8fa978c072c9ca3d2c622e9b95e413c1939" + ], + "nonce": "0x30", + "sender_address": "0x9a747a346243aff99283048beabf09c2ef25bfbbc8a177945f3a0eab0d3882", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x21aeb9df0d8dce0b45960d1644a4d81a83f9a0f8fce69a812f4af05893f411", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x378d05a544d7df1fdbd3745204223b47aec76bd3f14f98147c572c206e461d5", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x12c82c96f40158df756363f3a557d2dc7cc4688aa31486d3de88a6cbc3ca934", + "0x572f8755409e2f945ca1c7c9a600227b881c86d320dc12cffb55afade3d7a1a" + ], + "nonce": "0x28", + "sender_address": "0x4c37d767a43169fce247342e46438d0bea2b0d7f4efcd4a4686615e20a7c417", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x3d958b59764c3d117f7513a53bf399d80f1d454b17db76317bb046b86cacb7f", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2087bac692be145742133fc040cb270807006f0f95272eab6d847d47ee8665b", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x2692806d550b7d8b2bd70c907b0e6417ea137e6909ebe5f1ea67bc54a91956b", + "0x33158603f492cf5b9d355548544bcbc7fa0af75aef902993c4e0bee20169e18" + ], + "nonce": "0x2a", + "sender_address": "0x7b3f54f0755766215caa99b8ce31250020050ac00bdbdc25bbeb1cf5035388c", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x4c05cda4a1d91e09a4ed80dffb64c2c2bb74b62b87e2546185a30d2be76f3db", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x10119548275e625a700f0cbff8323d03e4cec856dc7b1377bc91fcf42eaddb6", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x12f3812ea0fbc8f46130e2e67293f02a4ae1d9513c497ab2bc52302fbbe88ea", + "0x742cd405f150ba142d8fd6b6271676d2133eb95ec17f5865fef8f7b76ef4841" + ], + "nonce": "0x3d", + "sender_address": "0x45588fdb74513b42789edc109403dc2c2ac13e1a7bbe19a99d9ec45297f7450", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x391bc0289a116b822c3c5439091eb16114ed7f83196a06a97f14e0a3c6faa9a", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2f4750c62fdd789fb68179b9197946f0faf3501654619ec73b63451323cd6f1", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x48767c88617f086cb201556443ec93162a1018f787d67248afe8baae9e8e366", + "0x75d32e3ba10a5d92f4231bc44d33d45c8ad1b9af7b0cf87b2cf258aca1e3067" + ], + "nonce": "0x45", + "sender_address": "0x1bf2463473be14da2f0ba583dfe08a8465ba99771450d67599de126fb58da9d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x7308fe8a4ff72e79142e2c32073bd55e493c4d10864879e2cb7c5a4257224c9", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3effc0e555c49d5e11abef41d6d1182fa5aee5202cc5d89733dce5859330057", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1b7fb90f3d883cc2eaf752b92d6c30b05dc87b4647a0736298c7160e444230c", + "0x4a357380c5ba246aebe4a4c95e308b2d091b6a23bb2ec865e317f108d1c2626" + ], + "nonce": "0x39", + "sender_address": "0x11e0a33ad5c43d5bd2f7f0ccc2b66f591c6c908910c1f2f377c6f586a458eb0", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x37ddc556900ab31026fc6882947787335152a0efe67633af40a7e064fc204ce", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x33af48b568e7471388d64ce6261f698c4452772dc0950703cd8970326454663", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x5a0b04cdce53a6bb7074c0180527cbea6dfc773fe5ce5c2b5845d5eba592019", + "0x5380bbed4ffbd0dea2635fb965bbe10ec2c674e55df8634875a5434a67313cb" + ], + "nonce": "0x35", + "sender_address": "0x768a45776c6e33860c802ea8b6f69170b275d576ff5ea0b6ed54c7b0da443e9", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x6eca19ab5a57bffb4a7aa89d27a4ff3a6314c8b4313565de209270ecad579dd", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x58f3d4f56d5d73445f9539f87c57604ba1a7558dd89395ad67246e5dbe54ed9", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1d29d4c990193f8af358ec9e10e1c31faf62bbccc70a22f52840087bf628ace", + "0x176be6bd8ffdb2bf442c4b4728cfd46b3143059d8636f38da0308ffc4d40c6c" + ], + "nonce": "0x68", + "sender_address": "0x7b4ca69e72ffdbb43edb9266a3ce13b385e714e06f6aee2d7f2215b405f6a9a", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x452d5bce0e02200bcb5e8b1d306ea71dcf9d2c686c45eb037c69961757c606a", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5efa3153e3cdafc7575fd30d6a32c777a5bdcdf5bc1af3b8e54f46bbb80085e", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x11b4b849fb7b7e7af4c198156236147f8318b2bb508675c8bc74192c884a754", + "0x6f04c75fc71750bf40675d0f29b19b819783c63a5b0bfc28c95f2a289afa746" + ], + "nonce": "0x45", + "sender_address": "0x2ec59285aa2e4cbfefaddc331f3d876f207aed3b028f5b62957b0a464f92918", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x4b44dcf7f50ff4eab2271a0826997ce11512d4a9cdd5de9e2cc60cb970c50fd", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x244e0157f6ba489d5470cda9d2bfe76f508267cc6784f059dcda8a997e467b2", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x5aa171da9f2513df68625db687e316a75286d9f58a0dc012f58834ccb87abbe", + "0x1f55eeb1323319c84948aed845e11fc62cbf20bb30ad019a827b2a387bc3c0b" + ], + "nonce": "0x23", + "sender_address": "0x451d8a5c0ea89978d07a24ac6c594e1f0b57ca0a141ba357d8e169fd73151a3", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x2dee60c143474cb2205f17ab17b0f8fea5f6a01c86cf8e44b419a456f8c7e1", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x34a973c5db6d82d636614d3ee29548769516670ff3b8497b0dceaad68ca48d8", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1ac144c1c83d6e118510140924bac0f232a66de40a0c2631666bed98b8ff7b1", + "0x6d73527ad53b4190563adb1e8967ccc6b5fc7dbded3faaacdb64eca3228d4fc" + ], + "nonce": "0x49", + "sender_address": "0x253b4898f783590539e8ff61faee36bbe6f4022af6f5742fd80ed8a609d8cea", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x7a1e29a8753805b7e934bbf1cd9bcb597d2c7b44d2697fd8ac948fd70330263", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7e0cab05b44a35458c1bc9fd8d968c8c56d131ba02e6a6243993f445ae7a392", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0xfc3f968fb260bfbd7074761e5999effafce3c57c45d033a183d8d0b984cc0", + "0x5bc48b3674e5d01c41c2bfeb435665aea65e02c428347b53bad0910d2de8fff" + ], + "nonce": "0x42", + "sender_address": "0x689549c1747f38f450a34084202987ae19adc553d7ce10c3d5136ed8f768334", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x5f1dfed748b556201babf0356c65525210ec3d0ad2e30acf3ad708bd63f136c", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x19e04c41b99e60d3a5a95cfbc0127bdf3d63f9547ea862df7303e24cc9f692f", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x3b53a1bd56eee1811946f77c07e48904fb66282b05a776c192a39bdadf8837c", + "0x17d7140a5eebd04a5b3bb759dda236a185d3d94cfa206e01ef57b68b68faebe" + ], + "nonce": "0x52", + "sender_address": "0x5aa0c4b6d10882180ed3bf70dc5bb99fad462fb926c251329f4c0f997cd5ae9", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x37cadeefb58ef26828cb8e74d5a1115388e279d00f5812f7c86ed76372778f0", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x38515fa92e8ea300fd8d9093f81d2164f73006cc51e105d7538ef303df32d3a", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x3aa5215cb7ac715a049276eebc16707e54d70de26717374a9cbd72b70816262", + "0x12258755c8097179732974166534428a1c6dd32fa5e31e674aad49b1645f4d" + ], + "nonce": "0x3a", + "sender_address": "0x2390a4d84cf00928adf4058ff1f15c8fe615ccaa3ccc1cd9b571d8be7ae806a", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x7012059a4cd41f6bf89e7ec7a82ca1d9cd083da0c282138b0b9e8239c386978", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x44c1cc2a46a949e72c37d323fa5627bbbf0e7f8bbe6f73296773add0bfda3f2", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0xbbf42a380c2254ef81692ababfe55e87efd0c9f77bf2f0029aa543f6811e6f", + "0x18256ee6395707f1947f5db68511afebcfbf65bbce0f48550677747f2a5206e" + ], + "nonce": "0x49", + "sender_address": "0x2e19f222ead0bc05ad25d190bf89a63ecabf82f53f7d6bf383d05553acaf123", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x365bd268b91dd5dff4d54b7037d0b4b411e3fe15953f83b8a61102ca19b8509", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x22af4343899d28a47c93d8c140b2570d0a910596594c51ef6e8dc0548c8f13b", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x7940a9d9a1231d748f7e7ffa39b59066a442d41f300b1fe6b9aff2c2450d7c1", + "0x2cf2eac4cce97379da63b6300f1e5ef40a17339867349ca5f5770dca10d78a8" + ], + "nonce": "0x38", + "sender_address": "0x63e18fe7f3cb5a5194204ba9107a7f425c503c6adef0b686127b14bdeb5d302", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x714bed568aa17143177d8c83afb9446a685aa64a5a506e732ce592adbb770e9", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1e3af76a9fb580153dce7f03a0d2e74418c47e301c875fc7862c8201d1ba8bf", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0xbbaf243db49b943b94178e333f48045c23964599622a7799bba27730abe6ee", + "0xa595008e3917daae015d8f0757e71bd5c308c3626989005c107093783930eb" + ], + "nonce": "0x41", + "sender_address": "0x6804962ed2a44ddd07ad2931838b13ebc114b3e7f91b220fee99a5aca96e83b", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x74add3c8e5cd6da0b2255c94c86de236951e29660a46815afb91611c872413d", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x43fc4f993027fe63d1bd05764c997658e07106bed4e01b90eb715491f5481ae", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x70d1ef2019e1031e214b84b9761037081162a9d9215dba18f9d931ec4d6b338", + "0x260f1afc5713c1c55c78bc5a58179cd8e5ea99381449c7a1c90ca0935b3b3ae" + ], + "nonce": "0x31", + "sender_address": "0x2333f8254e3d2a9f527f4ed292f0f84b35af2dac6c0e664691ed48c7251ecd", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x6d6838f0ffc2d82f7e61221507a767634e9fbf282dc1016133a3b9f8e88943f", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7775ba1c7d8779ea4e3d5fffc509f37c983af9eef79f1d392603a25d5b1eb59", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x37d655d4e2267d76f54838bc94a902bb05f8cbdcee1edfd34a0fc94f7004ba3", + "0xfc7029668824194bd2de31423fc172828b2c5c6e5310a000a490fdd2a21f22" + ], + "nonce": "0x51", + "sender_address": "0x200c519983a0104346afba82a2dc4eccd4a4373aa70a13316626e932cb6e58d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x6b1c39ba34d99b5b73eeb4506bff45a05410fe07f14e461967ea8d930e93c8a", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6ec2c34b64429db15b38e39ee43df93a80a0ef87a5393833cf65cc8a461ac1d", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x66b2796e1db4ea4d2633261561b21ffc0092bcef6fea08dcd8c2c3fb9c1b7eb", + "0x72dfbde6ce38ad2159449015c00d0a2480809ef3a5ee4d9d1f612ec2db28b6f" + ], + "nonce": "0x44", + "sender_address": "0x48cd92c018be0434daffcbcbcd6722aceda59a54ad1efe411fec777f41f8caf", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x582f41ed435a925057c9a1580823da6a37565e33ed96136cf70278bb29f38bc", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x78cd795423a239f87e569a05f713ab523ceba55bcc100b428aa145aa4d44d3a", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x73933cdd35e1a9632098dc6cf32b05556b433f1aacf74650116bad1aa08d76c", + "0x5f87c0ffc89d08ae9dbd2f3c1d50e1ad216170685f21bf431371b6593d59ec9" + ], + "nonce": "0x62", + "sender_address": "0x3acd1c7261d5bda1736a89318f1b662d1ff804ba44a0c510cd2832156bc4a6f", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x376f58b6945bf8c6f6964e7b514a958da8b3699bd39b3f3ae0484f349f95ce0", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2e6f7749036b34360b234e974d63a51edca243f61d2493d1756aa12ede6dcbe", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x3693e74ed5369b508434e506d9a4f9e29c83ff4f16957703475389f1530d030", + "0x1ad1f4a0c85378b4b7d445a44a3e2b7a91aee8c7fb225d7d83b815076353af3" + ], + "nonce": "0x4c", + "sender_address": "0x2cbd65c97f07d4b0830802c819049523e1b8d30cc0bf8d4246df94854faa766", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x7e7661daecb8a0fca7dbd2ca85fb063680c311d0341940fc611cc5e4a6e60c7", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x95de0efc6d55c4c762100029aa94cb46dbdb0ee3307eee7bb83a5127fb5554", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x186fe97a0460660bf95a2ad9189483eb81feb5cc45e078dc9904a6fdcaaf43e", + "0x228e781648147ef30fb3c9d31661dc76d1296549dee9c8ab773fee0c3b7cd7d" + ], + "nonce": "0x48", + "sender_address": "0x5b574462c662b90b11ce7c5750ac6b71d21d5b84c62a6085220557f3e54c14", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x5636db2bce3ab1d1df307dee084d35d20eaf66970b2fb83cc12f7247ab1212e", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6c2178115ae217acb8ea704cb08258c873ab13abc296ed16f2979ce25287417", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x2257aa2204257ae889b38be6b628fb2c375c4adabdb4f69c6e9b48f7804017d", + "0x2c4999699d6354896c8cc57c0a7e0dccd9c50bf81915b35cfbf60800f77d562" + ], + "nonce": "0x52", + "sender_address": "0xe2fce66497ffbc0b04f6d1c27eec2f8da3c4b7ac78a24cab67595644173eed", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x7ec48ff00c0e2c1fbacb1c8b6dfe3e0f43a9b196134d0b2132ca973bb1f1bf7", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x60dabf1d8850e62b5c6efc27e0c98fbc3d808fe21251bf5d19c55ff5d848754", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x449e6c256f96d2f1615e7d8a88a424906567d68a9ea7dbff513e159b2d57d6c", + "0x69e1e96abe440a54cd2f118feb7f834fde05da57a8d585dfde4ea45a2a26d14" + ], + "nonce": "0x66", + "sender_address": "0x38f5a14f93aa2041cbab6a0a2eb909f268a10be56addc697592c87c68eed875", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x2c10d6b259d6fed242b6136fc51c549f0937a44a493367fc86ccc529b462959", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x79dc84c42dac21d740ec7e54cad6d88ec6e26233eb932e1a511f7a1e21c53b7", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x34152323eb40532d263a290dc52536334c71ccb4050319e320f5744cfa14d12", + "0x572aecb2663f6a34d6c478a1e946445a3963cfdf64b3ca7e4427373ba29cd51" + ], + "nonce": "0x4e", + "sender_address": "0xc24b71d1cdb836ea2a8a5d364fb9131c44fd4e15d1129f2233e3dbcdfe855c", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x1d3462f4184e648b3848f1ebfaf75f4b23742924a725d56bf1cfc9492d0ace9", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4082594ebf3656e1c4d1145e8ec5ba563e5d63a7868aecdec6a23800a2e259b", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x695a20facfe5aa1f2c297b3fb25beccacd8b2b44762e9becee7825ee6a2bb47", + "0x504e8404b097bc7beac715f9dac2b72a79f24d41792646e706df8e6ca6e8d99" + ], + "nonce": "0x46", + "sender_address": "0x6fe8b5ce08982b6ee4321997594e23a9637fe0d45bfd5b5d718695f08b38a72", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x7da1dbb3f1942891cc5a5f737ed2d6655b9f15582a05944a6d163dbec3c2aab", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xa5f543803af4433ac765c778c1a93d288f3dc468b0babc789517fe9a2002ed", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x152c5f05df666c0af1181014005454640891c12a02d37bda283644f5bae7e44", + "0x1cb83b3a8537e4a68384b7624460bfb5a5fa5cbb51501ec41a85700991a41ce" + ], + "nonce": "0x40", + "sender_address": "0x13d16147f8cd04b852cfdab7107c6cb96de2bfa2a020b22694e8067c87eaacf", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x7809d1fdaf131c0eb339186cdf617d946c86668e50924d13159346e12381e07", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x143fb91a0731cba83f1482c1030b525ba4e2146c8fa97ecf2ad5b330c222a50", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x544b59b95f3c79da05e40428faa6fccd00c621e34c899398e20b06c177b6b98", + "0x2a63dc36d3dec59163c060efd90d1e921e81c50c83796ed7a0ecb3a55ed4e86" + ], + "nonce": "0x42", + "sender_address": "0x1b7e553d9d69a2a1fcf9ae3a72bd41bac0ae603acc77c783ae58bf1ba08b80c", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x5c18c54ef498819a83ea6596096922c38c1aa9319bb3b03415252db3128f8f8", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x12cf58ab83665591f01058566c199fbb0ad79be88165b347e3e5dd83fc5d791", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x600501ea763291dfde684ac1095695a9555639955859cf418beb6bf60acc933", + "0x6e1052d9177f22b259bc99398bccba665584813522c57595d16945c4f40dc3d" + ], + "nonce": "0x62", + "sender_address": "0x58643681bd6dbef6bcf4828660ddeec18f3d669b12ec626f14092306fe80e99", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x13241a67c8f9d5a88357d3833595cf1e77d517c5b25daed279a81be8f74c8b5", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x65f58aa22346b4d4529f3dfc29aac5de2002da9dc86124630edf5716fa3a7bb", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x3612a4ea88cea34a296fc6447e0e603c15bfc282c6672193e4b63d083e6bae6", + "0x5db693da1a5fd61375a8608c787616803e330efe298b082bfe9ed3d3797accc" + ], + "nonce": "0x74", + "sender_address": "0x247d1a8c411f2a456bc8a538fcf23efbd493c71b73f7421a8a4657147a59609", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x76245470ac3d77e859be12b55e3b16dc48dfe3e0cc85640d75e3e4894ec8182", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x21ed75413223b673aad90b18352e7e2287c4426f0c607818dfacc211ea242e", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x5d849ca35cae01e6eccd5314ff8371cd96690420896c43322f15fd36d3edafe", + "0x52e5e1f255cc12860c73997a313db1164eda6619e3125b14a6373c29e5fa2b1" + ], + "nonce": "0x52", + "sender_address": "0x1d751f8d431c913531632cdaee1f2598821304cdb401170a91c76f0d5919a9e", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x113616d16bee3d91ed9efe44c83cb47d9d9e4b5a0f2c8b5626a4464c645ea9e", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x20e5e2e9b41628cbf962f505b4333b37f4f78a87dcaead10c83b770404577ab", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x6ba05a47db9b68ab23560894989385ad7e2ca8f27cab22d87d0705f8e1be82e", + "0x57939399987c95b3bc9f8e71484579b9b566f4071599f16fd28c02f7c3ff3d" + ], + "nonce": "0x43", + "sender_address": "0x49872eb6a8d0b7336f6577bbefdd1667fc0ed6f6df6509a6b52d62048a38fc6", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x58b40fae2a6667866875dc98dfd9464fe80c588572dbeca17a0559cd0bfd84", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xdea235030568597ee39a993d504ee2ae9c6a9da4a3fc2b794212d261066134", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x4063794fe3cc202dc47be8c73e1258eaa5ea57211836ef56e56168696d3976", + "0x1ea2b21ea55fd5aa01fddba0ac00c1c50e35e788393192ec2f4abf10bf39944" + ], + "nonce": "0x7a", + "sender_address": "0x78a19562b686d6cca5841bb192c83795cd8a1d9ffde0c0b4a53cb004575818b", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x74bdc4dc032e25adc01d136e1ce09aa07b7141e06c4205bcb4895bca4555222", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x51b0712881b4972ad7118d3bbbf7a91cf9d35a802171e83f5a13a3459b9434f", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1fb9175073864095b791a68f29a44ec8727b3b96ea3bb44b442291e11360c7f", + "0xda84007c2757acf210a79546430ca310cd3fbc95fa797feae7ea3983bc046c" + ], + "nonce": "0x58", + "sender_address": "0x40a560ccc59fff23ec01af1087d97bab10001e48e0fb493bec9c4c7e6831cbd", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x646ac6558218dc6e64f03be3d4c4e93f2343c859f80a1a86af088452def27e", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3f4b90fa23e982dca8352c6894247d0b8b83286cd8bcd6123b07768446e5d85", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x6ac115b73a23a007cca3f36e36fecc0f7c4e02092ce95e05355bb260f0bae8e", + "0x273466da9c626016c3c1d9826dbbcc3afb2129b17a5be2588b40d49ac49fb30" + ], + "nonce": "0x6d", + "sender_address": "0x309e46e00ee3cfb4d1bd1f42267126cfc9b7c501f439a9c60093330c7e0cfa9", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x9ff0f306bb54ef1e56f29c4170b8a5b3b4f0472ff0f5b95cc929cbeba0025d", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1e543ed4ece9fb852bf7f1ce95aeed73348db7d0dac21b7beb95e7e05dc39c0", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x2d9e76287bad867bc0c542e7ce535fc3d27c882f080b6c32e4a0e18536ecff", + "0x35148ed776d225038ec8e3ca4b9d3fcdf06226f8dfca817886d00679b8572c" + ], + "nonce": "0x48", + "sender_address": "0x5826e2098829177a40c6b697dedb6b2c24d0378abb5a0dd870a19aef97cb78c", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x663795ae8908c52238228322554f5b9faf14b1a5bb28a7a2bd09d4d416afa03", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x10331f033fbbf1f03f5ec1bf58a2a659d852ce69bcdf9d1feaa6c5815695e18", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x34cc434e7934b970738f797e8e8d4a862e475f2114824aaf42b545bd5351707", + "0x6e6c62a70d9d9b9ecf69ea5f1bf5da58884e2d9038d7deb466d6cc75b5e0a44" + ], + "nonce": "0x32", + "sender_address": "0x273d24a6e32e7dc5531d7e1d17df2b2f91b7c50da2c9142a78c02de878cdd5f", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x7b00a28fb03b564bc74669f017620eea809d6bba3dfa58ca0f67142aa34ea56", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x288d178762aa361a1c08b55ae567bf4c18a55c4e3595624d087d938c1968e46", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x5eb6697eeda9eaebb1ff24779fbea52093671105fc7144feb4f434f6bb1bc5d", + "0x2d6849a6e92df3253f1048ad8cadda5d734af99737b42263acab30abb250750" + ], + "nonce": "0x2f", + "sender_address": "0x9529b7734deb881652cb0903f26875b01134cb0b091822f85edc697164e7d1", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x28d2582d04f3f466057b8d051c42f6702e1dc8f7cd6460e8b2b01a96ac05bdc", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6b080b77b69390d6b4f4dd16d8a90b75dccd5373b6cd501fc6043100bdc7573", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1f1fddf1cf116b0ca6d9415185868fd1a6c26ed0f9a21b8447f6a1d9e5d3012", + "0xc980661e7b39e55cc76dbed3e69974abf3d34ca7e5994f938f3c4efde3bd6d" + ], + "nonce": "0x22", + "sender_address": "0x350e280198d66aaecfeeb902b02089e026bc792f5ddfb88b04ebc92218f8fcb", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x1a8a56658ea7529d7d8bbe74bb4d1ec0d70acc6f87a36252aa6e2921f7d901b", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2f068f077a841ffef9a5cfc42f31b7c6683cbeb683048c789aac35d3fc1cdcb", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x61a6c24b1cd94eef27b6efac7c137790b1d8bc43c92037b1e013618cbc2dd64", + "0x34cccc9aa7be339ca96d30aa4e9355c9c136f984318faccecd2dd5f711e997c" + ], + "nonce": "0x12", + "sender_address": "0x87b5c2536abec4170cd59c7ad72798d6dd22bf2a77cb5d36cb68876d59d258", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x3df3f563b04bb3c63c1848e73367135e3d4a9f2ed579aca6e40ffa970fb22ab", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6ccbfae2657efa74c7759996c5799744ef3d14a05cbd1c6f82e59cb8d786a8f", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1c24377567c2576def40e7144e77b70ecf046d6ef54a4535db6d3fc88b7fd6f", + "0x18eca3bfccbf31d8e553692cff87ce53daeb547d84465801bf5ecc095ee1fc1" + ], + "nonce": "0x1e", + "sender_address": "0x401930eb5465af9c93f63defae98fa9ededf374a901f24f1210a150923d10f7", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x8ff02d921c310dedbcb26822102d1a5d85f5225073ef65427843dc208d86b9", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x310a30391bd886a88914e488fd5991c05431fcf60027a64e60541ded7ee085", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x20ae64dc14130d4973492bf39a01020178a33229724daaeade5273a5856ac52", + "0x2b538798dcde647fd7508d129869e14016a985695254f6af76201f1672aaad6" + ], + "nonce": "0x7c", + "sender_address": "0x56ffd7a92298ef76ddbd31936c19c23d29edc2f34207f1b0b5b270aa511d8d5", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x1843d0466921d394ce28999ab4b20c7573aa2d6e48303c9e42fa9bc753910b9", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4c13766734f3b71821a4c8805174008572b7d7c2d5885e88a4c7e0b9a1b200", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x560565bc0575bb2b0487aca9cfb9c178f325d419f3318b7607ecacbd0bf0d71", + "0x3272e33b2a5005aed770c9bf7e3c2edf4fd0801e413960fbe856356dc834693" + ], + "nonce": "0x28", + "sender_address": "0x6075da58eeaeb2c380b51f5115dfcafbafc70ea16a200175ad50937d50cbc3d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x2b8512868598e247c9a1413424980001d50bd00a5a263b484c3b53284f086f0", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3537235a308efee36346feb8f3bd1bd754f6bcf3961069c796b995f6c087aa7", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x76577129fd58561a52f4c52594a77a99535b4d2190d001b8cca03f434664e86", + "0x7b8f206cbe26d7f317fb2bd05061f1259a8074c08a0b65efe3eaf3574eec041" + ], + "nonce": "0x21", + "sender_address": "0x4a724a4229813f34e274837684c652260f7621f76e9457942f05cb59fe4469d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x7b1f9cb425a54d10107cf8ea80b7ad02901a30525f1d960d093d5450b3cbbf8", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5121f255931b3faa334a629d7f4fd4faf1aa0454fbea144450a9a6cb3f7fe99", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x43067bddd3a594c5f100ba7dde26cbce4952227cf4c020c5d6d687d910fb354", + "0x4987f98db77371921e83f7716e581071788b50b6be8b04b025f78a5f0a8023e" + ], + "nonce": "0x14", + "sender_address": "0x755a7995c1b920ef28e18c4978d73a1c935ce206722c4a8398a1735548abe2d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x3d799d2ebf90ad00171bc66ff2faaa38157b08b5e34ae825b44aef6e3b0119e", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x395c2a4f9df24ef4ea8743e643996aebaa1ffb9c9605d837adfcdfdc00eb0df", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x830d83f6ba351b8619c3327534997751a2c7fa8b862e626e642340f4a7b9cc", + "0x1e21619e10ad839f1ebcd2edc6f7367d6d7c35629ef60502bff948b98909bca" + ], + "nonce": "0x33", + "sender_address": "0x1e6da06bc1d877fb69dd4110f38f0e5a206174c57305df51653141381aaaf43", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x679273e0e8dae325714657992fc3296ac0ddf637852c46888f6f0ff18f2bddb", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2672313365f1686250e360ef40af7d8bd7bd96012f602553162af5b2b4ed74f", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x7657ffa05589ebb372bd6c3ace1ae8a9adb57a766106efe276845b113679562", + "0x6f2053e6220ccc29eb98d63fad3aab2bd63c4c5f5ef28a2c12384f551b77e15" + ], + "nonce": "0x17", + "sender_address": "0xe04c9e37787de848379c7898612cde59fbf95ec633deeea3e34e81f1d7df56", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x53b2277673108514c99d88fe4cc555fcc03a661af45d1a4b7388b6824b7253d", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x77c50c779bdb835ab85ae739c4924abac8b7419889592efccd46ad36df6b5b8", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x317d0b3605e38d1d706e66087019d80e6cd6ca44b05f99e573dbba27b405090", + "0x4c13a4f6a4e87fc87c3ef80f41080faa0701f1dd2e4fa58793d120eed71a367" + ], + "nonce": "0x32", + "sender_address": "0x594a6c429ca64604465758db99ef286d5c00d847c8072fec3ff5f0e6b65cf64", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x72c65ce2d24e7c3fb48960296fd401ffde34589508ac9ffe1e1386552a2e005", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x491e39f5de84b88472a9b7bdaf9bfcd1d094b05f6358165c15e7cbe5db52f7d", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x52e6afd67a15f489774a5972e39ce34eb8350b15f5ad501e631a85462389d33", + "0x4ae16fe23b312bb3b78ba0bfd9b8db814f858f74631bf9dd9e6147b1e886980" + ], + "nonce": "0x22", + "sender_address": "0x1050347b94b0cbce9abe2ceab62f47257071169a4ab22b4fb67f3a731e0b486", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x745fc497aa89c73e48b5bd2f54d20dd0eadb7381a3670168a99d43aea8c6bff", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x591b1d14fd90869133097b265eb22e95d0415a7643f3c8235eb58191619d5d2", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x6be53feda73a4ab6e2ddf0e25b97922f1907a1911ef6dda2a7a67bb6a40bedf", + "0x4708e8b873c5539185da6b75b10d9e4b269da9c626673739cf7bd6d5a62f29" + ], + "nonce": "0x33", + "sender_address": "0x11f8473d749770009ec91b9e6f723403f9be76e2c93c62919d14989aa9f343d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x675fca6eb609c22ba375db97fc717f5284b370be42743195c965bdc2046c666", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x22b7235fdce25cf5495a6ca670254684561d45f536208ca9b6fbc275946c316", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x39e12ea6916e2bbbf01d207ecbb0f84c9a1d344894fb21590c86ed18b2cc791", + "0x552d3e63afb84d52c4215a3485bd1c7fd32c08cf6442d966f17ba138bcef16a" + ], + "nonce": "0x38", + "sender_address": "0x3732d673d40f828b64bfc85236012ce2c280d3c936aacfb8104f7d4c8c74bb0", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x386777696ab90e403e83ab4bb5d1986c8a0c66b8c7ffe34e37fef0d2e4113fc", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x448d7bedca0c5b233f8ab9de5c373b708b6ad3a53c5f81397c36f887fa7cf4c", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x7d868ffa8d926d4b12962dab01829ffa1a14c614d2dadae5a55bc7d84d17d93", + "0x43a41af010e9d22593d92331ebad1ec9a45047a30a5e552ad04b249a34c89f3" + ], + "nonce": "0x51", + "sender_address": "0x691301df126b5190e5227b9fd62788723db7b5ea790c4e1da8f85aa6235d46d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0xfbbbca39f675f1d5e3e9e5616b83fde2a586881ab158d1dd35d83e4361ba3c", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7ad9b0ef75176a11dc46824b18df70ef14a4f32c2426e682043d92f22a1b061", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x3cdd9a0db903ccd82372211e2b820320d71b51746079db0bbdf05d480646b1d", + "0x21dbba9cd1a851eb0f012da0d71969fd42941b7b55c28113f9e5cad369142de" + ], + "nonce": "0x47", + "sender_address": "0x143e4f7f4f62e00b9a027fc1d1e3e91fb655bb0c68d152a3bd81bee1ea38471", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x371a30b6c11017e1ad45a5182279dc6354c295c62fb2b62a64a88cf98172075", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6f14a667249063ca52f3b4b5708fa021ce678edfd8b4a63dc955d5c017d044d", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x760c6123b847da94f49cf70251407e1ec24fd55433691c0adac97c71b3d330d", + "0x11189e87aeb5224f95f104b436d369a3a85052290615d2b9228763e1e82e1f1" + ], + "nonce": "0x3f", + "sender_address": "0x67e4d23e57541aa5d087eb95ec42bff6a9feadb0ca6dece4b60cb6e9b8c1970", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x5aaf885f007d12012021700e9ff303343c63d216f5b1e75725380adbbe78ab1", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x28ac04c7d21a8ae32bafd02384b20c1c13bab56b3d4aec7183934c897b158b7", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x50a7fa6b8a22c699cb81a9beaf1c92b8698395017ce43be77e60a3a5c8aca67", + "0x2aa30156ac136bcce2ce057c7d06ab875ad181769864efb94f2685698046697" + ], + "nonce": "0x5e", + "sender_address": "0x19994bf4904edd8efa817a79fecb999e7c622f2643aea5d54647c0031d724c6", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x5510c25011742b06815be6d020576cee83b6f659d11c19a8c9c905400c6b2c0", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5aaafbf7d18bad664c093f6204015da223e0a0bd2d2bce648b702ac54a02419", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x474348f888b9a71fa3d2eefc7bd90364993042b2de09498a0530f96803cb428", + "0x624183b9389d6d7d4b2fb412d85b5002ced442c0209dbc512dfbb733008c533" + ], + "nonce": "0x53", + "sender_address": "0x104745966fa5cd518bab10b5f1a741f4a3435d7d9b060b8a11778cb36fcb574", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x71b52f0a7589b5972d7c37baa0b2056f085f6f6817a287cbdcac978b7dad26c", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x561b16d059f7e4c3a04650e118b4d995d917ef4cbe1125d4783ce66c81a828f", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x211daaa3fa5603c92b639aa0837e107290424ec58a708254582a6130921d13", + "0x397c7cbed3fddbf2273bc7778d969e8486f611a62880042eae8128cfa05b1ac" + ], + "nonce": "0x41", + "sender_address": "0x75eacc62294b96b3a09da916ec3e77bc37fa6ab5176e5bbd28aaf588d74baa2", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0xfd6ffd67c2e30772fa28728803ee853b16492ed1e5f72e91847115caf45bd3", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x370cb459e3b42e03867e6d9c957c5b61c9b34f3771a267c34102135441baec0", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x765aff9ada85633dd880c469f420fad70bbb4a1b444a2946ce0a2f28b024b4c", + "0xf145f013f9cd6adc15008a507ff448d8498837644e451f2d84ac0b17d165b0" + ], + "nonce": "0x6c", + "sender_address": "0x3a70b8ddcec9d026ff4a3fb2024f7815fd47dcf62716107d34a6ae5ee861e0f", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x2011b0569bdc4c525bf03e7b55a9365de1cf194249966c88c24707f4d850406", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x46df785050a9aea2cbcb90f6ce1cebf789ec5c3d9498656c38a06c29b5ee85b", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x32e64f466da902f8321bd1c1292514def0ce94ce3ae74155c106cbd7c30a98a", + "0x6ccd6535043d98007336de9697c1aa3cff6d0e0b2ea7dea8d152380786db148" + ], + "nonce": "0x58", + "sender_address": "0x4540dc7107f1d6a135b575115091ee56ab13c5cb22a6188a2e7fccda0e009a", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x4434a91a0b85b4efaad7d9b70ee2ff598a071c9dee4a10b06b3697b671e005a", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x59a7de5f6180b1a0bca493ede1fefa263b081efccf50bc2347b94b1877d9dcf", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x68056b15616713bfe99e08655662462c89cb1f1574ae7546ccefd38e6280f0a", + "0x732529b230ec62970dddf5de85798ae1febf5145bc614fe8c317bdaee127317" + ], + "nonce": "0x6a", + "sender_address": "0x500eb16558214463a5c37ac189e1b12443e97a3bdf89ec0c0c4986376bfb00f", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x9d05e196b5d20018731b9172e9041f6098014243a3d18d4678f046a28898ea", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2224c30ae25741fea63e9474b2f0f057fff88de73e4b248175a1e927b8848", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x19a6c3d374daa879af80b4016d0be484492b71417a02aea20e9fadd90efe3b3", + "0x7547be8e02902012ad1ae505de9039021a37838831df211e91264325e34aa57" + ], + "nonce": "0x42", + "sender_address": "0x72a90329f10cca92a43cb8014ea168049ee3e1b9013638afa026a4671863ca1", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x513c58ca8af13ecb6006f00151ecd119cc527dc13ff9e3c56b1c5dd05b84f13", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x23f51e1b32d65027a8319c74dfb6dd9c738364405e626783ed6ffb1fb3659fb", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x34e5357e804ca4f5d7db9956a173656bbe5400d8ab2fb13b1e1d769f87842e2", + "0x6a2a186ed1b56ba9d1e728d688d54e7c07f9aa0be5d5a9be26971faaff31a7" + ], + "nonce": "0x51", + "sender_address": "0x1862d76a292338a2634814f9f2ecb90684c52e1c3f600388865df686cf4e54a", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x5dc35a6caa3c8b98a96bbe3a21bad65a803c445bfce698aed1e090881d1996a", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2a4e4999fb73d8f3642c3ba7156049cf13cf61252cfe452ffbc8ca602090108", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x485910a4645549200085108907914ea62c248cd4b828d44c2d45c8e4509bdbd", + "0x5ed58b17f858f9788b409267e1aa248589b57b4055a122c1617199774bec0fb" + ], + "nonce": "0x5f", + "sender_address": "0x41157baa0cd2f7bc1029be65db77a81f97784d3f5aa16f77775d9edbb4cb615", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x323d32c8dadf08a0a06268910505e377d4775633e178c6b7d279b931ba0ee35", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1b04a7e6d3428539d6898984bee2c018ac39a8f1d2863e8ce1ddd31a1abd353", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x432fcc9314b33f7eab0d7aef6fa9b5e10d8d7727be023cd4df822f12ec45bd3", + "0x55ff7af36ec8b737191caff39c5a8315734a70db198b4dfdd45d4e324639ae3" + ], + "nonce": "0x6a", + "sender_address": "0x7707b0c961121ae62f4ef63605121041f2754bb095e682a4544b021aee7e2b3", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x3fbcfa51836a171596f2c6bff0edb9e1f0825e9062aed979683b9ba73369117", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1524dddf3c3bd1767cac929b8a4058e48526719d7cb0ab1515ba2842a70c107", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x2b1d28fc487f7a78aaf243b74e861023f7f242071c8918595ff74c5d272ec27", + "0x2901679d4b0561018ec7b52f63bf9575e46c7f09555ad37a0c21eacec4dbac6" + ], + "nonce": "0x5f", + "sender_address": "0x7b3796a71a75e9d55aad1d46057f6facb3040eaea69d255c6cca52c9124e94c", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x4683d52b5c5da50d154b9eee85be9b335acfb2edac7f0a46b0d15df18d9034e", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x28ed4b6a40b7d06a56267d52c73453a2072d27774b33e9b6557eca0dd680fd", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x4ba438ec49957bc5f6e14c4416e4882026350814fa6809648c96f63552e4a8", + "0x562fbcdaf66ca00025229461359e6face47328c87958abd63519019e638853a" + ], + "nonce": "0x44", + "sender_address": "0x14169d652eaae2abcfa6fda7c924f8da98566eb1f5f9f33fbf09629ae2b2327", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x550ebab892aaa6e219c862574b8457989b937ae35453d7508e9977635447920", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x384c56e94c958e8861f371247a7eaf75909687116adcca565ba717a7e7f3b85", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0xc2d41dd93683502cb372d0f71335adfe025ce26123f30eab4250b1e2f6e2e6", + "0x3ba0159255dd5dd356e3cd5054a56f3cfca42152586fb24df115dada26d1815" + ], + "nonce": "0x42", + "sender_address": "0x17fb33a9db88d0e4e3b382dad1733522ec8024647716f463066bedbb490978d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x6d73c6075cb31839dc618587821690839376b005faf20e554c81cf22f638c16", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5b3183a07e55ce39930fd7552f0e083fcca6d15d5632b51974565eca9b85032", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x39754c2bcdd9a530b55ccd4732f582feb138dc255e55ce5380ea0d44441d1e4", + "0x77a1fe017ca3f41382154435b54439dbfff9aff07f41baa1961da3ba2bf8b24" + ], + "nonce": "0x59", + "sender_address": "0xa0e0c780524827e8f094bf8c199269f06f86309d30c65af0f7dac6968de3c3", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x3dec2ebe2f47ae0947ee9693ab01dcdb74a2ac279fc32a35c8b84b722199ccd", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3bb049cc0666a6ceb2be10a9dcd99ad9bb880f63e8bda0b91c99d94fa2a8fb7", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x698c682c25013099438b8c3a5711e9def8aa19596c0180646ccdc49344e730f", + "0x713ad7c5e44328e998c753a937dfadb9f2bdcd034a52ffa1cf521de6c5f2dbd" + ], + "nonce": "0x68", + "sender_address": "0x6f4bd4995a3282be1860aca91fe2a498942add440516467aca9da8a1bcf4a41", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x1e8bf0e6b000c281bb959a8f22d2f6967c363c699bbe6e924e13e480ada39a2", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2bc854f3c7bb9cf902c79b21858c6cf64f2d963c108c7769a25bc312a45ae4f", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x4cd89a7f640838b691d452b417d52e6e8354b04905897d110a711a6c4193e75", + "0x45b4b1fb63caf033dfd6fc76153590f691ee7c5d5f7c9af0a860171a13fef15" + ], + "nonce": "0x46", + "sender_address": "0x524987ff394990a95fa0015a8eb66e61ff9f8626291dedd4f7d50a5f020f797", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x51fc3b4494e6dd9bcfc73c0540669a20632f42c4ff5e769294b05804e320770", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x23806ad7f5ff539aff9bc0fb9f4774c42acaddbd4239fcc90349c62a2230d2f", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x59ba4d92820ecb9edd063c10b53607c4901e937d4e76efee04f16ce48a10fc8", + "0x2ae7ec77161d584662546bf87868c39a79843c20a0b62f85dfa2b8f7f8c980b" + ], + "nonce": "0x58", + "sender_address": "0x77845f6d3bebb7c5e30619c191333c3cae03565c2d367fe68bf73dfe1197bb9", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x5d3a3de6a7d1237648882bc55b7b7c01ddd528414d015aec205a1bd5631e768", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x713489f9ee9e4774505a908308dccc31b5d710c12236fec91cb999ed230fb0c", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x55cdb4736c1777f46839ce6128a715f8f5d8e8fa0ff3e73f4a0148d6c763fdd", + "0x12be7586404508ce6bd9d0909476bbfd1a9e9a9323086562f7674b0a974f8c2" + ], + "nonce": "0x4e", + "sender_address": "0x5032f6bd44ec915ff81e2a450cf2dcd1e28534d804ea9cd38d186dc64c1ce80", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x29ee199399a32a98bface17c60ef40c159a7f2ff97157504a83e5474b51399c", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x26d796ef85fafcbc2020caf8f2f15a47ba57d687974f9100c4a3632c0a4d9bb", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x36a03bbeaf4018f341dba1d9676b8d3aee1600060b44469355fae7ec0d0ba1e", + "0x767b70ee1e33705ab2f274b4d2fcc23c2de56d5c2d751f3c07a26e1fb5dd13a" + ], + "nonce": "0x45", + "sender_address": "0x5f34cd49c033df5b7d3da352020e839e88ca2c28025e25f70a6a485d68fc0ea", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x129c9dbc05f4bd012b6c8863cd002192ebdd5bb3b6a5d5de450c4291fa27ddb", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1d6bf7bd16cfad947146e6cc3abc9243d80bfda51a13d089c843420c9dbb63a", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x6c6afee6fe7843feac599f0e37385317481cdcbde7c76a45f6a47ce8e28a71a", + "0x4f0f198ccea5aa51f618ca94d0eb06f4ebe1780ef14d9f9a579bd7bec82dd9" + ], + "nonce": "0x34", + "sender_address": "0x3f9e6e9b92cb5febf0b6b79209a9080a53bc94642b01bfb5fe2b61289f18b2c", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x59d6e886bfda7f1764012f766f355478f4b8e3b9d257c9e6b690756f7ec1bc", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x388163a57668c9d23bc3ce6cd727deb48551023c407b446cb970d2ba7d7c100", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x7592a00b78211997eaef32e31a3fc804fb0b7e4bc98b4b5086562a3a2440c19", + "0x6d649a08cfe12a540e6b872f097526da3f9eb54ca315c9caa376ab42bad87c" + ], + "nonce": "0x43", + "sender_address": "0x46388b18ad7cd2514d20b64c07904b351d313f9b185eb864e9cef8a129a9db0", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x4221d59d8749ab42e821d5e81292afc59e324f9d85a9ed23cca1d9be222b465", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1474614b42c0c2a7f735648cfe9e69c6ba27c13fbba7de971332c6107f87a3e", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x128f28e3aa40c000422ed71910a2c957ef28a0b8d7768f0c28972812fd28418", + "0x47ed8e96d9f83773cc53ad1a63e127886b39795e235c6dd90bc77f4f90aed7f" + ], + "nonce": "0x6b", + "sender_address": "0x385f7376f9614f368023e004031b50167fcd10b85b9cd45ea52b56c7dc2431f", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x5f56be4577874ca03db43b658ce1293cb7ff3bed0b469a2b754990f1c162aab", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x22419dd35389da8db0763c8807385986fe6aabc0334b627cf3f71724e7c13e", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x34c51e64eab29426f4de96934f2f671bd25eb04a2fcad871e456e044dbadf8", + "0x68979141dc4c43fb5f946d5d5cd6336cee4c5ddf88733bee6836f0f3212f4ae" + ], + "nonce": "0x68", + "sender_address": "0x3591c61d75a1d75ee576d70a366138be4c288034605022086e8abd6cc6a282a", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x6495a9290f42e2e7134d42fcaad2c01d7770a1e03ac8b235530ddd6a1fa126d", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1b44b717869617eb64b00d65507005ea9617107340c1e90db801eef4e684651", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x47565317a66205f4a3626f13156e7559647102a4f4be5931db9b8114bee729d", + "0x5a4e1b0ab1bdf279d2f253b831fe052eb573e7810a038ad323bfc8c93327141" + ], + "nonce": "0x44", + "sender_address": "0x6028344c83f128591c5a1905e734c37f6449505087573a54b99891e864ef8f7", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x2d60a254144a4a4dd7d7f7c9c657e3d5867207fc1600925e6e9fd6111354b9a", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6b2b4c33d9a7b0a8f16d04fa27f3039576c11105cd0cd7b3d42e9008faf2a5d", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x5492f1947165a80af765ed4854e51b98bd8669ec15b5917ff56f300e4edf190", + "0x2cbfcde544d30a8e61c77d4b1f099cabf143981e4129b98702753e80d6f5ed3" + ], + "nonce": "0x59", + "sender_address": "0x34535ded79eb990827817ffa6c14988cd29970cd3cb4d5943684335f8360720", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x114f3f20c5050e8f45084e50db4835ab12a8c40a1d827b0ea6789cb1915542c", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5999e0a6edffdcdd21f41ff9e7bdb7d2d573c474d07bc890654e9c7dfe7b694", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x3da17db01a2edfabe74a231d8c82430cdd6424deeaa857467769dfdf5cb3ab9", + "0x5aeff415d0e1471f0981db59868070db7ee4e26df02f06aa9b8363bb92577b2" + ], + "nonce": "0x4a", + "sender_address": "0x5ea1cbe943d1a798d02899e2b74b7626b315d2b81febf7b8adf33d8e57dc91", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x735c98e557704fffcd219c694dc8b9efad6a56d0d5c1c7ccf9f2cc70e1846", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x21f1dcefe9a6cf9dabcae1a5e5e5da5d1415d5f7004a10729d4c13f859af8b0", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x2c8d3171e6cc941d96fa186851dbe5eb3e31f6b1c84f7f1ebefb44d35d02ed8", + "0xb695ddb2ce590e04cae6de7899e23198870f5bc0e79ce3ade7c27710a5e066" + ], + "nonce": "0x7b", + "sender_address": "0x1a06329b78575c630b343cf559544f84241bc44f3c63bfb013678aa8145215d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0xd6fc49fcb2516cd6a882f3aab1c0e239d3619bf91f817373e3ecd462ff862f", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x62ae74ef5c8daab02aff07a12a7c7a8a9479eb7eab545449f78ef0e33b89547", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x46c052cf0fe9cb2a8c8a132d61daaf297036439a57496b2e4987a2e7c6a3c0e", + "0x543aa3f29e2f1a9cfdde06a6310b31fdf7967a92cf4b69f0f98814d5ce3b46c" + ], + "nonce": "0x46", + "sender_address": "0x12b01545b7bbd20fcdffb03575a25cad0b30698ad7ad4781be1221f554f4741", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x6b0d9e9e62d6bcadf1eb70e5a3e69f8748763ec128d65fffa4bad2fca590857", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5b3cdd91022ca02e6c0cc0f1cd1470e1299f6015725d514fb700450548869cd", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x7394c9e0cf9a5eaa4b349b46800c1c4ec0f490ff9390d5fc63bf9ba468f97aa", + "0x14a4242e76b904e7714e1b2f29549877a513ef59ebd704b73b241c8d75b6799" + ], + "nonce": "0x63", + "sender_address": "0x12e4dfa71ee52225ff301eb69e2fc08fbc001b0821578be07648a7ea493021f", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x3c74d8d103a37010c3628756b056e1795098b1248692e890d4b973c5c572193", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1a2ef6245f64b5d87d3227ec399c0ada923753931b2f2c6003eb6b060848383", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x42f28cbcef02f429c0c339845fea7eefddefac9d0eaceaba0826d004aedbce9", + "0x34ece019f4d6a4d37a7ac8f1319c13fbd8fa31295b37879d6eb70282d15bfbd" + ], + "nonce": "0x4d", + "sender_address": "0x3dda73cf3d5558a6e785f54cc6e7207b0173f0cc3cce20f64992566ee734d7a", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x73827b38945fcb8a1852327a0db3c1341f498e66ddf45e917b43263beb65ea5", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x178861bfced753d5c29ff84b42c34098a4a617aa9ebe3d8515ab0e456f153bf", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x16dbdf9f236e2bc2a833864f745b804bb88faaaaaa001ad3bcbecc52db1b9a5", + "0x4733a75efcac8f376a575af41c9d016f1e1eb692f71b64bec4acd53be491554" + ], + "nonce": "0x5a", + "sender_address": "0x6ae831431e8fa2128b079844633e084604422d63b7f1ad1a79fb81e37447463", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x259d0346def6321e772dcc7960478b28b60686f87fdf357b158d338c32d0d9", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x143f059f6772efeaa0eee19434ae43600d48b94112cf2125e075853d794b4ad", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x151ad5ace906f67ca851605dc848366a6b90e99f982ac023383c34a36e04664", + "0x3941e0f06cc5be2b85551c23a346b03a431597d9cfa93407c0dd729c4b3b58e" + ], + "nonce": "0x65", + "sender_address": "0x4bad3730634830da8c2cea36bc8c0103c47a074f259edd5aba3852e1245a9bc", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x5b45d83ead5c4b5061ffeb3b3169ef51c2c9635cfa471633b91e3577e6ddab", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4379a6a0466e0102b5db78269b03bbcd84df24a35212995944d19ff921f80a0", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x3da22c062ad0c430be728e98cae194c58dce83f84e063ead7f81764151c1db4", + "0x4d5637cae4a9a34b943c956757ad34edded5aec1be242a38314b66f1e325856" + ], + "nonce": "0x52", + "sender_address": "0x7e83c177ff630265eda312465978a679b25f8eb253c000a925fa5f42bb233fe", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x3e5259b886cba48b86d25215a305f4fd0f3892cfd3e4480287748c691571d30", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xeeb3e52134cfa9b421260478bc2af4b896c2c7deeffc7c20ae9462ddef86f2", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1902373a70437df409bc54a867368df1c59b4bbe0c3f52079aaa5cd309ad8d", + "0x6a945672eb9821cee10ec8c4a8b140c56d959a356a92707f8c80539e578b5b5" + ], + "nonce": "0x5c", + "sender_address": "0x1835c7d07311634fe0abc0e12897de6de8420f56fc0e9e1cf0550a71c31f7da", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0xfa6ef9fbacebf91627a6d6e9298caae7354b63378b7c59f36de9cefd32c708", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1508bea8d25546169759b20e5e576daf060ddfde0ba4699cfad13bf46ae47d6", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x724202bd2b168bfcf19641bccb560102d956af02e5de63519d190bd4d4012b7", + "0x5337fb992c2da61a465e49d71da6e4b19c638006207cc3ba1af594197f37fd6" + ], + "nonce": "0x45", + "sender_address": "0x1d00cc561c943b49f5f2bac27591530a55970c3d0716317ad42b78cd6fb469f", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x7522d5283ed7b9aced7261bfb91f73fb0bcc5afc05e0ad3e25e0efae03f4bc", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3cc7a2bc717ddb4c64358ddd4b0338ef71338a29e486b4df466bd1acaa6d87a", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x70ea45e763e23701844c52e586ae15c1d911c98726c643da604b999b4991d4b", + "0x61d5fbddc24ba70adb5ba8f924a99a5d8c18de23b532f55c2359352ae79e1a2" + ], + "nonce": "0x49", + "sender_address": "0x5826e2098829177a40c6b697dedb6b2c24d0378abb5a0dd870a19aef97cb78c", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x150387eafe5fb0a8725f2fa1b3d450c886b3f93698fb2ea579f55c829b37621", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4f22683162858d005fcad495620d4194b634c2ee9be1f11f9e91348ebfb7d8d", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x7234644fe83f728590b85e21ee0afa70759721e15a8cc1750c979737b62e7a2", + "0x67c0fbfcf7954487390efbff17a7a3baa16d1ee352325cae5b1d44a1e971f2c" + ], + "nonce": "0x6e", + "sender_address": "0x309e46e00ee3cfb4d1bd1f42267126cfc9b7c501f439a9c60093330c7e0cfa9", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x1cb41f8efb81bfde450ffece8927952542bffcc4956c917dcd099a5c2f334f7", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x103381a88f800582d200e7cb4239c558992f8e2107eac50570f48b29784ae4d", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x3b51f0ce87e39cdcb65c3be6a49d6f862306d6b7d821ffc699cb192b6499f48", + "0x44333f3bb93f6716cd6d1849baf2923472f0b3d7799fdf112d23c30b76e1f62" + ], + "nonce": "0x7b", + "sender_address": "0x78a19562b686d6cca5841bb192c83795cd8a1d9ffde0c0b4a53cb004575818b", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x838b9210d52ff4e227d6519041237881b96e3779057801451ee13266ef0a10", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2e0d84b614c67b7d788a546f04e9314735d19e8af7648bd980f4cc4d5ecf1f", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x2cf80cb400cddc6a6a72313d85c655e6db1f9788cdb6debc0ee5623faaff197", + "0x1ab63c82e82934d056812c2f67435d3e3f2ee3a319b56302609775877eae6d4" + ], + "nonce": "0x75", + "sender_address": "0x247d1a8c411f2a456bc8a538fcf23efbd493c71b73f7421a8a4657147a59609", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x3ef4f36ea03fa22b3ace1944e9c30d2d3db1ba1b829803ccdbc8fb10f91876a", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4cc74e3a3b93e8869d01b42c7b0ba4377163705e2927d390bc8825902a0cee6", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x7cabf91dcf0d22b4cacab39da49c13b77292627ab020aeca60e7e880b30cf00", + "0x21a0b8967b193c1a133bce5375f9a43ea1cfc27e82ba677587561e6ef5bee1d" + ], + "nonce": "0x53", + "sender_address": "0x1d751f8d431c913531632cdaee1f2598821304cdb401170a91c76f0d5919a9e", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x44dce543187f9da87ac682c03fe29e16b8ca948c724d6bd270aca20346cf91c", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x631a91925e1e7a9a0985738ae29f3afd3b0816171df5ad247f7559ddcdc4f8", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x7c27845490dbad9c08f4c129883d776fa9089597bcbc594dd86382c450f0a4", + "0x3eabe9413a3dc447217a5f007e43887609183bc27d9c5d96ccf720bd498c06" + ], + "nonce": "0x63", + "sender_address": "0x58643681bd6dbef6bcf4828660ddeec18f3d669b12ec626f14092306fe80e99", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x239b57eb82dbca89f0a16cda7a9d9a825804f7b8316bf130bcffc2af7525f42", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x37f798b39deb534b7a9888d76afeebe76685035e628c696a0bf96e27b8ed72f", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x51dbf4522c5d54971874dabb636cc312318166a2967962cb88b2f9a957141c7", + "0x35feac694155e6b81f0e0846fae649961a4cb38dd55b8f28b908fe2d2c5c579" + ], + "nonce": "0x44", + "sender_address": "0x49872eb6a8d0b7336f6577bbefdd1667fc0ed6f6df6509a6b52d62048a38fc6", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x358369a82c0c27912027bd581fefa76774fd3085af46dfc66c40fb8c1ee773d", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4ab4bb1f5fc4df7264f57a0ebe46ac3ac66e1b1524bbe6b401dbc27484be99", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x37a1d91f78a8648c0100974b3570a65ac1df8755f8a4180b8f82a23370667e8", + "0x7c0ed5cf63d8a3ed18d2e14f29d7591bf8748e67a5b79b1ac2ad051fc82d" + ], + "nonce": "0x59", + "sender_address": "0x40a560ccc59fff23ec01af1087d97bab10001e48e0fb493bec9c4c7e6831cbd", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x45c790388f6d017a4821c1f51a92e9e3146fc2d421346457728abc6b545668d", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5b277f8d91aeb7da62ae9545abdb44c154ceb0a09659a84f5ae2e3a0acd7ca", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x346971f185b6f3013283a4c195f26a40918d3aecbf3cd586897916da9512545", + "0x7446b363315c68d197bd381cb00888678d14ea9c7c0eecdb241761c0810b812" + ], + "nonce": "0x4b", + "sender_address": "0x3c875403ce3066337b984c541ecb4f47557e421e859816e65bc85a402abeda9", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x15cd63dfe84340f7816ffafd37fd253d97598749fe60dd6fd002b2f2cfe8cfe", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2132548ebbde369d32a37a82f8fc2d74278f0b73b166818bbf03927d4dabf14", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x5d88ec34e1f927aa5254535f216847233ee0660df7ea728e4692f28db34f791", + "0x6456ac97a829c90e8b199be9638edd22bda92bc9a848fd560e85e9834658a35" + ], + "nonce": "0x3d", + "sender_address": "0x6bf239cfd8ddfb4edacc070a23929b9b2522585548656ed1de1033d1765b25c", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x47899478e2418f2e085ff45c6880a2a9549ff19bb2d7ea5ee46388b2f439562", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2ee469b6fcca6cbcec46c7c11c2a701a1f0926be880b71471d07d3d6aa430fe", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x4bd2f01e67ba008cac3e51e525070b27464ebe59fe208ea62116d8d55c5bee1", + "0x6656317585cf6f2de1ea68706273135044deb35986dd93487fb3de3f001ff9b" + ], + "nonce": "0x39", + "sender_address": "0x20f2f2964d6cb9859f1d264e759fe089eec481f131defb7137878c36478bc9", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x4c3479ccb311fdaf337dadd954d9ce03548472bf8b4bc32c6475043a99dea58", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x496b37055585ed59bd991a954f7f3c950a6c4a0117d45e8831fcd544d9b278a", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x53e37eac0722920b43bb3c8a9707340234894c0e85036ade3423d80b84b075a", + "0x4642a3f5512acc0be5b7dd53dc187832bd58c2770d438c1bbe48b4a95c8d8f" + ], + "nonce": "0x3b", + "sender_address": "0x5c4f4e4ae30a422a1b735b38c52bdf5739ad64b2f95492ab6ccd93b4f6be2df", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x7a4f52d39ab901cbf7d2ead756cb3a8516110eeb8f4f958ec01f72674df76ab", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1a19f0db9a0d4fa69a0df59a0982b64dd9c53c0034d8b4f16d6912e564d87de", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x53dfe530728f6222523c6d0f660db6c12ab712008ab4173b9b26aad0706b4a9", + "0x80a72eb44b702bdd183ff1aff094014689505a165de9119de4d9fd19fa94c7" + ], + "nonce": "0x2b", + "sender_address": "0x33128bd86065b89665dccf20b8224238a3f169cc2aa63ea3de1d4e1b4431db0", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x3baf4487184344596cb078af8730466937df2d938ff56688442c9a146e682da", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3aba052a7ac31196b103efea508299044c4987be17ed9db4a142ad205a3be2b", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x2f8da23dced8de0e716e07beb0aea8d35975c11612c31cfdb4edfe9f955bdc1", + "0x2da1450dcfc9991b7e80fcb798b8e32001a53a2e01b076cf6d5a8acffaf904a" + ], + "nonce": "0x63", + "sender_address": "0x1c23816c01bfbd90fd57873025b4d5b86ee2cccfbad90d3a7fa25dc569638cf", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x11e5e35e8075473dfab70566e0f9e071c7d1f5debcc8fc79c0bd374ea610681", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1cdbbd431edd81c19c08d52b2ca047b39bb9773a8c9332ad91e3508ae8ebb7d", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x32ed0b0fe8e7868c651348e791ee9e0ce0e98b2a1a716a40e7f0ca078aaefe6", + "0x4977ee2c42d280fa244dd561f613a2c750c0a4f927927d84a9284eadbcd7f8a" + ], + "nonce": "0x50", + "sender_address": "0x40de1d323a5870a9b1011b1476bfd58f92a35ba59b1f9f3c69cb083fcba122a", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x786a7b8e6c19a882ee918202201abffbd1369d30ed694406da52c3e615b0d32", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7c0661b8022ccd16b2ea405f20b4fb72e2d458e7807952c462e266fb0d79325", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x422c2bb6780e1c6304e3bbff3d32581081f721de226acfc340d7a837c64739e", + "0x49b8c73c95c90f5b601d152974c8a86fc04a86ad0c5ae030c0b9b1e6862b55d" + ], + "nonce": "0x4d", + "sender_address": "0x51d568676ce46d5f9a0d7c23c7c72cdb8536f38d74b3138f3cb9acae98b074d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x5bca2c958cea7ac17e1d4dae90155d11a911a917f91a486ed5013c9dad2088f", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3cdf111085aa25cf5bb06aaa4506bd17aea4648d790264a88b205fe7d4f2bad", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x2f44c93390b5678e488ce0b158020df832141b40dda2b267b7ca48dad523146", + "0xbfaf85838425013bab2f8eda583d0fc45d555ec659e10f54d386856d1b86df" + ], + "nonce": "0x50", + "sender_address": "0x2ec71fc858681fa0cca225185a86060926a9bfd338d749f256910d415770d1d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x2bd2704ade8daf80d330f575446499b44783a6cc21e3ff95de2aad82648e491", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5d426134165dfbc7943021571e8b9f1014c1cc368c2ca2456b9c0f26fd547a3", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x77d1e3025c2465f3568f721ee12d0b23a4c53a81f94d106c2ed7491f0a9150e", + "0x2f1a6cca14bb70268b2a86e0a8d59f9d909ec542bd85fef30523b23db78be71" + ], + "nonce": "0x41", + "sender_address": "0x5726d58c2c6bc370074cb67581d03cab05e1304365ca0ee9f4ebf3faade40c4", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x397bb315d341edb330605784790faf476d4162ca5ce07d269ef8f39aa5f8401", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5280f3167d771ca99febce9e6dd60705a0db2f5ad65f8aa839add5ce23221f", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x3ec31978fcffbd308dd85f46f325a446665ac52c55c3e3b1b3a9e2da8fced57", + "0x37126d40153525ecab0d3e419e48e10b8f68749f648d033d85783dc91e565b" + ], + "nonce": "0x59", + "sender_address": "0x73f94dad20c07abaa57a278d02d169b48882bce673c421251686075a986db83", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x20be5a51198a030c08ef3886a5b47661a773b186f4407f3f2d3c2252828e80b", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x173ae09604a69ccf8c0b4699f38a3e20cd03f3eec2c817ca537d17a9084b266", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1947107d7dd631e9aa7dd30ecad4e266286986ef3ef25d01ab6db385009c0c0", + "0x174807ef91d9682a00f5595a764ca683a1e0d60eb5be819ea89b699360e118d" + ], + "nonce": "0x23", + "sender_address": "0x350e280198d66aaecfeeb902b02089e026bc792f5ddfb88b04ebc92218f8fcb", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0xff9247899738818e2b47acde31012975dfa023f5c860a19110dcd8d17af54f", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5b718ec976fbe5a287430bac79254dff399b4d06cf7b40952d02dd37107575", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1d7c2fc083db276f6152d379bf9305e0474c10b6fcf3ae57fafad9d1d1c97de", + "0x1994db422ac6d962ed2c06733f7b38606651b62f81ed5556d6e231f41626286" + ], + "nonce": "0x33", + "sender_address": "0x273d24a6e32e7dc5531d7e1d17df2b2f91b7c50da2c9142a78c02de878cdd5f", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x31293244a17ef815b86baaf64c80c6885f900c74c51fcf57512d7d0a16beeb6", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x25014de16daf7e0b7616c884fc0f7f347bd4fbc0581ceb8f8fafb62201cf08b", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x559d83e423e200fc7b3582618905b75c31f42cf527bfda3fda981e67833e931", + "0x53bfd508bbdcfe624d0bb967a028eeaeaae776345282f6180e93e7ac9b8bbc9" + ], + "nonce": "0x13", + "sender_address": "0x87b5c2536abec4170cd59c7ad72798d6dd22bf2a77cb5d36cb68876d59d258", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x177bb3f2d216e4b5fbd795644ed4f764e4d44e88c6baec669dd7c961a0d5459", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7173b79f089b5c3a04387f24fc50e335cbf17519153cb96b1d76ddb2b963b62", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x503f18124c4f19a7f26e6dff8fe9a3e623a11ddb4d71343481f798c97c88aad", + "0x4cd688fc6a56d053ff52f48d8e0f595191b6d656a6dfc4c33b6d267e294e8ed" + ], + "nonce": "0x23", + "sender_address": "0x1050347b94b0cbce9abe2ceab62f47257071169a4ab22b4fb67f3a731e0b486", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x78c79109fb270aedd672f34ee762cbb13182eac88902e83dba9ff8067ccaff5", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4c2af11345d1c14e61e42cd6f9aaf30e3198742ca02fe80ff8779b6f4c3529a", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x73b53a20908f1408150e077fc7a1a5dca36be49e21ae379978401818b9188e1", + "0x5eed6cb7228dd6a1803511a46d7de5923cd8186fd5045a26c1f56c7fb31fa82" + ], + "nonce": "0x1f", + "sender_address": "0x401930eb5465af9c93f63defae98fa9ededf374a901f24f1210a150923d10f7", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x553865b8c00b13964c2ca979ab644e5a78698d1a432dd79a139212edc2a3bb1", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x73cb474823be71fa131985a878728582720db457b0b93a88510bd5117473314", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x618e45ee94447e60f3484349aa6e02c4752e1da91b25b0b505bc872e8994623", + "0x5470c6ad6cf15e6ce72ece561a46ad220f462f87d4c1947b4fd34cf4fdfc332" + ], + "nonce": "0x23", + "sender_address": "0xd9def9409244513635be50767308e1c80a10bb5d116efdf78b9de36620bcbb", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x23a84f6c04e12e95156f3a95bba5fb937962497684343aa8b383e0eb9544b4b", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3e449ca641cd0bd1ff73c932f69202871c2ad2543b8bc11cdad527b74f8d0cf", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x24936f9cc98fbc60ac3720b24841b2af04f0958b38b3134af3c4be36c4b90bd", + "0x52309319fdcfd3d2f3b4999bc3c0c4b8a1cbc47778ce7becb0b2595e96c8088" + ], + "nonce": "0x34", + "sender_address": "0x11f8473d749770009ec91b9e6f723403f9be76e2c93c62919d14989aa9f343d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x5b356f0bdc58baca5e3b09d7924a9c149c04018ac44c4b9ac8ea8e909f273e2", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6502bcfbdc0ff581dd427b3352cd5612647f4423496dea5a86d5bc58c549f40", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1e962f7dae07cf748e4246e710d2c8578157dccaaf3a9eacaab998c57e30431", + "0x22b3af21c7f92fb509be8a158cc9b5ac16bec3ef11d0b66b75684b0ed51f7b" + ], + "nonce": "0x15", + "sender_address": "0x755a7995c1b920ef28e18c4978d73a1c935ce206722c4a8398a1735548abe2d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x448352a22b7d13d447579abd96b903bd4775e3706adb4c849b27ad8c35920b3", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x12201b7537453148e286b8db7ae963c8caa2c97546dde9e4b3bfdd68479bdb8", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0xd7447e1058acd01fffc4e63914d650b37da08a2c72f1c24662e92582b58db4", + "0x5a732257f7c5adc75f426ac19e19bd4be01a0a4ed35eda94a908e0acdb9f46a" + ], + "nonce": "0x33", + "sender_address": "0x594a6c429ca64604465758db99ef286d5c00d847c8072fec3ff5f0e6b65cf64", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x4ff825824c14191fb3ab092af3398dc43fac2f39b6bedc38e9a59eb1830353b", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x71b3cb789db36c1eb5c123ffa8022b7636e0ff532a66817ba4aa40becb87600", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x28f2a2a5066c01fb93a87b828080f786dffe542ecd0d5f756110e94402e7003", + "0x3534d145049982b7a54ad9016283a6d3f9a96f6347a7545c2761da94edd4a77" + ], + "nonce": "0x30", + "sender_address": "0x9529b7734deb881652cb0903f26875b01134cb0b091822f85edc697164e7d1", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x98a0c24e9409c975c4d00b538786fcef3e6917c87c2bc4f6fa6f0030d2c0ed", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x53beaccdfa5cb43c14a8906db9bd6617ab60afea57dba13c655d5c98df3a4ce", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1f882ac460634ee181a6b75c13d4f00c6cfa370a0f1d4361bbc429e8abd8e05", + "0x1c9626ffe083884a3f67fcd45bc32f33556178ec2f8c55e3b4cc77c53ff970e" + ], + "nonce": "0x34", + "sender_address": "0x1e6da06bc1d877fb69dd4110f38f0e5a206174c57305df51653141381aaaf43", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0xe5fb2d5857d353e096b22ef0f8e9f99ff95b806e02a100de157a10b9f0dbe0", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x67102dba80499dbb2d003d8a9788624e66850545e06f8161e0c1ee67865e8fd", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x560cbd1393c4297ddb75aef100b41b0cc0526203023f544940cd6fcc8053ef", + "0x70e7663bd63f7442b5413ee502076728574815aca7f58555462a196d526693c" + ], + "nonce": "0x18", + "sender_address": "0xe04c9e37787de848379c7898612cde59fbf95ec633deeea3e34e81f1d7df56", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x4dc90cb95f997f48e57659a8b967e8e274efc50efaa44e151d3f06d5c09888d", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x839e5b87c654d05241a6b948abfc731d9769330040b8c51152b0333bfa7a62", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x737a5ba108f092925b531754d229dfc5e24c261e8301c576435c29459ef2184", + "0xe125d49fa1360aa6ce37e6114d3eac06def1aefc5c246808e8a95a747aa56a" + ], + "nonce": "0x22", + "sender_address": "0x4a724a4229813f34e274837684c652260f7621f76e9457942f05cb59fe4469d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x2b23e674ac1780db2739b1120bfa338a1f5f70a1e2f504c420e3b36e67d2e7e", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6044face7ce6c8aa9f8a9dff0ad8404e0b7e94b51b2f0ab18f4839ba48ae63b", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x10e5677f653e8f75b03dafcb63888947cb90c421ea593e62e23d2a658d95bb2", + "0xf5f6310000df27dd578f31a511dc9633fa955cc4cec17a345ddf28a6ee3746" + ], + "nonce": "0x39", + "sender_address": "0x3732d673d40f828b64bfc85236012ce2c280d3c936aacfb8104f7d4c8c74bb0", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x5084d51029195f1ad25cdc2f9dc1ca7a6b852a0403d64cedcbea6823ad60406", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2b4211bb8fe9826cd759f600ace0d683928c5d01828673cb636c5960fccd33c", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x46234c6b3d1780f5c29b02a9db338e9ef5efc2b2b86077af22d7e3f13cd75f8", + "0x327c8f0a10b84d71c5e5ea15313484846791cbb51e804bfdddca08b08e6e271" + ], + "nonce": "0x17", + "sender_address": "0x10bd0687cdf260d35210af52a93a9712d51a403868a103e91e491eaf17973cd", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x7f4b923ceb59db39ea45e8bc509ee21a794f6bf519195843196383a7f41c733", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x76df89475d06c33ecdf3388123641a370c1966530b3368fcba532f5c0968065", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x6e712408916b6b533d69c154e2d6fb51b28dbba44715fbdc1e5b0b334c8151a", + "0x6d84a28ef0bc11670c63aa30f178e072f425a8bef41ed3eb0e351e509ff68f5" + ], + "nonce": "0x36", + "sender_address": "0x6c55ba1f4efe13d3eb06441582c3aef616542be06363571d970ecbceb893de2", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0xe84b189ad866d825e7acba6c35b1896bbe63af2c978c252b560095dd624475", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3602546a1a075eeee06156aaf95e563c67fa62f9a49aac2462192b76a714bcf", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x10351c6f771686a2642e1fcb2b224ef61e0bebef0c0972024e797ad9e3d1014", + "0x338390313aa4b367c359d62ee2b22a2d204425cdcf195822964a9cb693b92ff" + ], + "nonce": "0x29", + "sender_address": "0x6075da58eeaeb2c380b51f5115dfcafbafc70ea16a200175ad50937d50cbc3d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x2469bb3a01d85d5c494b4ec4b395892aa1471d39f9b8ee02e867c22d9fbc9e0", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3dd182a9cfeab84580ea77bc8302af732566c692d5f2bf3a744e0831834985", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x20c24f1611d31f9884f15dc27bbfc961844dcff3350dd36a7185374b74386b5", + "0x4507535d4d8a21f1c8371f1aa300bb2441ff4827060b65705d8380de98282d7" + ], + "nonce": "0x2b", + "sender_address": "0x79b0d5fe892237bcdc0979892a9b2790f23781d41aaa8adf351c7980c8b65", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x4d28aeb4a73825e8e220be72fdc88a1c7f3e3a07f7b11b5266e4ce09c5d4e45", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3e06fbeb0a6fb7993e15ded8434b8c93c040ef49a47ab53c027d4bd61f6ebb6", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x3403eea477251b59391ebcecb52092eec8c25f4c3bcc5566e06284f3a661bba", + "0x439c70268ff5b7cc2dbf56dc0a24e2dcf6abc636a5b6d305af665cc7eb24f36" + ], + "nonce": "0x31", + "sender_address": "0x6be5a0624172c2f0a3d116d03a861375e023f340caaa6363854c9ae4a460f5", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0xb83de952bc6d08a2717450a62dc63d8b7388be348c34d35e02a4e721fffebe", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x57b506804275c73627fc751672a4f05f6cd1dc4aa7d63b80d7ad0e693fa421f", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x7dcc4819b47acd5f65928b70291e55c7640c1d1236f7790b8636e2e554345de", + "0x6aace486b85fb89e9f214555789b19344b89ae7999959e5c3a32a12bd4f1c14" + ], + "nonce": "0x21", + "sender_address": "0x6a4213ccb648d4cc272690144073efdb184bc5c0253f798973666761b231827", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x15bdbe09c4994bcbf777fa5e7a96f75ca7f48ae9adc8bb4729b9eebb8421dd4", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7404ba50c6ab74de5a464496aebb760bfe9d057f67b0f10ffd238266a1929c5", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x42666896980fc2d9970714e70997b2211fea807f3f1a77aaa61b31050ee6023", + "0x472cc6789bac9ce24e442268109441848ba42621e33b911a37b80bca4b50e03" + ], + "nonce": "0x41", + "sender_address": "0x2f50b3c524482dfd39d8236ea2c114df8d8fd907711584de81eddbeca7b7921", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x1ce326645bad9e0e6a403e59fd425b44228ebd91fbd4bc859ef3931db28350e", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6336498d27b2d2c2498092d18e81fe90a6f910265fd73032691404ba01c97c2", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x6981e2452987b045e1327e8d799d4cf912cfd4cf794b234e93b359622513ddd", + "0x160096d3a41972c3963053ff127418ae48446474f3ac1a46e5c47983d0c7669" + ], + "nonce": "0x2f", + "sender_address": "0x6d7caa4818f9d3d4fcc09f69e5c776ad60978fa701d99a6c5a0c70b7b25e1d5", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x52a42025cf1191517e1d6320decbcbd29a0e9b4d6d541642d236c94a1129b28", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x25a369e7d198733982640d84abb9231e0370233df715cb883e0ca96fbf3c8b", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x5f2c19e03ffd6153f8a48a23ca01fd8a557bdea633f2c90a64e3b0517af58a", + "0x54344d9d5f89ad85e015fa33a08012d2ae421c3de054e1ff75f35f489b20c14" + ], + "nonce": "0x36", + "sender_address": "0x46e53968a2b5fe68b9b0d6ba6d8a475211b845759822e9161e3cea1afbb1c5f", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x243276cffa081d5820d2cd5957559e7c9079b04ac9ccdf89a98ae76cd9e336", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7d975576bd417092e8a4240a9dd394936c0403ed924492543257a71161efe", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x3b27b7beb64f4ff0b643c611820d1ac886a4ee2c5b100a9015d62fe0ee59bec", + "0x3c119930418190f9286e93ec2d9f63d88c8f43971755344624a8a9b2e73c90a" + ], + "nonce": "0x33", + "sender_address": "0x47666c862e5e3db0e5a43aafd2d1ba5b1e8eb498ea5b42ebc6cd01ee3a16609", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x53ce509fa10a89f8e84c1a757c6ebb9f619c88fcf6cf4cf7f3a0dffdc98fc38", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4bce71a291a23339f70b0364cc38ad842f590f915cfee77388a781d2b7463e0", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x203bd4dabb5942c6a7296c707d4f839767ab79a6426e1ad00565c61b0d5c30a", + "0x73f1285b5b5a2956e962c2c101c1daaa38bc4e0814853ebd81697cbc77e993a" + ], + "nonce": "0x2d", + "sender_address": "0x2b24cb0ac3991cb6362f305bb241e0e874784d44e89d08859536270a29a3799", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x33c72c1fc6bdde04aa50b65cfd0942f84e09105f402e4007212e62076abf042", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x247e7f82d7c0dc9c7d932adf83b1043c6065d704af574587481c2423733d3ad", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x6a10409eae967590074f40cb1350fee3b323e1136981c645886da6d2014999c", + "0x56a920144b079204f37ce02212f910658f2961df0c0df0316ed173ca1251e39" + ], + "nonce": "0x40", + "sender_address": "0x43438d30a486df0100bfb40f7dddbdcf9b9c21f2079ae785a22b2816d09d842", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x77649160825a0fa1efcc286ccad2f293f8188372b5c1417e6cab143f15ce0a2", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1c08dce6167fb92654cdd8859b7a497ba1bb8822bc9c65b0d06af4e2e6236e1", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x5d058fdf1a6c41b73bfe40a376b61d299cf078c4e09cc15debcf05fd19b256c", + "0x6f72721bed9fdf79fe5c144508202529d43761a4e7b0fc494eca85f9993760" + ], + "nonce": "0x45", + "sender_address": "0x708610e23e4fff8c6434eefadcc284215b0ca10c5b2530d784a547ab7ba6c1e", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x66ffeea403d80b5ce56f240cc1dc71f29de7ddcc678ffb2243b83781fe203c0", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x384448c90680c595d337a129ea224d736e633086d0658f834487de73e081146", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x27de295b78f631ba298235c75237cc3429abcfc2572a78074ba5b4b1aad62a2", + "0x6f5a38983c8dc56c24e3d16f7cb4987df2f87e61d360633ea413a99f2b925a8" + ], + "nonce": "0x35", + "sender_address": "0x73ea2bf4f84c4ef4f95f6a5a03af3317277deb63039330d881ea20e33d0738c", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x651234373645c402aa2545fa765084ad73e170f52563a3412e7e629a6aa955", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x39a051c998a67dba681a4d4b62ce5566b01c50d591c8d8fbde29e7cb9cade5d", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x43503096872a3349c363375f5693e10d95a6f14e4f34685dcecc6c70cb3a014", + "0x4cf889f25deddb67fdb34ed8c0d4c1a2756fd1b568ee7b35584e2edd65c7013" + ], + "nonce": "0x20", + "sender_address": "0x4c7fbf3010747ded03b3cbd0a8bfb888cdeb9080a06f5d0d1e32e36473ac5ac", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x3e1e01b344a4bfa097e226570fbc97e94a202e1bff7621f5ffd2b614ce97d13", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x125beb29b36da82b913ca9c974555a5cbbd504257b65be41118fa2f9b1ebbcc", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x50b55f61113c4d50d207e5a769d322581109d59da1dab64e69fb8520d73cad1", + "0x5f0b7a0425f78ee3562fea515672787082cbb7897d54a46ea12f64c5ad5136c" + ], + "nonce": "0x34", + "sender_address": "0x688e05ac8427736a7bc419f86ad7a90ea6157d2d82ed30f09149b18c97a2391", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x44d6b751b21d24bb3b3e4acc9940f62f41450f3bd30339394931aba3d00c6e9", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4d066bd10fef687175b64486069240b99e9efc085d29f66b8430e8d352d9151", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x28e8fc4deee9e2d0f35a96193c470ac4eb02c94bc00843788e36223a9f1e303", + "0x328a44ba31703999df6c5f3cb65d23adeed25fb1535ea48d94da9dfafb5da2f" + ], + "nonce": "0x40", + "sender_address": "0x57dfd6da6e2abc9b831a908fe8d4ef45fe2830c3ea287ec2341c4bd88046574", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x2b8806c5526bf682c03a69f6cfa4a9c95414e5e315fb1f91fa3440a5d78264e", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xe6dd45f7f047eb5b9a0b48d75e53328166b15a65966a192583fb9597907f04", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1e29cd10c49aa853e9f86350795e72561cde719dc9f5744114933d4a93756c3", + "0x3e0adbdaa87a7a82575682fd37667409d6258365b27b330b094da7a2331cd4a" + ], + "nonce": "0x3c", + "sender_address": "0x66a981c57e4253cf8d24eaaed89f7719c9a697be3b41a0371b24c8fc00a1cad", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x3d1b043f11316ab21133bd66d438d2bc801304d810be7f0a7f9bf7635fd7d12", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x310ce6a7234f51d7a7b3e5c43d230ce21389730a9d5287ba357e31279cd1303", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x2e0072fb814e225a228f2702fbc4069a94bc4e6b69eba820e215fe2b9caa5a3", + "0x45777afa12bfdc038d8951838038597edaec0c85fe240de5bd2a83c2bf0dcf7" + ], + "nonce": "0x36", + "sender_address": "0x36b39a015dc8b78a90ebc74d8f98a7b5a6cdc718118014291966650d6df65", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x425b622d8284bddba9a4ab7266daacda17a1877430ed52a3f69892853648d4", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1b7d100fc1a90371e9e64e943d5369eb7bd12b54aa034a983fa81213a2bbea7", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x6503ebe26ffbecf60765bae2b80c59e25db4bbda943bf0489cb39dc1a4ae192", + "0x4d207df40b9b11c0a2486093af60d45357fd9fe6a5aed769ef9045fdf785fb5" + ], + "nonce": "0x3e", + "sender_address": "0x3fd8c55203651e0b3c6cac235b8b489b0a302731691e1c4b860b7dc41a6d6be", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0xe4072b51b39c9eed5d3f6a4df783d4824e7655b471e878e1a03fad678bccf2", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x23591380c2f899686689d0ea209b3586aa27f7f644ac06d3efb376b9379a8fb", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x7182ca9091f3d8af3718eb4dfbd07bc8c4007fa6c97fd6158f9b0094ea5d3f8", + "0x7fa7c6e3198a67081362ec45d5a20b90b7e40e45333a6d6db3a930886525c42" + ], + "nonce": "0x1c", + "sender_address": "0x22ccb773bb8c536d70c99ad4be229b6425be5e8014a1330c72495760d2f4b60", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x3a120f0603f880eb3ebcf2f51ad8b510ff45c52e2b19397487eb59f7d215384", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6aa9bf81f896ab255495901ede9c7de8423457c79b9852ad000d92b7a054be1", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x50042072bd8570e5e3dca47cb7a0c52c7f4aab9e256e3032d1bcc635956107b", + "0x67f43a38ceca81d7d60e3510a8cad672d229ada35b0c5b7ba8cd988414f9bd8" + ], + "nonce": "0x2c", + "sender_address": "0x33128bd86065b89665dccf20b8224238a3f169cc2aa63ea3de1d4e1b4431db0", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x2b8d25ad36db79ee9f1ef1900aa3831745dae07e1d5ee7a161a2b1cddf0dcdb", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3d8144276a490ca957d3b050f193c30f8d2e98c49e09946af09877b2d14f6a1", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x4bd5a931ff0b2389dc8535394f79ed401c9c1eb4c39e052bcea832fb9a77260", + "0x4b719776a22112c446bacf76345aa216886fa4459856e302ff2565e0e4e95ab" + ], + "nonce": "0x30", + "sender_address": "0x1624d229b7b2733f0e4f72f205ab058c0b247045ff371aa5a7aa95a7a037906", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x44edc98aa09d3c48b4da189467ea3e582fe32859d0df8ca47b768156b85a260", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3ea0ff3cd693c15c2a125fb6c8b233954db1abefbc1d5236acbafcce2b9603b", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x946c6e463ae3620c0b7425093d39003e7e2d159f3941c9a87965195b6477df", + "0x1e0921eb138283932822b4cc6913d50aa46f678ca91f53374f1a75d1e5df04e" + ], + "nonce": "0x40", + "sender_address": "0x4dde2846e7cce0c39e57113809340c87421454d8d7c48167a7a2db9d0ef7067", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x6399dcfb7c3ac836f32632f0395b1c7ff6c72ea353ec122b86f0a49e045a96f", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xb1de3fa66983a9dcfc33e4c44eb691a4e4746c7f4709d97fdda0df5dbe31f7", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x3848ac1e3db337f7c880a88eea36e308bf552eb7977aa1360067684eade4ce3", + "0x8ba3b0cf9352e202117b72266661c3b34dcd05e0d26c0790d34dea2a6bede9" + ], + "nonce": "0x12", + "sender_address": "0x384152c373546b914f69e6c011747c08c519c3f43a4dc4b4b51849ca0e99ded", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x6e7616c3ad7f00e59f65e276653601a535125a577127235122ddd92d9a2792d", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7a14ae239b5ef52cac2e795354a2507fbc721a441b1b0c27899747aa5b0d56a", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x31b8c51c2c24c561b1c64d4f232ca2a03dd4f20ae95e250bc4085e39c317e0d", + "0x813d384c420a04a7a2555a3955825bfacc2ea3f7c722fd285314ca1ec8b588" + ], + "nonce": "0x11", + "sender_address": "0x115f012bd02db4cad77f3fb19bea28087d03a4d03f965781711cd9a9379d100", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x613caab7214bad95f132347d5afe5bbb421fdb6b127b1f525fd64651f88415", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4ffb0b6085a2ef31164f2268de6d215636a5a7d8fbcce5a8ec52d2da0018b74", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x2131941fa98a072bdc74691807b5b6a83b06d23dfa794ae833fcd6849b91474", + "0x1219e6da19d4059d82985c10bb1f7c03942275cb28f861057884e9c8af6a84e" + ], + "nonce": "0x37", + "sender_address": "0x4102dafaf51f5e6c854259a48f6ccde4fac083d2dec07e784c5c38e7c6e9a8d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x1df4af2d02656e93c276ddf4cf618d79e21a04e271b73e0358eaeecd2798e9", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7f72aa25d42ae1dee8aba34b61f43b1641dcb42b02112084bd59e385bda1bbb", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x6584568da1b03c2ec69ba6fd989abe2126c550f76385ab11ccb2be6a1eef8d1", + "0xaedad057d293e9edd8dccbd269c03a44f067a987c1971249bfe8af34868bcf" + ], + "nonce": "0x12", + "sender_address": "0x7d3644f1c8cc3d0fde11a7c69ccdd59e392199be927e2e283d21b5445357ab1", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x6c39bfb03ce74f827587993c35fee75b194aca03d6933e55b39506810b924bc", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x130d45032978cd3896f347f0607471a7a700ad0726007fdb8457eaf37ff0eca", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x4fd6b747023361b7fdcb9e1e841be05ef3b0faf3a7d5382fcd8e2a80dfcb579", + "0x5d22583c57ff7bb588bfd7e9a773e7c5b892b8bd5148a1bf12c4c946274b4c2" + ], + "nonce": "0x3b", + "sender_address": "0x176c25d47570070342b173716432127caf510d2b00189a3d8c9c0266297ec30", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x45b3e73736ffa7d2b57dccd9b2a08bb53f5db9c4a87e1495b6550a13f5be47c", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x70c571657e610e7a8fd0f9974ed9a6b086ff05d00129b0025698d5dee3ff3f3", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x70aa49c623dbdddbb0bfd0ceb5092f10f912c973d11c51ae41ae553afde6bfd", + "0x718b0142f6360d60e605669ea9dc05ae9120ae12d9615eb7b91c3ae83f8cab2" + ], + "nonce": "0x2e", + "sender_address": "0x15bab3e51c95b9d58b038c49fcbd26d6e163cafd66d2f2cccfce75cee26b762", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x14e8744f0fb2432cf027fa55a36bf65488f59ef104988c702cc91adc51509f1", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x35928dbd8c4e8bde8f375b19550eec284538b00c09e97d3b85a45893eb965e0", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x309f05253232c753bcca61e749cf14a285d909bc0485b117b7ef2de71e7762", + "0x204625c91a27d55fbf2cd5267568d9cbdcd993f4fd4b3b4a81024639c2a54e" + ], + "nonce": "0x2e", + "sender_address": "0x481d6bc11e059a6f76ef7f3967cf22b9a0ad02236c59bfd641076cbf371628", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x1ff782ab0e8c2ce9758509f291895642a960db30e4e375aa7ac72bc3c939038", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6e4548e3c81b0f6226307a787dd1a8a95290721f0b92faaa54eed362c30dfa7", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x17c1005df98c741da7f8e2bae6efff9d2e84df4b0de477d5495831e9fec516b", + "0x1470251540dfa27a5878a828ec409c88e39ad49481adf333f737ddc36cb953a" + ], + "nonce": "0x25", + "sender_address": "0x541b4a8bb25092e7a52dbe8f07810e5c9efcb2774d52b567845fe8d3dc3c92a", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x15a7bc9dfe4fae868070df836f78e7a6256a00e8b2e1355886a2adc28917969", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2b331ae0f7d03c9fd6088604f704980c919dfcd030ce4cf2d2e5194dde6cf24", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1a4e75f779779eacb3e90c69e290fdcfdb3ebced454735a9167e19d6e67d4d4", + "0x7b333b7cca5082a8eca5ef1d0703f16cf13416159b0c75909699fe597a4598e" + ], + "nonce": "0x2b", + "sender_address": "0x21bf47cfe73804095e3e1b25e656ca2ca9787651de3e69c9950943f501e30ce", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x43f3e848709d1347ef8fec1564050ef48b2c4b4b8848686228ca7d48d6b8952", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2a07b11c3d126f88fb09ff5be4b14e9616a0bf43d7548ea8439537934ff15cd", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0xcc672a2555b5c13ff31385e7ab924ba0777ed2528880f3c6563dcb1fcb8c9e", + "0x474ef4cd918a3749a774223918cccd916083f3622269c58a892a49ad545d44d" + ], + "nonce": "0x22", + "sender_address": "0xa91641858e346eee18cdb5985b97a73eedc7fdc92de8fd3cef0b42bdbc00d3", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x12d803efb6b14fe4cbf885e67618f79c9cecc522ecf9549703d3d0f3bb22b19", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2c1aa19b694ce946c474d6fe12552c53e208699384c3824d0300971fdd2288", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x8b47ce73d6bbb0558e8b25787bf63d189144ac35f009309e8a382cdaff5dce", + "0x46b65e2e7a4ddf1f0931b5aa156dacbbb14cbe9404422b20268dfdadf16c8de" + ], + "nonce": "0x2d", + "sender_address": "0x4e17f08446389b5cd0df8953acf3a0f2f6a6b2a80abd762b0101e7c6c103157", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x1f2f2027b73f9ded8c6beab8934566d563a0a0d8b4e0aa80ca0d9e11c24cd90", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x476ed4d8f3194c6441a8b6a3a6611f4df286a30a11d621d61706e5cd597854e", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x30d332ad0e57018f1a7cb53fb4dbc1fdae16061a2e48056f40834904beb3bdc", + "0x5129bbc9c8d3e19ab1fac09c93e0d82ae9a6e2d81453e19e4844af69d1ca839" + ], + "nonce": "0x2c", + "sender_address": "0x71a161b38b1229d32ae61b14a2f44bdc73e6664ff8b3a4184f66abca2735fdf", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x16933ea9c914684bfaacbeefe89927f6ea29267fb0fa4661d0c1f3752530cc9", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xc3b7c3b42d74864f7989003a61626c08849fd91b4f6464b932745555224dd", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1e91301fef1aa0111f5a37a113eec92f1c310fe63f28dae24d63828f6a54b28", + "0x3f451ef46b8c407915bc02747094ca718e16a556673cda20873fcc10d678562" + ], + "nonce": "0x3f", + "sender_address": "0x9b0e317d0bc8a7d797d9a4575dad53eccf44b671c0591c7ba82f5804d12985", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x9fcbb62b9953a3b658b5c63e3610a168a6951943aeb253788558094d935166", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x310ab042ae9a8904f63c4010f53f89a213bb91539403324d5c176905df2386a", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x4e4b1ad42a87a70d6d590cb4c4fdfe993f1f9a18404476344a796aa115f3db0", + "0x61d3fe35cebee270f4170af7ac703ec663fc354378ecee313bef9ae8cb73fcb" + ], + "nonce": "0x2c", + "sender_address": "0x64db11e31dea49ac0945a548fed4b38657452f98f0f29f413062b12873f4afa", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x120f5f0ae30ffad55612dde70c1a0a07af8d89abce94b8b9ea111e52d1e3b0b", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x776f598d4c2650c49f1fa9a1c4121e652b6feba8d701753a39bd44bcb85719e", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1bbc56bfc6f5380fa22f665c549617628f200af2493189c0848e4b89032a91a", + "0x2af11bee1f3626be3c1df5c0567558384c40f8b447b727862daecaa03f513a2" + ], + "nonce": "0x30", + "sender_address": "0x5112b78113307795cf45051a65e9d2b535a236cb8ff8a93b9f4f460357b705b", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x1cc1f97e9284232d34653d58fa8e30a8563801c1730176700f72339367a953d", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x362a854ae7efbc4d08b9c6b4e34105e46cca68c929829262d117f990f32e50b", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x4692fd63311d82575d63aa33bb49a0abd51e3145fd37316d020c99ac0e0871c", + "0x688bd2c1a39e0f647b870f68514d53c2cfa41022afde96aa0cd0d9d4ac29dad" + ], + "nonce": "0x1f", + "sender_address": "0x3b02187b88b06e6993158e652acc2836e15b6f0a95d4abf74891334b462f741", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x319f651f63b9d8c006771fe19839a340c1148d0bfaec7f54b9b7a4d74d95aa2", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x20d0bab6be590f5197ffc051803472e695eb6ffae36adb6a1974a72ecc7289c", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x56c656f395c671b97e8761427e982a312c0dea10237e40b4989f9e68f93a5ba", + "0xbed14490773781583125c9b0af4b85634fcc2b66ece4f7e2b0e5b0e576ac61" + ], + "nonce": "0x29", + "sender_address": "0xba1224bab4ce060da0b89da3294a672ffd0b4c313430b67aa6397510739502", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x3a0c01b4483148f2ed4933cd567c57082963db6fcbd7d2e742428b7485afc43", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2781b1d51a8e2e2b3bddd5ca550d9c02f635ccda46dbc5cbabaaf99df615df", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x611d8f9d248881f5cf23a8a69ce1764c7d7d00ed207fe8b3afcc1bc882b47cb", + "0x644fcbbaef815f66a7adfd1d3e9f49d2ca4e86b2c88ff7ac066691090042128" + ], + "nonce": "0x6b", + "sender_address": "0x500eb16558214463a5c37ac189e1b12443e97a3bdf89ec0c0c4986376bfb00f", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x533ad6924cb390e6745bbe6194f5bad2f5327939799d4090e7d042d7f1f28d3", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4df7753f4f657d63c10941494ebac856c9648c736f396706fe4d5fe673f2912", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x30016d25b06aa6a58d080f1dcf528cef8092e989780ad68a56f134f363605ba", + "0x52dccbcb0f8a2b4657481b8d1a8118fcd91bb453c0d2a0ff7d2ba7bd1fc666d" + ], + "nonce": "0x40", + "sender_address": "0x67e4d23e57541aa5d087eb95ec42bff6a9feadb0ca6dece4b60cb6e9b8c1970", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x6111ee156a2965b9bfe980c405c3cc7e86ec0b536c611cd2d164f9cd50269d2", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5847a37545b923764f761184420769c30c8ec648807bdbdc2007f7ff599aebc", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x1584d79ec993c80d870c214fc3297e2219197b1831e8de6b74e0c3ea23e519d", + "0x564f17ba56bad717191b9ecd5bbf1ef48bdbe9a5a9076efa83ecd9ce5a49f87" + ], + "nonce": "0x48", + "sender_address": "0x143e4f7f4f62e00b9a027fc1d1e3e91fb655bb0c68d152a3bd81bee1ea38471", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x15400564c0d933f03eba288c0fffe3c76b06a5ed792dbe86c53b2a4f48661bc", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x66ae9cb40a20a47596bc290aaaf99e07c827be610499644aa6d6fcb725c398f", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x618afae6800b62559747dfabe2010f14a539b5fe8a79b3ae24beaf57239e840", + "0x62b732bdec7f87322666dadea7cc0f83e90ec2896f83d9a830f61bcdf262d22" + ], + "nonce": "0x5f", + "sender_address": "0x19994bf4904edd8efa817a79fecb999e7c622f2643aea5d54647c0031d724c6", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x6138951e7cea2a9949fa4197aeb29b079cfd99f658cc73c500765da96f2f857", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x37e2884609b45d1ec06b2043dffe99fb58f85243baaecce3ae0fe1fe6f2697a", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x4875fe5528fc63a914c18fabd6e1c4bb70efa245c84fa7d02fe4b490a45367", + "0x1939a2ed7e048c37cc88f6cd69abd8d677db14c514458948481aa076d076bd3" + ], + "nonce": "0x7d", + "sender_address": "0x56ffd7a92298ef76ddbd31936c19c23d29edc2f34207f1b0b5b270aa511d8d5", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x4a2fcc8551fb5e58a54f67c6b1a100cc101bca7b8bc76a506ddbf23caf7495c", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x53e768cf8ccf4c4b125ae529f0050823f067e078f8529f95a932b1e5b2a1a02", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x6a7a49657e7af683812e4e57901b97cf7d4766a27c6bffa7d21138b47d692c5", + "0x252600fc6dd21734b0927298336f724f96df279618aeae8909034b6dfb56506" + ], + "nonce": "0x52", + "sender_address": "0x691301df126b5190e5227b9fd62788723db7b5ea790c4e1da8f85aa6235d46d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x42fc16f540975c3129cdbbe88275cbc6b926a4b183f08ea4802734963f246d1", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x120d051ffd11af42cb251813729cbd5feadad5685b9816de68455e96bff0e75", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x6f356dccfcd0bd9707e1920d3a1cedc147bd52e1a7dacf398f8db8c366753f6", + "0x6bbfabf8175909c8720013245eba39f1906c511ada95d0b24d39b46a859c42c" + ], + "nonce": "0x54", + "sender_address": "0x104745966fa5cd518bab10b5f1a741f4a3435d7d9b060b8a11778cb36fcb574", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x10121ed85e757b09180a9f23c1e0d0dde516b990550639b3e4b8db6f1519db8", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x167445965643cf3511fd7ec067085acf68fe2080c420659597324ce700f2f8e", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x5d81b379e6da6586255b79c3c9d5c5bf853dd4ab9d869c1fceab8e439dff4f6", + "0x66ec2322beb4a7bfeabce011d8d54e717d9a610364339d5086dccf65afc43e3" + ], + "nonce": "0x42", + "sender_address": "0x75eacc62294b96b3a09da916ec3e77bc37fa6ab5176e5bbd28aaf588d74baa2", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x53f5e8f152398f2918082611d71ed7d38f1a895e38a9b627086bbd553152cbe", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4156cbecc1048d42a74297277e70cdfa2e3e87566a554567712236b1674f908", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0xf9f023c336aa775c547e1d03f5f6140043f70708492b6c2735c07b7341741", + "0x6b2069bdebefae4a5bb234f2940cad3ec024802ff8b3a08e474160cdb4b63bc" + ], + "nonce": "0x59", + "sender_address": "0x4540dc7107f1d6a135b575115091ee56ab13c5cb22a6188a2e7fccda0e009a", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x5033cb6a734b81a5033a6ed3367ee6998f70b01e563071d73f27e0dfb59f9a1", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x42e6f653c1f61632af8605be03e119b5808ff0b35153011e28431a574b40603", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x3700543988a46372eac6e324e1a938ba75f46486b0286ac8647d4be3fed8765", + "0x6e40b904af17cf64fa890946b46791e9b8b7ee8eea9246f7d7c7662accf6102" + ], + "nonce": "0x18", + "sender_address": "0x10bd0687cdf260d35210af52a93a9712d51a403868a103e91e491eaf17973cd", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x5b707625bd4195d215fa54e99f1a132db60ac14bc882585a8f51a3e7ddf8367", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x309ecaad1fced9d3c639dbc5fa49e82b5eca514f476d56b8c92355d6797d43c", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x2674699c320692fe79e3de815ba8f2ec911cc62d3c3c68a2518f2498c2b0307", + "0x55cd6507fec9b3b2b50f2132bb9017beeb392544c0ecf15150d016659d92ffa" + ], + "nonce": "0x31", + "sender_address": "0x5112b78113307795cf45051a65e9d2b535a236cb8ff8a93b9f4f460357b705b", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x634dbcc6decf882804e254340b0ccfe9a931e27685121e873979f9256fbd977", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1dde6a5db2fd1f795cb3c21f4e40eec2547e1aaee8cfb96e0e565554bf8ec97", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x124d28844fe82464e2e62cdd6e7c84ed9ff9cf5634828bd77cb8a2b6c3f3aee", + "0x680a03f672897054a75360a1b1b0fe0315a753eec0db228ed1f1416fef3c8b7" + ], + "nonce": "0x35", + "sender_address": "0x11f8473d749770009ec91b9e6f723403f9be76e2c93c62919d14989aa9f343d", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x72ad5c3a194d4dc87ed27b317f00d5762c0362bcb93d7295887e1be8080a555", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4469d51fe173183fa4b330b9151b756d50be2140709ae3b7540cc0ec481d20a", + "version": "0x1", + "max_fee": "0x71afd498d0000", + "signature": [ + "0x3c62c4d5b9a862e9386a18aeff6211e2200c65193a1b3e515cf36878c40223", + "0x1404fab307dca3398dd1d94240c416659af76f712876d95707eb35b6e8619c9" + ], + "nonce": "0x34", + "sender_address": "0x594a6c429ca64604465758db99ef286d5c00d847c8072fec3ff5f0e6b65cf64", + "calldata": [ + "0x1", + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "0x3", + "0x6a592b56049cd8d77e5466efdf21e5efe15fb0c9bf78d0f3928ffd83ba4cfbc", + "0x1", + "0x0" + ], + "type": "INVOKE_FUNCTION" + } + ], + "timestamp": 1721925122, + "sequencer_address": "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "transaction_receipts": [ + { + "execution_status": "SUCCEEDED", + "transaction_index": 0, + "transaction_hash": "0x656a5948f817e538a4ea7ab86dadc1d351db38cb84fc34f43de45959f3d99e8", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3732d673d40f828b64bfc85236012ce2c280d3c936aacfb8104f7d4c8c74bb0", + "0x84bde295632e0884a4da2ac3e59d450a5d1c50628480316202aa9b9258464b", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3732d673d40f828b64bfc85236012ce2c280d3c936aacfb8104f7d4c8c74bb0", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 1, + "transaction_hash": "0x77bf77fdacf7c42c92f88ccdc0e47faabe4fd544f8418880c9aedc9c122cdc8", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4a724a4229813f34e274837684c652260f7621f76e9457942f05cb59fe4469d", + "0x3fadcecafa9e47255cb635659c8998fc57e0ac8a780572a0b9936b4f1947a46", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4a724a4229813f34e274837684c652260f7621f76e9457942f05cb59fe4469d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 2, + "transaction_hash": "0x3b5daa647e491e8fdd09e38901cbf8af8b3f6c4b9bed6c9519b015a8f7e3861", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x594a6c429ca64604465758db99ef286d5c00d847c8072fec3ff5f0e6b65cf64", + "0x56d6364ef2185be391153e866bd87a6a98cda9987f33e37df583c4d2bb3ec00", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x594a6c429ca64604465758db99ef286d5c00d847c8072fec3ff5f0e6b65cf64", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 3, + "transaction_hash": "0x210d258284362c34cb0dd115cd12d5481ee07f424ca2179616e01314ec8520d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1e6da06bc1d877fb69dd4110f38f0e5a206174c57305df51653141381aaaf43", + "0x27cb50f80270672f1fd0351a7abc49289ad9b1f8b34f21c0856f5016d1fdca", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1e6da06bc1d877fb69dd4110f38f0e5a206174c57305df51653141381aaaf43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 4, + "transaction_hash": "0x24f0b8d99ff58e931658c8c9db4db308375bc2ab028f39f3183326da621062b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xe04c9e37787de848379c7898612cde59fbf95ec633deeea3e34e81f1d7df56", + "0x1aa17d35edc3ee0c5b365595db91c1f48b9ad8dfb6a6b2aaa357d2bb01b4dbf", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xe04c9e37787de848379c7898612cde59fbf95ec633deeea3e34e81f1d7df56", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 5, + "transaction_hash": "0x74c851a56435473eeee26bd0f33cfba5bcc2d86676847fe093ee10955b3e41c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x273d24a6e32e7dc5531d7e1d17df2b2f91b7c50da2c9142a78c02de878cdd5f", + "0x73a6c571a923b0de62c56e0ff8d91fa03d1940f12a3044923db283fe7d52bb", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x273d24a6e32e7dc5531d7e1d17df2b2f91b7c50da2c9142a78c02de878cdd5f", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 6, + "transaction_hash": "0x683e8de59fbdda5bf2655a5b56ca713dd4708b653e3ea2d0eed5fec5c782f59", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x275c01d887730e6551ff416d8ef128d2a79afcbc244c776c819aefbea1818bb", + "0x785cea5ab7fc2a8b2ec4de10f787da9afc826be52dba9883becf9351d59d6ff", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x275c01d887730e6551ff416d8ef128d2a79afcbc244c776c819aefbea1818bb", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 7, + "transaction_hash": "0x3ef0b3561556607b1fd19468dfb5bbd66f493dc648d5a14dbda6943bec9481", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x755a7995c1b920ef28e18c4978d73a1c935ce206722c4a8398a1735548abe2d", + "0x29595745aa0c07dcaedb213ff8adda5a32a10184a3f8b67fa81372be9f84176", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x755a7995c1b920ef28e18c4978d73a1c935ce206722c4a8398a1735548abe2d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 8, + "transaction_hash": "0x3821214c3836ba0f4e58181ad0d0212acb5c448265f3f376f18c460531e2256", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x9529b7734deb881652cb0903f26875b01134cb0b091822f85edc697164e7d1", + "0x56c0469f6e05e124f8072a8e40dc278fc4788bc5ab2d9f083b2abae727d51f3", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x9529b7734deb881652cb0903f26875b01134cb0b091822f85edc697164e7d1", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 9, + "transaction_hash": "0xa8d6fa6804a4738c82f9ecb50b61d6ed0c6f0b5d095aa244a83390ebaad6e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x350e280198d66aaecfeeb902b02089e026bc792f5ddfb88b04ebc92218f8fcb", + "0x54c2a598d057bcd861c7d9faaa527f829b5b8055e83dd0d733e5c0a5bcf392b", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x350e280198d66aaecfeeb902b02089e026bc792f5ddfb88b04ebc92218f8fcb", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "ec_op_builtin": 3, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 10, + "transaction_hash": "0x2ed387a8556608d107de35e3314fbafe0bf2871af0b5d2034d92e56c899eaa4", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2655cd6a02dcc25554bdddc055f304c84bb130828e1b162c82958bbc92dfee", + "0x1de3a6279c19fc65001bd37d37156e33b82a892a1620d14a82b8101b5fd2592", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2655cd6a02dcc25554bdddc055f304c84bb130828e1b162c82958bbc92dfee", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 11, + "transaction_hash": "0x6ad74b9ea5705c5b36c899b004acdde0680b383efcd0f4a6e6323aa254dfba5", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x11f8473d749770009ec91b9e6f723403f9be76e2c93c62919d14989aa9f343d", + "0xfa08ecebee06e3f4ab3024d55b2e1a5646a2e8f14054c21a22929c08444bf3", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x11f8473d749770009ec91b9e6f723403f9be76e2c93c62919d14989aa9f343d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 12, + "transaction_hash": "0x584739a828472d302c76113ca2380f66fad7e8db93a5b33bab83b26f57f6192", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x13372661462e9437e3be7442c0bb7f0a28642510ec3879927eebfdaa11c6b64", + "0x478a36fdc297561841694773015a2b756503f499b50d72415e6f92b731cb4e", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x13372661462e9437e3be7442c0bb7f0a28642510ec3879927eebfdaa11c6b64", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 13, + "transaction_hash": "0x2d2ff22e0a1f3d6e43acb5da75ab4a7c9bc6219350953a0c29025271ac64bfe", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6133eb7e32610962c067accae847789b414e52ef69407bcda0dbc4e0562235e", + "0xebcee6a064eb96a9c7046d247d108b5d724749ef666df3a110fd6de085cdbf", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6133eb7e32610962c067accae847789b414e52ef69407bcda0dbc4e0562235e", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 14, + "transaction_hash": "0x79f9d3d4aee74c24d0bd7c6f7ee78bfe5a3553fd6d9b3622c744bfcc0eef189", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x77c28f25bc25bd5207ab10317a8ad029b560f22d77b3492cc910236a2ce1278", + "0x1aaf85715f7f99649113cc8ae476ef19d6aea4626efd7690aba563582eaf876", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x77c28f25bc25bd5207ab10317a8ad029b560f22d77b3492cc910236a2ce1278", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 15, + "transaction_hash": "0x14a53a8cebb83a7bde0734b5ca9687b1345e9933286eb0c6835d0bc6d937d6f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x87b5c2536abec4170cd59c7ad72798d6dd22bf2a77cb5d36cb68876d59d258", + "0x5fdef3d45e4cb5d8c05adf2c05d24d13ceaed27254cd4571beb9f8652cf6a69", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x87b5c2536abec4170cd59c7ad72798d6dd22bf2a77cb5d36cb68876d59d258", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 16, + "transaction_hash": "0x140e311a333d622148eb3ab8aaf0facd38b74b5cffd5b48ce795fbda701009f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3341e828e15b839729b07957cabc597cb6556e61649a0f3bf98578f4b542c9e", + "0x78acb5290012e08fbf2aca15c32d6d3a70d86b02a77568df648068695555a43", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3341e828e15b839729b07957cabc597cb6556e61649a0f3bf98578f4b542c9e", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 17, + "transaction_hash": "0x2c51827298b7e36686f02c0bb9b43cfbe878d5a6332ffa430d63cbbe6993632", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2709f3ff0b285074ffbebef3078d2ccd7d26d0fd7bcd4422d8ceb5e9a6a40ff", + "0x660586392cd851387fa2a005d5e2f8045e4a56d423739c91b5586a3e5e3a271", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2709f3ff0b285074ffbebef3078d2ccd7d26d0fd7bcd4422d8ceb5e9a6a40ff", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 18, + "transaction_hash": "0x13ee0bc0399bec6c2a8970ef0da8e655780a28be5909799db90057686c94c06", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x401930eb5465af9c93f63defae98fa9ededf374a901f24f1210a150923d10f7", + "0x4821573fb5df2b7a3ecb05bef19f7deff03c68c7f1eedcb2245ea5c04fe0dca", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x401930eb5465af9c93f63defae98fa9ededf374a901f24f1210a150923d10f7", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 19, + "transaction_hash": "0x11d22470bc9f43107645caf334e36f403f0b352587ab9515742043b60bd8f41", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x59c0424db8476a9d158e52848aea567f806afcb99141b8ef0a543758db2ce60", + "0x395e2721f3625ef250ef44e1d2f746b331891f2431b3df17d65e0037459a5a3", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x59c0424db8476a9d158e52848aea567f806afcb99141b8ef0a543758db2ce60", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 20, + "transaction_hash": "0x2b5ed98f483bfbbf412eb2ef1b9075a16381f39a8296a951dd55085d6394e8a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xcc4c8e4096a5dc1b161bde1c0207c34f82f4c0195cd428253f1baed6308d5a", + "0x33a0847247d19ba053893b0b31ffe11c0895e97806476fa383f70fe49f2585d", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xcc4c8e4096a5dc1b161bde1c0207c34f82f4c0195cd428253f1baed6308d5a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 21, + "transaction_hash": "0x2dc6f4e98d1aa63ceb803559f287084a84db3665306dd2bc52a1237934a415e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x9a747a346243aff99283048beabf09c2ef25bfbbc8a177945f3a0eab0d3882", + "0x21aeb9df0d8dce0b45960d1644a4d81a83f9a0f8fce69a812f4af05893f411", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x9a747a346243aff99283048beabf09c2ef25bfbbc8a177945f3a0eab0d3882", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 22, + "transaction_hash": "0x378d05a544d7df1fdbd3745204223b47aec76bd3f14f98147c572c206e461d5", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4c37d767a43169fce247342e46438d0bea2b0d7f4efcd4a4686615e20a7c417", + "0x3d958b59764c3d117f7513a53bf399d80f1d454b17db76317bb046b86cacb7f", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4c37d767a43169fce247342e46438d0bea2b0d7f4efcd4a4686615e20a7c417", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 23, + "transaction_hash": "0x2087bac692be145742133fc040cb270807006f0f95272eab6d847d47ee8665b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x7b3f54f0755766215caa99b8ce31250020050ac00bdbdc25bbeb1cf5035388c", + "0x4c05cda4a1d91e09a4ed80dffb64c2c2bb74b62b87e2546185a30d2be76f3db", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x7b3f54f0755766215caa99b8ce31250020050ac00bdbdc25bbeb1cf5035388c", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 24, + "transaction_hash": "0x10119548275e625a700f0cbff8323d03e4cec856dc7b1377bc91fcf42eaddb6", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x45588fdb74513b42789edc109403dc2c2ac13e1a7bbe19a99d9ec45297f7450", + "0x391bc0289a116b822c3c5439091eb16114ed7f83196a06a97f14e0a3c6faa9a", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x45588fdb74513b42789edc109403dc2c2ac13e1a7bbe19a99d9ec45297f7450", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 25, + "transaction_hash": "0x2f4750c62fdd789fb68179b9197946f0faf3501654619ec73b63451323cd6f1", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1bf2463473be14da2f0ba583dfe08a8465ba99771450d67599de126fb58da9d", + "0x7308fe8a4ff72e79142e2c32073bd55e493c4d10864879e2cb7c5a4257224c9", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1bf2463473be14da2f0ba583dfe08a8465ba99771450d67599de126fb58da9d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 26, + "transaction_hash": "0x3effc0e555c49d5e11abef41d6d1182fa5aee5202cc5d89733dce5859330057", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x11e0a33ad5c43d5bd2f7f0ccc2b66f591c6c908910c1f2f377c6f586a458eb0", + "0x37ddc556900ab31026fc6882947787335152a0efe67633af40a7e064fc204ce", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x11e0a33ad5c43d5bd2f7f0ccc2b66f591c6c908910c1f2f377c6f586a458eb0", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 27, + "transaction_hash": "0x33af48b568e7471388d64ce6261f698c4452772dc0950703cd8970326454663", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x768a45776c6e33860c802ea8b6f69170b275d576ff5ea0b6ed54c7b0da443e9", + "0x6eca19ab5a57bffb4a7aa89d27a4ff3a6314c8b4313565de209270ecad579dd", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x768a45776c6e33860c802ea8b6f69170b275d576ff5ea0b6ed54c7b0da443e9", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 28, + "transaction_hash": "0x58f3d4f56d5d73445f9539f87c57604ba1a7558dd89395ad67246e5dbe54ed9", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x7b4ca69e72ffdbb43edb9266a3ce13b385e714e06f6aee2d7f2215b405f6a9a", + "0x452d5bce0e02200bcb5e8b1d306ea71dcf9d2c686c45eb037c69961757c606a", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x7b4ca69e72ffdbb43edb9266a3ce13b385e714e06f6aee2d7f2215b405f6a9a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 29, + "transaction_hash": "0x5efa3153e3cdafc7575fd30d6a32c777a5bdcdf5bc1af3b8e54f46bbb80085e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2ec59285aa2e4cbfefaddc331f3d876f207aed3b028f5b62957b0a464f92918", + "0x4b44dcf7f50ff4eab2271a0826997ce11512d4a9cdd5de9e2cc60cb970c50fd", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2ec59285aa2e4cbfefaddc331f3d876f207aed3b028f5b62957b0a464f92918", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 30, + "transaction_hash": "0x244e0157f6ba489d5470cda9d2bfe76f508267cc6784f059dcda8a997e467b2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x451d8a5c0ea89978d07a24ac6c594e1f0b57ca0a141ba357d8e169fd73151a3", + "0x2dee60c143474cb2205f17ab17b0f8fea5f6a01c86cf8e44b419a456f8c7e1", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x451d8a5c0ea89978d07a24ac6c594e1f0b57ca0a141ba357d8e169fd73151a3", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 31, + "transaction_hash": "0x34a973c5db6d82d636614d3ee29548769516670ff3b8497b0dceaad68ca48d8", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x253b4898f783590539e8ff61faee36bbe6f4022af6f5742fd80ed8a609d8cea", + "0x7a1e29a8753805b7e934bbf1cd9bcb597d2c7b44d2697fd8ac948fd70330263", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x253b4898f783590539e8ff61faee36bbe6f4022af6f5742fd80ed8a609d8cea", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 32, + "transaction_hash": "0x7e0cab05b44a35458c1bc9fd8d968c8c56d131ba02e6a6243993f445ae7a392", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x689549c1747f38f450a34084202987ae19adc553d7ce10c3d5136ed8f768334", + "0x5f1dfed748b556201babf0356c65525210ec3d0ad2e30acf3ad708bd63f136c", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x689549c1747f38f450a34084202987ae19adc553d7ce10c3d5136ed8f768334", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 33, + "transaction_hash": "0x19e04c41b99e60d3a5a95cfbc0127bdf3d63f9547ea862df7303e24cc9f692f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5aa0c4b6d10882180ed3bf70dc5bb99fad462fb926c251329f4c0f997cd5ae9", + "0x37cadeefb58ef26828cb8e74d5a1115388e279d00f5812f7c86ed76372778f0", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5aa0c4b6d10882180ed3bf70dc5bb99fad462fb926c251329f4c0f997cd5ae9", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 34, + "transaction_hash": "0x38515fa92e8ea300fd8d9093f81d2164f73006cc51e105d7538ef303df32d3a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2390a4d84cf00928adf4058ff1f15c8fe615ccaa3ccc1cd9b571d8be7ae806a", + "0x7012059a4cd41f6bf89e7ec7a82ca1d9cd083da0c282138b0b9e8239c386978", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2390a4d84cf00928adf4058ff1f15c8fe615ccaa3ccc1cd9b571d8be7ae806a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 35, + "transaction_hash": "0x44c1cc2a46a949e72c37d323fa5627bbbf0e7f8bbe6f73296773add0bfda3f2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2e19f222ead0bc05ad25d190bf89a63ecabf82f53f7d6bf383d05553acaf123", + "0x365bd268b91dd5dff4d54b7037d0b4b411e3fe15953f83b8a61102ca19b8509", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2e19f222ead0bc05ad25d190bf89a63ecabf82f53f7d6bf383d05553acaf123", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "range_check_builtin": 268, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 36, + "transaction_hash": "0x22af4343899d28a47c93d8c140b2570d0a910596594c51ef6e8dc0548c8f13b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x63e18fe7f3cb5a5194204ba9107a7f425c503c6adef0b686127b14bdeb5d302", + "0x714bed568aa17143177d8c83afb9446a685aa64a5a506e732ce592adbb770e9", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x63e18fe7f3cb5a5194204ba9107a7f425c503c6adef0b686127b14bdeb5d302", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 37, + "transaction_hash": "0x1e3af76a9fb580153dce7f03a0d2e74418c47e301c875fc7862c8201d1ba8bf", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6804962ed2a44ddd07ad2931838b13ebc114b3e7f91b220fee99a5aca96e83b", + "0x74add3c8e5cd6da0b2255c94c86de236951e29660a46815afb91611c872413d", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6804962ed2a44ddd07ad2931838b13ebc114b3e7f91b220fee99a5aca96e83b", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 38, + "transaction_hash": "0x43fc4f993027fe63d1bd05764c997658e07106bed4e01b90eb715491f5481ae", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2333f8254e3d2a9f527f4ed292f0f84b35af2dac6c0e664691ed48c7251ecd", + "0x6d6838f0ffc2d82f7e61221507a767634e9fbf282dc1016133a3b9f8e88943f", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2333f8254e3d2a9f527f4ed292f0f84b35af2dac6c0e664691ed48c7251ecd", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 39, + "transaction_hash": "0x7775ba1c7d8779ea4e3d5fffc509f37c983af9eef79f1d392603a25d5b1eb59", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x200c519983a0104346afba82a2dc4eccd4a4373aa70a13316626e932cb6e58d", + "0x6b1c39ba34d99b5b73eeb4506bff45a05410fe07f14e461967ea8d930e93c8a", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x200c519983a0104346afba82a2dc4eccd4a4373aa70a13316626e932cb6e58d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 40, + "transaction_hash": "0x6ec2c34b64429db15b38e39ee43df93a80a0ef87a5393833cf65cc8a461ac1d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x48cd92c018be0434daffcbcbcd6722aceda59a54ad1efe411fec777f41f8caf", + "0x582f41ed435a925057c9a1580823da6a37565e33ed96136cf70278bb29f38bc", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x48cd92c018be0434daffcbcbcd6722aceda59a54ad1efe411fec777f41f8caf", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 41, + "transaction_hash": "0x78cd795423a239f87e569a05f713ab523ceba55bcc100b428aa145aa4d44d3a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3acd1c7261d5bda1736a89318f1b662d1ff804ba44a0c510cd2832156bc4a6f", + "0x376f58b6945bf8c6f6964e7b514a958da8b3699bd39b3f3ae0484f349f95ce0", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3acd1c7261d5bda1736a89318f1b662d1ff804ba44a0c510cd2832156bc4a6f", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 42, + "transaction_hash": "0x2e6f7749036b34360b234e974d63a51edca243f61d2493d1756aa12ede6dcbe", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2cbd65c97f07d4b0830802c819049523e1b8d30cc0bf8d4246df94854faa766", + "0x7e7661daecb8a0fca7dbd2ca85fb063680c311d0341940fc611cc5e4a6e60c7", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2cbd65c97f07d4b0830802c819049523e1b8d30cc0bf8d4246df94854faa766", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 43, + "transaction_hash": "0x95de0efc6d55c4c762100029aa94cb46dbdb0ee3307eee7bb83a5127fb5554", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5b574462c662b90b11ce7c5750ac6b71d21d5b84c62a6085220557f3e54c14", + "0x5636db2bce3ab1d1df307dee084d35d20eaf66970b2fb83cc12f7247ab1212e", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5b574462c662b90b11ce7c5750ac6b71d21d5b84c62a6085220557f3e54c14", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 44, + "transaction_hash": "0x6c2178115ae217acb8ea704cb08258c873ab13abc296ed16f2979ce25287417", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xe2fce66497ffbc0b04f6d1c27eec2f8da3c4b7ac78a24cab67595644173eed", + "0x7ec48ff00c0e2c1fbacb1c8b6dfe3e0f43a9b196134d0b2132ca973bb1f1bf7", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xe2fce66497ffbc0b04f6d1c27eec2f8da3c4b7ac78a24cab67595644173eed", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "ec_op_builtin": 3, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 45, + "transaction_hash": "0x60dabf1d8850e62b5c6efc27e0c98fbc3d808fe21251bf5d19c55ff5d848754", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x38f5a14f93aa2041cbab6a0a2eb909f268a10be56addc697592c87c68eed875", + "0x2c10d6b259d6fed242b6136fc51c549f0937a44a493367fc86ccc529b462959", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x38f5a14f93aa2041cbab6a0a2eb909f268a10be56addc697592c87c68eed875", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 46, + "transaction_hash": "0x79dc84c42dac21d740ec7e54cad6d88ec6e26233eb932e1a511f7a1e21c53b7", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xc24b71d1cdb836ea2a8a5d364fb9131c44fd4e15d1129f2233e3dbcdfe855c", + "0x1d3462f4184e648b3848f1ebfaf75f4b23742924a725d56bf1cfc9492d0ace9", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xc24b71d1cdb836ea2a8a5d364fb9131c44fd4e15d1129f2233e3dbcdfe855c", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 47, + "transaction_hash": "0x4082594ebf3656e1c4d1145e8ec5ba563e5d63a7868aecdec6a23800a2e259b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6fe8b5ce08982b6ee4321997594e23a9637fe0d45bfd5b5d718695f08b38a72", + "0x7da1dbb3f1942891cc5a5f737ed2d6655b9f15582a05944a6d163dbec3c2aab", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6fe8b5ce08982b6ee4321997594e23a9637fe0d45bfd5b5d718695f08b38a72", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 48, + "transaction_hash": "0xa5f543803af4433ac765c778c1a93d288f3dc468b0babc789517fe9a2002ed", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x13d16147f8cd04b852cfdab7107c6cb96de2bfa2a020b22694e8067c87eaacf", + "0x7809d1fdaf131c0eb339186cdf617d946c86668e50924d13159346e12381e07", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x13d16147f8cd04b852cfdab7107c6cb96de2bfa2a020b22694e8067c87eaacf", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "ec_op_builtin": 3, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 49, + "transaction_hash": "0x143fb91a0731cba83f1482c1030b525ba4e2146c8fa97ecf2ad5b330c222a50", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1b7e553d9d69a2a1fcf9ae3a72bd41bac0ae603acc77c783ae58bf1ba08b80c", + "0x5c18c54ef498819a83ea6596096922c38c1aa9319bb3b03415252db3128f8f8", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1b7e553d9d69a2a1fcf9ae3a72bd41bac0ae603acc77c783ae58bf1ba08b80c", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 50, + "transaction_hash": "0x12cf58ab83665591f01058566c199fbb0ad79be88165b347e3e5dd83fc5d791", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x58643681bd6dbef6bcf4828660ddeec18f3d669b12ec626f14092306fe80e99", + "0x13241a67c8f9d5a88357d3833595cf1e77d517c5b25daed279a81be8f74c8b5", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x58643681bd6dbef6bcf4828660ddeec18f3d669b12ec626f14092306fe80e99", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 51, + "transaction_hash": "0x65f58aa22346b4d4529f3dfc29aac5de2002da9dc86124630edf5716fa3a7bb", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x247d1a8c411f2a456bc8a538fcf23efbd493c71b73f7421a8a4657147a59609", + "0x76245470ac3d77e859be12b55e3b16dc48dfe3e0cc85640d75e3e4894ec8182", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x247d1a8c411f2a456bc8a538fcf23efbd493c71b73f7421a8a4657147a59609", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 52, + "transaction_hash": "0x21ed75413223b673aad90b18352e7e2287c4426f0c607818dfacc211ea242e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1d751f8d431c913531632cdaee1f2598821304cdb401170a91c76f0d5919a9e", + "0x113616d16bee3d91ed9efe44c83cb47d9d9e4b5a0f2c8b5626a4464c645ea9e", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1d751f8d431c913531632cdaee1f2598821304cdb401170a91c76f0d5919a9e", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 53, + "transaction_hash": "0x20e5e2e9b41628cbf962f505b4333b37f4f78a87dcaead10c83b770404577ab", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x49872eb6a8d0b7336f6577bbefdd1667fc0ed6f6df6509a6b52d62048a38fc6", + "0x58b40fae2a6667866875dc98dfd9464fe80c588572dbeca17a0559cd0bfd84", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x49872eb6a8d0b7336f6577bbefdd1667fc0ed6f6df6509a6b52d62048a38fc6", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 54, + "transaction_hash": "0xdea235030568597ee39a993d504ee2ae9c6a9da4a3fc2b794212d261066134", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x78a19562b686d6cca5841bb192c83795cd8a1d9ffde0c0b4a53cb004575818b", + "0x74bdc4dc032e25adc01d136e1ce09aa07b7141e06c4205bcb4895bca4555222", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x78a19562b686d6cca5841bb192c83795cd8a1d9ffde0c0b4a53cb004575818b", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 55, + "transaction_hash": "0x51b0712881b4972ad7118d3bbbf7a91cf9d35a802171e83f5a13a3459b9434f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x40a560ccc59fff23ec01af1087d97bab10001e48e0fb493bec9c4c7e6831cbd", + "0x646ac6558218dc6e64f03be3d4c4e93f2343c859f80a1a86af088452def27e", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x40a560ccc59fff23ec01af1087d97bab10001e48e0fb493bec9c4c7e6831cbd", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 56, + "transaction_hash": "0x3f4b90fa23e982dca8352c6894247d0b8b83286cd8bcd6123b07768446e5d85", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x309e46e00ee3cfb4d1bd1f42267126cfc9b7c501f439a9c60093330c7e0cfa9", + "0x9ff0f306bb54ef1e56f29c4170b8a5b3b4f0472ff0f5b95cc929cbeba0025d", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x309e46e00ee3cfb4d1bd1f42267126cfc9b7c501f439a9c60093330c7e0cfa9", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 57, + "transaction_hash": "0x1e543ed4ece9fb852bf7f1ce95aeed73348db7d0dac21b7beb95e7e05dc39c0", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5826e2098829177a40c6b697dedb6b2c24d0378abb5a0dd870a19aef97cb78c", + "0x663795ae8908c52238228322554f5b9faf14b1a5bb28a7a2bd09d4d416afa03", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5826e2098829177a40c6b697dedb6b2c24d0378abb5a0dd870a19aef97cb78c", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 58, + "transaction_hash": "0x10331f033fbbf1f03f5ec1bf58a2a659d852ce69bcdf9d1feaa6c5815695e18", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x273d24a6e32e7dc5531d7e1d17df2b2f91b7c50da2c9142a78c02de878cdd5f", + "0x7b00a28fb03b564bc74669f017620eea809d6bba3dfa58ca0f67142aa34ea56", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x273d24a6e32e7dc5531d7e1d17df2b2f91b7c50da2c9142a78c02de878cdd5f", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 59, + "transaction_hash": "0x288d178762aa361a1c08b55ae567bf4c18a55c4e3595624d087d938c1968e46", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x9529b7734deb881652cb0903f26875b01134cb0b091822f85edc697164e7d1", + "0x28d2582d04f3f466057b8d051c42f6702e1dc8f7cd6460e8b2b01a96ac05bdc", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x9529b7734deb881652cb0903f26875b01134cb0b091822f85edc697164e7d1", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 60, + "transaction_hash": "0x6b080b77b69390d6b4f4dd16d8a90b75dccd5373b6cd501fc6043100bdc7573", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x350e280198d66aaecfeeb902b02089e026bc792f5ddfb88b04ebc92218f8fcb", + "0x1a8a56658ea7529d7d8bbe74bb4d1ec0d70acc6f87a36252aa6e2921f7d901b", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x350e280198d66aaecfeeb902b02089e026bc792f5ddfb88b04ebc92218f8fcb", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 61, + "transaction_hash": "0x2f068f077a841ffef9a5cfc42f31b7c6683cbeb683048c789aac35d3fc1cdcb", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x87b5c2536abec4170cd59c7ad72798d6dd22bf2a77cb5d36cb68876d59d258", + "0x3df3f563b04bb3c63c1848e73367135e3d4a9f2ed579aca6e40ffa970fb22ab", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x87b5c2536abec4170cd59c7ad72798d6dd22bf2a77cb5d36cb68876d59d258", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 62, + "transaction_hash": "0x6ccbfae2657efa74c7759996c5799744ef3d14a05cbd1c6f82e59cb8d786a8f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x401930eb5465af9c93f63defae98fa9ededf374a901f24f1210a150923d10f7", + "0x8ff02d921c310dedbcb26822102d1a5d85f5225073ef65427843dc208d86b9", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x401930eb5465af9c93f63defae98fa9ededf374a901f24f1210a150923d10f7", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 63, + "transaction_hash": "0x310a30391bd886a88914e488fd5991c05431fcf60027a64e60541ded7ee085", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x56ffd7a92298ef76ddbd31936c19c23d29edc2f34207f1b0b5b270aa511d8d5", + "0x1843d0466921d394ce28999ab4b20c7573aa2d6e48303c9e42fa9bc753910b9", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x56ffd7a92298ef76ddbd31936c19c23d29edc2f34207f1b0b5b270aa511d8d5", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 64, + "transaction_hash": "0x4c13766734f3b71821a4c8805174008572b7d7c2d5885e88a4c7e0b9a1b200", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6075da58eeaeb2c380b51f5115dfcafbafc70ea16a200175ad50937d50cbc3d", + "0x2b8512868598e247c9a1413424980001d50bd00a5a263b484c3b53284f086f0", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6075da58eeaeb2c380b51f5115dfcafbafc70ea16a200175ad50937d50cbc3d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 65, + "transaction_hash": "0x3537235a308efee36346feb8f3bd1bd754f6bcf3961069c796b995f6c087aa7", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4a724a4229813f34e274837684c652260f7621f76e9457942f05cb59fe4469d", + "0x7b1f9cb425a54d10107cf8ea80b7ad02901a30525f1d960d093d5450b3cbbf8", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4a724a4229813f34e274837684c652260f7621f76e9457942f05cb59fe4469d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 66, + "transaction_hash": "0x5121f255931b3faa334a629d7f4fd4faf1aa0454fbea144450a9a6cb3f7fe99", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x755a7995c1b920ef28e18c4978d73a1c935ce206722c4a8398a1735548abe2d", + "0x3d799d2ebf90ad00171bc66ff2faaa38157b08b5e34ae825b44aef6e3b0119e", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x755a7995c1b920ef28e18c4978d73a1c935ce206722c4a8398a1735548abe2d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "ec_op_builtin": 3, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 67, + "transaction_hash": "0x395c2a4f9df24ef4ea8743e643996aebaa1ffb9c9605d837adfcdfdc00eb0df", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1e6da06bc1d877fb69dd4110f38f0e5a206174c57305df51653141381aaaf43", + "0x679273e0e8dae325714657992fc3296ac0ddf637852c46888f6f0ff18f2bddb", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1e6da06bc1d877fb69dd4110f38f0e5a206174c57305df51653141381aaaf43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 68, + "transaction_hash": "0x2672313365f1686250e360ef40af7d8bd7bd96012f602553162af5b2b4ed74f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xe04c9e37787de848379c7898612cde59fbf95ec633deeea3e34e81f1d7df56", + "0x53b2277673108514c99d88fe4cc555fcc03a661af45d1a4b7388b6824b7253d", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xe04c9e37787de848379c7898612cde59fbf95ec633deeea3e34e81f1d7df56", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 69, + "transaction_hash": "0x77c50c779bdb835ab85ae739c4924abac8b7419889592efccd46ad36df6b5b8", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x594a6c429ca64604465758db99ef286d5c00d847c8072fec3ff5f0e6b65cf64", + "0x72c65ce2d24e7c3fb48960296fd401ffde34589508ac9ffe1e1386552a2e005", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x594a6c429ca64604465758db99ef286d5c00d847c8072fec3ff5f0e6b65cf64", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "ec_op_builtin": 3, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 70, + "transaction_hash": "0x491e39f5de84b88472a9b7bdaf9bfcd1d094b05f6358165c15e7cbe5db52f7d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1050347b94b0cbce9abe2ceab62f47257071169a4ab22b4fb67f3a731e0b486", + "0x745fc497aa89c73e48b5bd2f54d20dd0eadb7381a3670168a99d43aea8c6bff", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1050347b94b0cbce9abe2ceab62f47257071169a4ab22b4fb67f3a731e0b486", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 71, + "transaction_hash": "0x591b1d14fd90869133097b265eb22e95d0415a7643f3c8235eb58191619d5d2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x11f8473d749770009ec91b9e6f723403f9be76e2c93c62919d14989aa9f343d", + "0x675fca6eb609c22ba375db97fc717f5284b370be42743195c965bdc2046c666", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x11f8473d749770009ec91b9e6f723403f9be76e2c93c62919d14989aa9f343d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 72, + "transaction_hash": "0x22b7235fdce25cf5495a6ca670254684561d45f536208ca9b6fbc275946c316", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3732d673d40f828b64bfc85236012ce2c280d3c936aacfb8104f7d4c8c74bb0", + "0x386777696ab90e403e83ab4bb5d1986c8a0c66b8c7ffe34e37fef0d2e4113fc", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3732d673d40f828b64bfc85236012ce2c280d3c936aacfb8104f7d4c8c74bb0", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 73, + "transaction_hash": "0x448d7bedca0c5b233f8ab9de5c373b708b6ad3a53c5f81397c36f887fa7cf4c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x691301df126b5190e5227b9fd62788723db7b5ea790c4e1da8f85aa6235d46d", + "0xfbbbca39f675f1d5e3e9e5616b83fde2a586881ab158d1dd35d83e4361ba3c", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x691301df126b5190e5227b9fd62788723db7b5ea790c4e1da8f85aa6235d46d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 74, + "transaction_hash": "0x7ad9b0ef75176a11dc46824b18df70ef14a4f32c2426e682043d92f22a1b061", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x143e4f7f4f62e00b9a027fc1d1e3e91fb655bb0c68d152a3bd81bee1ea38471", + "0x371a30b6c11017e1ad45a5182279dc6354c295c62fb2b62a64a88cf98172075", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x143e4f7f4f62e00b9a027fc1d1e3e91fb655bb0c68d152a3bd81bee1ea38471", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 75, + "transaction_hash": "0x6f14a667249063ca52f3b4b5708fa021ce678edfd8b4a63dc955d5c017d044d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x67e4d23e57541aa5d087eb95ec42bff6a9feadb0ca6dece4b60cb6e9b8c1970", + "0x5aaf885f007d12012021700e9ff303343c63d216f5b1e75725380adbbe78ab1", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x67e4d23e57541aa5d087eb95ec42bff6a9feadb0ca6dece4b60cb6e9b8c1970", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 76, + "transaction_hash": "0x28ac04c7d21a8ae32bafd02384b20c1c13bab56b3d4aec7183934c897b158b7", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x19994bf4904edd8efa817a79fecb999e7c622f2643aea5d54647c0031d724c6", + "0x5510c25011742b06815be6d020576cee83b6f659d11c19a8c9c905400c6b2c0", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x19994bf4904edd8efa817a79fecb999e7c622f2643aea5d54647c0031d724c6", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 77, + "transaction_hash": "0x5aaafbf7d18bad664c093f6204015da223e0a0bd2d2bce648b702ac54a02419", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x104745966fa5cd518bab10b5f1a741f4a3435d7d9b060b8a11778cb36fcb574", + "0x71b52f0a7589b5972d7c37baa0b2056f085f6f6817a287cbdcac978b7dad26c", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x104745966fa5cd518bab10b5f1a741f4a3435d7d9b060b8a11778cb36fcb574", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 78, + "transaction_hash": "0x561b16d059f7e4c3a04650e118b4d995d917ef4cbe1125d4783ce66c81a828f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x75eacc62294b96b3a09da916ec3e77bc37fa6ab5176e5bbd28aaf588d74baa2", + "0xfd6ffd67c2e30772fa28728803ee853b16492ed1e5f72e91847115caf45bd3", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x75eacc62294b96b3a09da916ec3e77bc37fa6ab5176e5bbd28aaf588d74baa2", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 79, + "transaction_hash": "0x370cb459e3b42e03867e6d9c957c5b61c9b34f3771a267c34102135441baec0", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3a70b8ddcec9d026ff4a3fb2024f7815fd47dcf62716107d34a6ae5ee861e0f", + "0x2011b0569bdc4c525bf03e7b55a9365de1cf194249966c88c24707f4d850406", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3a70b8ddcec9d026ff4a3fb2024f7815fd47dcf62716107d34a6ae5ee861e0f", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 80, + "transaction_hash": "0x46df785050a9aea2cbcb90f6ce1cebf789ec5c3d9498656c38a06c29b5ee85b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4540dc7107f1d6a135b575115091ee56ab13c5cb22a6188a2e7fccda0e009a", + "0x4434a91a0b85b4efaad7d9b70ee2ff598a071c9dee4a10b06b3697b671e005a", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4540dc7107f1d6a135b575115091ee56ab13c5cb22a6188a2e7fccda0e009a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 81, + "transaction_hash": "0x59a7de5f6180b1a0bca493ede1fefa263b081efccf50bc2347b94b1877d9dcf", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x500eb16558214463a5c37ac189e1b12443e97a3bdf89ec0c0c4986376bfb00f", + "0x9d05e196b5d20018731b9172e9041f6098014243a3d18d4678f046a28898ea", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x500eb16558214463a5c37ac189e1b12443e97a3bdf89ec0c0c4986376bfb00f", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 82, + "transaction_hash": "0x2224c30ae25741fea63e9474b2f0f057fff88de73e4b248175a1e927b8848", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x72a90329f10cca92a43cb8014ea168049ee3e1b9013638afa026a4671863ca1", + "0x513c58ca8af13ecb6006f00151ecd119cc527dc13ff9e3c56b1c5dd05b84f13", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x72a90329f10cca92a43cb8014ea168049ee3e1b9013638afa026a4671863ca1", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 83, + "transaction_hash": "0x23f51e1b32d65027a8319c74dfb6dd9c738364405e626783ed6ffb1fb3659fb", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1862d76a292338a2634814f9f2ecb90684c52e1c3f600388865df686cf4e54a", + "0x5dc35a6caa3c8b98a96bbe3a21bad65a803c445bfce698aed1e090881d1996a", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1862d76a292338a2634814f9f2ecb90684c52e1c3f600388865df686cf4e54a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 84, + "transaction_hash": "0x2a4e4999fb73d8f3642c3ba7156049cf13cf61252cfe452ffbc8ca602090108", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x41157baa0cd2f7bc1029be65db77a81f97784d3f5aa16f77775d9edbb4cb615", + "0x323d32c8dadf08a0a06268910505e377d4775633e178c6b7d279b931ba0ee35", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x41157baa0cd2f7bc1029be65db77a81f97784d3f5aa16f77775d9edbb4cb615", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 85, + "transaction_hash": "0x1b04a7e6d3428539d6898984bee2c018ac39a8f1d2863e8ce1ddd31a1abd353", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x7707b0c961121ae62f4ef63605121041f2754bb095e682a4544b021aee7e2b3", + "0x3fbcfa51836a171596f2c6bff0edb9e1f0825e9062aed979683b9ba73369117", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x7707b0c961121ae62f4ef63605121041f2754bb095e682a4544b021aee7e2b3", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 86, + "transaction_hash": "0x1524dddf3c3bd1767cac929b8a4058e48526719d7cb0ab1515ba2842a70c107", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x7b3796a71a75e9d55aad1d46057f6facb3040eaea69d255c6cca52c9124e94c", + "0x4683d52b5c5da50d154b9eee85be9b335acfb2edac7f0a46b0d15df18d9034e", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x7b3796a71a75e9d55aad1d46057f6facb3040eaea69d255c6cca52c9124e94c", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 87, + "transaction_hash": "0x28ed4b6a40b7d06a56267d52c73453a2072d27774b33e9b6557eca0dd680fd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x14169d652eaae2abcfa6fda7c924f8da98566eb1f5f9f33fbf09629ae2b2327", + "0x550ebab892aaa6e219c862574b8457989b937ae35453d7508e9977635447920", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x14169d652eaae2abcfa6fda7c924f8da98566eb1f5f9f33fbf09629ae2b2327", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 88, + "transaction_hash": "0x384c56e94c958e8861f371247a7eaf75909687116adcca565ba717a7e7f3b85", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x17fb33a9db88d0e4e3b382dad1733522ec8024647716f463066bedbb490978d", + "0x6d73c6075cb31839dc618587821690839376b005faf20e554c81cf22f638c16", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x17fb33a9db88d0e4e3b382dad1733522ec8024647716f463066bedbb490978d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 89, + "transaction_hash": "0x5b3183a07e55ce39930fd7552f0e083fcca6d15d5632b51974565eca9b85032", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xa0e0c780524827e8f094bf8c199269f06f86309d30c65af0f7dac6968de3c3", + "0x3dec2ebe2f47ae0947ee9693ab01dcdb74a2ac279fc32a35c8b84b722199ccd", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xa0e0c780524827e8f094bf8c199269f06f86309d30c65af0f7dac6968de3c3", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 90, + "transaction_hash": "0x3bb049cc0666a6ceb2be10a9dcd99ad9bb880f63e8bda0b91c99d94fa2a8fb7", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6f4bd4995a3282be1860aca91fe2a498942add440516467aca9da8a1bcf4a41", + "0x1e8bf0e6b000c281bb959a8f22d2f6967c363c699bbe6e924e13e480ada39a2", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6f4bd4995a3282be1860aca91fe2a498942add440516467aca9da8a1bcf4a41", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 91, + "transaction_hash": "0x2bc854f3c7bb9cf902c79b21858c6cf64f2d963c108c7769a25bc312a45ae4f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x524987ff394990a95fa0015a8eb66e61ff9f8626291dedd4f7d50a5f020f797", + "0x51fc3b4494e6dd9bcfc73c0540669a20632f42c4ff5e769294b05804e320770", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x524987ff394990a95fa0015a8eb66e61ff9f8626291dedd4f7d50a5f020f797", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 92, + "transaction_hash": "0x23806ad7f5ff539aff9bc0fb9f4774c42acaddbd4239fcc90349c62a2230d2f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x77845f6d3bebb7c5e30619c191333c3cae03565c2d367fe68bf73dfe1197bb9", + "0x5d3a3de6a7d1237648882bc55b7b7c01ddd528414d015aec205a1bd5631e768", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x77845f6d3bebb7c5e30619c191333c3cae03565c2d367fe68bf73dfe1197bb9", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 93, + "transaction_hash": "0x713489f9ee9e4774505a908308dccc31b5d710c12236fec91cb999ed230fb0c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5032f6bd44ec915ff81e2a450cf2dcd1e28534d804ea9cd38d186dc64c1ce80", + "0x29ee199399a32a98bface17c60ef40c159a7f2ff97157504a83e5474b51399c", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5032f6bd44ec915ff81e2a450cf2dcd1e28534d804ea9cd38d186dc64c1ce80", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 94, + "transaction_hash": "0x26d796ef85fafcbc2020caf8f2f15a47ba57d687974f9100c4a3632c0a4d9bb", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5f34cd49c033df5b7d3da352020e839e88ca2c28025e25f70a6a485d68fc0ea", + "0x129c9dbc05f4bd012b6c8863cd002192ebdd5bb3b6a5d5de450c4291fa27ddb", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5f34cd49c033df5b7d3da352020e839e88ca2c28025e25f70a6a485d68fc0ea", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 95, + "transaction_hash": "0x1d6bf7bd16cfad947146e6cc3abc9243d80bfda51a13d089c843420c9dbb63a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3f9e6e9b92cb5febf0b6b79209a9080a53bc94642b01bfb5fe2b61289f18b2c", + "0x59d6e886bfda7f1764012f766f355478f4b8e3b9d257c9e6b690756f7ec1bc", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3f9e6e9b92cb5febf0b6b79209a9080a53bc94642b01bfb5fe2b61289f18b2c", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 96, + "transaction_hash": "0x388163a57668c9d23bc3ce6cd727deb48551023c407b446cb970d2ba7d7c100", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x46388b18ad7cd2514d20b64c07904b351d313f9b185eb864e9cef8a129a9db0", + "0x4221d59d8749ab42e821d5e81292afc59e324f9d85a9ed23cca1d9be222b465", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x46388b18ad7cd2514d20b64c07904b351d313f9b185eb864e9cef8a129a9db0", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 97, + "transaction_hash": "0x1474614b42c0c2a7f735648cfe9e69c6ba27c13fbba7de971332c6107f87a3e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x385f7376f9614f368023e004031b50167fcd10b85b9cd45ea52b56c7dc2431f", + "0x5f56be4577874ca03db43b658ce1293cb7ff3bed0b469a2b754990f1c162aab", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x385f7376f9614f368023e004031b50167fcd10b85b9cd45ea52b56c7dc2431f", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 98, + "transaction_hash": "0x22419dd35389da8db0763c8807385986fe6aabc0334b627cf3f71724e7c13e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3591c61d75a1d75ee576d70a366138be4c288034605022086e8abd6cc6a282a", + "0x6495a9290f42e2e7134d42fcaad2c01d7770a1e03ac8b235530ddd6a1fa126d", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3591c61d75a1d75ee576d70a366138be4c288034605022086e8abd6cc6a282a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "ec_op_builtin": 3, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 99, + "transaction_hash": "0x1b44b717869617eb64b00d65507005ea9617107340c1e90db801eef4e684651", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6028344c83f128591c5a1905e734c37f6449505087573a54b99891e864ef8f7", + "0x2d60a254144a4a4dd7d7f7c9c657e3d5867207fc1600925e6e9fd6111354b9a", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6028344c83f128591c5a1905e734c37f6449505087573a54b99891e864ef8f7", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 100, + "transaction_hash": "0x6b2b4c33d9a7b0a8f16d04fa27f3039576c11105cd0cd7b3d42e9008faf2a5d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x34535ded79eb990827817ffa6c14988cd29970cd3cb4d5943684335f8360720", + "0x114f3f20c5050e8f45084e50db4835ab12a8c40a1d827b0ea6789cb1915542c", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x34535ded79eb990827817ffa6c14988cd29970cd3cb4d5943684335f8360720", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 101, + "transaction_hash": "0x5999e0a6edffdcdd21f41ff9e7bdb7d2d573c474d07bc890654e9c7dfe7b694", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5ea1cbe943d1a798d02899e2b74b7626b315d2b81febf7b8adf33d8e57dc91", + "0x735c98e557704fffcd219c694dc8b9efad6a56d0d5c1c7ccf9f2cc70e1846", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5ea1cbe943d1a798d02899e2b74b7626b315d2b81febf7b8adf33d8e57dc91", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 102, + "transaction_hash": "0x21f1dcefe9a6cf9dabcae1a5e5e5da5d1415d5f7004a10729d4c13f859af8b0", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1a06329b78575c630b343cf559544f84241bc44f3c63bfb013678aa8145215d", + "0xd6fc49fcb2516cd6a882f3aab1c0e239d3619bf91f817373e3ecd462ff862f", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1a06329b78575c630b343cf559544f84241bc44f3c63bfb013678aa8145215d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 103, + "transaction_hash": "0x62ae74ef5c8daab02aff07a12a7c7a8a9479eb7eab545449f78ef0e33b89547", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x12b01545b7bbd20fcdffb03575a25cad0b30698ad7ad4781be1221f554f4741", + "0x6b0d9e9e62d6bcadf1eb70e5a3e69f8748763ec128d65fffa4bad2fca590857", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x12b01545b7bbd20fcdffb03575a25cad0b30698ad7ad4781be1221f554f4741", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 104, + "transaction_hash": "0x5b3cdd91022ca02e6c0cc0f1cd1470e1299f6015725d514fb700450548869cd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x12e4dfa71ee52225ff301eb69e2fc08fbc001b0821578be07648a7ea493021f", + "0x3c74d8d103a37010c3628756b056e1795098b1248692e890d4b973c5c572193", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x12e4dfa71ee52225ff301eb69e2fc08fbc001b0821578be07648a7ea493021f", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 105, + "transaction_hash": "0x1a2ef6245f64b5d87d3227ec399c0ada923753931b2f2c6003eb6b060848383", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3dda73cf3d5558a6e785f54cc6e7207b0173f0cc3cce20f64992566ee734d7a", + "0x73827b38945fcb8a1852327a0db3c1341f498e66ddf45e917b43263beb65ea5", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3dda73cf3d5558a6e785f54cc6e7207b0173f0cc3cce20f64992566ee734d7a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 106, + "transaction_hash": "0x178861bfced753d5c29ff84b42c34098a4a617aa9ebe3d8515ab0e456f153bf", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6ae831431e8fa2128b079844633e084604422d63b7f1ad1a79fb81e37447463", + "0x259d0346def6321e772dcc7960478b28b60686f87fdf357b158d338c32d0d9", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6ae831431e8fa2128b079844633e084604422d63b7f1ad1a79fb81e37447463", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 107, + "transaction_hash": "0x143f059f6772efeaa0eee19434ae43600d48b94112cf2125e075853d794b4ad", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4bad3730634830da8c2cea36bc8c0103c47a074f259edd5aba3852e1245a9bc", + "0x5b45d83ead5c4b5061ffeb3b3169ef51c2c9635cfa471633b91e3577e6ddab", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4bad3730634830da8c2cea36bc8c0103c47a074f259edd5aba3852e1245a9bc", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 108, + "transaction_hash": "0x4379a6a0466e0102b5db78269b03bbcd84df24a35212995944d19ff921f80a0", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x7e83c177ff630265eda312465978a679b25f8eb253c000a925fa5f42bb233fe", + "0x3e5259b886cba48b86d25215a305f4fd0f3892cfd3e4480287748c691571d30", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x7e83c177ff630265eda312465978a679b25f8eb253c000a925fa5f42bb233fe", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 109, + "transaction_hash": "0xeeb3e52134cfa9b421260478bc2af4b896c2c7deeffc7c20ae9462ddef86f2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1835c7d07311634fe0abc0e12897de6de8420f56fc0e9e1cf0550a71c31f7da", + "0xfa6ef9fbacebf91627a6d6e9298caae7354b63378b7c59f36de9cefd32c708", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1835c7d07311634fe0abc0e12897de6de8420f56fc0e9e1cf0550a71c31f7da", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 110, + "transaction_hash": "0x1508bea8d25546169759b20e5e576daf060ddfde0ba4699cfad13bf46ae47d6", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1d00cc561c943b49f5f2bac27591530a55970c3d0716317ad42b78cd6fb469f", + "0x7522d5283ed7b9aced7261bfb91f73fb0bcc5afc05e0ad3e25e0efae03f4bc", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1d00cc561c943b49f5f2bac27591530a55970c3d0716317ad42b78cd6fb469f", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 111, + "transaction_hash": "0x3cc7a2bc717ddb4c64358ddd4b0338ef71338a29e486b4df466bd1acaa6d87a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5826e2098829177a40c6b697dedb6b2c24d0378abb5a0dd870a19aef97cb78c", + "0x150387eafe5fb0a8725f2fa1b3d450c886b3f93698fb2ea579f55c829b37621", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5826e2098829177a40c6b697dedb6b2c24d0378abb5a0dd870a19aef97cb78c", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 112, + "transaction_hash": "0x4f22683162858d005fcad495620d4194b634c2ee9be1f11f9e91348ebfb7d8d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x309e46e00ee3cfb4d1bd1f42267126cfc9b7c501f439a9c60093330c7e0cfa9", + "0x1cb41f8efb81bfde450ffece8927952542bffcc4956c917dcd099a5c2f334f7", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x309e46e00ee3cfb4d1bd1f42267126cfc9b7c501f439a9c60093330c7e0cfa9", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 113, + "transaction_hash": "0x103381a88f800582d200e7cb4239c558992f8e2107eac50570f48b29784ae4d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x78a19562b686d6cca5841bb192c83795cd8a1d9ffde0c0b4a53cb004575818b", + "0x838b9210d52ff4e227d6519041237881b96e3779057801451ee13266ef0a10", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x78a19562b686d6cca5841bb192c83795cd8a1d9ffde0c0b4a53cb004575818b", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "range_check_builtin": 268, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 114, + "transaction_hash": "0x2e0d84b614c67b7d788a546f04e9314735d19e8af7648bd980f4cc4d5ecf1f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x247d1a8c411f2a456bc8a538fcf23efbd493c71b73f7421a8a4657147a59609", + "0x3ef4f36ea03fa22b3ace1944e9c30d2d3db1ba1b829803ccdbc8fb10f91876a", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x247d1a8c411f2a456bc8a538fcf23efbd493c71b73f7421a8a4657147a59609", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 115, + "transaction_hash": "0x4cc74e3a3b93e8869d01b42c7b0ba4377163705e2927d390bc8825902a0cee6", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1d751f8d431c913531632cdaee1f2598821304cdb401170a91c76f0d5919a9e", + "0x44dce543187f9da87ac682c03fe29e16b8ca948c724d6bd270aca20346cf91c", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1d751f8d431c913531632cdaee1f2598821304cdb401170a91c76f0d5919a9e", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 116, + "transaction_hash": "0x631a91925e1e7a9a0985738ae29f3afd3b0816171df5ad247f7559ddcdc4f8", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x58643681bd6dbef6bcf4828660ddeec18f3d669b12ec626f14092306fe80e99", + "0x239b57eb82dbca89f0a16cda7a9d9a825804f7b8316bf130bcffc2af7525f42", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x58643681bd6dbef6bcf4828660ddeec18f3d669b12ec626f14092306fe80e99", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "range_check_builtin": 268, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 117, + "transaction_hash": "0x37f798b39deb534b7a9888d76afeebe76685035e628c696a0bf96e27b8ed72f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x49872eb6a8d0b7336f6577bbefdd1667fc0ed6f6df6509a6b52d62048a38fc6", + "0x358369a82c0c27912027bd581fefa76774fd3085af46dfc66c40fb8c1ee773d", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x49872eb6a8d0b7336f6577bbefdd1667fc0ed6f6df6509a6b52d62048a38fc6", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 118, + "transaction_hash": "0x4ab4bb1f5fc4df7264f57a0ebe46ac3ac66e1b1524bbe6b401dbc27484be99", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x40a560ccc59fff23ec01af1087d97bab10001e48e0fb493bec9c4c7e6831cbd", + "0x45c790388f6d017a4821c1f51a92e9e3146fc2d421346457728abc6b545668d", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x40a560ccc59fff23ec01af1087d97bab10001e48e0fb493bec9c4c7e6831cbd", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 119, + "transaction_hash": "0x5b277f8d91aeb7da62ae9545abdb44c154ceb0a09659a84f5ae2e3a0acd7ca", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3c875403ce3066337b984c541ecb4f47557e421e859816e65bc85a402abeda9", + "0x15cd63dfe84340f7816ffafd37fd253d97598749fe60dd6fd002b2f2cfe8cfe", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3c875403ce3066337b984c541ecb4f47557e421e859816e65bc85a402abeda9", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 120, + "transaction_hash": "0x2132548ebbde369d32a37a82f8fc2d74278f0b73b166818bbf03927d4dabf14", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6bf239cfd8ddfb4edacc070a23929b9b2522585548656ed1de1033d1765b25c", + "0x47899478e2418f2e085ff45c6880a2a9549ff19bb2d7ea5ee46388b2f439562", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6bf239cfd8ddfb4edacc070a23929b9b2522585548656ed1de1033d1765b25c", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 121, + "transaction_hash": "0x2ee469b6fcca6cbcec46c7c11c2a701a1f0926be880b71471d07d3d6aa430fe", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x20f2f2964d6cb9859f1d264e759fe089eec481f131defb7137878c36478bc9", + "0x4c3479ccb311fdaf337dadd954d9ce03548472bf8b4bc32c6475043a99dea58", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x20f2f2964d6cb9859f1d264e759fe089eec481f131defb7137878c36478bc9", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 122, + "transaction_hash": "0x496b37055585ed59bd991a954f7f3c950a6c4a0117d45e8831fcd544d9b278a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5c4f4e4ae30a422a1b735b38c52bdf5739ad64b2f95492ab6ccd93b4f6be2df", + "0x7a4f52d39ab901cbf7d2ead756cb3a8516110eeb8f4f958ec01f72674df76ab", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5c4f4e4ae30a422a1b735b38c52bdf5739ad64b2f95492ab6ccd93b4f6be2df", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 123, + "transaction_hash": "0x1a19f0db9a0d4fa69a0df59a0982b64dd9c53c0034d8b4f16d6912e564d87de", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x33128bd86065b89665dccf20b8224238a3f169cc2aa63ea3de1d4e1b4431db0", + "0x3baf4487184344596cb078af8730466937df2d938ff56688442c9a146e682da", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x33128bd86065b89665dccf20b8224238a3f169cc2aa63ea3de1d4e1b4431db0", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 124, + "transaction_hash": "0x3aba052a7ac31196b103efea508299044c4987be17ed9db4a142ad205a3be2b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1c23816c01bfbd90fd57873025b4d5b86ee2cccfbad90d3a7fa25dc569638cf", + "0x11e5e35e8075473dfab70566e0f9e071c7d1f5debcc8fc79c0bd374ea610681", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1c23816c01bfbd90fd57873025b4d5b86ee2cccfbad90d3a7fa25dc569638cf", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 125, + "transaction_hash": "0x1cdbbd431edd81c19c08d52b2ca047b39bb9773a8c9332ad91e3508ae8ebb7d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x40de1d323a5870a9b1011b1476bfd58f92a35ba59b1f9f3c69cb083fcba122a", + "0x786a7b8e6c19a882ee918202201abffbd1369d30ed694406da52c3e615b0d32", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x40de1d323a5870a9b1011b1476bfd58f92a35ba59b1f9f3c69cb083fcba122a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 126, + "transaction_hash": "0x7c0661b8022ccd16b2ea405f20b4fb72e2d458e7807952c462e266fb0d79325", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x51d568676ce46d5f9a0d7c23c7c72cdb8536f38d74b3138f3cb9acae98b074d", + "0x5bca2c958cea7ac17e1d4dae90155d11a911a917f91a486ed5013c9dad2088f", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x51d568676ce46d5f9a0d7c23c7c72cdb8536f38d74b3138f3cb9acae98b074d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 127, + "transaction_hash": "0x3cdf111085aa25cf5bb06aaa4506bd17aea4648d790264a88b205fe7d4f2bad", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2ec71fc858681fa0cca225185a86060926a9bfd338d749f256910d415770d1d", + "0x2bd2704ade8daf80d330f575446499b44783a6cc21e3ff95de2aad82648e491", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2ec71fc858681fa0cca225185a86060926a9bfd338d749f256910d415770d1d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 128, + "transaction_hash": "0x5d426134165dfbc7943021571e8b9f1014c1cc368c2ca2456b9c0f26fd547a3", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5726d58c2c6bc370074cb67581d03cab05e1304365ca0ee9f4ebf3faade40c4", + "0x397bb315d341edb330605784790faf476d4162ca5ce07d269ef8f39aa5f8401", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5726d58c2c6bc370074cb67581d03cab05e1304365ca0ee9f4ebf3faade40c4", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 129, + "transaction_hash": "0x5280f3167d771ca99febce9e6dd60705a0db2f5ad65f8aa839add5ce23221f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x73f94dad20c07abaa57a278d02d169b48882bce673c421251686075a986db83", + "0x20be5a51198a030c08ef3886a5b47661a773b186f4407f3f2d3c2252828e80b", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x73f94dad20c07abaa57a278d02d169b48882bce673c421251686075a986db83", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 130, + "transaction_hash": "0x173ae09604a69ccf8c0b4699f38a3e20cd03f3eec2c817ca537d17a9084b266", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x350e280198d66aaecfeeb902b02089e026bc792f5ddfb88b04ebc92218f8fcb", + "0xff9247899738818e2b47acde31012975dfa023f5c860a19110dcd8d17af54f", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x350e280198d66aaecfeeb902b02089e026bc792f5ddfb88b04ebc92218f8fcb", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 131, + "transaction_hash": "0x5b718ec976fbe5a287430bac79254dff399b4d06cf7b40952d02dd37107575", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x273d24a6e32e7dc5531d7e1d17df2b2f91b7c50da2c9142a78c02de878cdd5f", + "0x31293244a17ef815b86baaf64c80c6885f900c74c51fcf57512d7d0a16beeb6", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x273d24a6e32e7dc5531d7e1d17df2b2f91b7c50da2c9142a78c02de878cdd5f", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 132, + "transaction_hash": "0x25014de16daf7e0b7616c884fc0f7f347bd4fbc0581ceb8f8fafb62201cf08b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x87b5c2536abec4170cd59c7ad72798d6dd22bf2a77cb5d36cb68876d59d258", + "0x177bb3f2d216e4b5fbd795644ed4f764e4d44e88c6baec669dd7c961a0d5459", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x87b5c2536abec4170cd59c7ad72798d6dd22bf2a77cb5d36cb68876d59d258", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 133, + "transaction_hash": "0x7173b79f089b5c3a04387f24fc50e335cbf17519153cb96b1d76ddb2b963b62", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1050347b94b0cbce9abe2ceab62f47257071169a4ab22b4fb67f3a731e0b486", + "0x78c79109fb270aedd672f34ee762cbb13182eac88902e83dba9ff8067ccaff5", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1050347b94b0cbce9abe2ceab62f47257071169a4ab22b4fb67f3a731e0b486", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 134, + "transaction_hash": "0x4c2af11345d1c14e61e42cd6f9aaf30e3198742ca02fe80ff8779b6f4c3529a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x401930eb5465af9c93f63defae98fa9ededf374a901f24f1210a150923d10f7", + "0x553865b8c00b13964c2ca979ab644e5a78698d1a432dd79a139212edc2a3bb1", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x401930eb5465af9c93f63defae98fa9ededf374a901f24f1210a150923d10f7", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 135, + "transaction_hash": "0x73cb474823be71fa131985a878728582720db457b0b93a88510bd5117473314", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xd9def9409244513635be50767308e1c80a10bb5d116efdf78b9de36620bcbb", + "0x23a84f6c04e12e95156f3a95bba5fb937962497684343aa8b383e0eb9544b4b", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xd9def9409244513635be50767308e1c80a10bb5d116efdf78b9de36620bcbb", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 136, + "transaction_hash": "0x3e449ca641cd0bd1ff73c932f69202871c2ad2543b8bc11cdad527b74f8d0cf", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x11f8473d749770009ec91b9e6f723403f9be76e2c93c62919d14989aa9f343d", + "0x5b356f0bdc58baca5e3b09d7924a9c149c04018ac44c4b9ac8ea8e909f273e2", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x11f8473d749770009ec91b9e6f723403f9be76e2c93c62919d14989aa9f343d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 137, + "transaction_hash": "0x6502bcfbdc0ff581dd427b3352cd5612647f4423496dea5a86d5bc58c549f40", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x755a7995c1b920ef28e18c4978d73a1c935ce206722c4a8398a1735548abe2d", + "0x448352a22b7d13d447579abd96b903bd4775e3706adb4c849b27ad8c35920b3", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x755a7995c1b920ef28e18c4978d73a1c935ce206722c4a8398a1735548abe2d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 138, + "transaction_hash": "0x12201b7537453148e286b8db7ae963c8caa2c97546dde9e4b3bfdd68479bdb8", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x594a6c429ca64604465758db99ef286d5c00d847c8072fec3ff5f0e6b65cf64", + "0x4ff825824c14191fb3ab092af3398dc43fac2f39b6bedc38e9a59eb1830353b", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x594a6c429ca64604465758db99ef286d5c00d847c8072fec3ff5f0e6b65cf64", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 139, + "transaction_hash": "0x71b3cb789db36c1eb5c123ffa8022b7636e0ff532a66817ba4aa40becb87600", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x9529b7734deb881652cb0903f26875b01134cb0b091822f85edc697164e7d1", + "0x98a0c24e9409c975c4d00b538786fcef3e6917c87c2bc4f6fa6f0030d2c0ed", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x9529b7734deb881652cb0903f26875b01134cb0b091822f85edc697164e7d1", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 140, + "transaction_hash": "0x53beaccdfa5cb43c14a8906db9bd6617ab60afea57dba13c655d5c98df3a4ce", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1e6da06bc1d877fb69dd4110f38f0e5a206174c57305df51653141381aaaf43", + "0xe5fb2d5857d353e096b22ef0f8e9f99ff95b806e02a100de157a10b9f0dbe0", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1e6da06bc1d877fb69dd4110f38f0e5a206174c57305df51653141381aaaf43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 141, + "transaction_hash": "0x67102dba80499dbb2d003d8a9788624e66850545e06f8161e0c1ee67865e8fd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xe04c9e37787de848379c7898612cde59fbf95ec633deeea3e34e81f1d7df56", + "0x4dc90cb95f997f48e57659a8b967e8e274efc50efaa44e151d3f06d5c09888d", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xe04c9e37787de848379c7898612cde59fbf95ec633deeea3e34e81f1d7df56", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 142, + "transaction_hash": "0x839e5b87c654d05241a6b948abfc731d9769330040b8c51152b0333bfa7a62", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4a724a4229813f34e274837684c652260f7621f76e9457942f05cb59fe4469d", + "0x2b23e674ac1780db2739b1120bfa338a1f5f70a1e2f504c420e3b36e67d2e7e", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4a724a4229813f34e274837684c652260f7621f76e9457942f05cb59fe4469d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 143, + "transaction_hash": "0x6044face7ce6c8aa9f8a9dff0ad8404e0b7e94b51b2f0ab18f4839ba48ae63b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3732d673d40f828b64bfc85236012ce2c280d3c936aacfb8104f7d4c8c74bb0", + "0x5084d51029195f1ad25cdc2f9dc1ca7a6b852a0403d64cedcbea6823ad60406", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3732d673d40f828b64bfc85236012ce2c280d3c936aacfb8104f7d4c8c74bb0", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 144, + "transaction_hash": "0x2b4211bb8fe9826cd759f600ace0d683928c5d01828673cb636c5960fccd33c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x10bd0687cdf260d35210af52a93a9712d51a403868a103e91e491eaf17973cd", + "0x7f4b923ceb59db39ea45e8bc509ee21a794f6bf519195843196383a7f41c733", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x10bd0687cdf260d35210af52a93a9712d51a403868a103e91e491eaf17973cd", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 145, + "transaction_hash": "0x76df89475d06c33ecdf3388123641a370c1966530b3368fcba532f5c0968065", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6c55ba1f4efe13d3eb06441582c3aef616542be06363571d970ecbceb893de2", + "0xe84b189ad866d825e7acba6c35b1896bbe63af2c978c252b560095dd624475", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6c55ba1f4efe13d3eb06441582c3aef616542be06363571d970ecbceb893de2", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 146, + "transaction_hash": "0x3602546a1a075eeee06156aaf95e563c67fa62f9a49aac2462192b76a714bcf", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6075da58eeaeb2c380b51f5115dfcafbafc70ea16a200175ad50937d50cbc3d", + "0x2469bb3a01d85d5c494b4ec4b395892aa1471d39f9b8ee02e867c22d9fbc9e0", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6075da58eeaeb2c380b51f5115dfcafbafc70ea16a200175ad50937d50cbc3d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 147, + "transaction_hash": "0x3dd182a9cfeab84580ea77bc8302af732566c692d5f2bf3a744e0831834985", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x79b0d5fe892237bcdc0979892a9b2790f23781d41aaa8adf351c7980c8b65", + "0x4d28aeb4a73825e8e220be72fdc88a1c7f3e3a07f7b11b5266e4ce09c5d4e45", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x79b0d5fe892237bcdc0979892a9b2790f23781d41aaa8adf351c7980c8b65", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 148, + "transaction_hash": "0x3e06fbeb0a6fb7993e15ded8434b8c93c040ef49a47ab53c027d4bd61f6ebb6", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6be5a0624172c2f0a3d116d03a861375e023f340caaa6363854c9ae4a460f5", + "0xb83de952bc6d08a2717450a62dc63d8b7388be348c34d35e02a4e721fffebe", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6be5a0624172c2f0a3d116d03a861375e023f340caaa6363854c9ae4a460f5", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 149, + "transaction_hash": "0x57b506804275c73627fc751672a4f05f6cd1dc4aa7d63b80d7ad0e693fa421f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6a4213ccb648d4cc272690144073efdb184bc5c0253f798973666761b231827", + "0x15bdbe09c4994bcbf777fa5e7a96f75ca7f48ae9adc8bb4729b9eebb8421dd4", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6a4213ccb648d4cc272690144073efdb184bc5c0253f798973666761b231827", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 150, + "transaction_hash": "0x7404ba50c6ab74de5a464496aebb760bfe9d057f67b0f10ffd238266a1929c5", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2f50b3c524482dfd39d8236ea2c114df8d8fd907711584de81eddbeca7b7921", + "0x1ce326645bad9e0e6a403e59fd425b44228ebd91fbd4bc859ef3931db28350e", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2f50b3c524482dfd39d8236ea2c114df8d8fd907711584de81eddbeca7b7921", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "range_check_builtin": 268, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 151, + "transaction_hash": "0x6336498d27b2d2c2498092d18e81fe90a6f910265fd73032691404ba01c97c2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6d7caa4818f9d3d4fcc09f69e5c776ad60978fa701d99a6c5a0c70b7b25e1d5", + "0x52a42025cf1191517e1d6320decbcbd29a0e9b4d6d541642d236c94a1129b28", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x6d7caa4818f9d3d4fcc09f69e5c776ad60978fa701d99a6c5a0c70b7b25e1d5", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 152, + "transaction_hash": "0x25a369e7d198733982640d84abb9231e0370233df715cb883e0ca96fbf3c8b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x46e53968a2b5fe68b9b0d6ba6d8a475211b845759822e9161e3cea1afbb1c5f", + "0x243276cffa081d5820d2cd5957559e7c9079b04ac9ccdf89a98ae76cd9e336", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x46e53968a2b5fe68b9b0d6ba6d8a475211b845759822e9161e3cea1afbb1c5f", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 153, + "transaction_hash": "0x7d975576bd417092e8a4240a9dd394936c0403ed924492543257a71161efe", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x47666c862e5e3db0e5a43aafd2d1ba5b1e8eb498ea5b42ebc6cd01ee3a16609", + "0x53ce509fa10a89f8e84c1a757c6ebb9f619c88fcf6cf4cf7f3a0dffdc98fc38", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x47666c862e5e3db0e5a43aafd2d1ba5b1e8eb498ea5b42ebc6cd01ee3a16609", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 154, + "transaction_hash": "0x4bce71a291a23339f70b0364cc38ad842f590f915cfee77388a781d2b7463e0", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2b24cb0ac3991cb6362f305bb241e0e874784d44e89d08859536270a29a3799", + "0x33c72c1fc6bdde04aa50b65cfd0942f84e09105f402e4007212e62076abf042", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x2b24cb0ac3991cb6362f305bb241e0e874784d44e89d08859536270a29a3799", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 155, + "transaction_hash": "0x247e7f82d7c0dc9c7d932adf83b1043c6065d704af574587481c2423733d3ad", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x43438d30a486df0100bfb40f7dddbdcf9b9c21f2079ae785a22b2816d09d842", + "0x77649160825a0fa1efcc286ccad2f293f8188372b5c1417e6cab143f15ce0a2", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x43438d30a486df0100bfb40f7dddbdcf9b9c21f2079ae785a22b2816d09d842", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 156, + "transaction_hash": "0x1c08dce6167fb92654cdd8859b7a497ba1bb8822bc9c65b0d06af4e2e6236e1", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x708610e23e4fff8c6434eefadcc284215b0ca10c5b2530d784a547ab7ba6c1e", + "0x66ffeea403d80b5ce56f240cc1dc71f29de7ddcc678ffb2243b83781fe203c0", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x708610e23e4fff8c6434eefadcc284215b0ca10c5b2530d784a547ab7ba6c1e", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 157, + "transaction_hash": "0x384448c90680c595d337a129ea224d736e633086d0658f834487de73e081146", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x73ea2bf4f84c4ef4f95f6a5a03af3317277deb63039330d881ea20e33d0738c", + "0x651234373645c402aa2545fa765084ad73e170f52563a3412e7e629a6aa955", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x73ea2bf4f84c4ef4f95f6a5a03af3317277deb63039330d881ea20e33d0738c", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 158, + "transaction_hash": "0x39a051c998a67dba681a4d4b62ce5566b01c50d591c8d8fbde29e7cb9cade5d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4c7fbf3010747ded03b3cbd0a8bfb888cdeb9080a06f5d0d1e32e36473ac5ac", + "0x3e1e01b344a4bfa097e226570fbc97e94a202e1bff7621f5ffd2b614ce97d13", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4c7fbf3010747ded03b3cbd0a8bfb888cdeb9080a06f5d0d1e32e36473ac5ac", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 159, + "transaction_hash": "0x125beb29b36da82b913ca9c974555a5cbbd504257b65be41118fa2f9b1ebbcc", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x688e05ac8427736a7bc419f86ad7a90ea6157d2d82ed30f09149b18c97a2391", + "0x44d6b751b21d24bb3b3e4acc9940f62f41450f3bd30339394931aba3d00c6e9", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x688e05ac8427736a7bc419f86ad7a90ea6157d2d82ed30f09149b18c97a2391", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 160, + "transaction_hash": "0x4d066bd10fef687175b64486069240b99e9efc085d29f66b8430e8d352d9151", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x57dfd6da6e2abc9b831a908fe8d4ef45fe2830c3ea287ec2341c4bd88046574", + "0x2b8806c5526bf682c03a69f6cfa4a9c95414e5e315fb1f91fa3440a5d78264e", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x57dfd6da6e2abc9b831a908fe8d4ef45fe2830c3ea287ec2341c4bd88046574", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 161, + "transaction_hash": "0xe6dd45f7f047eb5b9a0b48d75e53328166b15a65966a192583fb9597907f04", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x66a981c57e4253cf8d24eaaed89f7719c9a697be3b41a0371b24c8fc00a1cad", + "0x3d1b043f11316ab21133bd66d438d2bc801304d810be7f0a7f9bf7635fd7d12", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x66a981c57e4253cf8d24eaaed89f7719c9a697be3b41a0371b24c8fc00a1cad", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 162, + "transaction_hash": "0x310ce6a7234f51d7a7b3e5c43d230ce21389730a9d5287ba357e31279cd1303", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x36b39a015dc8b78a90ebc74d8f98a7b5a6cdc718118014291966650d6df65", + "0x425b622d8284bddba9a4ab7266daacda17a1877430ed52a3f69892853648d4", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x36b39a015dc8b78a90ebc74d8f98a7b5a6cdc718118014291966650d6df65", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "range_check_builtin": 268, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 163, + "transaction_hash": "0x1b7d100fc1a90371e9e64e943d5369eb7bd12b54aa034a983fa81213a2bbea7", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3fd8c55203651e0b3c6cac235b8b489b0a302731691e1c4b860b7dc41a6d6be", + "0xe4072b51b39c9eed5d3f6a4df783d4824e7655b471e878e1a03fad678bccf2", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3fd8c55203651e0b3c6cac235b8b489b0a302731691e1c4b860b7dc41a6d6be", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 164, + "transaction_hash": "0x23591380c2f899686689d0ea209b3586aa27f7f644ac06d3efb376b9379a8fb", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x22ccb773bb8c536d70c99ad4be229b6425be5e8014a1330c72495760d2f4b60", + "0x3a120f0603f880eb3ebcf2f51ad8b510ff45c52e2b19397487eb59f7d215384", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x22ccb773bb8c536d70c99ad4be229b6425be5e8014a1330c72495760d2f4b60", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 165, + "transaction_hash": "0x6aa9bf81f896ab255495901ede9c7de8423457c79b9852ad000d92b7a054be1", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x33128bd86065b89665dccf20b8224238a3f169cc2aa63ea3de1d4e1b4431db0", + "0x2b8d25ad36db79ee9f1ef1900aa3831745dae07e1d5ee7a161a2b1cddf0dcdb", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x33128bd86065b89665dccf20b8224238a3f169cc2aa63ea3de1d4e1b4431db0", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 166, + "transaction_hash": "0x3d8144276a490ca957d3b050f193c30f8d2e98c49e09946af09877b2d14f6a1", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1624d229b7b2733f0e4f72f205ab058c0b247045ff371aa5a7aa95a7a037906", + "0x44edc98aa09d3c48b4da189467ea3e582fe32859d0df8ca47b768156b85a260", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x1624d229b7b2733f0e4f72f205ab058c0b247045ff371aa5a7aa95a7a037906", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 167, + "transaction_hash": "0x3ea0ff3cd693c15c2a125fb6c8b233954db1abefbc1d5236acbafcce2b9603b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4dde2846e7cce0c39e57113809340c87421454d8d7c48167a7a2db9d0ef7067", + "0x6399dcfb7c3ac836f32632f0395b1c7ff6c72ea353ec122b86f0a49e045a96f", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4dde2846e7cce0c39e57113809340c87421454d8d7c48167a7a2db9d0ef7067", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "ec_op_builtin": 3, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 168, + "transaction_hash": "0xb1de3fa66983a9dcfc33e4c44eb691a4e4746c7f4709d97fdda0df5dbe31f7", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x384152c373546b914f69e6c011747c08c519c3f43a4dc4b4b51849ca0e99ded", + "0x6e7616c3ad7f00e59f65e276653601a535125a577127235122ddd92d9a2792d", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x384152c373546b914f69e6c011747c08c519c3f43a4dc4b4b51849ca0e99ded", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "range_check_builtin": 268, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 169, + "transaction_hash": "0x7a14ae239b5ef52cac2e795354a2507fbc721a441b1b0c27899747aa5b0d56a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x115f012bd02db4cad77f3fb19bea28087d03a4d03f965781711cd9a9379d100", + "0x613caab7214bad95f132347d5afe5bbb421fdb6b127b1f525fd64651f88415", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x115f012bd02db4cad77f3fb19bea28087d03a4d03f965781711cd9a9379d100", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 170, + "transaction_hash": "0x4ffb0b6085a2ef31164f2268de6d215636a5a7d8fbcce5a8ec52d2da0018b74", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4102dafaf51f5e6c854259a48f6ccde4fac083d2dec07e784c5c38e7c6e9a8d", + "0x1df4af2d02656e93c276ddf4cf618d79e21a04e271b73e0358eaeecd2798e9", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4102dafaf51f5e6c854259a48f6ccde4fac083d2dec07e784c5c38e7c6e9a8d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 171, + "transaction_hash": "0x7f72aa25d42ae1dee8aba34b61f43b1641dcb42b02112084bd59e385bda1bbb", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x7d3644f1c8cc3d0fde11a7c69ccdd59e392199be927e2e283d21b5445357ab1", + "0x6c39bfb03ce74f827587993c35fee75b194aca03d6933e55b39506810b924bc", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x7d3644f1c8cc3d0fde11a7c69ccdd59e392199be927e2e283d21b5445357ab1", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 172, + "transaction_hash": "0x130d45032978cd3896f347f0607471a7a700ad0726007fdb8457eaf37ff0eca", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x176c25d47570070342b173716432127caf510d2b00189a3d8c9c0266297ec30", + "0x45b3e73736ffa7d2b57dccd9b2a08bb53f5db9c4a87e1495b6550a13f5be47c", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x176c25d47570070342b173716432127caf510d2b00189a3d8c9c0266297ec30", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 173, + "transaction_hash": "0x70c571657e610e7a8fd0f9974ed9a6b086ff05d00129b0025698d5dee3ff3f3", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x15bab3e51c95b9d58b038c49fcbd26d6e163cafd66d2f2cccfce75cee26b762", + "0x14e8744f0fb2432cf027fa55a36bf65488f59ef104988c702cc91adc51509f1", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x15bab3e51c95b9d58b038c49fcbd26d6e163cafd66d2f2cccfce75cee26b762", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 174, + "transaction_hash": "0x35928dbd8c4e8bde8f375b19550eec284538b00c09e97d3b85a45893eb965e0", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x481d6bc11e059a6f76ef7f3967cf22b9a0ad02236c59bfd641076cbf371628", + "0x1ff782ab0e8c2ce9758509f291895642a960db30e4e375aa7ac72bc3c939038", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x481d6bc11e059a6f76ef7f3967cf22b9a0ad02236c59bfd641076cbf371628", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 175, + "transaction_hash": "0x6e4548e3c81b0f6226307a787dd1a8a95290721f0b92faaa54eed362c30dfa7", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x541b4a8bb25092e7a52dbe8f07810e5c9efcb2774d52b567845fe8d3dc3c92a", + "0x15a7bc9dfe4fae868070df836f78e7a6256a00e8b2e1355886a2adc28917969", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x541b4a8bb25092e7a52dbe8f07810e5c9efcb2774d52b567845fe8d3dc3c92a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 176, + "transaction_hash": "0x2b331ae0f7d03c9fd6088604f704980c919dfcd030ce4cf2d2e5194dde6cf24", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x21bf47cfe73804095e3e1b25e656ca2ca9787651de3e69c9950943f501e30ce", + "0x43f3e848709d1347ef8fec1564050ef48b2c4b4b8848686228ca7d48d6b8952", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x21bf47cfe73804095e3e1b25e656ca2ca9787651de3e69c9950943f501e30ce", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 177, + "transaction_hash": "0x2a07b11c3d126f88fb09ff5be4b14e9616a0bf43d7548ea8439537934ff15cd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xa91641858e346eee18cdb5985b97a73eedc7fdc92de8fd3cef0b42bdbc00d3", + "0x12d803efb6b14fe4cbf885e67618f79c9cecc522ecf9549703d3d0f3bb22b19", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xa91641858e346eee18cdb5985b97a73eedc7fdc92de8fd3cef0b42bdbc00d3", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 178, + "transaction_hash": "0x2c1aa19b694ce946c474d6fe12552c53e208699384c3824d0300971fdd2288", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4e17f08446389b5cd0df8953acf3a0f2f6a6b2a80abd762b0101e7c6c103157", + "0x1f2f2027b73f9ded8c6beab8934566d563a0a0d8b4e0aa80ca0d9e11c24cd90", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4e17f08446389b5cd0df8953acf3a0f2f6a6b2a80abd762b0101e7c6c103157", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 179, + "transaction_hash": "0x476ed4d8f3194c6441a8b6a3a6611f4df286a30a11d621d61706e5cd597854e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x71a161b38b1229d32ae61b14a2f44bdc73e6664ff8b3a4184f66abca2735fdf", + "0x16933ea9c914684bfaacbeefe89927f6ea29267fb0fa4661d0c1f3752530cc9", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x71a161b38b1229d32ae61b14a2f44bdc73e6664ff8b3a4184f66abca2735fdf", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "range_check_builtin": 268, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 180, + "transaction_hash": "0xc3b7c3b42d74864f7989003a61626c08849fd91b4f6464b932745555224dd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x9b0e317d0bc8a7d797d9a4575dad53eccf44b671c0591c7ba82f5804d12985", + "0x9fcbb62b9953a3b658b5c63e3610a168a6951943aeb253788558094d935166", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x9b0e317d0bc8a7d797d9a4575dad53eccf44b671c0591c7ba82f5804d12985", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 181, + "transaction_hash": "0x310ab042ae9a8904f63c4010f53f89a213bb91539403324d5c176905df2386a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x64db11e31dea49ac0945a548fed4b38657452f98f0f29f413062b12873f4afa", + "0x120f5f0ae30ffad55612dde70c1a0a07af8d89abce94b8b9ea111e52d1e3b0b", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x64db11e31dea49ac0945a548fed4b38657452f98f0f29f413062b12873f4afa", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 182, + "transaction_hash": "0x776f598d4c2650c49f1fa9a1c4121e652b6feba8d701753a39bd44bcb85719e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5112b78113307795cf45051a65e9d2b535a236cb8ff8a93b9f4f460357b705b", + "0x1cc1f97e9284232d34653d58fa8e30a8563801c1730176700f72339367a953d", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5112b78113307795cf45051a65e9d2b535a236cb8ff8a93b9f4f460357b705b", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 183, + "transaction_hash": "0x362a854ae7efbc4d08b9c6b4e34105e46cca68c929829262d117f990f32e50b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3b02187b88b06e6993158e652acc2836e15b6f0a95d4abf74891334b462f741", + "0x319f651f63b9d8c006771fe19839a340c1148d0bfaec7f54b9b7a4d74d95aa2", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x3b02187b88b06e6993158e652acc2836e15b6f0a95d4abf74891334b462f741", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 184, + "transaction_hash": "0x20d0bab6be590f5197ffc051803472e695eb6ffae36adb6a1974a72ecc7289c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xba1224bab4ce060da0b89da3294a672ffd0b4c313430b67aa6397510739502", + "0x3a0c01b4483148f2ed4933cd567c57082963db6fcbd7d2e742428b7485afc43", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0xba1224bab4ce060da0b89da3294a672ffd0b4c313430b67aa6397510739502", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 185, + "transaction_hash": "0x2781b1d51a8e2e2b3bddd5ca550d9c02f635ccda46dbc5cbabaaf99df615df", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x500eb16558214463a5c37ac189e1b12443e97a3bdf89ec0c0c4986376bfb00f", + "0x533ad6924cb390e6745bbe6194f5bad2f5327939799d4090e7d042d7f1f28d3", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x500eb16558214463a5c37ac189e1b12443e97a3bdf89ec0c0c4986376bfb00f", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 186, + "transaction_hash": "0x4df7753f4f657d63c10941494ebac856c9648c736f396706fe4d5fe673f2912", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x67e4d23e57541aa5d087eb95ec42bff6a9feadb0ca6dece4b60cb6e9b8c1970", + "0x6111ee156a2965b9bfe980c405c3cc7e86ec0b536c611cd2d164f9cd50269d2", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x67e4d23e57541aa5d087eb95ec42bff6a9feadb0ca6dece4b60cb6e9b8c1970", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 187, + "transaction_hash": "0x5847a37545b923764f761184420769c30c8ec648807bdbdc2007f7ff599aebc", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x143e4f7f4f62e00b9a027fc1d1e3e91fb655bb0c68d152a3bd81bee1ea38471", + "0x15400564c0d933f03eba288c0fffe3c76b06a5ed792dbe86c53b2a4f48661bc", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x143e4f7f4f62e00b9a027fc1d1e3e91fb655bb0c68d152a3bd81bee1ea38471", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 188, + "transaction_hash": "0x66ae9cb40a20a47596bc290aaaf99e07c827be610499644aa6d6fcb725c398f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x19994bf4904edd8efa817a79fecb999e7c622f2643aea5d54647c0031d724c6", + "0x6138951e7cea2a9949fa4197aeb29b079cfd99f658cc73c500765da96f2f857", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x19994bf4904edd8efa817a79fecb999e7c622f2643aea5d54647c0031d724c6", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 189, + "transaction_hash": "0x37e2884609b45d1ec06b2043dffe99fb58f85243baaecce3ae0fe1fe6f2697a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x56ffd7a92298ef76ddbd31936c19c23d29edc2f34207f1b0b5b270aa511d8d5", + "0x4a2fcc8551fb5e58a54f67c6b1a100cc101bca7b8bc76a506ddbf23caf7495c", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x56ffd7a92298ef76ddbd31936c19c23d29edc2f34207f1b0b5b270aa511d8d5", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "pedersen_builtin": 25, + "range_check_builtin": 268, + "ec_op_builtin": 3, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 190, + "transaction_hash": "0x53e768cf8ccf4c4b125ae529f0050823f067e078f8529f95a932b1e5b2a1a02", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x691301df126b5190e5227b9fd62788723db7b5ea790c4e1da8f85aa6235d46d", + "0x42fc16f540975c3129cdbbe88275cbc6b926a4b183f08ea4802734963f246d1", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x691301df126b5190e5227b9fd62788723db7b5ea790c4e1da8f85aa6235d46d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "pedersen_builtin": 25, + "poseidon_builtin": 4, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 191, + "transaction_hash": "0x120d051ffd11af42cb251813729cbd5feadad5685b9816de68455e96bff0e75", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x104745966fa5cd518bab10b5f1a741f4a3435d7d9b060b8a11778cb36fcb574", + "0x10121ed85e757b09180a9f23c1e0d0dde516b990550639b3e4b8db6f1519db8", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x104745966fa5cd518bab10b5f1a741f4a3435d7d9b060b8a11778cb36fcb574", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "range_check_builtin": 268, + "pedersen_builtin": 25, + "ec_op_builtin": 3 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 192, + "transaction_hash": "0x167445965643cf3511fd7ec067085acf68fe2080c420659597324ce700f2f8e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x75eacc62294b96b3a09da916ec3e77bc37fa6ab5176e5bbd28aaf588d74baa2", + "0x53f5e8f152398f2918082611d71ed7d38f1a895e38a9b627086bbd553152cbe", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x75eacc62294b96b3a09da916ec3e77bc37fa6ab5176e5bbd28aaf588d74baa2", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 193, + "transaction_hash": "0x4156cbecc1048d42a74297277e70cdfa2e3e87566a554567712236b1674f908", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4540dc7107f1d6a135b575115091ee56ab13c5cb22a6188a2e7fccda0e009a", + "0x5033cb6a734b81a5033a6ed3367ee6998f70b01e563071d73f27e0dfb59f9a1", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x4540dc7107f1d6a135b575115091ee56ab13c5cb22a6188a2e7fccda0e009a", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 194, + "transaction_hash": "0x42e6f653c1f61632af8605be03e119b5808ff0b35153011e28431a574b40603", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x10bd0687cdf260d35210af52a93a9712d51a403868a103e91e491eaf17973cd", + "0x5b707625bd4195d215fa54e99f1a132db60ac14bc882585a8f51a3e7ddf8367", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x10bd0687cdf260d35210af52a93a9712d51a403868a103e91e491eaf17973cd", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 195, + "transaction_hash": "0x309ecaad1fced9d3c639dbc5fa49e82b5eca514f476d56b8c92355d6797d43c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5112b78113307795cf45051a65e9d2b535a236cb8ff8a93b9f4f460357b705b", + "0x634dbcc6decf882804e254340b0ccfe9a931e27685121e873979f9256fbd977", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x5112b78113307795cf45051a65e9d2b535a236cb8ff8a93b9f4f460357b705b", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "range_check_builtin": 268, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "poseidon_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 196, + "transaction_hash": "0x1dde6a5db2fd1f795cb3c21f4e40eec2547e1aaee8cfb96e0e565554bf8ec97", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x11f8473d749770009ec91b9e6f723403f9be76e2c93c62919d14989aa9f343d", + "0x72ad5c3a194d4dc87ed27b317f00d5762c0362bcb93d7295887e1be8080a555", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x11f8473d749770009ec91b9e6f723403f9be76e2c93c62919d14989aa9f343d", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "pedersen_builtin": 25, + "ec_op_builtin": 3, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 197, + "transaction_hash": "0x4469d51fe173183fa4b330b9151b756d50be2140709ae3b7540cc0ec481d20a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x594a6c429ca64604465758db99ef286d5c00d847c8072fec3ff5f0e6b65cf64", + "0x6a592b56049cd8d77e5466efdf21e5efe15fb0c9bf78d0f3928ffd83ba4cfbc", + "0x1", + "0x0" + ] + }, + { + "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "data": [ + "0x594a6c429ca64604465758db99ef286d5c00d847c8072fec3ff5f0e6b65cf64", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xab4e32edef", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 9233, + "builtin_instance_counter": { + "poseidon_builtin": 4, + "ec_op_builtin": 3, + "pedersen_builtin": 25, + "range_check_builtin": 268 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 192 + }, + "total_gas_consumed": { + "l1_gas": 25, + "l1_data_gas": 192 + } + }, + "actual_fee": "0xab4e32edef" + } + ], + "starknet_version": "0.13.2" +} \ No newline at end of file diff --git a/clients/feeder/testdata/sepolia-integration/signature/16350.json b/clients/feeder/testdata/sepolia-integration/signature/16350.json index ac7d4fed7e..4942743725 100644 --- a/clients/feeder/testdata/sepolia-integration/signature/16350.json +++ b/clients/feeder/testdata/sepolia-integration/signature/16350.json @@ -1,11 +1,7 @@ { - "block_number": 16350, + "block_hash": "0x660be3d095f36ffebf314c8bdea6823ba5e1f02fec2db61c84eb6faa859195", "signature": [ - "0x10fe667903a11a659d5cf95ab3ca441ef6888833b4e2036d0c6761e6498faf4", - "0x334061004caf8145136479b44112611fe9c90b3251189094c6e453d29bd6973" - ], - "signature_input": { - "block_hash": "0x660be3d095f36ffebf314c8bdea6823ba5e1f02fec2db61c84eb6faa859195", - "state_diff_commitment": "0x62c1b2056ff46e764b1103523ac104c0b9377593a4458e574b73133d00221e5" - } + "0x7ee8a86cd921053e037181b4b57b813db63b88ad5a5975ecada151d079322ae", + "0x6f97aefb8f14351f8a60f66c936ab8175744217522d7b335deadae8a4f15c68" + ] } \ No newline at end of file diff --git a/clients/feeder/testdata/sepolia-integration/signature/35748.json b/clients/feeder/testdata/sepolia-integration/signature/35748.json new file mode 100644 index 0000000000..d8598c65a5 --- /dev/null +++ b/clients/feeder/testdata/sepolia-integration/signature/35748.json @@ -0,0 +1,7 @@ +{ + "block_hash": "0x1ea2a9cfa3df5297d58c0a04d09d276bc68d40fe64701305bbe2ed8f417e869", + "signature": [ + "0x45161746eecbeae297f45a1f407ab702310f4e52c5e9350ed6f542fa8e98413", + "0x3e67cfbc5b179ba55a3b687228d8fe40626233f6691b4aabe308fcd6d71dcdb" + ] +} \ No newline at end of file diff --git a/clients/feeder/testdata/sepolia-integration/signature/35749.json b/clients/feeder/testdata/sepolia-integration/signature/35749.json new file mode 100644 index 0000000000..26f5ab8392 --- /dev/null +++ b/clients/feeder/testdata/sepolia-integration/signature/35749.json @@ -0,0 +1,7 @@ +{ + "block_hash": "0x23b37df7360bc6c434d32a6a4f46f1705efb4fdf7142bfd66929f5b40035a6", + "signature": [ + "0x12c78ec06dd5736e8c4db89f45a6be9fb38b61821b0c2fe5ec960dd29a6c734", + "0x498086fd30062224ce7bfab9a6b4a875ccc129982ae6f909be8478e4a429dbd" + ] +} \ No newline at end of file diff --git a/clients/feeder/testdata/sepolia-integration/signature/37500.json b/clients/feeder/testdata/sepolia-integration/signature/37500.json new file mode 100644 index 0000000000..2c4eea2921 --- /dev/null +++ b/clients/feeder/testdata/sepolia-integration/signature/37500.json @@ -0,0 +1,7 @@ +{ + "block_hash": "0xf7471e29d9f546fce49b82c15eb3f2d62d27526884e7787277c9002b9cac83", + "signature": [ + "0x61aa44c52ed27ba5e95339b1a77aa75e849f18cbaacf868398bef20dc5ac395", + "0x74a81536d17b0c3d8949346d54842d15974f82313a17cb3806c7f737b9889fe" + ] +} \ No newline at end of file diff --git a/clients/feeder/testdata/sepolia-integration/signature/38748.json b/clients/feeder/testdata/sepolia-integration/signature/38748.json new file mode 100644 index 0000000000..a4f9e3b902 --- /dev/null +++ b/clients/feeder/testdata/sepolia-integration/signature/38748.json @@ -0,0 +1,7 @@ +{ + "block_hash": "0x40b9de4d20b6537151895df0fa2520be3639a2a2a65915b5d27855efd1d78fe", + "signature": [ + "0x41e1c125c6b41eb8df6cfb116930cf7db423834e38090015bf6630757682a71", + "0x1580850614ee0401dce1c950c87cf900ebc3b50ad58bd9b38599565d0cfd313" + ] +} \ No newline at end of file diff --git a/clients/feeder/testdata/sepolia-integration/state_update/35748.json b/clients/feeder/testdata/sepolia-integration/state_update/35748.json new file mode 100644 index 0000000000..fd213bb604 --- /dev/null +++ b/clients/feeder/testdata/sepolia-integration/state_update/35748.json @@ -0,0 +1,41 @@ +{ + "block_hash": "0x1ea2a9cfa3df5297d58c0a04d09d276bc68d40fe64701305bbe2ed8f417e869", + "new_root": "0x38e01cbe2d5721780b2e1a478fd131f2ffcc099528dd2e1289f26b027127790", + "old_root": "0xb120f982c77eab1b25f29349fb1458f32157887c64feb91e51e7f4cad62721", + "state_diff": { + "storage_diffs": { + "0x1": [ + { + "key": "0x8b9a", + "value": "0x6ae6fe45c608e642524de25140f19a44d40dc26286e38d3f184c7fb2fd21767" + } + ], + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7": [ + { + "key": "0x84a17db3276b7f8c33d3cdae9067d3db20b6a24b5c29fd185df2f7f42c0713", + "value": "0x90d0c5a3d34c3e73" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x55620cf9acab16e56" + } + ] + }, + "nonces": { + "0x472aa8128e01eb0df145810c9511a92852d62a68ba8198ce5fa414e6337a365": "0xf" + }, + "deployed_contracts": [], + "old_declared_contracts": [], + "declared_classes": [ + { + "class_hash": "0x19de7881922dbc95846b1bb9464dba34046c46470cfb5e18b4cb2892fd4111f", + "compiled_class_hash": "0x6506976af042088c9ea49e6cc9c9a12838ee6920bb989dce02f5c6467667367" + }, + { + "class_hash": "0x2fd9e122406490dc0f299f3070eaaa8df854d97ff81b47e91da32b8cd9d757a", + "compiled_class_hash": "0x55d1e0ee31f8f937fc75b37045129fbe0e01747baacb44b89d2d3d2c649117e" + } + ], + "replaced_classes": [] + } +} \ No newline at end of file diff --git a/clients/feeder/testdata/sepolia-integration/state_update/35749.json b/clients/feeder/testdata/sepolia-integration/state_update/35749.json new file mode 100644 index 0000000000..bf23816c05 --- /dev/null +++ b/clients/feeder/testdata/sepolia-integration/state_update/35749.json @@ -0,0 +1,93 @@ +{ + "block_hash": "0x23b37df7360bc6c434d32a6a4f46f1705efb4fdf7142bfd66929f5b40035a6", + "new_root": "0x8638b46e7b92719ae718dc352c793d1df15c55956be999a539e9a27c260337", + "old_root": "0x38e01cbe2d5721780b2e1a478fd131f2ffcc099528dd2e1289f26b027127790", + "state_diff": { + "storage_diffs": { + "0x65cdd7892656f7f89887c2c84bb3cea8f8c1b472a4f61838496c1fc7cc8733b": [ + { + "key": "0x23bf06fbbf6634459b7cd052e704bcf80f07e85cbdede138ce8e1e3aace24ac", + "value": "0x4617cc24c69548663a20ccd75a98355fab6a7c70b13cb427194943e34298ba6" + }, + { + "key": "0x3b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a4", + "value": "0x7075626c69635f6b6579" + } + ], + "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d": [ + { + "key": "0x110e2f729c9c2b988559994a3daccd838cf52faf88e18101373e67dd061455a", + "value": "0x403702d55d9d63cf0000" + }, + { + "key": "0x1b5af78b6c417eca272a1b502eabe32e63f5f3c8d738ba6b995027beaeb217c", + "value": "0x668ba2f8000000000000000000000000003ff41da4afa083c70000" + }, + { + "key": "0x38c10662a48073f77efadb4820d93ad877d4de93741e9165b24bc8877d93b78", + "value": "0x10" + }, + { + "key": "0x391a2fd317962118227a3ef0f473318220a4e94843d9c9be5a7b8c608c89cfe", + "value": "0x10f0ca1aa84ce252345" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x9b6770b5e60ea7ac46a" + } + ], + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7": [ + { + "key": "0x110e2f729c9c2b988559994a3daccd838cf52faf88e18101373e67dd061455a", + "value": "0x1b8ef773d001192ee4" + }, + { + "key": "0x391a2fd317962118227a3ef0f473318220a4e94843d9c9be5a7b8c608c89cfe", + "value": "0x29a222e3ca29723c" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x55620d0d1f6b3fc1a" + } + ], + "0x1": [ + { + "key": "0x8b9b", + "value": "0xb4ede87d129aee5d94af6e3bcc09bdf73b76ee1138ca98565069efe6353443" + } + ], + "0x5e4cecd764121b8547d6e0ebec94618edc0933f97918af264d4d7064e70dc36": [ + { + "key": "0x3b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a4", + "value": "0x7075626c69635f6b6579" + } + ], + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a": [ + { + "key": "0x3b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a4", + "value": "0x406a640b3b70dad390d661c088df1fbaeb5162a07d57cf29ba794e2b0e3c804" + } + ] + }, + "nonces": { + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a": "0x5" + }, + "deployed_contracts": [ + { + "address": "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a", + "class_hash": "0x2fd9e122406490dc0f299f3070eaaa8df854d97ff81b47e91da32b8cd9d757a" + }, + { + "address": "0x5e4cecd764121b8547d6e0ebec94618edc0933f97918af264d4d7064e70dc36", + "class_hash": "0x19de7881922dbc95846b1bb9464dba34046c46470cfb5e18b4cb2892fd4111f" + }, + { + "address": "0x65cdd7892656f7f89887c2c84bb3cea8f8c1b472a4f61838496c1fc7cc8733b", + "class_hash": "0x19de7881922dbc95846b1bb9464dba34046c46470cfb5e18b4cb2892fd4111f" + } + ], + "old_declared_contracts": [], + "declared_classes": [], + "replaced_classes": [] + } +} \ No newline at end of file diff --git a/clients/feeder/testdata/sepolia-integration/state_update/37500.json b/clients/feeder/testdata/sepolia-integration/state_update/37500.json new file mode 100644 index 0000000000..246a7907b6 --- /dev/null +++ b/clients/feeder/testdata/sepolia-integration/state_update/37500.json @@ -0,0 +1,68 @@ +{ + "block_hash": "0xf7471e29d9f546fce49b82c15eb3f2d62d27526884e7787277c9002b9cac83", + "new_root": "0x702f54f4fc777b52bfe061727dd0c5fd42e233a22c5f1f0015ebc5926ef6269", + "old_root": "0x16f20cc1f75887804afe3caf2b71634c01b2c88eeda6262c092a42c87f89c92", + "state_diff": { + "storage_diffs": { + "0x4b4f08b68696ba6ca3fd389029d9bb995b4766137d3b677531bbf4daf4cdaaf": [ + { + "key": "0x7431f86a4b86525ba04a618ee9341ba2700f9140f7d3a4cef2bed168853aca", + "value": "0x73d68a78c82678e56e8b773c93be758a2d78357e3873183df2113757249497e" + }, + { + "key": "0x27420377e357df917f46f7da15f75eef9a54209b04f0e7c1ced77ebf946ac22", + "value": "0x6a50b14efece100bb11677ee2d60b64ce87bb2016272b2f4680cd430411ff0f" + }, + { + "key": "0x57bf0d97a5df93699924802cca2b94f116b8143b5461eed2a22f1678924db05", + "value": "0x1a809bc02e2b01f90889c9f0f12fc328bfced04b5682c5ae560a83a8ea5f66d" + }, + { + "key": "0x64382489d9f51a6bbd49f2790a0d5d085bf9e4819ebfe9ada2129000ad8279f", + "value": "0x77f4adf16a16df35338fbfa45678d3428331df7240c9a2be7e3c66b832f7181" + }, + { + "key": "0x77ceef1f69814554b166b6eb599e12e7c950b8635c78e7fdb3ca1470060e85d", + "value": "0x5847d80389f672bf855d2c1e3a60ac472b67c7a92b00eee9e93ba7734a0e67b" + } + ], + "0x13185b3ac5099a063cad6e464eb30ffa6a2852cb4a66de900cdd8617b7e3f9b": [ + { + "key": "0x3d6933bfd424d3116f778553944913a49af3b8a33f3bc830d5b1a4e1e462998", + "value": "0x44462f71dbc43b3d14b2c6a24535e5d68e50a5bd02bdc1601a5c0944a799bb5" + }, + { + "key": "0x49667a6a1ed14647a07a7282dbf17a06cc133f4abcd3274b27a914e6fcbf89b", + "value": "0x3d033db8de9c3d64a3396ee9c875bbc68556cc9f2951ce58d645c014ac79b22" + }, + { + "key": "0x5824decd0a03f4a6158888c7b32ab20a3c7da4a2111224736d8a9601ccdb128", + "value": "0x5a7a736db3204fe897ebe35170d303011ba6894dc669ae2895d7d252c8b7d73" + } + ], + "0x1": [ + { + "key": "0x9272", + "value": "0x130895094f3512f385588f703e3d773bdba31b19da08efafa3e5f971f3a586" + } + ], + "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d": [ + { + "key": "0x391a2fd317962118227a3ef0f473318220a4e94843d9c9be5a7b8c608c89cfe", + "value": "0xf1bc7d75ab4802d2ea" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0xa76689b06448a4a2dad" + } + ] + }, + "nonces": { + "0x4136ff8eb3070b7141dccfd95e248ec747a904433449f3ea9e80664719c0f8a": "0xc74e" + }, + "deployed_contracts": [], + "old_declared_contracts": [], + "declared_classes": [], + "replaced_classes": [] + } +} \ No newline at end of file diff --git a/clients/feeder/testdata/sepolia-integration/state_update/38748.json b/clients/feeder/testdata/sepolia-integration/state_update/38748.json new file mode 100644 index 0000000000..4c9c79ee84 --- /dev/null +++ b/clients/feeder/testdata/sepolia-integration/state_update/38748.json @@ -0,0 +1,1569 @@ +{ + "block_hash": "0x40b9de4d20b6537151895df0fa2520be3639a2a2a65915b5d27855efd1d78fe", + "new_root": "0x4628191c1b4000fdd0f64686a38b4701e42dafaa3ea730a6d57c55f69c3b618", + "old_root": "0x73490b361e55608d6572ce3ee39d686a71eab58b16511c9887498b7c2724968", + "state_diff": { + "storage_diffs": { + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7": [ + { + "key": "0x2cae20d6f722dde1124d0983ef0949cef3ba37ecfe346a429844d7302fec2", + "value": "0x1" + }, + { + "key": "0xb71ac4583a03a2d436e6a5651a6368eff96896dda181f606ac3f540730470", + "value": "0x1" + }, + { + "key": "0xde610375ad32ca53161456c413aeda52a30e079684b361a2dac0164f8ad31", + "value": "0x1" + }, + { + "key": "0xe0b571af9e985c63c43fc77181e8eb525736ca838538f8b2e041265c5c2a4", + "value": "0x8e0f1cce8fb2b6" + }, + { + "key": "0x12f7e7142efa9318bec44c718867c7f30a126cb385e762d58a8c3414a362cc", + "value": "0x1" + }, + { + "key": "0x13a2e6345934de0330b6054740318571255adfe68447884562642c37234000", + "value": "0x1" + }, + { + "key": "0x14b313bf7bd5499a962f56784de028e80989f76c3434feb4323900ffab9165", + "value": "0x1" + }, + { + "key": "0x2009599232d246b2aef1a58d9a76c7229440b57524b439c5dc0cf62a8fef49", + "value": "0x1" + }, + { + "key": "0x22e05f5da5178ce7aab408113210ebad4c8a43b53ee5fdf198a05ceb22bafc", + "value": "0x1" + }, + { + "key": "0x287f381e6d10e828a757fb3ee6322014cccd6149f00590155d3005bbfa06ea", + "value": "0x8def3f68b7e9ac" + }, + { + "key": "0x2fc65d993d7d14e94cd22c97907d20829b13999de85913203ac12d736ade92", + "value": "0x8e04dcf8ef1e09" + }, + { + "key": "0x30064e218b5de6166cb8d83fa96450096fa8e3271244164745d0aa63c7e943", + "value": "0x1" + }, + { + "key": "0x30e0b9953f9a9d0fc1dd6cb8aeb8d335467cefdd497c58acf17edce7bc89e0", + "value": "0x8dd702b0a830c0" + }, + { + "key": "0x31f93d9c536332f75bf6263f84cb1263d5d21b0300cd02ec89b764728256be", + "value": "0x1" + }, + { + "key": "0x48976fe95fa6666dc62894d929e7c65b37f6bed0c2cdc803ba1056f9d0d1c5", + "value": "0x8de98f1c995495" + }, + { + "key": "0x4fa19410ed187bdc944a74bb796ae1ccca71c3aec99aafc1d41db2501d9676", + "value": "0x1" + }, + { + "key": "0x56a8ab1f2c24d761800ce76106c30e6831a14195531f3b6c72913ea17eb3b1", + "value": "0x1" + }, + { + "key": "0x5bff0a41e2ebdb431c1a09070777ee717a3dece4baf74735b7d90bbcc7dcde", + "value": "0x8de28081d9fe5f" + }, + { + "key": "0x618a048a55d84fa64020eacfd3b4ce59c587d5463e677a79bf2b158ce24143", + "value": "0x1" + }, + { + "key": "0x6b4d0438d5c4c922acd7c60c97fb82ea0625486329d81b4d9448fa50c08c11", + "value": "0x1" + }, + { + "key": "0x73775f97fd92deba07cd0015a530ad86ac748c852db5fe0a234af8bc5a0b60", + "value": "0x1" + }, + { + "key": "0x759f422a63ea8637972d8ff09f4aa5cecbc84ef74d2ba06a9299a2e6fe87ac", + "value": "0x8df40831b1a904" + }, + { + "key": "0x7a927268a06eeea27e2524594f70fd28f2a6c38b74d34bd71ec9c500609a07", + "value": "0x1" + }, + { + "key": "0x7d7c6c149e2013aed4620fb6ca06525959a6e75e343ef266284e0878fa75cb", + "value": "0x1" + }, + { + "key": "0x88fa0739b9e0c1998d69df9ca6c23cd55cee4c6316e94d999511bd21b7d06f", + "value": "0x8dd0e1c8a8ec0d" + }, + { + "key": "0x92a49aa1a7d88feceaf880ae20b27e2c6997b9ba57fcdc149c61c096023ce0", + "value": "0x1" + }, + { + "key": "0x96cda0b4bdd4168c98c6444775ce5022b61a60719785a5f6e7a900e9cc12e5", + "value": "0x1" + }, + { + "key": "0x989062e46371d015d50706ac31ab4cdfdcca611eab53bd7564036ec8e30be8", + "value": "0x8dc535fa7f143e" + }, + { + "key": "0xabee496d61b8878d27cfc3b50b4dd5d0c8e8f892e4939dac9d149c4878412a", + "value": "0x1" + }, + { + "key": "0xae9486a43b9e064dd537eda39db1b791d15ca35f7faec363de43327b8345b7", + "value": "0x1" + }, + { + "key": "0xb1c69fe626bd6d931244ab8182901674b7f4f067d7ca2ed9b1633dbed68015", + "value": "0x8de704549f9158" + }, + { + "key": "0xb8f902834f83607565847c9de9eae9c5d3584c46c53cef97633870ac8b16a5", + "value": "0x1" + }, + { + "key": "0xbbabba018368d17e65266639f758ddf03489afa231203465345a15c30e6e26", + "value": "0x8dd56caf8eca88" + }, + { + "key": "0xc01655196d167069df4bedab61ede2a699e769c334462a67e2ebd003b9e21f", + "value": "0x8dd0c9c54ee898" + }, + { + "key": "0xc83212690db8edceeeea9145cabb8e12d754b1b5ed55f6de756ffd82988731", + "value": "0x8df994306f0dbd" + }, + { + "key": "0xcdca81656e7cf13114750ebaf0550e88fbb39ee345b5f933b093651663d74a", + "value": "0x1" + }, + { + "key": "0xcef8bf9734733322ea8c40c4141f022c045152513eb48f450a50e38cf59cbd", + "value": "0x8df5ee309d3d61" + }, + { + "key": "0xd0063537c3feca8f74e36c953a4bc07544f3487fe62fcfeca203351c7415e4", + "value": "0x1" + }, + { + "key": "0xd1dbf38f91cdccaa9872785ad9ecbb2c053f6bf629ca3e094d1c39adf87307", + "value": "0x8def65fb313496" + }, + { + "key": "0xd3eef632b9bcc00ae7e1a9ce52a3ddc2be5ad95c60c83fd6227a01a3fcd912", + "value": "0x8df2b5947d8808" + }, + { + "key": "0xdda3c201e24095a4f6e09060c36728ecdb39cddf4e407c65febf872a902518", + "value": "0x8dfa61a52e8ca5" + }, + { + "key": "0xddac96de2c4f2c5dc99e5a6c605215d2eb6ce37692aeec7e041600adba8bf9", + "value": "0x8df68fe97edf6b" + }, + { + "key": "0xe616eb3e1d77f413c69646ea22ca7c34a24866525ea50ab0d7ec769a742da6", + "value": "0x1" + }, + { + "key": "0xefd2b39bcd46eaf0cf9f8377dd6a5be0cfc1aa147abf6cef20421779b0debb", + "value": "0x1" + }, + { + "key": "0xf108bcb7b0bdd5a52f4bffa00ee6b6d7b739f368a41152002a237e9793d6a8", + "value": "0x1" + }, + { + "key": "0xf2e8aa9ba8b0bcc71ebb4a9d5a5fbbc2f3390c78b8727d71813ee40d964194", + "value": "0x8de5ad1c08817a" + }, + { + "key": "0x100683dc269178fc51b4dd10ac092617ba9730db291cf2448e6792ab68eb8c8", + "value": "0x1" + }, + { + "key": "0x1106ca865907c9fef52a56c2a1a243115eef151d62aa40e2e42bd5592e84ca0", + "value": "0x8e02f0dd34f23f" + }, + { + "key": "0x113213df70b3275e8151d385747206004c3eb89d5e462ad14ef6a7b7093a774", + "value": "0x1" + }, + { + "key": "0x115467517b2abc844c25ba953dc0a883ce1c9add4691b05fceca0d5e5c5f36a", + "value": "0x1" + }, + { + "key": "0x116909e9d173f4409b3145e1224f72b53aa74983250429c48af34e2772680e9", + "value": "0x8df3000f76d86a" + }, + { + "key": "0x11f603d9416d64faf8a3747a1dcbb544b94dbe55b3900a0cd511ca476e9a307", + "value": "0x1" + }, + { + "key": "0x1219a6a260cccde0d684a1140650f9c432cf192cd83ecf8b0b34968738b17ee", + "value": "0x1" + }, + { + "key": "0x12786970fa4ce7b3fbd843714c257c11fcebdc680a58b1cf1d94ce4a60af797", + "value": "0x1" + }, + { + "key": "0x1289e62b80dd306f7ea8b71a1c28e10071ca64725670488356e0a152b2400f0", + "value": "0x1" + }, + { + "key": "0x12b29a431dc3c6a4d96e97726f942c8fb179034eea0c80a1addddd21f5262c4", + "value": "0x8e0e7145dfc190" + }, + { + "key": "0x12dda0fa98ec2b3923a6dc72217e8713770fab8ddea661519a0594b81ecd0be", + "value": "0x1" + }, + { + "key": "0x12f5b2bc51b8f163647f2fa1ef9a63cd2588374df6a0f5942d4a7e29978fd02", + "value": "0x8def3025f73aa8" + }, + { + "key": "0x12fee4c3c17c9102aaf0ae2338d0843e2164d7d065495ab5bf7f82e0884cb5d", + "value": "0x8de8d4689ae8fa" + }, + { + "key": "0x141b8120f330f3c6a0ae1e539e47690be4631885f1fc3872e31a963012197c7", + "value": "0x1" + }, + { + "key": "0x15298672b0aa6c2f54c7c1b4e7590179d7778f06f2bf62dd571592db91b099f", + "value": "0x1" + }, + { + "key": "0x15eb6d26789365ad79b97f773add9f3889bc8ac78d927d4def3a890942260b4", + "value": "0x1" + }, + { + "key": "0x15ee6676d75dcd4ce80c0569bafd56bc0646f472db8afb1a23de9267eb12a54", + "value": "0x8e03112fc20dd7" + }, + { + "key": "0x160c2313996fc20a4362c1cfbfc75cbb759cddf60b71f9109e42c2cd6bb95a9", + "value": "0x1" + }, + { + "key": "0x166302e10581a8be4a62a69b444a597303eb0a61eb061b5c7291984272c90a1", + "value": "0x1" + }, + { + "key": "0x16b9a5031f51ff40e40a21b967c588683c12ba50dfa59b06a9388b65da573a8", + "value": "0x8ddd921e0f0b6c" + }, + { + "key": "0x16ce4042a2e2f63a3e851cc0be9f55eb21e855e911bbeb97c58cb3037b5acda", + "value": "0x1" + }, + { + "key": "0x17406f542e0274a3ab640886d63e067117bf78e54e8a59591347ac1ad6bb078", + "value": "0x8df175eb1e5d5d" + }, + { + "key": "0x1770bf09f252bfd0d116935fc5c4a28db8e5bb04b4d295719ed65b7c411fd11", + "value": "0x1" + }, + { + "key": "0x17acc29a46421ea750f369aca35a7353154d69782012558224233d0f076d948", + "value": "0x1" + }, + { + "key": "0x17ca79278fa640b884e60c33c98d62ad1128ae45bf87ce0c843b07909d335c9", + "value": "0x8dfd30f01085f7" + }, + { + "key": "0x17fa7073da7a230a61630f45f03da73e0a25df0880eb3803f2f9f69d613e96d", + "value": "0x8ddc4655781151" + }, + { + "key": "0x1803a29070da1e3bb9dae113fbc9ccab377eb6d8d71892e14fd7506dd683ba4", + "value": "0x8e02eb5d70b3dd" + }, + { + "key": "0x19c30afe905a53fb0a1813ef53574e39235902811c8b713a29dac93a60e1ad2", + "value": "0x1" + }, + { + "key": "0x19efce91e78b59d7ca89486a06606bb1bd4ae0639a55360e5516cdc761e3e3d", + "value": "0x1" + }, + { + "key": "0x1a3e973bcb75ed42e272ce09f7070b04f85661808696fffa04791b32d062963", + "value": "0x1" + }, + { + "key": "0x1a6dd7a72633a4bf9ef1100907db3510c6acdb35c48d69de9e6e69e522d24b9", + "value": "0x1" + }, + { + "key": "0x1ad92cfe00915dcc095058dbad0e824075bc26479a38086fdfdf86904d4bbd0", + "value": "0x8e013a26c36d2a" + }, + { + "key": "0x1adfce0f896d673330146d7454aa8e04679423c958645604aa74a7c92da525a", + "value": "0x1" + }, + { + "key": "0x1af46a2b2d04a1320df3966e1e86c5c2b145e5fd4aa25ff8c7b9fb99a95c4d1", + "value": "0x8df79369a515ff" + }, + { + "key": "0x1c5257db686e02021c4526419a6b4391bed7acaa3b910c32f42fb6853b3c6eb", + "value": "0x1" + }, + { + "key": "0x1ccf7f4e6e9b4c33e43fb60b8217cbb2eb9562a620be3bf39fe746c1c7d3a10", + "value": "0x8dfd7a4c6c1f8e" + }, + { + "key": "0x1cf29e3f2a24694f6842f313f7f76fcab97266c68ae0a4498bf37faeb53ac65", + "value": "0x1" + }, + { + "key": "0x1d5da14ebcf1f6d53c8f643921f0f5fc3ea41d5eab14ecd6a376f60fa27e384", + "value": "0x1" + }, + { + "key": "0x1d89ab4394ec415bfeee0f45367832d44a3bb8c06011d234e06af8c40d08804", + "value": "0x1" + }, + { + "key": "0x1dab879fd6928781d860817b355e4f378e02cf2d0427525433fb3aacd5b9ebf", + "value": "0x1" + }, + { + "key": "0x1f1949836b4f32a9aa35965ff4d5a16f0f6b997ea8ce8bf2bdf93cea54849fa", + "value": "0x1" + }, + { + "key": "0x1f4e6b90eef5e926c2b118cb4388b8096df355183c325427f42072989e7de7b", + "value": "0x8dea27354382cb" + }, + { + "key": "0x1f5315afd677936a3d010a8ec48408db437d86f51a1bfeaea9227114e45d2e6", + "value": "0x1" + }, + { + "key": "0x1f5a8e5dd66d11fc3458e533a815d872faf79fc86a6660c4a710f41156863fc", + "value": "0x1" + }, + { + "key": "0x1fedc5be4429da6426371213532d9f3880fcc320bb3eadc0b6e1977b860783e", + "value": "0x8df0477789b757" + }, + { + "key": "0x2085b4645ed3c7310c005ab0491a6f678ec12a5a48c7e620eb289fe88d3c4c5", + "value": "0x8de8056857064c" + }, + { + "key": "0x20e4d41d299ddc0e0485d23b8646e71d5366421f9557c52a53fb55ea91adc37", + "value": "0x8deaf9cda4cd93" + }, + { + "key": "0x2168079a832cdb9aeda11ee820bb53d4ad872cea717ba0c885c75af48263239", + "value": "0x8dff5237741c8d" + }, + { + "key": "0x21fb49b41efcaaaebdcdcec8afd8af300ebcc04f10174754baf279197809110", + "value": "0x1" + }, + { + "key": "0x2200d80fc115010ff512eddf5b530e0557edc94e17c216c5c13ecfe4bf1bbf7", + "value": "0x8df85d970d1e8f" + }, + { + "key": "0x2201a9c60bdb707184a55eec2664caa29d7d5b41ec4dafb90b72dae5bbace83", + "value": "0x1" + }, + { + "key": "0x2212a060701a4cc5987dcec8644cd6d1c09e7d4a4810ad0b908985dc25a86d5", + "value": "0x1" + }, + { + "key": "0x221a643ebc1e890665b3651e02d6e04a904b40ce350746a34a11e1088ea22a6", + "value": "0x8dec6538b9f70b" + }, + { + "key": "0x223dd1e237404fdc9550fa7c16a346c08cdf8ea6ede3beeb00bee45efaf894f", + "value": "0x1" + }, + { + "key": "0x231e43460d7481352e1e6cb1cf83be630576de46a5cbced941b2fb1dac5d8f1", + "value": "0x1" + }, + { + "key": "0x235b30788c547d428ce5386013a5d8c2561b40e48132b7eca3e0f24b0b3a2ec", + "value": "0x1" + }, + { + "key": "0x2362aed92b9ab80bd6dd095a81e1e2890875c4d820a54bf36705e23a074a34c", + "value": "0x8de49ede4a1f43" + }, + { + "key": "0x239970446a52db27f8acbfcdf462813869ef8b57b7ee83801968f35da4a7989", + "value": "0x1" + }, + { + "key": "0x239d38c852d14a9829e56f115820b7d34e7f7ed2239dd12d9721ddc815ba030", + "value": "0x1" + }, + { + "key": "0x239da6b5e1db92a2e113b0ba67adc0cbfc46b07dbaacaec2708044b5d3dc592", + "value": "0x1" + }, + { + "key": "0x24276aab142df614a55c01a8c81619edc0ea7541c5a383d728d85c4a92c330e", + "value": "0x8df6bdb0d6bb7d" + }, + { + "key": "0x249c824819071a7861473a6faa19e871e5e372d80b7d18fa231b61b979af359", + "value": "0x8e0a70088e8425" + }, + { + "key": "0x252b975029573b7a9bc18340adbf4318a3bdc3c0a155cf342426fb35dfc7859", + "value": "0x1" + }, + { + "key": "0x253e1f9a0b7d6f3ad8ac55f27a1952328e9d15dd4d02017d89e65350ac5c558", + "value": "0x1" + }, + { + "key": "0x2656159dc3e67fb2909119669c12be1ca2aa54c0b6738aff46d3b194f6d1a44", + "value": "0x1" + }, + { + "key": "0x26e8e0b9497a85a22d6859fb2a2bf48cd55a6637d145bb51c82baca0f150e3b", + "value": "0x1" + }, + { + "key": "0x277cb0bcd08397d8edd4f1b5bb31119607c9dea9b4e03f3acf5eb066a4e4119", + "value": "0x1" + }, + { + "key": "0x27a143237c4443f6c79aed401c840bfb6e1df259410880dcc44012a5d46bfb5", + "value": "0x1" + }, + { + "key": "0x28ef9a15fa52ed4314c2eebc1dee7c75ecec3489c6505cd2b4ee78f754377bd", + "value": "0x1" + }, + { + "key": "0x29449b45f1505e52bf9ffbebc53244e7159a7082a5eede1df0e81663a0d45bb", + "value": "0x1" + }, + { + "key": "0x2947bf059e9a75e783d22e487dda212164ab9a137ee8d3a55616646d06da8b1", + "value": "0x8de1326de79568" + }, + { + "key": "0x29666eb7861a1d9920416e69866e52e313c25dad889a4fd3a22821b21f4420c", + "value": "0x8dc37cdf8982b7" + }, + { + "key": "0x29b16afce4e8df93a2fda5923cf341855b9611f7ca906c3508863c39b6947ed", + "value": "0x8e07c2f00a8643" + }, + { + "key": "0x29fdee1fe99092296f5250f22665d5b77c287f9922f22d5e38df0238a9f8521", + "value": "0x1" + }, + { + "key": "0x2af44e2283c0b984704f65d15917d3ce455eb8fbc0e90c7b3025a5d16366ce2", + "value": "0x1" + }, + { + "key": "0x2b2a9fd807202cccd36cd7017ef1db110057adf2ef851a3917a61673eeff7c0", + "value": "0x8df5525d94a2ba" + }, + { + "key": "0x2b49603fd5c1ad46eeec972d61afe1db7c975f2afec1cb5d10e525b836f09c1", + "value": "0x8dfad8027ec0e9" + }, + { + "key": "0x2b9b7d18ab9282a4cfcd33fdf050cb4a8875c3ae25630545d2f198b920fceb1", + "value": "0x8dea36ab2c8dec" + }, + { + "key": "0x2ba233b611d3b999844b8db9fa589f44f7d010de536733726a528c61a13f15d", + "value": "0x1" + }, + { + "key": "0x2baef9565c3521f9872bf8eb0c05741e2228d6b048b9c1b6537d91d82bcf3d1", + "value": "0x8de31b655b01be" + }, + { + "key": "0x2c1ee4a677d9f5ae7eb16095be6174643dd8c5d5676e74171b8f72b31753e0b", + "value": "0x8deb822ba4344e" + }, + { + "key": "0x2c5fe596b0140488335add24f94205564eabe942bf5c2d238e840bf862d60da", + "value": "0x1" + }, + { + "key": "0x2cb69bf0e86898d6ae450cc20b5ee74c1f3f89f55f65706f7d2e6f551409280", + "value": "0x1" + }, + { + "key": "0x2d5c92f36942c2a94a15a8624bbc11c3f8585c9e20b2c9ef9a9999c8ebee626", + "value": "0x1" + }, + { + "key": "0x2d5d0843aac7bd6c72204fbae61fac4d27be78267c56956aa5a4d47333e8edd", + "value": "0x8debd947c829f9" + }, + { + "key": "0x2d617dd390070b4c93930044812828c11f64915b520d70c8d6dc195d5b1d192", + "value": "0x1" + }, + { + "key": "0x2d7a6e385f57fd8da3f1eb3b1b8df1e329ceb457481a718d66ef98d06cdf264", + "value": "0x1" + }, + { + "key": "0x2d8e2187213b4af6dd3d3c5dfa38df554091e216799fc773a71aaba8bda4b2e", + "value": "0x8dfac0312890c7" + }, + { + "key": "0x2daaf788fc5e7fe1752059090cd2276dca5e8e68373cfddc131b2e73f1abdad", + "value": "0x1" + }, + { + "key": "0x2e6d9a4fb201d3f4c69b3cd83520b451f7a0fab7a2b9dcda06543f5c0b7f3de", + "value": "0x1" + }, + { + "key": "0x2e794994f9caeea310a700b186586e272769e602aa9f0e5823dc9b57696516a", + "value": "0x8dfb6a4b3ac23e" + }, + { + "key": "0x2f7ce7e4af10f103a30ae0055b922b718bb9ac6ffe6350227fda32c159ce285", + "value": "0x1" + }, + { + "key": "0x2fddec9d4d430c1e252f399def60dc851f1fa7e777ed81a8c75a18e6b5639f0", + "value": "0x1" + }, + { + "key": "0x2fe0458eb51e935a73b881338873dc040f3d60d1fa156f2a775864df819faeb", + "value": "0x1" + }, + { + "key": "0x2ffa4c4c8d4a0c3e6855e316190ea3839f6b382f4068413c85119dff34e067e", + "value": "0x8ddd4904ec45fb" + }, + { + "key": "0x30bc4c4197cf9e14b9d6a677a71f394fd160fd22a42c54fa94996c2c6ca9fbf", + "value": "0x8dd0d9f8614785" + }, + { + "key": "0x31b7b54d177f1afc53af67ebd60d7fb5b4066995ed7f5d1fadba3ac6824b06c", + "value": "0x1" + }, + { + "key": "0x32442a6d2db6867682f871abecd2595b41182a259968d23fcc412ed01aa6f78", + "value": "0x1" + }, + { + "key": "0x32b4bd77abdbb7b4cff8e1a5eab723fc9cd48ad31d8a13f8ca40a3145a89ae5", + "value": "0x1" + }, + { + "key": "0x32f78216c1f67a465460e0457c8af4def2b264821fa7e6f0e0eb4ecd7c3c064", + "value": "0x1" + }, + { + "key": "0x331a9c84f6c01410722b3943541a966f3a7a1fe4c2c6cc310e39a8901d0b882", + "value": "0x1" + }, + { + "key": "0x33246439787adf7836a6d596d30837ab876e4cc4e301354b311afc3aa228646", + "value": "0x8ded5e57ee8316" + }, + { + "key": "0x33b0fb0ce3ffca1310574d80e71e3c828314e95495be0130b4df6ca60289bd9", + "value": "0x8ddc858e79fdc1" + }, + { + "key": "0x3455e66d5bbe58b8f930aec6495610bda3028028706604b3698a903e275420d", + "value": "0x8dec4d8e9cb4c8" + }, + { + "key": "0x3457adb01684a7809a4040a308945fa82a28c6877a8580babff35f4cb69552a", + "value": "0x1" + }, + { + "key": "0x347f9cedb47cb3e80815cdc4542f003d492adabb65e81830a49876aaa336d70", + "value": "0x8dd2a4b74208de" + }, + { + "key": "0x34b3b591e1a5e575089bce3ba39411210c649ef7df9aab08a6e1cb6a54e5eec", + "value": "0x8dea10d19e2195" + }, + { + "key": "0x35741e597b02b407008393501930f2710417f813755f12911f9870fdce473b8", + "value": "0x1" + }, + { + "key": "0x358b654583e17a6c89524f324d1da661daee25ad440a4e5a764feb05fb4a441", + "value": "0x1" + }, + { + "key": "0x35f465f9f9d107296bb7f689d9ddb81d5e9aaa6f32e681614ee6b8884b1a3b4", + "value": "0x1" + }, + { + "key": "0x361b29905384ba563255d329328904422ae8d911a1705346926d12d42d09876", + "value": "0x8dcaa3774e643f" + }, + { + "key": "0x3661fb80ee0ff242083bd702fadf26357b961012797fd0c8f7289384e0daf25", + "value": "0x1" + }, + { + "key": "0x36e7701997c0e4ea018e4f9c6ce5df386c1b604ef0ffce5320295ec5ef85152", + "value": "0x1" + }, + { + "key": "0x37585865971c98086f810152171cb8e1ffa42e2ec26c9fd5722143b3e82b57b", + "value": "0x8dc55546c3c783" + }, + { + "key": "0x3855455efb485a3415b03833e4991994d7684172e7aa4f7ca36afec52e0c1cd", + "value": "0x1" + }, + { + "key": "0x389a00bc8bcf1b98bdbf9583d7df871f840bcc39bab2e0be1815115c648e6fb", + "value": "0x1" + }, + { + "key": "0x38f956a99996399ea2930964f8dbaae85272e199e180a339e49e8665adafcf5", + "value": "0x1" + }, + { + "key": "0x3904e0cea330a6df4a08b0c4e937c46830f1413f60bdbedd2e7fb1a6c93f172", + "value": "0x8ded5cfd834741" + }, + { + "key": "0x396cc5879320b85a09789a7f84a82efea9d40779347558bd15c0735aa67fb7a", + "value": "0x1" + }, + { + "key": "0x39a3e732737456e58a2446e1e553c9fdab84bfbdbb8be02ccaf843b347838f2", + "value": "0x8de3ea8e44079c" + }, + { + "key": "0x3a34da40854577852aa21e0cf4b778ce32bd89ad39cab3e16e627716127f054", + "value": "0x1" + }, + { + "key": "0x3afcc39fa40cda7719382e517ee9d07001b44f43a5c0951c5569820f8888994", + "value": "0x1" + }, + { + "key": "0x3b50d30d67076f3816ae943fcf25678ef5a0ab731cfc403f7f3a32a9e578a30", + "value": "0x1" + }, + { + "key": "0x3c4a17fda8826b30cfe651920477bb557de62050147685bce25ad5da4e3b7ee", + "value": "0x1" + }, + { + "key": "0x3c4b4f729c6d762ece6d1bcec5efde6e101722df6a5a67682dd7a4e0934cb2a", + "value": "0x1" + }, + { + "key": "0x3c57a74c779f6e2831b3a9c6b71d7bf3fde76998bcaebca74ae1f8a4c6945c1", + "value": "0x1" + }, + { + "key": "0x3c77eb0db214b949e5486cd43db06732d55cbdacabe43c8c9bd4e9c827d0697", + "value": "0x1" + }, + { + "key": "0x3cb7630d6cd6f91577ac5cbc2a66d360277a6de42e9fe39d38a7429780fdc47", + "value": "0x8dea88c507eb91" + }, + { + "key": "0x3cccc184b0b291fe23633d15f9a2a41201bd07d77ebc1520c72c8cf48155c47", + "value": "0x1" + }, + { + "key": "0x3d46b8637eb650c14015c4a3136610a3bbddd08d09c4f0b790e1ccb480e3e15", + "value": "0x8dfc28d6e2053b" + }, + { + "key": "0x3df82d63f61c38b16492abf032970595c5f95b2f977ae8f1572f9bb27ada1f0", + "value": "0x1" + }, + { + "key": "0x3e8b019b30e28438d9868f7bd1f5ebae4fd115105818666dc59349fea8079db", + "value": "0x8dfd064285cbb0" + }, + { + "key": "0x3ee4f14405bc87a76448263a4d1d6c8a74aa232f3ef433ecc2d4b0b59437c89", + "value": "0x8dde6da88fa9ab" + }, + { + "key": "0x3f39a3610f2d8c3fd1f3a14bab9a0ca3f91c91138b3f523a4788fe3eefe22c0", + "value": "0x1" + }, + { + "key": "0x3f658f512bbfa0885fe4cc4594c46e58eef091313aaa938704acd8c205ab69f", + "value": "0x1" + }, + { + "key": "0x3ff50882b640c3eb73194990145c971e9fcbb8faa75a2b72fa4f2b1ee9fc185", + "value": "0x8de2c8cc43d2c6" + }, + { + "key": "0x400a6d4ecbecc894010216a65688fbe8fe6f3a5bf5ef94156acb235255eef90", + "value": "0x1" + }, + { + "key": "0x41dff08191913269b91db46de107b705a34206ca66f88b2c47a979558c5171b", + "value": "0x1" + }, + { + "key": "0x42663116fbc7689173bc13bed9c673df82e810c80f8e40fc55cd0d643a58429", + "value": "0x1" + }, + { + "key": "0x428d123e9c718c602afef4f9a2a7eac3ed4f138cad6f1b81f8881502c17e4c3", + "value": "0x1" + }, + { + "key": "0x434445e006464139b571d6823e9a0adfa2ec8815f6c6ebeb7c298176360819c", + "value": "0x1" + }, + { + "key": "0x43600a6940c44f5ab3a775f2feaa453942308e80192879872e03855b7cb7725", + "value": "0x1" + }, + { + "key": "0x438d785f138e852a09140662761e7297d9ad296e62c09b73bac2941d67ef2b2", + "value": "0x1" + }, + { + "key": "0x43d0c436efa280d0df83542b6f8bc5f8ff8b00131f1c200ee1a5a33f8f19f76", + "value": "0x8dd28d50dfcf17" + }, + { + "key": "0x444579fa1991ff6e3ced752cb179258cdbd2f69f254b262ae802a8e338dc8ad", + "value": "0x1" + }, + { + "key": "0x449e523db4d1e3bfa9c2f745461ada9bd6986694cd8abc3dbdaaec564da75be", + "value": "0x1" + }, + { + "key": "0x450c8591ca0539225510bb1c0e9ff53b5ff68337056fc5195dd6c143ce2eb8a", + "value": "0x8dd3e28b756cfc" + }, + { + "key": "0x4624a9217017c8f9b89f064ce13ed6d7e1ad7808c89329ce8fb0ab9cff54f6f", + "value": "0x1" + }, + { + "key": "0x467d7613318baa61c07f9855a432380876592346b9de1703442f6cc1c5e6603", + "value": "0x1" + }, + { + "key": "0x4692da77a7b0b76e4116bb922b56432fae68ecc84a6a252725d2b2c9b2a3d6a", + "value": "0x8df68103289b30" + }, + { + "key": "0x46a3e3c657b8d77fbcd61407b64079f131354a5fdc2b5798d7a9e2fc0531244", + "value": "0x1" + }, + { + "key": "0x46b254458f0e949a6c5c0d30d7353ed8673ab5f15ca81964c10e91230032ff6", + "value": "0x8df64e2efd7137" + }, + { + "key": "0x4765dc79df8b2ff9cb00947b615d9b22de878ba18ef545e4d56183493dfeb00", + "value": "0x8df6c4a99e4510" + }, + { + "key": "0x47b472d9b2e8295957ee17958cacf864b23882c650a3e030f0be4545b5f82d0", + "value": "0x8dff0958ae2138" + }, + { + "key": "0x47d36c76afe2ddcb1d6fed0a05733ca6087f52dcc77e36962f34b4a2d6715a0", + "value": "0x1" + }, + { + "key": "0x4800a46d53a452cef06412426027b97aa5bf8ede2f0ada3a6572d54af59f4b7", + "value": "0x1" + }, + { + "key": "0x483d45474228b56426807712d629994f62dc3af3848f4e08862265be773ac3b", + "value": "0x1" + }, + { + "key": "0x485d3b59026b6de0fd5da944569d5afa19ce7a84b8c684f4d4b8d8fdb379732", + "value": "0x8e0e73f3274a2f" + }, + { + "key": "0x48615efa52cd3e67bf1bfbc679468c953bd243291248dfc86732a6edc515a84", + "value": "0x1" + }, + { + "key": "0x48b9c695cea50493e2dee8795661cc06484682b34200b91db89e4dbec3596cd", + "value": "0x8e0c71ea61b57f" + }, + { + "key": "0x48c26133bd24fe0d67e5bd2d3d0dac8119bf7bce5752e10e79a3a6936ad5703", + "value": "0x1" + }, + { + "key": "0x4926244e3947504cc44d6eb31416bf3d2d72b21ec923b77aa3bbede744cd299", + "value": "0x1" + }, + { + "key": "0x49849c5ead978177920a1178be1c9b0e9caf97cda93104bf193cbaf0277684c", + "value": "0x8dedffbdbae492" + }, + { + "key": "0x49e3975d754f726f5ec605794b6c676c77a40e8ccfd035d0ca27dc23ebcf43b", + "value": "0x8def750f8a5cdc" + }, + { + "key": "0x4a871ac8b63ca66409e0ed2b983dff213223379e981d2858c2ff16164b469e0", + "value": "0x1" + }, + { + "key": "0x4b3cac3b282bc2496af9d4e58db75cab212cffdd0118d9e0787bb684bad2f99", + "value": "0x8de807541e417c" + }, + { + "key": "0x4bcddc63760285ba6398028935f62e1d07cb9326ce5959953dec0a6b4ad77f0", + "value": "0x8dd4bab63fcb7d" + }, + { + "key": "0x4c4526af15d9abddd2c26d3668620ededc9af9055e58912a04e4ed2c58c5ac9", + "value": "0x8de091cdd8c09a" + }, + { + "key": "0x4c972ed4926ddeb69bb20b873f57d28cd768a98607f56c75a6f5be3d0aaf2cf", + "value": "0x8de1bb0b67560b" + }, + { + "key": "0x4d0f7e249d7d03a72484973a081bb479a35a25550e5028e93a01650a993cdec", + "value": "0x1" + }, + { + "key": "0x4d9891e4da4d9cabd9d6530352f4b429035a9dd2d6f8991c93220799e8343e3", + "value": "0x1" + }, + { + "key": "0x4db6898278f59f3f669f50f36fa0052726bd0a64d79ac8f7c84b8435c0dce82", + "value": "0x8de8a245cfa492" + }, + { + "key": "0x4eef7e71f2cb56d1b2032b387c79a6e3d3fe23016beef73167990949791bac6", + "value": "0x1" + }, + { + "key": "0x4f03e428db4a998e6116a8aa8db9523afbf2ce9883e5bc9e7e2ddf67ea1f437", + "value": "0x8df4b23b3c73d1" + }, + { + "key": "0x4f6253109b4cac2bbec754a2eca79359a5f06d0cfa048e8ffc13a1b385dd8f8", + "value": "0x1" + }, + { + "key": "0x4f69aaa85fd2abc0e4d8889ac52d5b0ec7321389d25f8e9e3566323cbfa2a2b", + "value": "0x1" + }, + { + "key": "0x4ff39a65a7078cf719d42b81fa55137be6e113eef335d43c5ef77d1d598b017", + "value": "0x8de473cc0aeb0f" + }, + { + "key": "0x50a1abde7ac8a250da7d26e053aa71883f182cc599278f42b27ef98964f8585", + "value": "0x8dd3c823281bda" + }, + { + "key": "0x520f5fbc9812c45b4c7c8c3fdb44d3efd70e9c5ede3664a0a60cc61e3ca3e14", + "value": "0x1" + }, + { + "key": "0x524d68345533dc3112a8adca7ebd00db09033d0d843b917d24e916354b6ca8b", + "value": "0x1" + }, + { + "key": "0x53a47d355d78e426b17c4c2a3891b15c59cf15e77a7194d30fc7e511d25d9e0", + "value": "0x8dfcceaf7ce6e0" + }, + { + "key": "0x53e554d61078d36e9f9c792f23a4d4db6b29dc4e8b3e9f8ee1ee1166cccc515", + "value": "0x8df29ed9799f08" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x55f0dd811994b2a93" + }, + { + "key": "0x54984012f1f5027e1dca6600bf9f24ea9cfeccd5c15926714cc582a55bcca3e", + "value": "0x1" + }, + { + "key": "0x556c77b8426528f7a12f0c6db708ba5b195152c0329f0e242184686ed9b2490", + "value": "0x8dce7b07af5c81" + }, + { + "key": "0x55eedd99b3c640f2dffa94d3d7bfe1e75bfa3290496f7200a7c2ca1852e0df1", + "value": "0x8e03be134dbd50" + }, + { + "key": "0x573666ded98c097dece5dc928e752d5ac46e22c71b02f12d02078f47ca001d1", + "value": "0x8ded7e404eba1b" + }, + { + "key": "0x57963069447dcd8b95809ac3be92fa00f533264cf0dc3b48670db3cdafc1395", + "value": "0x8df056380831cc" + }, + { + "key": "0x585c5db4d99d90733684d6c8b7eadc4ab894ab1a9e610ed405c9a449200b523", + "value": "0x8dfc5369706d76" + }, + { + "key": "0x586e01797305ad6031b9d42351921efe615f3ce2f14c46062be90f58842644b", + "value": "0x8dd0317f9a81aa" + }, + { + "key": "0x58d09e65a09ea242c974f98f0c0c4dd69a777f595de4698186b1ee77cec6010", + "value": "0x8e04614a4a77c2" + }, + { + "key": "0x590bf74e426f1ddd41909047e4edb59fb769e818a584548bd667f09b266c6dc", + "value": "0x1" + }, + { + "key": "0x595f8bd5646ead1e7964bb92d3f14bb8167bca3a8ca45f466dff0b914c677a5", + "value": "0x1" + }, + { + "key": "0x59670ab395bdbac1b3a8c4009b738badfa74cdac52f74b2b13931dcbfa20131", + "value": "0x8df6daa853acf4" + }, + { + "key": "0x5974743be3f049de3187e08b2af31a47ae86df5b7a9a9e95f00455d16802b20", + "value": "0x8dd9292e0c1e77" + }, + { + "key": "0x59d8be276b904d76266be6f3fb22ff560eb387a36f796a39d414fef917429b9", + "value": "0x1" + }, + { + "key": "0x59df3b8a60482b7a1483ced9dd8ae9522c2ac282e1da1c0b7eaaf208df64b1e", + "value": "0x8ddc8a52e60fb2" + }, + { + "key": "0x5a141bbcd7752d2059f2bdbf070d7071c6559b6df61cac1b78a77ed63270eae", + "value": "0x1" + }, + { + "key": "0x5a4170aa7ded377b9c7f1d0256d079be3400b1b18b54d5696b221c3b3914331", + "value": "0x8e0dc8a4f45c3f" + }, + { + "key": "0x5aee1722c2a4e24ad53a6cedadeb45fee8c6ede9a4ad14d8266b43196fdd3b3", + "value": "0x1" + }, + { + "key": "0x5af084d9f883c3ca2810e715936ab4f624d21d0c5886a62b5c5bf28c34c134b", + "value": "0x1" + }, + { + "key": "0x5bdd9bbb239440dfa26f37aebc86320877d870be701c7e0e60c848cabb4f2e3", + "value": "0x8df0d19486c01f" + }, + { + "key": "0x5c41fead4a1ce2479da98eaa149ec2597fe4eda2f83dae91f9add1149b683f4", + "value": "0x1" + }, + { + "key": "0x5c62aeaf526cd94bb6ed07c9d66750d39dd08182df4b2ee87df92c0e3ced406", + "value": "0x8dec97cb8e1506" + }, + { + "key": "0x5c9b982bde83ad8cd8f4f68dfd6dcf5f35bfc7c8fbbb7fbd19a93bc27c5e4b9", + "value": "0x8de15026533b1c" + }, + { + "key": "0x5d0e6d7247e0952473d2c3105b5c28d9f349d1131fc1fe6180fce90e638c8eb", + "value": "0x8e04ff5421c7f3" + }, + { + "key": "0x5d1ff1a3106ca278be0ad4336113d7bc65a841e99adf8694bdebbed88081848", + "value": "0x8dd8ea25a5d8cc" + }, + { + "key": "0x5d2e0b7aa7fe3b46501a9ed6724769ac4229a7459dc22036511a1e4800b847b", + "value": "0x1" + }, + { + "key": "0x5d8b5cdb54285f0077509094b9f9e4a16eb0f1d28b3c49e99b451be886fa5ab", + "value": "0x1" + }, + { + "key": "0x5e261f7cc9bfc56d28bdc4e01e110a9f47c8afdfdf976893350d465b05f6a3b", + "value": "0x1" + }, + { + "key": "0x5e5ac122f1bd5cf60b302e661bba571b87047a4232fdb418e9ea5c2d0148157", + "value": "0x1" + }, + { + "key": "0x5ea17cadf9cc312fa00c6a31b76bea87dbc970d903461d1aa5818f274ff93e0", + "value": "0x1" + }, + { + "key": "0x5eb8e1bb6baa45ca2c6192eea33674bc22782a8f63dfd42915ded0631f06182", + "value": "0x1" + }, + { + "key": "0x5ef92b14bd604fa164defb67038b774c831fdef6fd2679490deabdd8bc6b541", + "value": "0x8deb831cba94fc" + }, + { + "key": "0x5f19b0750c2e59be5f24fdbda322eecefaf39089ca31eb241376657106cef04", + "value": "0x1" + }, + { + "key": "0x5f5a37308679b2838b6893a0bb977bc7509b5f31d2b246e0b76c4051e921cdf", + "value": "0x1" + }, + { + "key": "0x5fa1c3e53547ac4f7376415a8a6c28f19c6835630af7fec71c35de17e06d1b1", + "value": "0x8dee49535a0fef" + }, + { + "key": "0x5fe9236c79c9fc8ee7e5efe2646a001eafc9e51711e4f0a9e12342bd12eff72", + "value": "0x1" + }, + { + "key": "0x602947848bc5c77040c8416d3b68103bc37f1c593df4d91f9e3059505ffd940", + "value": "0x1" + }, + { + "key": "0x612fa032a6b469d619750a711aba717c2e86bd2d9f805f7905766f5c5b9428c", + "value": "0x1" + }, + { + "key": "0x61586f90b94364db496927f36aad0359b95222492a0b76058a60f3d168d4a8c", + "value": "0x1" + }, + { + "key": "0x61885371c96c6bdb3340ec1d747fd6b9940e48dbb36e1447be1d58f605d4677", + "value": "0x8df03104cae30e" + }, + { + "key": "0x61a3a43fcdd2c641a858d51d03d574702a5761478c9806f16b076ddcd39b48b", + "value": "0x8decf6f201f338" + }, + { + "key": "0x6260962b86043946be8e838d17d9e2d0ff737dfca64d5e8561bb98c48fda105", + "value": "0x8e02575b8a2c99" + }, + { + "key": "0x62714224de0774c23fa821e1260d25d631c1f52071d02d0d1902752acbef438", + "value": "0x1" + }, + { + "key": "0x627d14dd9e29abd685638cfc7c5895f19688d54c3be1dd8122cb617f58ad4ac", + "value": "0x8df659728f970f" + }, + { + "key": "0x62abb91c7a917b630fead054baf606b06ae8b52eba8a59638ef5b410ef39bd1", + "value": "0x8df9b1d2c9d906" + }, + { + "key": "0x62ac16eef085942eae7fcc4ba7b090f6c6029b9b0fbd6a8df72f49a10e405d5", + "value": "0x1" + }, + { + "key": "0x642489877b663afd825daad8b696c95b6b9c51f71972fd2fb9d3f460b502206", + "value": "0x1" + }, + { + "key": "0x64276354b8fb3897ee3b048f0175eb32547775ac07d2d033f925bc59a678914", + "value": "0x8dee6739ed670c" + }, + { + "key": "0x6470151033e57b681e4919a7a0b2432b0698cb63c06d252c59f0663408ffef4", + "value": "0x8de14acb0f04c0" + }, + { + "key": "0x64c90e8def8cc67aa84f8a97b7a990c56303eb2a3ffe908f68281e0f5ae011c", + "value": "0x8de12604941b98" + }, + { + "key": "0x6502d9596f6ea1c2dfe1ad228ff089b8aebc130b7724d64659293788acd9f46", + "value": "0x1" + }, + { + "key": "0x655923ef3dcc53c4fe43ab00ca279aa2aef7eacf812e63f69db47c65b9c3c84", + "value": "0x1" + }, + { + "key": "0x657634e2fb85b52606bff68bf0f22a9391774f3171fe5c3442112e02c4c772f", + "value": "0x8de46b70f6322c" + }, + { + "key": "0x65c216af08bc9fd8cee995d1d31bce4be924379b59d8be77e67a160536bb053", + "value": "0x1" + }, + { + "key": "0x65c23924ab9005c8f9b47f9fb47ad31f6f562483cd91ba8fe7aaf33b33935cb", + "value": "0x1" + }, + { + "key": "0x65cb3a80531507498bb42246862c4915e9cb69f8b86d336b0889f7342e81d02", + "value": "0x8df3849ad192fa" + }, + { + "key": "0x661a5dae935856372b739cef24c3ec5822042a0aff08549dc200bf2d0b4e490", + "value": "0x8de681c37889dd" + }, + { + "key": "0x66f9f164539a75ea40a1aa64889a4bb90feae902e54e48280dd1ecb7bdcb961", + "value": "0x1" + }, + { + "key": "0x6775caafca32898e237cc3f7d7544105354ba32adbb92421ab09da58be22ab8", + "value": "0x8dd49f7e83c902" + }, + { + "key": "0x689db6c3d42fb77bdde2908e6bfb50ae1a264deb74f011a4033840221ef5f36", + "value": "0x8dfe03b9d44a94" + }, + { + "key": "0x694b96f5139847db506c6d00d72f5009e78bfe89b0ede797cfbe553ebc899fb", + "value": "0x1" + }, + { + "key": "0x69b64b30d9c234022f0a0386a2ee0b05625f0606e3563462361ad2e8f195a54", + "value": "0x1" + }, + { + "key": "0x69badc62f450611ed8fbf0ff1dd698d937e52fded263b51d4a7462fdfe5ecfd", + "value": "0x8df979d9af5767" + }, + { + "key": "0x6a37412c03a9e0a8014f7e8954a7f65a6dcf3b41030ad7be90bb2f0eaeefca2", + "value": "0x8df141c994d44d" + }, + { + "key": "0x6a55f11e3520dbac332bdd0a4f5ff71fc3b945574b2c580c1a1b2449c8591fb", + "value": "0x8dd8fce6437a8c" + }, + { + "key": "0x6a5ef7200647f8cd9720057264f59e24e7d13958b901534bb9009a46e9ef556", + "value": "0x1" + }, + { + "key": "0x6c57b54f74e602b85f35572473257e9cc74f3a1ddd33e4486af4e5b9a9451b9", + "value": "0x1" + }, + { + "key": "0x6cdd012e4760cf720dcd8564aa8ccf25831a07a5f4cfa851c7bd512a7bed05d", + "value": "0x8dfaab9902b89a" + }, + { + "key": "0x6cefe2dd5afb48745543010943eff9c98bc8f1ddc3e689e7383fdb8dcb91fc4", + "value": "0x1" + }, + { + "key": "0x6cf4cdb2c5a49bb36ec0a99d139ae9f6ce15af58d6fd0e1f28ee41f0ef259cb", + "value": "0x1" + }, + { + "key": "0x6d91141570e158b6710992b8d8935d7bcf5829b34a93bdc4b01d27e582a2489", + "value": "0x1" + }, + { + "key": "0x6dafb14967ec9d27cbee417a03b25fb8d89a2521e7ca84495b45dd06f4b7a60", + "value": "0x1" + }, + { + "key": "0x6e7368f7ed09938ec6d33aa889390d8bfbbdc82552e39e51be513e343460b82", + "value": "0x1" + }, + { + "key": "0x6f10ecf24f16095dc3e157aaf80fd21c50f31d687b0254ab52af7266fb1aec1", + "value": "0x1" + }, + { + "key": "0x6f59c62bfc9237d040c9a7724a3abb1ac477817b7beff141fadcf28691f5546", + "value": "0x1" + }, + { + "key": "0x6fa4bdaec9e9e15edbd9fba5d06a6619a34cf1b2d4d5e4d543ad31f34df350f", + "value": "0x1" + }, + { + "key": "0x6fb4cc900c622b8f551ed04ffc05dcc06440c1debdead45a06109a5a10dc99d", + "value": "0x8e05b2cc68a5a2" + }, + { + "key": "0x6fef1326975969712551275cb742c444dfa1a8bf3d28698ddd2b7df883a2d9b", + "value": "0x8df4158991a39f" + }, + { + "key": "0x70a34e992008687439eb7b3d27f9092c2dfd5c746fa91b83c979c1d6e0eedd9", + "value": "0x8df85fd8c28db5" + }, + { + "key": "0x713a84374fd65f5a32f7ad33bf7364f5aa54d4b808b26d67f6df4e3ffbcebe0", + "value": "0x8e0a74d521eb66" + }, + { + "key": "0x7141159d944b50ef836b0562043d480bad37b11c3226c45094459fa6d551450", + "value": "0x8deeed38753172" + }, + { + "key": "0x717af73cab9866eaccb464f20c6860f3b5718d9483f2044946b77a14be5e106", + "value": "0x1" + }, + { + "key": "0x71bbd68db1b1f6308a737d6aea9f3bb98d49fcb83ac81c78f1da660c10ce727", + "value": "0x8dfe61c6bf0a36" + }, + { + "key": "0x71df2acbebfbddfebd5323c4d6187556b4f664c002986262d209b8471e9ea7d", + "value": "0x1" + }, + { + "key": "0x72df145c025ca49a0590e8a2111d79aae5f53d780d7c338014531433fc1c535", + "value": "0x1" + }, + { + "key": "0x7321726c779db8844abc91ac2013f7aeefb3a436203900f46d6b05caf56a5db", + "value": "0x1" + }, + { + "key": "0x742b036cfce90c0f8e905baad06b6fba117da6d411fbb605c0561bd3ebc0d02", + "value": "0x8e02580d724b83" + }, + { + "key": "0x74f3e574355fa1250a1d96df058333bc96646fe308f55764c4bd4470f821d14", + "value": "0x1" + }, + { + "key": "0x74fb3055479b6bb2ec9de7adbb5d2ce148607b1b2ca7be64e65354124afcef4", + "value": "0x1" + }, + { + "key": "0x75775398361d13bce39f7e68bd3d0f86cff2e71a7b9711fec768edddebe0e3e", + "value": "0x8df30d77c579a2" + }, + { + "key": "0x7589b4e29694e3f024fb591ee5f0838d6406f5bb6bd161aab97053c4d885443", + "value": "0x1" + }, + { + "key": "0x76779deada7d3ec92b7d5aca51c07ced4126232cc293aa89f865533ee66b7e4", + "value": "0x8ddce36d8f4762" + }, + { + "key": "0x769fa04e087de09e86833711e816496102b664c25707b6dfda4816e16619c31", + "value": "0x8dc3e4e9d56a35" + }, + { + "key": "0x76bfde9959afdc94a39daf72356597b847c0b2ddfb17ad56a37dff74ea27bb6", + "value": "0x1" + }, + { + "key": "0x77312bd48274bf71c86ac60c05b2b1a94d2287ad7b8de8a12d3201a03f5bc4e", + "value": "0x1" + }, + { + "key": "0x776c150c774b62503b7b74f8a7b9be62c9a3a5843dcae772d9ae4dd5c2ec1b9", + "value": "0x8debd6bcae6ba8" + }, + { + "key": "0x779ff3ce786b1baf0bea8205c51801f6a9204dc12314df41a710cb162b1c2a1", + "value": "0x1" + }, + { + "key": "0x77b25789c4942ecbc9858ac48a01e236dff0968f2adab8ce2faab033f5b3d63", + "value": "0x8dd8bc976fb9d6" + }, + { + "key": "0x77e3c7856dd304278ff93b120e76451dcb9ccf473985294b1b9f728f55adcdb", + "value": "0x8deae7f135bf4f" + }, + { + "key": "0x786079baf35f6e76bed9ad4d338e854f2168631811602b50d2df291185982bf", + "value": "0x1" + }, + { + "key": "0x78fb2bdd4a439f07768894ffd2f161aaa2bc020c5c1169622eba8fe7391bcb0", + "value": "0x8deefa70db01cf" + }, + { + "key": "0x795d5e103b62b3bacf21a67694c52e0a24acfbee84d65ac4d919bec86c09f1b", + "value": "0x8dd1c5de9cc302" + }, + { + "key": "0x79bc20d989a620cb9cde3505b4586cfe02390acef6790223a237baf5880ae09", + "value": "0x1" + }, + { + "key": "0x79e3f144b52d54da7197acc79a2da563aff9360f14da0699da5538f199a4e4c", + "value": "0x1" + }, + { + "key": "0x7a444376af096a7ffa024ff7a31584a85dc7baae556228deb00517c52fd8fb4", + "value": "0x8deaec50316c0e" + }, + { + "key": "0x7ab2990a5d9a9104f4e32744b40b729311fbe7eb7133f75711dca171d3d4d50", + "value": "0x1" + }, + { + "key": "0x7b465dcfc9855260499ba9a6021f7eb03696caae853744f9574b059fef7e22d", + "value": "0x8de65d879976b5" + }, + { + "key": "0x7c31b2d9acff770c5e5fa9f9899830e61d030399a907164753b17f093c74a53", + "value": "0x8de98c1a54703c" + }, + { + "key": "0x7c70358fce864d123b19f4bba61bfa1160e9b56f0c1c78e72fc8cf3de1e7108", + "value": "0x8dd5f00f54f06d" + }, + { + "key": "0x7cc4f3d56f9964311c40a834ab6322e21ff058c8993a2b10a31947793513fcf", + "value": "0x8de587958cc799" + }, + { + "key": "0x7ce952b4b2ba3585ab388c86002610b0ed30add8c3b21c357957198ff858e6b", + "value": "0x8de96919e551d9" + }, + { + "key": "0x7d086bca7aeb680167e9be8dae7f122b7a986328bb47009af4b9933beb84312", + "value": "0x1" + }, + { + "key": "0x7d9764430e9c442e245ff9729efb89aa0b7c453e460404f06cdbdd6fd9e20fe", + "value": "0x8df77c615011a1" + }, + { + "key": "0x7da0a82b3b955a971cc28e6134e29e612130b87b59914261db581d24f5ae07e", + "value": "0x1" + }, + { + "key": "0x7e0875a92a2578f4814a64addb6bf7c01187af2d8f22720364252289983b81d", + "value": "0x8ddaf729f17f63" + }, + { + "key": "0x7e5cfa03e5a5250141f671b578d21e2bb4ee95080cacefc5b523c309ca59c35", + "value": "0x1" + }, + { + "key": "0x7e64f78462e406d8f0bdc79f8e40a8ba82acd9ae221fdc07fb556a5baa1dd5b", + "value": "0x8df92cc5d53311" + }, + { + "key": "0x7e887139891880a283d0379a7c045071c56fd1a51a8a20dff126b94bbf2022c", + "value": "0x1" + }, + { + "key": "0x7f5cded0bb1f4138fe07b7cb88054d1b3c76335d876adad47559100b0a07dab", + "value": "0x1" + }, + { + "key": "0x7fd2d29743040cdbe40dd47a78d9c4b3a48a05b4e42e462a7a0ebbf9886e930", + "value": "0x8ddd424b938376" + }, + { + "key": "0x7fea98501906010712d3fd0275a36f698bf612a38722882e26c70ba2000f693", + "value": "0x1" + } + ], + "0x1": [ + { + "key": "0x9752", + "value": "0x446099625482113f8d7025cf27a20eedce56a96bc3f8547591d22271e4afc12" + } + ] + }, + "nonces": { + "0x6028344c83f128591c5a1905e734c37f6449505087573a54b99891e864ef8f7": "0x45", + "0xa91641858e346eee18cdb5985b97a73eedc7fdc92de8fd3cef0b42bdbc00d3": "0x23", + "0x7b3796a71a75e9d55aad1d46057f6facb3040eaea69d255c6cca52c9124e94c": "0x60", + "0x19994bf4904edd8efa817a79fecb999e7c622f2643aea5d54647c0031d724c6": "0x60", + "0x5ea1cbe943d1a798d02899e2b74b7626b315d2b81febf7b8adf33d8e57dc91": "0x4b", + "0x4c37d767a43169fce247342e46438d0bea2b0d7f4efcd4a4686615e20a7c417": "0x29", + "0x385f7376f9614f368023e004031b50167fcd10b85b9cd45ea52b56c7dc2431f": "0x6c", + "0x3341e828e15b839729b07957cabc597cb6556e61649a0f3bf98578f4b542c9e": "0x40", + "0x6d7caa4818f9d3d4fcc09f69e5c776ad60978fa701d99a6c5a0c70b7b25e1d5": "0x30", + "0x481d6bc11e059a6f76ef7f3967cf22b9a0ad02236c59bfd641076cbf371628": "0x2f", + "0x11f8473d749770009ec91b9e6f723403f9be76e2c93c62919d14989aa9f343d": "0x36", + "0x3a70b8ddcec9d026ff4a3fb2024f7815fd47dcf62716107d34a6ae5ee861e0f": "0x6d", + "0x275c01d887730e6551ff416d8ef128d2a79afcbc244c776c819aefbea1818bb": "0x3f", + "0x41157baa0cd2f7bc1029be65db77a81f97784d3f5aa16f77775d9edbb4cb615": "0x60", + "0x45588fdb74513b42789edc109403dc2c2ac13e1a7bbe19a99d9ec45297f7450": "0x3e", + "0x14169d652eaae2abcfa6fda7c924f8da98566eb1f5f9f33fbf09629ae2b2327": "0x45", + "0x1bf2463473be14da2f0ba583dfe08a8465ba99771450d67599de126fb58da9d": "0x46", + "0x75eacc62294b96b3a09da916ec3e77bc37fa6ab5176e5bbd28aaf588d74baa2": "0x43", + "0x3f9e6e9b92cb5febf0b6b79209a9080a53bc94642b01bfb5fe2b61289f18b2c": "0x35", + "0x4540dc7107f1d6a135b575115091ee56ab13c5cb22a6188a2e7fccda0e009a": "0x5a", + "0x5826e2098829177a40c6b697dedb6b2c24d0378abb5a0dd870a19aef97cb78c": "0x4a", + "0x1d00cc561c943b49f5f2bac27591530a55970c3d0716317ad42b78cd6fb469f": "0x46", + "0x755a7995c1b920ef28e18c4978d73a1c935ce206722c4a8398a1735548abe2d": "0x16", + "0x691301df126b5190e5227b9fd62788723db7b5ea790c4e1da8f85aa6235d46d": "0x53", + "0x7e83c177ff630265eda312465978a679b25f8eb253c000a925fa5f42bb233fe": "0x53", + "0x1a06329b78575c630b343cf559544f84241bc44f3c63bfb013678aa8145215d": "0x7c", + "0x64db11e31dea49ac0945a548fed4b38657452f98f0f29f413062b12873f4afa": "0x2d", + "0x6f4bd4995a3282be1860aca91fe2a498942add440516467aca9da8a1bcf4a41": "0x69", + "0x143e4f7f4f62e00b9a027fc1d1e3e91fb655bb0c68d152a3bd81bee1ea38471": "0x49", + "0x78a19562b686d6cca5841bb192c83795cd8a1d9ffde0c0b4a53cb004575818b": "0x7c", + "0x13d16147f8cd04b852cfdab7107c6cb96de2bfa2a020b22694e8067c87eaacf": "0x41", + "0x5b574462c662b90b11ce7c5750ac6b71d21d5b84c62a6085220557f3e54c14": "0x49", + "0x21bf47cfe73804095e3e1b25e656ca2ca9787651de3e69c9950943f501e30ce": "0x2c", + "0x46e53968a2b5fe68b9b0d6ba6d8a475211b845759822e9161e3cea1afbb1c5f": "0x37", + "0x3dda73cf3d5558a6e785f54cc6e7207b0173f0cc3cce20f64992566ee734d7a": "0x4e", + "0xd9def9409244513635be50767308e1c80a10bb5d116efdf78b9de36620bcbb": "0x24", + "0x59c0424db8476a9d158e52848aea567f806afcb99141b8ef0a543758db2ce60": "0x65", + "0x3732d673d40f828b64bfc85236012ce2c280d3c936aacfb8104f7d4c8c74bb0": "0x3a", + "0x1c23816c01bfbd90fd57873025b4d5b86ee2cccfbad90d3a7fa25dc569638cf": "0x64", + "0x200c519983a0104346afba82a2dc4eccd4a4373aa70a13316626e932cb6e58d": "0x52", + "0x2ec59285aa2e4cbfefaddc331f3d876f207aed3b028f5b62957b0a464f92918": "0x46", + "0x5726d58c2c6bc370074cb67581d03cab05e1304365ca0ee9f4ebf3faade40c4": "0x42", + "0x9b0e317d0bc8a7d797d9a4575dad53eccf44b671c0591c7ba82f5804d12985": "0x40", + "0x2655cd6a02dcc25554bdddc055f304c84bb130828e1b162c82958bbc92dfee": "0x60", + "0x1e6da06bc1d877fb69dd4110f38f0e5a206174c57305df51653141381aaaf43": "0x35", + "0x2390a4d84cf00928adf4058ff1f15c8fe615ccaa3ccc1cd9b571d8be7ae806a": "0x3b", + "0x451d8a5c0ea89978d07a24ac6c594e1f0b57ca0a141ba357d8e169fd73151a3": "0x24", + "0x689549c1747f38f450a34084202987ae19adc553d7ce10c3d5136ed8f768334": "0x43", + "0x350e280198d66aaecfeeb902b02089e026bc792f5ddfb88b04ebc92218f8fcb": "0x24", + "0x67e4d23e57541aa5d087eb95ec42bff6a9feadb0ca6dece4b60cb6e9b8c1970": "0x41", + "0xba1224bab4ce060da0b89da3294a672ffd0b4c313430b67aa6397510739502": "0x2a", + "0x40de1d323a5870a9b1011b1476bfd58f92a35ba59b1f9f3c69cb083fcba122a": "0x51", + "0x15bab3e51c95b9d58b038c49fcbd26d6e163cafd66d2f2cccfce75cee26b762": "0x2f", + "0xe04c9e37787de848379c7898612cde59fbf95ec633deeea3e34e81f1d7df56": "0x19", + "0x57dfd6da6e2abc9b831a908fe8d4ef45fe2830c3ea287ec2341c4bd88046574": "0x41", + "0x33128bd86065b89665dccf20b8224238a3f169cc2aa63ea3de1d4e1b4431db0": "0x2d", + "0x5f34cd49c033df5b7d3da352020e839e88ca2c28025e25f70a6a485d68fc0ea": "0x46", + "0x87b5c2536abec4170cd59c7ad72798d6dd22bf2a77cb5d36cb68876d59d258": "0x14", + "0x6075da58eeaeb2c380b51f5115dfcafbafc70ea16a200175ad50937d50cbc3d": "0x2a", + "0x6bf239cfd8ddfb4edacc070a23929b9b2522585548656ed1de1033d1765b25c": "0x3e", + "0x49872eb6a8d0b7336f6577bbefdd1667fc0ed6f6df6509a6b52d62048a38fc6": "0x45", + "0x6fe8b5ce08982b6ee4321997594e23a9637fe0d45bfd5b5d718695f08b38a72": "0x47", + "0x4dde2846e7cce0c39e57113809340c87421454d8d7c48167a7a2db9d0ef7067": "0x41", + "0x58643681bd6dbef6bcf4828660ddeec18f3d669b12ec626f14092306fe80e99": "0x64", + "0x2cbd65c97f07d4b0830802c819049523e1b8d30cc0bf8d4246df94854faa766": "0x4d", + "0xc24b71d1cdb836ea2a8a5d364fb9131c44fd4e15d1129f2233e3dbcdfe855c": "0x4f", + "0x6804962ed2a44ddd07ad2931838b13ebc114b3e7f91b220fee99a5aca96e83b": "0x42", + "0x36b39a015dc8b78a90ebc74d8f98a7b5a6cdc718118014291966650d6df65": "0x37", + "0x594a6c429ca64604465758db99ef286d5c00d847c8072fec3ff5f0e6b65cf64": "0x35", + "0x4c7fbf3010747ded03b3cbd0a8bfb888cdeb9080a06f5d0d1e32e36473ac5ac": "0x21", + "0x79b0d5fe892237bcdc0979892a9b2790f23781d41aaa8adf351c7980c8b65": "0x2c", + "0x7b4ca69e72ffdbb43edb9266a3ce13b385e714e06f6aee2d7f2215b405f6a9a": "0x69", + "0x176c25d47570070342b173716432127caf510d2b00189a3d8c9c0266297ec30": "0x3c", + "0x73f94dad20c07abaa57a278d02d169b48882bce673c421251686075a986db83": "0x5a", + "0x51d568676ce46d5f9a0d7c23c7c72cdb8536f38d74b3138f3cb9acae98b074d": "0x4e", + "0x40a560ccc59fff23ec01af1087d97bab10001e48e0fb493bec9c4c7e6831cbd": "0x5a", + "0x5032f6bd44ec915ff81e2a450cf2dcd1e28534d804ea9cd38d186dc64c1ce80": "0x4f", + "0x401930eb5465af9c93f63defae98fa9ededf374a901f24f1210a150923d10f7": "0x20", + "0x2b24cb0ac3991cb6362f305bb241e0e874784d44e89d08859536270a29a3799": "0x2e", + "0x20f2f2964d6cb9859f1d264e759fe089eec481f131defb7137878c36478bc9": "0x3a", + "0x34535ded79eb990827817ffa6c14988cd29970cd3cb4d5943684335f8360720": "0x5a", + "0x63e18fe7f3cb5a5194204ba9107a7f425c503c6adef0b686127b14bdeb5d302": "0x39", + "0x7b3f54f0755766215caa99b8ce31250020050ac00bdbdc25bbeb1cf5035388c": "0x2b", + "0x708610e23e4fff8c6434eefadcc284215b0ca10c5b2530d784a547ab7ba6c1e": "0x46", + "0x4bad3730634830da8c2cea36bc8c0103c47a074f259edd5aba3852e1245a9bc": "0x66", + "0x1d751f8d431c913531632cdaee1f2598821304cdb401170a91c76f0d5919a9e": "0x54", + "0x1862d76a292338a2634814f9f2ecb90684c52e1c3f600388865df686cf4e54a": "0x52", + "0x77845f6d3bebb7c5e30619c191333c3cae03565c2d367fe68bf73dfe1197bb9": "0x59", + "0x4e17f08446389b5cd0df8953acf3a0f2f6a6b2a80abd762b0101e7c6c103157": "0x2e", + "0x247d1a8c411f2a456bc8a538fcf23efbd493c71b73f7421a8a4657147a59609": "0x76", + "0x4102dafaf51f5e6c854259a48f6ccde4fac083d2dec07e784c5c38e7c6e9a8d": "0x38", + "0x3acd1c7261d5bda1736a89318f1b662d1ff804ba44a0c510cd2832156bc4a6f": "0x63", + "0x4a724a4229813f34e274837684c652260f7621f76e9457942f05cb59fe4469d": "0x23", + "0x71a161b38b1229d32ae61b14a2f44bdc73e6664ff8b3a4184f66abca2735fdf": "0x2d", + "0x3c875403ce3066337b984c541ecb4f47557e421e859816e65bc85a402abeda9": "0x4c", + "0x7707b0c961121ae62f4ef63605121041f2754bb095e682a4544b021aee7e2b3": "0x6b", + "0x6c55ba1f4efe13d3eb06441582c3aef616542be06363571d970ecbceb893de2": "0x37", + "0xe2fce66497ffbc0b04f6d1c27eec2f8da3c4b7ac78a24cab67595644173eed": "0x53", + "0x2333f8254e3d2a9f527f4ed292f0f84b35af2dac6c0e664691ed48c7251ecd": "0x32", + "0x5c4f4e4ae30a422a1b735b38c52bdf5739ad64b2f95492ab6ccd93b4f6be2df": "0x3c", + "0x66a981c57e4253cf8d24eaaed89f7719c9a697be3b41a0371b24c8fc00a1cad": "0x3d", + "0x73ea2bf4f84c4ef4f95f6a5a03af3317277deb63039330d881ea20e33d0738c": "0x36", + "0x6be5a0624172c2f0a3d116d03a861375e023f340caaa6363854c9ae4a460f5": "0x32", + "0x104745966fa5cd518bab10b5f1a741f4a3435d7d9b060b8a11778cb36fcb574": "0x55", + "0x48cd92c018be0434daffcbcbcd6722aceda59a54ad1efe411fec777f41f8caf": "0x45", + "0xa0e0c780524827e8f094bf8c199269f06f86309d30c65af0f7dac6968de3c3": "0x5a", + "0x12e4dfa71ee52225ff301eb69e2fc08fbc001b0821578be07648a7ea493021f": "0x64", + "0x541b4a8bb25092e7a52dbe8f07810e5c9efcb2774d52b567845fe8d3dc3c92a": "0x26", + "0x2ec71fc858681fa0cca225185a86060926a9bfd338d749f256910d415770d1d": "0x51", + "0x10bd0687cdf260d35210af52a93a9712d51a403868a103e91e491eaf17973cd": "0x19", + "0x253b4898f783590539e8ff61faee36bbe6f4022af6f5742fd80ed8a609d8cea": "0x4a", + "0x77c28f25bc25bd5207ab10317a8ad029b560f22d77b3492cc910236a2ce1278": "0x3a", + "0x768a45776c6e33860c802ea8b6f69170b275d576ff5ea0b6ed54c7b0da443e9": "0x36", + "0x273d24a6e32e7dc5531d7e1d17df2b2f91b7c50da2c9142a78c02de878cdd5f": "0x34", + "0x688e05ac8427736a7bc419f86ad7a90ea6157d2d82ed30f09149b18c97a2391": "0x35", + "0x2f50b3c524482dfd39d8236ea2c114df8d8fd907711584de81eddbeca7b7921": "0x42", + "0x3fd8c55203651e0b3c6cac235b8b489b0a302731691e1c4b860b7dc41a6d6be": "0x3f", + "0xcc4c8e4096a5dc1b161bde1c0207c34f82f4c0195cd428253f1baed6308d5a": "0x47", + "0x1835c7d07311634fe0abc0e12897de6de8420f56fc0e9e1cf0550a71c31f7da": "0x5d", + "0x3b02187b88b06e6993158e652acc2836e15b6f0a95d4abf74891334b462f741": "0x20", + "0x2709f3ff0b285074ffbebef3078d2ccd7d26d0fd7bcd4422d8ceb5e9a6a40ff": "0x4e", + "0x22ccb773bb8c536d70c99ad4be229b6425be5e8014a1330c72495760d2f4b60": "0x1d", + "0x12b01545b7bbd20fcdffb03575a25cad0b30698ad7ad4781be1221f554f4741": "0x47", + "0x17fb33a9db88d0e4e3b382dad1733522ec8024647716f463066bedbb490978d": "0x43", + "0x11e0a33ad5c43d5bd2f7f0ccc2b66f591c6c908910c1f2f377c6f586a458eb0": "0x3a", + "0x500eb16558214463a5c37ac189e1b12443e97a3bdf89ec0c0c4986376bfb00f": "0x6c", + "0x47666c862e5e3db0e5a43aafd2d1ba5b1e8eb498ea5b42ebc6cd01ee3a16609": "0x34", + "0x3591c61d75a1d75ee576d70a366138be4c288034605022086e8abd6cc6a282a": "0x69", + "0x43438d30a486df0100bfb40f7dddbdcf9b9c21f2079ae785a22b2816d09d842": "0x41", + "0x56ffd7a92298ef76ddbd31936c19c23d29edc2f34207f1b0b5b270aa511d8d5": "0x7e", + "0x5112b78113307795cf45051a65e9d2b535a236cb8ff8a93b9f4f460357b705b": "0x32", + "0x6133eb7e32610962c067accae847789b414e52ef69407bcda0dbc4e0562235e": "0x59", + "0x5aa0c4b6d10882180ed3bf70dc5bb99fad462fb926c251329f4c0f997cd5ae9": "0x53", + "0x6ae831431e8fa2128b079844633e084604422d63b7f1ad1a79fb81e37447463": "0x5b", + "0x524987ff394990a95fa0015a8eb66e61ff9f8626291dedd4f7d50a5f020f797": "0x47", + "0x2e19f222ead0bc05ad25d190bf89a63ecabf82f53f7d6bf383d05553acaf123": "0x4a", + "0x309e46e00ee3cfb4d1bd1f42267126cfc9b7c501f439a9c60093330c7e0cfa9": "0x6f", + "0x7d3644f1c8cc3d0fde11a7c69ccdd59e392199be927e2e283d21b5445357ab1": "0x13", + "0x38f5a14f93aa2041cbab6a0a2eb909f268a10be56addc697592c87c68eed875": "0x67", + "0x6a4213ccb648d4cc272690144073efdb184bc5c0253f798973666761b231827": "0x22", + "0x115f012bd02db4cad77f3fb19bea28087d03a4d03f965781711cd9a9379d100": "0x12", + "0x9a747a346243aff99283048beabf09c2ef25bfbbc8a177945f3a0eab0d3882": "0x31", + "0x384152c373546b914f69e6c011747c08c519c3f43a4dc4b4b51849ca0e99ded": "0x13", + "0x1624d229b7b2733f0e4f72f205ab058c0b247045ff371aa5a7aa95a7a037906": "0x31", + "0x1b7e553d9d69a2a1fcf9ae3a72bd41bac0ae603acc77c783ae58bf1ba08b80c": "0x43", + "0x13372661462e9437e3be7442c0bb7f0a28642510ec3879927eebfdaa11c6b64": "0x7e", + "0x1050347b94b0cbce9abe2ceab62f47257071169a4ab22b4fb67f3a731e0b486": "0x24", + "0x9529b7734deb881652cb0903f26875b01134cb0b091822f85edc697164e7d1": "0x31", + "0x72a90329f10cca92a43cb8014ea168049ee3e1b9013638afa026a4671863ca1": "0x43", + "0x46388b18ad7cd2514d20b64c07904b351d313f9b185eb864e9cef8a129a9db0": "0x44" + }, + "deployed_contracts": [], + "old_declared_contracts": [], + "declared_classes": [], + "replaced_classes": [] + } +} \ No newline at end of file diff --git a/core/block.go b/core/block.go index 8c51bdfaf1..b9ff81e2af 100644 --- a/core/block.go +++ b/core/block.go @@ -4,7 +4,9 @@ import ( "encoding/binary" "errors" "fmt" + "slices" + "github.com/Masterminds/semver/v3" "github.com/NethermindEth/juno/core/crypto" "github.com/NethermindEth/juno/core/felt" "github.com/NethermindEth/juno/utils" @@ -66,11 +68,13 @@ type Block struct { type BlockCommitments struct { TransactionCommitment *felt.Felt EventCommitment *felt.Felt + ReceiptCommitment *felt.Felt + StateDiffCommitment *felt.Felt } // VerifyBlockHash verifies the block hash. Due to bugs in Starknet alpha, not all blocks have // verifiable hashes. -func VerifyBlockHash(b *Block, network *utils.Network) (*BlockCommitments, error) { +func VerifyBlockHash(b *Block, network *utils.Network, stateDiff *StateDiff) (*BlockCommitments, error) { if len(b.Transactions) != len(b.Receipts) { return nil, fmt.Errorf("len of transactions: %v do not match len of receipts: %v", len(b.Transactions), len(b.Receipts)) @@ -99,13 +103,14 @@ func VerifyBlockHash(b *Block, network *utils.Network) (*BlockCommitments, error if metaInfo.FallBackSequencerAddress != nil { fallbackSeqAddresses = append(fallbackSeqAddresses, metaInfo.FallBackSequencerAddress) } + for _, fallbackSeq := range fallbackSeqAddresses { var overrideSeq *felt.Felt if b.SequencerAddress == nil { overrideSeq = fallbackSeq } - hash, commitments, err := blockHash(b, network, overrideSeq) + hash, commitments, err := blockHash(b, stateDiff, network, overrideSeq) if err != nil { return nil, err } @@ -125,6 +130,7 @@ func VerifyBlockHash(b *Block, network *utils.Network) (*BlockCommitments, error // BlockHash assumes block.SequencerAddress is not nil as this is called with post v0.12.0 // and by then issues with unverifiable block hash were resolved. // In future, this may no longer be required. +// Todo: Pass stateDiff so that p2p layer can calculate post 0.13.2 Block Hash func BlockHash(b *Block) (*felt.Felt, error) { if b.SequencerAddress == nil { return nil, errors.New("block.SequencerAddress is nil") @@ -135,18 +141,30 @@ func BlockHash(b *Block) (*felt.Felt, error) { } // blockHash computes the block hash, with option to override sequence address -func blockHash(b *Block, network *utils.Network, overrideSeqAddr *felt.Felt) (*felt.Felt, *BlockCommitments, error) { +func blockHash(b *Block, stateDiff *StateDiff, network *utils.Network, overrideSeqAddr *felt.Felt) (*felt.Felt, + *BlockCommitments, error, +) { metaInfo := network.BlockHashMetaInfo - if b.Number < metaInfo.First07Block { - return pre07Hash(b, network.L2ChainIDFelt()) + blockVer, err := ParseBlockVersion(b.ProtocolVersion) + if err != nil { + return nil, nil, err + } + v0_13_2 := semver.MustParse("0.13.2") + + if blockVer.LessThan(v0_13_2) { + if b.Number < metaInfo.First07Block { + return pre07Hash(b, network.L2ChainIDFelt()) + } + return post07Hash(b, overrideSeqAddr) } - return post07Hash(b, overrideSeqAddr) + + return Post0132Hash(b, stateDiff) } // pre07Hash computes the block hash for blocks generated before Cairo 0.7.0 func pre07Hash(b *Block, chain *felt.Felt) (*felt.Felt, *BlockCommitments, error) { - txCommitment, err := transactionCommitment(b.Transactions, b.Header.ProtocolVersion) + txCommitment, err := transactionCommitmentPedersen(b.Transactions, b.Header.ProtocolVersion) if err != nil { return nil, nil, err } @@ -167,6 +185,67 @@ func pre07Hash(b *Block, chain *felt.Felt) (*felt.Felt, *BlockCommitments, error ), &BlockCommitments{TransactionCommitment: txCommitment}, nil } +func Post0132Hash(b *Block, stateDiff *StateDiff) (*felt.Felt, *BlockCommitments, error) { + wg := conc.NewWaitGroup() + var txCommitment, eCommitment, rCommitment, sdCommitment *felt.Felt + var sdLength uint64 + var tErr, eErr, rErr error + + wg.Go(func() { + txCommitment, tErr = transactionCommitmentPoseidon(b.Transactions) + }) + wg.Go(func() { + eCommitment, eErr = eventCommitmentPoseidon(b.Receipts) + }) + wg.Go(func() { + rCommitment, rErr = receiptCommitment(b.Receipts) + }) + + wg.Go(func() { + sdLength = stateDiff.Length() + sdCommitment = stateDiff.Hash() + }) + + wg.Wait() + + if tErr != nil { + return nil, nil, tErr + } + if eErr != nil { + return nil, nil, eErr + } + if rErr != nil { + return nil, nil, rErr + } + + concatCounts := concatCounts(b.TransactionCount, b.EventCount, sdLength, b.L1DAMode) + + return crypto.PoseidonArray( + new(felt.Felt).SetBytes([]byte("STARKNET_BLOCK_HASH0")), + new(felt.Felt).SetUint64(b.Number), // block number + b.GlobalStateRoot, // global state root + b.SequencerAddress, // sequencer address + new(felt.Felt).SetUint64(b.Timestamp), // block timestamp + concatCounts, + sdCommitment, + txCommitment, // transaction commitment + eCommitment, // event commitment + rCommitment, // receipt commitment + b.GasPrice, // gas price in wei + b.GasPriceSTRK, // gas price in fri + b.L1DataGasPrice.PriceInWei, + b.L1DataGasPrice.PriceInFri, + new(felt.Felt).SetBytes([]byte(b.ProtocolVersion)), + &felt.Zero, // reserved: extra data + b.ParentHash, // parent block hash + ), &BlockCommitments{ + TransactionCommitment: txCommitment, + EventCommitment: eCommitment, + ReceiptCommitment: rCommitment, + StateDiffCommitment: sdCommitment, + }, nil +} + // post07Hash computes the block hash for blocks generated after Cairo 0.7.0 func post07Hash(b *Block, overrideSeqAddr *felt.Felt) (*felt.Felt, *BlockCommitments, error) { seqAddr := b.SequencerAddress @@ -179,10 +258,10 @@ func post07Hash(b *Block, overrideSeqAddr *felt.Felt) (*felt.Felt, *BlockCommitm var tErr, eErr error wg.Go(func() { - txCommitment, tErr = transactionCommitment(b.Transactions, b.Header.ProtocolVersion) + txCommitment, tErr = transactionCommitmentPedersen(b.Transactions, b.Header.ProtocolVersion) }) wg.Go(func() { - eCommitment, eErr = eventCommitment(b.Receipts) + eCommitment, eErr = eventCommitmentPedersen(b.Receipts) }) wg.Wait() @@ -222,3 +301,26 @@ func MarshalBlockNumber(blockNumber uint64) []byte { return numBytes } + +func concatCounts(txCount, eventCount, stateDiffLen uint64, l1Mode L1DAMode) *felt.Felt { + var l1DAByte byte + if l1Mode == Blob { + l1DAByte = 0b10000000 + } + + var txCountBytes, eventCountBytes, stateDiffLenBytes [8]byte + binary.BigEndian.PutUint64(txCountBytes[:], txCount) + binary.BigEndian.PutUint64(eventCountBytes[:], eventCount) + binary.BigEndian.PutUint64(stateDiffLenBytes[:], stateDiffLen) + + zeroPadding := make([]byte, 7) //nolint:mnd + + concatBytes := slices.Concat( + txCountBytes[:], + eventCountBytes[:], + stateDiffLenBytes[:], + []byte{l1DAByte}, + zeroPadding, + ) + return new(felt.Felt).SetBytes(concatBytes) +} diff --git a/core/block_test.go b/core/block_test.go index 96ba8f719d..81cac95e5b 100644 --- a/core/block_test.go +++ b/core/block_test.go @@ -181,7 +181,7 @@ func TestBlockHash(t *testing.T) { block, err := gw.BlockByNumber(context.Background(), tc.number) require.NoError(t, err) - commitments, err := core.VerifyBlockHash(block, &tc.chain) + commitments, err := core.VerifyBlockHash(block, &tc.chain, nil) assert.NoError(t, err) assert.NotNil(t, commitments) }) @@ -199,7 +199,7 @@ func TestBlockHash(t *testing.T) { mainnetBlock1.Hash = h1 expectedErr := "can not verify hash in block header" - commitments, err := core.VerifyBlockHash(mainnetBlock1, &utils.Mainnet) + commitments, err := core.VerifyBlockHash(mainnetBlock1, &utils.Mainnet, nil) assert.EqualError(t, err, expectedErr) assert.Nil(t, commitments) }) @@ -210,7 +210,7 @@ func TestBlockHash(t *testing.T) { block119802, err := goerliGW.BlockByNumber(context.Background(), 119802) require.NoError(t, err) - commitments, err := core.VerifyBlockHash(block119802, &utils.Goerli) + commitments, err := core.VerifyBlockHash(block119802, &utils.Goerli, nil) assert.NoError(t, err) assert.NotNil(t, commitments) }) @@ -224,7 +224,7 @@ func TestBlockHash(t *testing.T) { expectedErr := fmt.Sprintf("len of transactions: %v do not match len of receipts: %v", len(mainnetBlock1.Transactions), len(mainnetBlock1.Receipts)) - commitments, err := core.VerifyBlockHash(mainnetBlock1, &utils.Mainnet) + commitments, err := core.VerifyBlockHash(mainnetBlock1, &utils.Mainnet, nil) assert.EqualError(t, err, expectedErr) assert.Nil(t, commitments) }) @@ -238,12 +238,37 @@ func TestBlockHash(t *testing.T) { "transaction hash (%v) at index: %v does not match receipt's hash (%v)", mainnetBlock1.Transactions[1].Hash().String(), 1, mainnetBlock1.Receipts[1].TransactionHash) - commitments, err := core.VerifyBlockHash(mainnetBlock1, &utils.Mainnet) + commitments, err := core.VerifyBlockHash(mainnetBlock1, &utils.Mainnet, nil) assert.EqualError(t, err, expectedErr) assert.Nil(t, commitments) }) } +func Test0132BlockHash(t *testing.T) { + t.Parallel() + client := feeder.NewTestClient(t, &utils.SepoliaIntegration) + gw := adaptfeeder.New(client) + + for _, test := range []struct { + blockNum uint64 + }{ + {blockNum: 35748}, {blockNum: 35749}, {blockNum: 37500}, {blockNum: 38748}, + } { + t.Run(fmt.Sprintf("blockNum=%v", test.blockNum), func(t *testing.T) { + t.Parallel() + b, err := gw.BlockByNumber(context.Background(), test.blockNum) + require.NoError(t, err) + + su, err := gw.StateUpdate(context.Background(), test.blockNum) + require.NoError(t, err) + + c, err := core.VerifyBlockHash(b, &utils.SepoliaIntegration, su.StateDiff) + require.NoError(t, err) + assert.NotNil(t, c) + }) + } +} + func TestBlockHashP2P(t *testing.T) { mainnetGW := adaptfeeder.New(feeder.NewTestClient(t, &utils.Mainnet)) diff --git a/core/receipt.go b/core/receipt.go new file mode 100644 index 0000000000..0984118c28 --- /dev/null +++ b/core/receipt.go @@ -0,0 +1,83 @@ +package core + +import ( + "github.com/NethermindEth/juno/core/crypto" + "github.com/NethermindEth/juno/core/felt" + "github.com/NethermindEth/juno/core/trie" +) + +type GasConsumed struct { + L1Gas uint64 + L1DataGas uint64 +} + +type TransactionReceipt struct { + Fee *felt.Felt + FeeUnit FeeUnit + Events []*Event + ExecutionResources *ExecutionResources + L1ToL2Message *L1ToL2Message + L2ToL1Message []*L2ToL1Message + TransactionHash *felt.Felt + Reverted bool + RevertReason string +} + +func (r *TransactionReceipt) hash() *felt.Felt { + revertReasonHash := &felt.Zero + if r.Reverted { + revertReasonHash = crypto.StarknetKeccak([]byte(r.RevertReason)) + } + + var totalGasConsumed GasConsumed + // pre 0.13.2 TotalGasConsumed property is not set, in this case we rely on zero value above + if r.ExecutionResources != nil && r.ExecutionResources.TotalGasConsumed != nil { + totalGasConsumed = *r.ExecutionResources.TotalGasConsumed + } + + return crypto.PoseidonArray( + r.TransactionHash, + r.Fee, + messagesSentHash(r.L2ToL1Message), + revertReasonHash, + &felt.Zero, // L2 gas consumed + new(felt.Felt).SetUint64(totalGasConsumed.L1Gas), + new(felt.Felt).SetUint64(totalGasConsumed.L1DataGas), + ) +} + +func messagesSentHash(messages []*L2ToL1Message) *felt.Felt { + chain := []*felt.Felt{ + new(felt.Felt).SetUint64(uint64(len(messages))), + } + for _, msg := range messages { + msgTo := new(felt.Felt).SetBytes(msg.To.Bytes()) + payloadSize := new(felt.Felt).SetUint64(uint64(len(msg.Payload))) + chain = append(chain, msg.From, msgTo, payloadSize) + chain = append(chain, msg.Payload...) + } + + return crypto.PoseidonArray(chain...) +} + +func receiptCommitment(receipts []*TransactionReceipt) (*felt.Felt, error) { + var commitment *felt.Felt + + return commitment, trie.RunOnTempTriePoseidon(commitmentTrieHeight, func(trie *trie.Trie) error { + for i, receipt := range receipts { + receiptTrieKey := new(felt.Felt).SetUint64(uint64(i)) + _, err := trie.Put(receiptTrieKey, receipt.hash()) + if err != nil { + return err + } + } + + root, err := trie.Root() + if err != nil { + return err + } + commitment = root + + return nil + }) +} diff --git a/core/state_update.go b/core/state_update.go index 8bb88f681e..50501e9479 100644 --- a/core/state_update.go +++ b/core/state_update.go @@ -1,8 +1,8 @@ package core import ( - "fmt" - "sort" + "maps" + "slices" "github.com/NethermindEth/juno/core/crypto" "github.com/NethermindEth/juno/core/felt" @@ -50,6 +50,46 @@ func (d *StateDiff) Length() uint64 { return uint64(length) } +func (d *StateDiff) Hash() *felt.Felt { + digest := new(crypto.PoseidonDigest) + + digest.Update(new(felt.Felt).SetBytes([]byte("STARKNET_STATE_DIFF0"))) + + // updated_contracts = deployedContracts + replacedClasses + // Digest: [number_of_updated_contracts, address_0, class_hash_0, address_1, class_hash_1, ...]. + updatedContractsDigest(d.DeployedContracts, d.ReplacedClasses, digest) + + // declared classes + // Digest: [number_of_declared_classes, class_hash_0, compiled_class_hash_0, class_hash_1, compiled_class_hash_1, + // ...]. + declaredClassesDigest(d.DeclaredV1Classes, digest) + + // deprecated_declared_classes + // Digest: [number_of_old_declared_classes, class_hash_0, class_hash_1, ...]. + deprecatedDeclaredClassesDigest(d.DeclaredV0Classes, digest) + + // Placeholder values + digest.Update(new(felt.Felt).SetUint64(1), new(felt.Felt).SetUint64(0)) + + // storage_diffs + // Digest: [ + // number_of_updated_contracts, + // contract_address_0, number_of_updates_in_contract_0, key_0, value0, key1, value1, ..., + // contract_address_1, number_of_updates_in_contract_1, key_0, value0, key1, value1, ..., + // ] + storageDiffDigest(d.StorageDiffs, digest) + + // nonces + // Digest: [number_of_updated_contracts nonces, contract_address_0, nonce_0, contract_address_1, nonce_1, ...] + noncesDigest(d.Nonces, digest) + + /*Poseidon( + "STARKNET_STATE_DIFF0", deployed_contracts_and_replaced_classes, declared_classes, deprecated_declared_classes, + 1, 0, storage_diffs, nonces + )*/ + return digest.Finish() +} + func (d *StateDiff) Commitment() *felt.Felt { version := felt.Zero var tmpFelt felt.Felt @@ -58,59 +98,21 @@ func (d *StateDiff) Commitment() *felt.Felt { hash_of_deployed_contracts=hash([number_of_deployed_contracts, address_1, class_hash_1, address_2, class_hash_2, ...]) */ - var hashOfDeployedContracts crypto.PoseidonDigest - deployedReplacedAddresses := make([]felt.Felt, 0, len(d.DeployedContracts)+len(d.ReplacedClasses)) - for addr := range d.DeployedContracts { - deployedReplacedAddresses = append(deployedReplacedAddresses, addr) - } - for addr := range d.ReplacedClasses { - deployedReplacedAddresses = append(deployedReplacedAddresses, addr) - } - hashOfDeployedContracts.Update(tmpFelt.SetUint64(uint64(len(deployedReplacedAddresses)))) - sort.Slice(deployedReplacedAddresses, func(i, j int) bool { - switch deployedReplacedAddresses[i].Cmp(&deployedReplacedAddresses[j]) { - case -1: - return true - case 1: - return false - default: - // The sequencer guarantees that a contract cannot be: - // - deployed twice, - // - deployed and have its class replaced in the same state diff, or - // - have its class replaced multiple times in the same state diff. - panic(fmt.Sprintf("address appears twice in deployed and replaced addresses: %s", &deployedReplacedAddresses[i])) - } - }) - for idx := range deployedReplacedAddresses { - addr := deployedReplacedAddresses[idx] - classHash, ok := d.DeployedContracts[addr] - if !ok { - classHash = d.ReplacedClasses[addr] - } - hashOfDeployedContracts.Update(&addr, classHash) - } + hashOfDeployedContracts := new(crypto.PoseidonDigest) + updatedContractsDigest(d.DeployedContracts, d.ReplacedClasses, hashOfDeployedContracts) /* hash_of_declared_classes = hash([number_of_declared_classes, class_hash_1, compiled_class_hash_1, class_hash_2, compiled_class_hash_2, ...]) */ - var hashOfDeclaredClasses crypto.PoseidonDigest - hashOfDeclaredClasses.Update(tmpFelt.SetUint64(uint64(len(d.DeclaredV1Classes)))) - declaredV1ClassHashes := sortedFeltKeys(d.DeclaredV1Classes) - for idx := range declaredV1ClassHashes { - classHash := declaredV1ClassHashes[idx] - hashOfDeclaredClasses.Update(&classHash, d.DeclaredV1Classes[classHash]) - } + hashOfDeclaredClasses := new(crypto.PoseidonDigest) + declaredClassesDigest(d.DeclaredV1Classes, hashOfDeclaredClasses) /* hash_of_old_declared_classes = hash([number_of_old_declared_classes, class_hash_1, class_hash_2, ...]) */ - var hashOfOldDeclaredClasses crypto.PoseidonDigest - hashOfOldDeclaredClasses.Update(tmpFelt.SetUint64(uint64(len(d.DeclaredV0Classes)))) - sort.Slice(d.DeclaredV0Classes, func(i, j int) bool { - return d.DeclaredV0Classes[i].Cmp(d.DeclaredV0Classes[j]) == -1 - }) - hashOfOldDeclaredClasses.Update(d.DeclaredV0Classes...) + hashOfOldDeclaredClasses := new(crypto.PoseidonDigest) + deprecatedDeclaredClassesDigest(d.DeclaredV0Classes, hashOfOldDeclaredClasses) /* flattened_storage_diffs = [number_of_updated_contracts, contract_address_1, number_of_updates_in_contract, @@ -119,26 +121,11 @@ func (d *StateDiff) Commitment() *felt.Felt { hash_of_storage_domain_state_diff = hash([*flattened_storage_diffs, *flattened_nonces]) */ daModeL1 := 0 - hashOfStorageDomains := make([]crypto.PoseidonDigest, 1) - - sortedStorageDiffAddrs := sortedFeltKeys(d.StorageDiffs) - hashOfStorageDomains[daModeL1].Update(tmpFelt.SetUint64(uint64(len(sortedStorageDiffAddrs)))) - for idx, addr := range sortedStorageDiffAddrs { - hashOfStorageDomains[daModeL1].Update(&sortedStorageDiffAddrs[idx]) - diffKeys := sortedFeltKeys(d.StorageDiffs[sortedStorageDiffAddrs[idx]]) - - hashOfStorageDomains[daModeL1].Update(tmpFelt.SetUint64(uint64(len(diffKeys)))) - for idx := range diffKeys { - key := diffKeys[idx] - hashOfStorageDomains[daModeL1].Update(&key, d.StorageDiffs[addr][key]) - } - } + hashOfStorageDomains := make([]*crypto.PoseidonDigest, 1) + hashOfStorageDomains[daModeL1] = new(crypto.PoseidonDigest) - sortedNonceKeys := sortedFeltKeys(d.Nonces) - hashOfStorageDomains[daModeL1].Update(tmpFelt.SetUint64(uint64(len(sortedNonceKeys)))) - for idx := range sortedNonceKeys { - hashOfStorageDomains[daModeL1].Update(&sortedNonceKeys[idx], d.Nonces[sortedNonceKeys[idx]]) - } + storageDiffDigest(d.StorageDiffs, hashOfStorageDomains[daModeL1]) + noncesDigest(d.Nonces, hashOfStorageDomains[daModeL1]) /* flattened_total_state_diff = hash([state_diff_version, @@ -146,7 +133,7 @@ func (d *StateDiff) Commitment() *felt.Felt { hash_of_old_declared_classes, number_of_DA_modes, DA_mode_0, hash_of_storage_domain_state_diff_0, DA_mode_1, hash_of_storage_domain_state_diff_1, â€Ļ]) */ - var commitmentDigest crypto.PoseidonDigest + commitmentDigest := new(crypto.PoseidonDigest) commitmentDigest.Update(&version, hashOfDeployedContracts.Finish(), hashOfDeclaredClasses.Finish(), hashOfOldDeclaredClasses.Finish()) commitmentDigest.Update(tmpFelt.SetUint64(uint64(len(hashOfStorageDomains)))) for idx := range hashOfStorageDomains { @@ -160,9 +147,69 @@ func sortedFeltKeys[V any](m map[felt.Felt]V) []felt.Felt { for addr := range m { keys = append(keys, addr) } - sort.Slice(keys, func(i, j int) bool { - return keys[i].Cmp(&keys[j]) == -1 - }) - + slices.SortFunc(keys, func(a, b felt.Felt) int { return a.Cmp(&b) }) return keys } + +func updatedContractsDigest(deployedContracts, replacedClasses map[felt.Felt]*felt.Felt, digest *crypto.PoseidonDigest) { + numOfUpdatedContracts := uint64(len(deployedContracts) + len(replacedClasses)) + digest.Update(new(felt.Felt).SetUint64(numOfUpdatedContracts)) + + // The sequencer guarantees that a contract cannot be: + // - deployed twice, + // - deployed and have its class replaced in the same state diff, or + // - have its class replaced multiple times in the same state diff. + updatedContracts := make(map[felt.Felt]*felt.Felt) + maps.Copy(updatedContracts, deployedContracts) + maps.Copy(updatedContracts, replacedClasses) + + sortedUpdatedContractsHashes := sortedFeltKeys(updatedContracts) + for _, hash := range sortedUpdatedContractsHashes { + digest.Update(&hash, updatedContracts[hash]) + } +} + +func declaredClassesDigest(declaredV1Classes map[felt.Felt]*felt.Felt, digest *crypto.PoseidonDigest) { + numOfDeclaredClasses := uint64(len(declaredV1Classes)) + digest.Update(new(felt.Felt).SetUint64(numOfDeclaredClasses)) + + sortedDeclaredV1ClassHashes := sortedFeltKeys(declaredV1Classes) + for _, classHash := range sortedDeclaredV1ClassHashes { + digest.Update(&classHash, declaredV1Classes[classHash]) + } +} + +func deprecatedDeclaredClassesDigest(declaredV0Classes []*felt.Felt, digest *crypto.PoseidonDigest) { + numOfDeclaredV0Classes := uint64(len(declaredV0Classes)) + digest.Update(new(felt.Felt).SetUint64(numOfDeclaredV0Classes)) + + slices.SortFunc(declaredV0Classes, func(a, b *felt.Felt) int { return a.Cmp(b) }) + digest.Update(declaredV0Classes...) +} + +func storageDiffDigest(storageDiffs map[felt.Felt]map[felt.Felt]*felt.Felt, digest *crypto.PoseidonDigest) { + numOfStorageDiffs := uint64(len(storageDiffs)) + digest.Update(new(felt.Felt).SetUint64(numOfStorageDiffs)) + + sortedStorageDiffAddrs := sortedFeltKeys(storageDiffs) + for _, addr := range sortedStorageDiffAddrs { + digest.Update(&addr) + + sortedDiffKeys := sortedFeltKeys(storageDiffs[addr]) + digest.Update(new(felt.Felt).SetUint64(uint64(len(sortedDiffKeys)))) + + for _, k := range sortedDiffKeys { + digest.Update(&k, storageDiffs[addr][k]) + } + } +} + +func noncesDigest(nonces map[felt.Felt]*felt.Felt, digest *crypto.PoseidonDigest) { + numOfNonces := uint64(len(nonces)) + digest.Update(new(felt.Felt).SetUint64(numOfNonces)) + + sortedNoncesAddrs := sortedFeltKeys(nonces) + for _, addr := range sortedNoncesAddrs { + digest.Update(&addr, nonces[addr]) + } +} diff --git a/core/state_update_test.go b/core/state_update_test.go index 7cecfb9a4c..74fac50699 100644 --- a/core/state_update_test.go +++ b/core/state_update_test.go @@ -37,10 +37,45 @@ func TestStateDiffCommitment(t *testing.T) { expected: "0x32a531da56a82f993a29b3cfe4102b1589ddbc64bfd7be24706ab2b5ac2dba5", }, } { - su, err := gw.StateUpdate(context.Background(), test.blockNum) - require.NoError(t, err) - commitment := su.StateDiff.Commitment() - assert.Equal(t, utils.HexToFelt(t, test.expected), commitment) + t.Run(fmt.Sprintf("blockNum=%d", test.blockNum), func(t *testing.T) { + su, err := gw.StateUpdate(context.Background(), test.blockNum) + require.NoError(t, err) + commitment := su.StateDiff.Commitment() + assert.Equal(t, utils.HexToFelt(t, test.expected), commitment) + }) + } +} + +func TestStateDiffHash(t *testing.T) { + client := feeder.NewTestClient(t, &utils.SepoliaIntegration) + gw := adaptfeeder.New(client) + + for _, test := range []struct { + blockNum uint64 + expected string + }{ + { + blockNum: 37500, + expected: "0x114e85f23a3dc3febd8dccb01d701220dbf314dd30b2db2c649edcd4bc35b2b", + }, + { + blockNum: 35748, + expected: "0x23587c54d590b57b8e25acbf1e1a422eb4cd104e95ee4a681021a6bb7456afa", + }, + { + blockNum: 35749, + expected: "0x323feeef51cadc14d4a025eb541227b177f69d1e6052854de262ca5e18055a1", + }, + { + blockNum: 38748, + expected: "0x2bb5df3dccd80b8eb8ad3f759b0ba045d467a79f032605d35380c87f8e730be", + }, + } { + t.Run(fmt.Sprintf("blockNum_%d", test.blockNum), func(t *testing.T) { + su, err := gw.StateUpdate(context.Background(), test.blockNum) + require.NoError(t, err) + assert.Equal(t, utils.HexToFelt(t, test.expected), su.StateDiff.Hash()) + }) } } diff --git a/core/transaction.go b/core/transaction.go index bb7f2d8661..194a7b9ae7 100644 --- a/core/transaction.go +++ b/core/transaction.go @@ -100,6 +100,7 @@ type ExecutionResources struct { MemoryHoles uint64 Steps uint64 DataAvailability *DataAvailability + TotalGasConsumed *GasConsumed } type DataAvailability struct { @@ -117,18 +118,9 @@ type BuiltinInstanceCounter struct { Keccak uint64 Poseidon uint64 SegmentArena uint64 -} - -type TransactionReceipt struct { - Fee *felt.Felt - FeeUnit FeeUnit - Events []*Event - ExecutionResources *ExecutionResources - L1ToL2Message *L1ToL2Message - L2ToL1Message []*L2ToL1Message - TransactionHash *felt.Felt - Reverted bool - RevertReason string + AddMod uint64 + MulMod uint64 + RangeCheck96 uint64 } type Transaction interface { @@ -638,12 +630,12 @@ func VerifyTransactions(txs []Transaction, n *utils.Network, protocolVersion str const commitmentTrieHeight = 64 -// transactionCommitment is the root of a height 64 binary Merkle Patricia tree of the +// transactionCommitmentPedersen is the root of a height 64 binary Merkle Patricia tree of the // transaction hashes and signatures in a block. -func transactionCommitment(transactions []Transaction, protocolVersion string) (*felt.Felt, error) { +func transactionCommitmentPedersen(transactions []Transaction, protocolVersion string) (*felt.Felt, error) { var commitment *felt.Felt v0_11_1 := semver.MustParse("0.11.1") - return commitment, trie.RunOnTempTrie(commitmentTrieHeight, func(trie *trie.Trie) error { + return commitment, trie.RunOnTempTriePedersen(commitmentTrieHeight, func(trie *trie.Trie) error { blockVersion, err := ParseBlockVersion(protocolVersion) if err != nil { return err @@ -673,6 +665,32 @@ func transactionCommitment(transactions []Transaction, protocolVersion string) ( }) } +func transactionCommitmentPoseidon(transactions []Transaction) (*felt.Felt, error) { + var commitment *felt.Felt + return commitment, trie.RunOnTempTriePoseidon(commitmentTrieHeight, func(trie *trie.Trie) error { + for i, transaction := range transactions { + var digest crypto.PoseidonDigest + digest.Update(transaction.Hash()) + + if txSignature := transaction.Signature(); len(txSignature) > 0 { + digest.Update(txSignature...) + } else { + digest.Update(&felt.Zero) + } + + if _, err := trie.Put(new(felt.Felt).SetUint64(uint64(i)), digest.Finish()); err != nil { + return err + } + } + root, err := trie.Root() + if err != nil { + return err + } + commitment = root + return nil + }) +} + // ParseBlockVersion computes the block version, defaulting to "0.0.0" for empty strings func ParseBlockVersion(protocolVersion string) (*semver.Version, error) { if protocolVersion == "" { @@ -688,10 +706,72 @@ func ParseBlockVersion(protocolVersion string) (*semver.Version, error) { return semver.NewVersion(strings.Join(digits[:3], sep)) } -// eventCommitment computes the event commitment for a block. -func eventCommitment(receipts []*TransactionReceipt) (*felt.Felt, error) { +// eventCommitmentPoseidon computes the event commitment for a block. +func eventCommitmentPoseidon(receipts []*TransactionReceipt) (*felt.Felt, error) { + var commitment *felt.Felt + return commitment, trie.RunOnTempTriePoseidon(commitmentTrieHeight, func(trie *trie.Trie) error { + eventCount := uint64(0) + numWorkers := runtime.GOMAXPROCS(0) + receiptPerWorker := len(receipts) / numWorkers + if receiptPerWorker == 0 { + receiptPerWorker = 1 + } + workerPool := pool.New().WithErrors().WithMaxGoroutines(numWorkers) + var trieMutex sync.Mutex + + for receiptIdx := range receipts { + if receiptIdx%receiptPerWorker == 0 { + curReceiptIdx := receiptIdx + curEventIdx := eventCount + + workerPool.Go(func() error { + maxIndex := curReceiptIdx + receiptPerWorker + if maxIndex > len(receipts) { + maxIndex = len(receipts) + } + receiptsSliced := receipts[curReceiptIdx:maxIndex] + + for _, receipt := range receiptsSliced { + for _, event := range receipt.Events { + hashElems := []*felt.Felt{event.From, receipt.TransactionHash} + hashElems = append(hashElems, new(felt.Felt).SetUint64(uint64(len(event.Keys)))) + hashElems = append(hashElems, event.Keys...) + hashElems = append(hashElems, new(felt.Felt).SetUint64(uint64(len(event.Data)))) + hashElems = append(hashElems, event.Data...) + + eventHash := crypto.PoseidonArray(hashElems...) + + eventTrieKey := new(felt.Felt).SetUint64(curEventIdx) + trieMutex.Lock() + _, err := trie.Put(eventTrieKey, eventHash) + trieMutex.Unlock() + if err != nil { + return err + } + curEventIdx++ + } + } + return nil + }) + } + eventCount += uint64(len(receipts[receiptIdx].Events)) + } + if err := workerPool.Wait(); err != nil { + return err + } + root, err := trie.Root() + if err != nil { + return err + } + commitment = root + return nil + }) +} + +// eventCommitmentPedersen computes the event commitment for a block. +func eventCommitmentPedersen(receipts []*TransactionReceipt) (*felt.Felt, error) { var commitment *felt.Felt - return commitment, trie.RunOnTempTrie(commitmentTrieHeight, func(trie *trie.Trie) error { + return commitment, trie.RunOnTempTriePedersen(commitmentTrieHeight, func(trie *trie.Trie) error { eventCount := uint64(0) numWorkers := runtime.GOMAXPROCS(0) receiptPerWorker := len(receipts) / numWorkers diff --git a/core/transaction_test.go b/core/transaction_test.go index c58517ac53..9b23ded7bd 100644 --- a/core/transaction_test.go +++ b/core/transaction_test.go @@ -277,7 +277,7 @@ func TestTransactionV3Hash(t *testing.T) { } } -func TestTransactionVersi(t *testing.T) { +func TestTransactionVersion(t *testing.T) { f := utils.HexToFelt(t, "0x100000000000000000000000000000002") v := (*core.TransactionVersion)(f) diff --git a/core/trie/trie.go b/core/trie/trie.go index c7baafb20a..c03357d3af 100644 --- a/core/trie/trie.go +++ b/core/trie/trie.go @@ -76,8 +76,8 @@ func newTrie(storage *Storage, height uint8, hash hashFunc) (*Trie, error) { }, nil } -// RunOnTempTrie creates an in-memory Trie of height `height` and runs `do` on that Trie -func RunOnTempTrie(height uint8, do func(*Trie) error) error { +// RunOnTempTriePedersen creates an in-memory Trie of height `height` and runs `do` on that Trie +func RunOnTempTriePedersen(height uint8, do func(*Trie) error) error { trie, err := NewTriePedersen(newMemStorage(), height) if err != nil { return err @@ -85,6 +85,14 @@ func RunOnTempTrie(height uint8, do func(*Trie) error) error { return do(trie) } +func RunOnTempTriePoseidon(height uint8, do func(*Trie) error) error { + trie, err := NewTriePoseidon(newMemStorage(), height) + if err != nil { + return err + } + return do(trie) +} + // feltToBitSet Converts a key, given in felt, to a trie.Key which when followed on a [Trie], // leads to the corresponding [Node] func (t *Trie) feltToKey(k *felt.Felt) Key { diff --git a/core/trie/trie_test.go b/core/trie/trie_test.go index 1fc03fbd09..fb5460739d 100644 --- a/core/trie/trie_test.go +++ b/core/trie/trie_test.go @@ -22,7 +22,7 @@ import ( // - [*] Add more complicated Put and Delete scenarios func TestTriePut(t *testing.T) { t.Run("put zero to empty trie", func(t *testing.T) { - require.NoError(t, trie.RunOnTempTrie(251, func(tempTrie *trie.Trie) error { + require.NoError(t, trie.RunOnTempTriePedersen(251, func(tempTrie *trie.Trie) error { key := new(felt.Felt).SetUint64(1) zeroVal := new(felt.Felt).SetUint64(0) @@ -36,7 +36,7 @@ func TestTriePut(t *testing.T) { }) t.Run("put zero value", func(t *testing.T) { - require.NoError(t, trie.RunOnTempTrie(251, func(tempTrie *trie.Trie) error { + require.NoError(t, trie.RunOnTempTriePedersen(251, func(tempTrie *trie.Trie) error { keyNum, err := strconv.ParseUint("1101", 2, 64) require.NoError(t, err) @@ -57,7 +57,7 @@ func TestTriePut(t *testing.T) { }) t.Run("put to replace an existed value", func(t *testing.T) { - require.NoError(t, trie.RunOnTempTrie(251, func(tempTrie *trie.Trie) error { + require.NoError(t, trie.RunOnTempTriePedersen(251, func(tempTrie *trie.Trie) error { keyNum, err := strconv.ParseUint("1101", 2, 64) require.NoError(t, err) @@ -124,7 +124,7 @@ func TestTrieDeleteBasic(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - require.NoError(t, trie.RunOnTempTrie(251, func(tempTrie *trie.Trie) error { + require.NoError(t, trie.RunOnTempTriePedersen(251, func(tempTrie *trie.Trie) error { // Build a basic trie _, err := tempTrie.Put(leftKey, leftVal) require.NoError(t, err) @@ -157,7 +157,7 @@ func TestTrieDeleteBasic(t *testing.T) { } func TestPutZero(t *testing.T) { - require.NoError(t, trie.RunOnTempTrie(251, func(tempTrie *trie.Trie) error { + require.NoError(t, trie.RunOnTempTriePedersen(251, func(tempTrie *trie.Trie) error { emptyRoot, err := tempTrie.Root() require.NoError(t, err) var roots []*felt.Felt @@ -227,7 +227,7 @@ func TestPutZero(t *testing.T) { } func TestOldData(t *testing.T) { - require.NoError(t, trie.RunOnTempTrie(251, func(tempTrie *trie.Trie) error { + require.NoError(t, trie.RunOnTempTriePedersen(251, func(tempTrie *trie.Trie) error { key := new(felt.Felt).SetUint64(12) old := new(felt.Felt) @@ -282,13 +282,13 @@ func TestOldData(t *testing.T) { func TestMaxTrieHeight(t *testing.T) { t.Run("create trie with invalid height", func(t *testing.T) { - assert.Error(t, trie.RunOnTempTrie(felt.Bits+1, func(_ *trie.Trie) error { + assert.Error(t, trie.RunOnTempTriePedersen(felt.Bits+1, func(_ *trie.Trie) error { return nil })) }) t.Run("insert invalid key", func(t *testing.T) { - require.NoError(t, trie.RunOnTempTrie(uint8(felt.Bits), func(tt *trie.Trie) error { + require.NoError(t, trie.RunOnTempTriePedersen(uint8(felt.Bits), func(tt *trie.Trie) error { badKey := new(felt.Felt).Sub(&felt.Zero, new(felt.Felt).SetUint64(1)) _, err := tt.Put(badKey, new(felt.Felt)) assert.Error(t, err) @@ -364,7 +364,7 @@ func BenchmarkTriePut(b *testing.B) { } one := new(felt.Felt).SetUint64(1) - require.NoError(b, trie.RunOnTempTrie(251, func(t *trie.Trie) error { + require.NoError(b, trie.RunOnTempTriePedersen(251, func(t *trie.Trie) error { b.ResetTimer() for i := 0; i < b.N; i++ { _, err := t.Put(keys[i], one) diff --git a/migration/migration.go b/migration/migration.go index 631cc5c5f6..3e39c1831f 100644 --- a/migration/migration.go +++ b/migration/migration.go @@ -450,7 +450,7 @@ func calculateBlockCommitments(txn db.Transaction, network *utils.Network) error } workerPool.Go(func() error { - commitments, err := core.VerifyBlockHash(block, network) + commitments, err := core.VerifyBlockHash(block, network, nil) if err != nil { return err } diff --git a/node/node.go b/node/node.go index 592cffd743..6a20829e89 100644 --- a/node/node.go +++ b/node/node.go @@ -131,8 +131,13 @@ func New(cfg *Config, version string) (*Node, error) { //nolint:gocyclo,funlen return nil, fmt.Errorf("get head block from database: %v", err) } if head != nil { + stateUpdate, err := chain.StateUpdateByNumber(head.Number) + if err != nil { + return nil, err + } + // We assume that there is at least one transaction in the block or that it is a pre-0.7 block. - if _, err = core.VerifyBlockHash(head, &cfg.Network); err != nil { + if _, err = core.VerifyBlockHash(head, &cfg.Network, stateUpdate.StateDiff); err != nil { return nil, errors.New("unable to verify latest block hash; are the database and --network option compatible?") } } diff --git a/starknet/block.go b/starknet/block.go index 18a4a5c8ef..c7f65394ce 100644 --- a/starknet/block.go +++ b/starknet/block.go @@ -14,6 +14,9 @@ type Block struct { StateRoot *felt.Felt `json:"state_root"` TransactionCommitment *felt.Felt `json:"transaction_commitment"` EventCommitment *felt.Felt `json:"event_commitment"` + ReceiptCommitment *felt.Felt `json:"receipt_commitment"` + StateDiffCommitment *felt.Felt `json:"state_diff_commitment"` + StateDiffLength uint64 `json:"state_diff_length"` Status string `json:"status"` Transactions []*Transaction `json:"transactions"` Timestamp uint64 `json:"timestamp"` diff --git a/starknet/transaction.go b/starknet/transaction.go index e563ba121e..3898e95e5b 100644 --- a/starknet/transaction.go +++ b/starknet/transaction.go @@ -219,6 +219,7 @@ type ExecutionResources struct { BuiltinInstanceCounter BuiltinInstanceCounter `json:"builtin_instance_counter"` MemoryHoles uint64 `json:"n_memory_holes"` DataAvailability *DataAvailability `json:"data_availability"` + TotalGasConsumed *GasConsumed `json:"total_gas_consumed"` } type DataAvailability struct { @@ -236,6 +237,14 @@ type BuiltinInstanceCounter struct { Keccak uint64 `json:"keccak_builtin"` Poseidon uint64 `json:"poseidon_builtin"` SegmentArena uint64 `json:"segment_arena_builtin"` + AddMod uint64 `json:"add_mod_builtin"` + MulMod uint64 `json:"mul_mod_builtin"` + RangeCheck96 uint64 `json:"range_check96_builtin"` +} + +type GasConsumed struct { + L1Gas uint64 `json:"l1_gas"` + L1DataGas uint64 `json:"l1_data_gas"` } type TransactionReceipt struct { From 8b827e64df1cb3c89b7b71e74be406c34b8c36dd Mon Sep 17 00:00:00 2001 From: Mario Apra Date: Wed, 31 Jul 2024 09:47:20 +0100 Subject: [PATCH 57/69] Add dependabot configuration for weekly updates (#1988) So far, only github-actions, docker, go and cargo will be checked --- .github/dependabot.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..194c6f87cd --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,18 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + - package-ecosystem: "docker" + directory: "/" + schedule: + interval: "weekly" + - package-ecosystem: "gomod" + directory: "/" + schedule: + interval: "weekly" + - package-ecosystem: "cargo" + directory: "/vm/rust" + schedule: + interval: "weekly" From 74d665ef045989134dd778eeae700f6de0be88a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 Jul 2024 17:05:21 +0300 Subject: [PATCH 58/69] Bump github.com/cockroachdb/pebble from 1.1.0 to 1.1.1 (#1998) Bumps [github.com/cockroachdb/pebble](https://github.com/cockroachdb/pebble) from 1.1.0 to 1.1.1. - [Release notes](https://github.com/cockroachdb/pebble/releases) - [Commits](https://github.com/cockroachdb/pebble/compare/v1.1.0...v1.1.1) --- updated-dependencies: - dependency-name: github.com/cockroachdb/pebble dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 13 ++++++------- go.sum | 22 ++++++++++------------ 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/go.mod b/go.mod index 4318371bdb..a60bca4809 100644 --- a/go.mod +++ b/go.mod @@ -7,8 +7,9 @@ require ( github.com/Masterminds/semver/v3 v3.2.1 github.com/bits-and-blooms/bitset v1.13.0 github.com/bits-and-blooms/bloom/v3 v3.6.0 - github.com/cockroachdb/pebble v1.1.0 + github.com/cockroachdb/pebble v1.1.1 github.com/consensys/gnark-crypto v0.12.1 + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc github.com/ethereum/go-ethereum v1.13.15 github.com/fxamacker/cbor/v2 v2.5.0 github.com/go-playground/validator/v10 v10.17.0 @@ -43,7 +44,8 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cockroachdb/errors v1.11.1 // indirect + github.com/cockroachdb/errors v1.11.3 // indirect + github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect @@ -51,11 +53,9 @@ require ( github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect github.com/deckarep/golang-set/v2 v2.6.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect - github.com/dmarkham/enumer v1.5.10 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/elastic/gosigar v0.14.2 // indirect github.com/ethereum/c-kzg-4844 v0.4.0 // indirect @@ -135,7 +135,6 @@ require ( github.com/onsi/ginkgo/v2 v2.15.0 // indirect github.com/opencontainers/runtime-spec v1.1.0 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect - github.com/pascaldekloe/name v1.0.0 // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect github.com/pelletier/go-toml/v2 v2.2.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect @@ -171,8 +170,8 @@ require ( go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 // indirect golang.org/x/mod v0.16.0 // indirect - golang.org/x/net v0.22.0 // indirect - golang.org/x/sync v0.6.0 // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/sync v0.7.0 // indirect golang.org/x/sys v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.19.0 // indirect diff --git a/go.sum b/go.sum index 09bf9a54fc..ce566c9097 100644 --- a/go.sum +++ b/go.sum @@ -45,12 +45,14 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= -github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= +github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= +github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= +github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/esnpM7Geqxka4WSqI1SZc7sMJFd3y4= +github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v1.1.0 h1:pcFh8CdCIt2kmEpK0OIatq67Ln9uGDYY3d5XnE0LJG4= -github.com/cockroachdb/pebble v1.1.0/go.mod h1:sEHm5NOXxyiAoKWhoFxT8xMgd/f3RA6qUqQ1BXKrh2E= +github.com/cockroachdb/pebble v1.1.1 h1:XnKU22oiCLy2Xn8vp1re67cXg4SAasg/WDt1NtcRFaw= +github.com/cockroachdb/pebble v1.1.1/go.mod h1:4exszw1r40423ZsmkG/09AFEG83I0uDgfujJdbL6kYU= github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= @@ -87,8 +89,6 @@ github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5il github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= -github.com/dmarkham/enumer v1.5.10 h1:ygL0L6quiTiH1jpp68DyvsWaea6MaZLZrTTkIS++R0M= -github.com/dmarkham/enumer v1.5.10/go.mod h1:e4VILe2b1nYK3JKJpRmNdl5xbDQvELc6tQ8b+GsGk6E= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= @@ -407,8 +407,6 @@ github.com/opencontainers/runtime-spec v1.1.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/ github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/pascaldekloe/name v1.0.0 h1:n7LKFgHixETzxpRv2R77YgPUFo85QHGZKrdaYm7eY5U= -github.com/pascaldekloe/name v1.0.0/go.mod h1:Z//MfYJnH4jVpQ9wkclwu2I2MkHmXTlT9wR5UZScttM= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= github.com/pelletier/go-toml/v2 v2.2.0 h1:QLgLl2yMN7N+ruc31VynXs1vhMZa7CeHHejIeBAsoHo= @@ -644,8 +642,8 @@ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= -golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -659,8 +657,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= From 6c678c0e714f11c42e8a06ab0efbdbc7c11cc9c6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 Jul 2024 15:37:18 +0100 Subject: [PATCH 59/69] Bump actions/setup-go from 4.1.0 to 5.0.2 (#1995) Bumps [actions/setup-go](https://github.com/actions/setup-go) from 4.1.0 to 5.0.2. - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/v4.1.0...v5.0.2) --- updated-dependencies: - dependency-name: actions/setup-go dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-binaries.yml | 2 +- .github/workflows/juno-lint.yml | 2 +- .github/workflows/juno-test.yml | 2 +- .github/workflows/rpc-tests.yml | 2 +- .github/workflows/sync_first_100_blocks_smoke_test.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-binaries.yml b/.github/workflows/build-binaries.yml index 4ddc807123..0b2bcc952d 100644 --- a/.github/workflows/build-binaries.yml +++ b/.github/workflows/build-binaries.yml @@ -39,7 +39,7 @@ jobs: run: brew install upx cargo-c jemalloc - name: Set up Go - uses: actions/setup-go@v4.1.0 + uses: actions/setup-go@v5.0.2 with: go-version-file: go.mod diff --git a/.github/workflows/juno-lint.yml b/.github/workflows/juno-lint.yml index 4656de7414..558d6dd6a1 100644 --- a/.github/workflows/juno-lint.yml +++ b/.github/workflows/juno-lint.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: actions/setup-go@v4.1.0 + - uses: actions/setup-go@v5.0.2 with: go-version-file: go.mod cache: false diff --git a/.github/workflows/juno-test.yml b/.github/workflows/juno-test.yml index 311c30a5b6..b89c47e750 100644 --- a/.github/workflows/juno-test.yml +++ b/.github/workflows/juno-test.yml @@ -21,7 +21,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up go - uses: actions/setup-go@v5 + uses: actions/setup-go@v5.0.2 with: go-version-file: go.mod - uses: dtolnay/rust-toolchain@stable diff --git a/.github/workflows/rpc-tests.yml b/.github/workflows/rpc-tests.yml index 701bef8036..88a2560e64 100644 --- a/.github/workflows/rpc-tests.yml +++ b/.github/workflows/rpc-tests.yml @@ -23,7 +23,7 @@ jobs: token: ${{ secrets.REPOSITORY_DISPATCH_TOKEN }} - name: Setup Go Environment - uses: actions/setup-go@v4.1.0 + uses: actions/setup-go@v5.0.2 with: go-version-file: rpc-tests/go.mod diff --git a/.github/workflows/sync_first_100_blocks_smoke_test.yml b/.github/workflows/sync_first_100_blocks_smoke_test.yml index 7e603043c3..00bcaa0a3d 100644 --- a/.github/workflows/sync_first_100_blocks_smoke_test.yml +++ b/.github/workflows/sync_first_100_blocks_smoke_test.yml @@ -26,7 +26,7 @@ jobs: uses: actions/checkout@v3 - name: Set up Go - uses: actions/setup-go@v4.1.0 + uses: actions/setup-go@v5.0.2 with: go-version-file: go.mod cache: true From 7a65e90f3c2713aacfe21a40c2ca8a02943bf918 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 Jul 2024 18:40:29 +0300 Subject: [PATCH 60/69] Bump github/codeql-action from 2 to 3 (#1993) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2 to 3. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/v2...v3) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index df82874073..1a3889a5dc 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -42,7 +42,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -53,7 +53,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@v3 # ℹī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -67,4 +67,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 From 03fa691d6f211f402b520263f329a1bd96921081 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2024 09:37:10 +0100 Subject: [PATCH 61/69] Bump docker/login-action from 2 to 3 (#1990) Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v2...v3) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker-image-build-push.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker-image-build-push.yml b/.github/workflows/docker-image-build-push.yml index 153770f583..97808b8b59 100644 --- a/.github/workflows/docker-image-build-push.yml +++ b/.github/workflows/docker-image-build-push.yml @@ -29,7 +29,7 @@ jobs: uses: docker/setup-buildx-action@v2 - name: Login to Docker Hub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} @@ -55,7 +55,7 @@ jobs: uses: docker/setup-buildx-action@v2 - name: Login to Docker Hub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} @@ -81,7 +81,7 @@ jobs: uses: docker/setup-buildx-action@v2 - name: Login to Docker Hub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} From 2dd803747fdbc8395fc04d6298ce69302361d000 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2024 13:48:23 +0300 Subject: [PATCH 62/69] Bump google.golang.org/grpc from 1.60.1 to 1.65.0 (#1999) * Bump google.golang.org/grpc from 1.60.1 to 1.65.0 Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.60.1 to 1.65.0. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.60.1...v1.65.0) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * linter fixed (#2008) --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Daniil Ankushin Co-authored-by: Kirill --- db/remote/db.go | 2 +- go.mod | 19 +++++++++---------- go.sum | 44 ++++++++++++++++++++------------------------ 3 files changed, 30 insertions(+), 35 deletions(-) diff --git a/db/remote/db.go b/db/remote/db.go index 7c1877f883..734722adec 100644 --- a/db/remote/db.go +++ b/db/remote/db.go @@ -21,7 +21,7 @@ type DB struct { } func New(rawURL string, ctx context.Context, log utils.SimpleLogger, opts ...grpc.DialOption) (*DB, error) { - grpcClient, err := grpc.Dial(rawURL, opts...) + grpcClient, err := grpc.NewClient(rawURL, opts...) if err != nil { return nil, err } diff --git a/go.mod b/go.mod index a60bca4809..385ed58689 100644 --- a/go.mod +++ b/go.mod @@ -30,9 +30,9 @@ require ( go.uber.org/automaxprocs v1.5.3 go.uber.org/mock v0.4.0 go.uber.org/zap v1.26.0 - golang.org/x/crypto v0.21.0 - google.golang.org/grpc v1.60.1 - google.golang.org/protobuf v1.33.0 + golang.org/x/crypto v0.23.0 + google.golang.org/grpc v1.65.0 + google.golang.org/protobuf v1.34.1 gopkg.in/yaml.v3 v3.0.1 nhooyr.io/websocket v1.8.10 ) @@ -43,7 +43,7 @@ require ( github.com/benbjohnson/clock v1.3.5 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cockroachdb/errors v1.11.3 // indirect github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect @@ -72,11 +72,10 @@ require ( github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect github.com/google/gopacket v1.1.19 // indirect github.com/google/pprof v0.0.0-20240117000934-35fc243c5815 // indirect - github.com/google/uuid v1.5.0 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.1 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect @@ -170,13 +169,13 @@ require ( go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 // indirect golang.org/x/mod v0.16.0 // indirect - golang.org/x/net v0.23.0 // indirect + golang.org/x/net v0.25.0 // indirect golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/sys v0.20.0 // indirect + golang.org/x/text v0.15.0 // indirect golang.org/x/tools v0.19.0 // indirect gonum.org/v1/gonum v0.14.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 // indirect gopkg.in/ini.v1 v1.67.0 // indirect lukechampine.com/blake3 v1.2.1 // indirect rsc.io/tmplfunc v0.0.3 // indirect diff --git a/go.sum b/go.sum index ce566c9097..39fed8eed3 100644 --- a/go.sum +++ b/go.sum @@ -38,8 +38,8 @@ github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -179,9 +179,8 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -192,7 +191,6 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= @@ -208,8 +206,8 @@ github.com/google/pprof v0.0.0-20240117000934-35fc243c5815/go.mod h1:czg5+yv1E0Z github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= -github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -607,8 +605,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 h1:aAcj0Da7eBAtrTp03QXWvm88pSyOt+UgdZw2BFZ+lEw= golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8/go.mod h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ= @@ -642,8 +640,8 @@ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= -golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -679,14 +677,14 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= @@ -730,8 +728,8 @@ google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 h1:Zy9XzmMEflZ/MAaA7vNcoebnRAld7FsPW1EeBB7V0m8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= @@ -740,8 +738,8 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= -google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= +google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -751,10 +749,8 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= From 0a92c9824fa15dc8a166d7fd692558d3d685a9d2 Mon Sep 17 00:00:00 2001 From: Ng Wei Han <47109095+weiihann@users.noreply.github.com> Date: Fri, 2 Aug 2024 16:12:24 +0800 Subject: [PATCH 63/69] Search test data directory path dynamically (#2005) --- clients/feeder/feeder.go | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/clients/feeder/feeder.go b/clients/feeder/feeder.go index f938da349e..82e99390ad 100644 --- a/clients/feeder/feeder.go +++ b/clients/feeder/feeder.go @@ -128,10 +128,8 @@ func newTestServer(t *testing.T, network *utils.Network) *httptest.Server { assert.Equal(t, []string{"API_KEY"}, r.Header["X-Throttling-Bypass"]) assert.Equal(t, []string{"Juno/v0.0.1-test Starknet Implementation"}, r.Header["User-Agent"]) - wd, err := os.Getwd() require.NoError(t, err) - base := wd[:strings.LastIndex(wd, "juno")+4] queryArg := "" dir := "" const blockNumberArg = "blockNumber" @@ -173,7 +171,11 @@ func newTestServer(t *testing.T, network *utils.Network) *httptest.Server { return } - path := filepath.Join(base, "clients", "feeder", "testdata", network.String(), dir, fileName[0]+".json") + dataPath, err := findTargetDirectory("clients/feeder/testdata") + if err != nil { + t.Fatalf("failed to find testdata directory: %v", err) + } + path := filepath.Join(dataPath, network.String(), dir, fileName[0]+".json") read, err := os.ReadFile(path) if err != nil { handleNotFound(dir, queryArg, w) @@ -447,3 +449,23 @@ func (c *Client) BlockTrace(ctx context.Context, blockHash string) (*starknet.Bl } return traces, nil } + +func findTargetDirectory(targetRelPath string) (string, error) { + root, err := os.Getwd() + if err != nil { + return "", err + } + for { + targetPath := filepath.Join(root, targetRelPath) + if _, err := os.Stat(targetPath); err == nil { + return targetPath, nil + } else if !os.IsNotExist(err) { + return "", err + } + newRoot := filepath.Dir(root) + if newRoot == root { + return "", os.ErrNotExist + } + root = newRoot + } +} From fb80ae279869a3364acb75b851cae8e0216c2901 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Aug 2024 11:24:33 +0000 Subject: [PATCH 64/69] Bump github.com/fxamacker/cbor/v2 from 2.5.0 to 2.7.0 (#2001) Bumps [github.com/fxamacker/cbor/v2](https://github.com/fxamacker/cbor) from 2.5.0 to 2.7.0. - [Release notes](https://github.com/fxamacker/cbor/releases) - [Commits](https://github.com/fxamacker/cbor/compare/v2.5.0...v2.7.0) --- updated-dependencies: - dependency-name: github.com/fxamacker/cbor/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Rian Hughes --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 385ed58689..0df2d784ae 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/consensys/gnark-crypto v0.12.1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc github.com/ethereum/go-ethereum v1.13.15 - github.com/fxamacker/cbor/v2 v2.5.0 + github.com/fxamacker/cbor/v2 v2.7.0 github.com/go-playground/validator/v10 v10.17.0 github.com/jinzhu/copier v0.4.0 github.com/libp2p/go-libp2p v0.32.2 diff --git a/go.sum b/go.sum index 39fed8eed3..c3fdb843b0 100644 --- a/go.sum +++ b/go.sum @@ -116,8 +116,8 @@ github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7z github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/fxamacker/cbor/v2 v2.5.0 h1:oHsG0V/Q6E/wqTS2O1Cozzsy69nqCiguo5Q1a1ADivE= -github.com/fxamacker/cbor/v2 v2.5.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= From 0a16be71212546a2ea287698b1bdaecfafd75862 Mon Sep 17 00:00:00 2001 From: Mario Apra Date: Fri, 2 Aug 2024 13:07:32 +0100 Subject: [PATCH 65/69] Start using gitlab hosted runners for ARM (#2012) Those runners have proper auto-scaling and are able to out-perform the self-hosted one that we had. --- .github/workflows/build-binaries.yml | 4 ++-- .github/workflows/docker-image-build-push.yml | 2 +- .github/workflows/juno-test.yml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-binaries.yml b/.github/workflows/build-binaries.yml index 0b2bcc952d..e56db7a7c0 100644 --- a/.github/workflows/build-binaries.yml +++ b/.github/workflows/build-binaries.yml @@ -16,7 +16,7 @@ jobs: architecture: amd64 - os: macOS-latest architecture: amd64 - - os: self-hosted + - os: ubuntu-arm64-4-core architecture: arm64 runs-on: ${{ matrix.os }} @@ -30,7 +30,7 @@ jobs: id: tag run: echo "TAG=$(git describe --tags)" >> $GITHUB_ENV - - name: Install dependencies (Ubuntu or self-hosted) + - name: Install dependencies (Linux) if: runner.os == 'Linux' run: sudo apt-get update -qq && sudo apt-get install -y upx-ucl build-essential cargo git golang libjemalloc-dev libjemalloc2 -y diff --git a/.github/workflows/docker-image-build-push.yml b/.github/workflows/docker-image-build-push.yml index 97808b8b59..824c2c5210 100644 --- a/.github/workflows/docker-image-build-push.yml +++ b/.github/workflows/docker-image-build-push.yml @@ -44,7 +44,7 @@ jobs: build_and_push_docker_image_arm: if: github.repository_owner == 'NethermindEth' - runs-on: self-hosted + runs-on: ubuntu-arm64-4-core steps: - name: Checkout code uses: actions/checkout@v3 diff --git a/.github/workflows/juno-test.yml b/.github/workflows/juno-test.yml index b89c47e750..96273dcf18 100644 --- a/.github/workflows/juno-test.yml +++ b/.github/workflows/juno-test.yml @@ -14,7 +14,7 @@ jobs: fail-fast: false matrix: go: [ '1.22.2' ] - os: [ ubuntu-latest, macos-latest, self-hosted-linux-arm64] + os: [ ubuntu-latest, macos-latest, ubuntu-arm64-2-core] runs-on: ${{ matrix.os }} env: VM_DEBUG: true @@ -35,7 +35,7 @@ jobs: - name: Install deps run: make install-deps - - name: Install Jemalloc (Ubuntu or self-hosted) + - name: Install Jemalloc (Linux) if: runner.os == 'Linux' run: sudo apt-get update -qq && sudo apt-get install -y libjemalloc-dev libjemalloc2 -y From 310d7d4d3e07d35afc11355381bd3ab69e56b13e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Aug 2024 13:16:23 +0100 Subject: [PATCH 66/69] Bump actions/checkout from 3 to 4 (#1992) Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-binaries.yml | 2 +- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/docker-image-build-push.yml | 4 ++-- .github/workflows/docs-deploy.yml | 2 +- .github/workflows/docs-test.yml | 2 +- .github/workflows/juno-lint.yml | 2 +- .github/workflows/load-tests.yml | 2 +- .github/workflows/rpc-tests.yml | 2 +- .github/workflows/sync_first_100_blocks_smoke_test.yml | 4 ++-- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build-binaries.yml b/.github/workflows/build-binaries.yml index e56db7a7c0..0d7212e9ed 100644 --- a/.github/workflows/build-binaries.yml +++ b/.github/workflows/build-binaries.yml @@ -22,7 +22,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 1a3889a5dc..9efe8a23b9 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -38,7 +38,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/docker-image-build-push.yml b/.github/workflows/docker-image-build-push.yml index 824c2c5210..72d64a95ba 100644 --- a/.github/workflows/docker-image-build-push.yml +++ b/.github/workflows/docker-image-build-push.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 @@ -47,7 +47,7 @@ jobs: runs-on: ubuntu-arm64-4-core steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml index de21ff8a5e..28451b2ffd 100644 --- a/.github/workflows/docs-deploy.yml +++ b/.github/workflows/docs-deploy.yml @@ -14,7 +14,7 @@ jobs: name: Deploy to GitHub Pages runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-node@v3 with: node-version-file: docs/.nvmrc diff --git a/.github/workflows/docs-test.yml b/.github/workflows/docs-test.yml index 4536100089..2874fa57c6 100644 --- a/.github/workflows/docs-test.yml +++ b/.github/workflows/docs-test.yml @@ -10,7 +10,7 @@ jobs: name: Test deployment runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-node@v3 with: node-version-file: docs/.nvmrc diff --git a/.github/workflows/juno-lint.yml b/.github/workflows/juno-lint.yml index 558d6dd6a1..cc24ef1ac2 100644 --- a/.github/workflows/juno-lint.yml +++ b/.github/workflows/juno-lint.yml @@ -14,7 +14,7 @@ jobs: name: lint runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-go@v5.0.2 with: go-version-file: go.mod diff --git a/.github/workflows/load-tests.yml b/.github/workflows/load-tests.yml index e0f1b3a986..e016c2e065 100644 --- a/.github/workflows/load-tests.yml +++ b/.github/workflows/load-tests.yml @@ -22,7 +22,7 @@ jobs: steps: - name: Checkout Juno Smoke Tests - uses: actions/checkout@v3.5.2 + uses: actions/checkout@v4 with: repository: NethermindEth/juno-smoke-tests token: ${{ secrets.REPOSITORY_DISPATCH_TOKEN }} diff --git a/.github/workflows/rpc-tests.yml b/.github/workflows/rpc-tests.yml index 88a2560e64..0a2eb26904 100644 --- a/.github/workflows/rpc-tests.yml +++ b/.github/workflows/rpc-tests.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Juno Smoke Tests - uses: actions/checkout@v3.5.2 + uses: actions/checkout@v4 with: repository: NethermindEth/juno-smoke-tests token: ${{ secrets.REPOSITORY_DISPATCH_TOKEN }} diff --git a/.github/workflows/sync_first_100_blocks_smoke_test.yml b/.github/workflows/sync_first_100_blocks_smoke_test.yml index 00bcaa0a3d..c2bbf3d278 100644 --- a/.github/workflows/sync_first_100_blocks_smoke_test.yml +++ b/.github/workflows/sync_first_100_blocks_smoke_test.yml @@ -23,7 +23,7 @@ jobs: repositories: "juno,juno-smoke-tests" - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5.0.2 @@ -38,7 +38,7 @@ jobs: run: docker build --build-arg VM_DEBUG=true -t nethermindeth/juno . - name: Checkout Juno Smoke Tests - uses: actions/checkout@v4.1.7 + uses: actions/checkout@v4 with: repository: NethermindEth/juno-smoke-tests token: ${{ steps.generate-token.outputs.token }} From e177dfb87f556820f303e387c6be7ae2340937e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Aug 2024 12:34:27 +0000 Subject: [PATCH 67/69] Bump github.com/ethereum/go-ethereum from 1.13.15 to 1.14.7 (#2000) Bumps [github.com/ethereum/go-ethereum](https://github.com/ethereum/go-ethereum) from 1.13.15 to 1.14.7. - [Release notes](https://github.com/ethereum/go-ethereum/releases) - [Commits](https://github.com/ethereum/go-ethereum/compare/v1.13.15...v1.14.7) --- updated-dependencies: - dependency-name: github.com/ethereum/go-ethereum dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Daniil Ankushin --- go.mod | 14 +++++++------- go.sum | 44 ++++++++++++++++++++++---------------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/go.mod b/go.mod index 0df2d784ae..4dd7e4adaa 100644 --- a/go.mod +++ b/go.mod @@ -10,8 +10,8 @@ require ( github.com/cockroachdb/pebble v1.1.1 github.com/consensys/gnark-crypto v0.12.1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc - github.com/ethereum/go-ethereum v1.13.15 github.com/fxamacker/cbor/v2 v2.7.0 + github.com/ethereum/go-ethereum v1.14.7 github.com/go-playground/validator/v10 v10.17.0 github.com/jinzhu/copier v0.4.0 github.com/libp2p/go-libp2p v0.32.2 @@ -39,7 +39,7 @@ require ( require ( github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect github.com/benbjohnson/clock v1.3.5 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect @@ -52,13 +52,13 @@ require ( github.com/consensys/bavard v0.1.13 // indirect github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect + github.com/crate-crypto/go-kzg-4844 v1.0.0 // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect github.com/deckarep/golang-set/v2 v2.6.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/elastic/gosigar v0.14.2 // indirect - github.com/ethereum/c-kzg-4844 v0.4.0 // indirect + github.com/ethereum/c-kzg-4844 v1.0.0 // indirect github.com/flynn/noise v1.0.1 // indirect github.com/francoispqt/gojay v1.2.13 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect @@ -82,7 +82,7 @@ require ( github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/holiman/uint256 v1.2.4 // indirect + github.com/holiman/uint256 v1.3.0 // indirect github.com/huin/goupnp v1.3.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/ipfs/boxo v0.17.0 // indirect @@ -168,12 +168,12 @@ require ( go.uber.org/fx v1.20.1 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 // indirect - golang.org/x/mod v0.16.0 // indirect + golang.org/x/mod v0.17.0 // indirect golang.org/x/net v0.25.0 // indirect golang.org/x/sync v0.7.0 // indirect golang.org/x/sys v0.20.0 // indirect golang.org/x/text v0.15.0 // indirect - golang.org/x/tools v0.19.0 // indirect + golang.org/x/tools v0.20.0 // indirect gonum.org/v1/gonum v0.14.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/go.sum b/go.sum index c3fdb843b0..fa08901c73 100644 --- a/go.sum +++ b/go.sum @@ -12,10 +12,10 @@ github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e h1:ZIWapoIRN1VqT8GR github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= -github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= +github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -72,10 +72,10 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ= -github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= -github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= -github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= +github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c h1:uQYC5Z1mdLRPrZhHjHxufI8+2UG/i25QG92j0Er9p6I= +github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= +github.com/crate-crypto/go-kzg-4844 v1.0.0 h1:TsSgHwrkTKecKJ4kadtHi4b3xHW5dCFUDFnUp1TsawI= +github.com/crate-crypto/go-kzg-4844 v1.0.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -100,10 +100,12 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= -github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= -github.com/ethereum/go-ethereum v1.13.15 h1:U7sSGYGo4SPjP6iNIifNoyIAiNjrmQkz6EwQG+/EZWo= -github.com/ethereum/go-ethereum v1.13.15/go.mod h1:TN8ZiHrdJwSe8Cb6x+p0hs5CxhJZPbqB7hHkaUXcmIU= +github.com/ethereum/c-kzg-4844 v1.0.0 h1:0X1LBXxaEtYD9xsyj9B9ctQEZIpnvVDeoBx8aHEwTNA= +github.com/ethereum/c-kzg-4844 v1.0.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-ethereum v1.14.7 h1:EHpv3dE8evQmpVEQ/Ne2ahB06n2mQptdwqaMNhAT29g= +github.com/ethereum/go-ethereum v1.14.7/go.mod h1:Mq0biU2jbdmKSZoqOj29017ygFrMnB5/Rifwp980W4o= +github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0 h1:KrE8I4reeVvf7C1tm8elRjj4BdscTYzz/WAbYyf/JI4= +github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0/go.mod h1:D9AJLVXSyZQXJQVk8oh1EwjISE+sJTn2duYIZC0dy3w= github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA= github.com/fjl/memsize v0.0.2/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= @@ -122,8 +124,6 @@ github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uq github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE= -github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc= github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -234,8 +234,8 @@ github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6w github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= -github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= +github.com/holiman/uint256 v1.3.0 h1:4wdcm/tnd0xXdu7iS3ruNvxkWwrb4aeBQv19ayYn8F4= +github.com/holiman/uint256 v1.3.0/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -621,8 +621,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= -golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -706,8 +706,8 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= -golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= +golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= +golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -759,8 +759,8 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From 4a13a011ed2fe8c3c9c38131f2d969b1a85f3c82 Mon Sep 17 00:00:00 2001 From: Mario Apra Date: Fri, 2 Aug 2024 13:48:32 +0100 Subject: [PATCH 68/69] Update snapshot link in README (#2007) Have the link pointing to the latest available snapshot. In order for this to work, I had to remove the size and what's the latest block from the table, so we won't have to manually update this information everytime. I also included a way to know how big the snapshot is via script, so this information will always be up-to-date by the time someone runs the command --- README.md | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b947d95c9a..8d66d0a37b 100644 --- a/README.md +++ b/README.md @@ -109,15 +109,27 @@ Use the provided snapshots to quickly sync your Juno node with the current state #### Mainnet -| Version | Size | Block | Download Link | -| ------- | ---- | ----- | ------------- | -| **>=v0.9.2** | **172 GB** | **654881** | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654881.tar) | +| Version | Download Link | +| ------- | ------------- | +| **>=v0.9.2** | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/files/mainnet/latest) | #### Sepolia -| Version | Size | Block | Download Link | -| ------- | ---- | ----- | ------------- | -| **>=v0.9.2** | **5 GB** | **66477** | [**juno_sepolia.tar**](https://juno-snapshots.nethermind.dev/sepolia/juno_sepolia_v0.11.7_66477.tar) | +| Version | Download Link | +| ------- | ------------- | +| **>=v0.9.2** | [**juno_sepolia.tar**](https://juno-snapshots.nethermind.dev/files/sepolia/latest) | + +### Getting the size for each snapshot +```console +$date +Thu 1 Aug 2024 09:49:30 BST + +$curl -s -I -L https://juno-snapshots.nethermind.dev/files/mainnet/latest | gawk -v IGNORECASE=1 '/^Content-Length/ { printf "%.2f GB\n", $2/1024/1024/1024 }' +172.47 GB + +$curl -s -I -L https://juno-snapshots.nethermind.dev/files/sepolia/latest | gawk -v IGNORECASE=1 '/^Content-Length/ { printf "%.2f GB\n", $2/1024/1024/1024 }' +5.67 GB +``` ### Run Juno Using Snapshot @@ -126,7 +138,7 @@ Use the provided snapshots to quickly sync your Juno node with the current state Fetch the snapshot from the provided URL: ```bash - wget -O juno_mainnet.tar https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.11.9_654881.tar + wget -O juno_mainnet.tar https://juno-snapshots.nethermind.dev/files/mainnet/latest ``` 2. **Prepare Directory** From 10ba647921680e050cfba5437e11a9691f4ec323 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Aug 2024 15:45:36 +0100 Subject: [PATCH 69/69] Bump docker/build-push-action from 4 to 6 (#1994) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4 to 6. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v4...v6) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-cd-pipeline.yml | 2 +- .github/workflows/docker-image-build-push.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-cd-pipeline.yml b/.github/workflows/ci-cd-pipeline.yml index 44fdcb853c..0c4c3da0b7 100644 --- a/.github/workflows/ci-cd-pipeline.yml +++ b/.github/workflows/ci-cd-pipeline.yml @@ -49,7 +49,7 @@ jobs: docker login ${{ env.DOCKER_REGISTRY }} -u ${{ vars.ARTIFACTORY_NUBIA_USER }} -p ${{ secrets.ARTIFACTORY_NUBIA_CONTRIBUTOR}} - name: Build and Push - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v6 with: context: . platforms: "linux/amd64" diff --git a/.github/workflows/docker-image-build-push.yml b/.github/workflows/docker-image-build-push.yml index 72d64a95ba..a0daf4ac0a 100644 --- a/.github/workflows/docker-image-build-push.yml +++ b/.github/workflows/docker-image-build-push.yml @@ -35,7 +35,7 @@ jobs: password: ${{ secrets.DOCKER_PASSWORD }} - name: Build and push - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v6 with: context: . platforms: 'linux/amd64' @@ -61,7 +61,7 @@ jobs: password: ${{ secrets.DOCKER_PASSWORD }} - name: Build and push ARM - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v6 with: context: . platforms: 'linux/arm64'