@across-protocol/contracts 4.0.12 → 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 (215) 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/createVault.js +2 -2
  5. package/dist/scripts/svm/initialize.js +19 -5
  6. package/dist/scripts/svm/nativeDeposit.js +27 -6
  7. package/dist/scripts/svm/simpleDeposit.js +27 -6
  8. package/dist/scripts/svm/simpleFill.js +5 -4
  9. package/dist/scripts/svm/squadsIdlUpgrade.d.ts +1 -0
  10. package/dist/scripts/svm/squadsIdlUpgrade.js +76 -0
  11. package/dist/src/svm/assets/idl/svm_spoke.json +30 -45
  12. package/dist/src/svm/assets/svm_spoke.d.ts +30 -45
  13. package/dist/src/svm/clients/MessageTransmitter/accounts/index.d.ts +10 -0
  14. package/dist/src/svm/clients/MessageTransmitter/accounts/index.js +26 -0
  15. package/dist/src/svm/clients/MessageTransmitter/accounts/messageSent.d.ts +28 -0
  16. package/dist/src/svm/clients/MessageTransmitter/accounts/messageSent.js +64 -0
  17. package/dist/src/svm/clients/MessageTransmitter/accounts/messageTransmitter.d.ts +46 -0
  18. package/dist/src/svm/clients/MessageTransmitter/accounts/messageTransmitter.js +82 -0
  19. package/dist/src/svm/clients/MessageTransmitter/accounts/usedNonces.d.ts +31 -0
  20. package/dist/src/svm/clients/MessageTransmitter/accounts/usedNonces.js +70 -0
  21. package/dist/src/svm/clients/MessageTransmitter/errors/index.d.ts +8 -0
  22. package/dist/src/svm/clients/MessageTransmitter/errors/index.js +24 -0
  23. package/dist/src/svm/clients/MessageTransmitter/errors/messageTransmitter.d.ts +83 -0
  24. package/dist/src/svm/clients/MessageTransmitter/errors/messageTransmitter.js +124 -0
  25. package/dist/src/svm/clients/MessageTransmitter/index.d.ts +12 -0
  26. package/dist/src/svm/clients/MessageTransmitter/index.js +28 -0
  27. package/dist/src/svm/clients/MessageTransmitter/instructions/acceptOwnership.d.ts +45 -0
  28. package/dist/src/svm/clients/MessageTransmitter/instructions/acceptOwnership.js +85 -0
  29. package/dist/src/svm/clients/MessageTransmitter/instructions/disableAttester.d.ts +55 -0
  30. package/dist/src/svm/clients/MessageTransmitter/instructions/disableAttester.js +105 -0
  31. package/dist/src/svm/clients/MessageTransmitter/instructions/enableAttester.d.ts +55 -0
  32. package/dist/src/svm/clients/MessageTransmitter/instructions/enableAttester.js +105 -0
  33. package/dist/src/svm/clients/MessageTransmitter/instructions/getNoncePda.d.ts +43 -0
  34. package/dist/src/svm/clients/MessageTransmitter/instructions/getNoncePda.js +82 -0
  35. package/dist/src/svm/clients/MessageTransmitter/instructions/index.d.ts +25 -0
  36. package/dist/src/svm/clients/MessageTransmitter/instructions/index.js +41 -0
  37. package/dist/src/svm/clients/MessageTransmitter/instructions/initialize.d.ts +70 -0
  38. package/dist/src/svm/clients/MessageTransmitter/instructions/initialize.js +123 -0
  39. package/dist/src/svm/clients/MessageTransmitter/instructions/isNonceUsed.d.ts +42 -0
  40. package/dist/src/svm/clients/MessageTransmitter/instructions/isNonceUsed.js +77 -0
  41. package/dist/src/svm/clients/MessageTransmitter/instructions/pause.d.ts +45 -0
  42. package/dist/src/svm/clients/MessageTransmitter/instructions/pause.js +85 -0
  43. package/dist/src/svm/clients/MessageTransmitter/instructions/receiveMessage.d.ts +67 -0
  44. package/dist/src/svm/clients/MessageTransmitter/instructions/receiveMessage.js +113 -0
  45. package/dist/src/svm/clients/MessageTransmitter/instructions/reclaimEventAccount.d.ts +48 -0
  46. package/dist/src/svm/clients/MessageTransmitter/instructions/reclaimEventAccount.js +94 -0
  47. package/dist/src/svm/clients/MessageTransmitter/instructions/replaceMessage.d.ts +64 -0
  48. package/dist/src/svm/clients/MessageTransmitter/instructions/replaceMessage.js +132 -0
  49. package/dist/src/svm/clients/MessageTransmitter/instructions/sendMessage.d.ts +61 -0
  50. package/dist/src/svm/clients/MessageTransmitter/instructions/sendMessage.js +112 -0
  51. package/dist/src/svm/clients/MessageTransmitter/instructions/sendMessageWithCaller.d.ts +64 -0
  52. package/dist/src/svm/clients/MessageTransmitter/instructions/sendMessageWithCaller.js +117 -0
  53. package/dist/src/svm/clients/MessageTransmitter/instructions/setMaxMessageBodySize.d.ts +49 -0
  54. package/dist/src/svm/clients/MessageTransmitter/instructions/setMaxMessageBodySize.js +94 -0
  55. package/dist/src/svm/clients/MessageTransmitter/instructions/setSignatureThreshold.d.ts +49 -0
  56. package/dist/src/svm/clients/MessageTransmitter/instructions/setSignatureThreshold.js +97 -0
  57. package/dist/src/svm/clients/MessageTransmitter/instructions/transferOwnership.d.ts +49 -0
  58. package/dist/src/svm/clients/MessageTransmitter/instructions/transferOwnership.js +91 -0
  59. package/dist/src/svm/clients/MessageTransmitter/instructions/unpause.d.ts +45 -0
  60. package/dist/src/svm/clients/MessageTransmitter/instructions/unpause.js +85 -0
  61. package/dist/src/svm/clients/MessageTransmitter/instructions/updateAttesterManager.d.ts +49 -0
  62. package/dist/src/svm/clients/MessageTransmitter/instructions/updateAttesterManager.js +94 -0
  63. package/dist/src/svm/clients/MessageTransmitter/instructions/updatePauser.d.ts +49 -0
  64. package/dist/src/svm/clients/MessageTransmitter/instructions/updatePauser.js +91 -0
  65. package/dist/src/svm/clients/MessageTransmitter/programs/index.d.ts +8 -0
  66. package/dist/src/svm/clients/MessageTransmitter/programs/index.js +24 -0
  67. package/dist/src/svm/clients/MessageTransmitter/programs/messageTransmitter.d.ts +78 -0
  68. package/dist/src/svm/clients/MessageTransmitter/programs/messageTransmitter.js +112 -0
  69. package/dist/src/svm/clients/MessageTransmitter/shared/index.d.ts +49 -0
  70. package/dist/src/svm/clients/MessageTransmitter/shared/index.js +94 -0
  71. package/dist/src/svm/clients/MessageTransmitter/types/attesterDisabled.d.ts +15 -0
  72. package/dist/src/svm/clients/MessageTransmitter/types/attesterDisabled.js +22 -0
  73. package/dist/src/svm/clients/MessageTransmitter/types/attesterEnabled.d.ts +15 -0
  74. package/dist/src/svm/clients/MessageTransmitter/types/attesterEnabled.js +22 -0
  75. package/dist/src/svm/clients/MessageTransmitter/types/attesterManagerUpdated.d.ts +16 -0
  76. package/dist/src/svm/clients/MessageTransmitter/types/attesterManagerUpdated.js +28 -0
  77. package/dist/src/svm/clients/MessageTransmitter/types/handleReceiveMessageParams.d.ts +18 -0
  78. package/dist/src/svm/clients/MessageTransmitter/types/handleReceiveMessageParams.js +32 -0
  79. package/dist/src/svm/clients/MessageTransmitter/types/index.d.ts +20 -0
  80. package/dist/src/svm/clients/MessageTransmitter/types/index.js +36 -0
  81. package/dist/src/svm/clients/MessageTransmitter/types/mathError.d.ts +17 -0
  82. package/dist/src/svm/clients/MessageTransmitter/types/mathError.js +29 -0
  83. package/dist/src/svm/clients/MessageTransmitter/types/maxMessageBodySizeUpdated.d.ts +17 -0
  84. package/dist/src/svm/clients/MessageTransmitter/types/maxMessageBodySizeUpdated.js +22 -0
  85. package/dist/src/svm/clients/MessageTransmitter/types/messageReceived.d.ts +25 -0
  86. package/dist/src/svm/clients/MessageTransmitter/types/messageReceived.js +34 -0
  87. package/dist/src/svm/clients/MessageTransmitter/types/ownershipTransferStarted.d.ts +16 -0
  88. package/dist/src/svm/clients/MessageTransmitter/types/ownershipTransferStarted.js +28 -0
  89. package/dist/src/svm/clients/MessageTransmitter/types/ownershipTransferred.d.ts +16 -0
  90. package/dist/src/svm/clients/MessageTransmitter/types/ownershipTransferred.js +28 -0
  91. package/dist/src/svm/clients/MessageTransmitter/types/pause.d.ts +13 -0
  92. package/dist/src/svm/clients/MessageTransmitter/types/pause.js +22 -0
  93. package/dist/src/svm/clients/MessageTransmitter/types/pauserChanged.d.ts +15 -0
  94. package/dist/src/svm/clients/MessageTransmitter/types/pauserChanged.js +22 -0
  95. package/dist/src/svm/clients/MessageTransmitter/types/signatureThresholdUpdated.d.ts +16 -0
  96. package/dist/src/svm/clients/MessageTransmitter/types/signatureThresholdUpdated.js +28 -0
  97. package/dist/src/svm/clients/MessageTransmitter/types/unpause.d.ts +13 -0
  98. package/dist/src/svm/clients/MessageTransmitter/types/unpause.js +22 -0
  99. package/dist/src/svm/clients/SvmSpoke/errors/svmSpoke.d.ts +31 -37
  100. package/dist/src/svm/clients/SvmSpoke/errors/svmSpoke.js +46 -55
  101. package/dist/src/svm/clients/SvmSpoke/instructions/bridgeTokensToHubPool.js +1 -1
  102. package/dist/src/svm/clients/SvmSpoke/instructions/claimRelayerRefund.js +1 -1
  103. package/dist/src/svm/clients/SvmSpoke/instructions/deposit.js +2 -2
  104. package/dist/src/svm/clients/SvmSpoke/instructions/depositNow.js +2 -2
  105. package/dist/src/svm/clients/SvmSpoke/instructions/executeRelayerRefundLeaf.js +1 -1
  106. package/dist/src/svm/clients/SvmSpoke/instructions/executeRelayerRefundLeafDeferred.js +1 -1
  107. package/dist/src/svm/clients/SvmSpoke/instructions/executeSlowRelayLeaf.js +2 -2
  108. package/dist/src/svm/clients/SvmSpoke/instructions/fillRelay.js +1 -1
  109. package/dist/src/svm/clients/SvmSpoke/instructions/handleReceiveMessage.js +1 -1
  110. package/dist/src/svm/clients/SvmSpoke/instructions/unsafeDeposit.js +2 -2
  111. package/dist/src/svm/clients/TokenMessengerMinter/accounts/index.d.ts +12 -0
  112. package/dist/src/svm/clients/TokenMessengerMinter/accounts/index.js +28 -0
  113. package/dist/src/svm/clients/TokenMessengerMinter/accounts/localToken.d.ts +43 -0
  114. package/dist/src/svm/clients/TokenMessengerMinter/accounts/localToken.js +82 -0
  115. package/dist/src/svm/clients/TokenMessengerMinter/accounts/remoteTokenMessenger.d.ts +29 -0
  116. package/dist/src/svm/clients/TokenMessengerMinter/accounts/remoteTokenMessenger.js +71 -0
  117. package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenMessenger.d.ts +35 -0
  118. package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenMessenger.js +74 -0
  119. package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenMinter.d.ts +33 -0
  120. package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenMinter.js +72 -0
  121. package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenPair.d.ts +33 -0
  122. package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenPair.js +72 -0
  123. package/dist/src/svm/clients/TokenMessengerMinter/errors/index.d.ts +8 -0
  124. package/dist/src/svm/clients/TokenMessengerMinter/errors/index.js +24 -0
  125. package/dist/src/svm/clients/TokenMessengerMinter/errors/tokenMessengerMinter.d.ts +45 -0
  126. package/dist/src/svm/clients/TokenMessengerMinter/errors/tokenMessengerMinter.js +67 -0
  127. package/dist/src/svm/clients/TokenMessengerMinter/index.d.ts +12 -0
  128. package/dist/src/svm/clients/TokenMessengerMinter/index.js +28 -0
  129. package/dist/src/svm/clients/TokenMessengerMinter/instructions/acceptOwnership.d.ts +45 -0
  130. package/dist/src/svm/clients/TokenMessengerMinter/instructions/acceptOwnership.js +82 -0
  131. package/dist/src/svm/clients/TokenMessengerMinter/instructions/addLocalToken.d.ts +63 -0
  132. package/dist/src/svm/clients/TokenMessengerMinter/instructions/addLocalToken.js +115 -0
  133. package/dist/src/svm/clients/TokenMessengerMinter/instructions/addRemoteTokenMessenger.d.ts +61 -0
  134. package/dist/src/svm/clients/TokenMessengerMinter/instructions/addRemoteTokenMessenger.js +110 -0
  135. package/dist/src/svm/clients/TokenMessengerMinter/instructions/burnTokenCustody.d.ts +64 -0
  136. package/dist/src/svm/clients/TokenMessengerMinter/instructions/burnTokenCustody.js +117 -0
  137. package/dist/src/svm/clients/TokenMessengerMinter/instructions/depositForBurn.d.ts +94 -0
  138. package/dist/src/svm/clients/TokenMessengerMinter/instructions/depositForBurn.js +161 -0
  139. package/dist/src/svm/clients/TokenMessengerMinter/instructions/depositForBurnWithCaller.d.ts +97 -0
  140. package/dist/src/svm/clients/TokenMessengerMinter/instructions/depositForBurnWithCaller.js +166 -0
  141. package/dist/src/svm/clients/TokenMessengerMinter/instructions/handleReceiveMessage.d.ts +79 -0
  142. package/dist/src/svm/clients/TokenMessengerMinter/instructions/handleReceiveMessage.js +132 -0
  143. package/dist/src/svm/clients/TokenMessengerMinter/instructions/index.d.ts +26 -0
  144. package/dist/src/svm/clients/TokenMessengerMinter/instructions/index.js +42 -0
  145. package/dist/src/svm/clients/TokenMessengerMinter/instructions/initialize.d.ts +73 -0
  146. package/dist/src/svm/clients/TokenMessengerMinter/instructions/initialize.js +124 -0
  147. package/dist/src/svm/clients/TokenMessengerMinter/instructions/linkTokenPair.d.ts +64 -0
  148. package/dist/src/svm/clients/TokenMessengerMinter/instructions/linkTokenPair.js +109 -0
  149. package/dist/src/svm/clients/TokenMessengerMinter/instructions/pause.d.ts +45 -0
  150. package/dist/src/svm/clients/TokenMessengerMinter/instructions/pause.js +82 -0
  151. package/dist/src/svm/clients/TokenMessengerMinter/instructions/removeLocalToken.d.ts +57 -0
  152. package/dist/src/svm/clients/TokenMessengerMinter/instructions/removeLocalToken.js +105 -0
  153. package/dist/src/svm/clients/TokenMessengerMinter/instructions/removeRemoteTokenMessenger.d.ts +51 -0
  154. package/dist/src/svm/clients/TokenMessengerMinter/instructions/removeRemoteTokenMessenger.js +94 -0
  155. package/dist/src/svm/clients/TokenMessengerMinter/instructions/replaceDepositForBurn.d.ts +79 -0
  156. package/dist/src/svm/clients/TokenMessengerMinter/instructions/replaceDepositForBurn.js +150 -0
  157. package/dist/src/svm/clients/TokenMessengerMinter/instructions/setMaxBurnAmountPerMessage.d.ts +52 -0
  158. package/dist/src/svm/clients/TokenMessengerMinter/instructions/setMaxBurnAmountPerMessage.js +97 -0
  159. package/dist/src/svm/clients/TokenMessengerMinter/instructions/setTokenController.d.ts +52 -0
  160. package/dist/src/svm/clients/TokenMessengerMinter/instructions/setTokenController.js +91 -0
  161. package/dist/src/svm/clients/TokenMessengerMinter/instructions/transferOwnership.d.ts +49 -0
  162. package/dist/src/svm/clients/TokenMessengerMinter/instructions/transferOwnership.js +88 -0
  163. package/dist/src/svm/clients/TokenMessengerMinter/instructions/unlinkTokenPair.d.ts +51 -0
  164. package/dist/src/svm/clients/TokenMessengerMinter/instructions/unlinkTokenPair.js +91 -0
  165. package/dist/src/svm/clients/TokenMessengerMinter/instructions/unpause.d.ts +45 -0
  166. package/dist/src/svm/clients/TokenMessengerMinter/instructions/unpause.js +82 -0
  167. package/dist/src/svm/clients/TokenMessengerMinter/instructions/updatePauser.d.ts +52 -0
  168. package/dist/src/svm/clients/TokenMessengerMinter/instructions/updatePauser.js +91 -0
  169. package/dist/src/svm/clients/TokenMessengerMinter/programs/index.d.ts +8 -0
  170. package/dist/src/svm/clients/TokenMessengerMinter/programs/index.js +24 -0
  171. package/dist/src/svm/clients/TokenMessengerMinter/programs/tokenMessengerMinter.d.ts +83 -0
  172. package/dist/src/svm/clients/TokenMessengerMinter/programs/tokenMessengerMinter.js +124 -0
  173. package/dist/src/svm/clients/TokenMessengerMinter/shared/index.d.ts +49 -0
  174. package/dist/src/svm/clients/TokenMessengerMinter/shared/index.js +94 -0
  175. package/dist/src/svm/clients/TokenMessengerMinter/types/depositForBurn.d.ts +31 -0
  176. package/dist/src/svm/clients/TokenMessengerMinter/types/depositForBurn.js +40 -0
  177. package/dist/src/svm/clients/TokenMessengerMinter/types/index.d.ts +24 -0
  178. package/dist/src/svm/clients/TokenMessengerMinter/types/index.js +40 -0
  179. package/dist/src/svm/clients/TokenMessengerMinter/types/localTokenAdded.d.ts +16 -0
  180. package/dist/src/svm/clients/TokenMessengerMinter/types/localTokenAdded.js +28 -0
  181. package/dist/src/svm/clients/TokenMessengerMinter/types/localTokenRemoved.d.ts +16 -0
  182. package/dist/src/svm/clients/TokenMessengerMinter/types/localTokenRemoved.js +28 -0
  183. package/dist/src/svm/clients/TokenMessengerMinter/types/mintAndWithdraw.d.ts +21 -0
  184. package/dist/src/svm/clients/TokenMessengerMinter/types/mintAndWithdraw.js +30 -0
  185. package/dist/src/svm/clients/TokenMessengerMinter/types/ownershipTransferStarted.d.ts +16 -0
  186. package/dist/src/svm/clients/TokenMessengerMinter/types/ownershipTransferStarted.js +28 -0
  187. package/dist/src/svm/clients/TokenMessengerMinter/types/ownershipTransferred.d.ts +16 -0
  188. package/dist/src/svm/clients/TokenMessengerMinter/types/ownershipTransferred.js +28 -0
  189. package/dist/src/svm/clients/TokenMessengerMinter/types/pause.d.ts +13 -0
  190. package/dist/src/svm/clients/TokenMessengerMinter/types/pause.js +22 -0
  191. package/dist/src/svm/clients/TokenMessengerMinter/types/pauserChanged.d.ts +15 -0
  192. package/dist/src/svm/clients/TokenMessengerMinter/types/pauserChanged.js +22 -0
  193. package/dist/src/svm/clients/TokenMessengerMinter/types/remoteTokenMessengerAdded.d.ts +16 -0
  194. package/dist/src/svm/clients/TokenMessengerMinter/types/remoteTokenMessengerAdded.js +28 -0
  195. package/dist/src/svm/clients/TokenMessengerMinter/types/remoteTokenMessengerRemoved.d.ts +16 -0
  196. package/dist/src/svm/clients/TokenMessengerMinter/types/remoteTokenMessengerRemoved.js +28 -0
  197. package/dist/src/svm/clients/TokenMessengerMinter/types/setBurnLimitPerMessage.d.ts +19 -0
  198. package/dist/src/svm/clients/TokenMessengerMinter/types/setBurnLimitPerMessage.js +28 -0
  199. package/dist/src/svm/clients/TokenMessengerMinter/types/setTokenController.d.ts +15 -0
  200. package/dist/src/svm/clients/TokenMessengerMinter/types/setTokenController.js +22 -0
  201. package/dist/src/svm/clients/TokenMessengerMinter/types/tokenCustodyBurned.d.ts +19 -0
  202. package/dist/src/svm/clients/TokenMessengerMinter/types/tokenCustodyBurned.js +28 -0
  203. package/dist/src/svm/clients/TokenMessengerMinter/types/tokenMinterError.d.ts +23 -0
  204. package/dist/src/svm/clients/TokenMessengerMinter/types/tokenMinterError.js +35 -0
  205. package/dist/src/svm/clients/TokenMessengerMinter/types/tokenPairLinked.d.ts +17 -0
  206. package/dist/src/svm/clients/TokenMessengerMinter/types/tokenPairLinked.js +30 -0
  207. package/dist/src/svm/clients/TokenMessengerMinter/types/tokenPairUnlinked.d.ts +17 -0
  208. package/dist/src/svm/clients/TokenMessengerMinter/types/tokenPairUnlinked.js +30 -0
  209. package/dist/src/svm/clients/TokenMessengerMinter/types/unpause.d.ts +13 -0
  210. package/dist/src/svm/clients/TokenMessengerMinter/types/unpause.js +22 -0
  211. package/dist/src/svm/clients/index.d.ts +3 -1
  212. package/dist/src/svm/clients/index.js +5 -1
  213. package/dist/target/types/svm_spoke.d.ts +30 -45
  214. package/dist/tasks/enableL1TokenAcrossEcosystem.js +4 -4
  215. package/package.json +5 -5
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")));
@@ -45,11 +45,11 @@ const programId = program.programId;
45
45
  console.log("SVM-Spoke Program ID:", programId.toString());
