@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,32 @@
|
|
|
1
|
+
//! Executor events
|
|
2
|
+
|
|
3
|
+
use starknet::ContractAddress;
|
|
4
|
+
use crate::Origin;
|
|
5
|
+
use crate::workers::executor::structs::{NativeDropParams, SetDstConfigParams};
|
|
6
|
+
|
|
7
|
+
/// Emitted when a destination configuration is set or updated.
|
|
8
|
+
/// @dev Triggered by the `set_dst_config` function.
|
|
9
|
+
#[derive(Drop, starknet::Event)]
|
|
10
|
+
pub struct DstConfigSet {
|
|
11
|
+
/// The destination configurations that were set.
|
|
12
|
+
pub dst_config_set: Span<SetDstConfigParams>,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/// Emitted when a native token drop is applied.
|
|
16
|
+
/// @dev Triggered by the `_apply_native_drop` internal function.
|
|
17
|
+
#[derive(Drop, starknet::Event)]
|
|
18
|
+
pub struct NativeDropApplied {
|
|
19
|
+
/// The origin information of the message.
|
|
20
|
+
#[key]
|
|
21
|
+
pub origin: Origin,
|
|
22
|
+
/// The destination endpoint ID.
|
|
23
|
+
#[key]
|
|
24
|
+
pub dst_eid: u32,
|
|
25
|
+
/// The OApp that received the native drop.
|
|
26
|
+
#[key]
|
|
27
|
+
pub oapp: ContractAddress,
|
|
28
|
+
/// The parameters for the native drop.
|
|
29
|
+
pub native_drop_params: Array<NativeDropParams>,
|
|
30
|
+
/// An array indicating the success of each native drop.
|
|
31
|
+
pub success: Array<bool>,
|
|
32
|
+
}
|
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
//! Executor contract
|
|
2
|
+
|
|
3
|
+
/// # Executor contract
|
|
4
|
+
///
|
|
5
|
+
/// This contract is responsible for executing LayerZero messages and native token drops.
|
|
6
|
+
/// It also provides a quote function for the worker to use when assigning a job.
|
|
7
|
+
#[starknet::contract]
|
|
8
|
+
pub mod Executor {
|
|
9
|
+
use core::num::traits::Zero;
|
|
10
|
+
use openzeppelin::access::accesscontrol::AccessControlComponent;
|
|
11
|
+
use openzeppelin::access::ownable::OwnableComponent;
|
|
12
|
+
use openzeppelin::introspection::src5::SRC5Component;
|
|
13
|
+
use openzeppelin::security::ReentrancyGuardComponent;
|
|
14
|
+
use openzeppelin::security::pausable::PausableComponent;
|
|
15
|
+
use openzeppelin::token::erc20::interface::{
|
|
16
|
+
IERC20Dispatcher, IERC20DispatcherTrait, IERC20SafeDispatcher, IERC20SafeDispatcherTrait,
|
|
17
|
+
};
|
|
18
|
+
use openzeppelin::upgrades::upgradeable::UpgradeableComponent;
|
|
19
|
+
use starknet::storage::{
|
|
20
|
+
Map, StorageMapReadAccess, StorageMapWriteAccess, StoragePointerReadAccess,
|
|
21
|
+
StoragePointerWriteAccess,
|
|
22
|
+
};
|
|
23
|
+
use starknet::{ClassHash, ContractAddress};
|
|
24
|
+
use starkware_utils::errors::assert_with_byte_array;
|
|
25
|
+
use crate::Origin;
|
|
26
|
+
use crate::common::conversions::FeltArrayIntoByteArrayImpl;
|
|
27
|
+
use crate::endpoint::interfaces::endpoint::{
|
|
28
|
+
IEndpointDispatcher, IEndpointDispatcherTrait, IEndpointSafeDispatcher,
|
|
29
|
+
IEndpointSafeDispatcherTrait,
|
|
30
|
+
};
|
|
31
|
+
use crate::endpoint::messaging_composer::interface::{
|
|
32
|
+
IMessagingComposerSafeDispatcher, IMessagingComposerSafeDispatcherTrait,
|
|
33
|
+
};
|
|
34
|
+
use crate::workers::base::base::WorkerBaseComponent;
|
|
35
|
+
use crate::workers::base::structs::QuoteParams;
|
|
36
|
+
use crate::workers::executor::errors;
|
|
37
|
+
use crate::workers::executor::events::{DstConfigSet, NativeDropApplied};
|
|
38
|
+
use crate::workers::executor::fee_lib::interface::{
|
|
39
|
+
FeeParams, IExecutorFeeLibDispatcher, IExecutorFeeLibDispatcherTrait,
|
|
40
|
+
};
|
|
41
|
+
use crate::workers::executor::interface::IExecutor;
|
|
42
|
+
use crate::workers::executor::structs::{
|
|
43
|
+
ComposeParams, DstConfig, ExecuteParams, NativeDropParams, SetDstConfigParams,
|
|
44
|
+
};
|
|
45
|
+
use crate::workers::interface::ILayerZeroWorker;
|
|
46
|
+
|
|
47
|
+
////////////////
|
|
48
|
+
// Components //
|
|
49
|
+
////////////////
|
|
50
|
+
|
|
51
|
+
// Base worker component
|
|
52
|
+
component!(path: WorkerBaseComponent, storage: worker_base, event: WorkerBaseEvent);
|
|
53
|
+
|
|
54
|
+
// Access control components
|
|
55
|
+
component!(path: AccessControlComponent, storage: access_control, event: AccessControlEvent);
|
|
56
|
+
component!(path: SRC5Component, storage: src5, event: SRC5Event);
|
|
57
|
+
|
|
58
|
+
// Upgradeable component
|
|
59
|
+
component!(path: UpgradeableComponent, storage: upgradeable, event: UpgradeableEvent);
|
|
60
|
+
|
|
61
|
+
/// Declares the reentrancy guard component which provides:
|
|
62
|
+
/// - Reentrancy guard to prevent reentrancy attacks during transaction execution,
|
|
63
|
+
/// similar to the nonReentrant modifier in EVM implementations
|
|
64
|
+
component!(
|
|
65
|
+
path: ReentrancyGuardComponent, storage: reentrancy_guard, event: ReentrancyGuardEvent,
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
// Pausable component
|
|
69
|
+
component!(path: PausableComponent, storage: pausable, event: PausableEvent);
|
|
70
|
+
|
|
71
|
+
// Ownable component
|
|
72
|
+
component!(path: OwnableComponent, storage: ownable, event: OwnableEvent);
|
|
73
|
+
|
|
74
|
+
////////////////
|
|
75
|
+
// Embeddings //
|
|
76
|
+
////////////////
|
|
77
|
+
|
|
78
|
+
#[abi(embed_v0)]
|
|
79
|
+
impl WorkerBaseImpl = WorkerBaseComponent::WorkerBaseImpl<ContractState>;
|
|
80
|
+
impl WorkerBaseInternalImpl = WorkerBaseComponent::InternalImpl<ContractState>;
|
|
81
|
+
|
|
82
|
+
#[abi(embed_v0)]
|
|
83
|
+
impl AccessControlImpl = WorkerBaseComponent::AccessControlImpl<ContractState>;
|
|
84
|
+
impl AccessControlInternalImpl = AccessControlComponent::InternalImpl<ContractState>;
|
|
85
|
+
|
|
86
|
+
#[abi(embed_v0)]
|
|
87
|
+
impl PausableImpl = PausableComponent::PausableImpl<ContractState>;
|
|
88
|
+
|
|
89
|
+
/// Upgradeable component internal implementation
|
|
90
|
+
impl UpgradeableInternalImpl = UpgradeableComponent::InternalImpl<ContractState>;
|
|
91
|
+
|
|
92
|
+
/// Implements the reentrancy guard component which provides:
|
|
93
|
+
/// - Reentrancy guard to prevent reentrancy attacks during transaction execution,
|
|
94
|
+
/// similar to the nonReentrant modifier in EVM implementations
|
|
95
|
+
impl ReentrancyGuardInternalImpl = ReentrancyGuardComponent::InternalImpl<ContractState>;
|
|
96
|
+
|
|
97
|
+
#[abi(embed_v0)]
|
|
98
|
+
impl OwnableImpl = OwnableComponent::OwnableImpl<ContractState>;
|
|
99
|
+
impl OwnableInternalImpl = OwnableComponent::InternalImpl<ContractState>;
|
|
100
|
+
|
|
101
|
+
#[storage]
|
|
102
|
+
struct Storage {
|
|
103
|
+
#[substorage(v0)]
|
|
104
|
+
worker_base: WorkerBaseComponent::Storage,
|
|
105
|
+
#[substorage(v0)]
|
|
106
|
+
reentrancy_guard: ReentrancyGuardComponent::Storage,
|
|
107
|
+
#[substorage(v0)]
|
|
108
|
+
access_control: AccessControlComponent::Storage,
|
|
109
|
+
#[substorage(v0)]
|
|
110
|
+
src5: SRC5Component::Storage,
|
|
111
|
+
#[substorage(v0)]
|
|
112
|
+
pausable: PausableComponent::Storage,
|
|
113
|
+
#[substorage(v0)]
|
|
114
|
+
upgradeable: UpgradeableComponent::Storage,
|
|
115
|
+
#[substorage(v0)]
|
|
116
|
+
ownable: OwnableComponent::Storage,
|
|
117
|
+
/// A map of destination endpoint IDs to their configurations.
|
|
118
|
+
dst_configs: Map<u32, DstConfig>,
|
|
119
|
+
/// The address of the LayerZero Endpoint contract.
|
|
120
|
+
endpoint: ContractAddress,
|
|
121
|
+
/// The address of the native token contract.
|
|
122
|
+
native_token_address: ContractAddress,
|
|
123
|
+
/// The endpoint ID of the current chain.
|
|
124
|
+
eid: u32,
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
#[event]
|
|
128
|
+
#[derive(Drop, starknet::Event)]
|
|
129
|
+
pub enum Event {
|
|
130
|
+
#[flat]
|
|
131
|
+
WorkerBaseEvent: WorkerBaseComponent::Event,
|
|
132
|
+
#[flat]
|
|
133
|
+
ReentrancyGuardEvent: ReentrancyGuardComponent::Event,
|
|
134
|
+
#[flat]
|
|
135
|
+
AccessControlEvent: AccessControlComponent::Event,
|
|
136
|
+
#[flat]
|
|
137
|
+
SRC5Event: SRC5Component::Event,
|
|
138
|
+
#[flat]
|
|
139
|
+
UpgradeableEvent: UpgradeableComponent::Event,
|
|
140
|
+
#[flat]
|
|
141
|
+
PausableEvent: PausableComponent::Event,
|
|
142
|
+
#[flat]
|
|
143
|
+
OwnableEvent: OwnableComponent::Event,
|
|
144
|
+
/// Executor-specific events
|
|
145
|
+
DstConfigSet: DstConfigSet,
|
|
146
|
+
NativeDropApplied: NativeDropApplied,
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
#[constructor]
|
|
150
|
+
fn constructor(
|
|
151
|
+
ref self: ContractState,
|
|
152
|
+
endpoint: ContractAddress,
|
|
153
|
+
message_libs: Array<ContractAddress>,
|
|
154
|
+
price_feed: ContractAddress,
|
|
155
|
+
default_multiplier_bps: u16,
|
|
156
|
+
role_admin: ContractAddress,
|
|
157
|
+
admins: Array<ContractAddress>,
|
|
158
|
+
native_token_address: ContractAddress,
|
|
159
|
+
owner: ContractAddress,
|
|
160
|
+
) {
|
|
161
|
+
self.eid.write(IEndpointDispatcher { contract_address: endpoint }.get_eid());
|
|
162
|
+
|
|
163
|
+
// Initialize access control and ownable components
|
|
164
|
+
self.ownable.initializer(owner);
|
|
165
|
+
self.access_control.initializer();
|
|
166
|
+
|
|
167
|
+
// Initialize base worker
|
|
168
|
+
self
|
|
169
|
+
.worker_base
|
|
170
|
+
.initializer(message_libs, price_feed, default_multiplier_bps, role_admin, admins);
|
|
171
|
+
|
|
172
|
+
// Initialize addresses
|
|
173
|
+
self.endpoint.write(endpoint);
|
|
174
|
+
self.native_token_address.write(native_token_address);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
#[abi(embed_v0)]
|
|
178
|
+
impl ExecutorImpl of IExecutor<ContractState> {
|
|
179
|
+
// ================================== Only Owner =====================================
|
|
180
|
+
|
|
181
|
+
fn upgrade(ref self: ContractState, new_class_hash: ClassHash) {
|
|
182
|
+
self.ownable.assert_only_owner();
|
|
183
|
+
self.upgradeable.upgrade(new_class_hash);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
fn upgrade_and_call(
|
|
187
|
+
ref self: ContractState,
|
|
188
|
+
new_class_hash: ClassHash,
|
|
189
|
+
selector: felt252,
|
|
190
|
+
calldata: Span<felt252>,
|
|
191
|
+
) -> Span<felt252> {
|
|
192
|
+
self.ownable.assert_only_owner();
|
|
193
|
+
self.upgradeable.upgrade_and_call(new_class_hash, selector, calldata)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// ================================== Only Admin =====================================
|
|
197
|
+
|
|
198
|
+
fn set_dst_config(ref self: ContractState, params: Array<SetDstConfigParams>) {
|
|
199
|
+
self.worker_base._assert_only_admin();
|
|
200
|
+
|
|
201
|
+
let dst_config_set = params.span();
|
|
202
|
+
for param in params.into_iter() {
|
|
203
|
+
self.dst_configs.write(param.dst_eid, param.config);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
self.emit(DstConfigSet { dst_config_set });
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
fn execute(ref self: ContractState, params: ExecuteParams) {
|
|
210
|
+
self.worker_base._assert_only_admin();
|
|
211
|
+
self.reentrancy_guard.start();
|
|
212
|
+
self._execute(params);
|
|
213
|
+
self.reentrancy_guard.end();
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
fn compose(ref self: ContractState, params: ComposeParams) {
|
|
217
|
+
self.worker_base._assert_only_admin();
|
|
218
|
+
self.reentrancy_guard.start();
|
|
219
|
+
self._compose(params);
|
|
220
|
+
self.reentrancy_guard.end();
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
fn native_drop(
|
|
224
|
+
ref self: ContractState,
|
|
225
|
+
origin: Origin,
|
|
226
|
+
oapp: ContractAddress,
|
|
227
|
+
native_drop_params: Array<NativeDropParams>,
|
|
228
|
+
) {
|
|
229
|
+
self.worker_base._assert_only_admin();
|
|
230
|
+
self._native_drop(origin, oapp, native_drop_params);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
fn native_drop_and_execute(
|
|
234
|
+
ref self: ContractState,
|
|
235
|
+
native_drop_params: Array<NativeDropParams>,
|
|
236
|
+
execute_params: ExecuteParams,
|
|
237
|
+
) {
|
|
238
|
+
self.worker_base._assert_only_admin();
|
|
239
|
+
self.reentrancy_guard.start();
|
|
240
|
+
self
|
|
241
|
+
._native_drop(
|
|
242
|
+
execute_params.origin.clone(), execute_params.receiver, native_drop_params,
|
|
243
|
+
);
|
|
244
|
+
self._execute(execute_params);
|
|
245
|
+
self.reentrancy_guard.end();
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// ================================== View ==========================================
|
|
249
|
+
|
|
250
|
+
fn get_dst_config(self: @ContractState, dst_eid: u32) -> DstConfig {
|
|
251
|
+
self.dst_configs.read(dst_eid)
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
#[abi(embed_v0)]
|
|
256
|
+
impl LayerZeroWorkerImpl of ILayerZeroWorker<ContractState> {
|
|
257
|
+
// ================================== Only Message Lib =====================================
|
|
258
|
+
|
|
259
|
+
/// This executor implementation does not require any additional steps beyond providing
|
|
260
|
+
/// the quote when assigning a job
|
|
261
|
+
fn assign_job(ref self: ContractState, params: QuoteParams) -> u256 {
|
|
262
|
+
self.worker_base._assert_not_paused();
|
|
263
|
+
self.worker_base._assert_only_message_lib();
|
|
264
|
+
self.quote(params)
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// ================================== View =====================================
|
|
268
|
+
|
|
269
|
+
fn quote(self: @ContractState, params: QuoteParams) -> u256 {
|
|
270
|
+
self.worker_base._assert_not_paused();
|
|
271
|
+
|
|
272
|
+
let QuoteParams { dst_eid, sender, calldata_size, options, .. } = params;
|
|
273
|
+
|
|
274
|
+
// Assert price feed is set
|
|
275
|
+
let price_feed = self.worker_base.get_price_feed();
|
|
276
|
+
assert_with_byte_array(price_feed.is_non_zero(), errors::err_price_feed_not_set());
|
|
277
|
+
|
|
278
|
+
// Assert worker fee lib is set
|
|
279
|
+
let worker_fee_lib_addr = self.worker_base.get_worker_fee_lib();
|
|
280
|
+
assert_with_byte_array(
|
|
281
|
+
worker_fee_lib_addr.is_non_zero(), errors::err_worker_fee_lib_not_set(),
|
|
282
|
+
);
|
|
283
|
+
|
|
284
|
+
let fee_params = FeeParams {
|
|
285
|
+
price_feed,
|
|
286
|
+
dst_eid,
|
|
287
|
+
sender,
|
|
288
|
+
calldata_size,
|
|
289
|
+
default_multiplier_bps: self.worker_base.get_default_multiplier_bps(),
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
// Call fee lib to get the quote
|
|
293
|
+
let fee_lib = IExecutorFeeLibDispatcher { contract_address: worker_fee_lib_addr };
|
|
294
|
+
fee_lib.get_fee(fee_params, self.dst_configs.read(dst_eid), options)
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
#[generate_trait]
|
|
299
|
+
impl InternalImpl of InternalTrait {
|
|
300
|
+
#[feature("safe_dispatcher")]
|
|
301
|
+
fn _execute(ref self: ContractState, params: ExecuteParams) {
|
|
302
|
+
let ExecuteParams {
|
|
303
|
+
origin, receiver, guid, message, value, extra_data, gas_limit, ..,
|
|
304
|
+
} = params;
|
|
305
|
+
|
|
306
|
+
let endpoint_address = self.endpoint.read();
|
|
307
|
+
|
|
308
|
+
// Sender gives approval to the endpoint for the specified amount
|
|
309
|
+
if value > 0 {
|
|
310
|
+
let token = IERC20Dispatcher { contract_address: self.native_token_address.read() };
|
|
311
|
+
token.approve(endpoint_address, value);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
let endpoint = IEndpointSafeDispatcher { contract_address: endpoint_address };
|
|
315
|
+
if let Err(reason) = endpoint
|
|
316
|
+
.lz_receive(
|
|
317
|
+
origin.clone(), receiver, guid, message.clone(), value, extra_data.clone(),
|
|
318
|
+
) {
|
|
319
|
+
endpoint
|
|
320
|
+
.lz_receive_alert(
|
|
321
|
+
origin, receiver, guid, gas_limit, value, message, extra_data, reason,
|
|
322
|
+
)
|
|
323
|
+
.expect('Alert event emitted');
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
#[feature("safe_dispatcher")]
|
|
328
|
+
fn _native_drop(
|
|
329
|
+
ref self: ContractState,
|
|
330
|
+
origin: Origin,
|
|
331
|
+
oapp: ContractAddress,
|
|
332
|
+
native_drop_params: Array<NativeDropParams>,
|
|
333
|
+
) {
|
|
334
|
+
let mut success = array![];
|
|
335
|
+
|
|
336
|
+
for params in @native_drop_params {
|
|
337
|
+
// Because the OpenZeppelin implementation of ERC-20 reverts with an error or
|
|
338
|
+
// returns `true` always on the `transfer` function call, we need to use the safe
|
|
339
|
+
// dispatcher and check the `Result` values.
|
|
340
|
+
// https://docs.openzeppelin.com/contracts-cairo/1.0.0/erc20#erc20_compatibility
|
|
341
|
+
let result = IERC20SafeDispatcher {
|
|
342
|
+
contract_address: self.native_token_address.read(),
|
|
343
|
+
}
|
|
344
|
+
.transfer(*params.receiver, *params.amount);
|
|
345
|
+
|
|
346
|
+
success.append(result.is_ok());
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
self
|
|
350
|
+
.emit(
|
|
351
|
+
NativeDropApplied {
|
|
352
|
+
origin, dst_eid: self.eid.read(), oapp, native_drop_params, success,
|
|
353
|
+
},
|
|
354
|
+
);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
#[feature("safe_dispatcher")]
|
|
358
|
+
fn _compose(ref self: ContractState, params: ComposeParams) {
|
|
359
|
+
let ComposeParams {
|
|
360
|
+
sender, receiver, guid, index, message, gas_limit, extra_data, value,
|
|
361
|
+
} = params;
|
|
362
|
+
|
|
363
|
+
let endpoint_address = self.endpoint.read();
|
|
364
|
+
|
|
365
|
+
// Sender gives approval to the endpoint for the specified amount
|
|
366
|
+
if value > 0 {
|
|
367
|
+
let token = IERC20Dispatcher { contract_address: self.native_token_address.read() };
|
|
368
|
+
token.approve(endpoint_address, value);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
let composer = IMessagingComposerSafeDispatcher { contract_address: endpoint_address };
|
|
372
|
+
if let Err(reason) = composer
|
|
373
|
+
.lz_compose(
|
|
374
|
+
sender, receiver, guid, index, message.clone(), extra_data.clone(), value,
|
|
375
|
+
) {
|
|
376
|
+
composer
|
|
377
|
+
.lz_compose_alert(
|
|
378
|
+
sender,
|
|
379
|
+
receiver,
|
|
380
|
+
guid,
|
|
381
|
+
index,
|
|
382
|
+
gas_limit,
|
|
383
|
+
value,
|
|
384
|
+
message,
|
|
385
|
+
extra_data,
|
|
386
|
+
reason,
|
|
387
|
+
)
|
|
388
|
+
.expect('Alert event emitted');
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
//! Executor Fee Library contract implementation
|
|
2
|
+
|
|
3
|
+
/// # Executor Fee Library contract
|
|
4
|
+
///
|
|
5
|
+
/// This contract handles fee calculations for executor operations, separated from the main executor
|
|
6
|
+
/// logic to provide modularity and easier maintenance of fee-related functionality.
|
|
7
|
+
#[starknet::contract]
|
|
8
|
+
pub mod ExecutorFeeLib {
|
|
9
|
+
use openzeppelin::access::ownable::OwnableComponent;
|
|
10
|
+
use openzeppelin::token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait};
|
|
11
|
+
use starknet::ContractAddress;
|
|
12
|
+
use starknet::storage::StoragePointerWriteAccess;
|
|
13
|
+
use starkware_utils::errors::assert_with_byte_array;
|
|
14
|
+
use crate::common::constants::MAX_V1_EID;
|
|
15
|
+
use crate::workers::common::{
|
|
16
|
+
apply_premium_and_floor_margin, convert_and_apply_premium_to_value,
|
|
17
|
+
};
|
|
18
|
+
use crate::workers::executor::errors;
|
|
19
|
+
use crate::workers::executor::fee_lib::interface::{FeeParams, IExecutorFeeLib};
|
|
20
|
+
use crate::workers::executor::options::_decode_executor_options;
|
|
21
|
+
use crate::workers::executor::structs::DstConfig;
|
|
22
|
+
use crate::workers::price_feed::interface::{
|
|
23
|
+
ILayerZeroPriceFeedDispatcher, ILayerZeroPriceFeedDispatcherTrait,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
////////////////
|
|
27
|
+
// Components //
|
|
28
|
+
////////////////
|
|
29
|
+
|
|
30
|
+
component!(path: OwnableComponent, storage: ownable, event: OwnableEvent);
|
|
31
|
+
|
|
32
|
+
////////////////
|
|
33
|
+
// Embeddings //
|
|
34
|
+
////////////////
|
|
35
|
+
|
|
36
|
+
#[abi(embed_v0)]
|
|
37
|
+
impl OwnableImpl = OwnableComponent::OwnableImpl<ContractState>;
|
|
38
|
+
impl OwnableInternalImpl = OwnableComponent::InternalImpl<ContractState>;
|
|
39
|
+
|
|
40
|
+
#[storage]
|
|
41
|
+
struct Storage {
|
|
42
|
+
#[substorage(v0)]
|
|
43
|
+
ownable: OwnableComponent::Storage,
|
|
44
|
+
/// Local endpoint ID v2
|
|
45
|
+
local_eid_v2: u32,
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
#[event]
|
|
49
|
+
#[derive(Drop, starknet::Event)]
|
|
50
|
+
pub enum Event {
|
|
51
|
+
#[flat]
|
|
52
|
+
OwnableEvent: OwnableComponent::Event,
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
#[constructor]
|
|
56
|
+
fn constructor(ref self: ContractState, local_eid_v2: u32, owner: ContractAddress) {
|
|
57
|
+
// Initialize ownable component
|
|
58
|
+
self.ownable.initializer(owner);
|
|
59
|
+
|
|
60
|
+
// Set immutable values
|
|
61
|
+
self.local_eid_v2.write(local_eid_v2);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
#[abi(embed_v0)]
|
|
65
|
+
impl ExecutorFeeLibImpl of IExecutorFeeLib<ContractState> {
|
|
66
|
+
// ================================== Only Owner =====================================
|
|
67
|
+
|
|
68
|
+
fn withdraw_token(
|
|
69
|
+
ref self: ContractState,
|
|
70
|
+
token_address: ContractAddress,
|
|
71
|
+
to: ContractAddress,
|
|
72
|
+
amount: u256,
|
|
73
|
+
) {
|
|
74
|
+
self.ownable.assert_only_owner();
|
|
75
|
+
let token_dispatcher = IERC20Dispatcher { contract_address: token_address };
|
|
76
|
+
|
|
77
|
+
// NOTE: (from https://docs.openzeppelin.com/contracts-cairo/1.0.0/erc20)
|
|
78
|
+
// transfer, transfer_from and approve will never return anything different from true
|
|
79
|
+
// because they will revert on any error.
|
|
80
|
+
token_dispatcher.transfer(to, amount);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// ================================== External =====================================
|
|
84
|
+
|
|
85
|
+
fn get_fee_on_send(
|
|
86
|
+
ref self: ContractState, params: FeeParams, dst_config: DstConfig, options: ByteArray,
|
|
87
|
+
) -> u256 {
|
|
88
|
+
self.get_fee(params, dst_config, options)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// ================================== View =====================================
|
|
92
|
+
|
|
93
|
+
fn get_fee(
|
|
94
|
+
self: @ContractState, params: FeeParams, dst_config: DstConfig, options: ByteArray,
|
|
95
|
+
) -> u256 {
|
|
96
|
+
// Check if destination is supported
|
|
97
|
+
assert_with_byte_array(
|
|
98
|
+
dst_config.lz_receive_base_gas != 0, errors::err_eid_not_supported(),
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
// Decode executor options
|
|
102
|
+
let price_feed_params = _decode_executor_options(
|
|
103
|
+
false,
|
|
104
|
+
self._is_v1_eid(params.dst_eid),
|
|
105
|
+
dst_config.lz_receive_base_gas.into(),
|
|
106
|
+
dst_config.lz_compose_base_gas.into(),
|
|
107
|
+
dst_config.native_cap,
|
|
108
|
+
@options,
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
// Get price feed estimate
|
|
112
|
+
let price_feed = ILayerZeroPriceFeedDispatcher { contract_address: params.price_feed };
|
|
113
|
+
let estimated_fee = price_feed
|
|
114
|
+
.estimate_fee_on_send(
|
|
115
|
+
params.dst_eid, params.calldata_size, price_feed_params.total_gas,
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
// Apply premium to gas fee
|
|
119
|
+
let mut fee = apply_premium_and_floor_margin(
|
|
120
|
+
estimated_fee.gas_fee,
|
|
121
|
+
dst_config.multiplier_bps,
|
|
122
|
+
params.default_multiplier_bps,
|
|
123
|
+
dst_config.floor_margin_usd,
|
|
124
|
+
estimated_fee.native_price_usd,
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
// Apply premium to value
|
|
128
|
+
fee +=
|
|
129
|
+
convert_and_apply_premium_to_value(
|
|
130
|
+
price_feed_params.total_value,
|
|
131
|
+
estimated_fee.price_ratio,
|
|
132
|
+
estimated_fee.price_ratio_denominator,
|
|
133
|
+
dst_config.multiplier_bps,
|
|
134
|
+
params.default_multiplier_bps,
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
fee
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
fn version(self: @ContractState) -> (u64, u8) {
|
|
141
|
+
(1, 1)
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
#[generate_trait]
|
|
146
|
+
impl InternalImpl of InternalTrait {
|
|
147
|
+
/// Check if EID is v1 (endpoint v1)
|
|
148
|
+
///
|
|
149
|
+
/// # Arguments
|
|
150
|
+
///
|
|
151
|
+
/// * `eid` - The endpoint ID to check
|
|
152
|
+
///
|
|
153
|
+
/// # Returns
|
|
154
|
+
///
|
|
155
|
+
/// * `bool` - True if the EID is of an endpoint v1, false otherwise
|
|
156
|
+
fn _is_v1_eid(self: @ContractState, eid: u32) -> bool {
|
|
157
|
+
eid < MAX_V1_EID
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
//! Executor Fee Lib interface
|
|
2
|
+
|
|
3
|
+
use starknet::ContractAddress;
|
|
4
|
+
use crate::workers::executor::structs::DstConfig;
|
|
5
|
+
|
|
6
|
+
/// Fee parameters for executor fee calculation
|
|
7
|
+
#[derive(Drop, Clone, Serde)]
|
|
8
|
+
pub struct FeeParams {
|
|
9
|
+
/// The address of the price feed contract
|
|
10
|
+
pub price_feed: ContractAddress,
|
|
11
|
+
/// The destination endpoint ID
|
|
12
|
+
pub dst_eid: u32,
|
|
13
|
+
/// The address of the sender
|
|
14
|
+
pub sender: ContractAddress,
|
|
15
|
+
/// The size of the calldata
|
|
16
|
+
pub calldata_size: u32,
|
|
17
|
+
/// The default multiplier basis points
|
|
18
|
+
pub default_multiplier_bps: u16,
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/// # Executor Fee Library Interface
|
|
22
|
+
///
|
|
23
|
+
/// This interface defines the standard functions for a LayerZero Executor Fee Library.
|
|
24
|
+
///
|
|
25
|
+
/// ## Key Responsibilities
|
|
26
|
+
/// 1. **Fee Calculation:** Calculating the cost of message execution on a destination chain.
|
|
27
|
+
/// The fee is determined by factors such as the destination endpoint ID (EID), the size of the
|
|
28
|
+
/// message payload, and the gas price on the destination chain, which is obtained from a price
|
|
29
|
+
/// feed.
|
|
30
|
+
/// 2. **Versioning:** Exposing its version number to allow for upgrades and compatibility checks.
|
|
31
|
+
///
|
|
32
|
+
/// The fee calculation can be performed in two ways:
|
|
33
|
+
/// - `get_fee`: A view function that returns the fee without any state changes. This is useful for
|
|
34
|
+
/// quoting.
|
|
35
|
+
/// - `get_fee_on_send`: An external function that calculates the fee and may perform state changes,
|
|
36
|
+
/// for example, to record fee-related data.
|
|
37
|
+
#[starknet::interface]
|
|
38
|
+
pub trait IExecutorFeeLib<TContractState> {
|
|
39
|
+
// ================================== Only Owner =====================================
|
|
40
|
+
|
|
41
|
+
/// Withdraws tokens from the fee library.
|
|
42
|
+
/// Enables recovery of funds accidentally sent
|
|
43
|
+
///
|
|
44
|
+
/// # Arguments
|
|
45
|
+
/// * `token_address` - The address of the token to withdraw
|
|
46
|
+
/// * `to` - The address to send the withdrawn tokens to
|
|
47
|
+
/// * `amount` - The amount of tokens to withdraw
|
|
48
|
+
fn withdraw_token(
|
|
49
|
+
ref self: TContractState, token_address: ContractAddress, to: ContractAddress, amount: u256,
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
// ================================== External =====================================
|
|
53
|
+
|
|
54
|
+
/// Gets the fee for sending a message, potentially changing state.
|
|
55
|
+
///
|
|
56
|
+
/// # Arguments
|
|
57
|
+
/// * `params` - The fee parameters
|
|
58
|
+
/// * `dst_config` - The destination configuration
|
|
59
|
+
/// * `options` - The message options
|
|
60
|
+
///
|
|
61
|
+
/// # Returns
|
|
62
|
+
/// * `u256` - The calculated fee
|
|
63
|
+
fn get_fee_on_send(
|
|
64
|
+
ref self: TContractState, params: FeeParams, dst_config: DstConfig, options: ByteArray,
|
|
65
|
+
) -> u256;
|
|
66
|
+
|
|
67
|
+
// ================================== View =====================================
|
|
68
|
+
|
|
69
|
+
/// Gets the fee for a message without changing state.
|
|
70
|
+
///
|
|
71
|
+
/// # Arguments
|
|
72
|
+
/// * `params` - The fee parameters
|
|
73
|
+
/// * `dst_config` - The destination configuration
|
|
74
|
+
/// * `options` - The message options
|
|
75
|
+
///
|
|
76
|
+
/// # Returns
|
|
77
|
+
/// * `u256` - The calculated fee
|
|
78
|
+
fn get_fee(
|
|
79
|
+
self: @TContractState, params: FeeParams, dst_config: DstConfig, options: ByteArray,
|
|
80
|
+
) -> u256;
|
|
81
|
+
|
|
82
|
+
/// Gets the version of the fee library.
|
|
83
|
+
///
|
|
84
|
+
/// # Returns
|
|
85
|
+
/// * `(u64, u8)` - The major and minor version numbers
|
|
86
|
+
fn version(self: @TContractState) -> (u64, u8);
|
|
87
|
+
}
|