@aztec/stdlib 0.0.1-commit.ef17749e1 → 0.0.1-commit.f1b29a41e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/abi/abi.d.ts +138 -1
- package/dest/abi/abi.d.ts.map +1 -1
- package/dest/abi/abi.js +10 -2
- package/dest/abi/buffer.d.ts +14 -4
- package/dest/abi/buffer.d.ts.map +1 -1
- package/dest/abi/buffer.js +25 -4
- package/dest/abi/decoder.d.ts +5 -44
- package/dest/abi/decoder.d.ts.map +1 -1
- package/dest/abi/decoder.js +12 -67
- package/dest/abi/function_selector.js +1 -1
- package/dest/abi/function_signature_decoder.d.ts +43 -0
- package/dest/abi/function_signature_decoder.d.ts.map +1 -0
- package/dest/abi/function_signature_decoder.js +66 -0
- package/dest/abi/index.d.ts +2 -1
- package/dest/abi/index.d.ts.map +1 -1
- package/dest/abi/index.js +1 -0
- package/dest/avm/avm.d.ts +300 -300
- package/dest/block/l2_block_source.d.ts +90 -10
- package/dest/block/l2_block_source.d.ts.map +1 -1
- package/dest/block/l2_block_source.js +1 -0
- package/dest/block/l2_block_stream/l2_tips_store_base.d.ts +1 -1
- package/dest/block/l2_block_stream/l2_tips_store_base.d.ts.map +1 -1
- package/dest/block/l2_block_stream/l2_tips_store_base.js +17 -4
- package/dest/block/test/l2_tips_store_test_suite.d.ts +1 -1
- package/dest/block/test/l2_tips_store_test_suite.d.ts.map +1 -1
- package/dest/block/test/l2_tips_store_test_suite.js +3 -2
- package/dest/checkpoint/checkpoint.d.ts +7 -1
- package/dest/checkpoint/checkpoint.d.ts.map +1 -1
- package/dest/checkpoint/checkpoint.js +9 -1
- package/dest/checkpoint/checkpoint_data.d.ts +71 -5
- package/dest/checkpoint/checkpoint_data.d.ts.map +1 -1
- package/dest/checkpoint/checkpoint_data.js +10 -0
- package/dest/checkpoint/validate.js +2 -2
- package/dest/config/index.d.ts +2 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +1 -0
- package/dest/config/pipelining-config.d.ts +19 -0
- package/dest/config/pipelining-config.d.ts.map +1 -0
- package/dest/config/pipelining-config.js +18 -0
- package/dest/contract/contract_address.d.ts +3 -3
- package/dest/contract/contract_address.js +3 -3
- package/dest/contract/contract_class_id.d.ts +2 -2
- package/dest/contract/contract_class_id.js +2 -2
- package/dest/contract/index.d.ts +1 -3
- package/dest/contract/index.d.ts.map +1 -1
- package/dest/contract/index.js +0 -2
- package/dest/contract/interfaces/contract_class.d.ts +3 -156
- package/dest/contract/interfaces/contract_class.d.ts.map +1 -1
- package/dest/contract/interfaces/contract_class.js +1 -28
- package/dest/epoch-helpers/index.d.ts +11 -1
- package/dest/epoch-helpers/index.d.ts.map +1 -1
- package/dest/epoch-helpers/index.js +16 -2
- package/dest/file-store/factory.d.ts +4 -3
- package/dest/file-store/factory.d.ts.map +1 -1
- package/dest/file-store/factory.js +2 -2
- package/dest/file-store/http.d.ts +9 -2
- package/dest/file-store/http.d.ts.map +1 -1
- package/dest/file-store/http.js +20 -9
- package/dest/file-store/index.d.ts +2 -1
- package/dest/file-store/index.d.ts.map +1 -1
- package/dest/hash/hash.d.ts +19 -1
- package/dest/hash/hash.d.ts.map +1 -1
- package/dest/hash/hash.js +29 -0
- package/dest/interfaces/archiver.d.ts +1 -1
- package/dest/interfaces/archiver.d.ts.map +1 -1
- package/dest/interfaces/archiver.js +5 -3
- package/dest/interfaces/aztec-node-admin.d.ts +7 -4
- package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
- package/dest/interfaces/aztec-node.d.ts +3 -2
- package/dest/interfaces/aztec-node.d.ts.map +1 -1
- package/dest/interfaces/aztec-node.js +2 -0
- package/dest/interfaces/block-builder.d.ts +32 -11
- package/dest/interfaces/block-builder.d.ts.map +1 -1
- package/dest/interfaces/block-builder.js +6 -4
- package/dest/interfaces/configs.d.ts +7 -2
- package/dest/interfaces/configs.d.ts.map +1 -1
- package/dest/interfaces/configs.js +1 -0
- package/dest/interfaces/l2_logs_source.d.ts +5 -3
- package/dest/interfaces/l2_logs_source.d.ts.map +1 -1
- package/dest/interfaces/merkle_tree_operations.d.ts +9 -19
- package/dest/interfaces/merkle_tree_operations.d.ts.map +1 -1
- package/dest/interfaces/prover-client.d.ts +6 -1
- package/dest/interfaces/prover-client.d.ts.map +1 -1
- package/dest/interfaces/prover-client.js +7 -1
- package/dest/interfaces/proving-job.d.ts +200 -200
- package/dest/interfaces/validator.d.ts +2 -10
- package/dest/interfaces/validator.d.ts.map +1 -1
- package/dest/interfaces/validator.js +0 -1
- package/dest/interfaces/world_state.d.ts +5 -4
- package/dest/interfaces/world_state.d.ts.map +1 -1
- package/dest/logs/index.d.ts +2 -1
- package/dest/logs/index.d.ts.map +1 -1
- package/dest/logs/index.js +1 -0
- package/dest/logs/log_filter.d.ts +4 -1
- package/dest/logs/log_filter.d.ts.map +1 -1
- package/dest/logs/log_filter.js +2 -1
- package/dest/logs/message_context.d.ts +4 -7
- package/dest/logs/message_context.d.ts.map +1 -1
- package/dest/logs/message_context.js +23 -9
- package/dest/logs/pending_tagged_log.d.ts +2 -3
- package/dest/logs/pending_tagged_log.d.ts.map +1 -1
- package/dest/logs/pending_tagged_log.js +2 -2
- package/dest/logs/shared_secret_derivation.d.ts +11 -10
- package/dest/logs/shared_secret_derivation.d.ts.map +1 -1
- package/dest/logs/shared_secret_derivation.js +15 -9
- package/dest/logs/siloed_tag.d.ts +4 -1
- package/dest/logs/siloed_tag.d.ts.map +1 -1
- package/dest/logs/siloed_tag.js +7 -3
- package/dest/logs/tagging_index_range.d.ts +40 -0
- package/dest/logs/tagging_index_range.d.ts.map +1 -0
- package/dest/logs/tagging_index_range.js +8 -0
- package/dest/logs/tx_scoped_l2_log.d.ts +3 -1
- package/dest/logs/tx_scoped_l2_log.d.ts.map +1 -1
- package/dest/logs/tx_scoped_l2_log.js +7 -0
- package/dest/messaging/l1_to_l2_message.d.ts +3 -2
- package/dest/messaging/l1_to_l2_message.d.ts.map +1 -1
- package/dest/messaging/l1_to_l2_message.js +11 -13
- package/dest/messaging/l1_to_l2_message_source.d.ts +4 -2
- package/dest/messaging/l1_to_l2_message_source.d.ts.map +1 -1
- package/dest/messaging/l2_to_l1_membership.d.ts +32 -6
- package/dest/messaging/l2_to_l1_membership.d.ts.map +1 -1
- package/dest/messaging/l2_to_l1_membership.js +69 -26
- package/dest/noir/index.d.ts +3 -3
- package/dest/noir/index.d.ts.map +1 -1
- package/dest/note/note_dao.d.ts +1 -1
- package/dest/note/note_dao.d.ts.map +1 -1
- package/dest/note/note_dao.js +1 -4
- package/dest/p2p/checkpoint_proposal.d.ts +1 -1
- package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
- package/dest/p2p/checkpoint_proposal.js +13 -11
- package/dest/proofs/chonk_proof.d.ts +46 -2
- package/dest/proofs/chonk_proof.d.ts.map +1 -1
- package/dest/proofs/chonk_proof.js +85 -10
- package/dest/tests/factories.d.ts +2 -4
- package/dest/tests/factories.d.ts.map +1 -1
- package/dest/tests/factories.js +10 -27
- package/dest/tx/capsule.d.ts +6 -2
- package/dest/tx/capsule.d.ts.map +1 -1
- package/dest/tx/capsule.js +9 -3
- package/dest/tx/global_variable_builder.d.ts +14 -2
- package/dest/tx/global_variable_builder.d.ts.map +1 -1
- package/dest/tx/private_execution_result.d.ts +6 -6
- package/dest/tx/private_execution_result.d.ts.map +1 -1
- package/dest/tx/private_execution_result.js +6 -6
- package/dest/tx/profiling.d.ts +14 -2
- package/dest/tx/profiling.d.ts.map +1 -1
- package/dest/tx/profiling.js +13 -3
- package/dest/tx/simulated_tx.d.ts +109 -1
- package/dest/tx/simulated_tx.d.ts.map +1 -1
- package/dest/tx/tx_receipt.d.ts +7 -2
- package/dest/tx/tx_receipt.d.ts.map +1 -1
- package/dest/tx/tx_receipt.js +6 -3
- package/dest/tx/validator/error_texts.d.ts +5 -1
- package/dest/tx/validator/error_texts.d.ts.map +1 -1
- package/dest/tx/validator/error_texts.js +6 -0
- package/dest/update-checker/package_version.d.ts +2 -2
- package/dest/update-checker/package_version.d.ts.map +1 -1
- package/dest/update-checker/package_version.js +16 -3
- package/dest/validators/errors.d.ts +6 -1
- package/dest/validators/errors.d.ts.map +1 -1
- package/dest/validators/errors.js +7 -0
- package/dest/versioning/versioning.d.ts +4 -2
- package/dest/versioning/versioning.d.ts.map +1 -1
- package/dest/versioning/versioning.js +4 -1
- package/package.json +8 -8
- package/src/abi/abi.ts +25 -2
- package/src/abi/buffer.ts +25 -4
- package/src/abi/decoder.ts +23 -78
- package/src/abi/function_selector.ts +1 -1
- package/src/abi/function_signature_decoder.ts +77 -0
- package/src/abi/index.ts +1 -0
- package/src/block/l2_block_source.ts +20 -9
- package/src/block/l2_block_stream/l2_tips_store_base.ts +24 -12
- package/src/block/test/l2_tips_store_test_suite.ts +8 -1
- package/src/checkpoint/checkpoint.ts +11 -1
- package/src/checkpoint/checkpoint_data.ts +40 -4
- package/src/checkpoint/validate.ts +2 -2
- package/src/config/index.ts +1 -0
- package/src/config/pipelining-config.ts +31 -0
- package/src/contract/contract_address.ts +3 -3
- package/src/contract/contract_class_id.ts +2 -2
- package/src/contract/index.ts +0 -2
- package/src/contract/interfaces/contract_class.ts +2 -82
- package/src/epoch-helpers/index.ts +27 -0
- package/src/file-store/factory.ts +13 -4
- package/src/file-store/http.ts +29 -10
- package/src/file-store/index.ts +1 -0
- package/src/gas/README.md +123 -0
- package/src/hash/hash.ts +34 -0
- package/src/interfaces/archiver.ts +5 -3
- package/src/interfaces/aztec-node.ts +10 -1
- package/src/interfaces/block-builder.ts +39 -13
- package/src/interfaces/configs.ts +4 -1
- package/src/interfaces/l2_logs_source.ts +4 -1
- package/src/interfaces/merkle_tree_operations.ts +8 -18
- package/src/interfaces/prover-client.ts +8 -0
- package/src/interfaces/validator.ts +1 -5
- package/src/interfaces/world_state.ts +4 -3
- package/src/logs/index.ts +1 -0
- package/src/logs/log_filter.ts +5 -0
- package/src/logs/message_context.ts +17 -7
- package/src/logs/pending_tagged_log.ts +1 -3
- package/src/logs/shared_secret_derivation.ts +21 -10
- package/src/logs/siloed_tag.ts +7 -2
- package/src/logs/tagging_index_range.ts +24 -0
- package/src/logs/tx_scoped_l2_log.ts +16 -0
- package/src/messaging/l1_to_l2_message.ts +12 -9
- package/src/messaging/l1_to_l2_message_source.ts +3 -1
- package/src/messaging/l2_to_l1_membership.ts +98 -33
- package/src/noir/index.ts +2 -2
- package/src/note/note_dao.ts +1 -4
- package/src/p2p/checkpoint_proposal.ts +23 -20
- package/src/proofs/chonk_proof.ts +91 -5
- package/src/tests/factories.ts +4 -33
- package/src/tx/capsule.ts +10 -2
- package/src/tx/global_variable_builder.ts +15 -0
- package/src/tx/private_execution_result.ts +5 -5
- package/src/tx/profiling.ts +11 -2
- package/src/tx/tx_receipt.ts +7 -2
- package/src/tx/validator/error_texts.ts +8 -0
- package/src/update-checker/package_version.ts +19 -6
- package/src/validators/errors.ts +9 -0
- package/src/versioning/versioning.ts +4 -1
- package/dest/contract/private_function_membership_proof.d.ts +0 -32
- package/dest/contract/private_function_membership_proof.d.ts.map +0 -1
- package/dest/contract/private_function_membership_proof.js +0 -124
- package/dest/contract/utility_function_membership_proof.d.ts +0 -27
- package/dest/contract/utility_function_membership_proof.d.ts.map +0 -1
- package/dest/contract/utility_function_membership_proof.js +0 -87
- package/src/contract/private_function_membership_proof.ts +0 -167
- package/src/contract/utility_function_membership_proof.ts +0 -118
|
@@ -22,11 +22,13 @@ export declare function checkCompressedComponentVersion(compressed: string, expe
|
|
|
22
22
|
/** Checks that two component versions match. Undefined fields are ignored. */
|
|
23
23
|
export declare function validatePartialComponentVersionsMatch(expected: Partial<ComponentsVersions>, actual: Partial<ComponentsVersions>): void;
|
|
24
24
|
/** Returns a Koa middleware that injects the versioning info as headers. */
|
|
25
|
-
export declare function getVersioningMiddleware(versions: Partial<ComponentsVersions
|
|
25
|
+
export declare function getVersioningMiddleware(versions: Partial<ComponentsVersions>, opts?: {
|
|
26
|
+
packageVersion?: string;
|
|
27
|
+
}): (ctx: Koa.Context, next: () => Promise<void>) => Promise<void>;
|
|
26
28
|
/** Returns a json rpc client handler that rejects responses with mismatching versions. */
|
|
27
29
|
export declare function getVersioningResponseHandler(versions: Partial<ComponentsVersions>): ({ headers }: {
|
|
28
30
|
headers: {
|
|
29
31
|
get: (header: string) => string | null | undefined;
|
|
30
32
|
};
|
|
31
33
|
}) => Promise<void>;
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbmluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZlcnNpb25pbmcvdmVyc2lvbmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdoRSxPQUFPLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQztBQUUzQixPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCw4SUFBOEk7QUFDOUksTUFBTSxNQUFNLGtCQUFrQixHQUFHO0lBQy9CLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFJbEIsZUFBZSxFQUFFLFVBQVUsQ0FBQztJQUM1QixhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLHVCQUF1QixFQUFFLE1BQU0sQ0FBQztJQUNoQyxvQkFBb0IsRUFBRSxNQUFNLENBQUM7Q0FDOUIsQ0FBQztBQUVGLHFEQUFxRDtBQUNyRCx3QkFBZ0IsK0JBQStCLENBQzdDLE1BQU0sRUFBRSxXQUFXLEVBQ25CLHVCQUF1QixFQUFFLE1BQU0sR0FBRyxFQUFFLEVBQ3BDLG9CQUFvQixFQUFFLE1BQU0sR0FBRyxFQUFFLEdBQ2hDLGtCQUFrQixDQVFwQjtBQUVELHFHQUFxRztBQUNyRyx3QkFBZ0IseUJBQXlCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixHQUFHLE1BQU0sQ0FpQjlFO0FBRUQscUJBQWEsdUJBQXdCLFNBQVEsS0FBSztJQUNoRCxZQUFZLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUd2RDtDQUNGO0FBRUQsaUdBQWlHO0FBQ2pHLHdCQUFnQiwrQkFBK0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsUUE2Qi9GO0FBRUQsOEVBQThFO0FBQzlFLHdCQUFnQixxQ0FBcUMsQ0FDbkQsUUFBUSxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNyQyxNQUFNLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFFBaUJwQztBQUVELDRFQUE0RTtBQUM1RSx3QkFBZ0IsdUJBQXVCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFO0lBQUUsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFBO0NBQUUsa0VBa0JoSDtBQUVELDBGQUEwRjtBQUMxRix3QkFBZ0IsNEJBQTRCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzs7OztvQkFhakYifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../../src/versioning/versioning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAE3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,8IAA8I;AAC9I,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAIlB,eAAe,EAAE,UAAU,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,EAAE,MAAM,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,qDAAqD;AACrD,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,WAAW,EACnB,uBAAuB,EAAE,MAAM,GAAG,EAAE,EACpC,oBAAoB,EAAE,MAAM,GAAG,EAAE,GAChC,kBAAkB,CAQpB;AAED,qGAAqG;AACrG,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAiB9E;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,YAAY,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAGvD;CACF;AAED,iGAAiG;AACjG,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,QA6B/F;AAED,8EAA8E;AAC9E,wBAAgB,qCAAqC,CACnD,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACrC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,QAiBpC;AAED,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../../src/versioning/versioning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAE3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,8IAA8I;AAC9I,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAIlB,eAAe,EAAE,UAAU,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,EAAE,MAAM,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,qDAAqD;AACrD,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,WAAW,EACnB,uBAAuB,EAAE,MAAM,GAAG,EAAE,EACpC,oBAAoB,EAAE,MAAM,GAAG,EAAE,GAChC,kBAAkB,CAQpB;AAED,qGAAqG;AACrG,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAiB9E;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,YAAY,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAGvD;CACF;AAED,iGAAiG;AACjG,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,QA6B/F;AAED,8EAA8E;AAC9E,wBAAgB,qCAAqC,CACnD,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACrC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,QAiBpC;AAED,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,kEAkBhH;AAED,0FAA0F;AAC1F,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC;;;;oBAajF"}
|
|
@@ -65,7 +65,7 @@ export class ComponentsVersionsError extends Error {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
-
/** Returns a Koa middleware that injects the versioning info as headers. */ export function getVersioningMiddleware(versions) {
|
|
68
|
+
/** Returns a Koa middleware that injects the versioning info as headers. */ export function getVersioningMiddleware(versions, opts) {
|
|
69
69
|
return async (ctx, next)=>{
|
|
70
70
|
try {
|
|
71
71
|
await next();
|
|
@@ -78,6 +78,9 @@ export class ComponentsVersionsError extends Error {
|
|
|
78
78
|
ctx.set(`x-aztec-${key}`, value.toString());
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
+
if (opts?.packageVersion) {
|
|
82
|
+
ctx.set('x-aztec-packageVersion', opts.packageVersion);
|
|
83
|
+
}
|
|
81
84
|
}
|
|
82
85
|
};
|
|
83
86
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/stdlib",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.f1b29a41e",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"inherits": [
|
|
6
6
|
"../package.common.json",
|
|
@@ -92,13 +92,13 @@
|
|
|
92
92
|
},
|
|
93
93
|
"dependencies": {
|
|
94
94
|
"@aws-sdk/client-s3": "^3.892.0",
|
|
95
|
-
"@aztec/bb.js": "0.0.1-commit.
|
|
96
|
-
"@aztec/blob-lib": "0.0.1-commit.
|
|
97
|
-
"@aztec/constants": "0.0.1-commit.
|
|
98
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
99
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
100
|
-
"@aztec/l1-artifacts": "0.0.1-commit.
|
|
101
|
-
"@aztec/noir-noirc_abi": "0.0.1-commit.
|
|
95
|
+
"@aztec/bb.js": "0.0.1-commit.f1b29a41e",
|
|
96
|
+
"@aztec/blob-lib": "0.0.1-commit.f1b29a41e",
|
|
97
|
+
"@aztec/constants": "0.0.1-commit.f1b29a41e",
|
|
98
|
+
"@aztec/ethereum": "0.0.1-commit.f1b29a41e",
|
|
99
|
+
"@aztec/foundation": "0.0.1-commit.f1b29a41e",
|
|
100
|
+
"@aztec/l1-artifacts": "0.0.1-commit.f1b29a41e",
|
|
101
|
+
"@aztec/noir-noirc_abi": "0.0.1-commit.f1b29a41e",
|
|
102
102
|
"@google-cloud/storage": "^7.15.0",
|
|
103
103
|
"axios": "^1.13.5",
|
|
104
104
|
"json-stringify-deterministic": "1.0.12",
|
package/src/abi/abi.ts
CHANGED
|
@@ -224,7 +224,13 @@ export const FunctionDebugMetadataSchema = z.object({
|
|
|
224
224
|
acir_locations: z.record(z.number()),
|
|
225
225
|
brillig_locations: z.record(z.record(z.number())),
|
|
226
226
|
}),
|
|
227
|
-
files: z.record(
|
|
227
|
+
files: z.record(
|
|
228
|
+
z.object({
|
|
229
|
+
source: z.string(),
|
|
230
|
+
path: z.string(),
|
|
231
|
+
function_locations: z.array(z.object({ start: z.number(), name: z.string() })),
|
|
232
|
+
}),
|
|
233
|
+
),
|
|
228
234
|
}) satisfies z.ZodType<FunctionDebugMetadata>;
|
|
229
235
|
|
|
230
236
|
/** The artifact entry of a function. */
|
|
@@ -305,6 +311,14 @@ export interface ProgramDebugInfo {
|
|
|
305
311
|
debug_infos: Array<DebugInfo>;
|
|
306
312
|
}
|
|
307
313
|
|
|
314
|
+
/** The range a function occupies in a file. */
|
|
315
|
+
export type FunctionLocation = {
|
|
316
|
+
/** The byte where the function starts. */
|
|
317
|
+
start: number;
|
|
318
|
+
/** The name of the function. */
|
|
319
|
+
name: string;
|
|
320
|
+
};
|
|
321
|
+
|
|
308
322
|
/** Maps a file ID to its metadata for debugging purposes. */
|
|
309
323
|
export type DebugFileMap = Record<
|
|
310
324
|
FileId,
|
|
@@ -313,6 +327,8 @@ export type DebugFileMap = Record<
|
|
|
313
327
|
source: string;
|
|
314
328
|
/** The path of the file. */
|
|
315
329
|
path: string;
|
|
330
|
+
/** The range each function occupies in the file. */
|
|
331
|
+
function_locations: FunctionLocation[];
|
|
316
332
|
}
|
|
317
333
|
>;
|
|
318
334
|
|
|
@@ -367,7 +383,14 @@ export const ContractArtifactSchema = zodFor<ContractArtifact>()(
|
|
|
367
383
|
globals: z.record(z.array(AbiValueSchema)),
|
|
368
384
|
}),
|
|
369
385
|
storageLayout: z.record(z.object({ slot: schemas.Fr })),
|
|
370
|
-
fileMap: z.record(
|
|
386
|
+
fileMap: z.record(
|
|
387
|
+
z.coerce.number(),
|
|
388
|
+
z.object({
|
|
389
|
+
source: z.string(),
|
|
390
|
+
path: z.string(),
|
|
391
|
+
function_locations: z.array(z.object({ start: z.number(), name: z.string() })),
|
|
392
|
+
}),
|
|
393
|
+
),
|
|
371
394
|
}),
|
|
372
395
|
);
|
|
373
396
|
|
package/src/abi/buffer.ts
CHANGED
|
@@ -26,11 +26,32 @@ export function bufferAsFields(input: Buffer, targetLength: number): Fr[] {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
|
-
* Recovers a buffer from an array of fields.
|
|
30
|
-
*
|
|
31
|
-
*
|
|
29
|
+
* Recovers a buffer from an array of fields previously encoded with bufferAsFields.
|
|
30
|
+
*
|
|
31
|
+
* The first field encodes the byte length of the original buffer. The remaining fields
|
|
32
|
+
* each carry 31 bytes of payload (the leading byte of each 32-byte field element is skipped).
|
|
33
|
+
*
|
|
34
|
+
* If the declared byte length exceeds the bytes available from the payload fields, the result
|
|
35
|
+
* is zero-padded to the full declared length. This is important for correctness when the field
|
|
36
|
+
* array has been truncated (e.g. contract class logs reconstructed from blobs using a short
|
|
37
|
+
* emittedLength): without padding, the resulting buffer would be shorter than declared, causing
|
|
38
|
+
* bytecode commitment computations to diverge from what the circuit produced.
|
|
39
|
+
*
|
|
40
|
+
* @param fields - An output from bufferAsFields: [byteLength, ...payloadFields].
|
|
41
|
+
* @returns A buffer of exactly `byteLength` bytes.
|
|
32
42
|
*/
|
|
33
43
|
export function bufferFromFields(fields: Fr[]): Buffer {
|
|
34
44
|
const [length, ...payload] = fields;
|
|
35
|
-
|
|
45
|
+
const byteLength = length.toNumber();
|
|
46
|
+
const raw = Buffer.concat(payload.map(f => f.toBuffer().subarray(1)));
|
|
47
|
+
if (raw.length >= byteLength) {
|
|
48
|
+
return raw.subarray(0, byteLength);
|
|
49
|
+
}
|
|
50
|
+
// Pad with zeros if the declared length exceeds the available payload bytes.
|
|
51
|
+
// This ensures the returned buffer always matches the declared length, so that
|
|
52
|
+
// downstream bytecode commitment computations are consistent even when the
|
|
53
|
+
// source field array was truncated (e.g. reconstructed from blob with a short emittedLength).
|
|
54
|
+
const result = Buffer.alloc(byteLength);
|
|
55
|
+
raw.copy(result);
|
|
56
|
+
return result;
|
|
36
57
|
}
|
package/src/abi/decoder.ts
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
3
|
|
|
3
4
|
import { AztecAddress } from '../aztec-address/index.js';
|
|
4
|
-
import type {
|
|
5
|
-
import {
|
|
5
|
+
import type { AbiType } from './abi.js';
|
|
6
|
+
import { FunctionSelector } from './function_selector.js';
|
|
7
|
+
import {
|
|
8
|
+
isAztecAddressStruct,
|
|
9
|
+
isEthAddressStruct,
|
|
10
|
+
isFunctionSelectorStruct,
|
|
11
|
+
isOptionStruct,
|
|
12
|
+
isWrappedFieldStruct,
|
|
13
|
+
parseSignedInt,
|
|
14
|
+
} from './utils.js';
|
|
6
15
|
|
|
7
16
|
/**
|
|
8
17
|
* The type of our decoded ABI.
|
|
@@ -12,6 +21,9 @@ export type AbiDecoded =
|
|
|
12
21
|
| boolean
|
|
13
22
|
| string
|
|
14
23
|
| AztecAddress
|
|
24
|
+
| EthAddress
|
|
25
|
+
| FunctionSelector
|
|
26
|
+
| Fr
|
|
15
27
|
| AbiDecoded[]
|
|
16
28
|
| { [key: string]: AbiDecoded }
|
|
17
29
|
| undefined;
|
|
@@ -58,6 +70,15 @@ class AbiDecoder {
|
|
|
58
70
|
if (isAztecAddressStruct(abiType)) {
|
|
59
71
|
return new AztecAddress(this.getNextField().toBuffer());
|
|
60
72
|
}
|
|
73
|
+
if (isEthAddressStruct(abiType)) {
|
|
74
|
+
return EthAddress.fromField(this.getNextField());
|
|
75
|
+
}
|
|
76
|
+
if (isFunctionSelectorStruct(abiType)) {
|
|
77
|
+
return FunctionSelector.fromField(this.getNextField());
|
|
78
|
+
}
|
|
79
|
+
if (isWrappedFieldStruct(abiType)) {
|
|
80
|
+
return this.getNextField();
|
|
81
|
+
}
|
|
61
82
|
if (isOptionStruct(abiType)) {
|
|
62
83
|
const isSome = this.decodeNext(abiType.fields[0].type);
|
|
63
84
|
const value = this.decodeNext(abiType.fields[1].type);
|
|
@@ -123,79 +144,3 @@ class AbiDecoder {
|
|
|
123
144
|
export function decodeFromAbi(typ: AbiType[], buffer: Fr[]) {
|
|
124
145
|
return new AbiDecoder(typ, buffer.slice()).decode();
|
|
125
146
|
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Decodes the signature of a function from the name and parameters.
|
|
129
|
-
*/
|
|
130
|
-
export class FunctionSignatureDecoder {
|
|
131
|
-
private separator: string;
|
|
132
|
-
constructor(
|
|
133
|
-
private name: string,
|
|
134
|
-
private parameters: ABIParameter[],
|
|
135
|
-
private includeNames = false,
|
|
136
|
-
) {
|
|
137
|
-
this.separator = includeNames ? ', ' : ',';
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Decodes a single function parameter type for the function signature.
|
|
142
|
-
* @param param - The parameter type to decode.
|
|
143
|
-
* @returns A string representing the parameter type.
|
|
144
|
-
*/
|
|
145
|
-
private getParameterType(param: AbiType): string {
|
|
146
|
-
switch (param.kind) {
|
|
147
|
-
case 'field':
|
|
148
|
-
return 'Field';
|
|
149
|
-
case 'integer':
|
|
150
|
-
return param.sign === 'signed' ? `i${param.width}` : `u${param.width}`;
|
|
151
|
-
case 'boolean':
|
|
152
|
-
return 'bool';
|
|
153
|
-
case 'array':
|
|
154
|
-
return `[${this.getParameterType(param.type)};${param.length}]`;
|
|
155
|
-
case 'string':
|
|
156
|
-
return `str<${param.length}>`;
|
|
157
|
-
case 'struct':
|
|
158
|
-
return `(${param.fields.map(field => `${this.decodeParameter(field)}`).join(this.separator)})`;
|
|
159
|
-
default:
|
|
160
|
-
throw new Error(`Unsupported type: ${param.kind}`);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Decodes a single function parameter for the function signature.
|
|
166
|
-
* @param param - The parameter to decode.
|
|
167
|
-
* @returns A string representing the parameter type and optionally its name.
|
|
168
|
-
*/
|
|
169
|
-
private decodeParameter(param: ABIVariable): string {
|
|
170
|
-
const type = this.getParameterType(param.type);
|
|
171
|
-
return this.includeNames ? `${param.name}: ${type}` : type;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Decodes all the parameters and build the function signature
|
|
176
|
-
* @returns The function signature.
|
|
177
|
-
*/
|
|
178
|
-
public decode(): string {
|
|
179
|
-
return `${this.name}(${this.parameters.map(param => this.decodeParameter(param)).join(this.separator)})`;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* Decodes a function signature from the name and parameters.
|
|
185
|
-
* @param name - The name of the function.
|
|
186
|
-
* @param parameters - The parameters of the function.
|
|
187
|
-
* @returns - The function signature.
|
|
188
|
-
*/
|
|
189
|
-
export function decodeFunctionSignature(name: string, parameters: ABIParameter[]) {
|
|
190
|
-
return new FunctionSignatureDecoder(name, parameters).decode();
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* Decodes a function signature from the name and parameters including parameter names.
|
|
195
|
-
* @param name - The name of the function.
|
|
196
|
-
* @param parameters - The parameters of the function.
|
|
197
|
-
* @returns - The user-friendly function signature.
|
|
198
|
-
*/
|
|
199
|
-
export function decodeFunctionSignatureWithParameterNames(name: string, parameters: ABIParameter[]) {
|
|
200
|
-
return new FunctionSignatureDecoder(name, parameters, true).decode();
|
|
201
|
-
}
|
|
@@ -6,7 +6,7 @@ import { type ZodFor, hexSchemaFor } from '@aztec/foundation/schemas';
|
|
|
6
6
|
import { BufferReader, FieldReader, TypeRegistry } from '@aztec/foundation/serialize';
|
|
7
7
|
|
|
8
8
|
import type { ABIParameter } from './abi.js';
|
|
9
|
-
import { decodeFunctionSignature } from './
|
|
9
|
+
import { decodeFunctionSignature } from './function_signature_decoder.js';
|
|
10
10
|
import { Selector } from './selector.js';
|
|
11
11
|
|
|
12
12
|
/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { ABIParameter, ABIVariable, AbiType } from './abi.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Decodes the signature of a function from the name and parameters.
|
|
5
|
+
*/
|
|
6
|
+
export class FunctionSignatureDecoder {
|
|
7
|
+
private separator: string;
|
|
8
|
+
constructor(
|
|
9
|
+
private name: string,
|
|
10
|
+
private parameters: ABIParameter[],
|
|
11
|
+
private includeNames = false,
|
|
12
|
+
) {
|
|
13
|
+
this.separator = includeNames ? ', ' : ',';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Decodes a single function parameter type for the function signature.
|
|
18
|
+
* @param param - The parameter type to decode.
|
|
19
|
+
* @returns A string representing the parameter type.
|
|
20
|
+
*/
|
|
21
|
+
private getParameterType(param: AbiType): string {
|
|
22
|
+
switch (param.kind) {
|
|
23
|
+
case 'field':
|
|
24
|
+
return 'Field';
|
|
25
|
+
case 'integer':
|
|
26
|
+
return param.sign === 'signed' ? `i${param.width}` : `u${param.width}`;
|
|
27
|
+
case 'boolean':
|
|
28
|
+
return 'bool';
|
|
29
|
+
case 'array':
|
|
30
|
+
return `[${this.getParameterType(param.type)};${param.length}]`;
|
|
31
|
+
case 'string':
|
|
32
|
+
return `str<${param.length}>`;
|
|
33
|
+
case 'struct':
|
|
34
|
+
return `(${param.fields.map(field => `${this.decodeParameter(field)}`).join(this.separator)})`;
|
|
35
|
+
default:
|
|
36
|
+
throw new Error(`Unsupported type: ${param.kind}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Decodes a single function parameter for the function signature.
|
|
42
|
+
* @param param - The parameter to decode.
|
|
43
|
+
* @returns A string representing the parameter type and optionally its name.
|
|
44
|
+
*/
|
|
45
|
+
private decodeParameter(param: ABIVariable): string {
|
|
46
|
+
const type = this.getParameterType(param.type);
|
|
47
|
+
return this.includeNames ? `${param.name}: ${type}` : type;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Decodes all the parameters and build the function signature
|
|
52
|
+
* @returns The function signature.
|
|
53
|
+
*/
|
|
54
|
+
public decode(): string {
|
|
55
|
+
return `${this.name}(${this.parameters.map(param => this.decodeParameter(param)).join(this.separator)})`;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Decodes a function signature from the name and parameters.
|
|
61
|
+
* @param name - The name of the function.
|
|
62
|
+
* @param parameters - The parameters of the function.
|
|
63
|
+
* @returns - The function signature.
|
|
64
|
+
*/
|
|
65
|
+
export function decodeFunctionSignature(name: string, parameters: ABIParameter[]) {
|
|
66
|
+
return new FunctionSignatureDecoder(name, parameters).decode();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Decodes a function signature from the name and parameters including parameter names.
|
|
71
|
+
* @param name - The name of the function.
|
|
72
|
+
* @param parameters - The parameters of the function.
|
|
73
|
+
* @returns - The user-friendly function signature.
|
|
74
|
+
*/
|
|
75
|
+
export function decodeFunctionSignatureWithParameterNames(name: string, parameters: ABIParameter[]) {
|
|
76
|
+
return new FunctionSignatureDecoder(name, parameters, true).decode();
|
|
77
|
+
}
|
package/src/abi/index.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './abi.js';
|
|
2
2
|
export * from './buffer.js';
|
|
3
3
|
export * from './decoder.js';
|
|
4
|
+
export * from './function_signature_decoder.js';
|
|
4
5
|
export * from './encoder.js';
|
|
5
6
|
export * from './authorization_selector.js';
|
|
6
7
|
export * from './event_metadata_definition.js';
|
|
@@ -13,7 +13,7 @@ import type { TypedEventEmitter } from '@aztec/foundation/types';
|
|
|
13
13
|
import { z } from 'zod';
|
|
14
14
|
|
|
15
15
|
import type { Checkpoint } from '../checkpoint/checkpoint.js';
|
|
16
|
-
import type { CheckpointData } from '../checkpoint/checkpoint_data.js';
|
|
16
|
+
import type { CheckpointData, CommonCheckpointData, ProposedCheckpointData } from '../checkpoint/checkpoint_data.js';
|
|
17
17
|
import type { PublishedCheckpoint } from '../checkpoint/published_checkpoint.js';
|
|
18
18
|
import type { L1RollupConstants } from '../epoch-helpers/index.js';
|
|
19
19
|
import { CheckpointHeader } from '../rollup/checkpoint_header.js';
|
|
@@ -68,9 +68,8 @@ export interface L2BlockSource {
|
|
|
68
68
|
getCheckpointedL2BlockNumber(): Promise<BlockNumber>;
|
|
69
69
|
|
|
70
70
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
* TODO(#13569): Compute proper finalized block number based on L1 finalized block.
|
|
71
|
+
* Returns the finalized L2 block number. A block is finalized when it was proven
|
|
72
|
+
* in an L1 block that has itself been finalized on Ethereum.
|
|
74
73
|
* @returns The finalized block number.
|
|
75
74
|
*/
|
|
76
75
|
getFinalizedL2BlockNumber(): Promise<BlockNumber>;
|
|
@@ -176,14 +175,18 @@ export interface L2BlockSource {
|
|
|
176
175
|
getSettledTxReceipt(txHash: TxHash): Promise<TxReceipt | undefined>;
|
|
177
176
|
|
|
178
177
|
/**
|
|
179
|
-
* Returns the
|
|
178
|
+
* Returns the last L2 slot number for which we have all L1 data needed to build the next checkpoint.
|
|
179
|
+
* Determined by the max of two signals: L1 block sync progress and latest synced checkpoint slot.
|
|
180
|
+
* The checkpoint signal handles missed L1 blocks, since a published checkpoint seals the message tree
|
|
181
|
+
* for the next checkpoint via the inbox LAG mechanism.
|
|
180
182
|
*/
|
|
181
|
-
|
|
183
|
+
getSyncedL2SlotNumber(): Promise<SlotNumber | undefined>;
|
|
182
184
|
|
|
183
185
|
/**
|
|
184
|
-
* Returns the
|
|
186
|
+
* Returns the last L2 epoch number that has been fully synchronized from L1.
|
|
187
|
+
* An epoch is fully synced when all its L2 slots have been fully synced.
|
|
185
188
|
*/
|
|
186
|
-
|
|
189
|
+
getSyncedL2EpochNumber(): Promise<EpochNumber | undefined>;
|
|
187
190
|
|
|
188
191
|
/**
|
|
189
192
|
* Returns all checkpointed block headers for a given epoch.
|
|
@@ -226,6 +229,12 @@ export interface L2BlockSource {
|
|
|
226
229
|
*/
|
|
227
230
|
getPendingChainValidationStatus(): Promise<ValidateCheckpointResult>;
|
|
228
231
|
|
|
232
|
+
/** Returns the checkpoint at the proposed chain tip. */
|
|
233
|
+
getProposedCheckpoint(): Promise<CommonCheckpointData | undefined>;
|
|
234
|
+
|
|
235
|
+
/** Returns proposed checkpoint, if set, undefined if not*/
|
|
236
|
+
getProposedCheckpointOnly(): Promise<ProposedCheckpointData | undefined>;
|
|
237
|
+
|
|
229
238
|
/** Force a sync. */
|
|
230
239
|
syncImmediate(): Promise<void>;
|
|
231
240
|
|
|
@@ -309,12 +318,13 @@ export interface L2BlockSourceEventEmitter extends L2BlockSource {
|
|
|
309
318
|
* - proven: Proven block on L1.
|
|
310
319
|
* - finalized: Proven block on a finalized L1 block (not implemented, set to proven for now).
|
|
311
320
|
*/
|
|
312
|
-
export type L2BlockTag = 'proposed' | 'checkpointed' | 'proven' | 'finalized';
|
|
321
|
+
export type L2BlockTag = 'proposed' | 'proposedCheckpoint' | 'checkpointed' | 'proven' | 'finalized';
|
|
313
322
|
|
|
314
323
|
/** Tips of the L2 chain. */
|
|
315
324
|
export type L2Tips = {
|
|
316
325
|
proposed: L2BlockId;
|
|
317
326
|
checkpointed: L2TipId;
|
|
327
|
+
proposedCheckpoint: L2TipId;
|
|
318
328
|
proven: L2TipId;
|
|
319
329
|
finalized: L2TipId;
|
|
320
330
|
};
|
|
@@ -359,6 +369,7 @@ const L2TipIdSchema = z.object({
|
|
|
359
369
|
export const L2TipsSchema = z.object({
|
|
360
370
|
proposed: L2BlockIdSchema,
|
|
361
371
|
checkpointed: L2TipIdSchema,
|
|
372
|
+
proposedCheckpoint: L2TipIdSchema,
|
|
362
373
|
proven: L2TipIdSchema,
|
|
363
374
|
finalized: L2TipIdSchema,
|
|
364
375
|
});
|
|
@@ -66,24 +66,29 @@ export abstract class L2TipsStoreBase implements L2BlockStreamEventHandler, L2Bl
|
|
|
66
66
|
|
|
67
67
|
public getL2Tips(): Promise<L2Tips> {
|
|
68
68
|
return this.runInTransaction(async () => {
|
|
69
|
-
const [proposedBlockId, finalizedBlockId, provenBlockId, checkpointedBlockId] =
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
69
|
+
const [proposedBlockId, finalizedBlockId, provenBlockId, checkpointedBlockId, proposedCheckpointBlockId] =
|
|
70
|
+
await Promise.all([
|
|
71
|
+
this.getBlockId('proposed'),
|
|
72
|
+
this.getBlockId('finalized'),
|
|
73
|
+
this.getBlockId('proven'),
|
|
74
|
+
this.getBlockId('checkpointed'),
|
|
75
|
+
this.getBlockId('proposedCheckpoint'),
|
|
76
|
+
]);
|
|
77
|
+
|
|
78
|
+
const [finalizedCheckpointId, provenCheckpointId, checkpointedCheckpointId, proposedCheckpointId] =
|
|
79
|
+
await Promise.all([
|
|
80
|
+
this.getCheckpointId('finalized'),
|
|
81
|
+
this.getCheckpointId('proven'),
|
|
82
|
+
this.getCheckpointId('checkpointed'),
|
|
83
|
+
this.getCheckpointId('proposedCheckpoint'),
|
|
84
|
+
]);
|
|
81
85
|
|
|
82
86
|
return {
|
|
83
87
|
proposed: proposedBlockId,
|
|
84
88
|
finalized: { block: finalizedBlockId, checkpoint: finalizedCheckpointId },
|
|
85
89
|
proven: { block: provenBlockId, checkpoint: provenCheckpointId },
|
|
86
90
|
checkpointed: { block: checkpointedBlockId, checkpoint: checkpointedCheckpointId },
|
|
91
|
+
proposedCheckpoint: { block: proposedCheckpointBlockId, checkpoint: proposedCheckpointId },
|
|
87
92
|
};
|
|
88
93
|
});
|
|
89
94
|
}
|
|
@@ -164,6 +169,12 @@ export abstract class L2TipsStoreBase implements L2BlockStreamEventHandler, L2Bl
|
|
|
164
169
|
await this.runInTransaction(async () => {
|
|
165
170
|
await this.saveTag('checkpointed', event.block);
|
|
166
171
|
await this.saveCheckpoint(event.checkpoint);
|
|
172
|
+
// proposedCheckpoint is always >= checkpointed. If checkpointed has caught up
|
|
173
|
+
// or surpassed it, advance proposedCheckpoint to match.
|
|
174
|
+
const proposedCheckpointBlock = await this.getBlockId('proposedCheckpoint');
|
|
175
|
+
if (event.block.number > proposedCheckpointBlock.number) {
|
|
176
|
+
await this.saveTag('proposedCheckpoint', event.block);
|
|
177
|
+
}
|
|
167
178
|
});
|
|
168
179
|
}
|
|
169
180
|
|
|
@@ -174,6 +185,7 @@ export abstract class L2TipsStoreBase implements L2BlockStreamEventHandler, L2Bl
|
|
|
174
185
|
await this.runInTransaction(async () => {
|
|
175
186
|
await this.saveTag('proposed', event.block);
|
|
176
187
|
await this.saveTag('checkpointed', event.block);
|
|
188
|
+
await this.saveTag('proposedCheckpoint', event.block);
|
|
177
189
|
const storeProven = await this.getBlockId('proven');
|
|
178
190
|
if (storeProven.number > event.block.number) {
|
|
179
191
|
await this.saveTag('proven', event.block);
|
|
@@ -67,11 +67,18 @@ export function testL2TipsStore(makeTipsStore: () => Promise<L2TipsStore>) {
|
|
|
67
67
|
checkpoint: makeCheckpointIdForBlock(blockNumber),
|
|
68
68
|
});
|
|
69
69
|
|
|
70
|
-
const makeTips = (
|
|
70
|
+
const makeTips = (
|
|
71
|
+
proposed: number,
|
|
72
|
+
proven: number,
|
|
73
|
+
finalized: number,
|
|
74
|
+
checkpointed: number = 0,
|
|
75
|
+
proposedCheckpoint: number = 0,
|
|
76
|
+
) => ({
|
|
71
77
|
proposed: makeTip(proposed),
|
|
72
78
|
proven: makeTipId(proven),
|
|
73
79
|
finalized: makeTipId(finalized),
|
|
74
80
|
checkpointed: makeTipId(checkpointed),
|
|
81
|
+
proposedCheckpoint: makeTipId(proposedCheckpoint),
|
|
75
82
|
});
|
|
76
83
|
|
|
77
84
|
const makeCheckpoint = async (checkpointNumber: number, blocks: L2Block[]): Promise<PublishedCheckpoint> => {
|
|
@@ -100,7 +100,16 @@ export class Checkpoint {
|
|
|
100
100
|
* checkpoints up to and including this one in the epoch.
|
|
101
101
|
*/
|
|
102
102
|
public getCheckpointOutHash(): Fr {
|
|
103
|
-
|
|
103
|
+
return Checkpoint.getCheckpointOutHash(this.blocks);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Returns the out hash computed from all l2-to-l1 messages in this checkpoint.
|
|
108
|
+
* Note: This value is different from the out hash in the header, which is the **accumulated** out hash over all
|
|
109
|
+
* checkpoints up to and including this one in the epoch.
|
|
110
|
+
*/
|
|
111
|
+
static getCheckpointOutHash(blocks: L2Block[]): Fr {
|
|
112
|
+
const msgs = blocks.map(block => block.body.txEffects.map(txEffect => txEffect.l2ToL1Msgs));
|
|
104
113
|
return computeCheckpointOutHash(msgs);
|
|
105
114
|
}
|
|
106
115
|
|
|
@@ -165,6 +174,7 @@ export class Checkpoint {
|
|
|
165
174
|
let lastArchive = previousArchive;
|
|
166
175
|
for (let i = 0; i < numBlocks; i++) {
|
|
167
176
|
const block = await L2Block.random(BlockNumber(startBlockNumber + i), {
|
|
177
|
+
checkpointNumber,
|
|
168
178
|
indexWithinCheckpoint: IndexWithinCheckpoint(i),
|
|
169
179
|
...options,
|
|
170
180
|
...(lastArchive ? { lastArchive } : {}),
|
|
@@ -14,18 +14,54 @@ import { CheckpointHeader } from '../rollup/checkpoint_header.js';
|
|
|
14
14
|
import { AppendOnlyTreeSnapshot } from '../trees/append_only_tree_snapshot.js';
|
|
15
15
|
import { L1PublishedData } from './published_checkpoint.js';
|
|
16
16
|
|
|
17
|
-
/**
|
|
18
|
-
export type
|
|
17
|
+
/** Base type for checkpoint data */
|
|
18
|
+
export type CommonCheckpointData = {
|
|
19
19
|
checkpointNumber: CheckpointNumber;
|
|
20
20
|
header: CheckpointHeader;
|
|
21
|
-
archive: AppendOnlyTreeSnapshot;
|
|
22
|
-
checkpointOutHash: Fr;
|
|
23
21
|
startBlock: BlockNumber;
|
|
24
22
|
blockCount: number;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/** Data stored with checkpoint data after publishing on l1 */
|
|
26
|
+
export type L1EnrichedCheckpointData = {
|
|
25
27
|
attestations: CommitteeAttestation[];
|
|
26
28
|
l1: L1PublishedData;
|
|
27
29
|
};
|
|
28
30
|
|
|
31
|
+
/** Data stored alongside checkpoint data in storage */
|
|
32
|
+
export type StorageEnrichedCheckpointData = {
|
|
33
|
+
archive: AppendOnlyTreeSnapshot;
|
|
34
|
+
checkpointOutHash: Fr;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/** Data stored only with proposed checkpoint data */
|
|
38
|
+
export type ProposedOnlyCheckpointData = {
|
|
39
|
+
totalManaUsed: bigint;
|
|
40
|
+
feeAssetPriceModifier: bigint;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/** Lightweight checkpoint metadata without full block data. */
|
|
44
|
+
export type CheckpointData = CommonCheckpointData & StorageEnrichedCheckpointData & L1EnrichedCheckpointData;
|
|
45
|
+
|
|
46
|
+
/** Input for setting a proposed checkpoint. The archive and checkpointOutHash are computed
|
|
47
|
+
* internally by the block store from the stored blocks. */
|
|
48
|
+
export type ProposedCheckpointInput = CommonCheckpointData & ProposedOnlyCheckpointData;
|
|
49
|
+
|
|
50
|
+
/** Full data for a proposed checkpoint (proposed but not yet L1-confirmed).
|
|
51
|
+
* Includes fee-relevant fields used during pipelining to compute the fee header override. */
|
|
52
|
+
export type ProposedCheckpointData = ProposedCheckpointInput & StorageEnrichedCheckpointData;
|
|
53
|
+
|
|
54
|
+
export const ProposedCheckpointDataSchema = z.object({
|
|
55
|
+
checkpointNumber: CheckpointNumberSchema,
|
|
56
|
+
header: CheckpointHeader.schema,
|
|
57
|
+
archive: AppendOnlyTreeSnapshot.schema,
|
|
58
|
+
checkpointOutHash: schemas.Fr,
|
|
59
|
+
startBlock: BlockNumberSchema,
|
|
60
|
+
blockCount: z.number(),
|
|
61
|
+
totalManaUsed: schemas.BigInt,
|
|
62
|
+
feeAssetPriceModifier: schemas.BigInt,
|
|
63
|
+
});
|
|
64
|
+
|
|
29
65
|
export const CheckpointDataSchema = z
|
|
30
66
|
.object({
|
|
31
67
|
checkpointNumber: CheckpointNumberSchema,
|
|
@@ -36,7 +36,7 @@ export function validateCheckpoint(
|
|
|
36
36
|
): void {
|
|
37
37
|
validateCheckpointStructure(checkpoint);
|
|
38
38
|
validateCheckpointLimits(checkpoint, opts);
|
|
39
|
-
|
|
39
|
+
validateCheckpointBlocksLimits(checkpoint, opts);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
/**
|
|
@@ -125,7 +125,7 @@ export function validateCheckpointStructure(checkpoint: Checkpoint): void {
|
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
/** Validates checkpoint blocks gas limits */
|
|
128
|
-
function
|
|
128
|
+
function validateCheckpointBlocksLimits(
|
|
129
129
|
checkpoint: Checkpoint,
|
|
130
130
|
opts: {
|
|
131
131
|
maxL2BlockGas?: number;
|