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