@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,188 @@
1
+ /// OFT (Omnichain Fungible Token) Contract
2
+ /// Standard ERC20 token with cross-chain transfer capabilities
3
+ #[starknet::contract]
4
+ pub mod OFT {
5
+ use core::num::traits::Zero;
6
+ use layerzero::oapps::common::oapp_options_type_3::oapp_options_type_3::OAppOptionsType3Component;
7
+ use layerzero::oapps::oapp::oapp_core::OAppCoreComponent;
8
+ use layerzero::oapps::oft::oft_core::OFTCoreComponent;
9
+ use lz_utils::bytes::Bytes32;
10
+ use openzeppelin::access::ownable::OwnableComponent;
11
+ use openzeppelin::token::erc20::{ERC20Component, ERC20HooksEmptyImpl};
12
+ use starknet::{ContractAddress, get_contract_address};
13
+ use crate::Origin;
14
+ use crate::common::constants::DEAD_ADDRESS;
15
+ use crate::oapps::oft::structs::OFTDebit;
16
+
17
+ const SHARED_DECIMALS: u8 = 6;
18
+
19
+ // Component declarations
20
+ component!(path: ERC20Component, storage: erc20, event: ERC20Event);
21
+ component!(path: OwnableComponent, storage: ownable, event: OwnableEvent);
22
+ component!(path: OAppCoreComponent, storage: oapp_core, event: OAppCoreEvent);
23
+ component!(path: OFTCoreComponent, storage: oft_core, event: OFTCoreEvent);
24
+ component!(
25
+ path: OAppOptionsType3Component, storage: oapp_options_type_3, event: OAppOptionsType3Event,
26
+ );
27
+
28
+ // ERC20 Mixin
29
+ #[abi(embed_v0)]
30
+ impl ERC20MixinImpl = ERC20Component::ERC20MixinImpl<ContractState>;
31
+ impl ERC20InternalImpl = ERC20Component::InternalImpl<ContractState>;
32
+
33
+ // ERC20 immutable configuration
34
+ impl ERC20ImmutableConfig of ERC20Component::ImmutableConfig {
35
+ const DECIMALS: u8 = ERC20Component::DEFAULT_DECIMALS;
36
+ }
37
+
38
+ // Ownable Mixin
39
+ #[abi(embed_v0)]
40
+ impl OwnableMixinImpl = OwnableComponent::OwnableMixinImpl<ContractState>;
41
+ impl OwnableInternalImpl = OwnableComponent::InternalImpl<ContractState>;
42
+
43
+ // OApp Core
44
+ #[abi(embed_v0)]
45
+ impl OAppCoreImpl = OAppCoreComponent::OAppCoreImpl<ContractState>;
46
+ impl OAppCoreInternalImpl = OAppCoreComponent::InternalImpl<ContractState>;
47
+
48
+ // OApp Receiver
49
+ #[abi(embed_v0)]
50
+ impl IOAppReceiverImpl = OAppCoreComponent::OAppReceiverImpl<ContractState>;
51
+
52
+ // LayerZero Receiver from OApp Core
53
+ #[abi(embed_v0)]
54
+ impl ILayerZeroReceiverImpl =
55
+ OAppCoreComponent::LayerZeroReceiverImpl<ContractState>;
56
+
57
+ // OFT Core - embed the implementation
58
+ #[abi(embed_v0)]
59
+ impl OFTCoreImpl = OFTCoreComponent::OFTCoreImpl<ContractState>;
60
+ impl OFTCoreInternalImpl = OFTCoreComponent::InternalImpl<ContractState>;
61
+
62
+ // OApp Options Type 3
63
+ #[abi(embed_v0)]
64
+ impl OAppOptionsType3Impl =
65
+ OAppOptionsType3Component::OAppOptionsType3Impl<ContractState>;
66
+ impl OAppOptionsType3InternalImpl = OAppOptionsType3Component::InternalImpl<ContractState>;
67
+
68
+ #[storage]
69
+ struct Storage {
70
+ #[substorage(v0)]
71
+ erc20: ERC20Component::Storage,
72
+ #[substorage(v0)]
73
+ ownable: OwnableComponent::Storage,
74
+ #[substorage(v0)]
75
+ oapp_core: OAppCoreComponent::Storage,
76
+ #[substorage(v0)]
77
+ oft_core: OFTCoreComponent::Storage,
78
+ #[substorage(v0)]
79
+ oapp_options_type_3: OAppOptionsType3Component::Storage,
80
+ }
81
+
82
+ #[event]
83
+ #[derive(Drop, starknet::Event)]
84
+ enum Event {
85
+ #[flat]
86
+ ERC20Event: ERC20Component::Event,
87
+ #[flat]
88
+ OwnableEvent: OwnableComponent::Event,
89
+ #[flat]
90
+ OAppCoreEvent: OAppCoreComponent::Event,
91
+ #[flat]
92
+ OFTCoreEvent: OFTCoreComponent::Event,
93
+ #[flat]
94
+ OAppOptionsType3Event: OAppOptionsType3Component::Event,
95
+ }
96
+
97
+ #[constructor]
98
+ fn constructor(
99
+ ref self: ContractState,
100
+ name: ByteArray,
101
+ symbol: ByteArray,
102
+ lz_endpoint: ContractAddress,
103
+ owner: ContractAddress,
104
+ native_token: ContractAddress,
105
+ ) {
106
+ // Initialize ERC20
107
+ self.erc20.initializer(name, symbol);
108
+
109
+ // Initialize Ownable
110
+ self.ownable.initializer(owner);
111
+
112
+ // Initialize OApp Core
113
+ self.oapp_core.initializer(lz_endpoint, native_token);
114
+
115
+ // Initialize OFT Core with local decimals
116
+ let local_decimals = self.erc20.decimals();
117
+ self.oft_core.initializer(local_decimals);
118
+ }
119
+
120
+ // Implement IOFTHooks to provide the specific token operations
121
+ impl IOFTHooks<ContractState> of OFTCoreComponent::IOFTHooks<ContractState> {
122
+ fn _debit(
123
+ ref self: OFTCoreComponent::ComponentState<ContractState>,
124
+ from: ContractAddress,
125
+ amount: u256,
126
+ min_amount: u256,
127
+ dst_eid: u32,
128
+ ) -> OFTDebit {
129
+ let mut contract_state = unsafe_new_contract_state();
130
+
131
+ let oft_debit = contract_state.oft_core._debit_view(amount, min_amount, dst_eid);
132
+
133
+ // Burn tokens from sender
134
+ contract_state.erc20.burn(from, oft_debit.amount_sent_ld);
135
+
136
+ oft_debit
137
+ }
138
+
139
+ fn _credit(
140
+ ref self: OFTCoreComponent::ComponentState<ContractState>,
141
+ to: ContractAddress,
142
+ amount: u256,
143
+ src_eid: u32,
144
+ ) -> u256 {
145
+ let mut contract_state = unsafe_new_contract_state();
146
+ // Handle the zero address case
147
+ let recipient = if to.is_zero() {
148
+ DEAD_ADDRESS
149
+ } else {
150
+ to
151
+ };
152
+
153
+ // Mint tokens to recipient
154
+ contract_state.erc20.mint(recipient, amount);
155
+
156
+ // Return the actual amount received (same as input in default implementation)
157
+ amount
158
+ }
159
+
160
+ fn _token(self: @OFTCoreComponent::ComponentState<ContractState>) -> ContractAddress {
161
+ get_contract_address()
162
+ }
163
+
164
+ fn _approval_required(self: @OFTCoreComponent::ComponentState<ContractState>) -> bool {
165
+ false
166
+ }
167
+
168
+ fn _shared_decimals(self: @OFTCoreComponent::ComponentState<ContractState>) -> u8 {
169
+ SHARED_DECIMALS
170
+ }
171
+ }
172
+
173
+ // Implement IOAppHooks to provide the required _lz_receive implementation
174
+ impl IOAppHooks<ContractState> of OAppCoreComponent::IOAppHooks<ContractState> {
175
+ fn _lz_receive(
176
+ ref self: OAppCoreComponent::ComponentState<ContractState>,
177
+ origin: Origin,
178
+ guid: Bytes32,
179
+ message: ByteArray,
180
+ executor: ContractAddress,
181
+ value: u256,
182
+ extra_data: ByteArray,
183
+ ) {
184
+ let mut contract_state = unsafe_new_contract_state();
185
+ contract_state.oft_core._lz_receive(origin, guid, message, executor, value, extra_data);
186
+ }
187
+ }
188
+ }
@@ -0,0 +1,175 @@
1
+ /// OFT Adapter Contract
2
+ /// Wraps an existing ERC20 token for cross-chain transfers using lock/unlock mechanism
3
+ #[starknet::contract]
4
+ pub mod OFTAdapter {
5
+ use layerzero::oapps::common::oapp_options_type_3::oapp_options_type_3::OAppOptionsType3Component;
6
+ use layerzero::oapps::oapp::oapp_core::OAppCoreComponent;
7
+ use layerzero::oapps::oft::oft_core::OFTCoreComponent;
8
+ use lz_utils::bytes::Bytes32;
9
+ use openzeppelin::access::ownable::OwnableComponent;
10
+ use openzeppelin::token::erc20::interface::{
11
+ IERC20Dispatcher, IERC20DispatcherTrait, IERC20MetadataDispatcher,
12
+ IERC20MetadataDispatcherTrait,
13
+ };
14
+ use starknet::storage::{StoragePointerReadAccess, StoragePointerWriteAccess};
15
+ use starknet::{ContractAddress, get_contract_address};
16
+ use crate::Origin;
17
+ use crate::oapps::oft::structs::OFTDebit;
18
+
19
+ // Default shared decimals for OFT
20
+ const SHARED_DECIMALS: u8 = 6;
21
+
22
+ // Component declarations
23
+ component!(path: OwnableComponent, storage: ownable, event: OwnableEvent);
24
+ component!(path: OAppCoreComponent, storage: oapp_core, event: OAppCoreEvent);
25
+ component!(path: OFTCoreComponent, storage: oft_core, event: OFTCoreEvent);
26
+ component!(
27
+ path: OAppOptionsType3Component, storage: oapp_options_type_3, event: OAppOptionsType3Event,
28
+ );
29
+
30
+ // Ownable Mixin
31
+ #[abi(embed_v0)]
32
+ impl OwnableMixinImpl = OwnableComponent::OwnableMixinImpl<ContractState>;
33
+ impl OwnableInternalImpl = OwnableComponent::InternalImpl<ContractState>;
34
+
35
+ // OApp Core
36
+ #[abi(embed_v0)]
37
+ impl OAppCoreImpl = OAppCoreComponent::OAppCoreImpl<ContractState>;
38
+ impl OAppCoreInternalImpl = OAppCoreComponent::InternalImpl<ContractState>;
39
+
40
+
41
+ // OApp Receiver
42
+ #[abi(embed_v0)]
43
+ impl IOAppReceiverImpl = OAppCoreComponent::OAppReceiverImpl<ContractState>;
44
+ #[abi(embed_v0)]
45
+ impl ILayerZeroReceiverImpl =
46
+ OAppCoreComponent::LayerZeroReceiverImpl<ContractState>;
47
+
48
+ // OFT Core - embed the implementation
49
+ #[abi(embed_v0)]
50
+ impl OFTCoreImpl = OFTCoreComponent::OFTCoreImpl<ContractState>;
51
+ impl OFTCoreInternalImpl = OFTCoreComponent::InternalImpl<ContractState>;
52
+
53
+ // OApp Options Type 3
54
+ #[abi(embed_v0)]
55
+ impl OAppOptionsType3Impl =
56
+ OAppOptionsType3Component::OAppOptionsType3Impl<ContractState>;
57
+ impl OAppOptionsType3InternalImpl = OAppOptionsType3Component::InternalImpl<ContractState>;
58
+
59
+ #[storage]
60
+ struct Storage {
61
+ #[substorage(v0)]
62
+ ownable: OwnableComponent::Storage,
63
+ #[substorage(v0)]
64
+ oapp_core: OAppCoreComponent::Storage,
65
+ #[substorage(v0)]
66
+ oft_core: OFTCoreComponent::Storage,
67
+ #[substorage(v0)]
68
+ oapp_options_type_3: OAppOptionsType3Component::Storage,
69
+ erc20_token: ContractAddress,
70
+ }
71
+
72
+ #[event]
73
+ #[derive(Drop, starknet::Event)]
74
+ enum Event {
75
+ #[flat]
76
+ OwnableEvent: OwnableComponent::Event,
77
+ #[flat]
78
+ OAppCoreEvent: OAppCoreComponent::Event,
79
+ #[flat]
80
+ OFTCoreEvent: OFTCoreComponent::Event,
81
+ #[flat]
82
+ OAppOptionsType3Event: OAppOptionsType3Component::Event,
83
+ }
84
+
85
+ #[constructor]
86
+ fn constructor(
87
+ ref self: ContractState,
88
+ erc20_token: ContractAddress,
89
+ lz_endpoint: ContractAddress,
90
+ owner: ContractAddress,
91
+ native_token: ContractAddress,
92
+ ) {
93
+ // Initialize Ownable
94
+ self.ownable.initializer(owner);
95
+
96
+ // Initialize OApp Core
97
+ self.oapp_core.initializer(lz_endpoint, native_token);
98
+
99
+ // Initialize token address
100
+ self.erc20_token.write(erc20_token);
101
+
102
+ // OFT Core needs to read local decimals from already deployed ERC20 token
103
+ let token_dispatcher = IERC20MetadataDispatcher { contract_address: erc20_token };
104
+
105
+ // Initialize OFT Core with local decimals
106
+ self.oft_core.initializer(token_dispatcher.decimals());
107
+ }
108
+
109
+ // Implement IOFTHooks to provide the specific token operations
110
+ impl IOFTHooks<ContractState> of OFTCoreComponent::IOFTHooks<ContractState> {
111
+ fn _debit(
112
+ ref self: OFTCoreComponent::ComponentState<ContractState>,
113
+ from: ContractAddress,
114
+ amount: u256,
115
+ min_amount: u256,
116
+ dst_eid: u32,
117
+ ) -> OFTDebit {
118
+ let mut contract_state = unsafe_new_contract_state();
119
+
120
+ let oft_debit = contract_state.oft_core._debit_view(amount, min_amount, dst_eid);
121
+
122
+ // Lock tokens by transferring them from the caller to this contract
123
+ let token = IERC20Dispatcher { contract_address: contract_state.erc20_token.read() };
124
+ token.transfer_from(from, get_contract_address(), oft_debit.amount_sent_ld);
125
+
126
+ oft_debit
127
+ }
128
+
129
+ fn _credit(
130
+ ref self: OFTCoreComponent::ComponentState<ContractState>,
131
+ to: ContractAddress,
132
+ amount: u256,
133
+ src_eid: u32,
134
+ ) -> u256 {
135
+ let mut contract_state = unsafe_new_contract_state();
136
+ // Get the erc20 token dispatcher
137
+ let token = IERC20Dispatcher { contract_address: contract_state.erc20_token.read() };
138
+
139
+ // Unlock tokens by transferring them from this contract to the recipient
140
+ token.transfer(to, amount);
141
+
142
+ // Return the actual amount received (same as input in default implementation)
143
+ amount
144
+ }
145
+
146
+ fn _token(self: @OFTCoreComponent::ComponentState<ContractState>) -> ContractAddress {
147
+ let mut contract_state = unsafe_new_contract_state();
148
+ contract_state.erc20_token.read()
149
+ }
150
+
151
+ fn _approval_required(self: @OFTCoreComponent::ComponentState<ContractState>) -> bool {
152
+ true
153
+ }
154
+
155
+ fn _shared_decimals(self: @OFTCoreComponent::ComponentState<ContractState>) -> u8 {
156
+ SHARED_DECIMALS
157
+ }
158
+ }
159
+
160
+ // Implement IOAppHooks to provide the required _lz_receive implementation
161
+ impl IOAppHooks<ContractState> of OAppCoreComponent::IOAppHooks<ContractState> {
162
+ fn _lz_receive(
163
+ ref self: OAppCoreComponent::ComponentState<ContractState>,
164
+ origin: Origin,
165
+ guid: Bytes32,
166
+ message: ByteArray,
167
+ executor: ContractAddress,
168
+ value: u256,
169
+ extra_data: ByteArray,
170
+ ) {
171
+ let mut contract_state = unsafe_new_contract_state();
172
+ contract_state.oft_core._lz_receive(origin, guid, message, executor, value, extra_data);
173
+ }
174
+ }
175
+ }
@@ -0,0 +1,128 @@
1
+ /// OFTComposeMsgCodec - Cairo implementation of the Solidity OFTComposeMsgCodec library
2
+ /// Handles encoding and decoding of OFT composed messages
3
+ pub mod OFTComposeMsgCodec {
4
+ use alexandria_bytes::byte_array_ext::ByteArrayTraitExt;
5
+ use lz_utils::bytes::Bytes32;
6
+ use starknet::ContractAddress;
7
+
8
+ // Offset constants for encoding and decoding OFT compose messages
9
+ pub const NONCE_OFFSET: usize = 8;
10
+ pub const SRC_EID_OFFSET: usize = 12;
11
+ pub const AMOUNT_LD_OFFSET: usize = 44;
12
+ pub const COMPOSE_FROM_OFFSET: usize = 76;
13
+
14
+ /// Encodes an OFT composed message.
15
+ ///
16
+ /// # Arguments
17
+ /// * `nonce` - The nonce value (u64)
18
+ /// * `src_eid` - The source endpoint ID (u32)
19
+ /// * `amount_ld` - The amount in local decimals (u256)
20
+ /// * `compose_msg` - The composed message (composeFrom + composeMsg)
21
+ ///
22
+ /// # Returns
23
+ /// * `ByteArray` - The encoded composed message
24
+ pub fn encode(nonce: u64, src_eid: u32, amount_ld: u256, compose_msg: @ByteArray) -> ByteArray {
25
+ let mut message: ByteArray = Default::default();
26
+
27
+ // Encode nonce (8 bytes)
28
+ message.append_u64(nonce);
29
+
30
+ // Encode src_eid (4 bytes)
31
+ message.append_u32(src_eid);
32
+
33
+ // Encode amount_ld (32 bytes)
34
+ message.append_u256(amount_ld);
35
+
36
+ // Append compose message
37
+ message.append(compose_msg);
38
+
39
+ message
40
+ }
41
+
42
+ /// Retrieves the nonce from the composed message.
43
+ ///
44
+ /// # Arguments
45
+ /// * `message` - The composed message
46
+ ///
47
+ /// # Returns
48
+ /// * `u64` - The nonce value
49
+ pub fn nonce(message: @ByteArray) -> u64 {
50
+ let (_, nonce_value) = message.read_u64(0);
51
+ nonce_value
52
+ }
53
+
54
+ /// Retrieves the source endpoint ID from the composed message.
55
+ ///
56
+ /// # Arguments
57
+ /// * `message` - The composed message
58
+ ///
59
+ /// # Returns
60
+ /// * `u32` - The source endpoint ID
61
+ pub fn src_eid(message: @ByteArray) -> u32 {
62
+ let (_, src_eid_value) = message.read_u32(NONCE_OFFSET);
63
+ src_eid_value
64
+ }
65
+
66
+ /// Retrieves the amount in local decimals from the composed message.
67
+ ///
68
+ /// # Arguments
69
+ /// * `message` - The composed message
70
+ ///
71
+ /// # Returns
72
+ /// * `u256` - The amount in local decimals
73
+ pub fn amount_ld(message: @ByteArray) -> u256 {
74
+ let (_, amount_value) = message.read_u256(SRC_EID_OFFSET);
75
+ amount_value
76
+ }
77
+
78
+ /// Retrieves the composeFrom value from the composed message.
79
+ ///
80
+ /// # Arguments
81
+ /// * `message` - The composed message
82
+ ///
83
+ /// # Returns
84
+ /// * `Bytes32` - The composeFrom value
85
+ pub fn compose_from(message: @ByteArray) -> Bytes32 {
86
+ let (_, compose_from_value) = message.read_u256(AMOUNT_LD_OFFSET);
87
+ Bytes32 { value: compose_from_value }
88
+ }
89
+
90
+ /// Retrieves the composed message.
91
+ ///
92
+ /// # Arguments
93
+ /// * `message` - The full composed message
94
+ ///
95
+ /// # Returns
96
+ /// * `ByteArray` - The composed message portion
97
+ pub fn compose_msg(message: @ByteArray) -> ByteArray {
98
+ if message.len() > COMPOSE_FROM_OFFSET {
99
+ let compose_length = message.len() - COMPOSE_FROM_OFFSET;
100
+ let (_, compose_value) = message.read_bytes(COMPOSE_FROM_OFFSET, compose_length);
101
+ compose_value
102
+ } else {
103
+ Default::default()
104
+ }
105
+ }
106
+
107
+ /// Converts a ContractAddress to Bytes32.
108
+ ///
109
+ /// # Arguments
110
+ /// * `addr` - The address to convert
111
+ ///
112
+ /// # Returns
113
+ /// * `Bytes32` - The bytes32 representation
114
+ pub fn address_to_bytes32(addr: ContractAddress) -> Bytes32 {
115
+ addr.into()
116
+ }
117
+
118
+ /// Converts Bytes32 to a ContractAddress.
119
+ ///
120
+ /// # Arguments
121
+ /// * `b` - The bytes32 value to convert
122
+ ///
123
+ /// # Returns
124
+ /// * `Option<ContractAddress>` - The address if valid
125
+ pub fn bytes32_to_address(b: Bytes32) -> Option<ContractAddress> {
126
+ b.try_into()
127
+ }
128
+ }