@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,448 @@
|
|
|
1
|
+
/// OAppCore Component - Complete LayerZero OApp functionality
|
|
2
|
+
|
|
3
|
+
#[starknet::component]
|
|
4
|
+
pub mod OAppCoreComponent {
|
|
5
|
+
use core::num::traits::Zero;
|
|
6
|
+
use lz_utils::bytes::{Bytes32, ContractAddressIntoBytes32};
|
|
7
|
+
use openzeppelin::access::ownable::OwnableComponent;
|
|
8
|
+
use openzeppelin::access::ownable::OwnableComponent::{
|
|
9
|
+
InternalImpl as OwnableInternalImpl, InternalTrait as OwnableInternalTrait,
|
|
10
|
+
};
|
|
11
|
+
use openzeppelin::token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait};
|
|
12
|
+
use starknet::storage::{
|
|
13
|
+
Map, StoragePathEntry, StoragePointerReadAccess, StoragePointerWriteAccess,
|
|
14
|
+
};
|
|
15
|
+
use starknet::{ContractAddress, get_caller_address, get_contract_address};
|
|
16
|
+
use starkware_utils::errors::assert_with_byte_array;
|
|
17
|
+
use crate::common::structs::messaging::{MessageReceipt, MessagingFee, MessagingParams};
|
|
18
|
+
use crate::common::structs::packet::Origin;
|
|
19
|
+
use crate::endpoint::interfaces::endpoint::{IEndpointDispatcher, IEndpointDispatcherTrait};
|
|
20
|
+
use crate::endpoint::interfaces::layerzero_receiver::ILayerZeroReceiver;
|
|
21
|
+
use crate::oapps::oapp::errors::{
|
|
22
|
+
err_lz_token_unavailable, err_no_peer, err_not_enough_lz_token,
|
|
23
|
+
err_not_enough_lz_token_allowance, err_not_enough_native, err_not_enough_native_allowance,
|
|
24
|
+
err_only_endpoint, err_only_peer,
|
|
25
|
+
};
|
|
26
|
+
use crate::oapps::oapp::events::PeerSet;
|
|
27
|
+
|
|
28
|
+
// Version constants
|
|
29
|
+
pub const OAPP_CORE_VERSION: u64 = 1;
|
|
30
|
+
pub const OAPP_SENDER_VERSION: u64 = 1;
|
|
31
|
+
pub const OAPP_RECEIVER_VERSION: u64 = 1;
|
|
32
|
+
|
|
33
|
+
/// =============================== Storage =================================
|
|
34
|
+
#[storage]
|
|
35
|
+
pub struct Storage {
|
|
36
|
+
pub OAppCore_endpoint: ContractAddress,
|
|
37
|
+
pub OAppCore_native_token: ContractAddress,
|
|
38
|
+
// Mapping from remoteEid to peer address
|
|
39
|
+
pub OAppCore_peers: Map<u32, Bytes32>,
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/// =============================== Events =================================
|
|
43
|
+
#[event]
|
|
44
|
+
#[derive(Drop, starknet::Event)]
|
|
45
|
+
pub enum Event {
|
|
46
|
+
PeerSet: PeerSet,
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/// =============================== Hooks =================================
|
|
50
|
+
|
|
51
|
+
/// Hooks for the OApp component
|
|
52
|
+
///
|
|
53
|
+
/// These hooks are used to override the default behavior of the OApp component.
|
|
54
|
+
/// They are used to implement the custom logic for the OApp component.
|
|
55
|
+
///
|
|
56
|
+
/// Its mandatory to implement all the hooks.
|
|
57
|
+
/// _lz_receive doesn't have a default implementation
|
|
58
|
+
/// i.e. it must be implemented by the OApp.
|
|
59
|
+
/// _is_compose_msg_sender, _allow_initialize_path, _next_nonce have default implementations
|
|
60
|
+
/// and can be omitted in the contract implementation.
|
|
61
|
+
pub trait IOAppHooks<TContractState> {
|
|
62
|
+
/// Entry point for receiving messages from the LayerZero endpoint
|
|
63
|
+
///
|
|
64
|
+
/// # Arguments
|
|
65
|
+
///
|
|
66
|
+
/// * `origin`: The origin information containing the source endpoint and sender address
|
|
67
|
+
/// * `guid`: The unique identifier for the received LayerZero message
|
|
68
|
+
/// * `message`: The payload of the received message
|
|
69
|
+
fn _lz_receive(
|
|
70
|
+
ref self: ComponentState<TContractState>,
|
|
71
|
+
origin: Origin,
|
|
72
|
+
guid: Bytes32,
|
|
73
|
+
message: ByteArray,
|
|
74
|
+
executor: ContractAddress,
|
|
75
|
+
value: u256,
|
|
76
|
+
extra_data: ByteArray,
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
/// Checks if the caller is a valid composeMsg sender
|
|
80
|
+
///
|
|
81
|
+
/// # Arguments
|
|
82
|
+
///
|
|
83
|
+
/// * `origin`: The origin information containing the source endpoint and sender address
|
|
84
|
+
/// * `message`: The payload of the received message
|
|
85
|
+
/// * `sender`: The address of the sender
|
|
86
|
+
///
|
|
87
|
+
/// # Returns
|
|
88
|
+
///
|
|
89
|
+
/// * `bool`: True if the sender is a valid composeMsg sender, false otherwise
|
|
90
|
+
///
|
|
91
|
+
/// Applications can optionally choose to implement separate composeMsg senders that are NOT
|
|
92
|
+
/// the bridging layer.
|
|
93
|
+
/// The default sender IS the OAppReceiver implementer.
|
|
94
|
+
fn _is_compose_msg_sender(
|
|
95
|
+
self: @ComponentState<TContractState>,
|
|
96
|
+
origin: Origin,
|
|
97
|
+
message: ByteArray,
|
|
98
|
+
sender: ContractAddress,
|
|
99
|
+
) -> bool {
|
|
100
|
+
sender == get_contract_address()
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/// Checks if the path initialization is allowed based on the provided origin
|
|
104
|
+
///
|
|
105
|
+
/// # Arguments
|
|
106
|
+
///
|
|
107
|
+
/// * `origin`: The origin information containing the source endpoint and sender address
|
|
108
|
+
///
|
|
109
|
+
/// # Returns
|
|
110
|
+
///
|
|
111
|
+
/// * `bool`: True if the path has been initialized, false otherwise
|
|
112
|
+
///
|
|
113
|
+
/// @dev This indicates to the endpoint that the OApp has enabled msgs for this particular
|
|
114
|
+
/// path to be received.
|
|
115
|
+
/// @dev This defaults to assuming if a peer has been set, its initialized.
|
|
116
|
+
/// Can be overridden by the OApp if there is other logic to determine this.
|
|
117
|
+
fn _allow_initialize_path(
|
|
118
|
+
self: @ComponentState<TContractState>, origin: Origin,
|
|
119
|
+
) -> bool {
|
|
120
|
+
self.OAppCore_peers.entry(origin.src_eid).read() == origin.sender
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/// Returns the next nonce for a given source endpoint and sender address
|
|
124
|
+
///
|
|
125
|
+
/// # Arguments
|
|
126
|
+
///
|
|
127
|
+
/// * `src_eid`: The source endpoint ID
|
|
128
|
+
/// * `sender`: The sender address
|
|
129
|
+
///
|
|
130
|
+
/// # Returns
|
|
131
|
+
///
|
|
132
|
+
/// * `u64`: The next nonce
|
|
133
|
+
///
|
|
134
|
+
/// @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce
|
|
135
|
+
/// ordered enforcement.
|
|
136
|
+
/// @dev Is required by the off-chain executor to determine the OApp expects msg execution
|
|
137
|
+
/// is ordered.
|
|
138
|
+
/// @dev This is also enforced by the OApp.
|
|
139
|
+
/// @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.
|
|
140
|
+
fn _next_nonce(
|
|
141
|
+
self: @ComponentState<TContractState>, src_eid: u32, sender: Bytes32,
|
|
142
|
+
) -> u64 {
|
|
143
|
+
0
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
#[embeddable_as(OAppCoreImpl)]
|
|
148
|
+
impl OAppCore<
|
|
149
|
+
TContractState,
|
|
150
|
+
+HasComponent<TContractState>,
|
|
151
|
+
impl Ownable: OwnableComponent::HasComponent<TContractState>,
|
|
152
|
+
> of crate::oapps::oapp::interface::IOApp<ComponentState<TContractState>> {
|
|
153
|
+
fn get_endpoint(self: @ComponentState<TContractState>) -> ContractAddress {
|
|
154
|
+
self.OAppCore_endpoint.read()
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
fn set_peer(ref self: ComponentState<TContractState>, eid: u32, peer: Bytes32) {
|
|
158
|
+
self._assert_only_owner();
|
|
159
|
+
self.OAppCore_peers.entry(eid).write(peer);
|
|
160
|
+
self.emit(PeerSet { eid, peer });
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
fn get_peer(self: @ComponentState<TContractState>, eid: u32) -> Bytes32 {
|
|
164
|
+
self.OAppCore_peers.entry(eid).read()
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
fn oapp_version(self: @ComponentState<TContractState>) -> (u64, u64) {
|
|
168
|
+
(OAPP_SENDER_VERSION, OAPP_RECEIVER_VERSION)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
fn set_delegate(ref self: ComponentState<TContractState>, delegate: ContractAddress) {
|
|
172
|
+
self._assert_only_owner();
|
|
173
|
+
let endpoint_dispatcher = IEndpointDispatcher {
|
|
174
|
+
contract_address: self.OAppCore_endpoint.read(),
|
|
175
|
+
};
|
|
176
|
+
endpoint_dispatcher.set_delegate(delegate);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/// LayerZero Receiver implementation
|
|
181
|
+
#[embeddable_as(LayerZeroReceiverImpl)]
|
|
182
|
+
impl LayerZeroReceiver<
|
|
183
|
+
TContractState,
|
|
184
|
+
+HasComponent<TContractState>,
|
|
185
|
+
impl Ownable: OwnableComponent::HasComponent<TContractState>,
|
|
186
|
+
impl OAppHooks: IOAppHooks<TContractState>,
|
|
187
|
+
> of ILayerZeroReceiver<ComponentState<TContractState>> {
|
|
188
|
+
fn lz_receive(
|
|
189
|
+
ref self: ComponentState<TContractState>,
|
|
190
|
+
origin: Origin,
|
|
191
|
+
guid: Bytes32,
|
|
192
|
+
message: ByteArray,
|
|
193
|
+
executor: ContractAddress,
|
|
194
|
+
value: u256,
|
|
195
|
+
extra_data: ByteArray,
|
|
196
|
+
) {
|
|
197
|
+
// Ensures that only the endpoint can attempt to lzReceive() messages to this OApp
|
|
198
|
+
self._assert_only_endpoint();
|
|
199
|
+
|
|
200
|
+
// Ensure that the sender matches the expected peer for the source endpoint
|
|
201
|
+
let expected_peer = self._get_peer_or_revert(origin.src_eid);
|
|
202
|
+
assert_with_byte_array(
|
|
203
|
+
expected_peer == origin.sender, err_only_peer(origin.src_eid, origin.sender),
|
|
204
|
+
);
|
|
205
|
+
|
|
206
|
+
// Call the internal OApp implementation of lzReceive
|
|
207
|
+
OAppHooks::_lz_receive(ref self, origin, guid, message, executor, value, extra_data);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
fn allow_initialize_path(self: @ComponentState<TContractState>, origin: Origin) -> bool {
|
|
211
|
+
OAppHooks::_allow_initialize_path(self, origin)
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
fn next_nonce(self: @ComponentState<TContractState>, src_eid: u32, sender: Bytes32) -> u64 {
|
|
215
|
+
OAppHooks::_next_nonce(self, src_eid, sender)
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
#[embeddable_as(OAppReceiverImpl)]
|
|
220
|
+
impl IOAppReceiver<
|
|
221
|
+
TContractState, +HasComponent<TContractState>, impl OAppHooks: IOAppHooks<TContractState>,
|
|
222
|
+
> of crate::oapps::oapp::interface::IOAppReceiver<ComponentState<TContractState>> {
|
|
223
|
+
fn is_compose_msg_sender(
|
|
224
|
+
self: @ComponentState<TContractState>,
|
|
225
|
+
origin: Origin,
|
|
226
|
+
message: ByteArray,
|
|
227
|
+
sender: ContractAddress,
|
|
228
|
+
) -> bool {
|
|
229
|
+
OAppHooks::_is_compose_msg_sender(self, origin, message, sender)
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
/// =============================== OApp Sender Functions =================================
|
|
235
|
+
#[generate_trait]
|
|
236
|
+
pub impl OAppSenderImpl<
|
|
237
|
+
TContractState,
|
|
238
|
+
+HasComponent<TContractState>,
|
|
239
|
+
impl Ownable: OwnableComponent::HasComponent<TContractState>,
|
|
240
|
+
> of OAppSender<TContractState> {
|
|
241
|
+
/// Quotes the fee for sending a message to a destination endpoint
|
|
242
|
+
///
|
|
243
|
+
/// # Arguments
|
|
244
|
+
///
|
|
245
|
+
/// * `dst_eid`: The destination endpoint ID
|
|
246
|
+
/// * `message`: The message payload to be sent
|
|
247
|
+
/// * `options`: Additional options for the message transmission
|
|
248
|
+
/// * `pay_in_lz_token`: Flag indicating whether to pay the fee in LZ tokens
|
|
249
|
+
///
|
|
250
|
+
/// # Returns
|
|
251
|
+
///
|
|
252
|
+
/// * `MessagingFee`: The calculated fee structure for the message
|
|
253
|
+
fn _quote(
|
|
254
|
+
self: @ComponentState<TContractState>,
|
|
255
|
+
dst_eid: u32,
|
|
256
|
+
message: ByteArray,
|
|
257
|
+
options: ByteArray,
|
|
258
|
+
pay_in_lz_token: bool,
|
|
259
|
+
) -> MessagingFee {
|
|
260
|
+
let receiver = self._get_peer_or_revert(dst_eid);
|
|
261
|
+
let params = MessagingParams { dst_eid, receiver, message, options, pay_in_lz_token };
|
|
262
|
+
let sender = get_contract_address();
|
|
263
|
+
let endpoint = self.OAppCore_endpoint.read();
|
|
264
|
+
let endpoint_dispatcher = IEndpointDispatcher { contract_address: endpoint };
|
|
265
|
+
endpoint_dispatcher.quote(params, sender)
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/// Sends a message through the LayerZero endpoint to a destination chain
|
|
269
|
+
///
|
|
270
|
+
/// # Arguments
|
|
271
|
+
///
|
|
272
|
+
/// * `dst_eid`: The destination endpoint ID
|
|
273
|
+
/// * `message`: The message payload to be sent
|
|
274
|
+
/// * `options`: Additional options for the message transmission
|
|
275
|
+
/// * `fee`: The messaging fee structure containing native and LZ token fees
|
|
276
|
+
/// * `refund_address`: Address to receive any excess fees
|
|
277
|
+
///
|
|
278
|
+
/// # Returns
|
|
279
|
+
///
|
|
280
|
+
/// * `MessageReceipt`: Receipt containing transaction details and message information
|
|
281
|
+
fn _lz_send(
|
|
282
|
+
ref self: ComponentState<TContractState>,
|
|
283
|
+
dst_eid: u32,
|
|
284
|
+
message: ByteArray,
|
|
285
|
+
options: ByteArray,
|
|
286
|
+
fee: MessagingFee,
|
|
287
|
+
refund_address: ContractAddress,
|
|
288
|
+
) -> MessageReceipt {
|
|
289
|
+
let caller = get_caller_address();
|
|
290
|
+
let contract_address = get_contract_address();
|
|
291
|
+
let endpoint = self.OAppCore_endpoint.read();
|
|
292
|
+
self._pay_native(caller, endpoint, contract_address, fee.native_fee);
|
|
293
|
+
if fee.lz_token_fee > 0 {
|
|
294
|
+
self._pay_lz_token(caller, endpoint, contract_address, fee.lz_token_fee);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
let endpoint_dispatcher = IEndpointDispatcher { contract_address: endpoint };
|
|
298
|
+
|
|
299
|
+
endpoint_dispatcher
|
|
300
|
+
.send(
|
|
301
|
+
MessagingParams {
|
|
302
|
+
dst_eid,
|
|
303
|
+
receiver: self._get_peer_or_revert(dst_eid),
|
|
304
|
+
message,
|
|
305
|
+
options,
|
|
306
|
+
pay_in_lz_token: fee.lz_token_fee > 0,
|
|
307
|
+
},
|
|
308
|
+
refund_address,
|
|
309
|
+
)
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/// Handles payment of native token fees for message transmission
|
|
313
|
+
///
|
|
314
|
+
/// # Arguments
|
|
315
|
+
///
|
|
316
|
+
/// * `caller`: The address making the payment
|
|
317
|
+
/// * `endpoint`: The LayerZero endpoint address
|
|
318
|
+
/// * `contract_address`: This contract's address
|
|
319
|
+
/// * `fee`: The amount of native tokens to pay
|
|
320
|
+
fn _pay_native(
|
|
321
|
+
self: @ComponentState<TContractState>,
|
|
322
|
+
caller: ContractAddress,
|
|
323
|
+
endpoint: ContractAddress,
|
|
324
|
+
contract_address: ContractAddress,
|
|
325
|
+
fee: u256,
|
|
326
|
+
) {
|
|
327
|
+
let native_token_address = self.OAppCore_native_token.read();
|
|
328
|
+
// Check if enough native fee is sent
|
|
329
|
+
let native_token_dispatcher = IERC20Dispatcher {
|
|
330
|
+
contract_address: native_token_address,
|
|
331
|
+
};
|
|
332
|
+
let balance = native_token_dispatcher.balance_of(caller);
|
|
333
|
+
assert_with_byte_array(balance >= fee, err_not_enough_native(fee, balance));
|
|
334
|
+
let allowance = native_token_dispatcher.allowance(caller, contract_address);
|
|
335
|
+
assert_with_byte_array(
|
|
336
|
+
allowance >= fee, err_not_enough_native_allowance(fee, allowance),
|
|
337
|
+
);
|
|
338
|
+
|
|
339
|
+
self._pay_in_token(caller, endpoint, contract_address, fee, native_token_address);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/// Handles payment of LayerZero token fees for message transmission
|
|
343
|
+
///
|
|
344
|
+
/// # Arguments
|
|
345
|
+
///
|
|
346
|
+
/// * `caller`: The address making the payment
|
|
347
|
+
/// * `endpoint`: The LayerZero endpoint address
|
|
348
|
+
/// * `contract_address`: This contract's address
|
|
349
|
+
/// * `fee`: The amount of LZ tokens to pay
|
|
350
|
+
fn _pay_lz_token(
|
|
351
|
+
self: @ComponentState<TContractState>,
|
|
352
|
+
caller: ContractAddress,
|
|
353
|
+
endpoint: ContractAddress,
|
|
354
|
+
contract_address: ContractAddress,
|
|
355
|
+
fee: u256,
|
|
356
|
+
) {
|
|
357
|
+
let endpoint_dispatcher = IEndpointDispatcher { contract_address: endpoint };
|
|
358
|
+
let lz_token_address = endpoint_dispatcher.get_lz_token();
|
|
359
|
+
assert_with_byte_array(lz_token_address != Zero::zero(), err_lz_token_unavailable());
|
|
360
|
+
|
|
361
|
+
// Check if enough lz token fee is sent
|
|
362
|
+
let lz_dispatcher = IERC20Dispatcher { contract_address: lz_token_address };
|
|
363
|
+
let balance = lz_dispatcher.balance_of(caller);
|
|
364
|
+
assert_with_byte_array(balance >= fee, err_not_enough_lz_token(fee, balance));
|
|
365
|
+
let allowance = lz_dispatcher.allowance(caller, contract_address);
|
|
366
|
+
assert_with_byte_array(
|
|
367
|
+
allowance >= fee, err_not_enough_lz_token_allowance(fee, allowance),
|
|
368
|
+
);
|
|
369
|
+
self._pay_in_token(caller, endpoint, contract_address, fee, lz_token_address);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/// Internal function responsible for transferring tokens from caller to OApp
|
|
373
|
+
/// and approving the endpoint to spend the tokens
|
|
374
|
+
///
|
|
375
|
+
/// # Arguments
|
|
376
|
+
///
|
|
377
|
+
/// * `caller`: The address making the payment
|
|
378
|
+
/// * `endpoint`: The LayerZero endpoint address that needs approval
|
|
379
|
+
/// * `contract_address`: This contract's address (recipient of the transfer)
|
|
380
|
+
/// * `fee`: The amount of tokens to transfer and approve
|
|
381
|
+
/// * `token_address`: The address of the token contract
|
|
382
|
+
fn _pay_in_token(
|
|
383
|
+
self: @ComponentState<TContractState>,
|
|
384
|
+
caller: ContractAddress,
|
|
385
|
+
endpoint: ContractAddress,
|
|
386
|
+
contract_address: ContractAddress,
|
|
387
|
+
fee: u256,
|
|
388
|
+
token_address: ContractAddress,
|
|
389
|
+
) {
|
|
390
|
+
let token_dispatcher = IERC20Dispatcher { contract_address: token_address };
|
|
391
|
+
token_dispatcher.transfer_from(caller, contract_address, fee);
|
|
392
|
+
token_dispatcher.approve(endpoint, fee);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/// =============================== Internal Functions =================================
|
|
397
|
+
#[generate_trait]
|
|
398
|
+
pub impl InternalImpl<
|
|
399
|
+
TContractState,
|
|
400
|
+
+HasComponent<TContractState>,
|
|
401
|
+
impl Ownable: OwnableComponent::HasComponent<TContractState>,
|
|
402
|
+
> of InternalTrait<TContractState> {
|
|
403
|
+
/// Initialize the OApp component with the LayerZero endpoint address
|
|
404
|
+
/// This should be called during contract deployment
|
|
405
|
+
///
|
|
406
|
+
/// # Arguments
|
|
407
|
+
///
|
|
408
|
+
/// * `endpoint`: The LayerZero endpoint contract address
|
|
409
|
+
fn initializer(
|
|
410
|
+
ref self: ComponentState<TContractState>,
|
|
411
|
+
endpoint: ContractAddress,
|
|
412
|
+
native_token: ContractAddress,
|
|
413
|
+
) {
|
|
414
|
+
self.OAppCore_endpoint.write(endpoint);
|
|
415
|
+
self.OAppCore_native_token.write(native_token);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/// Restricts function access to only the LayerZero endpoint contract
|
|
419
|
+
/// Used to ensure that only the endpoint can call certain functions like lz_receive
|
|
420
|
+
fn _assert_only_endpoint(self: @ComponentState<TContractState>) {
|
|
421
|
+
let caller = get_caller_address();
|
|
422
|
+
let endpoint = self.OAppCore_endpoint.read();
|
|
423
|
+
assert_with_byte_array(caller == endpoint, err_only_endpoint(endpoint));
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/// Restricts function access to only the contract owner
|
|
427
|
+
/// Delegates to the OpenZeppelin Ownable component for ownership checks
|
|
428
|
+
fn _assert_only_owner(self: @ComponentState<TContractState>) {
|
|
429
|
+
get_dep_component!(self, Ownable).assert_only_owner();
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/// Internal function to get the peer address associated with a specific endpoint
|
|
433
|
+
/// Reverts if the peer is not set (i.e. the peer is set to Bytes32 { value: 0 })
|
|
434
|
+
///
|
|
435
|
+
/// # Arguments
|
|
436
|
+
///
|
|
437
|
+
/// * `eid`: The endpoint ID to look up
|
|
438
|
+
///
|
|
439
|
+
/// # Returns
|
|
440
|
+
///
|
|
441
|
+
/// * `Bytes32`: The peer address associated with the specified endpoint
|
|
442
|
+
fn _get_peer_or_revert(self: @ComponentState<TContractState>, eid: u32) -> Bytes32 {
|
|
443
|
+
let peer = self.OAppCore_peers.entry(eid).read();
|
|
444
|
+
assert_with_byte_array(peer.value != 0, err_no_peer(eid));
|
|
445
|
+
peer
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
//! OFT errors
|
|
2
|
+
|
|
3
|
+
use lz_utils::error::{Error, format_error};
|
|
4
|
+
|
|
5
|
+
#[derive(Drop)]
|
|
6
|
+
pub enum OFTCoreError {
|
|
7
|
+
InvalidLocalDecimals,
|
|
8
|
+
SlippageExceeded,
|
|
9
|
+
AmountSDOverflowed,
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
impl ErrorNameImpl of Error<OFTCoreError> {
|
|
13
|
+
fn prefix() -> ByteArray {
|
|
14
|
+
"LZ_OFT_CORE"
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
fn name(self: OFTCoreError) -> ByteArray {
|
|
18
|
+
match self {
|
|
19
|
+
OFTCoreError::InvalidLocalDecimals => "INVALID_LOCAL_DECIMALS",
|
|
20
|
+
OFTCoreError::SlippageExceeded => "SLIPPAGE_EXCEEDED",
|
|
21
|
+
OFTCoreError::AmountSDOverflowed => "AMOUNT_SD_OVERFLOWED",
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
pub fn err_invalid_local_decimals(local_decimals: u8, shared_decimals: u8) -> ByteArray {
|
|
27
|
+
format_error(
|
|
28
|
+
OFTCoreError::InvalidLocalDecimals,
|
|
29
|
+
format!("local_decimals: {}, shared_decimals: {}", local_decimals, shared_decimals),
|
|
30
|
+
)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
pub fn err_slippage_exceeded(amount_received_ld: u256, min_amount_ld: u256) -> ByteArray {
|
|
34
|
+
format_error(
|
|
35
|
+
OFTCoreError::SlippageExceeded,
|
|
36
|
+
format!("amount_received_ld: {}, min_amount_ld: {}", amount_received_ld, min_amount_ld),
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
pub fn err_amount_sd_overflowed(amount_sd: u256) -> ByteArray {
|
|
41
|
+
format_error(OFTCoreError::AmountSDOverflowed, format!("amount_sd: {}", amount_sd))
|
|
42
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
//! OFT events
|
|
2
|
+
|
|
3
|
+
use lz_utils::bytes::Bytes32;
|
|
4
|
+
use starknet::ContractAddress;
|
|
5
|
+
|
|
6
|
+
#[derive(Drop, starknet::Event)]
|
|
7
|
+
pub struct OFTSent {
|
|
8
|
+
#[key]
|
|
9
|
+
pub guid: Bytes32,
|
|
10
|
+
#[key]
|
|
11
|
+
pub dst_eid: u32,
|
|
12
|
+
#[key]
|
|
13
|
+
pub from: ContractAddress,
|
|
14
|
+
pub amount_sent_ld: u256,
|
|
15
|
+
pub amount_received_ld: u256,
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
#[derive(Drop, starknet::Event)]
|
|
19
|
+
pub struct OFTReceived {
|
|
20
|
+
#[key]
|
|
21
|
+
pub guid: Bytes32,
|
|
22
|
+
#[key]
|
|
23
|
+
pub src_eid: u32,
|
|
24
|
+
#[key]
|
|
25
|
+
pub to: ContractAddress,
|
|
26
|
+
pub amount_received_ld: u256,
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
#[derive(Drop, starknet::Event)]
|
|
30
|
+
pub struct MsgInspectorSet {
|
|
31
|
+
#[key]
|
|
32
|
+
pub msg_inspector: ContractAddress,
|
|
33
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
//! OFT interface
|
|
2
|
+
|
|
3
|
+
use starknet::ContractAddress;
|
|
4
|
+
use crate::common::structs::messaging::MessagingFee;
|
|
5
|
+
use crate::oapps::oft::structs::{OFTQuote, OFTSendResult, OFTVersion, SendParam};
|
|
6
|
+
|
|
7
|
+
/// IOFT defines the complete interface for Omnichain Fungible Token communication.
|
|
8
|
+
/// This interface provides comprehensive OFT functionality including quotes, limits, and receipts.
|
|
9
|
+
#[starknet::interface]
|
|
10
|
+
pub trait IOFT<TContractState> {
|
|
11
|
+
/// Retrieves interfaceID and the version of the OFT.
|
|
12
|
+
///
|
|
13
|
+
/// Returns:
|
|
14
|
+
/// - OFTVersion: Contains interface_id and version
|
|
15
|
+
///
|
|
16
|
+
/// The interface ID is '1' and version indicates onchain interface version.
|
|
17
|
+
/// The version is 1 and indicates cross-chain compatibility.
|
|
18
|
+
fn oft_version(self: @TContractState) -> OFTVersion;
|
|
19
|
+
|
|
20
|
+
/// Retrieves the address of the token associated with the OFT.
|
|
21
|
+
///
|
|
22
|
+
/// Returns the address of the ERC20 token implementation.
|
|
23
|
+
fn token(self: @TContractState) -> ContractAddress;
|
|
24
|
+
|
|
25
|
+
/// Indicates whether the OFT contract requires approval of the 'token()' to send.
|
|
26
|
+
///
|
|
27
|
+
/// Returns true if approval of the underlying token implementation is required.
|
|
28
|
+
/// Allows things like wallet implementers to determine integration requirements.
|
|
29
|
+
fn approval_required(self: @TContractState) -> bool;
|
|
30
|
+
|
|
31
|
+
/// Retrieves the shared decimals of the OFT.
|
|
32
|
+
///
|
|
33
|
+
/// Returns the shared decimals of the OFT.
|
|
34
|
+
fn shared_decimals(self: @TContractState) -> u8;
|
|
35
|
+
|
|
36
|
+
/// Retrieves the decimal conversion rate of the OFT.
|
|
37
|
+
///
|
|
38
|
+
/// Returns the decimal conversion rate of the OFT.
|
|
39
|
+
fn decimal_conversion_rate(self: @TContractState) -> u256;
|
|
40
|
+
|
|
41
|
+
/// Retrieves the address of the msg inspector.
|
|
42
|
+
///
|
|
43
|
+
/// Returns the address of the msg inspector.
|
|
44
|
+
fn msg_inspector(self: @TContractState) -> ContractAddress;
|
|
45
|
+
|
|
46
|
+
/// Sets the address of the msg inspector.
|
|
47
|
+
///
|
|
48
|
+
/// Args:
|
|
49
|
+
/// - `msg_inspector`: The address of the msg inspector
|
|
50
|
+
fn set_msg_inspector(ref self: TContractState, msg_inspector: ContractAddress);
|
|
51
|
+
|
|
52
|
+
/// Provides a quote for OFT-related operations.
|
|
53
|
+
///
|
|
54
|
+
/// Args:
|
|
55
|
+
/// - `send_param`: The parameters for the send operation
|
|
56
|
+
///
|
|
57
|
+
/// Returns:
|
|
58
|
+
/// - OFTQuote: Contains limit, oft_fee_details, and receipt
|
|
59
|
+
fn quote_oft(self: @TContractState, send_param: SendParam) -> OFTQuote;
|
|
60
|
+
|
|
61
|
+
/// Provides a quote for the send() operation.
|
|
62
|
+
///
|
|
63
|
+
/// Args:
|
|
64
|
+
/// - `send_param`: The parameters for the send() operation
|
|
65
|
+
/// - `pay_in_lz_token`: Flag indicating whether the caller is paying in the LZ token
|
|
66
|
+
///
|
|
67
|
+
/// Returns the calculated LayerZero messaging fee from the send() operation.
|
|
68
|
+
fn quote_send(
|
|
69
|
+
self: @TContractState, send_param: SendParam, pay_in_lz_token: bool,
|
|
70
|
+
) -> MessagingFee;
|
|
71
|
+
|
|
72
|
+
/// Executes the send() operation.
|
|
73
|
+
///
|
|
74
|
+
/// Args:
|
|
75
|
+
/// - `send_param`: The parameters for the send operation
|
|
76
|
+
/// - `fee`: The fee information supplied by the caller
|
|
77
|
+
/// - `refund_address`: The address to receive any excess funds from fees etc. on the src
|
|
78
|
+
///
|
|
79
|
+
/// Returns:
|
|
80
|
+
/// - OFTSendResult: Contains message_receipt and oft_receipt
|
|
81
|
+
fn send(
|
|
82
|
+
ref self: TContractState,
|
|
83
|
+
send_param: SendParam,
|
|
84
|
+
fee: MessagingFee,
|
|
85
|
+
refund_address: ContractAddress,
|
|
86
|
+
) -> OFTSendResult;
|
|
87
|
+
}
|