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