@across-protocol/contracts 4.0.11 → 4.0.13

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 (254) hide show
  1. package/README.md +182 -3
  2. package/dist/deployments/deployments.json +4 -2
  3. package/dist/scripts/svm/buildHelpers/generateSvmClients.js +4 -8
  4. package/dist/scripts/svm/{enableRoute.js → createVault.js} +15 -37
  5. package/dist/scripts/svm/fakeFillWithRandomDistribution.js +9 -8
  6. package/dist/scripts/svm/initialize.js +19 -5
  7. package/dist/scripts/svm/nativeDeposit.js +159 -0
  8. package/dist/scripts/svm/queryEventsV2.js +3 -3
  9. package/dist/scripts/svm/{queryRoute.js → queryVault.js} +10 -25
  10. package/dist/scripts/svm/remoteHubPoolPauseDeposits.js +2 -2
  11. package/dist/scripts/svm/simpleDeposit.js +30 -18
  12. package/dist/scripts/svm/simpleFakeRelayerRepayment.js +2 -9
  13. package/dist/scripts/svm/simpleFill.js +7 -5
  14. package/dist/scripts/svm/squadsIdlUpgrade.d.ts +1 -0
  15. package/dist/scripts/svm/squadsIdlUpgrade.js +76 -0
  16. package/dist/src/svm/assets/idl/svm_spoke.json +68 -409
  17. package/dist/src/svm/assets/svm_spoke.d.ts +65 -406
  18. package/dist/src/svm/clients/MessageTransmitter/accounts/index.d.ts +10 -0
  19. package/dist/src/svm/clients/MessageTransmitter/accounts/index.js +26 -0
  20. package/dist/src/svm/clients/MessageTransmitter/accounts/messageSent.d.ts +28 -0
  21. package/dist/src/svm/clients/MessageTransmitter/accounts/messageSent.js +64 -0
  22. package/dist/src/svm/clients/MessageTransmitter/accounts/messageTransmitter.d.ts +46 -0
  23. package/dist/src/svm/clients/MessageTransmitter/accounts/messageTransmitter.js +82 -0
  24. package/dist/src/svm/clients/MessageTransmitter/accounts/usedNonces.d.ts +31 -0
  25. package/dist/src/svm/clients/MessageTransmitter/accounts/usedNonces.js +70 -0
  26. package/dist/src/svm/clients/MessageTransmitter/errors/index.d.ts +8 -0
  27. package/dist/src/svm/clients/MessageTransmitter/errors/index.js +24 -0
  28. package/dist/src/svm/clients/MessageTransmitter/errors/messageTransmitter.d.ts +83 -0
  29. package/dist/src/svm/clients/MessageTransmitter/errors/messageTransmitter.js +124 -0
  30. package/dist/src/svm/clients/MessageTransmitter/index.d.ts +12 -0
  31. package/dist/src/svm/clients/MessageTransmitter/index.js +28 -0
  32. package/dist/src/svm/clients/MessageTransmitter/instructions/acceptOwnership.d.ts +45 -0
  33. package/dist/src/svm/clients/MessageTransmitter/instructions/acceptOwnership.js +85 -0
  34. package/dist/src/svm/clients/MessageTransmitter/instructions/disableAttester.d.ts +55 -0
  35. package/dist/src/svm/clients/MessageTransmitter/instructions/disableAttester.js +105 -0
  36. package/dist/src/svm/clients/MessageTransmitter/instructions/enableAttester.d.ts +55 -0
  37. package/dist/src/svm/clients/MessageTransmitter/instructions/enableAttester.js +105 -0
  38. package/dist/src/svm/clients/MessageTransmitter/instructions/getNoncePda.d.ts +43 -0
  39. package/dist/src/svm/clients/MessageTransmitter/instructions/getNoncePda.js +82 -0
  40. package/dist/src/svm/clients/MessageTransmitter/instructions/index.d.ts +25 -0
  41. package/dist/src/svm/clients/MessageTransmitter/instructions/index.js +41 -0
  42. package/dist/src/svm/clients/MessageTransmitter/instructions/initialize.d.ts +70 -0
  43. package/dist/src/svm/clients/MessageTransmitter/instructions/initialize.js +123 -0
  44. package/dist/src/svm/clients/MessageTransmitter/instructions/isNonceUsed.d.ts +42 -0
  45. package/dist/src/svm/clients/MessageTransmitter/instructions/isNonceUsed.js +77 -0
  46. package/dist/src/svm/clients/MessageTransmitter/instructions/pause.d.ts +45 -0
  47. package/dist/src/svm/clients/MessageTransmitter/instructions/pause.js +85 -0
  48. package/dist/src/svm/clients/MessageTransmitter/instructions/receiveMessage.d.ts +67 -0
  49. package/dist/src/svm/clients/MessageTransmitter/instructions/receiveMessage.js +113 -0
  50. package/dist/src/svm/clients/MessageTransmitter/instructions/reclaimEventAccount.d.ts +48 -0
  51. package/dist/src/svm/clients/MessageTransmitter/instructions/reclaimEventAccount.js +94 -0
  52. package/dist/src/svm/clients/MessageTransmitter/instructions/replaceMessage.d.ts +64 -0
  53. package/dist/src/svm/clients/MessageTransmitter/instructions/replaceMessage.js +132 -0
  54. package/dist/src/svm/clients/MessageTransmitter/instructions/sendMessage.d.ts +61 -0
  55. package/dist/src/svm/clients/MessageTransmitter/instructions/sendMessage.js +112 -0
  56. package/dist/src/svm/clients/MessageTransmitter/instructions/sendMessageWithCaller.d.ts +64 -0
  57. package/dist/src/svm/clients/MessageTransmitter/instructions/sendMessageWithCaller.js +117 -0
  58. package/dist/src/svm/clients/MessageTransmitter/instructions/setMaxMessageBodySize.d.ts +49 -0
  59. package/dist/src/svm/clients/MessageTransmitter/instructions/setMaxMessageBodySize.js +94 -0
  60. package/dist/src/svm/clients/MessageTransmitter/instructions/setSignatureThreshold.d.ts +49 -0
  61. package/dist/src/svm/clients/MessageTransmitter/instructions/setSignatureThreshold.js +97 -0
  62. package/dist/src/svm/clients/MessageTransmitter/instructions/transferOwnership.d.ts +49 -0
  63. package/dist/src/svm/clients/MessageTransmitter/instructions/transferOwnership.js +91 -0
  64. package/dist/src/svm/clients/MessageTransmitter/instructions/unpause.d.ts +45 -0
  65. package/dist/src/svm/clients/MessageTransmitter/instructions/unpause.js +85 -0
  66. package/dist/src/svm/clients/MessageTransmitter/instructions/updateAttesterManager.d.ts +49 -0
  67. package/dist/src/svm/clients/MessageTransmitter/instructions/updateAttesterManager.js +94 -0
  68. package/dist/src/svm/clients/MessageTransmitter/instructions/updatePauser.d.ts +49 -0
  69. package/dist/src/svm/clients/MessageTransmitter/instructions/updatePauser.js +91 -0
  70. package/dist/src/svm/clients/MessageTransmitter/programs/index.d.ts +8 -0
  71. package/dist/src/svm/clients/MessageTransmitter/programs/index.js +24 -0
  72. package/dist/src/svm/clients/MessageTransmitter/programs/messageTransmitter.d.ts +78 -0
  73. package/dist/src/svm/clients/MessageTransmitter/programs/messageTransmitter.js +112 -0
  74. package/dist/src/svm/clients/MessageTransmitter/shared/index.d.ts +49 -0
  75. package/dist/src/svm/clients/MessageTransmitter/shared/index.js +94 -0
  76. package/dist/src/svm/clients/MessageTransmitter/types/attesterDisabled.d.ts +15 -0
  77. package/dist/src/svm/clients/MessageTransmitter/types/attesterDisabled.js +22 -0
  78. package/dist/src/svm/clients/MessageTransmitter/types/attesterEnabled.d.ts +15 -0
  79. package/dist/src/svm/clients/MessageTransmitter/types/attesterEnabled.js +22 -0
  80. package/dist/src/svm/clients/MessageTransmitter/types/attesterManagerUpdated.d.ts +16 -0
  81. package/dist/src/svm/clients/MessageTransmitter/types/attesterManagerUpdated.js +28 -0
  82. package/dist/src/svm/clients/MessageTransmitter/types/handleReceiveMessageParams.d.ts +18 -0
  83. package/dist/src/svm/clients/MessageTransmitter/types/handleReceiveMessageParams.js +32 -0
  84. package/dist/src/svm/clients/MessageTransmitter/types/index.d.ts +20 -0
  85. package/dist/src/svm/clients/MessageTransmitter/types/index.js +36 -0
  86. package/dist/src/svm/clients/MessageTransmitter/types/mathError.d.ts +17 -0
  87. package/dist/src/svm/clients/MessageTransmitter/types/mathError.js +29 -0
  88. package/dist/src/svm/clients/MessageTransmitter/types/maxMessageBodySizeUpdated.d.ts +17 -0
  89. package/dist/src/svm/clients/MessageTransmitter/types/maxMessageBodySizeUpdated.js +22 -0
  90. package/dist/src/svm/clients/MessageTransmitter/types/messageReceived.d.ts +25 -0
  91. package/dist/src/svm/clients/MessageTransmitter/types/messageReceived.js +34 -0
  92. package/dist/src/svm/clients/MessageTransmitter/types/ownershipTransferStarted.d.ts +16 -0
  93. package/dist/src/svm/clients/MessageTransmitter/types/ownershipTransferStarted.js +28 -0
  94. package/dist/src/svm/clients/MessageTransmitter/types/ownershipTransferred.d.ts +16 -0
  95. package/dist/src/svm/clients/MessageTransmitter/types/ownershipTransferred.js +28 -0
  96. package/dist/src/svm/clients/MessageTransmitter/types/pause.d.ts +13 -0
  97. package/dist/src/svm/clients/MessageTransmitter/types/pause.js +22 -0
  98. package/dist/src/svm/clients/MessageTransmitter/types/pauserChanged.d.ts +15 -0
  99. package/dist/src/svm/clients/MessageTransmitter/types/pauserChanged.js +22 -0
  100. package/dist/src/svm/clients/MessageTransmitter/types/signatureThresholdUpdated.d.ts +16 -0
  101. package/dist/src/svm/clients/MessageTransmitter/types/signatureThresholdUpdated.js +28 -0
  102. package/dist/src/svm/clients/MessageTransmitter/types/unpause.d.ts +13 -0
  103. package/dist/src/svm/clients/MessageTransmitter/types/unpause.js +22 -0
  104. package/dist/src/svm/clients/SvmSpoke/accounts/index.d.ts +0 -1
  105. package/dist/src/svm/clients/SvmSpoke/accounts/index.js +0 -1
  106. package/dist/src/svm/clients/SvmSpoke/errors/svmSpoke.d.ts +31 -35
  107. package/dist/src/svm/clients/SvmSpoke/errors/svmSpoke.js +46 -52
  108. package/dist/src/svm/clients/SvmSpoke/instructions/bridgeTokensToHubPool.js +1 -1
  109. package/dist/src/svm/clients/SvmSpoke/instructions/claimRelayerRefund.js +1 -1
  110. package/dist/src/svm/clients/SvmSpoke/instructions/deposit.d.ts +21 -13
  111. package/dist/src/svm/clients/SvmSpoke/instructions/deposit.js +40 -8
  112. package/dist/src/svm/clients/SvmSpoke/instructions/depositNow.d.ts +21 -13
  113. package/dist/src/svm/clients/SvmSpoke/instructions/depositNow.js +40 -8
  114. package/dist/src/svm/clients/SvmSpoke/instructions/executeRelayerRefundLeaf.js +1 -1
  115. package/dist/src/svm/clients/SvmSpoke/instructions/executeRelayerRefundLeafDeferred.js +1 -1
  116. package/dist/src/svm/clients/SvmSpoke/instructions/executeSlowRelayLeaf.js +2 -2
  117. package/dist/src/svm/clients/SvmSpoke/instructions/fillRelay.d.ts +20 -16
  118. package/dist/src/svm/clients/SvmSpoke/instructions/fillRelay.js +7 -2
  119. package/dist/src/svm/clients/SvmSpoke/instructions/handleReceiveMessage.js +1 -1
  120. package/dist/src/svm/clients/SvmSpoke/instructions/index.d.ts +0 -1
  121. package/dist/src/svm/clients/SvmSpoke/instructions/index.js +0 -1
  122. package/dist/src/svm/clients/SvmSpoke/instructions/unsafeDeposit.d.ts +21 -13
  123. package/dist/src/svm/clients/SvmSpoke/instructions/unsafeDeposit.js +40 -8
  124. package/dist/src/svm/clients/SvmSpoke/programs/svmSpoke.d.ts +6 -10
  125. package/dist/src/svm/clients/SvmSpoke/programs/svmSpoke.js +5 -13
  126. package/dist/src/svm/clients/SvmSpoke/types/index.d.ts +0 -1
  127. package/dist/src/svm/clients/SvmSpoke/types/index.js +0 -1
  128. package/dist/src/svm/clients/TokenMessengerMinter/accounts/index.d.ts +12 -0
  129. package/dist/src/svm/clients/TokenMessengerMinter/accounts/index.js +28 -0
  130. package/dist/src/svm/clients/TokenMessengerMinter/accounts/localToken.d.ts +43 -0
  131. package/dist/src/svm/clients/TokenMessengerMinter/accounts/localToken.js +82 -0
  132. package/dist/src/svm/clients/TokenMessengerMinter/accounts/remoteTokenMessenger.d.ts +29 -0
  133. package/dist/src/svm/clients/TokenMessengerMinter/accounts/remoteTokenMessenger.js +71 -0
  134. package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenMessenger.d.ts +35 -0
  135. package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenMessenger.js +74 -0
  136. package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenMinter.d.ts +33 -0
  137. package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenMinter.js +72 -0
  138. package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenPair.d.ts +33 -0
  139. package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenPair.js +72 -0
  140. package/dist/src/svm/clients/TokenMessengerMinter/errors/index.d.ts +8 -0
  141. package/dist/src/svm/clients/TokenMessengerMinter/errors/index.js +24 -0
  142. package/dist/src/svm/clients/TokenMessengerMinter/errors/tokenMessengerMinter.d.ts +45 -0
  143. package/dist/src/svm/clients/TokenMessengerMinter/errors/tokenMessengerMinter.js +67 -0
  144. package/dist/src/svm/clients/TokenMessengerMinter/index.d.ts +12 -0
  145. package/dist/src/svm/clients/TokenMessengerMinter/index.js +28 -0
  146. package/dist/src/svm/clients/TokenMessengerMinter/instructions/acceptOwnership.d.ts +45 -0
  147. package/dist/src/svm/clients/TokenMessengerMinter/instructions/acceptOwnership.js +82 -0
  148. package/dist/src/svm/clients/TokenMessengerMinter/instructions/addLocalToken.d.ts +63 -0
  149. package/dist/src/svm/clients/TokenMessengerMinter/instructions/addLocalToken.js +115 -0
  150. package/dist/src/svm/clients/TokenMessengerMinter/instructions/addRemoteTokenMessenger.d.ts +61 -0
  151. package/dist/src/svm/clients/TokenMessengerMinter/instructions/addRemoteTokenMessenger.js +110 -0
  152. package/dist/src/svm/clients/TokenMessengerMinter/instructions/burnTokenCustody.d.ts +64 -0
  153. package/dist/src/svm/clients/TokenMessengerMinter/instructions/burnTokenCustody.js +117 -0
  154. package/dist/src/svm/clients/TokenMessengerMinter/instructions/depositForBurn.d.ts +94 -0
  155. package/dist/src/svm/clients/TokenMessengerMinter/instructions/depositForBurn.js +161 -0
  156. package/dist/src/svm/clients/TokenMessengerMinter/instructions/depositForBurnWithCaller.d.ts +97 -0
  157. package/dist/src/svm/clients/TokenMessengerMinter/instructions/depositForBurnWithCaller.js +166 -0
  158. package/dist/src/svm/clients/TokenMessengerMinter/instructions/handleReceiveMessage.d.ts +79 -0
  159. package/dist/src/svm/clients/TokenMessengerMinter/instructions/handleReceiveMessage.js +132 -0
  160. package/dist/src/svm/clients/TokenMessengerMinter/instructions/index.d.ts +26 -0
  161. package/dist/src/svm/clients/TokenMessengerMinter/instructions/index.js +42 -0
  162. package/dist/src/svm/clients/TokenMessengerMinter/instructions/initialize.d.ts +73 -0
  163. package/dist/src/svm/clients/TokenMessengerMinter/instructions/initialize.js +124 -0
  164. package/dist/src/svm/clients/TokenMessengerMinter/instructions/linkTokenPair.d.ts +64 -0
  165. package/dist/src/svm/clients/TokenMessengerMinter/instructions/linkTokenPair.js +109 -0
  166. package/dist/src/svm/clients/TokenMessengerMinter/instructions/pause.d.ts +45 -0
  167. package/dist/src/svm/clients/TokenMessengerMinter/instructions/pause.js +82 -0
  168. package/dist/src/svm/clients/TokenMessengerMinter/instructions/removeLocalToken.d.ts +57 -0
  169. package/dist/src/svm/clients/TokenMessengerMinter/instructions/removeLocalToken.js +105 -0
  170. package/dist/src/svm/clients/TokenMessengerMinter/instructions/removeRemoteTokenMessenger.d.ts +51 -0
  171. package/dist/src/svm/clients/TokenMessengerMinter/instructions/removeRemoteTokenMessenger.js +94 -0
  172. package/dist/src/svm/clients/TokenMessengerMinter/instructions/replaceDepositForBurn.d.ts +79 -0
  173. package/dist/src/svm/clients/TokenMessengerMinter/instructions/replaceDepositForBurn.js +150 -0
  174. package/dist/src/svm/clients/TokenMessengerMinter/instructions/setMaxBurnAmountPerMessage.d.ts +52 -0
  175. package/dist/src/svm/clients/TokenMessengerMinter/instructions/setMaxBurnAmountPerMessage.js +97 -0
  176. package/dist/src/svm/clients/TokenMessengerMinter/instructions/setTokenController.d.ts +52 -0
  177. package/dist/src/svm/clients/TokenMessengerMinter/instructions/setTokenController.js +91 -0
  178. package/dist/src/svm/clients/TokenMessengerMinter/instructions/transferOwnership.d.ts +49 -0
  179. package/dist/src/svm/clients/TokenMessengerMinter/instructions/transferOwnership.js +88 -0
  180. package/dist/src/svm/clients/TokenMessengerMinter/instructions/unlinkTokenPair.d.ts +51 -0
  181. package/dist/src/svm/clients/TokenMessengerMinter/instructions/unlinkTokenPair.js +91 -0
  182. package/dist/src/svm/clients/TokenMessengerMinter/instructions/unpause.d.ts +45 -0
  183. package/dist/src/svm/clients/TokenMessengerMinter/instructions/unpause.js +82 -0
  184. package/dist/src/svm/clients/TokenMessengerMinter/instructions/updatePauser.d.ts +52 -0
  185. package/dist/src/svm/clients/TokenMessengerMinter/instructions/updatePauser.js +91 -0
  186. package/dist/src/svm/clients/TokenMessengerMinter/programs/index.d.ts +8 -0
  187. package/dist/src/svm/clients/TokenMessengerMinter/programs/index.js +24 -0
  188. package/dist/src/svm/clients/TokenMessengerMinter/programs/tokenMessengerMinter.d.ts +83 -0
  189. package/dist/src/svm/clients/TokenMessengerMinter/programs/tokenMessengerMinter.js +124 -0
  190. package/dist/src/svm/clients/TokenMessengerMinter/shared/index.d.ts +49 -0
  191. package/dist/src/svm/clients/TokenMessengerMinter/shared/index.js +94 -0
  192. package/dist/src/svm/clients/TokenMessengerMinter/types/depositForBurn.d.ts +31 -0
  193. package/dist/src/svm/clients/TokenMessengerMinter/types/depositForBurn.js +40 -0
  194. package/dist/src/svm/clients/TokenMessengerMinter/types/index.d.ts +24 -0
  195. package/dist/src/svm/clients/TokenMessengerMinter/types/index.js +40 -0
  196. package/dist/src/svm/clients/TokenMessengerMinter/types/localTokenAdded.d.ts +16 -0
  197. package/dist/src/svm/clients/TokenMessengerMinter/types/localTokenAdded.js +28 -0
  198. package/dist/src/svm/clients/TokenMessengerMinter/types/localTokenRemoved.d.ts +16 -0
  199. package/dist/src/svm/clients/TokenMessengerMinter/types/localTokenRemoved.js +28 -0
  200. package/dist/src/svm/clients/TokenMessengerMinter/types/mintAndWithdraw.d.ts +21 -0
  201. package/dist/src/svm/clients/TokenMessengerMinter/types/mintAndWithdraw.js +30 -0
  202. package/dist/src/svm/clients/TokenMessengerMinter/types/ownershipTransferStarted.d.ts +16 -0
  203. package/dist/src/svm/clients/TokenMessengerMinter/types/ownershipTransferStarted.js +28 -0
  204. package/dist/src/svm/clients/TokenMessengerMinter/types/ownershipTransferred.d.ts +16 -0
  205. package/dist/src/svm/clients/TokenMessengerMinter/types/ownershipTransferred.js +28 -0
  206. package/dist/src/svm/clients/TokenMessengerMinter/types/pause.d.ts +13 -0
  207. package/dist/src/svm/clients/TokenMessengerMinter/types/pause.js +22 -0
  208. package/dist/src/svm/clients/TokenMessengerMinter/types/pauserChanged.d.ts +15 -0
  209. package/dist/src/svm/clients/TokenMessengerMinter/types/pauserChanged.js +22 -0
  210. package/dist/src/svm/clients/TokenMessengerMinter/types/remoteTokenMessengerAdded.d.ts +16 -0
  211. package/dist/src/svm/clients/TokenMessengerMinter/types/remoteTokenMessengerAdded.js +28 -0
  212. package/dist/src/svm/clients/TokenMessengerMinter/types/remoteTokenMessengerRemoved.d.ts +16 -0
  213. package/dist/src/svm/clients/TokenMessengerMinter/types/remoteTokenMessengerRemoved.js +28 -0
  214. package/dist/src/svm/clients/TokenMessengerMinter/types/setBurnLimitPerMessage.d.ts +19 -0
  215. package/dist/src/svm/clients/TokenMessengerMinter/types/setBurnLimitPerMessage.js +28 -0
  216. package/dist/src/svm/clients/TokenMessengerMinter/types/setTokenController.d.ts +15 -0
  217. package/dist/src/svm/clients/TokenMessengerMinter/types/setTokenController.js +22 -0
  218. package/dist/src/svm/clients/TokenMessengerMinter/types/tokenCustodyBurned.d.ts +19 -0
  219. package/dist/src/svm/clients/TokenMessengerMinter/types/tokenCustodyBurned.js +28 -0
  220. package/dist/src/svm/clients/TokenMessengerMinter/types/tokenMinterError.d.ts +23 -0
  221. package/dist/src/svm/clients/TokenMessengerMinter/types/tokenMinterError.js +35 -0
  222. package/dist/src/svm/clients/TokenMessengerMinter/types/tokenPairLinked.d.ts +17 -0
  223. package/dist/src/svm/clients/TokenMessengerMinter/types/tokenPairLinked.js +30 -0
  224. package/dist/src/svm/clients/TokenMessengerMinter/types/tokenPairUnlinked.d.ts +17 -0
  225. package/dist/src/svm/clients/TokenMessengerMinter/types/tokenPairUnlinked.js +30 -0
  226. package/dist/src/svm/clients/TokenMessengerMinter/types/unpause.d.ts +13 -0
  227. package/dist/src/svm/clients/TokenMessengerMinter/types/unpause.js +22 -0
  228. package/dist/src/svm/clients/index.d.ts +3 -1
  229. package/dist/src/svm/clients/index.js +5 -1
  230. package/dist/src/svm/web3-v1/helpers.d.ts +114 -1
  231. package/dist/src/svm/web3-v1/helpers.js +179 -1
  232. package/dist/target/types/svm_spoke.d.ts +65 -406
  233. package/dist/tasks/enableL1TokenAcrossEcosystem.js +4 -4
  234. package/dist/test/svm/SvmSpoke.Deposit.js +143 -176
  235. package/dist/test/svm/SvmSpoke.Fill.AcrossPlus.js +20 -17
  236. package/dist/test/svm/SvmSpoke.Fill.js +52 -38
  237. package/dist/test/svm/SvmSpoke.HandleReceiveMessage.js +2 -114
  238. package/dist/test/svm/SvmSpoke.SlowFill.AcrossPlus.js +2 -2
  239. package/dist/test/svm/SvmSpoke.SlowFill.js +37 -34
  240. package/dist/test/svm/SvmSpoke.common.d.ts +2 -3
  241. package/dist/test/svm/SvmSpoke.common.js +3 -12
  242. package/package.json +5 -5
  243. package/dist/scripts/svm/remoteHubPoolSetDepositRoute.d.ts +0 -1
  244. package/dist/scripts/svm/remoteHubPoolSetDepositRoute.js +0 -252
  245. package/dist/src/svm/clients/SvmSpoke/accounts/route.d.ts +0 -27
  246. package/dist/src/svm/clients/SvmSpoke/accounts/route.js +0 -66
  247. package/dist/src/svm/clients/SvmSpoke/instructions/setEnableRoute.d.ts +0 -95
  248. package/dist/src/svm/clients/SvmSpoke/instructions/setEnableRoute.js +0 -213
  249. package/dist/src/svm/clients/SvmSpoke/types/enabledDepositRoute.d.ts +0 -21
  250. package/dist/src/svm/clients/SvmSpoke/types/enabledDepositRoute.js +0 -30
  251. package/dist/test/svm/SvmSpoke.Routes.js +0 -167
  252. /package/dist/scripts/svm/{enableRoute.d.ts → createVault.d.ts} +0 -0
  253. /package/dist/scripts/svm/{queryRoute.d.ts → nativeDeposit.d.ts} +0 -0
  254. /package/dist/{test/svm/SvmSpoke.Routes.d.ts → scripts/svm/queryVault.d.ts} +0 -0
