@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,22 @@
1
+ use lz_utils::error::{Error, format_error};
2
+
3
+ #[derive(Drop)]
4
+ pub enum OAppOptionsType3Error {
5
+ InvalidOptions,
6
+ }
7
+
8
+ impl ErrorNameImpl of Error<OAppOptionsType3Error> {
9
+ fn prefix() -> ByteArray {
10
+ "LZ_OAPP_OPTIONS_TYPE3"
11
+ }
12
+
13
+ fn name(self: OAppOptionsType3Error) -> ByteArray {
14
+ match self {
15
+ OAppOptionsType3Error::InvalidOptions => "INVALID_OPTIONS",
16
+ }
17
+ }
18
+ }
19
+
20
+ pub fn err_invalid_options(options: @ByteArray) -> ByteArray {
21
+ format_error(OAppOptionsType3Error::InvalidOptions, format!("options_len: {}", options.len()))
22
+ }
@@ -0,0 +1,6 @@
1
+ use crate::oapps::common::oapp_options_type_3::structs::EnforcedOptionParam;
2
+
3
+ #[derive(Drop, starknet::Event)]
4
+ pub struct EnforcedOptionSet {
5
+ pub options: Array<EnforcedOptionParam>,
6
+ }
@@ -0,0 +1,34 @@
1
+ use crate::oapps::common::oapp_options_type_3::structs::EnforcedOptionParam;
2
+
3
+ #[starknet::interface]
4
+ pub trait IOAppOptionsType3<TContractState> {
5
+ /// Sets the enforced options for specific endpoint and message type combinations.
6
+ /// Only the owner/admin of the OApp can call this function.
7
+ ///
8
+ /// # Arguments
9
+ /// * `enforced_options` - Array of EnforcedOptionParam structures specifying enforced options
10
+ fn set_enforced_options(ref self: TContractState, enforced_options: Array<EnforcedOptionParam>);
11
+
12
+ /// Combines options for a given endpoint and message type.
13
+ ///
14
+ /// # Arguments
15
+ /// * `eid` - The endpoint ID
16
+ /// * `msg_type` - The OApp message type
17
+ /// * `extra_options` - Additional options passed by the caller
18
+ ///
19
+ /// # Returns
20
+ /// * `ByteArray` - The combination of caller specified options AND enforced options
21
+ fn combine_options(
22
+ self: @TContractState, eid: u32, msg_type: u16, extra_options: ByteArray,
23
+ ) -> ByteArray;
24
+
25
+ /// Gets the enforced options for a specific endpoint and message type
26
+ ///
27
+ /// # Arguments
28
+ /// * `eid` - The endpoint ID
29
+ /// * `msg_type` - The OApp message type
30
+ ///
31
+ /// # Returns
32
+ /// * `ByteArray` - The enforced options
33
+ fn get_enforced_options(self: @TContractState, eid: u32, msg_type: u16) -> ByteArray;
34
+ }
@@ -0,0 +1,120 @@
1
+ #[starknet::component]
2
+ pub mod OAppOptionsType3Component {
3
+ use alexandria_bytes::byte_array_ext::ByteArrayTraitExt;
4
+ use core::panics::panic_with_byte_array;
5
+ use openzeppelin::access::ownable::OwnableComponent;
6
+ use openzeppelin::access::ownable::OwnableComponent::{
7
+ InternalImpl as OwnableInternalImpl, InternalTrait as OwnableInternalTrait,
8
+ };
9
+ use starknet::storage::{Map, StorageMapReadAccess, StorageMapWriteAccess};
10
+ use starkware_utils::errors::assert_with_byte_array;
11
+ use crate::oapps::common::oapp_options_type_3::errors::err_invalid_options;
12
+ use crate::oapps::common::oapp_options_type_3::events::EnforcedOptionSet;
13
+ use crate::oapps::common::oapp_options_type_3::interface::IOAppOptionsType3;
14
+ use crate::oapps::common::oapp_options_type_3::structs::EnforcedOptionParam;
15
+
16
+ // Constants
17
+ pub const OPTION_TYPE_3: u16 = 3;
18
+
19
+ #[storage]
20
+ pub struct Storage {
21
+ /// Mapping from (eid, msg_type) => enforced options
22
+ OAppOptionsType3_enforced_options: Map<(u32, u16), ByteArray>,
23
+ }
24
+
25
+ #[event]
26
+ #[derive(Drop, starknet::Event)]
27
+ pub enum Event {
28
+ EnforcedOptionSet: EnforcedOptionSet,
29
+ }
30
+
31
+ #[generate_trait]
32
+ pub impl InternalImpl<
33
+ TContractState, +HasComponent<TContractState>,
34
+ > of InternalTrait<TContractState> {
35
+ /// Internal function to set enforced options
36
+ fn _set_enforced_options(
37
+ ref self: ComponentState<TContractState>, enforced_options: Array<EnforcedOptionParam>,
38
+ ) {
39
+ for option in enforced_options.clone().into_iter() {
40
+ // Enforced options are only available for optionType 3
41
+ self._assert_options_type_3(@option.options);
42
+
43
+ // Store the enforced option
44
+ self
45
+ .OAppOptionsType3_enforced_options
46
+ .write((option.eid, option.msg_type), option.options.clone());
47
+ }
48
+
49
+ self.emit(EnforcedOptionSet { options: enforced_options });
50
+ }
51
+
52
+ /// Internal function to assert that options are of type 3
53
+ fn _assert_options_type_3(self: @ComponentState<TContractState>, options: @ByteArray) {
54
+ // Use the ByteArrayTraitExt to read u16 from the beginning
55
+ let (_, option_type) = options.read_u16(0);
56
+
57
+ assert_with_byte_array(option_type == OPTION_TYPE_3, err_invalid_options(options));
58
+ }
59
+ }
60
+
61
+ #[embeddable_as(OAppOptionsType3Impl)]
62
+ impl OAppOptionsType3<
63
+ TContractState,
64
+ +HasComponent<TContractState>,
65
+ impl Ownable: OwnableComponent::HasComponent<TContractState>,
66
+ > of IOAppOptionsType3<ComponentState<TContractState>> {
67
+ fn set_enforced_options(
68
+ ref self: ComponentState<TContractState>, enforced_options: Array<EnforcedOptionParam>,
69
+ ) {
70
+ // Only owner can set enforced options
71
+ let ownable = get_dep_component!(@self, Ownable);
72
+ ownable.assert_only_owner();
73
+
74
+ self._set_enforced_options(enforced_options);
75
+ }
76
+
77
+ fn combine_options(
78
+ self: @ComponentState<TContractState>,
79
+ eid: u32,
80
+ msg_type: u16,
81
+ extra_options: ByteArray,
82
+ ) -> ByteArray {
83
+ let enforced = self.OAppOptionsType3_enforced_options.read((eid, msg_type));
84
+
85
+ // No enforced options, pass whatever the caller supplied
86
+ if enforced.len() == 0 {
87
+ return extra_options;
88
+ }
89
+
90
+ // No caller options, return enforced
91
+ if extra_options.len() == 0 {
92
+ return enforced;
93
+ }
94
+
95
+ // If caller provided extra_options, must be type 3 as it's the ONLY type that can be
96
+ // combined
97
+ if extra_options.len() >= 2 {
98
+ self._assert_options_type_3(@extra_options);
99
+
100
+ // Remove the first 2 bytes containing the type from the extra_options and combine
101
+ // with enforced
102
+ let mut combined = enforced;
103
+ if extra_options.len() > 2 {
104
+ let (_, extra_data) = extra_options.read_bytes(2, extra_options.len() - 2);
105
+ combined.append(@extra_data);
106
+ }
107
+ return combined;
108
+ }
109
+
110
+ // No valid set of options was found
111
+ panic_with_byte_array(@err_invalid_options(@extra_options));
112
+ }
113
+
114
+ fn get_enforced_options(
115
+ self: @ComponentState<TContractState>, eid: u32, msg_type: u16,
116
+ ) -> ByteArray {
117
+ self.OAppOptionsType3_enforced_options.read((eid, msg_type))
118
+ }
119
+ }
120
+ }
@@ -0,0 +1,6 @@
1
+ #[derive(Drop, Serde, Clone)]
2
+ pub struct EnforcedOptionParam {
3
+ pub eid: u32,
4
+ pub msg_type: u16,
5
+ pub options: ByteArray,
6
+ }
@@ -0,0 +1,3 @@
1
+ // Increment types
2
+ pub const INCREMENT_TYPE_A_B: u8 = 0x01; // A->B increment (no response)
3
+ pub const INCREMENT_TYPE_A_B_A: u8 = 0x02; // A->B->A increment (with response)
@@ -0,0 +1,170 @@
1
+ #[starknet::contract]
2
+ pub mod OmniCounter {
3
+ use alexandria_bytes::byte_array_ext::ByteArrayTraitExt;
4
+ use lz_utils::bytes::Bytes32;
5
+ use openzeppelin::access::ownable::OwnableComponent;
6
+ use starknet::storage::{
7
+ Map, StoragePathEntry, StoragePointerReadAccess, StoragePointerWriteAccess,
8
+ };
9
+ use starknet::{ContractAddress, get_caller_address};
10
+ use crate::common::structs::messaging::{MessageReceipt, MessagingFee};
11
+ use crate::common::structs::packet::Origin;
12
+ use crate::oapps::counter::constants::{INCREMENT_TYPE_A_B, INCREMENT_TYPE_A_B_A};
13
+ use crate::oapps::counter::interface::IOmniCounter;
14
+ use crate::oapps::counter::structs::{IncrementReceived, IncrementSent};
15
+ use crate::oapps::oapp::oapp_core::OAppCoreComponent;
16
+
17
+ component!(path: OAppCoreComponent, storage: oapp_core, event: OAppCoreEvent);
18
+ component!(path: OwnableComponent, storage: ownable, event: OwnableEvent);
19
+
20
+ // OAppCore Mixin - now with built-in ownership control
21
+ #[abi(embed_v0)]
22
+ impl OAppCoreImpl = OAppCoreComponent::OAppCoreImpl<ContractState>;
23
+ impl OAppCoreInternalImpl = OAppCoreComponent::InternalImpl<ContractState>;
24
+ impl OAppCoreSenderImpl = OAppCoreComponent::OAppSenderImpl<ContractState>;
25
+
26
+ #[abi(embed_v0)]
27
+ impl OAppCoreReceiverImpl = OAppCoreComponent::OAppReceiverImpl<ContractState>;
28
+
29
+ #[abi(embed_v0)]
30
+ impl ILayerZeroReceiverImpl =
31
+ OAppCoreComponent::LayerZeroReceiverImpl<ContractState>;
32
+
33
+ // Ownable Mixin
34
+ #[abi(embed_v0)]
35
+ impl OwnableImpl = OwnableComponent::OwnableImpl<ContractState>;
36
+ impl OwnableInternalImpl = OwnableComponent::InternalImpl<ContractState>;
37
+
38
+ #[storage]
39
+ struct Storage {
40
+ // Map from remoteEid to counter value
41
+ counters: Map<u32, u256>,
42
+ #[substorage(v0)]
43
+ oapp_core: OAppCoreComponent::Storage,
44
+ #[substorage(v0)]
45
+ ownable: OwnableComponent::Storage,
46
+ }
47
+
48
+ #[event]
49
+ #[derive(Drop, starknet::Event)]
50
+ pub enum Event {
51
+ #[flat]
52
+ OAppCoreEvent: OAppCoreComponent::Event,
53
+ #[flat]
54
+ OwnableEvent: OwnableComponent::Event,
55
+ IncrementSent: IncrementSent,
56
+ IncrementReceived: IncrementReceived,
57
+ }
58
+
59
+ #[constructor]
60
+ fn constructor(
61
+ ref self: ContractState,
62
+ endpoint: ContractAddress,
63
+ owner: ContractAddress,
64
+ native_token: ContractAddress,
65
+ ) {
66
+ self.oapp_core.initializer(endpoint, native_token);
67
+ self.ownable.initializer(owner);
68
+ }
69
+
70
+
71
+ #[abi(embed_v0)]
72
+ impl OmniCounterImpl of IOmniCounter<ContractState> {
73
+ fn get_counter(self: @ContractState, remote_eid: u32) -> u256 {
74
+ self.counters.entry(remote_eid).read()
75
+ }
76
+
77
+ fn quote(
78
+ self: @ContractState,
79
+ dst_eid: u32,
80
+ increment_type: u8,
81
+ options: ByteArray,
82
+ pay_in_lz_token: bool,
83
+ ) -> MessagingFee {
84
+ self
85
+ .oapp_core
86
+ ._quote(
87
+ dst_eid,
88
+ self._encode_increment_message(increment_type),
89
+ options,
90
+ pay_in_lz_token,
91
+ )
92
+ }
93
+
94
+ fn increment(
95
+ ref self: ContractState,
96
+ dst_eid: u32,
97
+ increment_type: u8,
98
+ options: ByteArray,
99
+ fee: MessagingFee,
100
+ refund_address: ContractAddress,
101
+ ) -> MessageReceipt {
102
+ let caller = get_caller_address();
103
+ let message = self._encode_increment_message(increment_type);
104
+
105
+ self.emit(IncrementSent { sender: caller, dst_eid, increment_type });
106
+
107
+ // Call the underlying OAppCore send function
108
+ self.oapp_core._lz_send(dst_eid, message, options, fee, refund_address)
109
+ }
110
+ }
111
+
112
+ #[generate_trait]
113
+ impl InternalImpl of InternalTrait {
114
+ /// Encode increment message for cross-chain communication
115
+ fn _encode_increment_message(self: @ContractState, increment_type: u8) -> ByteArray {
116
+ let mut message: ByteArray = "";
117
+
118
+ // Message Format:
119
+ // 1 byte: Increment type (AB=0x01, ABA=0x02)
120
+ message.append_byte(increment_type);
121
+
122
+ message
123
+ }
124
+
125
+ /// Send a response increment back to the original sender (for ABA type)
126
+ fn _send_response(ref self: ContractState, dst_eid: u32) {
127
+ // Use default options and fee for response (in real implementation, these should be
128
+ // configurable)
129
+ let options: ByteArray = "";
130
+ let fee = MessagingFee { native_fee: 0, lz_token_fee: 0 };
131
+ let refund_address = get_caller_address();
132
+
133
+ self.increment(dst_eid, INCREMENT_TYPE_A_B, options, fee, refund_address);
134
+ }
135
+ }
136
+
137
+ // Implement IOAppHooks to provide the required _lz_receive implementation
138
+ impl IOAppHooks<ContractState> of OAppCoreComponent::IOAppHooks<ContractState> {
139
+ fn _lz_receive(
140
+ ref self: OAppCoreComponent::ComponentState<ContractState>,
141
+ origin: Origin,
142
+ guid: Bytes32,
143
+ message: ByteArray,
144
+ executor: ContractAddress,
145
+ value: u256,
146
+ extra_data: ByteArray,
147
+ ) {
148
+ let mut contract_state = unsafe_new_contract_state();
149
+ // Parse the message
150
+ let (_, increment_type) = message.read_u8(0);
151
+
152
+ // Get the source EID
153
+ let src_eid = origin.src_eid;
154
+
155
+ // Increment the counter for this remote EID
156
+ let counter_entry = contract_state.counters.entry(src_eid);
157
+ let old_value = counter_entry.read();
158
+ let new_value = old_value + 1;
159
+ counter_entry.write(new_value);
160
+
161
+ contract_state
162
+ .emit(IncrementReceived { src_eid, old_value, new_value, increment_type, value });
163
+
164
+ // If this is an ABA type increment, send a response back
165
+ if increment_type == INCREMENT_TYPE_A_B_A {
166
+ contract_state._send_response(src_eid);
167
+ }
168
+ }
169
+ }
170
+ }
@@ -0,0 +1,27 @@
1
+ use starknet::ContractAddress;
2
+ use crate::common::structs::messaging::{MessageReceipt, MessagingFee};
3
+
4
+ #[starknet::interface]
5
+ pub trait IOmniCounter<TContractState> {
6
+ /// Get the counter value for a specific remote EID.
7
+ fn get_counter(self: @TContractState, remote_eid: u32) -> u256;
8
+
9
+ /// Quote an increment.
10
+ fn quote(
11
+ self: @TContractState,
12
+ dst_eid: u32,
13
+ increment_type: u8,
14
+ options: ByteArray,
15
+ pay_in_lz_token: bool,
16
+ ) -> MessagingFee;
17
+
18
+ /// Send an increment message to another chain.
19
+ fn increment(
20
+ ref self: TContractState,
21
+ dst_eid: u32,
22
+ increment_type: u8,
23
+ options: ByteArray,
24
+ fee: MessagingFee,
25
+ refund_address: ContractAddress,
26
+ ) -> MessageReceipt;
27
+ }
@@ -0,0 +1,20 @@
1
+ use starknet::ContractAddress;
2
+
3
+ #[derive(Drop, starknet::Event)]
4
+ pub struct IncrementSent {
5
+ #[key]
6
+ pub sender: ContractAddress,
7
+ #[key]
8
+ pub dst_eid: u32,
9
+ pub increment_type: u8,
10
+ }
11
+
12
+ #[derive(Drop, starknet::Event)]
13
+ pub struct IncrementReceived {
14
+ #[key]
15
+ pub src_eid: u32,
16
+ pub old_value: u256,
17
+ pub new_value: u256,
18
+ pub increment_type: u8,
19
+ pub value: u256,
20
+ }
@@ -0,0 +1,21 @@
1
+ //! Message inspector interface
2
+
3
+ /// IMessageInspector defines the complete interface for message inspection.
4
+ #[starknet::interface]
5
+ pub trait IMessageInspector<TContractState> {
6
+ /// Inspect the message and options
7
+ ///
8
+ /// This function is called to inspect the message and options before they are sent.
9
+ /// If the message or options fail inspection, the transaction will revert.
10
+ ///
11
+ /// # Arguments
12
+ /// * `message` - The message to inspect
13
+ /// * `options` - The options to inspect
14
+ ///
15
+ /// # Returns
16
+ /// * `bool` - True if the message and options pass inspection, false otherwise
17
+ ///
18
+ /// # Panics
19
+ /// * If the message or options fail inspection, the transaction will revert
20
+ fn inspect_msg(self: @TContractState, message: ByteArray, options: ByteArray) -> bool;
21
+ }
@@ -0,0 +1,72 @@
1
+ use lz_utils::bytes::Bytes32;
2
+ use lz_utils::error::{Error, format_error};
3
+ use starknet::ContractAddress;
4
+
5
+ #[derive(Drop)]
6
+ pub enum OAppCoreError {
7
+ OnlyEndpoint,
8
+ OnlyPeer,
9
+ NoPeer,
10
+ NotEnoughNative,
11
+ NotEnoughNativeAllowance,
12
+ NotEnoughLzToken,
13
+ NotEnoughLzTokenAllowance,
14
+ LzTokenUnavailable,
15
+ }
16
+
17
+ impl ErrorNameImpl of Error<OAppCoreError> {
18
+ fn prefix() -> ByteArray {
19
+ "LZ_OAPP_CORE"
20
+ }
21
+
22
+ fn name(self: OAppCoreError) -> ByteArray {
23
+ match self {
24
+ OAppCoreError::OnlyEndpoint => "ONLY_ENDPOINT",
25
+ OAppCoreError::OnlyPeer => "ONLY_PEER",
26
+ OAppCoreError::NoPeer => "NO_PEER",
27
+ OAppCoreError::NotEnoughNative => "NOT_ENOUGH_NATIVE",
28
+ OAppCoreError::NotEnoughNativeAllowance => "NOT_ENOUGH_NATIVE_ALLOWANCE",
29
+ OAppCoreError::NotEnoughLzToken => "NOT_ENOUGH_LZ_TOKEN",
30
+ OAppCoreError::NotEnoughLzTokenAllowance => "NOT_ENOUGH_LZ_TOKEN_ALLOWANCE",
31
+ OAppCoreError::LzTokenUnavailable => "LZ_TOKEN_UNAVAILABLE",
32
+ }
33
+ }
34
+ }
35
+
36
+ pub fn err_only_endpoint(endpoint: ContractAddress) -> ByteArray {
37
+ format_error(OAppCoreError::OnlyEndpoint, format!("{:?}", endpoint))
38
+ }
39
+
40
+ pub fn err_only_peer(eid: u32, peer: Bytes32) -> ByteArray {
41
+ format_error(OAppCoreError::OnlyPeer, format!("eid: {:?}, peer: {:?}", eid, peer))
42
+ }
43
+
44
+ pub fn err_no_peer(eid: u32) -> ByteArray {
45
+ format_error(OAppCoreError::NoPeer, format!("eid: {:?}", eid))
46
+ }
47
+
48
+ pub fn err_not_enough_native(fee: u256, balance: u256) -> ByteArray {
49
+ format_error(OAppCoreError::NotEnoughNative, format!("fee: {:?}, balance: {:?}", fee, balance))
50
+ }
51
+
52
+ pub fn err_not_enough_lz_token(fee: u256, balance: u256) -> ByteArray {
53
+ format_error(OAppCoreError::NotEnoughLzToken, format!("fee: {:?}, balance: {:?}", fee, balance))
54
+ }
55
+
56
+ pub fn err_lz_token_unavailable() -> ByteArray {
57
+ format_error(OAppCoreError::LzTokenUnavailable, "")
58
+ }
59
+
60
+ pub fn err_not_enough_lz_token_allowance(fee: u256, allowance: u256) -> ByteArray {
61
+ format_error(
62
+ OAppCoreError::NotEnoughLzTokenAllowance,
63
+ format!("fee: {:?}, allowance: {:?}", fee, allowance),
64
+ )
65
+ }
66
+
67
+ pub fn err_not_enough_native_allowance(fee: u256, allowance: u256) -> ByteArray {
68
+ format_error(
69
+ OAppCoreError::NotEnoughNativeAllowance,
70
+ format!("fee: {:?}, allowance: {:?}", fee, allowance),
71
+ )
72
+ }
@@ -0,0 +1,9 @@
1
+ use lz_utils::bytes::Bytes32;
2
+
3
+ #[derive(Drop, starknet::Event)]
4
+ pub struct PeerSet {
5
+ #[key]
6
+ pub eid: u32,
7
+ #[key]
8
+ pub peer: Bytes32,
9
+ }
@@ -0,0 +1,67 @@
1
+ use lz_utils::bytes::Bytes32;
2
+ use starknet::ContractAddress;
3
+ use crate::Origin;
4
+
5
+ #[starknet::interface]
6
+ pub trait IOApp<TContractState> {
7
+ /// Gets the LayerZero endpoint contract address
8
+ ///
9
+ /// # Returns
10
+ ///
11
+ /// The contract address of the LayerZero endpoint
12
+ fn get_endpoint(self: @TContractState) -> ContractAddress;
13
+
14
+ /// Sets a peer for a specific endpoint ID
15
+ /// This establishes a trusted connection to another OApp on a different chain
16
+ ///
17
+ /// # Arguments
18
+ ///
19
+ /// * `eid`: The endpoint ID of the destination chain
20
+ /// * `peer`: The peer address as a 32-byte value
21
+ fn set_peer(ref self: TContractState, eid: u32, peer: Bytes32);
22
+
23
+ /// Gets the peer address for a specific endpoint ID
24
+ ///
25
+ /// # Arguments
26
+ ///
27
+ /// * `eid`: The endpoint ID of the destination chain
28
+ ///
29
+ /// # Returns
30
+ ///
31
+ /// The peer address as a 32-byte value
32
+ fn get_peer(self: @TContractState, eid: u32) -> Bytes32;
33
+
34
+ /// Returns the OApp version information
35
+ ///
36
+ /// # Returns
37
+ ///
38
+ /// A tuple containing (sender_version, receiver_version) as u64 values
39
+ fn oapp_version(self: @TContractState) -> (u64, u64);
40
+
41
+ /// Sets the send library for a specific endpoint ID
42
+ ///
43
+ /// # Arguments
44
+ ///
45
+ /// * `dst_eid`: The destination endpoint ID
46
+ /// * `delegate`: The contract address of the delegate
47
+ fn set_delegate(ref self: TContractState, delegate: ContractAddress);
48
+ }
49
+
50
+ #[starknet::interface]
51
+ pub trait IOAppReceiver<TContractState> {
52
+ /// Verifies if a sender is authorized for compose message operations
53
+ /// This is used in message composition scenarios to validate senders
54
+ ///
55
+ /// # Arguments
56
+ ///
57
+ /// * `origin`: The origin information of the message
58
+ /// * `message`: The message content to validate
59
+ /// * `sender`: The contract address claiming to be the sender
60
+ ///
61
+ /// # Returns
62
+ ///
63
+ /// True if the sender is authorized for compose messages, false otherwise
64
+ fn is_compose_msg_sender(
65
+ self: @TContractState, origin: Origin, message: ByteArray, sender: ContractAddress,
66
+ ) -> bool;
67
+ }
@@ -0,0 +1,70 @@
1
+ /// OApp - Simple LayerZero OApp using integrated OAppCore functionality
2
+ #[starknet::contract]
3
+ pub mod OApp {
4
+ use layerzero::oapps::oapp::oapp_core::OAppCoreComponent;
5
+ use lz_utils::bytes::Bytes32;
6
+ // Core OApp implementation - all types are provided by the component traits
7
+ use openzeppelin::access::ownable::OwnableComponent;
8
+ use starknet::ContractAddress;
9
+ use crate::Origin;
10
+
11
+ component!(path: OAppCoreComponent, storage: oapp_core, event: OAppCoreEvent);
12
+ component!(path: OwnableComponent, storage: ownable, event: OwnableEvent);
13
+
14
+ // OAppCore Mixin - Core functionality
15
+ #[abi(embed_v0)]
16
+ impl OAppCoreImpl = OAppCoreComponent::OAppCoreImpl<ContractState>;
17
+ #[abi(embed_v0)]
18
+ impl ILayerZeroReceiverImpl =
19
+ OAppCoreComponent::LayerZeroReceiverImpl<ContractState>;
20
+ #[abi(embed_v0)]
21
+ impl IOAppReceiverImpl = OAppCoreComponent::OAppReceiverImpl<ContractState>;
22
+ impl OAppCoreInternalImpl = OAppCoreComponent::InternalImpl<ContractState>;
23
+
24
+ // Ownable Mixin
25
+ #[abi(embed_v0)]
26
+ impl OwnableImpl = OwnableComponent::OwnableImpl<ContractState>;
27
+ impl OwnableInternalImpl = OwnableComponent::InternalImpl<ContractState>;
28
+
29
+ #[storage]
30
+ struct Storage {
31
+ #[substorage(v0)]
32
+ oapp_core: OAppCoreComponent::Storage,
33
+ #[substorage(v0)]
34
+ ownable: OwnableComponent::Storage,
35
+ }
36
+
37
+ #[event]
38
+ #[derive(Drop, starknet::Event)]
39
+ pub enum Event {
40
+ #[flat]
41
+ OAppCoreEvent: OAppCoreComponent::Event,
42
+ #[flat]
43
+ OwnableEvent: OwnableComponent::Event,
44
+ }
45
+
46
+ #[constructor]
47
+ fn constructor(
48
+ ref self: ContractState,
49
+ endpoint: ContractAddress,
50
+ owner: ContractAddress,
51
+ native_token: ContractAddress,
52
+ ) {
53
+ self.oapp_core.initializer(endpoint, native_token);
54
+ self.ownable.initializer(owner);
55
+ }
56
+
57
+ // Implement IOFTHooks to provide the specific token operations
58
+ impl IOAppHooks<ContractState> of OAppCoreComponent::IOAppHooks<ContractState> {
59
+ fn _lz_receive(
60
+ ref self: OAppCoreComponent::ComponentState<ContractState>,
61
+ origin: Origin,
62
+ guid: Bytes32,
63
+ message: ByteArray,
64
+ executor: ContractAddress,
65
+ value: u256,
66
+ extra_data: ByteArray,
67
+ ) { // Contract should implement receive logic here
68
+ }
69
+ }
70
+ }