@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,24 @@
|
|
|
1
|
+
import { createDeployProgramPlan, executeDeployPlan, } from './program-deployer.js';
|
|
2
|
+
export async function resolveProgram(target, signer, rpc, useExactDataLen) {
|
|
3
|
+
if ('programId' in target) {
|
|
4
|
+
return { programAddress: target.programId, receipts: [] };
|
|
5
|
+
}
|
|
6
|
+
const plan = await createDeployProgramPlan({
|
|
7
|
+
payer: signer.signer,
|
|
8
|
+
programBytes: target.programBytes,
|
|
9
|
+
getMinimumBalanceForRentExemption: (size) => rpc.getMinimumBalanceForRentExemption(BigInt(size)).send(),
|
|
10
|
+
// Exact data len minimizes rent cost. Programs can still be upgraded to
|
|
11
|
+
// the same size binary. Use the 2x default (undefined) if future upgrades
|
|
12
|
+
// may grow the binary beyond the current size.
|
|
13
|
+
maxDataLen: useExactDataLen
|
|
14
|
+
? BigInt(target.programBytes.length)
|
|
15
|
+
: undefined,
|
|
16
|
+
});
|
|
17
|
+
const executeStage = async (stage) => signer.send({
|
|
18
|
+
instructions: stage.instructions,
|
|
19
|
+
additionalSigners: stage.additionalSigners,
|
|
20
|
+
});
|
|
21
|
+
const receipts = await executeDeployPlan({ plan, executeStage });
|
|
22
|
+
return { programAddress: plan.programAddress, receipts };
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=resolve-program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-program.js","sourceRoot":"","sources":["../../src/deploy/resolve-program.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAO/B,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAwB,EACxB,MAAiB,EACjB,GAAW,EACX,eAAyB;IAEzB,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;QAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC5D,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC;QACzC,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,iCAAiC,EAAE,CAAC,IAAY,EAAE,EAAE,CAClD,GAAG,CAAC,iCAAiC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;QAC5D,wEAAwE;QACxE,0EAA0E;QAC1E,+CAA+C;QAC/C,UAAU,EAAE,eAAe;YACzB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;YACpC,CAAC,CAAC,SAAS;KACd,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,KAAK,EAAE,KAAkB,EAAuB,EAAE,CACrE,MAAM,CAAC,IAAI,CAAC;QACV,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;KAC3C,CAAC,CAAC;IAEL,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IACjE,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-generated SVM core deployment addresses from rust/sealevel/environments/mainnet3.
|
|
3
|
+
* DO NOT EDIT — regenerate with: node scripts/generate-core-addresses.mjs
|
|
4
|
+
*/
|
|
5
|
+
export interface SvmCoreAddresses {
|
|
6
|
+
mailbox: string;
|
|
7
|
+
validatorAnnounce: string;
|
|
8
|
+
multisigIsmMessageId: string;
|
|
9
|
+
igpProgramId: string;
|
|
10
|
+
overheadIgpAccount: string;
|
|
11
|
+
igpAccount: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const SVM_CORE_ADDRESSES: Record<string, SvmCoreAddresses>;
|
|
14
|
+
//# sourceMappingURL=core-addresses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-addresses.d.ts","sourceRoot":"","sources":["../../src/generated/core-addresses.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAiD/D,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-generated SVM core deployment addresses from rust/sealevel/environments/mainnet3.
|
|
3
|
+
* DO NOT EDIT — regenerate with: node scripts/generate-core-addresses.mjs
|
|
4
|
+
*/
|
|
5
|
+
export const SVM_CORE_ADDRESSES = {
|
|
6
|
+
eclipsemainnet: {
|
|
7
|
+
mailbox: 'EitxJuv2iBjsg2d7jVy2LDC1e2zBrx4GB5Y9h2Ko3A9Y',
|
|
8
|
+
validatorAnnounce: 'Hqnn593pqDZWLy6bKZ4NbY767wFhUNBShDrLktuQa3Q2',
|
|
9
|
+
multisigIsmMessageId: 'ByNa6hu4Wuc3ytqnZdnoyacUuZGDiZpT2CujdjE2Hpth',
|
|
10
|
+
igpProgramId: 'Hs7KVBU67nBnWhDPZkEFwWqrFMUfJbmY2DQ4gmCZfaZp',
|
|
11
|
+
overheadIgpAccount: '3Wp4qKkgf4tjXz1soGyTSndCgBPLZFSrZkiDZ8Qp9EEj',
|
|
12
|
+
igpAccount: 'ABb3i11z7wKoGCfeRQNQbVYWjAm7jG7HzZnDLV4RKRbK',
|
|
13
|
+
},
|
|
14
|
+
solanamainnet: {
|
|
15
|
+
mailbox: 'E588QtVUvresuXq2KoNEwAmoifCzYGpRBdHByN9KQMbi',
|
|
16
|
+
validatorAnnounce: 'pRgs5vN4Pj7WvFbxf6QDHizo2njq2uksqEUbaSghVA8',
|
|
17
|
+
multisigIsmMessageId: 'LwNfVYMDzAe5dCJgA5CipTZcT34Eyf74zLr81K91jxk',
|
|
18
|
+
igpProgramId: 'BhNcatUDC2D5JTyeaqrdSukiVFsEHK7e3hVmKMztwefv',
|
|
19
|
+
overheadIgpAccount: 'AkeHBbE5JkwVppujCQQ6WuxsVsJtruBAjUo6fDCFp6fF',
|
|
20
|
+
igpAccount: 'JAvHW21tYXE9dtdG83DReqU2b4LUexFuCbtJT5tF8X6M',
|
|
21
|
+
},
|
|
22
|
+
solaxy: {
|
|
23
|
+
mailbox: '6VdnmP8MfYkPNMwyU2ZY9S3ickYyewF58LPC38y9FAVU',
|
|
24
|
+
validatorAnnounce: '28S9ToSehVxdE7rTGEAA3vAX3AchHJh1MXcq9AeM1rL8',
|
|
25
|
+
multisigIsmMessageId: 'BMyTd7BBTw6ewENKkvzQsmPXPBHsTDW4oLHSYkv78spP',
|
|
26
|
+
igpProgramId: 'VG7YDF5Am2hrgyydE2ufdusdtw5DjgzXJLFxn9p8ehU',
|
|
27
|
+
overheadIgpAccount: '7z1QjgLLxowA9RA9QBuiC72Tc6aC1XjtA5zdH9LJHm1a',
|
|
28
|
+
igpAccount: '3SDcBbfZUF9ykR3yudYN198ja3KJSq17Q3rKw7JKfJR6',
|
|
29
|
+
},
|
|
30
|
+
sonicsvm: {
|
|
31
|
+
mailbox: '4MaM9GQZ753NhUcXH1pPsQwof1Mf3ZnjeNF4yx6S3p3N',
|
|
32
|
+
validatorAnnounce: '4LxdrQjqUzueko4MEn3cYCniEtcAZ6AxuHot2Fp3jskH',
|
|
33
|
+
multisigIsmMessageId: '2sCw3FozxoNinZV923Q6XNvaMjRsmPSFAKnNYYnWsqD3',
|
|
34
|
+
igpProgramId: '3kd3K1yymsfYoqzNnktLwpKXKeB9Y2PRf9rfb31k4o13',
|
|
35
|
+
overheadIgpAccount: '7VResHbw6jRVUa8qfD6e1cbzGmErcLGwgx4o7mLhZief',
|
|
36
|
+
igpAccount: 'Bxof4ZpgLtoHoxBq6AGDCJUtVxUoE9LXkx8iizkDGQPz',
|
|
37
|
+
},
|
|
38
|
+
soon: {
|
|
39
|
+
mailbox: 'Mj7GE6LZiJUZFTgabmNkFoY2o6JCEwCMKopSUUC3kqj',
|
|
40
|
+
validatorAnnounce: 'GFqF38mSacfvbJRKkhmjJvSkzTEKemSNVoWi4Q94ZPvz',
|
|
41
|
+
multisigIsmMessageId: '4fPoa26ayqY1cwY3AcqUPvdLLNHpjJGdDQevtnTLAAnH',
|
|
42
|
+
igpProgramId: '5AAMBemjUrAprKJzi22Si9pyYhK8vTr7Jpti7LEXo6d8',
|
|
43
|
+
overheadIgpAccount: 'GctmRsKQM5VLPrUPpsQ7Kc7RaVKNC2Fev31n1KtLkj8A',
|
|
44
|
+
igpAccount: 'Dsem8R6mkrpNoNb6CRUEjEZRP2hKRC24thyCkVr8cNYZ',
|
|
45
|
+
},
|
|
46
|
+
svmbnb: {
|
|
47
|
+
mailbox: 'GzwNZJ2EXUWQCEoV6zoBGLxkdsnjkLvm6zHReMEC2JSA',
|
|
48
|
+
validatorAnnounce: 'Gh4LUk91bj4QGYWsBY4QyDGhs68n8Maf8oeTRZoQZAEf',
|
|
49
|
+
multisigIsmMessageId: '3aD11eiNt2ZjmgiQayNRyZfp7hXBRS9hbeyPbk7cmTyv',
|
|
50
|
+
igpProgramId: 'ALUFQNqrKA9FgxvzkDvp2K5M94P3bvJYzPvrB8LSe6Ee',
|
|
51
|
+
overheadIgpAccount: 'FcXbqeqf23ToXfFXKJisQvCnRu3GjCEunNtkqvxAcNWF',
|
|
52
|
+
igpAccount: '76JNRGvHbER5CL7X4Mw6qpzvvKDW3syyfZ5LNXfY53sC',
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=core-addresses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-addresses.js","sourceRoot":"","sources":["../../src/generated/core-addresses.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,CAAC,MAAM,kBAAkB,GAAqC;IAClE,cAAc,EAAE;QACd,OAAO,EAAE,8CAA8C;QACvD,iBAAiB,EAAE,8CAA8C;QACjE,oBAAoB,EAAE,8CAA8C;QACpE,YAAY,EAAE,8CAA8C;QAC5D,kBAAkB,EAAE,8CAA8C;QAClE,UAAU,EAAE,8CAA8C;KAC3D;IACD,aAAa,EAAE;QACb,OAAO,EAAE,8CAA8C;QACvD,iBAAiB,EAAE,6CAA6C;QAChE,oBAAoB,EAAE,6CAA6C;QACnE,YAAY,EAAE,8CAA8C;QAC5D,kBAAkB,EAAE,8CAA8C;QAClE,UAAU,EAAE,8CAA8C;KAC3D;IACD,MAAM,EAAE;QACN,OAAO,EAAE,8CAA8C;QACvD,iBAAiB,EAAE,8CAA8C;QACjE,oBAAoB,EAAE,8CAA8C;QACpE,YAAY,EAAE,6CAA6C;QAC3D,kBAAkB,EAAE,8CAA8C;QAClE,UAAU,EAAE,8CAA8C;KAC3D;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,8CAA8C;QACvD,iBAAiB,EAAE,8CAA8C;QACjE,oBAAoB,EAAE,8CAA8C;QACpE,YAAY,EAAE,8CAA8C;QAC5D,kBAAkB,EAAE,8CAA8C;QAClE,UAAU,EAAE,8CAA8C;KAC3D;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,6CAA6C;QACtD,iBAAiB,EAAE,8CAA8C;QACjE,oBAAoB,EAAE,8CAA8C;QACpE,YAAY,EAAE,8CAA8C;QAC5D,kBAAkB,EAAE,8CAA8C;QAClE,UAAU,EAAE,8CAA8C;KAC3D;IACD,MAAM,EAAE;QACN,OAAO,EAAE,8CAA8C;QACvD,iBAAiB,EAAE,8CAA8C;QACjE,oBAAoB,EAAE,8CAA8C;QACpE,YAAY,EAAE,8CAA8C;QAC5D,kBAAkB,EAAE,8CAA8C;QAClE,UAAU,EAAE,8CAA8C;KAC3D;CACF,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type Address, type Rpc, type SolanaRpcApi } from '@solana/kit';
|
|
2
|
+
import type { ArtifactReader, ArtifactWriter } from '@hyperlane-xyz/provider-sdk/artifact';
|
|
3
|
+
import type { DeployedHookArtifact, IRawHookArtifactManager, RawHookArtifactConfigs } from '@hyperlane-xyz/provider-sdk/hook';
|
|
4
|
+
import type { SvmSigner } from '../clients/signer.js';
|
|
5
|
+
import type { SvmDeployedHook, SvmDeployedIgpHook } from '../types.js';
|
|
6
|
+
export type HookAccountDecoder = 'igpProgramData' | 'igp' | 'overheadIgp';
|
|
7
|
+
export declare class SvmHookArtifactManager implements IRawHookArtifactManager {
|
|
8
|
+
private readonly rpc;
|
|
9
|
+
private readonly mailboxAddress;
|
|
10
|
+
private readonly salt;
|
|
11
|
+
constructor(rpc: Rpc<SolanaRpcApi>, mailboxAddress: Address, salt?: Uint8Array);
|
|
12
|
+
readHook(address: string): Promise<DeployedHookArtifact>;
|
|
13
|
+
createReader<T extends keyof RawHookArtifactConfigs>(type: T): ArtifactReader<RawHookArtifactConfigs[T], SvmDeployedHook | SvmDeployedIgpHook>;
|
|
14
|
+
createWriter<T extends keyof RawHookArtifactConfigs>(type: T, signer: SvmSigner): ArtifactWriter<RawHookArtifactConfigs[T], SvmDeployedHook | SvmDeployedIgpHook>;
|
|
15
|
+
private altVmToTypeKey;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=hook-artifact-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-artifact-manager.d.ts","sourceRoot":"","sources":["../../src/hook/hook-artifact-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,GAAG,EACR,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAavE,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,GAAG,KAAK,GAAG,aAAa,CAAC;AAE1E,qBAAa,sBAAuB,YAAW,uBAAuB;IAElE,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,EACtB,cAAc,EAAE,OAAO,EACvB,IAAI,GAAE,UAA6B;IAGhD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAiB9D,YAAY,CAAC,CAAC,SAAS,MAAM,sBAAsB,EACjD,IAAI,EAAE,CAAC,GACN,cAAc,CACf,sBAAsB,CAAC,CAAC,CAAC,EACzB,eAAe,GAAG,kBAAkB,CACrC;IAeD,YAAY,CAAC,CAAC,SAAS,MAAM,sBAAsB,EACjD,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,SAAS,GAChB,cAAc,CACf,sBAAsB,CAAC,CAAC,CAAC,EACzB,eAAe,GAAG,kBAAkB,CACrC;IAgBD,OAAO,CAAC,cAAc;CAUvB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { address as parseAddress, } from '@solana/kit';
|
|
2
|
+
import { HookType } from '@hyperlane-xyz/provider-sdk/altvm';
|
|
3
|
+
import { assert } from '@hyperlane-xyz/utils';
|
|
4
|
+
import { detectHookType } from './hook-query.js';
|
|
5
|
+
import { DEFAULT_IGP_SALT, SvmIgpHookReader, SvmIgpHookWriter, } from './igp-hook.js';
|
|
6
|
+
import { SvmMerkleTreeHookReader, SvmMerkleTreeHookWriter, } from './merkle-tree-hook.js';
|
|
7
|
+
export class SvmHookArtifactManager {
|
|
8
|
+
rpc;
|
|
9
|
+
mailboxAddress;
|
|
10
|
+
salt;
|
|
11
|
+
constructor(rpc, mailboxAddress, salt = DEFAULT_IGP_SALT) {
|
|
12
|
+
this.rpc = rpc;
|
|
13
|
+
this.mailboxAddress = mailboxAddress;
|
|
14
|
+
this.salt = salt;
|
|
15
|
+
}
|
|
16
|
+
async readHook(address) {
|
|
17
|
+
const addr = parseAddress(address);
|
|
18
|
+
const hookType = await detectHookType(this.rpc, addr);
|
|
19
|
+
if (hookType !== null) {
|
|
20
|
+
return this.createReader(this.altVmToTypeKey(hookType)).read(address);
|
|
21
|
+
}
|
|
22
|
+
// The only other supported hook on SVM is the merkle tree hook, which IS
|
|
23
|
+
// the mailbox program. Validate the address matches before assuming.
|
|
24
|
+
assert(addr === this.mailboxAddress, `Unknown hook address ${address}: not an IGP program; expected the configured mailbox (${this.mailboxAddress}) for Merkle detection`);
|
|
25
|
+
return this.createReader('merkleTreeHook').read(address);
|
|
26
|
+
}
|
|
27
|
+
createReader(type) {
|
|
28
|
+
const readers = {
|
|
29
|
+
merkleTreeHook: () => new SvmMerkleTreeHookReader(this.rpc),
|
|
30
|
+
interchainGasPaymaster: () => new SvmIgpHookReader(this.rpc, this.salt),
|
|
31
|
+
};
|
|
32
|
+
const factory = readers[type];
|
|
33
|
+
if (!factory)
|
|
34
|
+
throw new Error(`Unsupported hook type: ${type}`);
|
|
35
|
+
return factory();
|
|
36
|
+
}
|
|
37
|
+
createWriter(type, signer) {
|
|
38
|
+
const writers = {
|
|
39
|
+
merkleTreeHook: () => new SvmMerkleTreeHookWriter(this.rpc, signer),
|
|
40
|
+
interchainGasPaymaster: () => new SvmIgpHookWriter(this.rpc, this.salt, signer),
|
|
41
|
+
};
|
|
42
|
+
const factory = writers[type];
|
|
43
|
+
if (!factory)
|
|
44
|
+
throw new Error(`Unsupported hook type: ${type}`);
|
|
45
|
+
return factory();
|
|
46
|
+
}
|
|
47
|
+
altVmToTypeKey(hookType) {
|
|
48
|
+
switch (hookType) {
|
|
49
|
+
case HookType.MERKLE_TREE:
|
|
50
|
+
return 'merkleTreeHook';
|
|
51
|
+
case HookType.INTERCHAIN_GAS_PAYMASTER:
|
|
52
|
+
return 'interchainGasPaymaster';
|
|
53
|
+
default:
|
|
54
|
+
throw new Error(`Unsupported hook type on Solana: ${hookType}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=hook-artifact-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-artifact-manager.js","sourceRoot":"","sources":["../../src/hook/hook-artifact-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,IAAI,YAAY,GAIxB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAU7D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAK9C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAI/B,MAAM,OAAO,sBAAsB;IAEd;IACA;IACA;IAHnB,YACmB,GAAsB,EACtB,cAAuB,EACvB,OAAmB,gBAAgB;QAFnC,QAAG,GAAH,GAAG,CAAmB;QACtB,mBAAc,GAAd,cAAc,CAAS;QACvB,SAAI,GAAJ,IAAI,CAA+B;IACnD,CAAC;IAEJ,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAEtD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxE,CAAC;QAED,yEAAyE;QACzE,qEAAqE;QACrE,MAAM,CACJ,IAAI,KAAK,IAAI,CAAC,cAAc,EAC5B,wBAAwB,OAAO,0DAA0D,IAAI,CAAC,cAAc,wBAAwB,CACrI,CAAC;QACF,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,YAAY,CACV,IAAO;QAKP,MAAM,OAAO,GAKT;YACF,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC;YAC3D,sBAAsB,EAAE,GAAG,EAAE,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;SACxE,CAAC;QACF,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;QAChE,OAAO,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,YAAY,CACV,IAAO,EACP,MAAiB;QAKjB,MAAM,OAAO,GAKT;YACF,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;YACnE,sBAAsB,EAAE,GAAG,EAAE,CAC3B,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;SACpD,CAAC;QACF,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;QAChE,OAAO,OAAO,EAAE,CAAC;IACnB,CAAC;IAEO,cAAc,CAAC,QAAkB;QACvC,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ,CAAC,WAAW;gBACvB,OAAO,gBAAgB,CAAC;YAC1B,KAAK,QAAQ,CAAC,wBAAwB;gBACpC,OAAO,wBAAwB,CAAC;YAClC;gBACE,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type Address, type Rpc, type SolanaRpcApi } from '@solana/kit';
|
|
2
|
+
import { HookType } from '@hyperlane-xyz/provider-sdk/altvm';
|
|
3
|
+
import { decodeIgpAccount, decodeIgpProgramDataAccount, decodeOverheadIgpAccount, type IgpAccountData, type IgpProgramData, type OverheadIgpAccountData } from '../accounts/token.js';
|
|
4
|
+
export declare const decodeHookAccount: {
|
|
5
|
+
igpProgramData: typeof decodeIgpProgramDataAccount;
|
|
6
|
+
igp: typeof decodeIgpAccount;
|
|
7
|
+
overheadIgp: typeof decodeOverheadIgpAccount;
|
|
8
|
+
};
|
|
9
|
+
export declare function fetchIgpProgramData(rpc: Rpc<SolanaRpcApi>, programId: Address): Promise<IgpProgramData | null>;
|
|
10
|
+
export declare function fetchIgpAccount(rpc: Rpc<SolanaRpcApi>, programId: Address, salt: Uint8Array): Promise<IgpAccountData | null>;
|
|
11
|
+
export declare function fetchOverheadIgpAccount(rpc: Rpc<SolanaRpcApi>, programId: Address, salt: Uint8Array): Promise<OverheadIgpAccountData | null>;
|
|
12
|
+
export declare function detectHookType(rpc: Rpc<SolanaRpcApi>, address: Address): Promise<HookType | null>;
|
|
13
|
+
export declare function remoteGasDataToConfig(gasOracle: {
|
|
14
|
+
kind: 0;
|
|
15
|
+
value: {
|
|
16
|
+
tokenExchangeRate: bigint;
|
|
17
|
+
gasPrice: bigint;
|
|
18
|
+
tokenDecimals: number;
|
|
19
|
+
};
|
|
20
|
+
}): {
|
|
21
|
+
gasPrice: string;
|
|
22
|
+
tokenExchangeRate: string;
|
|
23
|
+
tokenDecimals: number;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=hook-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-query.d.ts","sourceRoot":"","sources":["../../src/hook/hook-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAE7D,OAAO,EACL,gBAAgB,EAChB,2BAA2B,EAC3B,wBAAwB,EACxB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAC;AAQ9B,eAAO,MAAM,iBAAiB;;;;CAI7B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,EACtB,SAAS,EAAE,OAAO,GACjB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAKhC;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,EACtB,SAAS,EAAE,OAAO,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAKhC;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,EACtB,SAAS,EAAE,OAAO,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAQxC;AAED,wBAAsB,cAAc,CAClC,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,EACtB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAM1B;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE;IAC/C,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE;QACL,iBAAiB,EAAE,MAAM,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH,GAAG;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB,CAOA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { HookType } from '@hyperlane-xyz/provider-sdk/altvm';
|
|
2
|
+
import { decodeIgpAccount, decodeIgpProgramDataAccount, decodeOverheadIgpAccount, } from '../accounts/token.js';
|
|
3
|
+
import { deriveIgpAccountPda, deriveIgpProgramDataPda, deriveOverheadIgpAccountPda, } from '../pda.js';
|
|
4
|
+
import { fetchAccountDataRaw } from '../rpc.js';
|
|
5
|
+
export const decodeHookAccount = {
|
|
6
|
+
igpProgramData: decodeIgpProgramDataAccount,
|
|
7
|
+
igp: decodeIgpAccount,
|
|
8
|
+
overheadIgp: decodeOverheadIgpAccount,
|
|
9
|
+
};
|
|
10
|
+
export async function fetchIgpProgramData(rpc, programId) {
|
|
11
|
+
const { address: programDataPda } = await deriveIgpProgramDataPda(programId);
|
|
12
|
+
const raw = await fetchAccountDataRaw(rpc, programDataPda);
|
|
13
|
+
if (!raw || raw.length === 0)
|
|
14
|
+
return null;
|
|
15
|
+
return decodeIgpProgramDataAccount(raw);
|
|
16
|
+
}
|
|
17
|
+
export async function fetchIgpAccount(rpc, programId, salt) {
|
|
18
|
+
const { address: igpPda } = await deriveIgpAccountPda(programId, salt);
|
|
19
|
+
const raw = await fetchAccountDataRaw(rpc, igpPda);
|
|
20
|
+
if (!raw || raw.length === 0)
|
|
21
|
+
return null;
|
|
22
|
+
return decodeIgpAccount(raw);
|
|
23
|
+
}
|
|
24
|
+
export async function fetchOverheadIgpAccount(rpc, programId, salt) {
|
|
25
|
+
const { address: overheadIgpPda } = await deriveOverheadIgpAccountPda(programId, salt);
|
|
26
|
+
const raw = await fetchAccountDataRaw(rpc, overheadIgpPda);
|
|
27
|
+
if (!raw || raw.length === 0)
|
|
28
|
+
return null;
|
|
29
|
+
return decodeOverheadIgpAccount(raw);
|
|
30
|
+
}
|
|
31
|
+
export async function detectHookType(rpc, address) {
|
|
32
|
+
const igpProgramData = await fetchIgpProgramData(rpc, address);
|
|
33
|
+
if (igpProgramData !== null) {
|
|
34
|
+
return HookType.INTERCHAIN_GAS_PAYMASTER;
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
export function remoteGasDataToConfig(gasOracle) {
|
|
39
|
+
const data = gasOracle.value;
|
|
40
|
+
return {
|
|
41
|
+
gasPrice: data.gasPrice.toString(),
|
|
42
|
+
tokenExchangeRate: data.tokenExchangeRate.toString(),
|
|
43
|
+
tokenDecimals: data.tokenDecimals,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=hook-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-query.js","sourceRoot":"","sources":["../../src/hook/hook-query.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAE7D,OAAO,EACL,gBAAgB,EAChB,2BAA2B,EAC3B,wBAAwB,GAIzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,cAAc,EAAE,2BAA2B;IAC3C,GAAG,EAAE,gBAAgB;IACrB,WAAW,EAAE,wBAAwB;CACtC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAsB,EACtB,SAAkB;IAElB,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC3D,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,2BAA2B,CAAC,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAsB,EACtB,SAAkB,EAClB,IAAgB;IAEhB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACvE,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,GAAsB,EACtB,SAAkB,EAClB,IAAgB;IAEhB,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,2BAA2B,CACnE,SAAS,EACT,IAAI,CACL,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC3D,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,wBAAwB,CAAC,GAAG,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAsB,EACtB,OAAgB;IAEhB,MAAM,cAAc,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/D,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,wBAAwB,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAOrC;IAKC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC;IAC7B,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;QAClC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;QACpD,aAAa,EAAE,IAAI,CAAC,aAAa;KAClC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type Rpc, type SolanaRpcApi } from '@solana/kit';
|
|
2
|
+
import { type ArtifactDeployed, type ArtifactNew, type ArtifactReader, type ArtifactWriter } from '@hyperlane-xyz/provider-sdk/artifact';
|
|
3
|
+
import type { IgpHookConfig } from '@hyperlane-xyz/provider-sdk/hook';
|
|
4
|
+
import type { SvmSigner } from '../clients/signer.js';
|
|
5
|
+
import type { AnnotatedSvmTransaction, SvmDeployedIgpHook, SvmProgramTarget, SvmReceipt } from '../types.js';
|
|
6
|
+
export interface SvmIgpHookConfig extends IgpHookConfig {
|
|
7
|
+
program: SvmProgramTarget;
|
|
8
|
+
context?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function deriveIgpSalt(context: string): Uint8Array;
|
|
11
|
+
/** Zero salt — matches mainnet IGP deployments (H256::zero() in Rust). */
|
|
12
|
+
export declare const DEFAULT_IGP_SALT: Uint8Array<ArrayBuffer>;
|
|
13
|
+
export declare class SvmIgpHookReader implements ArtifactReader<IgpHookConfig, SvmDeployedIgpHook> {
|
|
14
|
+
protected readonly rpc: Rpc<SolanaRpcApi>;
|
|
15
|
+
protected readonly salt: Uint8Array;
|
|
16
|
+
constructor(rpc: Rpc<SolanaRpcApi>, salt: Uint8Array);
|
|
17
|
+
read(address: string): Promise<ArtifactDeployed<IgpHookConfig, SvmDeployedIgpHook>>;
|
|
18
|
+
}
|
|
19
|
+
export declare class SvmIgpHookWriter extends SvmIgpHookReader implements ArtifactWriter<IgpHookConfig, SvmDeployedIgpHook> {
|
|
20
|
+
private readonly svmSigner;
|
|
21
|
+
constructor(rpc: Rpc<SolanaRpcApi>, salt: Uint8Array, svmSigner: SvmSigner);
|
|
22
|
+
create(artifact: ArtifactNew<IgpHookConfig>): Promise<[
|
|
23
|
+
ArtifactDeployed<IgpHookConfig, SvmDeployedIgpHook>,
|
|
24
|
+
SvmReceipt[]
|
|
25
|
+
]>;
|
|
26
|
+
update(artifact: ArtifactDeployed<IgpHookConfig, SvmDeployedIgpHook>): Promise<AnnotatedSvmTransaction[]>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=igp-hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"igp-hook.d.ts","sourceRoot":"","sources":["../../src/hook/igp-hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,GAAG,EACR,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAIrB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,cAAc,EAEnB,KAAK,cAAc,EACpB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAatE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACX,MAAM,aAAa,CAAC;AASrB,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAEzD;AAED,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,yBAAqB,CAAC;AAEnD,qBAAa,gBAAiB,YAAW,cAAc,CACrD,aAAa,EACb,kBAAkB,CACnB;IAEG,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC;IACzC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU;gBADhB,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,EACtB,IAAI,EAAE,UAAU;IAG/B,IAAI,CACR,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;CAyDhE;AAED,qBAAa,gBACX,SAAQ,gBACR,YAAW,cAAc,CAAC,aAAa,EAAE,kBAAkB,CAAC;IAK1D,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAF1B,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,EACtB,IAAI,EAAE,UAAU,EACC,SAAS,EAAE,SAAS;IAKjC,MAAM,CACV,QAAQ,EAAE,WAAW,CAAC,aAAa,CAAC,GACnC,OAAO,CACR;QAAC,gBAAgB,CAAC,aAAa,EAAE,kBAAkB,CAAC;QAAE,UAAU,EAAE;KAAC,CACpE;IA2JK,MAAM,CACV,QAAQ,EAAE,gBAAgB,CAAC,aAAa,EAAE,kBAAkB,CAAC,GAC5D,OAAO,CAAC,uBAAuB,EAAE,CAAC;CAoHtC"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { address as parseAddress, } from '@solana/kit';
|
|
2
|
+
import { keccak_256 } from '@noble/hashes/sha3';
|
|
3
|
+
import { HookType } from '@hyperlane-xyz/provider-sdk/altvm';
|
|
4
|
+
import { ArtifactState, } from '@hyperlane-xyz/provider-sdk/artifact';
|
|
5
|
+
import { assert, ZERO_ADDRESS_HEX_32 } from '@hyperlane-xyz/utils';
|
|
6
|
+
import { resolveProgram } from '../deploy/resolve-program.js';
|
|
7
|
+
import { getInitIgpInstruction, getInitIgpProgramInstruction, getInitOverheadIgpInstruction, getSetDestinationGasOverheadsInstruction, getSetGasOracleConfigsInstruction, } from '../instructions/igp.js';
|
|
8
|
+
import { deriveIgpAccountPda, deriveOverheadIgpAccountPda } from '../pda.js';
|
|
9
|
+
import { fetchIgpAccount, fetchIgpProgramData, fetchOverheadIgpAccount, remoteGasDataToConfig, } from './hook-query.js';
|
|
10
|
+
export function deriveIgpSalt(context) {
|
|
11
|
+
return keccak_256(new TextEncoder().encode(context));
|
|
12
|
+
}
|
|
13
|
+
/** Zero salt — matches mainnet IGP deployments (H256::zero() in Rust). */
|
|
14
|
+
export const DEFAULT_IGP_SALT = new Uint8Array(32);
|
|
15
|
+
export class SvmIgpHookReader {
|
|
16
|
+
rpc;
|
|
17
|
+
salt;
|
|
18
|
+
constructor(rpc, salt) {
|
|
19
|
+
this.rpc = rpc;
|
|
20
|
+
this.salt = salt;
|
|
21
|
+
}
|
|
22
|
+
async read(address) {
|
|
23
|
+
const programId = parseAddress(address);
|
|
24
|
+
const igp = await fetchIgpAccount(this.rpc, programId, this.salt);
|
|
25
|
+
if (!igp) {
|
|
26
|
+
throw new Error(`IGP account not found for program: ${programId}`);
|
|
27
|
+
}
|
|
28
|
+
const overheadIgp = await fetchOverheadIgpAccount(this.rpc, programId, this.salt);
|
|
29
|
+
const oracleConfig = {};
|
|
30
|
+
for (const [domain, oracle] of igp.gasOracles.entries()) {
|
|
31
|
+
oracleConfig[domain] = remoteGasDataToConfig(oracle);
|
|
32
|
+
}
|
|
33
|
+
const overhead = {};
|
|
34
|
+
if (overheadIgp) {
|
|
35
|
+
for (const [domain, gas] of overheadIgp.gasOverheads.entries()) {
|
|
36
|
+
overhead[domain] = Number(gas);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const owner = igp.owner;
|
|
40
|
+
const beneficiary = igp.beneficiary;
|
|
41
|
+
const { address: igpPda } = await deriveIgpAccountPda(programId, this.salt);
|
|
42
|
+
const { address: overheadIgpPda } = await deriveOverheadIgpAccountPda(programId, this.salt);
|
|
43
|
+
return {
|
|
44
|
+
artifactState: ArtifactState.DEPLOYED,
|
|
45
|
+
config: {
|
|
46
|
+
type: HookType.INTERCHAIN_GAS_PAYMASTER,
|
|
47
|
+
// FIXME: address provider sdk type in a separate pr
|
|
48
|
+
owner: owner ?? ZERO_ADDRESS_HEX_32,
|
|
49
|
+
beneficiary,
|
|
50
|
+
// FIXME: address provider sdk type in a separate pr
|
|
51
|
+
oracleKey: owner ?? ZERO_ADDRESS_HEX_32,
|
|
52
|
+
overhead,
|
|
53
|
+
oracleConfig,
|
|
54
|
+
},
|
|
55
|
+
deployed: {
|
|
56
|
+
address: programId,
|
|
57
|
+
programId,
|
|
58
|
+
igpPda,
|
|
59
|
+
overheadIgpPda: overheadIgp ? overheadIgpPda : undefined,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export class SvmIgpHookWriter extends SvmIgpHookReader {
|
|
65
|
+
svmSigner;
|
|
66
|
+
constructor(rpc, salt, svmSigner) {
|
|
67
|
+
super(rpc, salt);
|
|
68
|
+
this.svmSigner = svmSigner;
|
|
69
|
+
}
|
|
70
|
+
async create(artifact) {
|
|
71
|
+
const config = artifact.config;
|
|
72
|
+
const { programAddress: programId, receipts } = await resolveProgram(config.program, this.svmSigner, this.rpc);
|
|
73
|
+
// Phase 1: Initialize program data PDA if not yet created
|
|
74
|
+
const programData = await fetchIgpProgramData(this.rpc, programId);
|
|
75
|
+
if (!programData) {
|
|
76
|
+
const initProgramIx = await getInitIgpProgramInstruction(programId, this.svmSigner.signer);
|
|
77
|
+
const initProgramReceipt = await this.svmSigner.send({
|
|
78
|
+
instructions: [initProgramIx],
|
|
79
|
+
});
|
|
80
|
+
receipts.push(initProgramReceipt);
|
|
81
|
+
}
|
|
82
|
+
// Phase 2: Initialize specific IGP account
|
|
83
|
+
let igp = await fetchIgpAccount(this.rpc, programId, this.salt);
|
|
84
|
+
if (!igp) {
|
|
85
|
+
const initIgpIx = await getInitIgpInstruction(programId, this.svmSigner.signer, {
|
|
86
|
+
salt: this.salt,
|
|
87
|
+
owner: config.owner ? parseAddress(config.owner) : null,
|
|
88
|
+
beneficiary: parseAddress(config.beneficiary),
|
|
89
|
+
});
|
|
90
|
+
const initReceipt = await this.svmSigner.send({
|
|
91
|
+
instructions: [initIgpIx],
|
|
92
|
+
});
|
|
93
|
+
receipts.push(initReceipt);
|
|
94
|
+
igp = await fetchIgpAccount(this.rpc, programId, this.salt);
|
|
95
|
+
assert(igp, 'IGP account not found after init');
|
|
96
|
+
}
|
|
97
|
+
const { address: igpPda } = await deriveIgpAccountPda(programId, this.salt);
|
|
98
|
+
const overheadIgp = await fetchOverheadIgpAccount(this.rpc, programId, this.salt);
|
|
99
|
+
let overheadIgpPda;
|
|
100
|
+
if (!overheadIgp && Object.keys(config.overhead).length > 0) {
|
|
101
|
+
const initOverheadIx = await getInitOverheadIgpInstruction(programId, this.svmSigner.signer, {
|
|
102
|
+
salt: this.salt,
|
|
103
|
+
owner: config.owner ? parseAddress(config.owner) : null,
|
|
104
|
+
inner: igpPda,
|
|
105
|
+
});
|
|
106
|
+
const initOverheadReceipt = await this.svmSigner.send({
|
|
107
|
+
instructions: [initOverheadIx],
|
|
108
|
+
});
|
|
109
|
+
receipts.push(initOverheadReceipt);
|
|
110
|
+
}
|
|
111
|
+
const oracleConfigs = Object.entries(config.oracleConfig).map(([domainStr, oracleData]) => {
|
|
112
|
+
const domain = Number(domainStr);
|
|
113
|
+
assert(Number.isInteger(domain) && domain >= 0, `Invalid domain: '${domainStr}'`);
|
|
114
|
+
return {
|
|
115
|
+
domain,
|
|
116
|
+
gasOracle: {
|
|
117
|
+
kind: 0,
|
|
118
|
+
value: {
|
|
119
|
+
gasPrice: BigInt(oracleData.gasPrice),
|
|
120
|
+
tokenExchangeRate: BigInt(oracleData.tokenExchangeRate),
|
|
121
|
+
tokenDecimals: oracleData.tokenDecimals ?? 9,
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
});
|
|
126
|
+
if (oracleConfigs.length > 0) {
|
|
127
|
+
const setOracleIx = await getSetGasOracleConfigsInstruction(programId, this.svmSigner.signer, igpPda, oracleConfigs);
|
|
128
|
+
const oracleReceipt = await this.svmSigner.send({
|
|
129
|
+
instructions: [setOracleIx],
|
|
130
|
+
});
|
|
131
|
+
receipts.push(oracleReceipt);
|
|
132
|
+
}
|
|
133
|
+
const overheadConfigs = Object.entries(config.overhead).map(([domainStr, gas]) => {
|
|
134
|
+
const domain = Number(domainStr);
|
|
135
|
+
assert(Number.isInteger(domain) && domain >= 0, `Invalid domain: '${domainStr}'`);
|
|
136
|
+
return {
|
|
137
|
+
destinationDomain: domain,
|
|
138
|
+
gasOverhead: BigInt(gas),
|
|
139
|
+
};
|
|
140
|
+
});
|
|
141
|
+
if (overheadConfigs.length > 0) {
|
|
142
|
+
const derivedOverheadPda = await deriveOverheadIgpAccountPda(programId, this.salt);
|
|
143
|
+
overheadIgpPda = derivedOverheadPda.address;
|
|
144
|
+
const setOverheadIx = await getSetDestinationGasOverheadsInstruction(programId, this.svmSigner.signer, overheadIgpPda, overheadConfigs);
|
|
145
|
+
const overheadReceipt = await this.svmSigner.send({
|
|
146
|
+
instructions: [setOverheadIx],
|
|
147
|
+
});
|
|
148
|
+
receipts.push(overheadReceipt);
|
|
149
|
+
}
|
|
150
|
+
return [
|
|
151
|
+
{
|
|
152
|
+
artifactState: ArtifactState.DEPLOYED,
|
|
153
|
+
config: config,
|
|
154
|
+
deployed: {
|
|
155
|
+
address: programId,
|
|
156
|
+
programId,
|
|
157
|
+
igpPda,
|
|
158
|
+
overheadIgpPda,
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
receipts,
|
|
162
|
+
];
|
|
163
|
+
}
|
|
164
|
+
async update(artifact) {
|
|
165
|
+
const txs = [];
|
|
166
|
+
const config = artifact.config;
|
|
167
|
+
const programId = artifact.deployed.programId;
|
|
168
|
+
const currentIgp = await fetchIgpAccount(this.rpc, programId, this.salt);
|
|
169
|
+
if (!currentIgp) {
|
|
170
|
+
throw new Error('IGP account not initialized');
|
|
171
|
+
}
|
|
172
|
+
const { address: igpPda } = await deriveIgpAccountPda(programId, this.salt);
|
|
173
|
+
const oracleConfigsToUpdate = [];
|
|
174
|
+
for (const [domainStr, oracleData] of Object.entries(config.oracleConfig)) {
|
|
175
|
+
const domain = Number(domainStr);
|
|
176
|
+
assert(Number.isInteger(domain) && domain >= 0, `Invalid domain: '${domainStr}'`);
|
|
177
|
+
const existingOracle = currentIgp.gasOracles.get(domain);
|
|
178
|
+
const newGasPrice = BigInt(oracleData.gasPrice);
|
|
179
|
+
const newTokenExchangeRate = BigInt(oracleData.tokenExchangeRate);
|
|
180
|
+
const newTokenDecimals = oracleData.tokenDecimals ?? 9;
|
|
181
|
+
let needsUpdate = false;
|
|
182
|
+
if (!existingOracle) {
|
|
183
|
+
needsUpdate = true;
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
const existing = existingOracle.value;
|
|
187
|
+
if (existing.gasPrice !== newGasPrice ||
|
|
188
|
+
existing.tokenExchangeRate !== newTokenExchangeRate ||
|
|
189
|
+
existing.tokenDecimals !== newTokenDecimals) {
|
|
190
|
+
needsUpdate = true;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (needsUpdate) {
|
|
194
|
+
oracleConfigsToUpdate.push({
|
|
195
|
+
domain,
|
|
196
|
+
gasOracle: {
|
|
197
|
+
kind: 0,
|
|
198
|
+
value: {
|
|
199
|
+
gasPrice: newGasPrice,
|
|
200
|
+
tokenExchangeRate: newTokenExchangeRate,
|
|
201
|
+
tokenDecimals: newTokenDecimals,
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (oracleConfigsToUpdate.length > 0) {
|
|
208
|
+
const setOracleIx = await getSetGasOracleConfigsInstruction(programId, this.svmSigner.signer, igpPda, oracleConfigsToUpdate);
|
|
209
|
+
txs.push({
|
|
210
|
+
instructions: [setOracleIx],
|
|
211
|
+
annotation: `Update gas oracles for ${oracleConfigsToUpdate.length} domains`,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
const currentOverheadIgp = await fetchOverheadIgpAccount(this.rpc, programId, this.salt);
|
|
215
|
+
if (!currentOverheadIgp) {
|
|
216
|
+
throw new Error('Overhead IGP account not initialized');
|
|
217
|
+
}
|
|
218
|
+
const overheadConfigsToUpdate = [];
|
|
219
|
+
for (const [domainStr, gas] of Object.entries(config.overhead)) {
|
|
220
|
+
const domain = Number(domainStr);
|
|
221
|
+
assert(Number.isInteger(domain) && domain >= 0, `Invalid domain: '${domainStr}'`);
|
|
222
|
+
const existingOverhead = currentOverheadIgp?.gasOverheads.get(domain);
|
|
223
|
+
const newOverhead = BigInt(gas);
|
|
224
|
+
if (!existingOverhead || existingOverhead !== newOverhead) {
|
|
225
|
+
overheadConfigsToUpdate.push({
|
|
226
|
+
destinationDomain: domain,
|
|
227
|
+
gasOverhead: newOverhead,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if (overheadConfigsToUpdate.length > 0) {
|
|
232
|
+
const { address: overheadIgpPda } = await deriveOverheadIgpAccountPda(programId, this.salt);
|
|
233
|
+
const setOverheadIx = await getSetDestinationGasOverheadsInstruction(programId, this.svmSigner.signer, overheadIgpPda, overheadConfigsToUpdate);
|
|
234
|
+
txs.push({
|
|
235
|
+
instructions: [setOverheadIx],
|
|
236
|
+
annotation: `Update gas overheads for ${overheadConfigsToUpdate.length} domains`,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
return txs;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=igp-hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"igp-hook.js","sourceRoot":"","sources":["../../src/hook/igp-hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type Rpc, type SolanaRpcApi } from '@solana/kit';
|
|
2
|
+
import { type ArtifactDeployed, type ArtifactNew, type ArtifactReader, type ArtifactWriter } from '@hyperlane-xyz/provider-sdk/artifact';
|
|
3
|
+
import type { MerkleTreeHookConfig } from '@hyperlane-xyz/provider-sdk/hook';
|
|
4
|
+
import type { SvmSigner } from '../clients/signer.js';
|
|
5
|
+
import type { AnnotatedSvmTransaction, SvmDeployedHook, SvmProgramTarget, SvmReceipt } from '../types.js';
|
|
6
|
+
export interface SvmMerkleTreeHookConfig extends MerkleTreeHookConfig {
|
|
7
|
+
program: SvmProgramTarget;
|
|
8
|
+
}
|
|
9
|
+
export declare class SvmMerkleTreeHookReader implements ArtifactReader<MerkleTreeHookConfig, SvmDeployedHook> {
|
|
10
|
+
protected readonly _rpc: Rpc<SolanaRpcApi>;
|
|
11
|
+
constructor(_rpc: Rpc<SolanaRpcApi>);
|
|
12
|
+
read(address: string): Promise<ArtifactDeployed<MerkleTreeHookConfig, SvmDeployedHook>>;
|
|
13
|
+
}
|
|
14
|
+
export declare class SvmMerkleTreeHookWriter extends SvmMerkleTreeHookReader implements ArtifactWriter<MerkleTreeHookConfig, SvmDeployedHook> {
|
|
15
|
+
protected readonly _signer: SvmSigner;
|
|
16
|
+
constructor(rpc: Rpc<SolanaRpcApi>, _signer: SvmSigner);
|
|
17
|
+
create(artifact: ArtifactNew<MerkleTreeHookConfig>): Promise<[
|
|
18
|
+
ArtifactDeployed<MerkleTreeHookConfig, SvmDeployedHook>,
|
|
19
|
+
SvmReceipt[]
|
|
20
|
+
]>;
|
|
21
|
+
update(_artifact: ArtifactDeployed<MerkleTreeHookConfig, SvmDeployedHook>): Promise<AnnotatedSvmTransaction[]>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=merkle-tree-hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merkle-tree-hook.d.ts","sourceRoot":"","sources":["../../src/hook/merkle-tree-hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,cAAc,EAEnB,KAAK,cAAc,EACpB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAE7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EACV,uBAAuB,EACvB,eAAe,EACf,gBAAgB,EAChB,UAAU,EACX,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,uBAAwB,SAAQ,oBAAoB;IACnE,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,qBAAa,uBAAwB,YAAW,cAAc,CAC5D,oBAAoB,EACpB,eAAe,CAChB;IACa,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC;gBAAvB,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC;IAEhD,IAAI,CACR,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;CASpE;AAED,qBAAa,uBACX,SAAQ,uBACR,YAAW,cAAc,CAAC,oBAAoB,EAAE,eAAe,CAAC;IAI9D,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS;gBADrC,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,EACH,OAAO,EAAE,SAAS;IAKjC,MAAM,CACV,QAAQ,EAAE,WAAW,CAAC,oBAAoB,CAAC,GAC1C,OAAO,CACR;QAAC,gBAAgB,CAAC,oBAAoB,EAAE,eAAe,CAAC;QAAE,UAAU,EAAE;KAAC,CACxE;IAqBK,MAAM,CACV,SAAS,EAAE,gBAAgB,CAAC,oBAAoB,EAAE,eAAe,CAAC,GACjE,OAAO,CAAC,uBAAuB,EAAE,CAAC;CAGtC"}
|