package/README.md CHANGED
@@ -31,17 +31,20 @@ Note if you get build issues on the initial `yarn` command try downgrading to no
31
31
 
32
32
  ```shell
33
33
  yarn
34
- yarn build # Will build all code. Compile solidity & rust, generate ts outputs
34
+ yarn build # Will build all code. Compile solidity & rust (local toolchain), generate ts outputs
35
+ yarn build-verified # Will build all code. Compile solidity & rust (verified docker build), generate ts outputs
35
36
  ```
36
37
 
37
38
  ## Test
38
39
 
39
40
  ```shell
40
- yarn test # Run all unit tests without gas analysis
41
+ yarn test # Run all unit tests without gas analysis, using local toolchain SVM build
42
+ yarn test-verified # Run all unit tests (without gas analysis) with verified SVM docker build
41
43
  yarn test:gas-analytics # Run only tests that count gas costs
42
44
  yarn test:report-gas # Run unit tests with hardhat-gas-reporter enabled
43
45
  yarn test-evm # Only test EVM code
44
- yarn test-svm # Only test SVM code
46
+ yarn test-svm # Only test SVM code (local toolchain build)
47
+ yarn test-svm-solana-verify # Only test SVM code (verified docker build)
45
48
  ```
46
49
 
47
50
  ## Lint
