@hyperlane-xyz/sealevel-sdk 27.0.0
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/LICENSE.md +193 -0
- package/dist/accounts/mint.d.ts +43 -0
- package/dist/accounts/mint.d.ts.map +1 -0
- package/dist/accounts/mint.js +159 -0
- package/dist/accounts/mint.js.map +1 -0
- package/dist/accounts/multisig-ism-message-id.d.ts +14 -0
- package/dist/accounts/multisig-ism-message-id.d.ts.map +1 -0
- package/dist/accounts/multisig-ism-message-id.js +32 -0
- package/dist/accounts/multisig-ism-message-id.js.map +1 -0
- package/dist/accounts/test-ism.d.ts +5 -0
- package/dist/accounts/test-ism.d.ts.map +1 -0
- package/dist/accounts/test-ism.js +8 -0
- package/dist/accounts/test-ism.js.map +1 -0
- package/dist/accounts/token.d.ts +60 -0
- package/dist/accounts/token.d.ts.map +1 -0
- package/dist/accounts/token.js +127 -0
- package/dist/accounts/token.js.map +1 -0
- package/dist/clients/protocol.d.ts +21 -0
- package/dist/clients/protocol.d.ts.map +1 -0
- package/dist/clients/protocol.js +51 -0
- package/dist/clients/protocol.js.map +1 -0
- package/dist/clients/provider.d.ts +66 -0
- package/dist/clients/provider.d.ts.map +1 -0
- package/dist/clients/provider.js +237 -0
- package/dist/clients/provider.js.map +1 -0
- package/dist/clients/signer.d.ts +61 -0
- package/dist/clients/signer.d.ts.map +1 -0
- package/dist/clients/signer.js +314 -0
- package/dist/clients/signer.js.map +1 -0
- package/dist/codecs/account-data.d.ts +8 -0
- package/dist/codecs/account-data.d.ts.map +1 -0
- package/dist/codecs/account-data.js +20 -0
- package/dist/codecs/account-data.js.map +1 -0
- package/dist/codecs/binary.d.ts +34 -0
- package/dist/codecs/binary.d.ts.map +1 -0
- package/dist/codecs/binary.js +165 -0
- package/dist/codecs/binary.js.map +1 -0
- package/dist/codecs/shared.d.ts +81 -0
- package/dist/codecs/shared.d.ts.map +1 -0
- package/dist/codecs/shared.js +241 -0
- package/dist/codecs/shared.js.map +1 -0
- package/dist/constants.d.ts +13 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +21 -0
- package/dist/constants.js.map +1 -0
- package/dist/deploy/program-deployer.d.ts +51 -0
- package/dist/deploy/program-deployer.d.ts.map +1 -0
- package/dist/deploy/program-deployer.js +176 -0
- package/dist/deploy/program-deployer.js.map +1 -0
- package/dist/deploy/resolve-program.d.ts +9 -0
- package/dist/deploy/resolve-program.d.ts.map +1 -0
- package/dist/deploy/resolve-program.js +24 -0
- package/dist/deploy/resolve-program.js.map +1 -0
- package/dist/generated/core-addresses.d.ts +14 -0
- package/dist/generated/core-addresses.d.ts.map +1 -0
- package/dist/generated/core-addresses.js +55 -0
- package/dist/generated/core-addresses.js.map +1 -0
- package/dist/hook/hook-artifact-manager.d.ts +17 -0
- package/dist/hook/hook-artifact-manager.d.ts.map +1 -0
- package/dist/hook/hook-artifact-manager.js +58 -0
- package/dist/hook/hook-artifact-manager.js.map +1 -0
- package/dist/hook/hook-query.d.ts +25 -0
- package/dist/hook/hook-query.d.ts.map +1 -0
- package/dist/hook/hook-query.js +46 -0
- package/dist/hook/hook-query.js.map +1 -0
- package/dist/hook/igp-hook.d.ts +28 -0
- package/dist/hook/igp-hook.d.ts.map +1 -0
- package/dist/hook/igp-hook.js +242 -0
- package/dist/hook/igp-hook.js.map +1 -0
- package/dist/hook/merkle-tree-hook.d.ts +23 -0
- package/dist/hook/merkle-tree-hook.d.ts.map +1 -0
- package/dist/hook/merkle-tree-hook.js +46 -0
- package/dist/hook/merkle-tree-hook.js.map +1 -0
- package/dist/hyperlane/program-bytes.d.ts +20 -0
- package/dist/hyperlane/program-bytes.d.ts.map +1 -0
- package/dist/hyperlane/program-bytes.js +80534 -0
- package/dist/hyperlane/program-bytes.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/instructions/igp.d.ts +66 -0
- package/dist/instructions/igp.d.ts.map +1 -0
- package/dist/instructions/igp.js +168 -0
- package/dist/instructions/igp.js.map +1 -0
- package/dist/instructions/interfaces.d.ts +52 -0
- package/dist/instructions/interfaces.d.ts.map +1 -0
- package/dist/instructions/interfaces.js +126 -0
- package/dist/instructions/interfaces.js.map +1 -0
- package/dist/instructions/loader.d.ts +11 -0
- package/dist/instructions/loader.d.ts.map +1 -0
- package/dist/instructions/loader.js +24 -0
- package/dist/instructions/loader.js.map +1 -0
- package/dist/instructions/multisig-ism-message-id.d.ts +32 -0
- package/dist/instructions/multisig-ism-message-id.d.ts.map +1 -0
- package/dist/instructions/multisig-ism-message-id.js +105 -0
- package/dist/instructions/multisig-ism-message-id.js.map +1 -0
- package/dist/instructions/test-ism.d.ts +16 -0
- package/dist/instructions/test-ism.d.ts.map +1 -0
- package/dist/instructions/test-ism.js +47 -0
- package/dist/instructions/test-ism.js.map +1 -0
- package/dist/instructions/token.d.ts +62 -0
- package/dist/instructions/token.d.ts.map +1 -0
- package/dist/instructions/token.js +257 -0
- package/dist/instructions/token.js.map +1 -0
- package/dist/instructions/utils.d.ts +19 -0
- package/dist/instructions/utils.d.ts.map +1 -0
- package/dist/instructions/utils.js +36 -0
- package/dist/instructions/utils.js.map +1 -0
- package/dist/ism/ism-artifact-manager.d.ts +14 -0
- package/dist/ism/ism-artifact-manager.d.ts.map +1 -0
- package/dist/ism/ism-artifact-manager.js +49 -0
- package/dist/ism/ism-artifact-manager.js.map +1 -0
- package/dist/ism/ism-query.d.ts +22 -0
- package/dist/ism/ism-query.d.ts.map +1 -0
- package/dist/ism/ism-query.js +53 -0
- package/dist/ism/ism-query.js.map +1 -0
- package/dist/ism/multisig-ism.d.ts +33 -0
- package/dist/ism/multisig-ism.d.ts.map +1 -0
- package/dist/ism/multisig-ism.js +113 -0
- package/dist/ism/multisig-ism.js.map +1 -0
- package/dist/ism/test-ism.d.ts +20 -0
- package/dist/ism/test-ism.d.ts.map +1 -0
- package/dist/ism/test-ism.js +57 -0
- package/dist/ism/test-ism.js.map +1 -0
- package/dist/pda.d.ts +17 -0
- package/dist/pda.d.ts.map +1 -0
- package/dist/pda.js +118 -0
- package/dist/pda.js.map +1 -0
- package/dist/rpc.d.ts +9 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +21 -0
- package/dist/rpc.js.map +1 -0
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +3 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/setup.d.ts +33 -0
- package/dist/testing/setup.d.ts.map +1 -0
- package/dist/testing/setup.js +120 -0
- package/dist/testing/setup.js.map +1 -0
- package/dist/testing/solana-container.d.ts +32 -0
- package/dist/testing/solana-container.d.ts.map +1 -0
- package/dist/testing/solana-container.js +289 -0
- package/dist/testing/solana-container.js.map +1 -0
- package/dist/tests/collateral-token.e2e-test.d.ts +2 -0
- package/dist/tests/collateral-token.e2e-test.d.ts.map +1 -0
- package/dist/tests/collateral-token.e2e-test.js +112 -0
- package/dist/tests/collateral-token.e2e-test.js.map +1 -0
- package/dist/tests/deploy.e2e-test.d.ts +2 -0
- package/dist/tests/deploy.e2e-test.d.ts.map +1 -0
- package/dist/tests/deploy.e2e-test.js +76 -0
- package/dist/tests/deploy.e2e-test.js.map +1 -0
- package/dist/tests/hook.e2e-test.d.ts +2 -0
- package/dist/tests/hook.e2e-test.d.ts.map +1 -0
- package/dist/tests/hook.e2e-test.js +176 -0
- package/dist/tests/hook.e2e-test.js.map +1 -0
- package/dist/tests/ism.e2e-test.d.ts +2 -0
- package/dist/tests/ism.e2e-test.d.ts.map +1 -0
- package/dist/tests/ism.e2e-test.js +167 -0
- package/dist/tests/ism.e2e-test.js.map +1 -0
- package/dist/tests/native-token.e2e-test.d.ts +2 -0
- package/dist/tests/native-token.e2e-test.d.ts.map +1 -0
- package/dist/tests/native-token.e2e-test.js +93 -0
- package/dist/tests/native-token.e2e-test.js.map +1 -0
- package/dist/tests/provider.e2e-test.d.ts +2 -0
- package/dist/tests/provider.e2e-test.d.ts.map +1 -0
- package/dist/tests/provider.e2e-test.js +87 -0
- package/dist/tests/provider.e2e-test.js.map +1 -0
- package/dist/tests/read-token.e2e-test.d.ts +2 -0
- package/dist/tests/read-token.e2e-test.d.ts.map +1 -0
- package/dist/tests/read-token.e2e-test.js +79 -0
- package/dist/tests/read-token.e2e-test.js.map +1 -0
- package/dist/tests/scale.unit-test.d.ts +2 -0
- package/dist/tests/scale.unit-test.d.ts.map +1 -0
- package/dist/tests/scale.unit-test.js +65 -0
- package/dist/tests/scale.unit-test.js.map +1 -0
- package/dist/tests/synthetic-token.e2e-test.d.ts +2 -0
- package/dist/tests/synthetic-token.e2e-test.d.ts.map +1 -0
- package/dist/tests/synthetic-token.e2e-test.js +115 -0
- package/dist/tests/synthetic-token.e2e-test.js.map +1 -0
- package/dist/tests/warp-token-suite.d.ts +26 -0
- package/dist/tests/warp-token-suite.d.ts.map +1 -0
- package/dist/tests/warp-token-suite.js +208 -0
- package/dist/tests/warp-token-suite.js.map +1 -0
- package/dist/tx.d.ts +23 -0
- package/dist/tx.d.ts.map +1 -0
- package/dist/tx.js +43 -0
- package/dist/tx.js.map +1 -0
- package/dist/types.d.ts +50 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/warp/collateral-token.d.ts +21 -0
- package/dist/warp/collateral-token.d.ts.map +1 -0
- package/dist/warp/collateral-token.js +129 -0
- package/dist/warp/collateral-token.js.map +1 -0
- package/dist/warp/native-token.d.ts +21 -0
- package/dist/warp/native-token.d.ts.map +1 -0
- package/dist/warp/native-token.js +99 -0
- package/dist/warp/native-token.js.map +1 -0
- package/dist/warp/synthetic-token.d.ts +21 -0
- package/dist/warp/synthetic-token.d.ts.map +1 -0
- package/dist/warp/synthetic-token.js +180 -0
- package/dist/warp/synthetic-token.js.map +1 -0
- package/dist/warp/types.d.ts +16 -0
- package/dist/warp/types.d.ts.map +1 -0
- package/dist/warp/types.js +2 -0
- package/dist/warp/types.js.map +1 -0
- package/dist/warp/warp-artifact-manager.d.ts +14 -0
- package/dist/warp/warp-artifact-manager.d.ts.map +1 -0
- package/dist/warp/warp-artifact-manager.js +52 -0
- package/dist/warp/warp-artifact-manager.js.map +1 -0
- package/dist/warp/warp-query.d.ts +30 -0
- package/dist/warp/warp-query.d.ts.map +1 -0
- package/dist/warp/warp-query.js +66 -0
- package/dist/warp/warp-query.js.map +1 -0
- package/dist/warp/warp-tx.d.ts +64 -0
- package/dist/warp/warp-tx.d.ts.map +1 -0
- package/dist/warp/warp-tx.js +291 -0
- package/dist/warp/warp-tx.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { address as parseAddress } from '@solana/kit';
|
|
2
|
+
import { computeRemoteRoutersUpdates, } from '@hyperlane-xyz/provider-sdk/warp';
|
|
3
|
+
import { assert, eqAddressSol, eqOptionalAddress, isZeroishAddress, } from '@hyperlane-xyz/utils';
|
|
4
|
+
import { u32le } from '../codecs/binary.js';
|
|
5
|
+
import { InterchainGasPaymasterTypeKind } from '../codecs/shared.js';
|
|
6
|
+
import { SYSTEM_PROGRAM_ADDRESS } from '../constants.js';
|
|
7
|
+
import { getProgramUpgradeAuthority } from '../deploy/program-deployer.js';
|
|
8
|
+
import { getSetUpgradeAuthorityInstruction } from '../instructions/loader.js';
|
|
9
|
+
import { getTokenEnrollRemoteRoutersInstruction, getTokenSetDestinationGasConfigsInstruction, getTokenSetInterchainGasPaymasterInstruction, getTokenSetInterchainSecurityModuleInstruction, getTokenTransferOwnershipInstruction, } from '../instructions/token.js';
|
|
10
|
+
import { DEFAULT_IGP_SALT } from '../hook/igp-hook.js';
|
|
11
|
+
import { deriveAtaPayerPda, deriveOverheadIgpAccountPda } from '../pda.js';
|
|
12
|
+
import { buildInstruction, writableAccount, writableSignerAddress, } from '../instructions/utils.js';
|
|
13
|
+
import { routerHexToBytes } from './warp-query.js';
|
|
14
|
+
/** Maximum local decimals allowed by the on-chain SVM token programs. */
|
|
15
|
+
const MAX_LOCAL_DECIMALS = 9;
|
|
16
|
+
/**
|
|
17
|
+
* Asserts that `localDecimals` does not exceed the SVM maximum of 9.
|
|
18
|
+
* The on-chain program stores decimals as u8 and the decimal-conversion math
|
|
19
|
+
* overflows for values > 9. Mirrors the Rust client's `assert_decimals_max`.
|
|
20
|
+
*/
|
|
21
|
+
export function assertLocalDecimals(localDecimals) {
|
|
22
|
+
assert(Number.isInteger(localDecimals) &&
|
|
23
|
+
localDecimals >= 0 &&
|
|
24
|
+
localDecimals <= MAX_LOCAL_DECIMALS, `Invalid decimals: ${localDecimals}. Must be an integer in [0, ${MAX_LOCAL_DECIMALS}]. Use scale/remoteDecimals for higher-precision remote chains.`);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Derives `remoteDecimals` from `localDecimals` and the optional `scale` factor.
|
|
28
|
+
* scale = 10^(remoteDecimals - localDecimals), so
|
|
29
|
+
* remoteDecimals = localDecimals + log10(scale).
|
|
30
|
+
* Falls back to localDecimals when scale is absent or 1.
|
|
31
|
+
* Supports both upscaling (scale >= 1, e.g. 1e9) and downscaling
|
|
32
|
+
* (scale < 1, e.g. 1e-4) to match the on-chain program which stores
|
|
33
|
+
* decimals and remote_decimals as independent u8 values.
|
|
34
|
+
* Asserts that scale is an exact power of 10.
|
|
35
|
+
*/
|
|
36
|
+
export function scaleToRemoteDecimals(localDecimals, scale) {
|
|
37
|
+
if (scale == null || scale === 1)
|
|
38
|
+
return localDecimals;
|
|
39
|
+
assert(scale > 0, `scale must be positive, got ${scale}`);
|
|
40
|
+
if (scale >= 1) {
|
|
41
|
+
let exp = 0;
|
|
42
|
+
let remaining = scale;
|
|
43
|
+
while (remaining > 1 && remaining % 10 === 0) {
|
|
44
|
+
remaining /= 10;
|
|
45
|
+
exp++;
|
|
46
|
+
}
|
|
47
|
+
assert(remaining === 1, `scale must be an exact power of 10 (e.g. 1e9), got ${scale}`);
|
|
48
|
+
return localDecimals + exp;
|
|
49
|
+
}
|
|
50
|
+
// Downscale: scale < 1 (e.g. 0.0001 = 1e-4).
|
|
51
|
+
// Invert to integer and reuse the integer-only loop to avoid FP accumulation.
|
|
52
|
+
const inverse = Math.round(1 / scale);
|
|
53
|
+
let exp = 0;
|
|
54
|
+
let remaining = inverse;
|
|
55
|
+
while (remaining > 1 && remaining % 10 === 0) {
|
|
56
|
+
remaining /= 10;
|
|
57
|
+
exp++;
|
|
58
|
+
}
|
|
59
|
+
assert(remaining === 1, `scale must be an exact power of 10 (e.g. 1e-4), got ${scale}`);
|
|
60
|
+
assert(localDecimals >= exp, `scale 1e-${exp} would produce negative remoteDecimals for localDecimals=${localDecimals}`);
|
|
61
|
+
return localDecimals - exp;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Derives the `scale` factor from on-chain `localDecimals` and `remoteDecimals`.
|
|
65
|
+
* Returns undefined when there is no scaling (remoteDecimals === localDecimals).
|
|
66
|
+
*/
|
|
67
|
+
export function remoteDecimalsToScale(localDecimals, remoteDecimals) {
|
|
68
|
+
const diff = remoteDecimals - localDecimals;
|
|
69
|
+
return diff === 0 ? undefined : Math.pow(10, diff);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Builds the TokenInitInstructionData shared by all warp token types.
|
|
73
|
+
* The caller is responsible for passing the token-type-specific decimals.
|
|
74
|
+
*/
|
|
75
|
+
export async function buildBaseInitData(config, decimals, remoteDecimals) {
|
|
76
|
+
const igpProgramId = config.hook?.deployed?.address;
|
|
77
|
+
let interchainGasPaymaster = null;
|
|
78
|
+
if (igpProgramId) {
|
|
79
|
+
const programId = parseAddress(igpProgramId);
|
|
80
|
+
const { address: overheadIgpPda } = await deriveOverheadIgpAccountPda(programId, DEFAULT_IGP_SALT);
|
|
81
|
+
interchainGasPaymaster = {
|
|
82
|
+
programId,
|
|
83
|
+
igp: {
|
|
84
|
+
kind: InterchainGasPaymasterTypeKind.OverheadIgp,
|
|
85
|
+
account: overheadIgpPda,
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
mailbox: parseAddress(config.mailbox),
|
|
91
|
+
interchainSecurityModule: config.interchainSecurityModule?.deployed?.address
|
|
92
|
+
? parseAddress(config.interchainSecurityModule.deployed.address)
|
|
93
|
+
: null,
|
|
94
|
+
interchainGasPaymaster,
|
|
95
|
+
decimals,
|
|
96
|
+
remoteDecimals,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// Solana txs are capped at 1232 bytes (https://solana.com/docs/core/transactions#transaction-size).
|
|
100
|
+
// Each router entry is 37 bytes in the EnrollRemoteRouters instruction data.
|
|
101
|
+
// With ~322 bytes of fixed tx overhead the 1232-byte limit allows at most 24
|
|
102
|
+
// routers per tx. Use 20 to stay comfortably within that bound.
|
|
103
|
+
const MAX_ROUTERS_PER_TX = 20;
|
|
104
|
+
// Each gas config entry is 13 bytes in SetDestinationGasConfigs instruction
|
|
105
|
+
// data. The same fixed overhead allows at most 70 configs per tx. Use 60.
|
|
106
|
+
const MAX_GAS_CONFIGS_PER_TX = 60;
|
|
107
|
+
/**
|
|
108
|
+
* Sends post-init configuration (remote routers + destination gas) in
|
|
109
|
+
* separate, batched transactions — matching the Rust CLI behaviour — to
|
|
110
|
+
* stay within Solana's 1232-byte transaction size limit.
|
|
111
|
+
*
|
|
112
|
+
* Router enrollments and gas configs are issued as independent instruction
|
|
113
|
+
* streams so each can use its full per-tx budget.
|
|
114
|
+
*/
|
|
115
|
+
export async function applyPostInitConfig(signer, programId, config) {
|
|
116
|
+
const receipts = [];
|
|
117
|
+
const routerEntries = Object.entries(config.remoteRouters);
|
|
118
|
+
for (let i = 0; i < routerEntries.length; i += MAX_ROUTERS_PER_TX) {
|
|
119
|
+
const batch = routerEntries.slice(i, i + MAX_ROUTERS_PER_TX);
|
|
120
|
+
receipts.push(await signer.send({
|
|
121
|
+
instructions: [
|
|
122
|
+
await getTokenEnrollRemoteRoutersInstruction(programId, signer.signer.address, batch.map(([domain, router]) => ({
|
|
123
|
+
domain: parseInt(domain),
|
|
124
|
+
router: routerHexToBytes(router.address),
|
|
125
|
+
}))),
|
|
126
|
+
],
|
|
127
|
+
}));
|
|
128
|
+
}
|
|
129
|
+
const gasEntries = Object.entries(config.destinationGas);
|
|
130
|
+
for (let i = 0; i < gasEntries.length; i += MAX_GAS_CONFIGS_PER_TX) {
|
|
131
|
+
const batch = gasEntries.slice(i, i + MAX_GAS_CONFIGS_PER_TX);
|
|
132
|
+
receipts.push(await signer.send({
|
|
133
|
+
instructions: [
|
|
134
|
+
await getTokenSetDestinationGasConfigsInstruction(programId, signer.signer.address, batch.map(([domain, gas]) => ({
|
|
135
|
+
domain: parseInt(domain),
|
|
136
|
+
gas: BigInt(gas),
|
|
137
|
+
}))),
|
|
138
|
+
],
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
return receipts;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Returns a System Program transfer instruction to top up the ATA payer PDA
|
|
145
|
+
* to at least `targetLamports`, or undefined if already sufficiently funded.
|
|
146
|
+
* For synthetic and collateral tokens the ATA payer funds recipient ATA
|
|
147
|
+
* creation on transfer_out.
|
|
148
|
+
*/
|
|
149
|
+
export async function buildFundAtaPayerInstruction(rpc, payer, programId, targetLamports) {
|
|
150
|
+
const { address: ataPayerPda } = await deriveAtaPayerPda(programId);
|
|
151
|
+
const balance = await rpc.getBalance(ataPayerPda).send();
|
|
152
|
+
const current = BigInt(balance.value);
|
|
153
|
+
if (current >= targetLamports)
|
|
154
|
+
return undefined;
|
|
155
|
+
const topUp = targetLamports - current;
|
|
156
|
+
const data = new Uint8Array(12);
|
|
157
|
+
data.set(u32le(2), 0); // SystemProgram::Transfer discriminator (u32 LE)
|
|
158
|
+
new DataView(data.buffer).setBigUint64(4, topUp, true); // lamports, LE
|
|
159
|
+
return buildInstruction(SYSTEM_PROGRAM_ADDRESS, [writableSignerAddress(payer), writableAccount(ataPayerPda)], data);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Diffs current vs expected config and returns the minimal set of annotated
|
|
163
|
+
* update transactions needed to reconcile them, batched to stay within
|
|
164
|
+
* Solana's 1232-byte transaction size limit.
|
|
165
|
+
*
|
|
166
|
+
* Transaction grouping:
|
|
167
|
+
* 1. ISM + IGP hook changes (combined, both are small)
|
|
168
|
+
* 2. Router unenroll/enroll batches (MAX_ROUTERS_PER_TX each)
|
|
169
|
+
* 3. Gas config unenroll/enroll batches (MAX_GAS_CONFIGS_PER_TX each)
|
|
170
|
+
* 4. Ownership transfer (always last, own tx)
|
|
171
|
+
*
|
|
172
|
+
* @param label - Prefix used for transaction annotations,
|
|
173
|
+
* e.g. "native token <programId>"
|
|
174
|
+
*/
|
|
175
|
+
export async function computeWarpTokenUpdateInstructions(current, expected, programId, ownerAddress, rpc, label) {
|
|
176
|
+
const txs = [];
|
|
177
|
+
// 1. ISM + IGP hook — combined into a single tx (both are small instructions)
|
|
178
|
+
const configInstructions = [];
|
|
179
|
+
const currentIsm = current.interchainSecurityModule?.deployed?.address;
|
|
180
|
+
const expectedIsm = expected.interchainSecurityModule?.deployed?.address;
|
|
181
|
+
if (!eqOptionalAddress(currentIsm, expectedIsm, eqAddressSol)) {
|
|
182
|
+
configInstructions.push(await getTokenSetInterchainSecurityModuleInstruction(programId, ownerAddress, expectedIsm ? parseAddress(expectedIsm) : null));
|
|
183
|
+
}
|
|
184
|
+
const currentHook = current.hook?.deployed?.address;
|
|
185
|
+
const expectedHook = expected.hook?.deployed?.address;
|
|
186
|
+
if (!eqOptionalAddress(currentHook, expectedHook, eqAddressSol)) {
|
|
187
|
+
let igpValue = null;
|
|
188
|
+
if (expectedHook) {
|
|
189
|
+
const expectedHookAddress = parseAddress(expectedHook);
|
|
190
|
+
const { address: overheadIgpPda } = await deriveOverheadIgpAccountPda(expectedHookAddress, DEFAULT_IGP_SALT);
|
|
191
|
+
igpValue = [
|
|
192
|
+
expectedHookAddress,
|
|
193
|
+
{
|
|
194
|
+
kind: InterchainGasPaymasterTypeKind.OverheadIgp,
|
|
195
|
+
account: overheadIgpPda,
|
|
196
|
+
},
|
|
197
|
+
];
|
|
198
|
+
}
|
|
199
|
+
configInstructions.push(await getTokenSetInterchainGasPaymasterInstruction(programId, ownerAddress, igpValue));
|
|
200
|
+
}
|
|
201
|
+
if (configInstructions.length > 0) {
|
|
202
|
+
txs.push({
|
|
203
|
+
instructions: configInstructions,
|
|
204
|
+
annotation: `Update ${label}: ISM/hook config`,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
// 2. Router diff — the same domain set (toUnenroll/toEnroll) drives both
|
|
208
|
+
// router and gas config changes, batched independently because gas config
|
|
209
|
+
// instructions are smaller and allow more entries per tx.
|
|
210
|
+
const diff = computeRemoteRoutersUpdates({
|
|
211
|
+
remoteRouters: current.remoteRouters,
|
|
212
|
+
destinationGas: current.destinationGas,
|
|
213
|
+
}, {
|
|
214
|
+
remoteRouters: expected.remoteRouters,
|
|
215
|
+
destinationGas: expected.destinationGas,
|
|
216
|
+
}, eqAddressSol);
|
|
217
|
+
const unenrollRouterBatches = Math.ceil(diff.toUnenroll.length / MAX_ROUTERS_PER_TX);
|
|
218
|
+
for (let i = 0; i < diff.toUnenroll.length; i += MAX_ROUTERS_PER_TX) {
|
|
219
|
+
const batch = diff.toUnenroll.slice(i, i + MAX_ROUTERS_PER_TX);
|
|
220
|
+
const batchNum = i / MAX_ROUTERS_PER_TX + 1;
|
|
221
|
+
txs.push({
|
|
222
|
+
instructions: [
|
|
223
|
+
await getTokenEnrollRemoteRoutersInstruction(programId, ownerAddress, batch.map((domain) => ({ domain, router: null }))),
|
|
224
|
+
],
|
|
225
|
+
annotation: `Update ${label}: unenroll routers${unenrollRouterBatches > 1 ? ` (${batchNum}/${unenrollRouterBatches})` : ''}`,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
const unenrollGasBatches = Math.ceil(diff.toUnenroll.length / MAX_GAS_CONFIGS_PER_TX);
|
|
229
|
+
for (let i = 0; i < diff.toUnenroll.length; i += MAX_GAS_CONFIGS_PER_TX) {
|
|
230
|
+
const batch = diff.toUnenroll.slice(i, i + MAX_GAS_CONFIGS_PER_TX);
|
|
231
|
+
const batchNum = i / MAX_GAS_CONFIGS_PER_TX + 1;
|
|
232
|
+
txs.push({
|
|
233
|
+
instructions: [
|
|
234
|
+
await getTokenSetDestinationGasConfigsInstruction(programId, ownerAddress, batch.map((domain) => ({ domain, gas: null }))),
|
|
235
|
+
],
|
|
236
|
+
annotation: `Update ${label}: unenroll gas configs${unenrollGasBatches > 1 ? ` (${batchNum}/${unenrollGasBatches})` : ''}`,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
const enrollRouterBatches = Math.ceil(diff.toEnroll.length / MAX_ROUTERS_PER_TX);
|
|
240
|
+
for (let i = 0; i < diff.toEnroll.length; i += MAX_ROUTERS_PER_TX) {
|
|
241
|
+
const batch = diff.toEnroll.slice(i, i + MAX_ROUTERS_PER_TX);
|
|
242
|
+
const batchNum = i / MAX_ROUTERS_PER_TX + 1;
|
|
243
|
+
txs.push({
|
|
244
|
+
instructions: [
|
|
245
|
+
await getTokenEnrollRemoteRoutersInstruction(programId, ownerAddress, batch.map((e) => ({
|
|
246
|
+
domain: e.domainId,
|
|
247
|
+
router: routerHexToBytes(e.routerAddress),
|
|
248
|
+
}))),
|
|
249
|
+
],
|
|
250
|
+
annotation: `Update ${label}: enroll routers${enrollRouterBatches > 1 ? ` (${batchNum}/${enrollRouterBatches})` : ''}`,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
const enrollGasBatches = Math.ceil(diff.toEnroll.length / MAX_GAS_CONFIGS_PER_TX);
|
|
254
|
+
for (let i = 0; i < diff.toEnroll.length; i += MAX_GAS_CONFIGS_PER_TX) {
|
|
255
|
+
const batch = diff.toEnroll.slice(i, i + MAX_GAS_CONFIGS_PER_TX);
|
|
256
|
+
const batchNum = i / MAX_GAS_CONFIGS_PER_TX + 1;
|
|
257
|
+
txs.push({
|
|
258
|
+
instructions: [
|
|
259
|
+
await getTokenSetDestinationGasConfigsInstruction(programId, ownerAddress, batch.map((e) => ({
|
|
260
|
+
domain: e.domainId,
|
|
261
|
+
gas: BigInt(e.gas),
|
|
262
|
+
}))),
|
|
263
|
+
],
|
|
264
|
+
annotation: `Update ${label}: enroll gas configs${enrollGasBatches > 1 ? ` (${batchNum}/${enrollGasBatches})` : ''}`,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
const expectedOwnerAddress = expected.owner && !isZeroishAddress(expected.owner) ? expected.owner : null;
|
|
268
|
+
// 3. Ownership change — own tx
|
|
269
|
+
if (!eqOptionalAddress(current.owner, expected.owner, eqAddressSol)) {
|
|
270
|
+
txs.push({
|
|
271
|
+
instructions: [
|
|
272
|
+
await getTokenTransferOwnershipInstruction(programId, ownerAddress, expectedOwnerAddress ? parseAddress(expectedOwnerAddress) : null),
|
|
273
|
+
],
|
|
274
|
+
annotation: `Update ${label}: transfer ownership`,
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
// 4. Upgrade authority — always last tx.
|
|
278
|
+
// Skip when the program is immutable (no current authority).
|
|
279
|
+
const currentUpgradeAuthority = await getProgramUpgradeAuthority(rpc, programId);
|
|
280
|
+
if (currentUpgradeAuthority &&
|
|
281
|
+
!eqOptionalAddress(currentUpgradeAuthority, expectedOwnerAddress ?? undefined, eqAddressSol)) {
|
|
282
|
+
txs.push({
|
|
283
|
+
instructions: [
|
|
284
|
+
await getSetUpgradeAuthorityInstruction(programId, currentUpgradeAuthority, expectedOwnerAddress ? parseAddress(expectedOwnerAddress) : null),
|
|
285
|
+
],
|
|
286
|
+
annotation: `Update ${label}: ${expectedOwnerAddress ? 'transfer' : 'renounce'} upgrade authority`,
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
return txs;
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=warp-tx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warp-tx.js","sourceRoot":"","sources":["../../src/warp/warp-tx.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hyperlane-xyz/sealevel-sdk",
|
|
3
|
+
"version": "27.0.0",
|
|
4
|
+
"description": "Hand-crafted Solana/SVM client for Hyperlane Sealevel programs",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"hyperlane",
|
|
7
|
+
"sealevel",
|
|
8
|
+
"solana",
|
|
9
|
+
"svm"
|
|
10
|
+
],
|
|
11
|
+
"homepage": "https://www.hyperlane.xyz",
|
|
12
|
+
"license": "Apache-2.0",
|
|
13
|
+
"repository": "https://github.com/hyperlane-xyz/hyperlane-monorepo",
|
|
14
|
+
"files": [
|
|
15
|
+
"/dist"
|
|
16
|
+
],
|
|
17
|
+
"type": "module",
|
|
18
|
+
"types": "dist/index.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"default": "./dist/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./testing": {
|
|
25
|
+
"types": "./dist/testing/index.d.ts",
|
|
26
|
+
"default": "./dist/testing/index.js"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@noble/hashes": "^1.7.1",
|
|
31
|
+
"@solana-program/loader-v3": "^0.3.0",
|
|
32
|
+
"@solana-program/system": "^0.12.0",
|
|
33
|
+
"@solana/kit": "^6.1.0",
|
|
34
|
+
"@hyperlane-xyz/provider-sdk": "3.0.1",
|
|
35
|
+
"@hyperlane-xyz/utils": "27.0.0"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@eslint/js": "^9.39.2",
|
|
39
|
+
"@types/chai": "^4.3.14",
|
|
40
|
+
"@types/mocha": "^10.0.6",
|
|
41
|
+
"@types/node": "^24.10.9",
|
|
42
|
+
"@typescript-eslint/eslint-plugin": "^8.54.0",
|
|
43
|
+
"@typescript-eslint/parser": "^8.54.0",
|
|
44
|
+
"chai": "^4.4.1",
|
|
45
|
+
"eslint": "^9.39.2",
|
|
46
|
+
"eslint-config-prettier": "^10.1.8",
|
|
47
|
+
"eslint-import-resolver-typescript": "^4.4.4",
|
|
48
|
+
"eslint-plugin-import": "^2.32.0",
|
|
49
|
+
"mocha": "^10.4.0",
|
|
50
|
+
"oxfmt": "^0.32.0",
|
|
51
|
+
"testcontainers": "^10.13.2",
|
|
52
|
+
"tsx": "^4.19.1",
|
|
53
|
+
"typescript": "5.8.3",
|
|
54
|
+
"typescript-eslint": "^8.54.0",
|
|
55
|
+
"@hyperlane-xyz/eslint-config": "^27.0.0",
|
|
56
|
+
"@hyperlane-xyz/tsconfig": "^27.0.0"
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": "node scripts/generate-core-addresses.mjs && rm -rf ./dist && tsc",
|
|
60
|
+
"program:build": "(cd ../../rust/sealevel/programs && bash build-programs.sh)",
|
|
61
|
+
"program:generate": "node scripts/generate-program-bytes.mjs",
|
|
62
|
+
"program:check": "node scripts/check-program-bytes-hash.mjs",
|
|
63
|
+
"format": "oxfmt --write ./src",
|
|
64
|
+
"lint": "eslint -c ./eslint.config.mjs",
|
|
65
|
+
"clean": "rm -rf ./dist ./cache",
|
|
66
|
+
"dev": "tsc --watch",
|
|
67
|
+
"test": "mocha --require tsx --timeout 300000 'src/tests/**/*.e2e-test.ts'",
|
|
68
|
+
"test:unit": "mocha --require tsx --timeout 10000 'src/tests/**/*.unit-test.ts'",
|
|
69
|
+
"test:ism": "mocha --require tsx --timeout 300000 'src/tests/ism.e2e-test.ts'",
|
|
70
|
+
"test:hook": "mocha --require tsx --timeout 300000 'src/tests/hook.e2e-test.ts'",
|
|
71
|
+
"test:native-token": "mocha --require tsx --timeout 300000 'src/tests/native-token.e2e-test.ts'",
|
|
72
|
+
"test:synthetic-token": "mocha --require tsx --timeout 300000 'src/tests/synthetic-token.e2e-test.ts'",
|
|
73
|
+
"test:collateral-token": "mocha --require tsx --timeout 300000 'src/tests/collateral-token.e2e-test.ts'",
|
|
74
|
+
"test:read-token": "mocha --require tsx --timeout 300000 'src/tests/read-token.e2e-test.ts'"
|
|
75
|
+
}
|
|
76
|
+
}
|