46
46
  // Parse arguments
47
47
  const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
48
- .option("seed", { type: "string", demandOption: true, describe: "Seed for the state account PDA" })
48
+ .option("seed", { type: "string", demandOption: false, describe: "Seed for the state account PDA" })
49
49
  .option("originToken", { type: "string", demandOption: true, describe: "Origin token public key" }).argv;
50
50
  async function createVault() {
51
51
  const resolvedArgv = await argv;
52
- 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;
53
53
  const originToken = new web3_js_1.PublicKey(resolvedArgv.originToken);
54
54
  // Define the state account PDA
55
55
  const [statePda, _] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("state"), seed.toArrayLike(Buffer, "le", 8)], programId);
@@ -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();
@@ -109,17 +109,38 @@ async function nativeDeposit() {
109
109
  const lastIxs = existingTokenAccount
110
110
  ? []
111
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);
112
127
  // Delegate state PDA to pull depositor tokens.
113
- const approveIx = await (0, spl_token_1.createApproveCheckedInstruction)(userTokenAccount, inputToken, statePda, signer.publicKey, BigInt(inputAmount.toString()), tokenDecimals, undefined, spl_token_1.TOKEN_PROGRAM_ID);
114
- const depositIx = await program.methods.deposit(signer.publicKey, recipient, inputToken, outputToken, inputAmount, outputAmount, destinationChainId, exclusiveRelayer, quoteTimestamp, fillDeadline, exclusivityDeadline, message)
115
- .accounts({
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 = {
116
130
  state: statePda,
131
+ delegate: delegatePda,
117
132
  signer: signer.publicKey,
118
- userTokenAccount,
133
+ depositorTokenAccount: userTokenAccount,
119
134
  vault: vault,
120
- tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
121
135
  mint: inputToken,
122
- })
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)
123
144
  .instruction();