@@ -56,11 +59,187 @@ yarn lint-fix
56
59
 
57
60
  ## Deploy and Verify
58
61
 
62
+ ### EVM
63
+
59
64
  ```shell
60
65
  NODE_URL_1=https://mainnet.infura.com/xxx yarn hardhat deploy --tags HubPool --network mainnet
61
66
  ETHERSCAN_API_KEY=XXX yarn hardhat etherscan-verify --network mainnet --license AGPL-3.0 --force-license --solc-input
62
67
  ```
63
68
 
69
+ ### SVM
70
+
71
+ Before deploying for the first time make sure all program IDs in `lib.rs` and `Anchor.toml` are the same as listed when running `anchor keys list`. If not, update them to match the deployment keypairs under `target/deploy/` and commit the changes.
72
+
73
+ Make sure to use the verified docker binaries that can be built:
74
+
75
+ ```shell
76
+ unset IS_TEST # Ensures the production build is used (not the test feature)
77
+ yarn build-svm-solana-verify # Builds verified SVM binaries
78
+ yarn generate-svm-artifacts # Builds IDLs
79
+ ```
80
+
81
+ Export required environment variables, e.g.:
82
+
83
+ ```shell
84
+ export RPC_URL=https://api.devnet.solana.com
85
+ export KEYPAIR=~/.config/solana/dev-wallet.json
86
+ export PROGRAM=svm_spoke # Also repeat the deployment process for multicall_handler
87
+ export PROGRAM_ID=$(cat target/idl/$PROGRAM.json | jq -r ".address")
88
+ export MULTISIG= # Export the Squads vault, not the multisig address!
89
+ ```
90
+
91
+ For the initial deployment also need these:
92
+
93
+ ```shell
94
+ export SVM_CHAIN_ID=$(cast to-dec $(cast shr $(cast shl $(cast keccak solana-devnet) 208) 208))
95
+ export HUB_POOL=0x14224e63716afAcE30C9a417E0542281869f7d9e # This is for sepolia, update for mainnet
96
+ export DEPOSIT_QUOTE_TIME_BUFFER=3600
97
+ export FILL_DEADLINE_BUFFER=21600
98
+ ```
99
+
100
+ #### Initial deployment
101
+
102
+ Deploy the program and set the upgrade authority to the multisig:
103
+
104
+ ```shell
105
+ solana program deploy \
106
+ --url $RPC_URL target/deploy/$PROGRAM.so \
107
+ --keypair $KEYPAIR \
108
+ --program-id target/deploy/$PROGRAM-keypair.json \
109
+ --with-compute-unit-price 50000 \
110
+ --max-sign-attempts 100
111
+ solana program set-upgrade-authority \
112
+ --url $RPC_URL \
113
+ --keypair $KEYPAIR \
114
+ --skip-new-upgrade-authority-signer-check \
115
+ $PROGRAM_ID \
116
+ --new-upgrade-authority $MULTISIG
117
+ ```
118
+
119
+ Update and commit `deployments/deployments.json` with the deployed program ID and deployment slot.
120
+
121
+ Upload the IDL and set the upgrade authority to the multisig:
122
+
123
+ ```shell
124
+ anchor idl init \
125
+ --provider.cluster $RPC_URL \
126
+ --provider.wallet $KEYPAIR \
127
+ --filepath target/idl/$PROGRAM.json \
128
+ $PROGRAM_ID
129
+ anchor idl set-authority \
130
+ --provider.cluster $RPC_URL \
131
+ --provider.wallet $KEYPAIR \
132
+ --program-id $PROGRAM_ID \
133
+ --new-authority $MULTISIG
134
+ ```
135
+
136
+ `svm_spoke` also requires initialization and transfer of ownership on the first deployment:
137
+
138
+ ```shell
139
+ anchor run initialize \
140
+ --provider.cluster $RPC_URL \
141
+ --provider.wallet $KEYPAIR -- \
142
+ --chainId $SVM_CHAIN_ID \
143
+ --remoteDomain 0 \
144
+ --crossDomainAdmin $HUB_POOL \
145
+ --svmAdmin $MULTISIG \
146
+ --depositQuoteTimeBuffer $DEPOSIT_QUOTE_TIME_BUFFER \
147
+ --fillDeadlineBuffer $FILL_DEADLINE_BUFFER
148
+ ```
149
+
150
+ Create the vault for accepting deposits, e.g.:
151
+
152
+ ```shell
153
+ export MINT=4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU # This is USDC on devnet, update with address for mainnet
154
+ anchor run createVault \
155
+ --provider.cluster $RPC_URL \
156
+ --provider.wallet $KEYPAIR -- \
157
+ --originToken $MINT
158
+ ```
159
+
160
+ #### Upgrades
161
+
162
+ Initiate the program upgrade:
163
+
164
+ ```shell
165
+ solana program write-buffer \
166
+ --url $RPC_URL \
167
+ --keypair $KEYPAIR \
168
+ --with-compute-unit-price 50000 \
169
+ --max-sign-attempts 100 \
170
+ --use-rpc \
171
+ target/deploy/$PROGRAM.so
172
+ export BUFFER= # Export the logged buffer address from the command above
173
+ solana program set-buffer-authority \
174
+ --url $RPC_URL \
175
+ --keypair $KEYPAIR \
176
+ $BUFFER \
177
+ --new-buffer-authority $MULTISIG
178
+ ```
179
+
180
+ Add the program ID to Squads multisig (`https://devnet.squads.so/` for devnet and `https://app.squads.so/` for mainnet) in the Developers/Programs section. Then add the upgrade filling in the buffer address and buffer refund. After creating the upgrade verify the buffer authority as prompted and proceed with initiating the upgrade. Once all required signers have approved, execute the upgrade in the transactions section.
181
+
182
+ Start the IDL upgrade by writing it to the buffer:
183
+
184
+ ```shell
185
+ anchor idl write-buffer \
186
+ --provider.cluster $RPC_URL \
187
+ --provider.wallet $KEYPAIR \
188
+ --filepath target/idl/$PROGRAM.json \
189
+ $PROGRAM_ID
190
+ export IDL_BUFFER= # Export the logged IDL buffer address from the command above
191
+ anchor idl set-authority \
192
+ --provider.cluster $RPC_URL \
193
+ --provider.wallet $KEYPAIR \
194
+ --program-id $PROGRAM_ID \
195
+ --new-authority $MULTISIG \
196
+ $IDL_BUFFER
197
+ ```
198
+
199
+ Construct the multisig transaction for finalizing the IDL upgrade. Copy the printed base58 encoded transaction from below command and import it into the Squads multisig for approval and execution:
200
+
201
+ ```shell
202
+ anchor run squadsIdlUpgrade -- \
203
+ --programId $PROGRAM_ID \
204
+ --idlBuffer $IDL_BUFFER \
205
+ --multisig $MULTISIG \
206
+ --closeRecipient $(solana address --keypair $KEYPAIR)
207
+ ```
208
+
209
+ #### Verify
210
+
211
+ Start with verifying locally that the deployed program matches the source code of the public repository:
212
+
213
+ ```shell
214
+ solana-verify verify-from-repo \
215
+ --url $RPC_URL \
216
+ --program-id $PROGRAM_ID \
217
+ --library-name $PROGRAM \
218
+ https://github.com/across-protocol/contracts
219
+ ```
220
+
221
+ When prompted, don't yet upload the verification data to the blockchain as that should be done by the multisig. Proceed with creating the upload transaction and then import and sign/execute it in the Squads multisig:
222
+
223
+ ```shell
224
+ solana-verify export-pda-tx \
225
+ --url $RPC_URL \
226
+ --program-id $PROGRAM_ID \
227
+ --library-name $PROGRAM \
228
+ --uploader $MULTISIG \
229
+ https://github.com/across-protocol/contracts
230
+ ```
231
+
232
+ Note that the initial upload transaction might fail if the multisig vault does not have enough SOL for PDA creation. In that case, transfer the required funds to the multisig vault before executing the upload transaction.
233
+
234
+ Finally, submit the verification to OtterSec API (only works on mainnet):
235
+
236
+ ```shell
237
+ solana-verify remote submit-job \
238
+ --url $RPC_URL \
239
+ --program-id $PROGRAM_ID \
240
+ --uploader $MULTISIG
241
+ ```
242
+
64
243
  ## Miscellaneous topics
