@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.
Files changed (504) hide show
  1. package/.turbo/turbo-build.log +186 -0
  2. package/.turbo/turbo-lint.log +71 -0
  3. package/.turbo/turbo-test.log +937 -0
  4. package/README.md +41 -0
  5. package/Scarb.lock +211 -0
  6. package/Scarb.toml +2 -0
  7. package/dist/4XD3ZRZ4.cjs +301 -0
  8. package/dist/4XD3ZRZ4.cjs.map +1 -0
  9. package/dist/4Z5IPBC3.js +299 -0
  10. package/dist/4Z5IPBC3.js.map +1 -0
  11. package/dist/5NEZDLVQ.cjs +474 -0
  12. package/dist/5NEZDLVQ.cjs.map +1 -0
  13. package/dist/6JYCOKDE.js +472 -0
  14. package/dist/6JYCOKDE.js.map +1 -0
  15. package/dist/7C4PFMIZ.cjs +1288 -0
  16. package/dist/7C4PFMIZ.cjs.map +1 -0
  17. package/dist/7ZSGGZUE.js +1229 -0
  18. package/dist/7ZSGGZUE.js.map +1 -0
  19. package/dist/ARHOGUYH.cjs +2136 -0
  20. package/dist/ARHOGUYH.cjs.map +1 -0
  21. package/dist/CRCRIUFX.js +1264 -0
  22. package/dist/CRCRIUFX.js.map +1 -0
  23. package/dist/DB7CQSED.cjs +430 -0
  24. package/dist/DB7CQSED.cjs.map +1 -0
  25. package/dist/DFXLWHYP.cjs +1266 -0
  26. package/dist/DFXLWHYP.cjs.map +1 -0
  27. package/dist/EOLZCMCK.js +988 -0
  28. package/dist/EOLZCMCK.js.map +1 -0
  29. package/dist/FFDPTOWG.cjs +331 -0
  30. package/dist/FFDPTOWG.cjs.map +1 -0
  31. package/dist/FOJGEAIO.js +2134 -0
  32. package/dist/FOJGEAIO.js.map +1 -0
  33. package/dist/IWIUMVGB.js +629 -0
  34. package/dist/IWIUMVGB.js.map +1 -0
  35. package/dist/MUEN6AWV.cjs +697 -0
  36. package/dist/MUEN6AWV.cjs.map +1 -0
  37. package/dist/ORE6VBZ4.cjs +990 -0
  38. package/dist/ORE6VBZ4.cjs.map +1 -0
  39. package/dist/OUFKWPZ7.js +732 -0
  40. package/dist/OUFKWPZ7.js.map +1 -0
  41. package/dist/T2QTYQXJ.js +1229 -0
  42. package/dist/T2QTYQXJ.js.map +1 -0
  43. package/dist/UPJTM7BR.cjs +631 -0
  44. package/dist/UPJTM7BR.cjs.map +1 -0
  45. package/dist/VNVNX2P3.cjs +1231 -0
  46. package/dist/VNVNX2P3.cjs.map +1 -0
  47. package/dist/VUOMXK5T.js +6 -0
  48. package/dist/VUOMXK5T.js.map +1 -0
  49. package/dist/WISWRTDG.js +1286 -0
  50. package/dist/WISWRTDG.js.map +1 -0
  51. package/dist/WU5L7YIQ.cjs +1231 -0
  52. package/dist/WU5L7YIQ.cjs.map +1 -0
  53. package/dist/X3B5JDMZ.js +695 -0
  54. package/dist/X3B5JDMZ.js.map +1 -0
  55. package/dist/XYNBDBBV.cjs +297 -0
  56. package/dist/XYNBDBBV.cjs.map +1 -0
  57. package/dist/Y5JFPCYJ.cjs +734 -0
  58. package/dist/Y5JFPCYJ.cjs.map +1 -0
  59. package/dist/YEHL7IYO.js +295 -0
  60. package/dist/YEHL7IYO.js.map +1 -0
  61. package/dist/YJF4D23A.cjs +8 -0
  62. package/dist/YJF4D23A.cjs.map +1 -0
  63. package/dist/YTS44OEA.js +428 -0
  64. package/dist/YTS44OEA.js.map +1 -0
  65. package/dist/Z2NIUZMW.js +329 -0
  66. package/dist/Z2NIUZMW.js.map +1 -0
  67. package/dist/abis/blocked-message-lib.cjs +13 -0
  68. package/dist/abis/blocked-message-lib.cjs.map +1 -0
  69. package/dist/abis/blocked-message-lib.d.ts +338 -0
  70. package/dist/abis/blocked-message-lib.d.ts.map +1 -0
  71. package/dist/abis/blocked-message-lib.js +4 -0
  72. package/dist/abis/blocked-message-lib.js.map +1 -0
  73. package/dist/abis/dvn-fee-lib.cjs +13 -0
  74. package/dist/abis/dvn-fee-lib.cjs.map +1 -0
  75. package/dist/abis/dvn-fee-lib.d.ts +214 -0
  76. package/dist/abis/dvn-fee-lib.d.ts.map +1 -0
  77. package/dist/abis/dvn-fee-lib.js +4 -0
  78. package/dist/abis/dvn-fee-lib.js.map +1 -0
  79. package/dist/abis/dvn.cjs +13 -0
  80. package/dist/abis/dvn.cjs.map +1 -0
  81. package/dist/abis/dvn.d.ts +952 -0
  82. package/dist/abis/dvn.d.ts.map +1 -0
  83. package/dist/abis/dvn.js +4 -0
  84. package/dist/abis/dvn.js.map +1 -0
  85. package/dist/abis/endpoint-v2.cjs +13 -0
  86. package/dist/abis/endpoint-v2.cjs.map +1 -0
  87. package/dist/abis/endpoint-v2.d.ts +1580 -0
  88. package/dist/abis/endpoint-v2.d.ts.map +1 -0
  89. package/dist/abis/endpoint-v2.js +4 -0
  90. package/dist/abis/endpoint-v2.js.map +1 -0
  91. package/dist/abis/executor-fee-lib.cjs +13 -0
  92. package/dist/abis/executor-fee-lib.cjs.map +1 -0
  93. package/dist/abis/executor-fee-lib.d.ts +217 -0
  94. package/dist/abis/executor-fee-lib.d.ts.map +1 -0
  95. package/dist/abis/executor-fee-lib.js +4 -0
  96. package/dist/abis/executor-fee-lib.js.map +1 -0
  97. package/dist/abis/executor.cjs +13 -0
  98. package/dist/abis/executor.cjs.map +1 -0
  99. package/dist/abis/executor.d.ts +914 -0
  100. package/dist/abis/executor.d.ts.map +1 -0
  101. package/dist/abis/executor.js +4 -0
  102. package/dist/abis/executor.js.map +1 -0
  103. package/dist/abis/o-app.cjs +13 -0
  104. package/dist/abis/o-app.cjs.map +1 -0
  105. package/dist/abis/o-app.d.ts +311 -0
  106. package/dist/abis/o-app.d.ts.map +1 -0
  107. package/dist/abis/o-app.js +4 -0
  108. package/dist/abis/o-app.js.map +1 -0
  109. package/dist/abis/oft-adapter.cjs +13 -0
  110. package/dist/abis/oft-adapter.cjs.map +1 -0
  111. package/dist/abis/oft-adapter.d.ts +722 -0
  112. package/dist/abis/oft-adapter.d.ts.map +1 -0
  113. package/dist/abis/oft-adapter.js +4 -0
  114. package/dist/abis/oft-adapter.js.map +1 -0
  115. package/dist/abis/oft.cjs +13 -0
  116. package/dist/abis/oft.cjs.map +1 -0
  117. package/dist/abis/oft.d.ts +922 -0
  118. package/dist/abis/oft.d.ts.map +1 -0
  119. package/dist/abis/oft.js +4 -0
  120. package/dist/abis/oft.js.map +1 -0
  121. package/dist/abis/omni-counter.cjs +13 -0
  122. package/dist/abis/omni-counter.cjs.map +1 -0
  123. package/dist/abis/omni-counter.d.ts +459 -0
  124. package/dist/abis/omni-counter.d.ts.map +1 -0
  125. package/dist/abis/omni-counter.js +4 -0
  126. package/dist/abis/omni-counter.js.map +1 -0
  127. package/dist/abis/price-feed.cjs +13 -0
  128. package/dist/abis/price-feed.cjs.map +1 -0
  129. package/dist/abis/price-feed.d.ts +505 -0
  130. package/dist/abis/price-feed.d.ts.map +1 -0
  131. package/dist/abis/price-feed.js +4 -0
  132. package/dist/abis/price-feed.js.map +1 -0
  133. package/dist/abis/simple-message-lib.cjs +13 -0
  134. package/dist/abis/simple-message-lib.cjs.map +1 -0
  135. package/dist/abis/simple-message-lib.d.ts +535 -0
  136. package/dist/abis/simple-message-lib.d.ts.map +1 -0
  137. package/dist/abis/simple-message-lib.js +4 -0
  138. package/dist/abis/simple-message-lib.js.map +1 -0
  139. package/dist/abis/treasury.cjs +13 -0
  140. package/dist/abis/treasury.cjs.map +1 -0
  141. package/dist/abis/treasury.d.ts +240 -0
  142. package/dist/abis/treasury.d.ts.map +1 -0
  143. package/dist/abis/treasury.js +4 -0
  144. package/dist/abis/treasury.js.map +1 -0
  145. package/dist/abis/ultra-light-node.cjs +13 -0
  146. package/dist/abis/ultra-light-node.cjs.map +1 -0
  147. package/dist/abis/ultra-light-node.d.ts +900 -0
  148. package/dist/abis/ultra-light-node.d.ts.map +1 -0
  149. package/dist/abis/ultra-light-node.js +4 -0
  150. package/dist/abis/ultra-light-node.js.map +1 -0
  151. package/dist/index.cjs +78 -0
  152. package/dist/index.cjs.map +1 -0
  153. package/dist/index.d.ts +15 -0
  154. package/dist/index.d.ts.map +1 -0
  155. package/dist/index.js +17 -0
  156. package/dist/index.js.map +1 -0
  157. package/dist/scripts/build-abi.cjs +28 -0
  158. package/dist/scripts/build-abi.cjs.map +1 -0
  159. package/dist/scripts/build-abi.d.ts +2 -0
  160. package/dist/scripts/build-abi.d.ts.map +1 -0
  161. package/dist/scripts/build-abi.js +26 -0
  162. package/dist/scripts/build-abi.js.map +1 -0
  163. package/layerzero/README.md +244 -0
  164. package/layerzero/Scarb.lock +203 -0
  165. package/layerzero/Scarb.toml +30 -0
  166. package/layerzero/snfoundry.toml +11 -0
  167. package/layerzero/src/common/constants.cairo +26 -0
  168. package/layerzero/src/common/conversions.cairo +16 -0
  169. package/layerzero/src/common/guid.cairo +20 -0
  170. package/layerzero/src/common/packet_v1_codec.cairo +307 -0
  171. package/layerzero/src/common/structs/messaging.cairo +40 -0
  172. package/layerzero/src/common/structs/packet.cairo +31 -0
  173. package/layerzero/src/endpoint/constants.cairo +14 -0
  174. package/layerzero/src/endpoint/endpoint.cairo +688 -0
  175. package/layerzero/src/endpoint/errors.cairo +108 -0
  176. package/layerzero/src/endpoint/events.cairo +124 -0
  177. package/layerzero/src/endpoint/interfaces/endpoint.cairo +286 -0
  178. package/layerzero/src/endpoint/interfaces/layerzero_composer.cairo +62 -0
  179. package/layerzero/src/endpoint/interfaces/layerzero_receiver.cairo +63 -0
  180. package/layerzero/src/endpoint/message_lib_manager/errors.cairo +95 -0
  181. package/layerzero/src/endpoint/message_lib_manager/events.cairo +90 -0
  182. package/layerzero/src/endpoint/message_lib_manager/interface.cairo +449 -0
  183. package/layerzero/src/endpoint/message_lib_manager/message_lib_manager.cairo +720 -0
  184. package/layerzero/src/endpoint/message_lib_manager/structs.cairo +33 -0
  185. package/layerzero/src/endpoint/messaging_channel/errors.cairo +37 -0
  186. package/layerzero/src/endpoint/messaging_channel/events.cairo +58 -0
  187. package/layerzero/src/endpoint/messaging_channel/interface.cairo +171 -0
  188. package/layerzero/src/endpoint/messaging_channel/messaging_channel.cairo +453 -0
  189. package/layerzero/src/endpoint/messaging_composer/errors.cairo +46 -0
  190. package/layerzero/src/endpoint/messaging_composer/events.cairo +67 -0
  191. package/layerzero/src/endpoint/messaging_composer/interface.cairo +132 -0
  192. package/layerzero/src/endpoint/messaging_composer/messaging_composer.cairo +223 -0
  193. package/layerzero/src/lib.cairo +189 -0
  194. package/layerzero/src/message_lib/blocked_message_lib.cairo +114 -0
  195. package/layerzero/src/message_lib/interface.cairo +63 -0
  196. package/layerzero/src/message_lib/sml/errors.cairo +23 -0
  197. package/layerzero/src/message_lib/sml/events.cairo +32 -0
  198. package/layerzero/src/message_lib/sml/simple_message_lib.cairo +312 -0
  199. package/layerzero/src/message_lib/structs.cairo +22 -0
  200. package/layerzero/src/message_lib/uln/errors.cairo +128 -0
  201. package/layerzero/src/message_lib/uln/events.cairo +97 -0
  202. package/layerzero/src/message_lib/uln/interface.cairo +83 -0
  203. package/layerzero/src/message_lib/uln/options.cairo +64 -0
  204. package/layerzero/src/message_lib/uln/structs/executor_config.cairo +35 -0
  205. package/layerzero/src/message_lib/uln/structs/payment_info.cairo +7 -0
  206. package/layerzero/src/message_lib/uln/structs/uln_config.cairo +155 -0
  207. package/layerzero/src/message_lib/uln/structs/uln_config_storage_node.cairo +91 -0
  208. package/layerzero/src/message_lib/uln/structs/verification.cairo +7 -0
  209. package/layerzero/src/message_lib/uln/ultra_light_node.cairo +965 -0
  210. package/layerzero/src/oapps/common/oapp_options_type_3/errors.cairo +22 -0
  211. package/layerzero/src/oapps/common/oapp_options_type_3/events.cairo +6 -0
  212. package/layerzero/src/oapps/common/oapp_options_type_3/interface.cairo +34 -0
  213. package/layerzero/src/oapps/common/oapp_options_type_3/oapp_options_type_3.cairo +120 -0
  214. package/layerzero/src/oapps/common/oapp_options_type_3/structs.cairo +6 -0
  215. package/layerzero/src/oapps/counter/constants.cairo +3 -0
  216. package/layerzero/src/oapps/counter/counter.cairo +170 -0
  217. package/layerzero/src/oapps/counter/interface.cairo +27 -0
  218. package/layerzero/src/oapps/counter/structs.cairo +20 -0
  219. package/layerzero/src/oapps/message_inspector/interface.cairo +21 -0
  220. package/layerzero/src/oapps/oapp/errors.cairo +72 -0
  221. package/layerzero/src/oapps/oapp/events.cairo +9 -0
  222. package/layerzero/src/oapps/oapp/interface.cairo +67 -0
  223. package/layerzero/src/oapps/oapp/oapp.cairo +70 -0
  224. package/layerzero/src/oapps/oapp/oapp_core.cairo +448 -0
  225. package/layerzero/src/oapps/oft/errors.cairo +42 -0
  226. package/layerzero/src/oapps/oft/events.cairo +33 -0
  227. package/layerzero/src/oapps/oft/interface.cairo +87 -0
  228. package/layerzero/src/oapps/oft/oft.cairo +188 -0
  229. package/layerzero/src/oapps/oft/oft_adapter.cairo +175 -0
  230. package/layerzero/src/oapps/oft/oft_compose_msg_codec.cairo +128 -0
  231. package/layerzero/src/oapps/oft/oft_core.cairo +542 -0
  232. package/layerzero/src/oapps/oft/oft_msg_codec.cairo +131 -0
  233. package/layerzero/src/oapps/oft/structs.cairo +72 -0
  234. package/layerzero/src/treasury/errors.cairo +22 -0
  235. package/layerzero/src/treasury/events.cairo +5 -0
  236. package/layerzero/src/treasury/interfaces/layerzero_treasury.cairo +54 -0
  237. package/layerzero/src/treasury/interfaces/lz_token_fee_lib.cairo +45 -0
  238. package/layerzero/src/treasury/interfaces/treasury_admin.cairo +39 -0
  239. package/layerzero/src/treasury/treasury.cairo +140 -0
  240. package/layerzero/src/workers/access_control.cairo +11 -0
  241. package/layerzero/src/workers/base/base.cairo +238 -0
  242. package/layerzero/src/workers/base/errors.cairo +24 -0
  243. package/layerzero/src/workers/base/events.cairo +43 -0
  244. package/layerzero/src/workers/base/interface.cairo +93 -0
  245. package/layerzero/src/workers/base/structs.cairo +10 -0
  246. package/layerzero/src/workers/common.cairo +59 -0
  247. package/layerzero/src/workers/dvn/constants.cairo +11 -0
  248. package/layerzero/src/workers/dvn/dvn.cairo +338 -0
  249. package/layerzero/src/workers/dvn/errors.cairo +80 -0
  250. package/layerzero/src/workers/dvn/events.cairo +30 -0
  251. package/layerzero/src/workers/dvn/fee_lib/dvn_fee_lib.cairo +152 -0
  252. package/layerzero/src/workers/dvn/fee_lib/interface.cairo +45 -0
  253. package/layerzero/src/workers/dvn/interface.cairo +131 -0
  254. package/layerzero/src/workers/dvn/options.cairo +125 -0
  255. package/layerzero/src/workers/dvn/structs.cairo +51 -0
  256. package/layerzero/src/workers/executor/errors.cairo +159 -0
  257. package/layerzero/src/workers/executor/events.cairo +32 -0
  258. package/layerzero/src/workers/executor/executor.cairo +392 -0
  259. package/layerzero/src/workers/executor/fee_lib/executor_fee_lib.cairo +160 -0
  260. package/layerzero/src/workers/executor/fee_lib/interface.cairo +87 -0
  261. package/layerzero/src/workers/executor/interface.cairo +131 -0
  262. package/layerzero/src/workers/executor/options.cairo +244 -0
  263. package/layerzero/src/workers/executor/structs.cairo +119 -0
  264. package/layerzero/src/workers/interface.cairo +32 -0
  265. package/layerzero/src/workers/price_feed/constants.cairo +7 -0
  266. package/layerzero/src/workers/price_feed/errors.cairo +28 -0
  267. package/layerzero/src/workers/price_feed/events.cairo +13 -0
  268. package/layerzero/src/workers/price_feed/interface.cairo +264 -0
  269. package/layerzero/src/workers/price_feed/price_feed.cairo +392 -0
  270. package/layerzero/src/workers/price_feed/structs.cairo +74 -0
  271. package/layerzero/tests/common/test_constants.cairo +21 -0
  272. package/layerzero/tests/common/test_guid.cairo +232 -0
  273. package/layerzero/tests/common/test_packet_v1_codec.cairo +372 -0
  274. package/layerzero/tests/common/utils.cairo +23 -0
  275. package/layerzero/tests/e2e/oft_utils.cairo +121 -0
  276. package/layerzero/tests/e2e/test_counter_with_sml.cairo +194 -0
  277. package/layerzero/tests/e2e/test_counter_with_uln.cairo +352 -0
  278. package/layerzero/tests/e2e/test_dvn.cairo +406 -0
  279. package/layerzero/tests/e2e/test_lz_token.cairo +354 -0
  280. package/layerzero/tests/e2e/test_oft_compose_with_uln.cairo +364 -0
  281. package/layerzero/tests/e2e/test_oft_with_sml.cairo +240 -0
  282. package/layerzero/tests/e2e/test_oft_with_uln.cairo +299 -0
  283. package/layerzero/tests/e2e/utils.cairo +490 -0
  284. package/layerzero/tests/endpoint/message_lib_manager/test_message_lib_manager.cairo +2051 -0
  285. package/layerzero/tests/endpoint/message_lib_manager/utils.cairo +45 -0
  286. package/layerzero/tests/endpoint/messaging_channel/test_messaging_channel.cairo +621 -0
  287. package/layerzero/tests/endpoint/messaging_channel/utils.cairo +96 -0
  288. package/layerzero/tests/endpoint/messaging_composer/test_messaging_composer.cairo +456 -0
  289. package/layerzero/tests/endpoint/messaging_composer/utils.cairo +75 -0
  290. package/layerzero/tests/endpoint/test_endpoint_commit.cairo +763 -0
  291. package/layerzero/tests/endpoint/test_endpoint_lzreceive.cairo +1253 -0
  292. package/layerzero/tests/endpoint/test_endpoint_quote.cairo +71 -0
  293. package/layerzero/tests/endpoint/test_endpoint_send.cairo +1327 -0
  294. package/layerzero/tests/endpoint/utils.cairo +129 -0
  295. package/layerzero/tests/fuzzable/blockchain_config.cairo +89 -0
  296. package/layerzero/tests/fuzzable/bytes32.cairo +16 -0
  297. package/layerzero/tests/fuzzable/contract_address.cairo +67 -0
  298. package/layerzero/tests/fuzzable/dst_config.cairo +37 -0
  299. package/layerzero/tests/fuzzable/eid.cairo +23 -0
  300. package/layerzero/tests/fuzzable/eth_address.cairo +17 -0
  301. package/layerzero/tests/fuzzable/expiry.cairo +27 -0
  302. package/layerzero/tests/fuzzable/felt_array.cairo +38 -0
  303. package/layerzero/tests/fuzzable/inbound_params.cairo +21 -0
  304. package/layerzero/tests/fuzzable/keys.cairo +16 -0
  305. package/layerzero/tests/fuzzable/model_type.cairo +27 -0
  306. package/layerzero/tests/fuzzable/origin.cairo +21 -0
  307. package/layerzero/tests/fuzzable/price.cairo +32 -0
  308. package/layerzero/tests/fuzzable/role_admin.cairo +29 -0
  309. package/layerzero/tests/fuzzable/small_byte_array.cairo +61 -0
  310. package/layerzero/tests/lib.cairo +177 -0
  311. package/layerzero/tests/message_lib/sml/test_simple_message_lib.cairo +224 -0
  312. package/layerzero/tests/message_lib/uln/test_uln_admin.cairo +2150 -0
  313. package/layerzero/tests/message_lib/uln/test_uln_config.cairo +527 -0
  314. package/layerzero/tests/message_lib/uln/test_uln_config_storage_node.cairo +69 -0
  315. package/layerzero/tests/message_lib/uln/test_uln_executor_config.cairo +173 -0
  316. package/layerzero/tests/message_lib/uln/test_uln_options.cairo +329 -0
  317. package/layerzero/tests/message_lib/uln/test_uln_quote.cairo +1038 -0
  318. package/layerzero/tests/message_lib/uln/test_uln_receive.cairo +715 -0
  319. package/layerzero/tests/message_lib/uln/test_uln_send.cairo +1155 -0
  320. package/layerzero/tests/message_lib/uln/utils.cairo +59 -0
  321. package/layerzero/tests/mocks/composer_target.cairo +76 -0
  322. package/layerzero/tests/mocks/endpoint.cairo +199 -0
  323. package/layerzero/tests/mocks/erc20/erc20.cairo +50 -0
  324. package/layerzero/tests/mocks/erc20/interface.cairo +8 -0
  325. package/layerzero/tests/mocks/message_inspector/message_inspector.cairo +17 -0
  326. package/layerzero/tests/mocks/message_lib_manager.cairo +98 -0
  327. package/layerzero/tests/mocks/messaging_channel/interface.cairo +23 -0
  328. package/layerzero/tests/mocks/messaging_channel/messaging_channel.cairo +138 -0
  329. package/layerzero/tests/mocks/messaging_composer.cairo +171 -0
  330. package/layerzero/tests/mocks/oapp_core/interface.cairo +53 -0
  331. package/layerzero/tests/mocks/oapp_core/oapp_core.cairo +142 -0
  332. package/layerzero/tests/mocks/oapp_options_type3.cairo +42 -0
  333. package/layerzero/tests/mocks/oft_core/interface.cairo +28 -0
  334. package/layerzero/tests/mocks/oft_core/oft_core.cairo +242 -0
  335. package/layerzero/tests/mocks/receiver.cairo +54 -0
  336. package/layerzero/tests/mocks/treasury/lz_token_fee_lib.cairo +57 -0
  337. package/layerzero/tests/mocks/treasury/treasury.cairo +74 -0
  338. package/layerzero/tests/mocks/uln_config/interface.cairo +12 -0
  339. package/layerzero/tests/mocks/uln_config/uln_config.cairo +35 -0
  340. package/layerzero/tests/mocks/workers/base.cairo +80 -0
  341. package/layerzero/tests/mocks/workers/dvn.cairo +115 -0
  342. package/layerzero/tests/mocks/workers/executor/decode/decode.cairo +97 -0
  343. package/layerzero/tests/mocks/workers/executor/decode/interface.cairo +59 -0
  344. package/layerzero/tests/mocks/workers/executor/executor.cairo +176 -0
  345. package/layerzero/tests/oapps/common/test_oapp_options_type_3.cairo +279 -0
  346. package/layerzero/tests/oapps/oft/test_oft_adapter.cairo +441 -0
  347. package/layerzero/tests/oapps/oft/test_oft_compose_msg_codec.cairo +139 -0
  348. package/layerzero/tests/oapps/oft/test_oft_core.cairo +751 -0
  349. package/layerzero/tests/oapps/oft/test_oft_msg_codec.cairo +268 -0
  350. package/layerzero/tests/oapps/test_counter.cairo +470 -0
  351. package/layerzero/tests/oapps/test_oapp_core.cairo +750 -0
  352. package/layerzero/tests/treasury/test_lz_token_fee_lib.cairo +63 -0
  353. package/layerzero/tests/treasury/test_treasury.cairo +458 -0
  354. package/layerzero/tests/treasury/utils.cairo +8 -0
  355. package/layerzero/tests/utils.cairo +48 -0
  356. package/layerzero/tests/workers/base/test_worker_base.cairo +1097 -0
  357. package/layerzero/tests/workers/base/utils.cairo +76 -0
  358. package/layerzero/tests/workers/dvn/fee_lib/test_dvn_fee_lib.cairo +361 -0
  359. package/layerzero/tests/workers/dvn/test_dvn.cairo +1101 -0
  360. package/layerzero/tests/workers/dvn/test_dvn_options.cairo +312 -0
  361. package/layerzero/tests/workers/dvn/utils.cairo +236 -0
  362. package/layerzero/tests/workers/executor/fee_lib/test_executor_fee_lib.cairo +223 -0
  363. package/layerzero/tests/workers/executor/test_decode.cairo +612 -0
  364. package/layerzero/tests/workers/executor/test_executor.cairo +1472 -0
  365. package/layerzero/tests/workers/executor/utils.cairo +296 -0
  366. package/layerzero/tests/workers/price_feed/test_price_feed.cairo +879 -0
  367. package/layerzero/tests/workers/price_feed/utils.cairo +37 -0
  368. package/libs/enumerable_set/Scarb.lock +24 -0
  369. package/libs/enumerable_set/Scarb.toml +17 -0
  370. package/libs/enumerable_set/src/enumerable_set.cairo +118 -0
  371. package/libs/enumerable_set/src/lib.cairo +4 -0
  372. package/libs/enumerable_set/tests/lib.cairo +5 -0
  373. package/libs/enumerable_set/tests/mocks/mock_enumerable_set.cairo +61 -0
  374. package/libs/enumerable_set/tests/test_enumerable_set.cairo +379 -0
  375. package/libs/lz_utils/Scarb.lock +24 -0
  376. package/libs/lz_utils/Scarb.toml +17 -0
  377. package/libs/lz_utils/src/bytes.cairo +33 -0
  378. package/libs/lz_utils/src/error.cairo +12 -0
  379. package/libs/lz_utils/src/keccak.cairo +28 -0
  380. package/libs/lz_utils/src/lib.cairo +3 -0
  381. package/libs/multisig/Scarb.lock +172 -0
  382. package/libs/multisig/Scarb.toml +23 -0
  383. package/libs/multisig/src/errors.cairo +84 -0
  384. package/libs/multisig/src/events.cairo +13 -0
  385. package/libs/multisig/src/interface.cairo +73 -0
  386. package/libs/multisig/src/lib.cairo +7 -0
  387. package/libs/multisig/src/multisig.cairo +241 -0
  388. package/libs/multisig/tests/lib.cairo +4 -0
  389. package/libs/multisig/tests/mocks/mock_multisig.cairo +57 -0
  390. package/libs/multisig/tests/test_multisig.cairo +452 -0
  391. package/package.json +41 -0
  392. package/src/scripts/build-abi.ts +51 -0
  393. package/target/CACHEDIR.TAG +3 -0
  394. package/target/dev/.fingerprint/alexandria_bytes-5ea6u5t70d7qi/alexandria_bytes +1 -0
  395. package/target/dev/.fingerprint/alexandria_data_structures-0aue3g6q80gs0/alexandria_data_structures +1 -0
  396. package/target/dev/.fingerprint/alexandria_math-h2fi7jdq4isuu/alexandria_math +1 -0
  397. package/target/dev/.fingerprint/core-lq3u730l5p1ag/core +1 -0
  398. package/target/dev/.fingerprint/core-vf7fc6rvic5vi/core +1 -0
  399. package/target/dev/.fingerprint/enumerable_set-eaerkg8njl85o/enumerable_set +1 -0
  400. package/target/dev/.fingerprint/enumerable_set-r54oje7t06ku8/enumerable_set +1 -0
  401. package/target/dev/.fingerprint/layerzero-oqgdqsaddpi2k/layerzero +1 -0
  402. package/target/dev/.fingerprint/lz_utils-kfkkeueiqg0pa/lz_utils +1 -0
  403. package/target/dev/.fingerprint/lz_utils-u4v1os6e7gkng/lz_utils +1 -0
  404. package/target/dev/.fingerprint/multisig-0fjetugejecge/multisig +1 -0
  405. package/target/dev/.fingerprint/multisig-6j5kqs436hm54/multisig +1 -0
  406. package/target/dev/.fingerprint/openzeppelin-ei1id1hu088lo/openzeppelin +1 -0
  407. package/target/dev/.fingerprint/openzeppelin-j9d5nd1qhfnu6/openzeppelin +1 -0
  408. package/target/dev/.fingerprint/openzeppelin_access-3oa41aikpaek0/openzeppelin_access +1 -0
  409. package/target/dev/.fingerprint/openzeppelin_access-p5h849v8so76q/openzeppelin_access +1 -0
  410. package/target/dev/.fingerprint/openzeppelin_account-4qhv5fks84g9u/openzeppelin_account +1 -0
  411. package/target/dev/.fingerprint/openzeppelin_account-hgbm8ln9ah7rm/openzeppelin_account +1 -0
  412. package/target/dev/.fingerprint/openzeppelin_finance-n70q9al0cps8i/openzeppelin_finance +1 -0
  413. package/target/dev/.fingerprint/openzeppelin_finance-nnd4f8703t3ak/openzeppelin_finance +1 -0
  414. package/target/dev/.fingerprint/openzeppelin_governance-3gnk21ubp5lis/openzeppelin_governance +1 -0
  415. package/target/dev/.fingerprint/openzeppelin_governance-rj1bfont4fij4/openzeppelin_governance +1 -0
  416. package/target/dev/.fingerprint/openzeppelin_introspection-3fja9hd1gvbcq/openzeppelin_introspection +1 -0
  417. package/target/dev/.fingerprint/openzeppelin_introspection-jc3nf5525eet6/openzeppelin_introspection +1 -0
  418. package/target/dev/.fingerprint/openzeppelin_merkle_tree-4en77ogr2r2l2/openzeppelin_merkle_tree +1 -0
  419. package/target/dev/.fingerprint/openzeppelin_merkle_tree-4t190frqs4db8/openzeppelin_merkle_tree +1 -0
  420. package/target/dev/.fingerprint/openzeppelin_presets-aqb0f6p9c0bp6/openzeppelin_presets +1 -0
  421. package/target/dev/.fingerprint/openzeppelin_presets-nseg8korhin8e/openzeppelin_presets +1 -0
  422. package/target/dev/.fingerprint/openzeppelin_security-g7p73ji1ih1qg/openzeppelin_security +1 -0
  423. package/target/dev/.fingerprint/openzeppelin_security-qp5328v80452u/openzeppelin_security +1 -0
  424. package/target/dev/.fingerprint/openzeppelin_token-jjf7tl9rphc6k/openzeppelin_token +1 -0
  425. package/target/dev/.fingerprint/openzeppelin_token-r6s43vlpj6rqk/openzeppelin_token +1 -0
  426. package/target/dev/.fingerprint/openzeppelin_upgrades-0dpbnre7engca/openzeppelin_upgrades +1 -0
  427. package/target/dev/.fingerprint/openzeppelin_upgrades-2sqgvbuv9s800/openzeppelin_upgrades +1 -0
  428. package/target/dev/.fingerprint/openzeppelin_utils-mj395ivff1ffo/openzeppelin_utils +1 -0
  429. package/target/dev/.fingerprint/openzeppelin_utils-oh1hse8sjumgm/openzeppelin_utils +1 -0
  430. package/target/dev/.fingerprint/starkware_utils-1qnnjnq0pf9u0/starkware_utils +1 -0
  431. package/target/dev/.fingerprint/starkware_utils-mh8e3te65lju4/starkware_utils +1 -0
  432. package/target/dev/enumerable_set.sierra.json +1 -0
  433. package/target/dev/incremental/alexandria_bytes-5ea6u5t70d7qi.bin +0 -0
  434. package/target/dev/incremental/alexandria_data_structures-0aue3g6q80gs0.bin +0 -0
  435. package/target/dev/incremental/alexandria_math-h2fi7jdq4isuu.bin +0 -0
  436. package/target/dev/incremental/core-lq3u730l5p1ag.bin +0 -0
  437. package/target/dev/incremental/core-vf7fc6rvic5vi.bin +0 -0
  438. package/target/dev/incremental/enumerable_set-eaerkg8njl85o.bin +0 -0
  439. package/target/dev/incremental/enumerable_set-r54oje7t06ku8.bin +0 -0
  440. package/target/dev/incremental/layerzero-oqgdqsaddpi2k.bin +0 -0
  441. package/target/dev/incremental/lz_utils-kfkkeueiqg0pa.bin +0 -0
  442. package/target/dev/incremental/lz_utils-u4v1os6e7gkng.bin +0 -0
  443. package/target/dev/incremental/multisig-0fjetugejecge.bin +0 -0
  444. package/target/dev/incremental/multisig-6j5kqs436hm54.bin +0 -0
  445. package/target/dev/incremental/openzeppelin-ei1id1hu088lo.bin +0 -0
  446. package/target/dev/incremental/openzeppelin-j9d5nd1qhfnu6.bin +0 -0
  447. package/target/dev/incremental/openzeppelin_access-3oa41aikpaek0.bin +0 -0
  448. package/target/dev/incremental/openzeppelin_access-p5h849v8so76q.bin +0 -0
  449. package/target/dev/incremental/openzeppelin_account-4qhv5fks84g9u.bin +0 -0
  450. package/target/dev/incremental/openzeppelin_account-hgbm8ln9ah7rm.bin +0 -0
  451. package/target/dev/incremental/openzeppelin_finance-n70q9al0cps8i.bin +0 -0
  452. package/target/dev/incremental/openzeppelin_finance-nnd4f8703t3ak.bin +0 -0
  453. package/target/dev/incremental/openzeppelin_governance-3gnk21ubp5lis.bin +0 -0
  454. package/target/dev/incremental/openzeppelin_governance-rj1bfont4fij4.bin +0 -0
  455. package/target/dev/incremental/openzeppelin_introspection-3fja9hd1gvbcq.bin +0 -0
  456. package/target/dev/incremental/openzeppelin_introspection-jc3nf5525eet6.bin +0 -0
  457. package/target/dev/incremental/openzeppelin_merkle_tree-4en77ogr2r2l2.bin +0 -0
  458. package/target/dev/incremental/openzeppelin_merkle_tree-4t190frqs4db8.bin +0 -0
  459. package/target/dev/incremental/openzeppelin_presets-aqb0f6p9c0bp6.bin +0 -0
  460. package/target/dev/incremental/openzeppelin_presets-nseg8korhin8e.bin +0 -0
  461. package/target/dev/incremental/openzeppelin_security-g7p73ji1ih1qg.bin +0 -0
  462. package/target/dev/incremental/openzeppelin_security-qp5328v80452u.bin +0 -0
  463. package/target/dev/incremental/openzeppelin_token-jjf7tl9rphc6k.bin +0 -0
  464. package/target/dev/incremental/openzeppelin_token-r6s43vlpj6rqk.bin +0 -0
  465. package/target/dev/incremental/openzeppelin_upgrades-0dpbnre7engca.bin +0 -0
  466. package/target/dev/incremental/openzeppelin_upgrades-2sqgvbuv9s800.bin +0 -0
  467. package/target/dev/incremental/openzeppelin_utils-mj395ivff1ffo.bin +0 -0
  468. package/target/dev/incremental/openzeppelin_utils-oh1hse8sjumgm.bin +0 -0
  469. package/target/dev/incremental/starkware_utils-1qnnjnq0pf9u0.bin +0 -0
  470. package/target/dev/incremental/starkware_utils-mh8e3te65lju4.bin +0 -0
  471. package/target/dev/layerzero.starknet_artifacts.json +1 -0
  472. package/target/dev/layerzero_BlockedMessageLib.compiled_contract_class.json +1 -0
  473. package/target/dev/layerzero_BlockedMessageLib.contract_class.json +1 -0
  474. package/target/dev/layerzero_Dvn.compiled_contract_class.json +1 -0
  475. package/target/dev/layerzero_Dvn.contract_class.json +1 -0
  476. package/target/dev/layerzero_DvnFeeLib.compiled_contract_class.json +1 -0
  477. package/target/dev/layerzero_DvnFeeLib.contract_class.json +1 -0
  478. package/target/dev/layerzero_Endpoint.compiled_contract_class.json +1 -0
  479. package/target/dev/layerzero_Endpoint.contract_class.json +1 -0
  480. package/target/dev/layerzero_Executor.compiled_contract_class.json +1 -0
  481. package/target/dev/layerzero_Executor.contract_class.json +1 -0
  482. package/target/dev/layerzero_ExecutorFeeLib.compiled_contract_class.json +1 -0
  483. package/target/dev/layerzero_ExecutorFeeLib.contract_class.json +1 -0
  484. package/target/dev/layerzero_OApp.compiled_contract_class.json +1 -0
  485. package/target/dev/layerzero_OApp.contract_class.json +1 -0
  486. package/target/dev/layerzero_OFT.compiled_contract_class.json +1 -0
  487. package/target/dev/layerzero_OFT.contract_class.json +1 -0
  488. package/target/dev/layerzero_OFTAdapter.compiled_contract_class.json +1 -0
  489. package/target/dev/layerzero_OFTAdapter.contract_class.json +1 -0
  490. package/target/dev/layerzero_OmniCounter.compiled_contract_class.json +1 -0
  491. package/target/dev/layerzero_OmniCounter.contract_class.json +1 -0
  492. package/target/dev/layerzero_PriceFeed.compiled_contract_class.json +1 -0
  493. package/target/dev/layerzero_PriceFeed.contract_class.json +1 -0
  494. package/target/dev/layerzero_SimpleMessageLib.compiled_contract_class.json +1 -0
  495. package/target/dev/layerzero_SimpleMessageLib.contract_class.json +1 -0
  496. package/target/dev/layerzero_Treasury.compiled_contract_class.json +1 -0
  497. package/target/dev/layerzero_Treasury.contract_class.json +1 -0
  498. package/target/dev/layerzero_UltraLightNode.compiled_contract_class.json +1 -0
  499. package/target/dev/layerzero_UltraLightNode.contract_class.json +1 -0
  500. package/target/dev/lz_utils.sierra.json +1 -0
  501. package/target/dev/multisig.sierra.json +1 -0
  502. package/tools/update_contracts.sh +19 -0
  503. package/tsconfig.json +20 -0
  504. 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,5 @@
1
+ #[derive(Drop, starknet::Event)]
2
+ pub struct BasisPointsUpdated {
3
+ pub old_bp: u256,
4
+ pub new_bp: u256,
5
+ }
@@ -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
+ }