@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,72 @@
|
|
|
1
|
+
use lz_utils::bytes::Bytes32;
|
|
2
|
+
use crate::MessageReceipt;
|
|
3
|
+
|
|
4
|
+
/// Struct representing token parameters for the OFT send() operation.
|
|
5
|
+
#[derive(Clone, Drop, Serde, Default)]
|
|
6
|
+
pub struct SendParam {
|
|
7
|
+
pub dst_eid: u32, // Destination endpoint ID
|
|
8
|
+
pub to: Bytes32, // Recipient address
|
|
9
|
+
pub amount_ld: u256, // Amount to send in local decimals
|
|
10
|
+
pub min_amount_ld: u256, // Minimum amount to send in local decimals
|
|
11
|
+
pub extra_options: ByteArray, // Additional options supplied by the caller
|
|
12
|
+
pub compose_msg: ByteArray, // The composed message for the send() operation
|
|
13
|
+
pub oft_cmd: ByteArray // The OFT command to be executed
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/// Struct representing OFT limit information.
|
|
17
|
+
/// These amounts can change dynamically and are up to the specific oft implementation.
|
|
18
|
+
#[derive(Drop, Serde, Default)]
|
|
19
|
+
pub struct OFTLimit {
|
|
20
|
+
pub min_amount_ld: u256, // Minimum amount in local decimals that can be sent
|
|
21
|
+
pub max_amount_ld: u256 // Maximum amount in local decimals that can be sent
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/// Struct representing OFT receipt information.
|
|
25
|
+
#[derive(Drop, Serde, Default)]
|
|
26
|
+
pub struct OFTReceipt {
|
|
27
|
+
pub amount_sent_ld: u256, // Amount of tokens ACTUALLY debited from the sender in local decimals
|
|
28
|
+
pub amount_received_ld: u256 // Amount of tokens to be received on the remote side
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/// Struct representing OFT fee details.
|
|
32
|
+
/// Future proof mechanism to provide a standardized way to communicate fees to things like a UI.
|
|
33
|
+
#[derive(Drop, Serde, Default)]
|
|
34
|
+
pub struct OFTFeeDetail {
|
|
35
|
+
pub fee_amount_ld: u256, // Amount of the fee in local decimals
|
|
36
|
+
pub reward_amount_ld: u256, // Amount of the reward in local decimals
|
|
37
|
+
pub description: ByteArray // Description of the fee
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/// Struct representing OFT version information.
|
|
41
|
+
#[derive(Drop, Serde, Default)]
|
|
42
|
+
pub struct OFTVersion {
|
|
43
|
+
pub interface_id: u32, // The interface ID (equivalent to Solidity's bytes4)
|
|
44
|
+
pub version: u64 // The version number
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/// Struct representing OFT quote information.
|
|
48
|
+
#[derive(Drop, Serde, Default)]
|
|
49
|
+
pub struct OFTQuote {
|
|
50
|
+
pub limit: OFTLimit, // The OFT limit information
|
|
51
|
+
pub oft_fee_details: Array<OFTFeeDetail>, // The details of OFT fees
|
|
52
|
+
pub receipt: OFTReceipt // The OFT receipt information
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/// Struct representing OFT send result.
|
|
56
|
+
#[derive(Drop, Serde, Default)]
|
|
57
|
+
pub struct OFTSendResult {
|
|
58
|
+
pub message_receipt: MessageReceipt, // The LayerZero messaging receipt
|
|
59
|
+
pub oft_receipt: OFTReceipt // The OFT receipt information
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
#[derive(Drop, Serde, Default)]
|
|
63
|
+
pub struct OFTDebit {
|
|
64
|
+
pub amount_sent_ld: u256, // Amount of tokens ACTUALLY debited from the sender in local decimals
|
|
65
|
+
pub amount_received_ld: u256 // Amount of tokens to be received on the remote side
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
#[derive(Drop, Serde, Default)]
|
|
69
|
+
pub struct OFTMsgAndOptions {
|
|
70
|
+
pub message: ByteArray, // The encoded message
|
|
71
|
+
pub options: ByteArray // The encoded options
|
|
72
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
use lz_utils::error::{Error, format_error};
|
|
2
|
+
|
|
3
|
+
#[derive(Drop)]
|
|
4
|
+
pub enum TreasuryError {
|
|
5
|
+
LzTokenNotEnabled,
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
impl ErrorImpl of Error<TreasuryError> {
|
|
9
|
+
fn prefix() -> ByteArray {
|
|
10
|
+
"LZ_TREASURY"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
fn name(self: TreasuryError) -> ByteArray {
|
|
14
|
+
match self {
|
|
15
|
+
TreasuryError::LzTokenNotEnabled => "LZ_TOKEN_NOT_ENABLED",
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
pub fn err_lz_token_not_enabled() -> ByteArray {
|
|
21
|
+
format_error(TreasuryError::LzTokenNotEnabled, "")
|
|
22
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
//! LayerZero treasury interface
|
|
2
|
+
|
|
3
|
+
use starknet::ContractAddress;
|
|
4
|
+
|
|
5
|
+
/// Interface for Treasury component
|
|
6
|
+
///
|
|
7
|
+
/// The Treasury collects treasury fees.
|
|
8
|
+
#[starknet::interface]
|
|
9
|
+
pub trait ILayerZeroTreasury<TContractState> {
|
|
10
|
+
/// Calculates the treasury fee based on the worker fee and whether the fee should be paid in
|
|
11
|
+
/// LZ tokens. If the fee should be paid in LZ tokens, the fee is returned in ZRO, or otherwise
|
|
12
|
+
/// in native tokens.
|
|
13
|
+
///
|
|
14
|
+
/// # Arguments
|
|
15
|
+
/// * `sender` - The sender address
|
|
16
|
+
/// * `dst_eid` - The destination endpoint ID
|
|
17
|
+
/// * `worker_fee` - The total worker fee
|
|
18
|
+
/// * `pay_in_lz_token` - The flag indicating whether a fee is paid in LZ tokens or not
|
|
19
|
+
///
|
|
20
|
+
/// # Returns
|
|
21
|
+
/// * `u256` - The amount of tokens to be paid
|
|
22
|
+
///
|
|
23
|
+
/// # Panics
|
|
24
|
+
/// * If `pay_in_lz_token` is true while LZ token payment is disabled in the treasury
|
|
25
|
+
fn get_fee(
|
|
26
|
+
self: @TContractState,
|
|
27
|
+
sender: ContractAddress,
|
|
28
|
+
dst_eid: u32,
|
|
29
|
+
worker_fee: u256,
|
|
30
|
+
pay_in_lz_token: bool,
|
|
31
|
+
) -> u256;
|
|
32
|
+
|
|
33
|
+
/// Pays the fee to the treasury. The fee is calculated based on the worker fee and whether the
|
|
34
|
+
/// fee should be paid in LZ tokens.
|
|
35
|
+
///
|
|
36
|
+
/// # Arguments
|
|
37
|
+
/// * `sender` - The sender address
|
|
38
|
+
/// * `dst_eid` - The destination endpoint ID
|
|
39
|
+
/// * `worker_fee` - The total worker fee
|
|
40
|
+
/// * `pay_in_lz_token` - The flag indicating whether a fee is paid in LZ tokens or not
|
|
41
|
+
///
|
|
42
|
+
/// # Returns
|
|
43
|
+
/// * `u256` - The amount of tokens to be paid
|
|
44
|
+
///
|
|
45
|
+
/// # Panics
|
|
46
|
+
/// * If `pay_in_lz_token` is true while LZ token payment is disabled in the treasury
|
|
47
|
+
fn pay_fee(
|
|
48
|
+
ref self: TContractState,
|
|
49
|
+
sender: ContractAddress,
|
|
50
|
+
dst_eid: u32,
|
|
51
|
+
worker_fee: u256,
|
|
52
|
+
pay_in_lz_token: bool,
|
|
53
|
+
) -> u256;
|
|
54
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
//! LayerZero token fee library interface
|
|
2
|
+
|
|
3
|
+
use starknet::ContractAddress;
|
|
4
|
+
|
|
5
|
+
/// Interface for LayerZero token fee library component.
|
|
6
|
+
///
|
|
7
|
+
/// LayerZero token fee library calculates treasury fees.
|
|
8
|
+
#[starknet::interface]
|
|
9
|
+
pub trait ILzTokenFeeLib<TContractState> {
|
|
10
|
+
/// Calculates the treasury fee based on the worker fee.
|
|
11
|
+
///
|
|
12
|
+
/// # Arguments
|
|
13
|
+
/// * `sender` - The sender address
|
|
14
|
+
/// * `dst_eid` - The destination endpoint ID
|
|
15
|
+
/// * `worker_fee` - The total worker fee
|
|
16
|
+
/// * `native_treasury_fee` - The treasury fee in native tokens
|
|
17
|
+
///
|
|
18
|
+
/// # Returns
|
|
19
|
+
/// * `u256` - The amount of tokens to be paid in LayerZero tokens
|
|
20
|
+
fn get_fee(
|
|
21
|
+
self: @TContractState,
|
|
22
|
+
sender: ContractAddress,
|
|
23
|
+
dst_eid: u32,
|
|
24
|
+
worker_fee: u256,
|
|
25
|
+
native_treasury_fee: u256,
|
|
26
|
+
) -> u256;
|
|
27
|
+
|
|
28
|
+
/// Calculates the treasury fee based on the worker fee for later payment.
|
|
29
|
+
///
|
|
30
|
+
/// # Arguments
|
|
31
|
+
/// * `sender` - The sender address
|
|
32
|
+
/// * `dst_eid` - The destination endpoint ID
|
|
33
|
+
/// * `worker_fee` - The total worker fee
|
|
34
|
+
/// * `native_treasury_fee` - The treasury fee in native tokens
|
|
35
|
+
///
|
|
36
|
+
/// # Returns
|
|
37
|
+
/// * `u256` - The amount of tokens to be paid in LayerZero tokens
|
|
38
|
+
fn pay_fee(
|
|
39
|
+
ref self: TContractState,
|
|
40
|
+
sender: ContractAddress,
|
|
41
|
+
dst_eid: u32,
|
|
42
|
+
worker_fee: u256,
|
|
43
|
+
native_treasury_fee: u256,
|
|
44
|
+
) -> u256;
|
|
45
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
//! Treasury admin interface
|
|
2
|
+
|
|
3
|
+
use starknet::ContractAddress;
|
|
4
|
+
|
|
5
|
+
/// Interface for TreasuryAdmin component
|
|
6
|
+
///
|
|
7
|
+
/// The TreasuryAdmin allows administrators of the treasury to manage the treasury
|
|
8
|
+
/// fee configuration, and withdraw collected fees.
|
|
9
|
+
#[starknet::interface]
|
|
10
|
+
pub trait ITreasuryAdmin<TContractState> {
|
|
11
|
+
/// Gets the basis points of the treasury fee.
|
|
12
|
+
///
|
|
13
|
+
/// # Returns
|
|
14
|
+
/// * `u256` - The basis points
|
|
15
|
+
fn get_fee_bp(self: @TContractState) -> u256;
|
|
16
|
+
|
|
17
|
+
/// Sets the basis points of the treasury fee.
|
|
18
|
+
///
|
|
19
|
+
/// # Arguments
|
|
20
|
+
/// * `basis_points` - The basis points
|
|
21
|
+
fn set_fee_bp(ref self: TContractState, basis_points: u256);
|
|
22
|
+
|
|
23
|
+
/// Withdraws the collected fee of a given token address.
|
|
24
|
+
fn withdraw_tokens(
|
|
25
|
+
ref self: TContractState, token_address: ContractAddress, to: ContractAddress, amount: u256,
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
/// Gets the LZ token fee library.
|
|
29
|
+
///
|
|
30
|
+
/// # Returns
|
|
31
|
+
/// * `Option<ContractAddress>` - The LZ token fee library if any
|
|
32
|
+
fn get_lz_token_fee_lib(self: @TContractState) -> Option<ContractAddress>;
|
|
33
|
+
|
|
34
|
+
/// Sets the LZ token fee library.
|
|
35
|
+
///
|
|
36
|
+
/// # Arguments
|
|
37
|
+
/// * `library` - The LZ token fee library
|
|
38
|
+
fn set_lz_token_fee_lib(ref self: TContractState, library: Option<ContractAddress>);
|
|
39
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
//! Treasury component implementation
|
|
2
|
+
|
|
3
|
+
#[starknet::contract]
|
|
4
|
+
pub mod Treasury {
|
|
5
|
+
use openzeppelin::access::ownable::OwnableComponent;
|
|
6
|
+
use openzeppelin::token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait};
|
|
7
|
+
use starknet::ContractAddress;
|
|
8
|
+
use starknet::storage::{StoragePointerReadAccess, StoragePointerWriteAccess};
|
|
9
|
+
use starkware_utils::errors::assert_with_byte_array;
|
|
10
|
+
use crate::common::constants::DEFAULT_BPS;
|
|
11
|
+
use crate::treasury::errors::err_lz_token_not_enabled;
|
|
12
|
+
use crate::treasury::events::BasisPointsUpdated;
|
|
13
|
+
use crate::treasury::interfaces::layerzero_treasury::ILayerZeroTreasury;
|
|
14
|
+
use crate::treasury::interfaces::lz_token_fee_lib::{
|
|
15
|
+
ILzTokenFeeLibDispatcher, ILzTokenFeeLibDispatcherTrait,
|
|
16
|
+
};
|
|
17
|
+
use crate::treasury::interfaces::treasury_admin::ITreasuryAdmin;
|
|
18
|
+
|
|
19
|
+
component!(path: OwnableComponent, storage: ownable, event: OwnableEvent);
|
|
20
|
+
|
|
21
|
+
#[abi(embed_v0)]
|
|
22
|
+
impl OwnableImpl = OwnableComponent::OwnableImpl<ContractState>;
|
|
23
|
+
impl OwnableInternalImpl = OwnableComponent::InternalImpl<ContractState>;
|
|
24
|
+
|
|
25
|
+
#[storage]
|
|
26
|
+
struct Storage {
|
|
27
|
+
#[substorage(v0)]
|
|
28
|
+
ownable: OwnableComponent::Storage,
|
|
29
|
+
basis_points: u256,
|
|
30
|
+
lz_token_fee_lib: Option<ContractAddress>,
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
#[event]
|
|
34
|
+
#[derive(Drop, starknet::Event)]
|
|
35
|
+
pub enum Event {
|
|
36
|
+
#[flat]
|
|
37
|
+
OwnableEvent: OwnableComponent::Event,
|
|
38
|
+
BasisPointsUpdated: BasisPointsUpdated,
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
#[constructor]
|
|
42
|
+
fn constructor(ref self: ContractState, owner: ContractAddress) {
|
|
43
|
+
self.ownable.initializer(owner);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
#[abi(embed_v0)]
|
|
47
|
+
impl TreasuryImpl of ILayerZeroTreasury<ContractState> {
|
|
48
|
+
fn get_fee(
|
|
49
|
+
self: @ContractState,
|
|
50
|
+
sender: ContractAddress,
|
|
51
|
+
dst_eid: u32,
|
|
52
|
+
worker_fee: u256,
|
|
53
|
+
pay_in_lz_token: bool,
|
|
54
|
+
) -> u256 {
|
|
55
|
+
let native_fee = self._get_native_fee(worker_fee);
|
|
56
|
+
|
|
57
|
+
if pay_in_lz_token {
|
|
58
|
+
self
|
|
59
|
+
._get_lz_token_library_dispatcher()
|
|
60
|
+
.get_fee(sender, dst_eid, worker_fee, native_fee)
|
|
61
|
+
} else {
|
|
62
|
+
native_fee
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
fn pay_fee(
|
|
67
|
+
ref self: ContractState,
|
|
68
|
+
sender: ContractAddress,
|
|
69
|
+
dst_eid: u32,
|
|
70
|
+
worker_fee: u256,
|
|
71
|
+
pay_in_lz_token: bool,
|
|
72
|
+
) -> u256 {
|
|
73
|
+
let native_fee = self._get_native_fee(worker_fee);
|
|
74
|
+
|
|
75
|
+
if pay_in_lz_token {
|
|
76
|
+
self
|
|
77
|
+
._get_lz_token_library_dispatcher()
|
|
78
|
+
.pay_fee(sender, dst_eid, worker_fee, native_fee)
|
|
79
|
+
} else {
|
|
80
|
+
native_fee
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
#[generate_trait]
|
|
86
|
+
pub impl TreasuryInternalImpl of TreasuryInternalTrait {
|
|
87
|
+
fn _get_native_fee(self: @ContractState, worker_fee: u256) -> u256 {
|
|
88
|
+
worker_fee * self.basis_points.read() / DEFAULT_BPS
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
fn _get_lz_token_library_dispatcher(self: @ContractState) -> ILzTokenFeeLibDispatcher {
|
|
92
|
+
let library = self.lz_token_fee_lib.read();
|
|
93
|
+
assert_with_byte_array(library.is_some(), err_lz_token_not_enabled());
|
|
94
|
+
|
|
95
|
+
ILzTokenFeeLibDispatcher {
|
|
96
|
+
contract_address: library.expect('LZ token fee library exists'),
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
#[abi(embed_v0)]
|
|
102
|
+
impl TreasuryAdminImpl of ITreasuryAdmin<ContractState> {
|
|
103
|
+
fn set_fee_bp(ref self: ContractState, basis_points: u256) {
|
|
104
|
+
self.ownable.assert_only_owner();
|
|
105
|
+
let old_bp = self.basis_points.read();
|
|
106
|
+
self.basis_points.write(basis_points);
|
|
107
|
+
|
|
108
|
+
self.emit(BasisPointsUpdated { old_bp, new_bp: basis_points });
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
fn get_fee_bp(self: @ContractState) -> u256 {
|
|
112
|
+
self.basis_points.read()
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
fn withdraw_tokens(
|
|
116
|
+
ref self: ContractState,
|
|
117
|
+
token_address: ContractAddress,
|
|
118
|
+
to: ContractAddress,
|
|
119
|
+
amount: u256,
|
|
120
|
+
) {
|
|
121
|
+
self.ownable.assert_only_owner();
|
|
122
|
+
let token_dispatcher = IERC20Dispatcher { contract_address: token_address };
|
|
123
|
+
|
|
124
|
+
// NOTE: (from https://docs.openzeppelin.com/contracts-cairo/1.0.0/erc20)
|
|
125
|
+
// transfer, transfer_from and approve will never return anything different from true
|
|
126
|
+
// because they will revert on any error.
|
|
127
|
+
token_dispatcher.transfer(to, amount);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
fn get_lz_token_fee_lib(self: @ContractState) -> Option<ContractAddress> {
|
|
131
|
+
self.lz_token_fee_lib.read()
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
fn set_lz_token_fee_lib(ref self: ContractState, library: Option<ContractAddress>) {
|
|
135
|
+
self.ownable.assert_only_owner();
|
|
136
|
+
|
|
137
|
+
self.lz_token_fee_lib.write(library);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//! Worker access control roles
|
|
2
|
+
|
|
3
|
+
/// Default admin role
|
|
4
|
+
/// - can grant and revoke all roles
|
|
5
|
+
pub use openzeppelin::access::accesscontrol::DEFAULT_ADMIN_ROLE;
|
|
6
|
+
|
|
7
|
+
/// Admin role
|
|
8
|
+
pub const ADMIN_ROLE: felt252 = 'ADMIN_ROLE';
|
|
9
|
+
|
|
10
|
+
/// Message lib role
|
|
11
|
+
pub const MESSAGE_LIB_ROLE: felt252 = 'MESSAGE_LIB_ROLE';
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
//! Base worker component implementation
|
|
2
|
+
|
|
3
|
+
#[starknet::component]
|
|
4
|
+
pub mod WorkerBaseComponent {
|
|
5
|
+
use core::panics::panic_with_byte_array;
|
|
6
|
+
use openzeppelin::access::accesscontrol::AccessControlComponent;
|
|
7
|
+
use openzeppelin::access::accesscontrol::AccessControlComponent::InternalImpl as AccessControlInternalImpl;
|
|
8
|
+
use openzeppelin::access::accesscontrol::interface::IAccessControl;
|
|
9
|
+
use openzeppelin::introspection::src5::SRC5Component;
|
|
10
|
+
use openzeppelin::security::pausable::PausableComponent;
|
|
11
|
+
use openzeppelin::security::pausable::PausableComponent::{
|
|
12
|
+
InternalImpl as PausableInternalImpl, InternalTrait as PausableInternalTrait, PausableImpl,
|
|
13
|
+
};
|
|
14
|
+
use openzeppelin::token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait};
|
|
15
|
+
use starknet::ContractAddress;
|
|
16
|
+
use starknet::storage::{
|
|
17
|
+
Map, StoragePathEntry, StoragePointerReadAccess, StoragePointerWriteAccess,
|
|
18
|
+
};
|
|
19
|
+
use crate::common::constants::ZERO_ADDRESS;
|
|
20
|
+
use crate::workers::access_control::{ADMIN_ROLE, DEFAULT_ADMIN_ROLE, MESSAGE_LIB_ROLE};
|
|
21
|
+
use crate::workers::base::errors::err_role_renouncing_disabled;
|
|
22
|
+
use crate::workers::base::events::{
|
|
23
|
+
DefaultMultiplierBpsSet, FeeWithdrawn, PriceFeedSet, SupportedOptionTypeSet,
|
|
24
|
+
WorkerFeeLibSet,
|
|
25
|
+
};
|
|
26
|
+
use crate::workers::base::interface::IWorkerBase;
|
|
27
|
+
|
|
28
|
+
// =============================== Storage =================================
|
|
29
|
+
|
|
30
|
+
#[storage]
|
|
31
|
+
pub struct Storage {
|
|
32
|
+
pub WorkerBase_price_feed: ContractAddress,
|
|
33
|
+
pub WorkerBase_default_multiplier_bps: u16,
|
|
34
|
+
/// EID => option type
|
|
35
|
+
pub WorkerBase_supported_option_types: Map<u32, ByteArray>,
|
|
36
|
+
pub WorkerBase_worker_fee_lib: ContractAddress,
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// =============================== Events =================================
|
|
40
|
+
|
|
41
|
+
#[event]
|
|
42
|
+
#[derive(Drop, starknet::Event)]
|
|
43
|
+
pub enum Event {
|
|
44
|
+
PriceFeedSet: PriceFeedSet,
|
|
45
|
+
FeeWithdrawn: FeeWithdrawn,
|
|
46
|
+
SupportedOptionTypeSet: SupportedOptionTypeSet,
|
|
47
|
+
DefaultMultiplierBpsSet: DefaultMultiplierBpsSet,
|
|
48
|
+
WorkerFeeLibSet: WorkerFeeLibSet,
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
#[embeddable_as(WorkerBaseImpl)]
|
|
52
|
+
impl WorkerBase<
|
|
53
|
+
TContractState,
|
|
54
|
+
+HasComponent<TContractState>,
|
|
55
|
+
impl AccessControl: AccessControlComponent::HasComponent<TContractState>,
|
|
56
|
+
+SRC5Component::HasComponent<TContractState>,
|
|
57
|
+
impl Pausable: PausableComponent::HasComponent<TContractState>,
|
|
58
|
+
+Drop<TContractState>,
|
|
59
|
+
> of IWorkerBase<ComponentState<TContractState>> {
|
|
60
|
+
// ================================== Only Default Admin ===============================
|
|
61
|
+
|
|
62
|
+
/// Pause the contract (only default admin)
|
|
63
|
+
fn pause(ref self: ComponentState<TContractState>) {
|
|
64
|
+
self._assert_only_default_admin();
|
|
65
|
+
let mut pausable = get_dep_component_mut!(ref self, Pausable);
|
|
66
|
+
pausable.pause();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/// Unpause the contract (only default admin)
|
|
70
|
+
fn unpause(ref self: ComponentState<TContractState>) {
|
|
71
|
+
self._assert_only_default_admin();
|
|
72
|
+
let mut pausable = get_dep_component_mut!(ref self, Pausable);
|
|
73
|
+
pausable.unpause();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// ===================================== Only Admin =====================================
|
|
77
|
+
|
|
78
|
+
fn set_price_feed(ref self: ComponentState<TContractState>, price_feed: ContractAddress) {
|
|
79
|
+
self._assert_only_admin();
|
|
80
|
+
|
|
81
|
+
let old_price_feed = self.WorkerBase_price_feed.read();
|
|
82
|
+
self.WorkerBase_price_feed.write(price_feed);
|
|
83
|
+
self.emit(PriceFeedSet { old_price_feed, new_price_feed: price_feed });
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
fn set_supported_option_type(
|
|
87
|
+
ref self: ComponentState<TContractState>, eid: u32, option_type: ByteArray,
|
|
88
|
+
) {
|
|
89
|
+
self._assert_only_admin();
|
|
90
|
+
self.WorkerBase_supported_option_types.entry(eid).write(option_type.clone());
|
|
91
|
+
self.emit(SupportedOptionTypeSet { eid, option_type });
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
fn set_default_multiplier_bps(
|
|
95
|
+
ref self: ComponentState<TContractState>, default_multiplier_bps: u16,
|
|
96
|
+
) {
|
|
97
|
+
self._assert_only_admin();
|
|
98
|
+
self.WorkerBase_default_multiplier_bps.write(default_multiplier_bps);
|
|
99
|
+
self.emit(DefaultMultiplierBpsSet { default_multiplier_bps });
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
fn withdraw_fee(
|
|
103
|
+
ref self: ComponentState<TContractState>,
|
|
104
|
+
token_address: ContractAddress,
|
|
105
|
+
to: ContractAddress,
|
|
106
|
+
amount: u256,
|
|
107
|
+
) {
|
|
108
|
+
self._assert_only_admin();
|
|
109
|
+
IERC20Dispatcher { contract_address: token_address }.transfer(to, amount);
|
|
110
|
+
self.emit(FeeWithdrawn { to, amount });
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
fn set_worker_fee_lib(
|
|
114
|
+
ref self: ComponentState<TContractState>, worker_fee_lib: ContractAddress,
|
|
115
|
+
) {
|
|
116
|
+
self._assert_only_admin();
|
|
117
|
+
|
|
118
|
+
let old_worker_fee_lib = self.WorkerBase_worker_fee_lib.read();
|
|
119
|
+
self.WorkerBase_worker_fee_lib.write(worker_fee_lib);
|
|
120
|
+
self.emit(WorkerFeeLibSet { old_worker_fee_lib, new_worker_fee_lib: worker_fee_lib });
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// ======================================= View ========================================
|
|
124
|
+
|
|
125
|
+
fn get_price_feed(self: @ComponentState<TContractState>) -> ContractAddress {
|
|
126
|
+
self.WorkerBase_price_feed.read()
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
fn get_supported_option_type(self: @ComponentState<TContractState>, eid: u32) -> ByteArray {
|
|
130
|
+
self.WorkerBase_supported_option_types.entry(eid).read()
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
fn get_default_multiplier_bps(self: @ComponentState<TContractState>) -> u16 {
|
|
134
|
+
self.WorkerBase_default_multiplier_bps.read()
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
fn get_worker_fee_lib(self: @ComponentState<TContractState>) -> ContractAddress {
|
|
138
|
+
self.WorkerBase_worker_fee_lib.read()
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/// Access control implementation - same as OpenZeppelin except `renounce_role` is disabled
|
|
143
|
+
#[embeddable_as(AccessControlImpl)]
|
|
144
|
+
pub impl AccessControl<
|
|
145
|
+
TContractState,
|
|
146
|
+
+HasComponent<TContractState>,
|
|
147
|
+
impl OZAccessControl: AccessControlComponent::HasComponent<TContractState>,
|
|
148
|
+
+SRC5Component::HasComponent<TContractState>,
|
|
149
|
+
+Drop<TContractState>,
|
|
150
|
+
> of IAccessControl<ComponentState<TContractState>> {
|
|
151
|
+
fn has_role(
|
|
152
|
+
self: @ComponentState<TContractState>, role: felt252, account: ContractAddress,
|
|
153
|
+
) -> bool {
|
|
154
|
+
get_dep_component!(self, OZAccessControl).has_role(role, account)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
fn get_role_admin(self: @ComponentState<TContractState>, role: felt252) -> felt252 {
|
|
158
|
+
get_dep_component!(self, OZAccessControl).get_role_admin(role)
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
fn grant_role(
|
|
162
|
+
ref self: ComponentState<TContractState>, role: felt252, account: ContractAddress,
|
|
163
|
+
) {
|
|
164
|
+
let mut access_control = get_dep_component_mut!(ref self, OZAccessControl);
|
|
165
|
+
access_control.grant_role(role, account)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
fn revoke_role(
|
|
169
|
+
ref self: ComponentState<TContractState>, role: felt252, account: ContractAddress,
|
|
170
|
+
) {
|
|
171
|
+
let mut access_control = get_dep_component_mut!(ref self, OZAccessControl);
|
|
172
|
+
access_control.revoke_role(role, account)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
fn renounce_role(
|
|
176
|
+
ref self: ComponentState<TContractState>, role: felt252, account: ContractAddress,
|
|
177
|
+
) {
|
|
178
|
+
panic_with_byte_array(@err_role_renouncing_disabled())
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// internal
|
|
183
|
+
#[generate_trait]
|
|
184
|
+
pub impl InternalImpl<
|
|
185
|
+
TContractState,
|
|
186
|
+
+HasComponent<TContractState>,
|
|
187
|
+
impl AccessControl: AccessControlComponent::HasComponent<TContractState>,
|
|
188
|
+
+SRC5Component::HasComponent<TContractState>,
|
|
189
|
+
impl Pausable: PausableComponent::HasComponent<TContractState>,
|
|
190
|
+
+Drop<TContractState>,
|
|
191
|
+
> of InternalTrait<TContractState> {
|
|
192
|
+
/// Initialize the base worker component
|
|
193
|
+
fn initializer(
|
|
194
|
+
ref self: ComponentState<TContractState>,
|
|
195
|
+
message_libs: Array<ContractAddress>,
|
|
196
|
+
price_feed: ContractAddress,
|
|
197
|
+
default_multiplier_bps: u16,
|
|
198
|
+
role_admin: ContractAddress,
|
|
199
|
+
admins: Array<ContractAddress>,
|
|
200
|
+
) {
|
|
201
|
+
// Set initial values
|
|
202
|
+
self.WorkerBase_default_multiplier_bps.write(default_multiplier_bps);
|
|
203
|
+
self.WorkerBase_price_feed.write(price_feed);
|
|
204
|
+
|
|
205
|
+
// Set role admin
|
|
206
|
+
let mut access_control = get_dep_component_mut!(ref self, AccessControl);
|
|
207
|
+
if role_admin != ZERO_ADDRESS {
|
|
208
|
+
access_control._grant_role(DEFAULT_ADMIN_ROLE, role_admin);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Set message libs
|
|
212
|
+
for message_lib in message_libs {
|
|
213
|
+
access_control._grant_role(MESSAGE_LIB_ROLE, message_lib);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Set additional admins
|
|
217
|
+
for admin in admins {
|
|
218
|
+
access_control._grant_role(ADMIN_ROLE, admin);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
fn _assert_only_default_admin(self: @ComponentState<TContractState>) {
|
|
223
|
+
get_dep_component!(self, AccessControl).assert_only_role(DEFAULT_ADMIN_ROLE);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
fn _assert_only_admin(self: @ComponentState<TContractState>) {
|
|
227
|
+
get_dep_component!(self, AccessControl).assert_only_role(ADMIN_ROLE);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
fn _assert_only_message_lib(self: @ComponentState<TContractState>) {
|
|
231
|
+
get_dep_component!(self, AccessControl).assert_only_role(MESSAGE_LIB_ROLE);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
fn _assert_not_paused(self: @ComponentState<TContractState>) {
|
|
235
|
+
get_dep_component!(self, Pausable).assert_not_paused();
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//! Base worker errors
|
|
2
|
+
|
|
3
|
+
use lz_utils::error::{Error, format_error};
|
|
4
|
+
|
|
5
|
+
#[derive(Drop, Clone, Debug, PartialEq)]
|
|
6
|
+
pub enum WorkerBaseError {
|
|
7
|
+
WorkerBaseRoleRenouncingDisabled,
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
impl WorkerBaseErrorImpl of Error<WorkerBaseError> {
|
|
11
|
+
fn prefix() -> ByteArray {
|
|
12
|
+
"LZ_WORKER_BASE"
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
fn name(self: WorkerBaseError) -> ByteArray {
|
|
16
|
+
match self {
|
|
17
|
+
WorkerBaseError::WorkerBaseRoleRenouncingDisabled => "ROLE_RENUNCING_DISABLED",
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
pub fn err_role_renouncing_disabled() -> ByteArray {
|
|
23
|
+
format_error(WorkerBaseError::WorkerBaseRoleRenouncingDisabled, "")
|
|
24
|
+
}
|