65
244
 
66
245
  ### Manually Finalizing Scroll Claims from L2 -> L1 (Mainnet | Sepolia)
@@ -34,7 +34,8 @@
34
34
  "Ink_Adapter": { "address": "0x7e90a40c7519b041a7df6498fbf5662e8cfc61d2", "blockNumber": 21438590 },
35
35
  "Cher_Adapter": { "address": "0x0c9d064523177dBB55CFE52b9D0c485FBFc35FD2", "blockNumber": 21597341 },
36
36
  "Lens_Adapter": { "address": "0x63AC22131eD457aeCbD63e6c4C7eeC7BBC74fF1F", "blockNumber": 22167069 },
37
- "DoctorWho_Adapter": { "address": "0xFADcC43096756e1527306FD92982FEbBe3c629Fa", "blockNumber": 21773451 }
37
+ "DoctorWho_Adapter": { "address": "0xFADcC43096756e1527306FD92982FEbBe3c629Fa", "blockNumber": 21773451 },
38
+ "Solana_Adapter": { "address": "0x1E22A3146439C68A2d247448372AcAEe9E201AB1", "blockNumber": 22566473 }
38
39
  },
39
40
  "10": {
40
41
  "SpokePool": { "address": "0x6f26Bf09B1C792e3228e5467807a900A503c0281", "blockNumber": 93903076 },
@@ -169,7 +170,8 @@
169
170
  "Lisk_Adapter": { "address": "0x13a8B1D6443016424e2b8Bac40dD884Ee679AFc4", "blockNumber": 6226289 },
170
171
  "Lens_Adapter": { "address": "0x8fac6F764ae0b4F632FE2E6c938ED5637E629ff2", "blockNumber": 7448085 },
171
172
  "Blast_Adapter": { "address": "0x09500Ffd743e01B4146a4BA795231Ca7Ca37819f", "blockNumber": 6233857 },
172
- "DoctorWho_Adapter": { "address": "0x2b482aFb675e1F231521d5E56770ce4aac592246", "blockNumber": 7698546 }
173
+ "DoctorWho_Adapter": { "address": "0x2b482aFb675e1F231521d5E56770ce4aac592246", "blockNumber": 7698546 },
174
+ "Solana_Adapter": { "address": "0x9b2c2f3fD98cF8468715Be31155cc053C56f822A", "blockNumber": 8409722 }
173
175
  },
