@layerzerolabs/protocol-starknet-v2 0.0.34
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/.turbo/turbo-build.log +186 -0
- package/.turbo/turbo-lint.log +71 -0
- package/.turbo/turbo-test.log +937 -0
- package/README.md +41 -0
- package/Scarb.lock +211 -0
- package/Scarb.toml +2 -0
- package/dist/4XD3ZRZ4.cjs +301 -0
- package/dist/4XD3ZRZ4.cjs.map +1 -0
- package/dist/4Z5IPBC3.js +299 -0
- package/dist/4Z5IPBC3.js.map +1 -0
- package/dist/5NEZDLVQ.cjs +474 -0
- package/dist/5NEZDLVQ.cjs.map +1 -0
- package/dist/6JYCOKDE.js +472 -0
- package/dist/6JYCOKDE.js.map +1 -0
- package/dist/7C4PFMIZ.cjs +1288 -0
- package/dist/7C4PFMIZ.cjs.map +1 -0
- package/dist/7ZSGGZUE.js +1229 -0
- package/dist/7ZSGGZUE.js.map +1 -0
- package/dist/ARHOGUYH.cjs +2136 -0
- package/dist/ARHOGUYH.cjs.map +1 -0
- package/dist/CRCRIUFX.js +1264 -0
- package/dist/CRCRIUFX.js.map +1 -0
- package/dist/DB7CQSED.cjs +430 -0
- package/dist/DB7CQSED.cjs.map +1 -0
- package/dist/DFXLWHYP.cjs +1266 -0
- package/dist/DFXLWHYP.cjs.map +1 -0
- package/dist/EOLZCMCK.js +988 -0
- package/dist/EOLZCMCK.js.map +1 -0
- package/dist/FFDPTOWG.cjs +331 -0
- package/dist/FFDPTOWG.cjs.map +1 -0
- package/dist/FOJGEAIO.js +2134 -0
- package/dist/FOJGEAIO.js.map +1 -0
- package/dist/IWIUMVGB.js +629 -0
- package/dist/IWIUMVGB.js.map +1 -0
- package/dist/MUEN6AWV.cjs +697 -0
- package/dist/MUEN6AWV.cjs.map +1 -0
- package/dist/ORE6VBZ4.cjs +990 -0
- package/dist/ORE6VBZ4.cjs.map +1 -0
- package/dist/OUFKWPZ7.js +732 -0
- package/dist/OUFKWPZ7.js.map +1 -0
- package/dist/T2QTYQXJ.js +1229 -0
- package/dist/T2QTYQXJ.js.map +1 -0
- package/dist/UPJTM7BR.cjs +631 -0
- package/dist/UPJTM7BR.cjs.map +1 -0
- package/dist/VNVNX2P3.cjs +1231 -0
- package/dist/VNVNX2P3.cjs.map +1 -0
- package/dist/VUOMXK5T.js +6 -0
- package/dist/VUOMXK5T.js.map +1 -0
- package/dist/WISWRTDG.js +1286 -0
- package/dist/WISWRTDG.js.map +1 -0
- package/dist/WU5L7YIQ.cjs +1231 -0
- package/dist/WU5L7YIQ.cjs.map +1 -0
- package/dist/X3B5JDMZ.js +695 -0
- package/dist/X3B5JDMZ.js.map +1 -0
- package/dist/XYNBDBBV.cjs +297 -0
- package/dist/XYNBDBBV.cjs.map +1 -0
- package/dist/Y5JFPCYJ.cjs +734 -0
- package/dist/Y5JFPCYJ.cjs.map +1 -0
- package/dist/YEHL7IYO.js +295 -0
- package/dist/YEHL7IYO.js.map +1 -0
- package/dist/YJF4D23A.cjs +8 -0
- package/dist/YJF4D23A.cjs.map +1 -0
- package/dist/YTS44OEA.js +428 -0
- package/dist/YTS44OEA.js.map +1 -0
- package/dist/Z2NIUZMW.js +329 -0
- package/dist/Z2NIUZMW.js.map +1 -0
- package/dist/abis/blocked-message-lib.cjs +13 -0
- package/dist/abis/blocked-message-lib.cjs.map +1 -0
- package/dist/abis/blocked-message-lib.d.ts +338 -0
- package/dist/abis/blocked-message-lib.d.ts.map +1 -0
- package/dist/abis/blocked-message-lib.js +4 -0
- package/dist/abis/blocked-message-lib.js.map +1 -0
- package/dist/abis/dvn-fee-lib.cjs +13 -0
- package/dist/abis/dvn-fee-lib.cjs.map +1 -0
- package/dist/abis/dvn-fee-lib.d.ts +214 -0
- package/dist/abis/dvn-fee-lib.d.ts.map +1 -0
- package/dist/abis/dvn-fee-lib.js +4 -0
- package/dist/abis/dvn-fee-lib.js.map +1 -0
- package/dist/abis/dvn.cjs +13 -0
- package/dist/abis/dvn.cjs.map +1 -0
- package/dist/abis/dvn.d.ts +952 -0
- package/dist/abis/dvn.d.ts.map +1 -0
- package/dist/abis/dvn.js +4 -0
- package/dist/abis/dvn.js.map +1 -0
- package/dist/abis/endpoint-v2.cjs +13 -0
- package/dist/abis/endpoint-v2.cjs.map +1 -0
- package/dist/abis/endpoint-v2.d.ts +1580 -0
- package/dist/abis/endpoint-v2.d.ts.map +1 -0
- package/dist/abis/endpoint-v2.js +4 -0
- package/dist/abis/endpoint-v2.js.map +1 -0
- package/dist/abis/executor-fee-lib.cjs +13 -0
- package/dist/abis/executor-fee-lib.cjs.map +1 -0
- package/dist/abis/executor-fee-lib.d.ts +217 -0
- package/dist/abis/executor-fee-lib.d.ts.map +1 -0
- package/dist/abis/executor-fee-lib.js +4 -0
- package/dist/abis/executor-fee-lib.js.map +1 -0
- package/dist/abis/executor.cjs +13 -0
- package/dist/abis/executor.cjs.map +1 -0
- package/dist/abis/executor.d.ts +914 -0
- package/dist/abis/executor.d.ts.map +1 -0
- package/dist/abis/executor.js +4 -0
- package/dist/abis/executor.js.map +1 -0
- package/dist/abis/o-app.cjs +13 -0
- package/dist/abis/o-app.cjs.map +1 -0
- package/dist/abis/o-app.d.ts +311 -0
- package/dist/abis/o-app.d.ts.map +1 -0
- package/dist/abis/o-app.js +4 -0
- package/dist/abis/o-app.js.map +1 -0
- package/dist/abis/oft-adapter.cjs +13 -0
- package/dist/abis/oft-adapter.cjs.map +1 -0
- package/dist/abis/oft-adapter.d.ts +722 -0
- package/dist/abis/oft-adapter.d.ts.map +1 -0
- package/dist/abis/oft-adapter.js +4 -0
- package/dist/abis/oft-adapter.js.map +1 -0
- package/dist/abis/oft.cjs +13 -0
- package/dist/abis/oft.cjs.map +1 -0
- package/dist/abis/oft.d.ts +922 -0
- package/dist/abis/oft.d.ts.map +1 -0
- package/dist/abis/oft.js +4 -0
- package/dist/abis/oft.js.map +1 -0
- package/dist/abis/omni-counter.cjs +13 -0
- package/dist/abis/omni-counter.cjs.map +1 -0
- package/dist/abis/omni-counter.d.ts +459 -0
- package/dist/abis/omni-counter.d.ts.map +1 -0
- package/dist/abis/omni-counter.js +4 -0
- package/dist/abis/omni-counter.js.map +1 -0
- package/dist/abis/price-feed.cjs +13 -0
- package/dist/abis/price-feed.cjs.map +1 -0
- package/dist/abis/price-feed.d.ts +505 -0
- package/dist/abis/price-feed.d.ts.map +1 -0
- package/dist/abis/price-feed.js +4 -0
- package/dist/abis/price-feed.js.map +1 -0
- package/dist/abis/simple-message-lib.cjs +13 -0
- package/dist/abis/simple-message-lib.cjs.map +1 -0
- package/dist/abis/simple-message-lib.d.ts +535 -0
- package/dist/abis/simple-message-lib.d.ts.map +1 -0
- package/dist/abis/simple-message-lib.js +4 -0
- package/dist/abis/simple-message-lib.js.map +1 -0
- package/dist/abis/treasury.cjs +13 -0
- package/dist/abis/treasury.cjs.map +1 -0
- package/dist/abis/treasury.d.ts +240 -0
- package/dist/abis/treasury.d.ts.map +1 -0
- package/dist/abis/treasury.js +4 -0
- package/dist/abis/treasury.js.map +1 -0
- package/dist/abis/ultra-light-node.cjs +13 -0
- package/dist/abis/ultra-light-node.cjs.map +1 -0
- package/dist/abis/ultra-light-node.d.ts +900 -0
- package/dist/abis/ultra-light-node.d.ts.map +1 -0
- package/dist/abis/ultra-light-node.js +4 -0
- package/dist/abis/ultra-light-node.js.map +1 -0
- package/dist/index.cjs +78 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/scripts/build-abi.cjs +28 -0
- package/dist/scripts/build-abi.cjs.map +1 -0
- package/dist/scripts/build-abi.d.ts +2 -0
- package/dist/scripts/build-abi.d.ts.map +1 -0
- package/dist/scripts/build-abi.js +26 -0
- package/dist/scripts/build-abi.js.map +1 -0
- package/layerzero/README.md +244 -0
- package/layerzero/Scarb.lock +203 -0
- package/layerzero/Scarb.toml +30 -0
- package/layerzero/snfoundry.toml +11 -0
- package/layerzero/src/common/constants.cairo +26 -0
- package/layerzero/src/common/conversions.cairo +16 -0
- package/layerzero/src/common/guid.cairo +20 -0
- package/layerzero/src/common/packet_v1_codec.cairo +307 -0
- package/layerzero/src/common/structs/messaging.cairo +40 -0
- package/layerzero/src/common/structs/packet.cairo +31 -0
- package/layerzero/src/endpoint/constants.cairo +14 -0
- package/layerzero/src/endpoint/endpoint.cairo +688 -0
- package/layerzero/src/endpoint/errors.cairo +108 -0
- package/layerzero/src/endpoint/events.cairo +124 -0
- package/layerzero/src/endpoint/interfaces/endpoint.cairo +286 -0
- package/layerzero/src/endpoint/interfaces/layerzero_composer.cairo +62 -0
- package/layerzero/src/endpoint/interfaces/layerzero_receiver.cairo +63 -0
- package/layerzero/src/endpoint/message_lib_manager/errors.cairo +95 -0
- package/layerzero/src/endpoint/message_lib_manager/events.cairo +90 -0
- package/layerzero/src/endpoint/message_lib_manager/interface.cairo +449 -0
- package/layerzero/src/endpoint/message_lib_manager/message_lib_manager.cairo +720 -0
- package/layerzero/src/endpoint/message_lib_manager/structs.cairo +33 -0
- package/layerzero/src/endpoint/messaging_channel/errors.cairo +37 -0
- package/layerzero/src/endpoint/messaging_channel/events.cairo +58 -0
- package/layerzero/src/endpoint/messaging_channel/interface.cairo +171 -0
- package/layerzero/src/endpoint/messaging_channel/messaging_channel.cairo +453 -0
- package/layerzero/src/endpoint/messaging_composer/errors.cairo +46 -0
- package/layerzero/src/endpoint/messaging_composer/events.cairo +67 -0
- package/layerzero/src/endpoint/messaging_composer/interface.cairo +132 -0
- package/layerzero/src/endpoint/messaging_composer/messaging_composer.cairo +223 -0
- package/layerzero/src/lib.cairo +189 -0
- package/layerzero/src/message_lib/blocked_message_lib.cairo +114 -0
- package/layerzero/src/message_lib/interface.cairo +63 -0
- package/layerzero/src/message_lib/sml/errors.cairo +23 -0
- package/layerzero/src/message_lib/sml/events.cairo +32 -0
- package/layerzero/src/message_lib/sml/simple_message_lib.cairo +312 -0
- package/layerzero/src/message_lib/structs.cairo +22 -0
- package/layerzero/src/message_lib/uln/errors.cairo +128 -0
- package/layerzero/src/message_lib/uln/events.cairo +97 -0
- package/layerzero/src/message_lib/uln/interface.cairo +83 -0
- package/layerzero/src/message_lib/uln/options.cairo +64 -0
- package/layerzero/src/message_lib/uln/structs/executor_config.cairo +35 -0
- package/layerzero/src/message_lib/uln/structs/payment_info.cairo +7 -0
- package/layerzero/src/message_lib/uln/structs/uln_config.cairo +155 -0
- package/layerzero/src/message_lib/uln/structs/uln_config_storage_node.cairo +91 -0
- package/layerzero/src/message_lib/uln/structs/verification.cairo +7 -0
- package/layerzero/src/message_lib/uln/ultra_light_node.cairo +965 -0
- package/layerzero/src/oapps/common/oapp_options_type_3/errors.cairo +22 -0
- package/layerzero/src/oapps/common/oapp_options_type_3/events.cairo +6 -0
- package/layerzero/src/oapps/common/oapp_options_type_3/interface.cairo +34 -0
- package/layerzero/src/oapps/common/oapp_options_type_3/oapp_options_type_3.cairo +120 -0
- package/layerzero/src/oapps/common/oapp_options_type_3/structs.cairo +6 -0
- package/layerzero/src/oapps/counter/constants.cairo +3 -0
- package/layerzero/src/oapps/counter/counter.cairo +170 -0
- package/layerzero/src/oapps/counter/interface.cairo +27 -0
- package/layerzero/src/oapps/counter/structs.cairo +20 -0
- package/layerzero/src/oapps/message_inspector/interface.cairo +21 -0
- package/layerzero/src/oapps/oapp/errors.cairo +72 -0
- package/layerzero/src/oapps/oapp/events.cairo +9 -0
- package/layerzero/src/oapps/oapp/interface.cairo +67 -0
- package/layerzero/src/oapps/oapp/oapp.cairo +70 -0
- package/layerzero/src/oapps/oapp/oapp_core.cairo +448 -0
- package/layerzero/src/oapps/oft/errors.cairo +42 -0
- package/layerzero/src/oapps/oft/events.cairo +33 -0
- package/layerzero/src/oapps/oft/interface.cairo +87 -0
- package/layerzero/src/oapps/oft/oft.cairo +188 -0
- package/layerzero/src/oapps/oft/oft_adapter.cairo +175 -0
- package/layerzero/src/oapps/oft/oft_compose_msg_codec.cairo +128 -0
- package/layerzero/src/oapps/oft/oft_core.cairo +542 -0
- package/layerzero/src/oapps/oft/oft_msg_codec.cairo +131 -0
- package/layerzero/src/oapps/oft/structs.cairo +72 -0
- package/layerzero/src/treasury/errors.cairo +22 -0
- package/layerzero/src/treasury/events.cairo +5 -0
- package/layerzero/src/treasury/interfaces/layerzero_treasury.cairo +54 -0
- package/layerzero/src/treasury/interfaces/lz_token_fee_lib.cairo +45 -0
- package/layerzero/src/treasury/interfaces/treasury_admin.cairo +39 -0
- package/layerzero/src/treasury/treasury.cairo +140 -0
- package/layerzero/src/workers/access_control.cairo +11 -0
- package/layerzero/src/workers/base/base.cairo +238 -0
- package/layerzero/src/workers/base/errors.cairo +24 -0
- package/layerzero/src/workers/base/events.cairo +43 -0
- package/layerzero/src/workers/base/interface.cairo +93 -0
- package/layerzero/src/workers/base/structs.cairo +10 -0
- package/layerzero/src/workers/common.cairo +59 -0
- package/layerzero/src/workers/dvn/constants.cairo +11 -0
- package/layerzero/src/workers/dvn/dvn.cairo +338 -0
- package/layerzero/src/workers/dvn/errors.cairo +80 -0
- package/layerzero/src/workers/dvn/events.cairo +30 -0
- package/layerzero/src/workers/dvn/fee_lib/dvn_fee_lib.cairo +152 -0
- package/layerzero/src/workers/dvn/fee_lib/interface.cairo +45 -0
- package/layerzero/src/workers/dvn/interface.cairo +131 -0
- package/layerzero/src/workers/dvn/options.cairo +125 -0
- package/layerzero/src/workers/dvn/structs.cairo +51 -0
- package/layerzero/src/workers/executor/errors.cairo +159 -0
- package/layerzero/src/workers/executor/events.cairo +32 -0
- package/layerzero/src/workers/executor/executor.cairo +392 -0
- package/layerzero/src/workers/executor/fee_lib/executor_fee_lib.cairo +160 -0
- package/layerzero/src/workers/executor/fee_lib/interface.cairo +87 -0
- package/layerzero/src/workers/executor/interface.cairo +131 -0
- package/layerzero/src/workers/executor/options.cairo +244 -0
- package/layerzero/src/workers/executor/structs.cairo +119 -0
- package/layerzero/src/workers/interface.cairo +32 -0
- package/layerzero/src/workers/price_feed/constants.cairo +7 -0
- package/layerzero/src/workers/price_feed/errors.cairo +28 -0
- package/layerzero/src/workers/price_feed/events.cairo +13 -0
- package/layerzero/src/workers/price_feed/interface.cairo +264 -0
- package/layerzero/src/workers/price_feed/price_feed.cairo +392 -0
- package/layerzero/src/workers/price_feed/structs.cairo +74 -0
- package/layerzero/tests/common/test_constants.cairo +21 -0
- package/layerzero/tests/common/test_guid.cairo +232 -0
- package/layerzero/tests/common/test_packet_v1_codec.cairo +372 -0
- package/layerzero/tests/common/utils.cairo +23 -0
- package/layerzero/tests/e2e/oft_utils.cairo +121 -0
- package/layerzero/tests/e2e/test_counter_with_sml.cairo +194 -0
- package/layerzero/tests/e2e/test_counter_with_uln.cairo +352 -0
- package/layerzero/tests/e2e/test_dvn.cairo +406 -0
- package/layerzero/tests/e2e/test_lz_token.cairo +354 -0
- package/layerzero/tests/e2e/test_oft_compose_with_uln.cairo +364 -0
- package/layerzero/tests/e2e/test_oft_with_sml.cairo +240 -0
- package/layerzero/tests/e2e/test_oft_with_uln.cairo +299 -0
- package/layerzero/tests/e2e/utils.cairo +490 -0
- package/layerzero/tests/endpoint/message_lib_manager/test_message_lib_manager.cairo +2051 -0
- package/layerzero/tests/endpoint/message_lib_manager/utils.cairo +45 -0
- package/layerzero/tests/endpoint/messaging_channel/test_messaging_channel.cairo +621 -0
- package/layerzero/tests/endpoint/messaging_channel/utils.cairo +96 -0
- package/layerzero/tests/endpoint/messaging_composer/test_messaging_composer.cairo +456 -0
- package/layerzero/tests/endpoint/messaging_composer/utils.cairo +75 -0
- package/layerzero/tests/endpoint/test_endpoint_commit.cairo +763 -0
- package/layerzero/tests/endpoint/test_endpoint_lzreceive.cairo +1253 -0
- package/layerzero/tests/endpoint/test_endpoint_quote.cairo +71 -0
- package/layerzero/tests/endpoint/test_endpoint_send.cairo +1327 -0
- package/layerzero/tests/endpoint/utils.cairo +129 -0
- package/layerzero/tests/fuzzable/blockchain_config.cairo +89 -0
- package/layerzero/tests/fuzzable/bytes32.cairo +16 -0
- package/layerzero/tests/fuzzable/contract_address.cairo +67 -0
- package/layerzero/tests/fuzzable/dst_config.cairo +37 -0
- package/layerzero/tests/fuzzable/eid.cairo +23 -0
- package/layerzero/tests/fuzzable/eth_address.cairo +17 -0
- package/layerzero/tests/fuzzable/expiry.cairo +27 -0
- package/layerzero/tests/fuzzable/felt_array.cairo +38 -0
- package/layerzero/tests/fuzzable/inbound_params.cairo +21 -0
- package/layerzero/tests/fuzzable/keys.cairo +16 -0
- package/layerzero/tests/fuzzable/model_type.cairo +27 -0
- package/layerzero/tests/fuzzable/origin.cairo +21 -0
- package/layerzero/tests/fuzzable/price.cairo +32 -0
- package/layerzero/tests/fuzzable/role_admin.cairo +29 -0
- package/layerzero/tests/fuzzable/small_byte_array.cairo +61 -0
- package/layerzero/tests/lib.cairo +177 -0
- package/layerzero/tests/message_lib/sml/test_simple_message_lib.cairo +224 -0
- package/layerzero/tests/message_lib/uln/test_uln_admin.cairo +2150 -0
- package/layerzero/tests/message_lib/uln/test_uln_config.cairo +527 -0
- package/layerzero/tests/message_lib/uln/test_uln_config_storage_node.cairo +69 -0
- package/layerzero/tests/message_lib/uln/test_uln_executor_config.cairo +173 -0
- package/layerzero/tests/message_lib/uln/test_uln_options.cairo +329 -0
- package/layerzero/tests/message_lib/uln/test_uln_quote.cairo +1038 -0
- package/layerzero/tests/message_lib/uln/test_uln_receive.cairo +715 -0
- package/layerzero/tests/message_lib/uln/test_uln_send.cairo +1155 -0
- package/layerzero/tests/message_lib/uln/utils.cairo +59 -0
- package/layerzero/tests/mocks/composer_target.cairo +76 -0
- package/layerzero/tests/mocks/endpoint.cairo +199 -0
- package/layerzero/tests/mocks/erc20/erc20.cairo +50 -0
- package/layerzero/tests/mocks/erc20/interface.cairo +8 -0
- package/layerzero/tests/mocks/message_inspector/message_inspector.cairo +17 -0
- package/layerzero/tests/mocks/message_lib_manager.cairo +98 -0
- package/layerzero/tests/mocks/messaging_channel/interface.cairo +23 -0
- package/layerzero/tests/mocks/messaging_channel/messaging_channel.cairo +138 -0
- package/layerzero/tests/mocks/messaging_composer.cairo +171 -0
- package/layerzero/tests/mocks/oapp_core/interface.cairo +53 -0
- package/layerzero/tests/mocks/oapp_core/oapp_core.cairo +142 -0
- package/layerzero/tests/mocks/oapp_options_type3.cairo +42 -0
- package/layerzero/tests/mocks/oft_core/interface.cairo +28 -0
- package/layerzero/tests/mocks/oft_core/oft_core.cairo +242 -0
- package/layerzero/tests/mocks/receiver.cairo +54 -0
- package/layerzero/tests/mocks/treasury/lz_token_fee_lib.cairo +57 -0
- package/layerzero/tests/mocks/treasury/treasury.cairo +74 -0
- package/layerzero/tests/mocks/uln_config/interface.cairo +12 -0
- package/layerzero/tests/mocks/uln_config/uln_config.cairo +35 -0
- package/layerzero/tests/mocks/workers/base.cairo +80 -0
- package/layerzero/tests/mocks/workers/dvn.cairo +115 -0
- package/layerzero/tests/mocks/workers/executor/decode/decode.cairo +97 -0
- package/layerzero/tests/mocks/workers/executor/decode/interface.cairo +59 -0
- package/layerzero/tests/mocks/workers/executor/executor.cairo +176 -0
- package/layerzero/tests/oapps/common/test_oapp_options_type_3.cairo +279 -0
- package/layerzero/tests/oapps/oft/test_oft_adapter.cairo +441 -0
- package/layerzero/tests/oapps/oft/test_oft_compose_msg_codec.cairo +139 -0
- package/layerzero/tests/oapps/oft/test_oft_core.cairo +751 -0
- package/layerzero/tests/oapps/oft/test_oft_msg_codec.cairo +268 -0
- package/layerzero/tests/oapps/test_counter.cairo +470 -0
- package/layerzero/tests/oapps/test_oapp_core.cairo +750 -0
- package/layerzero/tests/treasury/test_lz_token_fee_lib.cairo +63 -0
- package/layerzero/tests/treasury/test_treasury.cairo +458 -0
- package/layerzero/tests/treasury/utils.cairo +8 -0
- package/layerzero/tests/utils.cairo +48 -0
- package/layerzero/tests/workers/base/test_worker_base.cairo +1097 -0
- package/layerzero/tests/workers/base/utils.cairo +76 -0
- package/layerzero/tests/workers/dvn/fee_lib/test_dvn_fee_lib.cairo +361 -0
- package/layerzero/tests/workers/dvn/test_dvn.cairo +1101 -0
- package/layerzero/tests/workers/dvn/test_dvn_options.cairo +312 -0
- package/layerzero/tests/workers/dvn/utils.cairo +236 -0
- package/layerzero/tests/workers/executor/fee_lib/test_executor_fee_lib.cairo +223 -0
- package/layerzero/tests/workers/executor/test_decode.cairo +612 -0
- package/layerzero/tests/workers/executor/test_executor.cairo +1472 -0
- package/layerzero/tests/workers/executor/utils.cairo +296 -0
- package/layerzero/tests/workers/price_feed/test_price_feed.cairo +879 -0
- package/layerzero/tests/workers/price_feed/utils.cairo +37 -0
- package/libs/enumerable_set/Scarb.lock +24 -0
- package/libs/enumerable_set/Scarb.toml +17 -0
- package/libs/enumerable_set/src/enumerable_set.cairo +118 -0
- package/libs/enumerable_set/src/lib.cairo +4 -0
- package/libs/enumerable_set/tests/lib.cairo +5 -0
- package/libs/enumerable_set/tests/mocks/mock_enumerable_set.cairo +61 -0
- package/libs/enumerable_set/tests/test_enumerable_set.cairo +379 -0
- package/libs/lz_utils/Scarb.lock +24 -0
- package/libs/lz_utils/Scarb.toml +17 -0
- package/libs/lz_utils/src/bytes.cairo +33 -0
- package/libs/lz_utils/src/error.cairo +12 -0
- package/libs/lz_utils/src/keccak.cairo +28 -0
- package/libs/lz_utils/src/lib.cairo +3 -0
- package/libs/multisig/Scarb.lock +172 -0
- package/libs/multisig/Scarb.toml +23 -0
- package/libs/multisig/src/errors.cairo +84 -0
- package/libs/multisig/src/events.cairo +13 -0
- package/libs/multisig/src/interface.cairo +73 -0
- package/libs/multisig/src/lib.cairo +7 -0
- package/libs/multisig/src/multisig.cairo +241 -0
- package/libs/multisig/tests/lib.cairo +4 -0
- package/libs/multisig/tests/mocks/mock_multisig.cairo +57 -0
- package/libs/multisig/tests/test_multisig.cairo +452 -0
- package/package.json +41 -0
- package/src/scripts/build-abi.ts +51 -0
- package/target/CACHEDIR.TAG +3 -0
- package/target/dev/.fingerprint/alexandria_bytes-5ea6u5t70d7qi/alexandria_bytes +1 -0
- package/target/dev/.fingerprint/alexandria_data_structures-0aue3g6q80gs0/alexandria_data_structures +1 -0
- package/target/dev/.fingerprint/alexandria_math-h2fi7jdq4isuu/alexandria_math +1 -0
- package/target/dev/.fingerprint/core-lq3u730l5p1ag/core +1 -0
- package/target/dev/.fingerprint/core-vf7fc6rvic5vi/core +1 -0
- package/target/dev/.fingerprint/enumerable_set-eaerkg8njl85o/enumerable_set +1 -0
- package/target/dev/.fingerprint/enumerable_set-r54oje7t06ku8/enumerable_set +1 -0
- package/target/dev/.fingerprint/layerzero-oqgdqsaddpi2k/layerzero +1 -0
- package/target/dev/.fingerprint/lz_utils-kfkkeueiqg0pa/lz_utils +1 -0
- package/target/dev/.fingerprint/lz_utils-u4v1os6e7gkng/lz_utils +1 -0
- package/target/dev/.fingerprint/multisig-0fjetugejecge/multisig +1 -0
- package/target/dev/.fingerprint/multisig-6j5kqs436hm54/multisig +1 -0
- package/target/dev/.fingerprint/openzeppelin-ei1id1hu088lo/openzeppelin +1 -0
- package/target/dev/.fingerprint/openzeppelin-j9d5nd1qhfnu6/openzeppelin +1 -0
- package/target/dev/.fingerprint/openzeppelin_access-3oa41aikpaek0/openzeppelin_access +1 -0
- package/target/dev/.fingerprint/openzeppelin_access-p5h849v8so76q/openzeppelin_access +1 -0
- package/target/dev/.fingerprint/openzeppelin_account-4qhv5fks84g9u/openzeppelin_account +1 -0
- package/target/dev/.fingerprint/openzeppelin_account-hgbm8ln9ah7rm/openzeppelin_account +1 -0
- package/target/dev/.fingerprint/openzeppelin_finance-n70q9al0cps8i/openzeppelin_finance +1 -0
- package/target/dev/.fingerprint/openzeppelin_finance-nnd4f8703t3ak/openzeppelin_finance +1 -0
- package/target/dev/.fingerprint/openzeppelin_governance-3gnk21ubp5lis/openzeppelin_governance +1 -0
- package/target/dev/.fingerprint/openzeppelin_governance-rj1bfont4fij4/openzeppelin_governance +1 -0
- package/target/dev/.fingerprint/openzeppelin_introspection-3fja9hd1gvbcq/openzeppelin_introspection +1 -0
- package/target/dev/.fingerprint/openzeppelin_introspection-jc3nf5525eet6/openzeppelin_introspection +1 -0
- package/target/dev/.fingerprint/openzeppelin_merkle_tree-4en77ogr2r2l2/openzeppelin_merkle_tree +1 -0
- package/target/dev/.fingerprint/openzeppelin_merkle_tree-4t190frqs4db8/openzeppelin_merkle_tree +1 -0
- package/target/dev/.fingerprint/openzeppelin_presets-aqb0f6p9c0bp6/openzeppelin_presets +1 -0
- package/target/dev/.fingerprint/openzeppelin_presets-nseg8korhin8e/openzeppelin_presets +1 -0
- package/target/dev/.fingerprint/openzeppelin_security-g7p73ji1ih1qg/openzeppelin_security +1 -0
- package/target/dev/.fingerprint/openzeppelin_security-qp5328v80452u/openzeppelin_security +1 -0
- package/target/dev/.fingerprint/openzeppelin_token-jjf7tl9rphc6k/openzeppelin_token +1 -0
- package/target/dev/.fingerprint/openzeppelin_token-r6s43vlpj6rqk/openzeppelin_token +1 -0
- package/target/dev/.fingerprint/openzeppelin_upgrades-0dpbnre7engca/openzeppelin_upgrades +1 -0
- package/target/dev/.fingerprint/openzeppelin_upgrades-2sqgvbuv9s800/openzeppelin_upgrades +1 -0
- package/target/dev/.fingerprint/openzeppelin_utils-mj395ivff1ffo/openzeppelin_utils +1 -0
- package/target/dev/.fingerprint/openzeppelin_utils-oh1hse8sjumgm/openzeppelin_utils +1 -0
- package/target/dev/.fingerprint/starkware_utils-1qnnjnq0pf9u0/starkware_utils +1 -0
- package/target/dev/.fingerprint/starkware_utils-mh8e3te65lju4/starkware_utils +1 -0
- package/target/dev/enumerable_set.sierra.json +1 -0
- package/target/dev/incremental/alexandria_bytes-5ea6u5t70d7qi.bin +0 -0
- package/target/dev/incremental/alexandria_data_structures-0aue3g6q80gs0.bin +0 -0
- package/target/dev/incremental/alexandria_math-h2fi7jdq4isuu.bin +0 -0
- package/target/dev/incremental/core-lq3u730l5p1ag.bin +0 -0
- package/target/dev/incremental/core-vf7fc6rvic5vi.bin +0 -0
- package/target/dev/incremental/enumerable_set-eaerkg8njl85o.bin +0 -0
- package/target/dev/incremental/enumerable_set-r54oje7t06ku8.bin +0 -0
- package/target/dev/incremental/layerzero-oqgdqsaddpi2k.bin +0 -0
- package/target/dev/incremental/lz_utils-kfkkeueiqg0pa.bin +0 -0
- package/target/dev/incremental/lz_utils-u4v1os6e7gkng.bin +0 -0
- package/target/dev/incremental/multisig-0fjetugejecge.bin +0 -0
- package/target/dev/incremental/multisig-6j5kqs436hm54.bin +0 -0
- package/target/dev/incremental/openzeppelin-ei1id1hu088lo.bin +0 -0
- package/target/dev/incremental/openzeppelin-j9d5nd1qhfnu6.bin +0 -0
- package/target/dev/incremental/openzeppelin_access-3oa41aikpaek0.bin +0 -0
- package/target/dev/incremental/openzeppelin_access-p5h849v8so76q.bin +0 -0
- package/target/dev/incremental/openzeppelin_account-4qhv5fks84g9u.bin +0 -0
- package/target/dev/incremental/openzeppelin_account-hgbm8ln9ah7rm.bin +0 -0
- package/target/dev/incremental/openzeppelin_finance-n70q9al0cps8i.bin +0 -0
- package/target/dev/incremental/openzeppelin_finance-nnd4f8703t3ak.bin +0 -0
- package/target/dev/incremental/openzeppelin_governance-3gnk21ubp5lis.bin +0 -0
- package/target/dev/incremental/openzeppelin_governance-rj1bfont4fij4.bin +0 -0
- package/target/dev/incremental/openzeppelin_introspection-3fja9hd1gvbcq.bin +0 -0
- package/target/dev/incremental/openzeppelin_introspection-jc3nf5525eet6.bin +0 -0
- package/target/dev/incremental/openzeppelin_merkle_tree-4en77ogr2r2l2.bin +0 -0
- package/target/dev/incremental/openzeppelin_merkle_tree-4t190frqs4db8.bin +0 -0
- package/target/dev/incremental/openzeppelin_presets-aqb0f6p9c0bp6.bin +0 -0
- package/target/dev/incremental/openzeppelin_presets-nseg8korhin8e.bin +0 -0
- package/target/dev/incremental/openzeppelin_security-g7p73ji1ih1qg.bin +0 -0
- package/target/dev/incremental/openzeppelin_security-qp5328v80452u.bin +0 -0
- package/target/dev/incremental/openzeppelin_token-jjf7tl9rphc6k.bin +0 -0
- package/target/dev/incremental/openzeppelin_token-r6s43vlpj6rqk.bin +0 -0
- package/target/dev/incremental/openzeppelin_upgrades-0dpbnre7engca.bin +0 -0
- package/target/dev/incremental/openzeppelin_upgrades-2sqgvbuv9s800.bin +0 -0
- package/target/dev/incremental/openzeppelin_utils-mj395ivff1ffo.bin +0 -0
- package/target/dev/incremental/openzeppelin_utils-oh1hse8sjumgm.bin +0 -0
- package/target/dev/incremental/starkware_utils-1qnnjnq0pf9u0.bin +0 -0
- package/target/dev/incremental/starkware_utils-mh8e3te65lju4.bin +0 -0
- package/target/dev/layerzero.starknet_artifacts.json +1 -0
- package/target/dev/layerzero_BlockedMessageLib.compiled_contract_class.json +1 -0
- package/target/dev/layerzero_BlockedMessageLib.contract_class.json +1 -0
- package/target/dev/layerzero_Dvn.compiled_contract_class.json +1 -0
- package/target/dev/layerzero_Dvn.contract_class.json +1 -0
- package/target/dev/layerzero_DvnFeeLib.compiled_contract_class.json +1 -0
- package/target/dev/layerzero_DvnFeeLib.contract_class.json +1 -0
- package/target/dev/layerzero_Endpoint.compiled_contract_class.json +1 -0
- package/target/dev/layerzero_Endpoint.contract_class.json +1 -0
- package/target/dev/layerzero_Executor.compiled_contract_class.json +1 -0
- package/target/dev/layerzero_Executor.contract_class.json +1 -0
- package/target/dev/layerzero_ExecutorFeeLib.compiled_contract_class.json +1 -0
- package/target/dev/layerzero_ExecutorFeeLib.contract_class.json +1 -0
- package/target/dev/layerzero_OApp.compiled_contract_class.json +1 -0
- package/target/dev/layerzero_OApp.contract_class.json +1 -0
- package/target/dev/layerzero_OFT.compiled_contract_class.json +1 -0
- package/target/dev/layerzero_OFT.contract_class.json +1 -0
- package/target/dev/layerzero_OFTAdapter.compiled_contract_class.json +1 -0
- package/target/dev/layerzero_OFTAdapter.contract_class.json +1 -0
- package/target/dev/layerzero_OmniCounter.compiled_contract_class.json +1 -0
- package/target/dev/layerzero_OmniCounter.contract_class.json +1 -0
- package/target/dev/layerzero_PriceFeed.compiled_contract_class.json +1 -0
- package/target/dev/layerzero_PriceFeed.contract_class.json +1 -0
- package/target/dev/layerzero_SimpleMessageLib.compiled_contract_class.json +1 -0
- package/target/dev/layerzero_SimpleMessageLib.contract_class.json +1 -0
- package/target/dev/layerzero_Treasury.compiled_contract_class.json +1 -0
- package/target/dev/layerzero_Treasury.contract_class.json +1 -0
- package/target/dev/layerzero_UltraLightNode.compiled_contract_class.json +1 -0
- package/target/dev/layerzero_UltraLightNode.contract_class.json +1 -0
- package/target/dev/lz_utils.sierra.json +1 -0
- package/target/dev/multisig.sierra.json +1 -0
- package/tools/update_contracts.sh +19 -0
- package/tsconfig.json +20 -0
- package/tsup.config.ts +7 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
use lz_utils::error::{Error, format_error};
|
|
2
|
+
|
|
3
|
+
#[derive(Drop)]
|
|
4
|
+
pub enum OAppOptionsType3Error {
|
|
5
|
+
InvalidOptions,
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
impl ErrorNameImpl of Error<OAppOptionsType3Error> {
|
|
9
|
+
fn prefix() -> ByteArray {
|
|
10
|
+
"LZ_OAPP_OPTIONS_TYPE3"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
fn name(self: OAppOptionsType3Error) -> ByteArray {
|
|
14
|
+
match self {
|
|
15
|
+
OAppOptionsType3Error::InvalidOptions => "INVALID_OPTIONS",
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
pub fn err_invalid_options(options: @ByteArray) -> ByteArray {
|
|
21
|
+
format_error(OAppOptionsType3Error::InvalidOptions, format!("options_len: {}", options.len()))
|
|
22
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
use crate::oapps::common::oapp_options_type_3::structs::EnforcedOptionParam;
|
|
2
|
+
|
|
3
|
+
#[starknet::interface]
|
|
4
|
+
pub trait IOAppOptionsType3<TContractState> {
|
|
5
|
+
/// Sets the enforced options for specific endpoint and message type combinations.
|
|
6
|
+
/// Only the owner/admin of the OApp can call this function.
|
|
7
|
+
///
|
|
8
|
+
/// # Arguments
|
|
9
|
+
/// * `enforced_options` - Array of EnforcedOptionParam structures specifying enforced options
|
|
10
|
+
fn set_enforced_options(ref self: TContractState, enforced_options: Array<EnforcedOptionParam>);
|
|
11
|
+
|
|
12
|
+
/// Combines options for a given endpoint and message type.
|
|
13
|
+
///
|
|
14
|
+
/// # Arguments
|
|
15
|
+
/// * `eid` - The endpoint ID
|
|
16
|
+
/// * `msg_type` - The OApp message type
|
|
17
|
+
/// * `extra_options` - Additional options passed by the caller
|
|
18
|
+
///
|
|
19
|
+
/// # Returns
|
|
20
|
+
/// * `ByteArray` - The combination of caller specified options AND enforced options
|
|
21
|
+
fn combine_options(
|
|
22
|
+
self: @TContractState, eid: u32, msg_type: u16, extra_options: ByteArray,
|
|
23
|
+
) -> ByteArray;
|
|
24
|
+
|
|
25
|
+
/// Gets the enforced options for a specific endpoint and message type
|
|
26
|
+
///
|
|
27
|
+
/// # Arguments
|
|
28
|
+
/// * `eid` - The endpoint ID
|
|
29
|
+
/// * `msg_type` - The OApp message type
|
|
30
|
+
///
|
|
31
|
+
/// # Returns
|
|
32
|
+
/// * `ByteArray` - The enforced options
|
|
33
|
+
fn get_enforced_options(self: @TContractState, eid: u32, msg_type: u16) -> ByteArray;
|
|
34
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#[starknet::component]
|
|
2
|
+
pub mod OAppOptionsType3Component {
|
|
3
|
+
use alexandria_bytes::byte_array_ext::ByteArrayTraitExt;
|
|
4
|
+
use core::panics::panic_with_byte_array;
|
|
5
|
+
use openzeppelin::access::ownable::OwnableComponent;
|
|
6
|
+
use openzeppelin::access::ownable::OwnableComponent::{
|
|
7
|
+
InternalImpl as OwnableInternalImpl, InternalTrait as OwnableInternalTrait,
|
|
8
|
+
};
|
|
9
|
+
use starknet::storage::{Map, StorageMapReadAccess, StorageMapWriteAccess};
|
|
10
|
+
use starkware_utils::errors::assert_with_byte_array;
|
|
11
|
+
use crate::oapps::common::oapp_options_type_3::errors::err_invalid_options;
|
|
12
|
+
use crate::oapps::common::oapp_options_type_3::events::EnforcedOptionSet;
|
|
13
|
+
use crate::oapps::common::oapp_options_type_3::interface::IOAppOptionsType3;
|
|
14
|
+
use crate::oapps::common::oapp_options_type_3::structs::EnforcedOptionParam;
|
|
15
|
+
|
|
16
|
+
// Constants
|
|
17
|
+
pub const OPTION_TYPE_3: u16 = 3;
|
|
18
|
+
|
|
19
|
+
#[storage]
|
|
20
|
+
pub struct Storage {
|
|
21
|
+
/// Mapping from (eid, msg_type) => enforced options
|
|
22
|
+
OAppOptionsType3_enforced_options: Map<(u32, u16), ByteArray>,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
#[event]
|
|
26
|
+
#[derive(Drop, starknet::Event)]
|
|
27
|
+
pub enum Event {
|
|
28
|
+
EnforcedOptionSet: EnforcedOptionSet,
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
#[generate_trait]
|
|
32
|
+
pub impl InternalImpl<
|
|
33
|
+
TContractState, +HasComponent<TContractState>,
|
|
34
|
+
> of InternalTrait<TContractState> {
|
|
35
|
+
/// Internal function to set enforced options
|
|
36
|
+
fn _set_enforced_options(
|
|
37
|
+
ref self: ComponentState<TContractState>, enforced_options: Array<EnforcedOptionParam>,
|
|
38
|
+
) {
|
|
39
|
+
for option in enforced_options.clone().into_iter() {
|
|
40
|
+
// Enforced options are only available for optionType 3
|
|
41
|
+
self._assert_options_type_3(@option.options);
|
|
42
|
+
|
|
43
|
+
// Store the enforced option
|
|
44
|
+
self
|
|
45
|
+
.OAppOptionsType3_enforced_options
|
|
46
|
+
.write((option.eid, option.msg_type), option.options.clone());
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
self.emit(EnforcedOptionSet { options: enforced_options });
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/// Internal function to assert that options are of type 3
|
|
53
|
+
fn _assert_options_type_3(self: @ComponentState<TContractState>, options: @ByteArray) {
|
|
54
|
+
// Use the ByteArrayTraitExt to read u16 from the beginning
|
|
55
|
+
let (_, option_type) = options.read_u16(0);
|
|
56
|
+
|
|
57
|
+
assert_with_byte_array(option_type == OPTION_TYPE_3, err_invalid_options(options));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
#[embeddable_as(OAppOptionsType3Impl)]
|
|
62
|
+
impl OAppOptionsType3<
|
|
63
|
+
TContractState,
|
|
64
|
+
+HasComponent<TContractState>,
|
|
65
|
+
impl Ownable: OwnableComponent::HasComponent<TContractState>,
|
|
66
|
+
> of IOAppOptionsType3<ComponentState<TContractState>> {
|
|
67
|
+
fn set_enforced_options(
|
|
68
|
+
ref self: ComponentState<TContractState>, enforced_options: Array<EnforcedOptionParam>,
|
|
69
|
+
) {
|
|
70
|
+
// Only owner can set enforced options
|
|
71
|
+
let ownable = get_dep_component!(@self, Ownable);
|
|
72
|
+
ownable.assert_only_owner();
|
|
73
|
+
|
|
74
|
+
self._set_enforced_options(enforced_options);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
fn combine_options(
|
|
78
|
+
self: @ComponentState<TContractState>,
|
|
79
|
+
eid: u32,
|
|
80
|
+
msg_type: u16,
|
|
81
|
+
extra_options: ByteArray,
|
|
82
|
+
) -> ByteArray {
|
|
83
|
+
let enforced = self.OAppOptionsType3_enforced_options.read((eid, msg_type));
|
|
84
|
+
|
|
85
|
+
// No enforced options, pass whatever the caller supplied
|
|
86
|
+
if enforced.len() == 0 {
|
|
87
|
+
return extra_options;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// No caller options, return enforced
|
|
91
|
+
if extra_options.len() == 0 {
|
|
92
|
+
return enforced;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// If caller provided extra_options, must be type 3 as it's the ONLY type that can be
|
|
96
|
+
// combined
|
|
97
|
+
if extra_options.len() >= 2 {
|
|
98
|
+
self._assert_options_type_3(@extra_options);
|
|
99
|
+
|
|
100
|
+
// Remove the first 2 bytes containing the type from the extra_options and combine
|
|
101
|
+
// with enforced
|
|
102
|
+
let mut combined = enforced;
|
|
103
|
+
if extra_options.len() > 2 {
|
|
104
|
+
let (_, extra_data) = extra_options.read_bytes(2, extra_options.len() - 2);
|
|
105
|
+
combined.append(@extra_data);
|
|
106
|
+
}
|
|
107
|
+
return combined;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// No valid set of options was found
|
|
111
|
+
panic_with_byte_array(@err_invalid_options(@extra_options));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
fn get_enforced_options(
|
|
115
|
+
self: @ComponentState<TContractState>, eid: u32, msg_type: u16,
|
|
116
|
+
) -> ByteArray {
|
|
117
|
+
self.OAppOptionsType3_enforced_options.read((eid, msg_type))
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
#[starknet::contract]
|
|
2
|
+
pub mod OmniCounter {
|
|
3
|
+
use alexandria_bytes::byte_array_ext::ByteArrayTraitExt;
|
|
4
|
+
use lz_utils::bytes::Bytes32;
|
|
5
|
+
use openzeppelin::access::ownable::OwnableComponent;
|
|
6
|
+
use starknet::storage::{
|
|
7
|
+
Map, StoragePathEntry, StoragePointerReadAccess, StoragePointerWriteAccess,
|
|
8
|
+
};
|
|
9
|
+
use starknet::{ContractAddress, get_caller_address};
|
|
10
|
+
use crate::common::structs::messaging::{MessageReceipt, MessagingFee};
|
|
11
|
+
use crate::common::structs::packet::Origin;
|
|
12
|
+
use crate::oapps::counter::constants::{INCREMENT_TYPE_A_B, INCREMENT_TYPE_A_B_A};
|
|
13
|
+
use crate::oapps::counter::interface::IOmniCounter;
|
|
14
|
+
use crate::oapps::counter::structs::{IncrementReceived, IncrementSent};
|
|
15
|
+
use crate::oapps::oapp::oapp_core::OAppCoreComponent;
|
|
16
|
+
|
|
17
|
+
component!(path: OAppCoreComponent, storage: oapp_core, event: OAppCoreEvent);
|
|
18
|
+
component!(path: OwnableComponent, storage: ownable, event: OwnableEvent);
|
|
19
|
+
|
|
20
|
+
// OAppCore Mixin - now with built-in ownership control
|
|
21
|
+
#[abi(embed_v0)]
|
|
22
|
+
impl OAppCoreImpl = OAppCoreComponent::OAppCoreImpl<ContractState>;
|
|
23
|
+
impl OAppCoreInternalImpl = OAppCoreComponent::InternalImpl<ContractState>;
|
|
24
|
+
impl OAppCoreSenderImpl = OAppCoreComponent::OAppSenderImpl<ContractState>;
|
|
25
|
+
|
|
26
|
+
#[abi(embed_v0)]
|
|
27
|
+
impl OAppCoreReceiverImpl = OAppCoreComponent::OAppReceiverImpl<ContractState>;
|
|
28
|
+
|
|
29
|
+
#[abi(embed_v0)]
|
|
30
|
+
impl ILayerZeroReceiverImpl =
|
|
31
|
+
OAppCoreComponent::LayerZeroReceiverImpl<ContractState>;
|
|
32
|
+
|
|
33
|
+
// Ownable Mixin
|
|
34
|
+
#[abi(embed_v0)]
|
|
35
|
+
impl OwnableImpl = OwnableComponent::OwnableImpl<ContractState>;
|
|
36
|
+
impl OwnableInternalImpl = OwnableComponent::InternalImpl<ContractState>;
|
|
37
|
+
|
|
38
|
+
#[storage]
|
|
39
|
+
struct Storage {
|
|
40
|
+
// Map from remoteEid to counter value
|
|
41
|
+
counters: Map<u32, u256>,
|
|
42
|
+
#[substorage(v0)]
|
|
43
|
+
oapp_core: OAppCoreComponent::Storage,
|
|
44
|
+
#[substorage(v0)]
|
|
45
|
+
ownable: OwnableComponent::Storage,
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
#[event]
|
|
49
|
+
#[derive(Drop, starknet::Event)]
|
|
50
|
+
pub enum Event {
|
|
51
|
+
#[flat]
|
|
52
|
+
OAppCoreEvent: OAppCoreComponent::Event,
|
|
53
|
+
#[flat]
|
|
54
|
+
OwnableEvent: OwnableComponent::Event,
|
|
55
|
+
IncrementSent: IncrementSent,
|
|
56
|
+
IncrementReceived: IncrementReceived,
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
#[constructor]
|
|
60
|
+
fn constructor(
|
|
61
|
+
ref self: ContractState,
|
|
62
|
+
endpoint: ContractAddress,
|
|
63
|
+
owner: ContractAddress,
|
|
64
|
+
native_token: ContractAddress,
|
|
65
|
+
) {
|
|
66
|
+
self.oapp_core.initializer(endpoint, native_token);
|
|
67
|
+
self.ownable.initializer(owner);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
#[abi(embed_v0)]
|
|
72
|
+
impl OmniCounterImpl of IOmniCounter<ContractState> {
|
|
73
|
+
fn get_counter(self: @ContractState, remote_eid: u32) -> u256 {
|
|
74
|
+
self.counters.entry(remote_eid).read()
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
fn quote(
|
|
78
|
+
self: @ContractState,
|
|
79
|
+
dst_eid: u32,
|
|
80
|
+
increment_type: u8,
|
|
81
|
+
options: ByteArray,
|
|
82
|
+
pay_in_lz_token: bool,
|
|
83
|
+
) -> MessagingFee {
|
|
84
|
+
self
|
|
85
|
+
.oapp_core
|
|
86
|
+
._quote(
|
|
87
|
+
dst_eid,
|
|
88
|
+
self._encode_increment_message(increment_type),
|
|
89
|
+
options,
|
|
90
|
+
pay_in_lz_token,
|
|
91
|
+
)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
fn increment(
|
|
95
|
+
ref self: ContractState,
|
|
96
|
+
dst_eid: u32,
|
|
97
|
+
increment_type: u8,
|
|
98
|
+
options: ByteArray,
|
|
99
|
+
fee: MessagingFee,
|
|
100
|
+
refund_address: ContractAddress,
|
|
101
|
+
) -> MessageReceipt {
|
|
102
|
+
let caller = get_caller_address();
|
|
103
|
+
let message = self._encode_increment_message(increment_type);
|
|
104
|
+
|
|
105
|
+
self.emit(IncrementSent { sender: caller, dst_eid, increment_type });
|
|
106
|
+
|
|
107
|
+
// Call the underlying OAppCore send function
|
|
108
|
+
self.oapp_core._lz_send(dst_eid, message, options, fee, refund_address)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
#[generate_trait]
|
|
113
|
+
impl InternalImpl of InternalTrait {
|
|
114
|
+
/// Encode increment message for cross-chain communication
|
|
115
|
+
fn _encode_increment_message(self: @ContractState, increment_type: u8) -> ByteArray {
|
|
116
|
+
let mut message: ByteArray = "";
|
|
117
|
+
|
|
118
|
+
// Message Format:
|
|
119
|
+
// 1 byte: Increment type (AB=0x01, ABA=0x02)
|
|
120
|
+
message.append_byte(increment_type);
|
|
121
|
+
|
|
122
|
+
message
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/// Send a response increment back to the original sender (for ABA type)
|
|
126
|
+
fn _send_response(ref self: ContractState, dst_eid: u32) {
|
|
127
|
+
// Use default options and fee for response (in real implementation, these should be
|
|
128
|
+
// configurable)
|
|
129
|
+
let options: ByteArray = "";
|
|
130
|
+
let fee = MessagingFee { native_fee: 0, lz_token_fee: 0 };
|
|
131
|
+
let refund_address = get_caller_address();
|
|
132
|
+
|
|
133
|
+
self.increment(dst_eid, INCREMENT_TYPE_A_B, options, fee, refund_address);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Implement IOAppHooks to provide the required _lz_receive implementation
|
|
138
|
+
impl IOAppHooks<ContractState> of OAppCoreComponent::IOAppHooks<ContractState> {
|
|
139
|
+
fn _lz_receive(
|
|
140
|
+
ref self: OAppCoreComponent::ComponentState<ContractState>,
|
|
141
|
+
origin: Origin,
|
|
142
|
+
guid: Bytes32,
|
|
143
|
+
message: ByteArray,
|
|
144
|
+
executor: ContractAddress,
|
|
145
|
+
value: u256,
|
|
146
|
+
extra_data: ByteArray,
|
|
147
|
+
) {
|
|
148
|
+
let mut contract_state = unsafe_new_contract_state();
|
|
149
|
+
// Parse the message
|
|
150
|
+
let (_, increment_type) = message.read_u8(0);
|
|
151
|
+
|
|
152
|
+
// Get the source EID
|
|
153
|
+
let src_eid = origin.src_eid;
|
|
154
|
+
|
|
155
|
+
// Increment the counter for this remote EID
|
|
156
|
+
let counter_entry = contract_state.counters.entry(src_eid);
|
|
157
|
+
let old_value = counter_entry.read();
|
|
158
|
+
let new_value = old_value + 1;
|
|
159
|
+
counter_entry.write(new_value);
|
|
160
|
+
|
|
161
|
+
contract_state
|
|
162
|
+
.emit(IncrementReceived { src_eid, old_value, new_value, increment_type, value });
|
|
163
|
+
|
|
164
|
+
// If this is an ABA type increment, send a response back
|
|
165
|
+
if increment_type == INCREMENT_TYPE_A_B_A {
|
|
166
|
+
contract_state._send_response(src_eid);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
use starknet::ContractAddress;
|
|
2
|
+
use crate::common::structs::messaging::{MessageReceipt, MessagingFee};
|
|
3
|
+
|
|
4
|
+
#[starknet::interface]
|
|
5
|
+
pub trait IOmniCounter<TContractState> {
|
|
6
|
+
/// Get the counter value for a specific remote EID.
|
|
7
|
+
fn get_counter(self: @TContractState, remote_eid: u32) -> u256;
|
|
8
|
+
|
|
9
|
+
/// Quote an increment.
|
|
10
|
+
fn quote(
|
|
11
|
+
self: @TContractState,
|
|
12
|
+
dst_eid: u32,
|
|
13
|
+
increment_type: u8,
|
|
14
|
+
options: ByteArray,
|
|
15
|
+
pay_in_lz_token: bool,
|
|
16
|
+
) -> MessagingFee;
|
|
17
|
+
|
|
18
|
+
/// Send an increment message to another chain.
|
|
19
|
+
fn increment(
|
|
20
|
+
ref self: TContractState,
|
|
21
|
+
dst_eid: u32,
|
|
22
|
+
increment_type: u8,
|
|
23
|
+
options: ByteArray,
|
|
24
|
+
fee: MessagingFee,
|
|
25
|
+
refund_address: ContractAddress,
|
|
26
|
+
) -> MessageReceipt;
|
|
27
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
use starknet::ContractAddress;
|
|
2
|
+
|
|
3
|
+
#[derive(Drop, starknet::Event)]
|
|
4
|
+
pub struct IncrementSent {
|
|
5
|
+
#[key]
|
|
6
|
+
pub sender: ContractAddress,
|
|
7
|
+
#[key]
|
|
8
|
+
pub dst_eid: u32,
|
|
9
|
+
pub increment_type: u8,
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
#[derive(Drop, starknet::Event)]
|
|
13
|
+
pub struct IncrementReceived {
|
|
14
|
+
#[key]
|
|
15
|
+
pub src_eid: u32,
|
|
16
|
+
pub old_value: u256,
|
|
17
|
+
pub new_value: u256,
|
|
18
|
+
pub increment_type: u8,
|
|
19
|
+
pub value: u256,
|
|
20
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//! Message inspector interface
|
|
2
|
+
|
|
3
|
+
/// IMessageInspector defines the complete interface for message inspection.
|
|
4
|
+
#[starknet::interface]
|
|
5
|
+
pub trait IMessageInspector<TContractState> {
|
|
6
|
+
/// Inspect the message and options
|
|
7
|
+
///
|
|
8
|
+
/// This function is called to inspect the message and options before they are sent.
|
|
9
|
+
/// If the message or options fail inspection, the transaction will revert.
|
|
10
|
+
///
|
|
11
|
+
/// # Arguments
|
|
12
|
+
/// * `message` - The message to inspect
|
|
13
|
+
/// * `options` - The options to inspect
|
|
14
|
+
///
|
|
15
|
+
/// # Returns
|
|
16
|
+
/// * `bool` - True if the message and options pass inspection, false otherwise
|
|
17
|
+
///
|
|
18
|
+
/// # Panics
|
|
19
|
+
/// * If the message or options fail inspection, the transaction will revert
|
|
20
|
+
fn inspect_msg(self: @TContractState, message: ByteArray, options: ByteArray) -> bool;
|
|
21
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
use lz_utils::bytes::Bytes32;
|
|
2
|
+
use lz_utils::error::{Error, format_error};
|
|
3
|
+
use starknet::ContractAddress;
|
|
4
|
+
|
|
5
|
+
#[derive(Drop)]
|
|
6
|
+
pub enum OAppCoreError {
|
|
7
|
+
OnlyEndpoint,
|
|
8
|
+
OnlyPeer,
|
|
9
|
+
NoPeer,
|
|
10
|
+
NotEnoughNative,
|
|
11
|
+
NotEnoughNativeAllowance,
|
|
12
|
+
NotEnoughLzToken,
|
|
13
|
+
NotEnoughLzTokenAllowance,
|
|
14
|
+
LzTokenUnavailable,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
impl ErrorNameImpl of Error<OAppCoreError> {
|
|
18
|
+
fn prefix() -> ByteArray {
|
|
19
|
+
"LZ_OAPP_CORE"
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
fn name(self: OAppCoreError) -> ByteArray {
|
|
23
|
+
match self {
|
|
24
|
+
OAppCoreError::OnlyEndpoint => "ONLY_ENDPOINT",
|
|
25
|
+
OAppCoreError::OnlyPeer => "ONLY_PEER",
|
|
26
|
+
OAppCoreError::NoPeer => "NO_PEER",
|
|
27
|
+
OAppCoreError::NotEnoughNative => "NOT_ENOUGH_NATIVE",
|
|
28
|
+
OAppCoreError::NotEnoughNativeAllowance => "NOT_ENOUGH_NATIVE_ALLOWANCE",
|
|
29
|
+
OAppCoreError::NotEnoughLzToken => "NOT_ENOUGH_LZ_TOKEN",
|
|
30
|
+
OAppCoreError::NotEnoughLzTokenAllowance => "NOT_ENOUGH_LZ_TOKEN_ALLOWANCE",
|
|
31
|
+
OAppCoreError::LzTokenUnavailable => "LZ_TOKEN_UNAVAILABLE",
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
pub fn err_only_endpoint(endpoint: ContractAddress) -> ByteArray {
|
|
37
|
+
format_error(OAppCoreError::OnlyEndpoint, format!("{:?}", endpoint))
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
pub fn err_only_peer(eid: u32, peer: Bytes32) -> ByteArray {
|
|
41
|
+
format_error(OAppCoreError::OnlyPeer, format!("eid: {:?}, peer: {:?}", eid, peer))
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
pub fn err_no_peer(eid: u32) -> ByteArray {
|
|
45
|
+
format_error(OAppCoreError::NoPeer, format!("eid: {:?}", eid))
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
pub fn err_not_enough_native(fee: u256, balance: u256) -> ByteArray {
|
|
49
|
+
format_error(OAppCoreError::NotEnoughNative, format!("fee: {:?}, balance: {:?}", fee, balance))
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
pub fn err_not_enough_lz_token(fee: u256, balance: u256) -> ByteArray {
|
|
53
|
+
format_error(OAppCoreError::NotEnoughLzToken, format!("fee: {:?}, balance: {:?}", fee, balance))
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
pub fn err_lz_token_unavailable() -> ByteArray {
|
|
57
|
+
format_error(OAppCoreError::LzTokenUnavailable, "")
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
pub fn err_not_enough_lz_token_allowance(fee: u256, allowance: u256) -> ByteArray {
|
|
61
|
+
format_error(
|
|
62
|
+
OAppCoreError::NotEnoughLzTokenAllowance,
|
|
63
|
+
format!("fee: {:?}, allowance: {:?}", fee, allowance),
|
|
64
|
+
)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
pub fn err_not_enough_native_allowance(fee: u256, allowance: u256) -> ByteArray {
|
|
68
|
+
format_error(
|
|
69
|
+
OAppCoreError::NotEnoughNativeAllowance,
|
|
70
|
+
format!("fee: {:?}, allowance: {:?}", fee, allowance),
|
|
71
|
+
)
|
|
72
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
use lz_utils::bytes::Bytes32;
|
|
2
|
+
use starknet::ContractAddress;
|
|
3
|
+
use crate::Origin;
|
|
4
|
+
|
|
5
|
+
#[starknet::interface]
|
|
6
|
+
pub trait IOApp<TContractState> {
|
|
7
|
+
/// Gets the LayerZero endpoint contract address
|
|
8
|
+
///
|
|
9
|
+
/// # Returns
|
|
10
|
+
///
|
|
11
|
+
/// The contract address of the LayerZero endpoint
|
|
12
|
+
fn get_endpoint(self: @TContractState) -> ContractAddress;
|
|
13
|
+
|
|
14
|
+
/// Sets a peer for a specific endpoint ID
|
|
15
|
+
/// This establishes a trusted connection to another OApp on a different chain
|
|
16
|
+
///
|
|
17
|
+
/// # Arguments
|
|
18
|
+
///
|
|
19
|
+
/// * `eid`: The endpoint ID of the destination chain
|
|
20
|
+
/// * `peer`: The peer address as a 32-byte value
|
|
21
|
+
fn set_peer(ref self: TContractState, eid: u32, peer: Bytes32);
|
|
22
|
+
|
|
23
|
+
/// Gets the peer address for a specific endpoint ID
|
|
24
|
+
///
|
|
25
|
+
/// # Arguments
|
|
26
|
+
///
|
|
27
|
+
/// * `eid`: The endpoint ID of the destination chain
|
|
28
|
+
///
|
|
29
|
+
/// # Returns
|
|
30
|
+
///
|
|
31
|
+
/// The peer address as a 32-byte value
|
|
32
|
+
fn get_peer(self: @TContractState, eid: u32) -> Bytes32;
|
|
33
|
+
|
|
34
|
+
/// Returns the OApp version information
|
|
35
|
+
///
|
|
36
|
+
/// # Returns
|
|
37
|
+
///
|
|
38
|
+
/// A tuple containing (sender_version, receiver_version) as u64 values
|
|
39
|
+
fn oapp_version(self: @TContractState) -> (u64, u64);
|
|
40
|
+
|
|
41
|
+
/// Sets the send library for a specific endpoint ID
|
|
42
|
+
///
|
|
43
|
+
/// # Arguments
|
|
44
|
+
///
|
|
45
|
+
/// * `dst_eid`: The destination endpoint ID
|
|
46
|
+
/// * `delegate`: The contract address of the delegate
|
|
47
|
+
fn set_delegate(ref self: TContractState, delegate: ContractAddress);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
#[starknet::interface]
|
|
51
|
+
pub trait IOAppReceiver<TContractState> {
|
|
52
|
+
/// Verifies if a sender is authorized for compose message operations
|
|
53
|
+
/// This is used in message composition scenarios to validate senders
|
|
54
|
+
///
|
|
55
|
+
/// # Arguments
|
|
56
|
+
///
|
|
57
|
+
/// * `origin`: The origin information of the message
|
|
58
|
+
/// * `message`: The message content to validate
|
|
59
|
+
/// * `sender`: The contract address claiming to be the sender
|
|
60
|
+
///
|
|
61
|
+
/// # Returns
|
|
62
|
+
///
|
|
63
|
+
/// True if the sender is authorized for compose messages, false otherwise
|
|
64
|
+
fn is_compose_msg_sender(
|
|
65
|
+
self: @TContractState, origin: Origin, message: ByteArray, sender: ContractAddress,
|
|
66
|
+
) -> bool;
|
|
67
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/// OApp - Simple LayerZero OApp using integrated OAppCore functionality
|
|
2
|
+
#[starknet::contract]
|
|
3
|
+
pub mod OApp {
|
|
4
|
+
use layerzero::oapps::oapp::oapp_core::OAppCoreComponent;
|
|
5
|
+
use lz_utils::bytes::Bytes32;
|
|
6
|
+
// Core OApp implementation - all types are provided by the component traits
|
|
7
|
+
use openzeppelin::access::ownable::OwnableComponent;
|
|
8
|
+
use starknet::ContractAddress;
|
|
9
|
+
use crate::Origin;
|
|
10
|
+
|
|
11
|
+
component!(path: OAppCoreComponent, storage: oapp_core, event: OAppCoreEvent);
|
|
12
|
+
component!(path: OwnableComponent, storage: ownable, event: OwnableEvent);
|
|
13
|
+
|
|
14
|
+
// OAppCore Mixin - Core functionality
|
|
15
|
+
#[abi(embed_v0)]
|
|
16
|
+
impl OAppCoreImpl = OAppCoreComponent::OAppCoreImpl<ContractState>;
|
|
17
|
+
#[abi(embed_v0)]
|
|
18
|
+
impl ILayerZeroReceiverImpl =
|
|
19
|
+
OAppCoreComponent::LayerZeroReceiverImpl<ContractState>;
|
|
20
|
+
#[abi(embed_v0)]
|
|
21
|
+
impl IOAppReceiverImpl = OAppCoreComponent::OAppReceiverImpl<ContractState>;
|
|
22
|
+
impl OAppCoreInternalImpl = OAppCoreComponent::InternalImpl<ContractState>;
|
|
23
|
+
|
|
24
|
+
// Ownable Mixin
|
|
25
|
+
#[abi(embed_v0)]
|
|
26
|
+
impl OwnableImpl = OwnableComponent::OwnableImpl<ContractState>;
|
|
27
|
+
impl OwnableInternalImpl = OwnableComponent::InternalImpl<ContractState>;
|
|
28
|
+
|
|
29
|
+
#[storage]
|
|
30
|
+
struct Storage {
|
|
31
|
+
#[substorage(v0)]
|
|
32
|
+
oapp_core: OAppCoreComponent::Storage,
|
|
33
|
+
#[substorage(v0)]
|
|
34
|
+
ownable: OwnableComponent::Storage,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
#[event]
|
|
38
|
+
#[derive(Drop, starknet::Event)]
|
|
39
|
+
pub enum Event {
|
|
40
|
+
#[flat]
|
|
41
|
+
OAppCoreEvent: OAppCoreComponent::Event,
|
|
42
|
+
#[flat]
|
|
43
|
+
OwnableEvent: OwnableComponent::Event,
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
#[constructor]
|
|
47
|
+
fn constructor(
|
|
48
|
+
ref self: ContractState,
|
|
49
|
+
endpoint: ContractAddress,
|
|
50
|
+
owner: ContractAddress,
|
|
51
|
+
native_token: ContractAddress,
|
|
52
|
+
) {
|
|
53
|
+
self.oapp_core.initializer(endpoint, native_token);
|
|
54
|
+
self.ownable.initializer(owner);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Implement IOFTHooks to provide the specific token operations
|
|
58
|
+
impl IOAppHooks<ContractState> of OAppCoreComponent::IOAppHooks<ContractState> {
|
|
59
|
+
fn _lz_receive(
|
|
60
|
+
ref self: OAppCoreComponent::ComponentState<ContractState>,
|
|
61
|
+
origin: Origin,
|
|
62
|
+
guid: Bytes32,
|
|
63
|
+
message: ByteArray,
|
|
64
|
+
executor: ContractAddress,
|
|
65
|
+
value: u256,
|
|
66
|
+
extra_data: ByteArray,
|
|
67
|
+
) { // Contract should implement receive logic here
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|