@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.
- package/README.md +182 -3
- package/dist/deployments/deployments.json +4 -2
- package/dist/scripts/svm/buildHelpers/generateSvmClients.js +4 -8
- package/dist/scripts/svm/createVault.js +2 -2
- package/dist/scripts/svm/initialize.js +19 -5
- package/dist/scripts/svm/nativeDeposit.js +27 -6
- package/dist/scripts/svm/simpleDeposit.js +27 -6
- package/dist/scripts/svm/simpleFill.js +5 -4
- package/dist/scripts/svm/squadsIdlUpgrade.d.ts +1 -0
- package/dist/scripts/svm/squadsIdlUpgrade.js +76 -0
- package/dist/src/svm/assets/idl/svm_spoke.json +30 -45
- package/dist/src/svm/assets/svm_spoke.d.ts +30 -45
- package/dist/src/svm/clients/MessageTransmitter/accounts/index.d.ts +10 -0
- package/dist/src/svm/clients/MessageTransmitter/accounts/index.js +26 -0
- package/dist/src/svm/clients/MessageTransmitter/accounts/messageSent.d.ts +28 -0
- package/dist/src/svm/clients/MessageTransmitter/accounts/messageSent.js +64 -0
- package/dist/src/svm/clients/MessageTransmitter/accounts/messageTransmitter.d.ts +46 -0
- package/dist/src/svm/clients/MessageTransmitter/accounts/messageTransmitter.js +82 -0
- package/dist/src/svm/clients/MessageTransmitter/accounts/usedNonces.d.ts +31 -0
- package/dist/src/svm/clients/MessageTransmitter/accounts/usedNonces.js +70 -0
- package/dist/src/svm/clients/MessageTransmitter/errors/index.d.ts +8 -0
- package/dist/src/svm/clients/MessageTransmitter/errors/index.js +24 -0
- package/dist/src/svm/clients/MessageTransmitter/errors/messageTransmitter.d.ts +83 -0
- package/dist/src/svm/clients/MessageTransmitter/errors/messageTransmitter.js +124 -0
- package/dist/src/svm/clients/MessageTransmitter/index.d.ts +12 -0
- package/dist/src/svm/clients/MessageTransmitter/index.js +28 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/acceptOwnership.d.ts +45 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/acceptOwnership.js +85 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/disableAttester.d.ts +55 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/disableAttester.js +105 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/enableAttester.d.ts +55 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/enableAttester.js +105 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/getNoncePda.d.ts +43 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/getNoncePda.js +82 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/index.d.ts +25 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/index.js +41 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/initialize.d.ts +70 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/initialize.js +123 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/isNonceUsed.d.ts +42 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/isNonceUsed.js +77 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/pause.d.ts +45 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/pause.js +85 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/receiveMessage.d.ts +67 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/receiveMessage.js +113 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/reclaimEventAccount.d.ts +48 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/reclaimEventAccount.js +94 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/replaceMessage.d.ts +64 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/replaceMessage.js +132 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/sendMessage.d.ts +61 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/sendMessage.js +112 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/sendMessageWithCaller.d.ts +64 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/sendMessageWithCaller.js +117 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/setMaxMessageBodySize.d.ts +49 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/setMaxMessageBodySize.js +94 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/setSignatureThreshold.d.ts +49 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/setSignatureThreshold.js +97 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/transferOwnership.d.ts +49 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/transferOwnership.js +91 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/unpause.d.ts +45 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/unpause.js +85 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/updateAttesterManager.d.ts +49 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/updateAttesterManager.js +94 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/updatePauser.d.ts +49 -0
- package/dist/src/svm/clients/MessageTransmitter/instructions/updatePauser.js +91 -0
- package/dist/src/svm/clients/MessageTransmitter/programs/index.d.ts +8 -0
- package/dist/src/svm/clients/MessageTransmitter/programs/index.js +24 -0
- package/dist/src/svm/clients/MessageTransmitter/programs/messageTransmitter.d.ts +78 -0
- package/dist/src/svm/clients/MessageTransmitter/programs/messageTransmitter.js +112 -0
- package/dist/src/svm/clients/MessageTransmitter/shared/index.d.ts +49 -0
- package/dist/src/svm/clients/MessageTransmitter/shared/index.js +94 -0
- package/dist/src/svm/clients/MessageTransmitter/types/attesterDisabled.d.ts +15 -0
- package/dist/src/svm/clients/MessageTransmitter/types/attesterDisabled.js +22 -0
- package/dist/src/svm/clients/MessageTransmitter/types/attesterEnabled.d.ts +15 -0
- package/dist/src/svm/clients/MessageTransmitter/types/attesterEnabled.js +22 -0
- package/dist/src/svm/clients/MessageTransmitter/types/attesterManagerUpdated.d.ts +16 -0
- package/dist/src/svm/clients/MessageTransmitter/types/attesterManagerUpdated.js +28 -0
- package/dist/src/svm/clients/MessageTransmitter/types/handleReceiveMessageParams.d.ts +18 -0
- package/dist/src/svm/clients/MessageTransmitter/types/handleReceiveMessageParams.js +32 -0
- package/dist/src/svm/clients/MessageTransmitter/types/index.d.ts +20 -0
- package/dist/src/svm/clients/MessageTransmitter/types/index.js +36 -0
- package/dist/src/svm/clients/MessageTransmitter/types/mathError.d.ts +17 -0
- package/dist/src/svm/clients/MessageTransmitter/types/mathError.js +29 -0
- package/dist/src/svm/clients/MessageTransmitter/types/maxMessageBodySizeUpdated.d.ts +17 -0
- package/dist/src/svm/clients/MessageTransmitter/types/maxMessageBodySizeUpdated.js +22 -0
- package/dist/src/svm/clients/MessageTransmitter/types/messageReceived.d.ts +25 -0
- package/dist/src/svm/clients/MessageTransmitter/types/messageReceived.js +34 -0
- package/dist/src/svm/clients/MessageTransmitter/types/ownershipTransferStarted.d.ts +16 -0
- package/dist/src/svm/clients/MessageTransmitter/types/ownershipTransferStarted.js +28 -0
- package/dist/src/svm/clients/MessageTransmitter/types/ownershipTransferred.d.ts +16 -0
- package/dist/src/svm/clients/MessageTransmitter/types/ownershipTransferred.js +28 -0
- package/dist/src/svm/clients/MessageTransmitter/types/pause.d.ts +13 -0
- package/dist/src/svm/clients/MessageTransmitter/types/pause.js +22 -0
- package/dist/src/svm/clients/MessageTransmitter/types/pauserChanged.d.ts +15 -0
- package/dist/src/svm/clients/MessageTransmitter/types/pauserChanged.js +22 -0
- package/dist/src/svm/clients/MessageTransmitter/types/signatureThresholdUpdated.d.ts +16 -0
- package/dist/src/svm/clients/MessageTransmitter/types/signatureThresholdUpdated.js +28 -0
- package/dist/src/svm/clients/MessageTransmitter/types/unpause.d.ts +13 -0
- package/dist/src/svm/clients/MessageTransmitter/types/unpause.js +22 -0
- package/dist/src/svm/clients/SvmSpoke/errors/svmSpoke.d.ts +31 -37
- package/dist/src/svm/clients/SvmSpoke/errors/svmSpoke.js +46 -55
- package/dist/src/svm/clients/SvmSpoke/instructions/bridgeTokensToHubPool.js +1 -1
- package/dist/src/svm/clients/SvmSpoke/instructions/claimRelayerRefund.js +1 -1
- package/dist/src/svm/clients/SvmSpoke/instructions/deposit.js +2 -2
- package/dist/src/svm/clients/SvmSpoke/instructions/depositNow.js +2 -2
- package/dist/src/svm/clients/SvmSpoke/instructions/executeRelayerRefundLeaf.js +1 -1
- package/dist/src/svm/clients/SvmSpoke/instructions/executeRelayerRefundLeafDeferred.js +1 -1
- package/dist/src/svm/clients/SvmSpoke/instructions/executeSlowRelayLeaf.js +2 -2
- package/dist/src/svm/clients/SvmSpoke/instructions/fillRelay.js +1 -1
- package/dist/src/svm/clients/SvmSpoke/instructions/handleReceiveMessage.js +1 -1
- package/dist/src/svm/clients/SvmSpoke/instructions/unsafeDeposit.js +2 -2
- package/dist/src/svm/clients/TokenMessengerMinter/accounts/index.d.ts +12 -0
- package/dist/src/svm/clients/TokenMessengerMinter/accounts/index.js +28 -0
- package/dist/src/svm/clients/TokenMessengerMinter/accounts/localToken.d.ts +43 -0
- package/dist/src/svm/clients/TokenMessengerMinter/accounts/localToken.js +82 -0
- package/dist/src/svm/clients/TokenMessengerMinter/accounts/remoteTokenMessenger.d.ts +29 -0
- package/dist/src/svm/clients/TokenMessengerMinter/accounts/remoteTokenMessenger.js +71 -0
- package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenMessenger.d.ts +35 -0
- package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenMessenger.js +74 -0
- package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenMinter.d.ts +33 -0
- package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenMinter.js +72 -0
- package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenPair.d.ts +33 -0
- package/dist/src/svm/clients/TokenMessengerMinter/accounts/tokenPair.js +72 -0
- package/dist/src/svm/clients/TokenMessengerMinter/errors/index.d.ts +8 -0
- package/dist/src/svm/clients/TokenMessengerMinter/errors/index.js +24 -0
- package/dist/src/svm/clients/TokenMessengerMinter/errors/tokenMessengerMinter.d.ts +45 -0
- package/dist/src/svm/clients/TokenMessengerMinter/errors/tokenMessengerMinter.js +67 -0
- package/dist/src/svm/clients/TokenMessengerMinter/index.d.ts +12 -0
- package/dist/src/svm/clients/TokenMessengerMinter/index.js +28 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/acceptOwnership.d.ts +45 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/acceptOwnership.js +82 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/addLocalToken.d.ts +63 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/addLocalToken.js +115 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/addRemoteTokenMessenger.d.ts +61 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/addRemoteTokenMessenger.js +110 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/burnTokenCustody.d.ts +64 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/burnTokenCustody.js +117 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/depositForBurn.d.ts +94 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/depositForBurn.js +161 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/depositForBurnWithCaller.d.ts +97 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/depositForBurnWithCaller.js +166 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/handleReceiveMessage.d.ts +79 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/handleReceiveMessage.js +132 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/index.d.ts +26 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/index.js +42 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/initialize.d.ts +73 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/initialize.js +124 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/linkTokenPair.d.ts +64 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/linkTokenPair.js +109 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/pause.d.ts +45 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/pause.js +82 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/removeLocalToken.d.ts +57 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/removeLocalToken.js +105 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/removeRemoteTokenMessenger.d.ts +51 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/removeRemoteTokenMessenger.js +94 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/replaceDepositForBurn.d.ts +79 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/replaceDepositForBurn.js +150 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/setMaxBurnAmountPerMessage.d.ts +52 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/setMaxBurnAmountPerMessage.js +97 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/setTokenController.d.ts +52 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/setTokenController.js +91 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/transferOwnership.d.ts +49 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/transferOwnership.js +88 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/unlinkTokenPair.d.ts +51 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/unlinkTokenPair.js +91 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/unpause.d.ts +45 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/unpause.js +82 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/updatePauser.d.ts +52 -0
- package/dist/src/svm/clients/TokenMessengerMinter/instructions/updatePauser.js +91 -0
- package/dist/src/svm/clients/TokenMessengerMinter/programs/index.d.ts +8 -0
- package/dist/src/svm/clients/TokenMessengerMinter/programs/index.js +24 -0
- package/dist/src/svm/clients/TokenMessengerMinter/programs/tokenMessengerMinter.d.ts +83 -0
- package/dist/src/svm/clients/TokenMessengerMinter/programs/tokenMessengerMinter.js +124 -0
- package/dist/src/svm/clients/TokenMessengerMinter/shared/index.d.ts +49 -0
- package/dist/src/svm/clients/TokenMessengerMinter/shared/index.js +94 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/depositForBurn.d.ts +31 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/depositForBurn.js +40 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/index.d.ts +24 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/index.js +40 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/localTokenAdded.d.ts +16 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/localTokenAdded.js +28 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/localTokenRemoved.d.ts +16 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/localTokenRemoved.js +28 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/mintAndWithdraw.d.ts +21 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/mintAndWithdraw.js +30 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/ownershipTransferStarted.d.ts +16 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/ownershipTransferStarted.js +28 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/ownershipTransferred.d.ts +16 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/ownershipTransferred.js +28 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/pause.d.ts +13 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/pause.js +22 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/pauserChanged.d.ts +15 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/pauserChanged.js +22 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/remoteTokenMessengerAdded.d.ts +16 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/remoteTokenMessengerAdded.js +28 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/remoteTokenMessengerRemoved.d.ts +16 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/remoteTokenMessengerRemoved.js +28 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/setBurnLimitPerMessage.d.ts +19 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/setBurnLimitPerMessage.js +28 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/setTokenController.d.ts +15 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/setTokenController.js +22 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/tokenCustodyBurned.d.ts +19 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/tokenCustodyBurned.js +28 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/tokenMinterError.d.ts +23 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/tokenMinterError.js +35 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/tokenPairLinked.d.ts +17 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/tokenPairLinked.js +30 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/tokenPairUnlinked.d.ts +17 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/tokenPairUnlinked.js +30 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/unpause.d.ts +13 -0
- package/dist/src/svm/clients/TokenMessengerMinter/types/unpause.js +22 -0
- package/dist/src/svm/clients/index.d.ts +3 -1
- package/dist/src/svm/clients/index.js +5 -1
- package/dist/target/types/svm_spoke.d.ts +30 -45
- package/dist/tasks/enableL1TokenAcrossEcosystem.js +4 -4
- 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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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:
|
|
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:
|
|
44
|
-
.option("initNumbDeposits", { type: "string", demandOption:
|
|
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 *
|
|
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,
|
|
114
|
-
const
|
|
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,
|
|
98
|
-
const
|
|
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
|
|
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
|
-
|
|
127
|
-
|
|
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
|
|
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": "
|
|
4509
|
-
"msg": "
|
|
4508
|
+
"name": "InvalidQuoteTimestamp",
|
|
4509
|
+
"msg": "Invalid quote timestamp!"
|
|
4510
4510
|
},
|
|
4511
4511
|
{
|
|
4512
4512
|
"code": 6001,
|
|
4513
|
-
"name": "
|
|
4514
|
-
"msg": "Invalid
|
|
4513
|
+
"name": "InvalidFillDeadline",
|
|
4514
|
+
"msg": "Invalid fill deadline!"
|
|
4515
4515
|
},
|
|
4516
4516
|
{
|
|
4517
4517
|
"code": 6002,
|
|
4518
|
-
"name": "
|
|
4519
|
-
"msg": "
|
|
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": "
|
|
4524
|
-
"msg": "The
|
|
4523
|
+
"name": "NoSlowFillsInExclusivityWindow",
|
|
4524
|
+
"msg": "The Deposit is still within the exclusivity window!"
|
|
4525
4525
|
},
|
|
4526
4526
|
{
|
|
4527
4527
|
"code": 6004,
|
|
4528
|
-
"name": "
|
|
4529
|
-
"msg": "
|
|
4528
|
+
"name": "RelayFilled",
|
|
4529
|
+
"msg": "The relay has already been filled!"
|
|
4530
4530
|
},
|
|
4531
4531
|
{
|
|
4532
4532
|
"code": 6005,
|
|
4533
|
-
"name": "
|
|
4534
|
-
"msg": "
|
|
4533
|
+
"name": "InvalidSlowFillRequest",
|
|
4534
|
+
"msg": "Slow fill requires status of Unfilled!"
|
|
4535
4535
|
},
|
|
4536
4536
|
{
|
|
4537
4537
|
"code": 6006,
|
|
4538
|
-
"name": "
|
|
4539
|
-
"msg": "
|
|
4538
|
+
"name": "ExpiredFillDeadline",
|
|
4539
|
+
"msg": "The fill deadline has passed!"
|
|
4540
4540
|
},
|
|
4541
4541
|
{
|
|
4542
4542
|
"code": 6007,
|
|
4543
|
-
"name": "
|
|
4544
|
-
"msg": "Invalid
|
|
4543
|
+
"name": "InvalidMerkleProof",
|
|
4544
|
+
"msg": "Invalid Merkle proof!"
|
|
4545
4545
|
},
|
|
4546
4546
|
{
|
|
4547
4547
|
"code": 6008,
|
|
4548
|
-
"name": "
|
|
4549
|
-
"msg": "
|
|
4548
|
+
"name": "InvalidChainId",
|
|
4549
|
+
"msg": "Invalid chain id!"
|
|
4550
4550
|
},
|
|
4551
4551
|
{
|
|
4552
4552
|
"code": 6009,
|
|
4553
|
-
"name": "
|
|
4554
|
-
"msg": "
|
|
4553
|
+
"name": "InvalidMerkleLeaf",
|
|
4554
|
+
"msg": "Invalid Merkle leaf!"
|
|
4555
4555
|
},
|
|
4556
4556
|
{
|
|
4557
4557
|
"code": 6010,
|
|
4558
|
-
"name": "
|
|
4559
|
-
"msg": "
|
|
4558
|
+
"name": "ClaimedMerkleLeaf",
|
|
4559
|
+
"msg": "Leaf already claimed!"
|
|
4560
4560
|
},
|
|
4561
4561
|
{
|
|
4562
4562
|
"code": 6011,
|
|
4563
|
-
"name": "
|
|
4564
|
-
"msg": "
|
|
4563
|
+
"name": "DepositsArePaused",
|
|
4564
|
+
"msg": "Deposits are currently paused!"
|
|
4565
4565
|
},
|
|
4566
4566
|
{
|
|
4567
4567
|
"code": 6012,
|
|
4568
|
-
"name": "
|
|
4569
|
-
"msg": "
|
|
4568
|
+
"name": "FillsArePaused",
|
|
4569
|
+
"msg": "Fills are currently paused!"
|
|
4570
4570
|
},
|
|
4571
4571
|
{
|
|
4572
4572
|
"code": 6013,
|
|
4573
|
-
"name": "
|
|
4574
|
-
"msg": "
|
|
4573
|
+
"name": "InsufficientSpokePoolBalanceToExecuteLeaf",
|
|
4574
|
+
"msg": "Insufficient spoke pool balance to execute leaf"
|
|
4575
4575
|
},
|
|
4576
4576
|
{
|
|
4577
4577
|
"code": 6014,
|
|
4578
|
-
"name": "
|
|
4579
|
-
"msg": "Invalid
|
|
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": [
|