174
176
  "37111": {
175
177
  "SpokePool": { "address": "0x6A0a7f39530923911832Dd60667CE5da5449967B", "blockNumber": 156275 },
@@ -16,11 +16,7 @@ codama.accept((0, renderers_js_1.renderVisitor)(path_1.default.join(exports.clie
16
16
  // Generate MulticallHandler clients
17
17
  codama = (0, codama_1.createFromRoot)((0, nodes_from_anchor_1.rootNodeFromAnchor)(assets_1.MulticallHandlerIdl));
18
18
  codama.accept((0, renderers_js_1.renderVisitor)(path_1.default.join(exports.clientsPath, "MulticallHandler")));
19
- // codama = createFromRoot(rootNodeFromAnchor(MessageTransmitterIdl as AnchorIdl));
20
- // codama.accept(
21
- // renderJavaScriptVisitor(path.join(clientsPath, "MessageTransmitter"))
22
- // );
23
- // codama = createFromRoot(rootNodeFromAnchor(TokenMessengerMinterIdl as AnchorIdl));
24
- // codama.accept(
25
- // renderJavaScriptVisitor(path.join(clientsPath, "TokenMessengerMinter"))
26
- // );
19
+ codama = (0, codama_1.createFromRoot)((0, nodes_from_anchor_1.rootNodeFromAnchor)(assets_1.MessageTransmitterIdl));
20
+ codama.accept((0, renderers_js_1.renderVisitor)(path_1.default.join(exports.clientsPath, "MessageTransmitter")));
21
+ codama = (0, codama_1.createFromRoot)((0, nodes_from_anchor_1.rootNodeFromAnchor)(assets_1.TokenMessengerMinterIdl));
22
+ codama.accept((0, renderers_js_1.renderVisitor)(path_1.default.join(exports.clientsPath, "TokenMessengerMinter")));
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
- // This script is used by a chain admin to enable or disable a route for a token on the Solana Spoke Pool.
2
+ // This script can be used by a anyone to create a vault for a token on the Solana Spoke Pool. Note that this is a
3
+ // permissionless operation, only requiring the caller to spend rent-exempt deposit to create the vault account that is
4
+ // not recoverable. Similar to other chains, this enables one to deposit and fill non-whitelisted tokens.
3
5
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
6
  if (k2 === undefined) k2 = k;
5
7
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -37,59 +39,35 @@ const web3_v1_1 = require("../../src/svm/web3-v1");
37
39
  // Set up the provider
38
40
  const provider = anchor_1.AnchorProvider.env();
39
41
  anchor.setProvider(provider);
42
+ const payer = anchor.AnchorProvider.env().wallet.payer;
40
43
  const program = (0, web3_v1_1.getSpokePoolProgram)(provider);
41
44
  const programId = program.programId;
42
45
  console.log("SVM-Spoke Program ID:", programId.toString());
43
46
  // Parse arguments
44
47
  const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
45
- .option("seed", { type: "string", demandOption: true, describe: "Seed for the state account PDA" })
46
- .option("originToken", { type: "string", demandOption: true, describe: "Origin token public key" })
47
- .option("chainId", { type: "string", demandOption: true, describe: "Chain ID" })
48
- .option("enabled", { type: "boolean", demandOption: true, describe: "Enable or disable the route" }).argv;
49
- async function enableRoute() {
48
+ .option("seed", { type: "string", demandOption: false, describe: "Seed for the state account PDA" })
49
+ .option("originToken", { type: "string", demandOption: true, describe: "Origin token public key" }).argv;
50
+ async function createVault() {
50
51
  const resolvedArgv = await argv;
51
- const seed = new anchor_1.BN(resolvedArgv.seed);
52
+ const seed = resolvedArgv.seed ? new anchor_1.BN(resolvedArgv.seed) : web3_v1_1.SOLANA_SPOKE_STATE_SEED;
52
53
  const originToken = new web3_js_1.PublicKey(resolvedArgv.originToken);
53
- const chainId = new anchor_1.BN(resolvedArgv.chainId);
54
- const enabled = resolvedArgv.enabled;
55
54
  // Define the state account PDA
56
55
  const [statePda, _] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("state"), seed.toArrayLike(Buffer, "le", 8)], programId);
57
- // Define the route account PDA
58
- const [routePda] = web3_js_1.PublicKey.findProgramAddressSync([
59
- Buffer.from("route"),
60
- originToken.toBytes(),
61
- seed.toArrayLike(Buffer, "le", 8),
62
- chainId.toArrayLike(Buffer, "le", 8),
63
- ], programId);
64
56
  // Define the signer (replace with your actual signer)
65
57
  const signer = provider.wallet.publicKey;
66
- console.log("Enabling route...");
58
+ console.log("Creating vault...");
67
59
  console.table([
68
60
  { Property: "seed", Value: seed.toString() },
69
61
  { Property: "originToken", Value: originToken.toString() },
70
- { Property: "chainId", Value: chainId.toString() },
71
- { Property: "enabled", Value: enabled },
72
62
  { Property: "programId", Value: programId.toString() },
73
63
  { Property: "providerPublicKey", Value: provider.wallet.publicKey.toString() },
74
64
  { Property: "statePda", Value: statePda.toString() },
75
- { Property: "routePda", Value: routePda.toString() },
76
65
  ]);
77
66
  // Create ATA for the origin token to be stored by state (vault).
78
- const vault = (0, spl_token_1.getAssociatedTokenAddressSync)(originToken, statePda, true, spl_token_1.TOKEN_PROGRAM_ID, spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID);
79
- const tx = await program.methods.setEnableRoute(originToken, chainId, enabled)
80
- .accounts({
81
- signer: signer,
82
- payer: signer,
83
- state: statePda,
84
- route: routePda,
85
- vault: vault,
86
- originTokenMint: originToken,
87
- tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
88
- associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
89
- systemProgram: web3_js_1.SystemProgram.programId,
90
- })
91
- .rpc();
92
- console.log("Transaction signature:", tx);
67
+ const vault = await (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, originToken, statePda, true, "confirmed", {
68
+ commitment: "confirmed",
69
+ }, spl_token_1.TOKEN_PROGRAM_ID, spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID);
70
+ console.log("Created vault:", vault.address.toString());
93
71
  }
94
- // Run the enableRoute function
95
- enableRoute();
72
+ // Run the createVault function
73
+ createVault();
@@ -58,7 +58,7 @@ const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
58
58
  .option("repaymentAddress", { type: "string", demandOption: false, description: "Repayment address" })
59
59
  .option("distributionCount", { type: "number", demandOption: false, describe: "Distribution count" })
60
60
  .option("bufferParams", { type: "boolean", demandOption: false, describe: "Use buffer account for params" }).argv;
61
- async function fillV3RelayToRandom() {
61
+ async function fillRelayToRandom() {
62
62
  const resolvedArgv = await argv;
63
63
  const depositor = new web3_js_1.PublicKey(resolvedArgv.depositor);
64
64
  const handler = new web3_js_1.PublicKey(resolvedArgv.handler);
@@ -120,7 +120,7 @@ async function fillV3RelayToRandom() {
120
120
  exclusivityDeadline,
121
121
  message: encodedMessage,
122
122
  };
123
- console.log("Filling V3 Relay with handler...");
123
+ console.log("Filling Relay with handler...");
124
124
  // Define the state account PDA
125
125
  const [statePda] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("state"), seed.toArrayLike(Buffer, "le", 8)], programId);
126
126
  // Fetch the state from the on-chain program to get chainId
@@ -151,17 +151,18 @@ async function fillV3RelayToRandom() {
151
151
  // Delegate state PDA to pull relayer tokens.
152
152
  const approveInstruction = await (0, spl_token_1.createApproveCheckedInstruction)(relayerTokenAccount, outputToken, statePda, signer.publicKey, BigInt(relayData.outputAmount.toString()), tokenDecimals, undefined, spl_token_1.TOKEN_PROGRAM_ID);
153
153
  // Prepare fill instruction as we will need to use Address Lookup Table (ALT).
154
- const fillV3RelayValues = [relayHash, relayData, repaymentChain, repaymentAddress];
154
+ const fillRelayValues = [relayHash, relayData, repaymentChain, repaymentAddress];
155
155
  if (bufferParams) {
156
- await (0, web3_v1_1.loadFillRelayParams)(program, signer, fillV3RelayValues[1], fillV3RelayValues[2], fillV3RelayValues[3]);
156
+ await (0, web3_v1_1.loadFillRelayParams)(program, signer, fillRelayValues[1], fillRelayValues[2], fillRelayValues[3]);
157
157
  }
158
- const fillV3RelayParams = bufferParams ? [fillV3RelayValues[0], null, null, null] : fillV3RelayValues;
158
+ const fillRelayParams = bufferParams ? [fillRelayValues[0], null, null, null] : fillRelayValues;
159
159
  const [instructionParams] = bufferParams
160
160
  ? web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("instruction_params"), signer.publicKey.toBuffer()], program.programId)
161
161
  : [program.programId];
162
162
  const fillAccounts = {
163
163
  state: statePda,
164
164
  signer: signer.publicKey,
165
+ delegate: (0, web3_v1_1.getFillRelayDelegatePda)(relayHashUint8Array, repaymentChain, repaymentAddress, program.programId).pda,
165
166
  instructionParams,
166
167
  mint: outputToken,
167
168
  relayerTokenAccount,
@@ -177,7 +178,7 @@ async function fillV3RelayToRandom() {
177
178
  ...multicallHandlerCoder.compiledKeyMetas,
178
179
  ];
179
180
  const fillInstruction = await program.methods
180
- .fillRelay(...fillV3RelayParams)
181
+ .fillRelay(...fillRelayParams)
181
182
  .accounts(fillAccounts)
182
183
  .remainingAccounts(remainingAccounts)
183
184
  .instruction();
@@ -185,5 +186,5 @@ async function fillV3RelayToRandom() {
185
186
  const { txSignature } = await (0, web3_v1_1.sendTransactionWithLookupTable)(provider.connection, [approveInstruction, fillInstruction], signer);
186
187
  console.log("Transaction signature:", txSignature);
187
188
  }
188
- // Run the fillV3RelayToRandom function
189
- fillV3RelayToRandom();
189
+ // Run the fillRelayToRandom function
190
+ fillRelayToRandom();
@@ -40,11 +40,12 @@ const program = (0, web3_v1_1.getSpokePoolProgram)(provider);
40
40
  const programId = program.programId;
41
41
  // Parse arguments
42
42
  const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
43
- .option("seed", { type: "string", demandOption: true, describe: "Seed for the state account PDA" })
44
- .option("initNumbDeposits", { type: "string", demandOption: true, describe: "Init numb of deposits" })
43
+ .option("seed", { type: "string", demandOption: false, describe: "Seed for the state account PDA" })
44
+ .option("initNumbDeposits", { type: "string", demandOption: false, describe: "Init numb of deposits" })
45
45
  .option("chainId", { type: "string", demandOption: true, describe: "Chain ID" })
46
46
  .option("remoteDomain", { type: "number", demandOption: true, describe: "CCTP domain for Mainnet Ethereum" })
47
47
  .option("crossDomainAdmin", { type: "string", demandOption: true, describe: "HubPool on Mainnet Ethereum" })
48
+ .option("svmAdmin", { type: "string", demandOption: false, describe: "SVM admin" })
48
49
  .option("depositQuoteTimeBuffer", {
49
50
  type: "number",
50
51
  demandOption: false,
@@ -54,16 +55,17 @@ const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
54
55
  .option("fillDeadlineBuffer", {
55
56
  type: "number",
56
57
  demandOption: false,
57
- default: 3600 * 4,
58
+ default: 3600 * 6,
58
59
  describe: "Fill deadline buffer",
59
60
  }).argv;
60
61
  async function initialize() {
61
62
  const resolvedArgv = await argv;
62
- const seed = new anchor_1.BN(resolvedArgv.seed);
63
- const initialNumberOfDeposits = new anchor_1.BN(resolvedArgv.initNumbDeposits);
63
+ const seed = resolvedArgv.seed ? new anchor_1.BN(resolvedArgv.seed) : web3_v1_1.SOLANA_SPOKE_STATE_SEED;
64
+ const initialNumberOfDeposits = resolvedArgv.initNumbDeposits ? new anchor_1.BN(resolvedArgv.initNumbDeposits) : new anchor_1.BN(0);
64
65
  const chainId = new anchor_1.BN(resolvedArgv.chainId);
65
66
  const remoteDomain = resolvedArgv.remoteDomain;
66
67
  const crossDomainAdmin = (0, web3_v1_1.evmAddressToPublicKey)(resolvedArgv.crossDomainAdmin); // Use the function to cast the value
68
+ const svmAdmin = resolvedArgv.svmAdmin ? new web3_js_1.PublicKey(resolvedArgv.svmAdmin) : provider.wallet.publicKey;
67
69
  const depositQuoteTimeBuffer = resolvedArgv.depositQuoteTimeBuffer;
68
70
  const fillDeadlineBuffer = resolvedArgv.fillDeadlineBuffer;
69
71
  // Define the state account PDA
@@ -82,6 +84,7 @@ async function initialize() {
82
84
  { Property: "chainId", Value: chainId.toString() },
83
85
  { Property: "remoteDomain", Value: remoteDomain.toString() },
84
86
  { Property: "crossDomainAdmin", Value: crossDomainAdmin.toString() },
87
+ { Property: "svmAdmin", Value: svmAdmin.toString() },
85
88
  { Property: "depositQuoteTimeBuffer", Value: depositQuoteTimeBuffer.toString() },
86
89
  { Property: "fillDeadlineBuffer", Value: fillDeadlineBuffer.toString() },
87
90
  ]);
@@ -93,6 +96,17 @@ async function initialize() {
93
96
  })
94
97
  .rpc();
95
98
  console.log("Transaction signature:", tx);
99
+ if (!svmAdmin.equals(provider.wallet.publicKey)) {
100
+ console.log("Transferring ownership to SVM admin...");
101
+ const tx = await program.methods
102
+ .transferOwnership(svmAdmin)
103
+ .accountsPartial({
104
+ state: statePda,
105
+ signer: signer,
106
+ })
107
+ .rpc();
108
+ console.log("Transfer ownership transaction signature:", tx);
109
+ }
96
110
  }
97
111
  // Run the initialize function
98
112
  initialize();
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ // This script is used to initiate a native token Solana deposit. useful in testing.
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || function (mod) {
20
+ if (mod && mod.__esModule) return mod;
21
+ var result = {};
22
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
+ __setModuleDefault(result, mod);
24
+ return result;
25
+ };
26
+ var __importDefault = (this && this.__importDefault) || function (mod) {
27
+ return (mod && mod.__esModule) ? mod : { "default": mod };
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ const anchor = __importStar(require("@coral-xyz/anchor"));
31
+ const anchor_1 = require("@coral-xyz/anchor");
32
+ const spl_token_1 = require("@solana/spl-token");
33
+ const web3_js_1 = require("@solana/web3.js");
34
+ const yargs_1 = __importDefault(require("yargs"));
35
+ const helpers_1 = require("yargs/helpers");
36
+ const web3_v1_1 = require("../../src/svm/web3-v1");
37
+ // Set up the provider
38
+ const provider = anchor_1.AnchorProvider.env();
39
+ anchor.setProvider(provider);
40
+ const program = (0, web3_v1_1.getSpokePoolProgram)(provider);
41
+ const programId = program.programId;
42
+ console.log("SVM-Spoke Program ID:", programId.toString());
43
+ // Parse arguments
44
+ const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
45
+ .option("recipient", { type: "string", demandOption: true, describe: "Recipient public key" })
46
+ .option("outputToken", { type: "string", demandOption: true, describe: "Output token public key" })
47
+ .option("inputAmount", { type: "number", demandOption: true, describe: "Input amount" })
48
+ .option("outputAmount", { type: "number", demandOption: true, describe: "Output amount" })
49
+ .option("destinationChainId", { type: "string", demandOption: true, describe: "Destination chain ID" })
50
+ .option("integratorId", { type: "string", demandOption: false, describe: "integrator ID" }).argv;
51
+ async function nativeDeposit() {
52
+ const resolvedArgv = await argv;
53
+ const seed = web3_v1_1.SOLANA_SPOKE_STATE_SEED;
54
+ const recipient = new web3_js_1.PublicKey(resolvedArgv.recipient);
55
+ const inputToken = spl_token_1.NATIVE_MINT;
56
+ const outputToken = new web3_js_1.PublicKey(resolvedArgv.outputToken);
57
+ const inputAmount = new anchor_1.BN(resolvedArgv.inputAmount);
58
+ const outputAmount = new anchor_1.BN(resolvedArgv.outputAmount);
59
+ const destinationChainId = new anchor_1.BN(resolvedArgv.destinationChainId);
60
+ const exclusiveRelayer = web3_js_1.PublicKey.default;
61
+ const quoteTimestamp = Math.floor(Date.now() / 1000) - 1;
62
+ const fillDeadline = quoteTimestamp + 3600; // 1 hour from now
63
+ const exclusivityDeadline = 0;
64
+ const message = Buffer.from([]); // Convert to Buffer
65
+ const integratorId = resolvedArgv.integratorId || "";
66
+ // Define the state account PDA
67
+ const [statePda, _] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("state"), seed.toArrayLike(Buffer, "le", 8)], programId);
68
+ // Define the signer (replace with your actual signer)
69
+ const signer = provider.wallet.payer;
70
+ // Find ATA for the input token to be stored by state (vault).
71
+ const vault = (0, spl_token_1.getAssociatedTokenAddressSync)(inputToken, statePda, true, spl_token_1.TOKEN_PROGRAM_ID, spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID);
72
+ const userTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(inputToken, signer.publicKey);
73
+ const userTokenAccountInfo = await provider.connection.getAccountInfo(userTokenAccount);
74
+ const existingTokenAccount = userTokenAccountInfo !== null && userTokenAccountInfo.owner.equals(spl_token_1.TOKEN_PROGRAM_ID);
75
+ console.log("Depositing...");
76
+ console.table([
77
+ { property: "seed", value: seed.toString() },
78
+ { property: "recipient", value: recipient.toString() },
79
+ { property: "inputToken", value: inputToken.toString() },
80
+ { property: "outputToken", value: outputToken.toString() },
81
+ { property: "inputAmount", value: inputAmount.toString() },
82
+ { property: "outputAmount", value: outputAmount.toString() },
83
+ { property: "destinationChainId", value: destinationChainId.toString() },
84
+ { property: "quoteTimestamp", value: quoteTimestamp.toString() },
85
+ { property: "fillDeadline", value: fillDeadline.toString() },
86
+ { property: "exclusivityDeadline", value: exclusivityDeadline.toString() },
87
+ { property: "message", value: message.toString("hex") },
88
+ { property: "integratorId", value: integratorId },
89
+ { property: "programId", value: programId.toString() },
90
+ { property: "providerPublicKey", value: provider.wallet.publicKey.toString() },
91
+ { property: "statePda", value: statePda.toString() },
92
+ { property: "vault", value: vault.toString() },
93
+ { property: "userTokenAccount", value: userTokenAccount.toString() },
94
+ { property: "existingTokenAccount", value: existingTokenAccount },
95
+ ]);
96
+ const tokenDecimals = (await (0, spl_token_1.getMint)(provider.connection, inputToken, undefined, spl_token_1.TOKEN_PROGRAM_ID)).decimals;
97
+ // Will need to add rent exemption to the deposit amount if the user token account does not exist.
98
+ const rentExempt = existingTokenAccount ? 0 : await (0, spl_token_1.getMinimumBalanceForRentExemptAccount)(provider.connection);
99
+ const transferIx = web3_js_1.SystemProgram.transfer({
100
+ fromPubkey: signer.publicKey,
101
+ toPubkey: userTokenAccount,
102
+ lamports: BigInt(inputAmount.toString()) + BigInt(rentExempt),
103
+ });
104
+ // Create wSOL user account if it doesn't exist, otherwise sync its native balance.
105
+ const syncOrCreateIx = existingTokenAccount
106
+ ? (0, spl_token_1.createSyncNativeInstruction)(userTokenAccount)
107
+ : (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer.publicKey, userTokenAccount, signer.publicKey, inputToken);
108
+ // Close the user token account if it did not exist before.
109
+ const lastIxs = existingTokenAccount
110
+ ? []
111
+ : [(0, spl_token_1.createCloseAccountInstruction)(userTokenAccount, signer.publicKey, signer.publicKey)];
112
+ const depositData = {
113
+ depositor: signer.publicKey,
114
+ recipient,
115
+ inputToken,
116
+ outputToken,
117
+ inputAmount,
118
+ outputAmount,
119
+ destinationChainId,
120
+ exclusiveRelayer,
121
+ quoteTimestamp: new anchor_1.BN(quoteTimestamp),
122
+ fillDeadline: new anchor_1.BN(fillDeadline),
123
+ exclusivityParameter: new anchor_1.BN(exclusivityDeadline),
124
+ message,
125
+ };
126
+ const delegatePda = (0, web3_v1_1.getDepositPda)(depositData, program.programId);
127
+ // Delegate state PDA to pull depositor tokens.
128
+ const approveIx = await (0, spl_token_1.createApproveCheckedInstruction)(userTokenAccount, inputToken, delegatePda, signer.publicKey, BigInt(inputAmount.toString()), tokenDecimals, undefined, spl_token_1.TOKEN_PROGRAM_ID);
129
+ const depositAccounts = {
130
+ state: statePda,
131
+ delegate: delegatePda,
132
+ signer: signer.publicKey,
133
+ depositorTokenAccount: userTokenAccount,
134
+ vault: vault,
135
+ mint: inputToken,
136
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
137
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
138
+ systemProgram: web3_js_1.SystemProgram.programId,
139
+ program: programId,
140
+ };
141
+ const depositIx = await program.methods
142
+ .deposit(signer.publicKey, recipient, inputToken, outputToken, inputAmount, outputAmount, destinationChainId, exclusiveRelayer, quoteTimestamp, fillDeadline, exclusivityDeadline, message)
143
+ .accounts(depositAccounts)
144
+ .instruction();
145
+ // Create the deposit transaction
146
+ const depositTx = new web3_js_1.Transaction().add(transferIx, syncOrCreateIx, approveIx, depositIx, ...lastIxs);
147
+ if (integratorId !== "") {
148
+ const MemoIx = new web3_js_1.TransactionInstruction({
149
+ keys: [{ pubkey: signer.publicKey, isSigner: true, isWritable: true }],
150
+ data: Buffer.from(integratorId, "utf-8"),
151
+ programId: new web3_js_1.PublicKey("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"), // Memo program ID
152
+ });
153
+ depositTx.add(MemoIx);
154
+ }
155
+ const tx = await (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, depositTx, [signer]);
156
+ console.log("Transaction signature:", tx);
157
+ }
158
+ // Run the nativeDeposit function
159
+ nativeDeposit();
@@ -20,8 +20,8 @@ const argvPromise = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
20
20
  describe: "Name of the event to query",
21
21
  choices: [
22
22
  "any",
23
- "FilledV3Relay",
24
- "V3FundsDeposited",
23
+ "FilledRelay",
24
+ "FundsDeposited",
25
25
  "EnabledDepositRoute",
26
26
  "RelayedRootBundle",
27
27
  "ExecutedRelayerRefundRoot",
@@ -30,7 +30,7 @@ const argvPromise = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
30
30
  "PausedFills",
31
31
  "SetXDomainAdmin",
32
32
  "EmergencyDeletedRootBundle",
33
- "RequestedV3SlowFill",
33
+ "RequestedSlowFill",
34
34
  "ClaimedRelayerRefund",
35
35
  "TokensBridged",
36
36
  ],