124
145
  // Create the deposit transaction
125
146
  const depositTx = new web3_js_1.Transaction().add(transferIx, syncOrCreateIx, approveIx, depositIx, ...lastIxs);
@@ -93,17 +93,38 @@ async function deposit() {
93
93
  ]);
94
94
  const userTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(inputToken, signer.publicKey);
95
95
  const tokenDecimals = (await (0, spl_token_1.getMint)(provider.connection, inputToken, undefined, spl_token_1.TOKEN_PROGRAM_ID)).decimals;
96
+ const depositData = {
97
+ depositor: signer.publicKey,
98
+ recipient,
99
+ inputToken,
100
+ outputToken,
101
+ inputAmount,
102
+ outputAmount,
103
+ destinationChainId,
104
+ exclusiveRelayer,
105
+ quoteTimestamp: new anchor_1.BN(quoteTimestamp),
106
+ fillDeadline: new anchor_1.BN(fillDeadline),
107
+ exclusivityParameter: new anchor_1.BN(exclusivityDeadline),
108
+ message,
109
+ };
110
+ const delegatePda = (0, web3_v1_1.getDepositPda)(depositData, program.programId);
96
111
  // Delegate state PDA to pull depositor tokens.
97
- const approveIx = await (0, spl_token_1.createApproveCheckedInstruction)(userTokenAccount, inputToken, statePda, signer.publicKey, BigInt(inputAmount.toString()), tokenDecimals, undefined, spl_token_1.TOKEN_PROGRAM_ID);
98
- const depositIx = await program.methods.deposit(signer.publicKey, recipient, inputToken, outputToken, inputAmount, outputAmount, destinationChainId, exclusiveRelayer, quoteTimestamp, fillDeadline, exclusivityDeadline, message)
99
- .accounts({
112
+ const approveIx = await (0, spl_token_1.createApproveCheckedInstruction)(userTokenAccount, inputToken, delegatePda, signer.publicKey, BigInt(inputAmount.toString()), tokenDecimals, undefined, spl_token_1.TOKEN_PROGRAM_ID);
113
+ const depositAccounts = {
100
114
  state: statePda,
115
+ delegate: delegatePda,
101
116
  signer: signer.publicKey,
102
- userTokenAccount,
117
+ depositorTokenAccount: userTokenAccount,
103
118
  vault: vault,
104
- tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
105
119
  mint: inputToken,
106
- })
120
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
121
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
122
+ systemProgram: web3_js_1.SystemProgram.programId,
123
+ program: programId,
124
+ };
125
+ const depositIx = await program.methods
126
+ .deposit(signer.publicKey, recipient, inputToken, outputToken, inputAmount, outputAmount, destinationChainId, exclusiveRelayer, quoteTimestamp, fillDeadline, exclusivityDeadline, message)
127
+ .accounts(depositAccounts)
107
128
  .instruction();
108
129
  // Create a custom instruction with arbitrary data
109
130
  const depositTx = new web3_js_1.Transaction().add(approveIx, depositIx);
@@ -66,7 +66,7 @@ async function fillRelay() {
66
66
  const originChainId = new anchor_1.BN(resolvedArgv.originChainId);
67
67
  const depositId = (0, web3_v1_1.intToU8Array32)(new anchor_1.BN(resolvedArgv.depositId));
68
68
  const fillDeadline = resolvedArgv.fillDeadline || Math.floor(Date.now() / 1000) + 60; // Current time + 1 minute
69
- const exclusivityDeadline = resolvedArgv.exclusivityDeadline || Math.floor(Date.now() / 1000) + 30; // Current time + 30 seconds
69
+ const exclusivityDeadline = resolvedArgv.exclusivityDeadline ?? 0; // default to 0
70
70
  const message = Buffer.from("");
71
71
  const seed = new anchor_1.BN(resolvedArgv.seed);
72
72
  const relayData = {
@@ -123,13 +123,14 @@ async function fillRelay() {
123
123
  { pubkey: recipientTokenAccount, isWritable: true, isSigner: false },
124
124
  ])
125
125
  .instruction();
126
- // Delegate state PDA to pull relayer tokens.
127
- const approveIx = await (0, spl_token_1.createApproveCheckedInstruction)(relayerTokenAccount, outputToken, statePda, signer.publicKey, BigInt(relayData.outputAmount.toString()), tokenDecimals, undefined, spl_token_1.TOKEN_PROGRAM_ID);
126
+ const delegate = (0, web3_v1_1.getFillRelayDelegatePda)(relayHashUint8Array, chainId, signer.publicKey, program.programId).pda;
127
+ // Delegate fill delegate PDA to pull relayer tokens.
128
+ const approveIx = await (0, spl_token_1.createApproveCheckedInstruction)(relayerTokenAccount, outputToken, delegate, signer.publicKey, BigInt(relayData.outputAmount.toString()), tokenDecimals, undefined, spl_token_1.TOKEN_PROGRAM_ID);
128
129
  const fillDataValues = [Array.from(relayHashUint8Array), relayData, chainId, signer.publicKey];
129
130
  const fillAccounts = {
130
131
  state: statePda,
131
132
  signer: signer.publicKey,
132
- delegate: (0, web3_v1_1.getFillRelayDelegatePda)(relayHashUint8Array, chainId, signer.publicKey, program.programId).pda,
133
+ delegate,
133
134
  instructionParams: program.programId,
134
135
  mint: outputToken,
135
136
  relayerTokenAccount: relayerTokenAccount,
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ // This script prepares transaction for finalizing IDL upgrade and prints out Base58 encoded transaction that can be
3
+ // imported in the Squads transaction builder. This requires one first to have written the upgraded IDL to the buffer
4
+ // account (anchor idl write-buffer) and set its authority to the Squads multisig (anchor idl set-authority).
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const web3_js_1 = require("@solana/web3.js");
10
+ const yargs_1 = __importDefault(require("yargs"));
11
+ const helpers_1 = require("yargs/helpers");
12
+ const web3_js_2 = require("@solana/web3.js");
13
+ const sha2_1 = require("@noble/hashes/sha2");
14
+ const bs58_1 = __importDefault(require("bs58"));
15
+ // Parse arguments
16
+ const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
17
+ .option("programId", { type: "string", demandOption: true, describe: "Upgrade IDL for the given program ID" })
18
+ .option("idlBuffer", { type: "string", demandOption: true, describe: "Buffer account where IDL has been written" })
19
+ .option("closeRecipient", { type: "string", demandOption: true, describe: "Account to receive closed buffer SOL" })
20
+ .option("multisig", { type: "string", demandOption: true, describe: "Multisig controlling the upgrade" }).argv;
21
+ async function squadsIdlUpgrade() {
22
+ const resolvedArgv = await argv;
23
+ const programId = new web3_js_1.PublicKey(resolvedArgv.programId);
24
+ const idlBuffer = new web3_js_1.PublicKey(resolvedArgv.idlBuffer);
25
+ const multisig = new web3_js_1.PublicKey(resolvedArgv.multisig);
26
+ const closeRecipient = new web3_js_1.PublicKey(resolvedArgv.closeRecipient);
27
+ // Get the deterministic IDL address for the program:
28
+ const base = web3_js_1.PublicKey.findProgramAddressSync([], programId)[0];
29
+ const idlAddress = await web3_js_1.PublicKey.createWithSeed(base, "anchor:idl", programId);
30
+ console.log("Creating IDL upgrade transaction...");
31
+ console.table([
32
+ { Property: "programId", Value: programId.toString() },
33
+ { Property: "idlBuffer", Value: idlBuffer.toString() },
34
+ { Property: "idlAddress", Value: idlAddress.toString() },
35
+ { Property: "multisig", Value: multisig.toString() },
36
+ { Property: "closeRecipient", Value: closeRecipient.toString() },
37
+ ]);
38
+ const idlSetBufferAccounts = [
39
+ { pubkey: idlBuffer, isSigner: false, isWritable: true },
40
+ { pubkey: idlAddress, isSigner: false, isWritable: true },
41
+ { pubkey: multisig, isSigner: true, isWritable: false },
42
+ ];
43
+ const idlSetBufferInstructionData = Buffer.concat([
44
+ Buffer.from((0, sha2_1.sha256)("anchor:idl")).slice(0, 8).reverse(),
45
+ Buffer.from([3]), // IdlInstruction::SetBuffer
46
+ ]);
47
+ const idlSetBufferInstructionCtorFields = {
48
+ keys: idlSetBufferAccounts,
49
+ programId: programId,
50
+ data: idlSetBufferInstructionData,
51
+ };
52
+ const idlSetBufferInstruction = new web3_js_2.TransactionInstruction(idlSetBufferInstructionCtorFields);
53
+ const idlCloseAccounts = [
54
+ { pubkey: idlBuffer, isSigner: false, isWritable: true },
55
+ { pubkey: multisig, isSigner: true, isWritable: false },
56
+ { pubkey: closeRecipient, isSigner: false, isWritable: true },
57
+ ];
58
+ const idlCloseData = Buffer.concat([
59
+ Buffer.from((0, sha2_1.sha256)("anchor:idl")).slice(0, 8).reverse(),
60
+ Buffer.from([5]), // IdlInstruction::Close
61
+ ]);
62
+ const idlCloseCtorFields = {
63
+ keys: idlCloseAccounts,
64
+ programId: programId,
65
+ data: idlCloseData,
66
+ };
67
+ const idlCloseInstruction = new web3_js_2.TransactionInstruction(idlCloseCtorFields);
68
+ const multisigTransaction = new web3_js_2.Transaction().add(idlSetBufferInstruction).add(idlCloseInstruction);
69
+ multisigTransaction.recentBlockhash = "11111111111111111111111111111111"; // Placeholder blockhash
70
+ multisigTransaction.feePayer = programId; // Placeholder fee payer as we are not signing the transaction
71
+ const serializedMultisigTransaction = multisigTransaction.serializeMessage();
72
+ console.log("IDL upgrade transaction, import it into the multisig:");
73
+ console.log(bs58_1.default.encode(serializedMultisigTransaction));
74
+ }
75
+ // Run the squadsIdlUpgrade function
76
+ squadsIdlUpgrade();
@@ -4505,93 +4505,78 @@
4505
4505
  "errors": [
4506
4506
  {
4507
4507
  "code": 6000,
4508
- "name": "NotOwner",
4509
- "msg": "Only the owner can call this function!"
4508
+ "name": "InvalidQuoteTimestamp",
4509
+ "msg": "Invalid quote timestamp!"
4510
4510
  },
4511
4511
  {
4512
4512
  "code": 6001,
4513
- "name": "InvalidRelayHash",
4514
- "msg": "Invalid relay hash!"
4513
+ "name": "InvalidFillDeadline",
4514
+ "msg": "Invalid fill deadline!"
4515
4515
  },
4516
4516
  {
4517
4517
  "code": 6002,
4518
- "name": "CanOnlyCloseFillStatusPdaIfFillDeadlinePassed",
4519
- "msg": "The fill deadline has not passed!"
4518
+ "name": "NotExclusiveRelayer",
4519
+ "msg": "Caller is not the exclusive relayer and exclusivity deadline has not passed!"
4520
4520
  },
4521
4521
  {
4522
4522
  "code": 6003,
4523
- "name": "NotRelayer",
4524
- "msg": "The caller is not the relayer!"
4523
+ "name": "NoSlowFillsInExclusivityWindow",
4524
+ "msg": "The Deposit is still within the exclusivity window!"
4525
4525
  },
4526
4526
  {
4527
4527
  "code": 6004,
4528
- "name": "CannotSetCurrentTime",
4529
- "msg": "Cannot set time if not in test mode!"
4528
+ "name": "RelayFilled",
4529
+ "msg": "The relay has already been filled!"
4530
4530
  },
4531
4531
  {
4532
4532
  "code": 6005,
4533
- "name": "InvalidRemoteDomain",
4534
- "msg": "Invalid remote domain!"
4533
+ "name": "InvalidSlowFillRequest",
4534
+ "msg": "Slow fill requires status of Unfilled!"
4535
4535
  },
4536
4536
  {
4537
4537
  "code": 6006,
4538
- "name": "InvalidRemoteSender",
4539
- "msg": "Invalid remote sender!"
4538
+ "name": "ExpiredFillDeadline",
4539
+ "msg": "The fill deadline has passed!"
4540
4540
  },
4541
4541
  {
4542
4542
  "code": 6007,
4543
- "name": "InvalidMint",
4544
- "msg": "Invalid mint!"
4543
+ "name": "InvalidMerkleProof",
4544
+ "msg": "Invalid Merkle proof!"
4545
4545
  },
4546
4546
  {
4547
4547
  "code": 6008,
4548
- "name": "ExceededPendingBridgeAmount",
4549
- "msg": "Exceeded pending bridge amount to HubPool!"
4548
+ "name": "InvalidChainId",
4549
+ "msg": "Invalid chain id!"
4550
4550
  },
4551
4551
  {
4552
4552
  "code": 6009,
4553
- "name": "ParamsWriteOverflow",
4554
- "msg": "Overflow writing to parameters account!"
4553
+ "name": "InvalidMerkleLeaf",
4554
+ "msg": "Invalid Merkle leaf!"
4555
4555
  },
4556
4556
  {
4557
4557
  "code": 6010,
4558
- "name": "InvalidRefund",
4559
- "msg": "Invalid refund address!"
4558
+ "name": "ClaimedMerkleLeaf",
4559
+ "msg": "Leaf already claimed!"
4560
4560
  },
4561
4561
  {
4562
4562
  "code": 6011,
4563
- "name": "ZeroRefundClaim",
4564
- "msg": "Zero relayer refund claim!"
4563
+ "name": "DepositsArePaused",
4564
+ "msg": "Deposits are currently paused!"
4565
4565
  },
4566
4566
  {
4567
4567
  "code": 6012,
4568
- "name": "NonZeroRefundClaim",
4569
- "msg": "Cannot close non-zero relayer refund claim!"
4568
+ "name": "FillsArePaused",
4569
+ "msg": "Fills are currently paused!"
4570
4570
  },
4571
4571
  {
4572
4572
  "code": 6013,
4573
- "name": "InvalidClaimInitializer",
4574
- "msg": "Invalid claim initializer!"
4573
+ "name": "InsufficientSpokePoolBalanceToExecuteLeaf",
4574
+ "msg": "Insufficient spoke pool balance to execute leaf"
4575
4575
  },
4576
4576
  {
4577
4577
  "code": 6014,
4578
- "name": "InvalidRefundTokenAccount",
4579
- "msg": "Invalid refund token account!"
4580
- },
4581
- {
4582
- "code": 6015,
4583
- "name": "InvalidProductionSeed",
4584
- "msg": "Seed must be 0 in production!"
4585
- },
4586
- {
4587
- "code": 6016,
4588
- "name": "InvalidATACreationAccounts",
4589
- "msg": "Invalid remaining accounts for ATA creation!"
4590
- },
4591
- {
4592
- "code": 6017,
4593
- "name": "InvalidDelegatePda",
4594
- "msg": "Invalid delegate PDA!"
4578
+ "name": "InvalidExclusiveRelayer",
4579
+ "msg": "Invalid exclusive relayer!"
4595
4580
  }
4596
4581
  ],
4597
4582
  "types": [