@hyperlane-xyz/sealevel-sdk 28.1.0 → 29.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist/clients/protocol.d.ts +2 -2
  2. package/dist/clients/protocol.d.ts.map +1 -1
  3. package/dist/clients/protocol.js +9 -7
  4. package/dist/clients/protocol.js.map +1 -1
  5. package/dist/clients/provider.js +1 -2
  6. package/dist/clients/provider.js.map +1 -1
  7. package/dist/clients/signer.d.ts +2 -2
  8. package/dist/clients/signer.d.ts.map +1 -1
  9. package/dist/clients/signer.js +6 -1
  10. package/dist/clients/signer.js.map +1 -1
  11. package/dist/constants.d.ts +1 -0
  12. package/dist/constants.d.ts.map +1 -1
  13. package/dist/constants.js +2 -0
  14. package/dist/constants.js.map +1 -1
  15. package/dist/core/mailbox-artifact-manager.d.ts +13 -0
  16. package/dist/core/mailbox-artifact-manager.d.ts.map +1 -0
  17. package/dist/core/mailbox-artifact-manager.js +24 -0
  18. package/dist/core/mailbox-artifact-manager.js.map +1 -0
  19. package/dist/core/mailbox-query.d.ts +23 -0
  20. package/dist/core/mailbox-query.d.ts.map +1 -0
  21. package/dist/core/mailbox-query.js +53 -0
  22. package/dist/core/mailbox-query.js.map +1 -0
  23. package/dist/core/mailbox-tx.d.ts +38 -0
  24. package/dist/core/mailbox-tx.d.ts.map +1 -0
  25. package/dist/core/mailbox-tx.js +74 -0
  26. package/dist/core/mailbox-tx.js.map +1 -0
  27. package/dist/core/mailbox.d.ts +21 -0
  28. package/dist/core/mailbox.d.ts.map +1 -0
  29. package/dist/core/mailbox.js +131 -0
  30. package/dist/core/mailbox.js.map +1 -0
  31. package/dist/core/types.d.ts +22 -0
  32. package/dist/core/types.d.ts.map +1 -0
  33. package/dist/core/types.js +2 -0
  34. package/dist/core/types.js.map +1 -0
  35. package/dist/core/validator-announce-artifact-manager.d.ts +13 -0
  36. package/dist/core/validator-announce-artifact-manager.d.ts.map +1 -0
  37. package/dist/core/validator-announce-artifact-manager.js +26 -0
  38. package/dist/core/validator-announce-artifact-manager.js.map +1 -0
  39. package/dist/core/validator-announce-query.d.ts +16 -0
  40. package/dist/core/validator-announce-query.d.ts.map +1 -0
  41. package/dist/core/validator-announce-query.js +42 -0
  42. package/dist/core/validator-announce-query.js.map +1 -0
  43. package/dist/core/validator-announce-tx.d.ts +37 -0
  44. package/dist/core/validator-announce-tx.d.ts.map +1 -0
  45. package/dist/core/validator-announce-tx.js +80 -0
  46. package/dist/core/validator-announce-tx.js.map +1 -0
  47. package/dist/core/validator-announce.d.ts +21 -0
  48. package/dist/core/validator-announce.d.ts.map +1 -0
  49. package/dist/core/validator-announce.js +66 -0
  50. package/dist/core/validator-announce.js.map +1 -0
  51. package/dist/hook/hook-artifact-manager.d.ts +4 -4
  52. package/dist/hook/hook-artifact-manager.d.ts.map +1 -1
  53. package/dist/hook/hook-artifact-manager.js +14 -7
  54. package/dist/hook/hook-artifact-manager.js.map +1 -1
  55. package/dist/hook/igp-hook.d.ts +12 -8
  56. package/dist/hook/igp-hook.d.ts.map +1 -1
  57. package/dist/hook/igp-hook.js +8 -3
  58. package/dist/hook/igp-hook.js.map +1 -1
  59. package/dist/hook/merkle-tree-hook.d.ts +17 -9
  60. package/dist/hook/merkle-tree-hook.d.ts.map +1 -1
  61. package/dist/hook/merkle-tree-hook.js +6 -10
  62. package/dist/hook/merkle-tree-hook.js.map +1 -1
  63. package/dist/index.d.ts +9 -2
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +9 -2
  66. package/dist/index.js.map +1 -1
  67. package/dist/ism/ism-artifact-manager.d.ts +2 -3
  68. package/dist/ism/ism-artifact-manager.d.ts.map +1 -1
  69. package/dist/ism/ism-artifact-manager.js +11 -5
  70. package/dist/ism/ism-artifact-manager.js.map +1 -1
  71. package/dist/ism/multisig-ism.d.ts +5 -5
  72. package/dist/ism/multisig-ism.d.ts.map +1 -1
  73. package/dist/ism/multisig-ism.js +1 -1
  74. package/dist/ism/multisig-ism.js.map +1 -1
  75. package/dist/ism/test-ism.d.ts +13 -8
  76. package/dist/ism/test-ism.d.ts.map +1 -1
  77. package/dist/ism/test-ism.js +7 -7
  78. package/dist/ism/test-ism.js.map +1 -1
  79. package/dist/pda.d.ts +4 -0
  80. package/dist/pda.d.ts.map +1 -1
  81. package/dist/pda.js +32 -0
  82. package/dist/pda.js.map +1 -1
  83. package/dist/testing/fixtures/docker-seccomp.json +713 -0
  84. package/dist/testing/fixtures/spl_token_2022_v10.so +0 -0
  85. package/dist/testing/setup.d.ts +2 -2
  86. package/dist/testing/setup.d.ts.map +1 -1
  87. package/dist/testing/setup.js +3 -2
  88. package/dist/testing/setup.js.map +1 -1
  89. package/dist/tests/collateral-token.e2e-test.js +4 -9
  90. package/dist/tests/collateral-token.e2e-test.js.map +1 -1
  91. package/dist/tests/e2e-test.setup.js +1 -0
  92. package/dist/tests/e2e-test.setup.js.map +1 -1
  93. package/dist/tests/hook.e2e-test.js +5 -12
  94. package/dist/tests/hook.e2e-test.js.map +1 -1
  95. package/dist/tests/ism.e2e-test.js +4 -8
  96. package/dist/tests/ism.e2e-test.js.map +1 -1
  97. package/dist/tests/mailbox.e2e-test.d.ts +2 -0
  98. package/dist/tests/mailbox.e2e-test.d.ts.map +1 -0
  99. package/dist/tests/mailbox.e2e-test.js +190 -0
  100. package/dist/tests/mailbox.e2e-test.js.map +1 -0
  101. package/dist/tests/native-token.e2e-test.js +4 -9
  102. package/dist/tests/native-token.e2e-test.js.map +1 -1
  103. package/dist/tests/provider.e2e-test.js +1 -2
  104. package/dist/tests/provider.e2e-test.js.map +1 -1
  105. package/dist/tests/synthetic-token.e2e-test.js +4 -9
  106. package/dist/tests/synthetic-token.e2e-test.js.map +1 -1
  107. package/dist/tests/validator-announce.e2e-test.d.ts +2 -0
  108. package/dist/tests/validator-announce.e2e-test.d.ts.map +1 -0
  109. package/dist/tests/validator-announce.e2e-test.js +103 -0
  110. package/dist/tests/validator-announce.e2e-test.js.map +1 -0
  111. package/dist/tx.d.ts +16 -2
  112. package/dist/tx.d.ts.map +1 -1
  113. package/dist/tx.js +48 -2
  114. package/dist/tx.js.map +1 -1
  115. package/dist/warp/collateral-token.d.ts.map +1 -1
  116. package/dist/warp/collateral-token.js +2 -2
  117. package/dist/warp/collateral-token.js.map +1 -1
  118. package/dist/warp/native-token.d.ts.map +1 -1
  119. package/dist/warp/native-token.js +2 -1
  120. package/dist/warp/native-token.js.map +1 -1
  121. package/dist/warp/synthetic-token.d.ts.map +1 -1
  122. package/dist/warp/synthetic-token.js +2 -2
  123. package/dist/warp/synthetic-token.js.map +1 -1
  124. package/package.json +7 -7
@@ -0,0 +1,131 @@
1
+ import { address as parseAddress } from '@solana/kit';
2
+ import { ArtifactState, } from '@hyperlane-xyz/provider-sdk/artifact';
3
+ import { ZERO_ADDRESS_HEX_32, assert, eqAddressSol, eqOptionalAddress, isEmptyAddress, isZeroishAddress, } from '@hyperlane-xyz/utils';
4
+ import { resolveProgram } from '../deploy/resolve-program.js';
5
+ import { buildInitMailboxInstruction, buildSetDefaultIsmInstruction, buildTransferMailboxOwnershipInstruction, } from './mailbox-tx.js';
6
+ import { fetchMailboxInboxAccount, fetchMailboxOutboxAccount, } from './mailbox-query.js';
7
+ import { DEFAULT_COMPUTE_UNITS } from '../constants.js';
8
+ // Default protocol fee values for mailbox initialization.
9
+ const DEFAULT_MAX_PROTOCOL_FEE = 1000000000n;
10
+ const DEFAULT_PROTOCOL_FEE = 0n;
11
+ export class SvmMailboxReader {
12
+ rpc;
13
+ constructor(rpc) {
14
+ this.rpc = rpc;
15
+ }
16
+ async read(address) {
17
+ const programId = parseAddress(address);
18
+ const inbox = await fetchMailboxInboxAccount(this.rpc, programId);
19
+ assert(inbox, `Mailbox inbox not initialized at ${programId}`);
20
+ const outbox = await fetchMailboxOutboxAccount(this.rpc, programId);
21
+ assert(outbox, `Mailbox outbox not initialized at ${programId}`);
22
+ // On SVM the mailbox IS the merkle tree hook — return the mailbox
23
+ // address for both defaultHook and requiredHook as UNDERIVED artifacts.
24
+ // NOTE: This is lossy. The SVM outbox account has no hook fields, so we
25
+ // cannot recover the original hook config (e.g. IGP). A `core read` →
26
+ // `core apply` round-trip with a non-merkleTreeHook config will redeploy
27
+ // hooks that already exist.
28
+ // Original hook addresses can be retrieved from the registry addresses if needed.
29
+ const mailboxHookRef = {
30
+ artifactState: ArtifactState.UNDERIVED,
31
+ deployed: { address: programId },
32
+ };
33
+ const config = {
34
+ owner: outbox.owner ?? ZERO_ADDRESS_HEX_32,
35
+ defaultIsm: {
36
+ artifactState: ArtifactState.UNDERIVED,
37
+ deployed: { address: inbox.defaultIsm },
38
+ },
39
+ defaultHook: mailboxHookRef,
40
+ requiredHook: mailboxHookRef,
41
+ };
42
+ return {
43
+ artifactState: ArtifactState.DEPLOYED,
44
+ config,
45
+ deployed: {
46
+ address: programId,
47
+ domainId: inbox.localDomain,
48
+ },
49
+ };
50
+ }
51
+ }
52
+ export class SvmMailboxWriter extends SvmMailboxReader {
53
+ config;
54
+ svmSigner;
55
+ constructor(config, rpc, svmSigner) {
56
+ super(rpc);
57
+ this.config = config;
58
+ this.svmSigner = svmSigner;
59
+ }
60
+ async create(artifact) {
61
+ const receipts = [];
62
+ const mailboxConfig = artifact.config;
63
+ const { programAddress, receipts: deployReceipts } = await resolveProgram(this.config.program, this.svmSigner, this.rpc);
64
+ receipts.push(...deployReceipts);
65
+ const existing = await fetchMailboxInboxAccount(this.rpc, programAddress);
66
+ if (existing) {
67
+ return [await this.read(programAddress), receipts];
68
+ }
69
+ const initData = {
70
+ localDomain: this.config.domainId,
71
+ defaultIsm: parseAddress(mailboxConfig.defaultIsm.deployed.address),
72
+ maxProtocolFee: DEFAULT_MAX_PROTOCOL_FEE,
73
+ protocolFee: {
74
+ fee: DEFAULT_PROTOCOL_FEE,
75
+ beneficiary: this.svmSigner.signer.address,
76
+ },
77
+ };
78
+ const initIx = await buildInitMailboxInstruction(programAddress, this.svmSigner.signer, initData);
79
+ receipts.push(await this.svmSigner.send({
80
+ instructions: [initIx],
81
+ computeUnits: DEFAULT_COMPUTE_UNITS,
82
+ skipPreflight: true,
83
+ }));
84
+ // Ownership is always set to signer at init time.
85
+ // Ownership transfer is handled separately via update().
86
+ return [
87
+ {
88
+ artifactState: ArtifactState.DEPLOYED,
89
+ config: { ...mailboxConfig, owner: this.svmSigner.signer.address },
90
+ deployed: {
91
+ address: programAddress,
92
+ domainId: this.config.domainId,
93
+ },
94
+ },
95
+ receipts,
96
+ ];
97
+ }
98
+ async update(artifact) {
99
+ const programId = parseAddress(artifact.deployed.address);
100
+ const current = await this.read(programId);
101
+ assert(!isZeroishAddress(current.config.owner), `Cannot update mailbox ${programId}: mailbox has no owner`);
102
+ const expected = artifact.config;
103
+ const ownerAddress = parseAddress(current.config.owner);
104
+ const txs = [];
105
+ // 1. Default ISM update
106
+ const currentIsm = current.config.defaultIsm.deployed.address;
107
+ const expectedIsm = expected.defaultIsm.deployed.address;
108
+ if (!eqAddressSol(currentIsm, expectedIsm)) {
109
+ txs.push({
110
+ instructions: [
111
+ await buildSetDefaultIsmInstruction(programId, ownerAddress, parseAddress(expectedIsm)),
112
+ ],
113
+ annotation: `Update mailbox ${programId}: set default ISM`,
114
+ });
115
+ }
116
+ // 2. Ownership transfer — always last
117
+ if (!eqOptionalAddress(current.config.owner, expected.owner, eqAddressSol)) {
118
+ const expectedOwner = !isEmptyAddress(expected.owner)
119
+ ? parseAddress(expected.owner)
120
+ : null;
121
+ txs.push({
122
+ instructions: [
123
+ await buildTransferMailboxOwnershipInstruction(programId, ownerAddress, expectedOwner),
124
+ ],
125
+ annotation: `Update mailbox ${programId}: transfer ownership`,
126
+ });
127
+ }
128
+ return txs;
129
+ }
130
+ }
131
+ //# sourceMappingURL=mailbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailbox.js","sourceRoot":"","sources":["../../src/core/mailbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { SvmProgramTarget } from '../types.js';
2
+ /**
3
+ * Deployment-time configuration for the SVM mailbox.
4
+ * Passed to the writer constructor; separate from the on-chain artifact config.
5
+ */
6
+ export type SvmMailboxConfig = Readonly<{
7
+ /** How to obtain the deployed program: fresh bytes or pre-existing ID. */
8
+ program: SvmProgramTarget;
9
+ /** The local domain ID for this mailbox. */
10
+ domainId: number;
11
+ }>;
12
+ /**
13
+ * Deployment-time configuration for the SVM validator announce.
14
+ * Passed to the writer constructor; separate from the on-chain artifact config.
15
+ */
16
+ export type SvmValidatorAnnounceConfig = Readonly<{
17
+ /** How to obtain the deployed program: fresh bytes or pre-existing ID. */
18
+ program: SvmProgramTarget;
19
+ /** The local domain ID for this validator announce. */
20
+ domainId: number;
21
+ }>;
22
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,0EAA0E;IAC1E,OAAO,EAAE,gBAAgB,CAAC;IAC1B,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC;IAChD,0EAA0E;IAC1E,OAAO,EAAE,gBAAgB,CAAC;IAC1B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { ArtifactReader, ArtifactWriter } from '@hyperlane-xyz/provider-sdk/artifact';
2
+ import type { DeployedRawValidatorAnnounceArtifact, DeployedValidatorAnnounceAddress, IRawValidatorAnnounceArtifactManager, RawValidatorAnnounceArtifactConfigs, ValidatorAnnounceType } from '@hyperlane-xyz/provider-sdk/validator-announce';
3
+ import type { SvmSigner } from '../clients/signer.js';
4
+ import type { SvmRpc } from '../types.js';
5
+ export declare class SvmValidatorAnnounceArtifactManager implements IRawValidatorAnnounceArtifactManager {
6
+ private readonly rpc;
7
+ private readonly domainId;
8
+ constructor(rpc: SvmRpc, domainId: number);
9
+ readValidatorAnnounce(address: string): Promise<DeployedRawValidatorAnnounceArtifact>;
10
+ createReader<T extends ValidatorAnnounceType>(_type: T): ArtifactReader<RawValidatorAnnounceArtifactConfigs[T], DeployedValidatorAnnounceAddress>;
11
+ createWriter<T extends ValidatorAnnounceType>(_type: T, signer: SvmSigner): ArtifactWriter<RawValidatorAnnounceArtifactConfigs[T], DeployedValidatorAnnounceAddress>;
12
+ }
13
+ //# sourceMappingURL=validator-announce-artifact-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator-announce-artifact-manager.d.ts","sourceRoot":"","sources":["../../src/core/validator-announce-artifact-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EACV,oCAAoC,EACpC,gCAAgC,EAChC,oCAAoC,EACpC,mCAAmC,EACnC,qBAAqB,EACtB,MAAM,gDAAgD,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAO1C,qBAAa,mCAAoC,YAAW,oCAAoC;IAE5F,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM;IAG7B,qBAAqB,CACzB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,oCAAoC,CAAC;IAKhD,YAAY,CAAC,CAAC,SAAS,qBAAqB,EAC1C,KAAK,EAAE,CAAC,GACP,cAAc,CACf,mCAAmC,CAAC,CAAC,CAAC,EACtC,gCAAgC,CACjC;IAID,YAAY,CAAC,CAAC,SAAS,qBAAqB,EAC1C,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,SAAS,GAChB,cAAc,CACf,mCAAmC,CAAC,CAAC,CAAC,EACtC,gCAAgC,CACjC;CAYF"}
@@ -0,0 +1,26 @@
1
+ import { HYPERLANE_SVM_PROGRAM_BYTES } from '../hyperlane/program-bytes.js';
2
+ import { SvmValidatorAnnounceReader, SvmValidatorAnnounceWriter, } from './validator-announce.js';
3
+ export class SvmValidatorAnnounceArtifactManager {
4
+ rpc;
5
+ domainId;
6
+ constructor(rpc, domainId) {
7
+ this.rpc = rpc;
8
+ this.domainId = domainId;
9
+ }
10
+ async readValidatorAnnounce(address) {
11
+ const reader = this.createReader('validatorAnnounce');
12
+ return reader.read(address);
13
+ }
14
+ createReader(_type) {
15
+ return new SvmValidatorAnnounceReader(this.rpc);
16
+ }
17
+ createWriter(_type, signer) {
18
+ return new SvmValidatorAnnounceWriter({
19
+ program: {
20
+ programBytes: HYPERLANE_SVM_PROGRAM_BYTES.validatorAnnounce,
21
+ },
22
+ domainId: this.domainId,
23
+ }, this.rpc, signer);
24
+ }
25
+ }
26
+ //# sourceMappingURL=validator-announce-artifact-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator-announce-artifact-manager.js","sourceRoot":"","sources":["../../src/core/validator-announce-artifact-manager.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAG5E,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,OAAO,mCAAmC;IAE3B;IACA;IAFnB,YACmB,GAAW,EACX,QAAgB;QADhB,QAAG,GAAH,GAAG,CAAQ;QACX,aAAQ,GAAR,QAAQ,CAAQ;IAChC,CAAC;IAEJ,KAAK,CAAC,qBAAqB,CACzB,OAAe;QAEf,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,YAAY,CACV,KAAQ;QAKR,OAAO,IAAI,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,YAAY,CACV,KAAQ,EACR,MAAiB;QAKjB,OAAO,IAAI,0BAA0B,CACnC;YACE,OAAO,EAAE;gBACP,YAAY,EAAE,2BAA2B,CAAC,iBAAiB;aAC5D;YACD,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,EACD,IAAI,CAAC,GAAG,EACR,MAAM,CACP,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import { type Address } from '@solana/kit';
2
+ import type { SvmRpc } from '../types.js';
3
+ export interface ValidatorAnnounceAccountData {
4
+ bumpSeed: number;
5
+ mailbox: Address;
6
+ localDomain: number;
7
+ }
8
+ export interface ValidatorStorageLocationsData {
9
+ bumpSeed: number;
10
+ storageLocations: string[];
11
+ }
12
+ export declare function decodeValidatorAnnounceAccount(raw: Uint8Array): ValidatorAnnounceAccountData | null;
13
+ export declare function decodeValidatorStorageLocationsAccount(raw: Uint8Array): ValidatorStorageLocationsData | null;
14
+ export declare function fetchValidatorAnnounceAccount(rpc: SvmRpc, programId: Address): Promise<ValidatorAnnounceAccountData | null>;
15
+ export declare function fetchValidatorStorageLocations(rpc: SvmRpc, programId: Address, validatorH160: Uint8Array): Promise<ValidatorStorageLocationsData | null>;
16
+ //# sourceMappingURL=validator-announce-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator-announce-query.d.ts","sourceRoot":"","sources":["../../src/core/validator-announce-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAW5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI1C,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,UAAU,GACd,4BAA4B,GAAG,IAAI,CAOrC;AAED,wBAAgB,sCAAsC,CACpD,GAAG,EAAE,UAAU,GACd,6BAA6B,GAAG,IAAI,CAWtC;AAED,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,OAAO,GACjB,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAK9C;AAED,wBAAsB,8BAA8B,CAClD,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,OAAO,EAClB,aAAa,EAAE,UAAU,GACxB,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC,CAU/C"}
@@ -0,0 +1,42 @@
1
+ import { getAddressCodec } from '@solana/kit';
2
+ import { assert } from '@hyperlane-xyz/utils';
3
+ import { decodeAccountData } from '../codecs/account-data.js';
4
+ import { deriveValidatorAnnouncePda, deriveValidatorStorageLocationsPda, } from '../pda.js';
5
+ import { fetchAccountDataRaw } from '../rpc.js';
6
+ const ADDRESS_CODEC = getAddressCodec();
7
+ export function decodeValidatorAnnounceAccount(raw) {
8
+ const { data } = decodeAccountData(raw, (cursor) => ({
9
+ bumpSeed: cursor.readU8(),
10
+ mailbox: cursor.readWithDecoder(ADDRESS_CODEC),
11
+ localDomain: cursor.readU32LE(),
12
+ }));
13
+ return data;
14
+ }
15
+ export function decodeValidatorStorageLocationsAccount(raw) {
16
+ const { data } = decodeAccountData(raw, (cursor) => {
17
+ const bumpSeed = cursor.readU8();
18
+ const count = cursor.readU32LE();
19
+ const storageLocations = [];
20
+ for (let i = 0; i < count; i++) {
21
+ storageLocations.push(cursor.readString());
22
+ }
23
+ return { bumpSeed, storageLocations };
24
+ });
25
+ return data;
26
+ }
27
+ export async function fetchValidatorAnnounceAccount(rpc, programId) {
28
+ const { address: announcePda } = await deriveValidatorAnnouncePda(programId);
29
+ const raw = await fetchAccountDataRaw(rpc, announcePda);
30
+ if (!raw)
31
+ return null;
32
+ return decodeValidatorAnnounceAccount(raw);
33
+ }
34
+ export async function fetchValidatorStorageLocations(rpc, programId, validatorH160) {
35
+ assert(validatorH160.length === 20, `Validator address must be 20 bytes (H160), got ${validatorH160.length}`);
36
+ const { address: storageLocationsPda } = await deriveValidatorStorageLocationsPda(programId, validatorH160);
37
+ const raw = await fetchAccountDataRaw(rpc, storageLocationsPda);
38
+ if (!raw)
39
+ return null;
40
+ return decodeValidatorStorageLocationsAccount(raw);
41
+ }
42
+ //# sourceMappingURL=validator-announce-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator-announce-query.js","sourceRoot":"","sources":["../../src/core/validator-announce-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAgB,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EACL,0BAA0B,EAC1B,kCAAkC,GACnC,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGhD,MAAM,aAAa,GAAG,eAAe,EAAE,CAAC;AAaxC,MAAM,UAAU,8BAA8B,CAC5C,GAAe;IAEf,MAAM,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,MAAkB,EAAE,EAAE,CAAC,CAAC;QAC/D,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QACzB,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC;QAC9C,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE;KAChC,CAAC,CAAC,CAAC;IACJ,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,sCAAsC,CACpD,GAAe;IAEf,MAAM,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,MAAkB,EAAE,EAAE;QAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QACjC,MAAM,gBAAgB,GAAa,EAAE,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,GAAW,EACX,SAAkB;IAElB,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,0BAA0B,CAAC,SAAS,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACxD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,8BAA8B,CAAC,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,GAAW,EACX,SAAkB,EAClB,aAAyB;IAEzB,MAAM,CACJ,aAAa,CAAC,MAAM,KAAK,EAAE,EAC3B,kDAAkD,aAAa,CAAC,MAAM,EAAE,CACzE,CAAC;IACF,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,GACpC,MAAM,kCAAkC,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAChE,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,sCAAsC,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { Address, Instruction, TransactionSigner } from '@solana/kit';
2
+ export interface ValidatorAnnounceInitData {
3
+ mailbox: Address;
4
+ localDomain: number;
5
+ }
6
+ export interface ValidatorAnnounceData {
7
+ /** 20-byte EVM validator address (H160) */
8
+ validator: Uint8Array;
9
+ storageLocation: string;
10
+ /** 65-byte ECDSA signature */
11
+ signature: Uint8Array;
12
+ }
13
+ /**
14
+ * Computes the replay ID for an announcement = keccak256(validator || storageLocation).
15
+ */
16
+ export declare function computeReplayId(validator: Uint8Array, storageLocation: string): Uint8Array;
17
+ /**
18
+ * Builds a validator announce Init instruction.
19
+ *
20
+ * Account layout (from Rust init_instruction):
21
+ * 0. [signer] Payer
22
+ * 1. [readonly] System program
23
+ * 2. [writable] ValidatorAnnounce PDA
24
+ */
25
+ export declare function buildInitValidatorAnnounceInstruction(programId: Address, payer: TransactionSigner, data: ValidatorAnnounceInitData): Promise<Instruction>;
26
+ /**
27
+ * Builds a validator Announce instruction.
28
+ *
29
+ * Account layout (from Rust process_announce):
30
+ * 0. [signer] Payer
31
+ * 1. [readonly] System program
32
+ * 2. [readonly] ValidatorAnnounce PDA
33
+ * 3. [writable] ValidatorStorageLocations PDA
34
+ * 4. [writable] ReplayProtection PDA
35
+ */
36
+ export declare function buildAnnounceInstruction(programId: Address, payer: TransactionSigner, data: ValidatorAnnounceData): Promise<Instruction>;
37
+ //# sourceMappingURL=validator-announce-tx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator-announce-tx.d.ts","sourceRoot":"","sources":["../../src/core/validator-announce-tx.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAgC3E,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,SAAS,EAAE,UAAU,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,8BAA8B;IAC9B,SAAS,EAAE,UAAU,CAAC;CACvB;AAgCD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,UAAU,EACrB,eAAe,EAAE,MAAM,GACtB,UAAU,CAMZ;AAED;;;;;;;GAOG;AACH,wBAAsB,qCAAqC,CACzD,SAAS,EAAE,OAAO,EAClB,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,WAAW,CAAC,CAWtB;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,OAAO,EAClB,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,WAAW,CAAC,CAqBtB"}
@@ -0,0 +1,80 @@
1
+ import { keccak_256 } from '@noble/hashes/sha3';
2
+ import { getAddressCodec } from '@solana/kit';
3
+ import { assert } from '@hyperlane-xyz/utils';
4
+ import { concatBytes, u32le, u8, vecBytes } from '../codecs/binary.js';
5
+ import { encodeH160 } from '../codecs/shared.js';
6
+ import { SYSTEM_PROGRAM_ADDRESS } from '../constants.js';
7
+ import { buildInstruction, readonlyAccount, readonlySigner, writableAccount, } from '../instructions/utils.js';
8
+ import { deriveReplayProtectionPda, deriveValidatorAnnouncePda, deriveValidatorStorageLocationsPda, } from '../pda.js';
9
+ const ADDRESS_CODEC = getAddressCodec();
10
+ const TEXT_ENCODER = new TextEncoder();
11
+ /**
12
+ * Borsh enum variant indices for the validator announce Instruction enum.
13
+ * See rust/sealevel/programs/validator-announce/src/instruction.rs
14
+ */
15
+ var ValidatorAnnounceInstructionVariant;
16
+ (function (ValidatorAnnounceInstructionVariant) {
17
+ ValidatorAnnounceInstructionVariant[ValidatorAnnounceInstructionVariant["Init"] = 0] = "Init";
18
+ ValidatorAnnounceInstructionVariant[ValidatorAnnounceInstructionVariant["Announce"] = 1] = "Announce";
19
+ })(ValidatorAnnounceInstructionVariant || (ValidatorAnnounceInstructionVariant = {}));
20
+ function encodeInit(data) {
21
+ return Uint8Array.from(concatBytes(u8(ValidatorAnnounceInstructionVariant.Init), ADDRESS_CODEC.encode(data.mailbox), u32le(data.localDomain)));
22
+ }
23
+ function encodeBorshString(value) {
24
+ const bytes = TEXT_ENCODER.encode(value);
25
+ return Uint8Array.from(concatBytes(u32le(bytes.length), bytes));
26
+ }
27
+ function encodeAnnounce(data) {
28
+ assert(data.signature.length === 65, `ECDSA signature must be 65 bytes (r + s + v), got ${data.signature.length}`);
29
+ return Uint8Array.from(concatBytes(u8(ValidatorAnnounceInstructionVariant.Announce), encodeH160(data.validator), encodeBorshString(data.storageLocation), vecBytes(data.signature)));
30
+ }
31
+ /**
32
+ * Computes the replay ID for an announcement = keccak256(validator || storageLocation).
33
+ */
34
+ export function computeReplayId(validator, storageLocation) {
35
+ const locationBytes = TEXT_ENCODER.encode(storageLocation);
36
+ const combined = new Uint8Array(validator.length + locationBytes.length);
37
+ combined.set(validator, 0);
38
+ combined.set(locationBytes, validator.length);
39
+ return keccak_256(combined);
40
+ }
41
+ /**
42
+ * Builds a validator announce Init instruction.
43
+ *
44
+ * Account layout (from Rust init_instruction):
45
+ * 0. [signer] Payer
46
+ * 1. [readonly] System program
47
+ * 2. [writable] ValidatorAnnounce PDA
48
+ */
49
+ export async function buildInitValidatorAnnounceInstruction(programId, payer, data) {
50
+ const { address: announcePda } = await deriveValidatorAnnouncePda(programId);
51
+ return buildInstruction(programId, [
52
+ readonlySigner(payer),
53
+ readonlyAccount(SYSTEM_PROGRAM_ADDRESS),
54
+ writableAccount(announcePda),
55
+ ], encodeInit(data));
56
+ }
57
+ /**
58
+ * Builds a validator Announce instruction.
59
+ *
60
+ * Account layout (from Rust process_announce):
61
+ * 0. [signer] Payer
62
+ * 1. [readonly] System program
63
+ * 2. [readonly] ValidatorAnnounce PDA
64
+ * 3. [writable] ValidatorStorageLocations PDA
65
+ * 4. [writable] ReplayProtection PDA
66
+ */
67
+ export async function buildAnnounceInstruction(programId, payer, data) {
68
+ const { address: announcePda } = await deriveValidatorAnnouncePda(programId);
69
+ const { address: storageLocationsPda } = await deriveValidatorStorageLocationsPda(programId, data.validator);
70
+ const replayId = computeReplayId(data.validator, data.storageLocation);
71
+ const { address: replayProtectionPda } = await deriveReplayProtectionPda(programId, replayId);
72
+ return buildInstruction(programId, [
73
+ readonlySigner(payer),
74
+ readonlyAccount(SYSTEM_PROGRAM_ADDRESS),
75
+ readonlyAccount(announcePda),
76
+ writableAccount(storageLocationsPda),
77
+ writableAccount(replayProtectionPda),
78
+ ], encodeAnnounce(data));
79
+ }
80
+ //# sourceMappingURL=validator-announce-tx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator-announce-tx.js","sourceRoot":"","sources":["../../src/core/validator-announce-tx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type ArtifactDeployed, type ArtifactNew, type ArtifactReader, type ArtifactWriter } from '@hyperlane-xyz/provider-sdk/artifact';
2
+ import type { DeployedValidatorAnnounceAddress, RawValidatorAnnounceConfig } from '@hyperlane-xyz/provider-sdk/validator-announce';
3
+ import type { SvmSigner } from '../clients/signer.js';
4
+ import type { AnnotatedSvmTransaction, SvmReceipt, SvmRpc } from '../types.js';
5
+ import type { SvmValidatorAnnounceConfig } from './types.js';
6
+ export declare class SvmValidatorAnnounceReader implements ArtifactReader<RawValidatorAnnounceConfig, DeployedValidatorAnnounceAddress> {
7
+ protected readonly rpc: SvmRpc;
8
+ constructor(rpc: SvmRpc);
9
+ read(address: string): Promise<ArtifactDeployed<RawValidatorAnnounceConfig, DeployedValidatorAnnounceAddress>>;
10
+ }
11
+ export declare class SvmValidatorAnnounceWriter extends SvmValidatorAnnounceReader implements ArtifactWriter<RawValidatorAnnounceConfig, DeployedValidatorAnnounceAddress> {
12
+ private readonly config;
13
+ private readonly svmSigner;
14
+ constructor(config: SvmValidatorAnnounceConfig, rpc: SvmRpc, svmSigner: SvmSigner);
15
+ create(artifact: ArtifactNew<RawValidatorAnnounceConfig>): Promise<[
16
+ ArtifactDeployed<RawValidatorAnnounceConfig, DeployedValidatorAnnounceAddress>,
17
+ SvmReceipt[]
18
+ ]>;
19
+ update(_artifact: ArtifactDeployed<RawValidatorAnnounceConfig, DeployedValidatorAnnounceAddress>): Promise<AnnotatedSvmTransaction[]>;
20
+ }
21
+ //# sourceMappingURL=validator-announce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator-announce.d.ts","sourceRoot":"","sources":["../../src/core/validator-announce.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,cAAc,EAEnB,KAAK,cAAc,EACpB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EACV,gCAAgC,EAChC,0BAA0B,EAC3B,MAAM,gDAAgD,CAAC;AAGxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAK/E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE7D,qBAAa,0BAA2B,YAAW,cAAc,CAC/D,0BAA0B,EAC1B,gCAAgC,CACjC;IACa,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;gBAAX,GAAG,EAAE,MAAM;IAEpC,IAAI,CACR,OAAO,EAAE,MAAM,GACd,OAAO,CACR,gBAAgB,CACd,0BAA0B,EAC1B,gCAAgC,CACjC,CACF;CAgBF;AAED,qBAAa,0BACX,SAAQ,0BACR,YACE,cAAc,CAAC,0BAA0B,EAAE,gCAAgC,CAAC;IAG5E,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFT,MAAM,EAAE,0BAA0B,EACnD,GAAG,EAAE,MAAM,EACM,SAAS,EAAE,SAAS;IAKjC,MAAM,CACV,QAAQ,EAAE,WAAW,CAAC,0BAA0B,CAAC,GAChD,OAAO,CACR;QACE,gBAAgB,CACd,0BAA0B,EAC1B,gCAAgC,CACjC;QACD,UAAU,EAAE;KACb,CACF;IAwDK,MAAM,CACV,SAAS,EAAE,gBAAgB,CACzB,0BAA0B,EAC1B,gCAAgC,CACjC,GACA,OAAO,CAAC,uBAAuB,EAAE,CAAC;CAItC"}
@@ -0,0 +1,66 @@
1
+ import { address as parseAddress } from '@solana/kit';
2
+ import { ArtifactState, } from '@hyperlane-xyz/provider-sdk/artifact';
3
+ import { assert, eqAddressSol, isNullish } from '@hyperlane-xyz/utils';
4
+ import { resolveProgram } from '../deploy/resolve-program.js';
5
+ import { fetchValidatorAnnounceAccount } from './validator-announce-query.js';
6
+ import { buildInitValidatorAnnounceInstruction } from './validator-announce-tx.js';
7
+ import { DEFAULT_COMPUTE_UNITS } from '../constants.js';
8
+ export class SvmValidatorAnnounceReader {
9
+ rpc;
10
+ constructor(rpc) {
11
+ this.rpc = rpc;
12
+ }
13
+ async read(address) {
14
+ const programId = parseAddress(address);
15
+ const account = await fetchValidatorAnnounceAccount(this.rpc, programId);
16
+ assert(account, `Validator announce not initialized at ${programId}`);
17
+ const config = {
18
+ mailboxAddress: account.mailbox,
19
+ };
20
+ return {
21
+ artifactState: ArtifactState.DEPLOYED,
22
+ config,
23
+ deployed: { address: programId },
24
+ };
25
+ }
26
+ }
27
+ export class SvmValidatorAnnounceWriter extends SvmValidatorAnnounceReader {
28
+ config;
29
+ svmSigner;
30
+ constructor(config, rpc, svmSigner) {
31
+ super(rpc);
32
+ this.config = config;
33
+ this.svmSigner = svmSigner;
34
+ }
35
+ async create(artifact) {
36
+ const receipts = [];
37
+ const { programAddress, receipts: deployReceipts } = await resolveProgram(this.config.program, this.svmSigner, this.rpc);
38
+ receipts.push(...deployReceipts);
39
+ const existing = await fetchValidatorAnnounceAccount(this.rpc, programAddress);
40
+ const deployed = {
41
+ artifactState: ArtifactState.DEPLOYED,
42
+ config: artifact.config,
43
+ deployed: { address: programAddress },
44
+ };
45
+ if (!isNullish(existing)) {
46
+ assert(eqAddressSol(existing.mailbox, artifact.config.mailboxAddress), `Validator announce ${programAddress} already initialized with mailbox ${existing.mailbox}, expected ${artifact.config.mailboxAddress}`);
47
+ assert(existing.localDomain === this.config.domainId, `VA ${programAddress} initialized for domain ${existing.localDomain}, expected ${this.config.domainId}`);
48
+ return [deployed, receipts];
49
+ }
50
+ const initIx = await buildInitValidatorAnnounceInstruction(programAddress, this.svmSigner.signer, {
51
+ mailbox: parseAddress(artifact.config.mailboxAddress),
52
+ localDomain: this.config.domainId,
53
+ });
54
+ receipts.push(await this.svmSigner.send({
55
+ instructions: [initIx],
56
+ computeUnits: DEFAULT_COMPUTE_UNITS,
57
+ skipPreflight: true,
58
+ }));
59
+ return [deployed, receipts];
60
+ }
61
+ async update(_artifact) {
62
+ // Validator announce has no mutable config fields after init.
63
+ return [];
64
+ }
65
+ }
66
+ //# sourceMappingURL=validator-announce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator-announce.js","sourceRoot":"","sources":["../../src/core/validator-announce.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,14 @@
1
- import { type Address, type Rpc, type SolanaRpcApi } from '@solana/kit';
1
+ import { type Address } from '@solana/kit';
2
2
  import type { ArtifactReader, ArtifactWriter } from '@hyperlane-xyz/provider-sdk/artifact';
3
- import type { DeployedHookArtifact, IRawHookArtifactManager, RawHookArtifactConfigs } from '@hyperlane-xyz/provider-sdk/hook';
3
+ import { type DeployedHookArtifact, type IRawHookArtifactManager, type RawHookArtifactConfigs } from '@hyperlane-xyz/provider-sdk/hook';
4
4
  import type { SvmSigner } from '../clients/signer.js';
5
- import type { SvmDeployedHook, SvmDeployedIgpHook } from '../types.js';
5
+ import type { SvmDeployedHook, SvmDeployedIgpHook, SvmRpc } from '../types.js';
6
6
  export type HookAccountDecoder = 'igpProgramData' | 'igp' | 'overheadIgp';
7
7
  export declare class SvmHookArtifactManager implements IRawHookArtifactManager {
8
8
  private readonly rpc;
9
9
  private readonly mailboxAddress?;
10
10
  private readonly salt;
11
- constructor(rpc: Rpc<SolanaRpcApi>, mailboxAddress?: Address | undefined, salt?: Uint8Array);
11
+ constructor(rpc: SvmRpc, mailboxAddress?: Address | undefined, salt?: Uint8Array);
12
12
  readHook(address: string): Promise<DeployedHookArtifact>;
13
13
  createReader<T extends keyof RawHookArtifactConfigs>(type: T): ArtifactReader<RawHookArtifactConfigs[T], SvmDeployedHook | SvmDeployedIgpHook>;
14
14
  createWriter<T extends keyof RawHookArtifactConfigs>(type: T, signer: SvmSigner): ArtifactWriter<RawHookArtifactConfigs[T], SvmDeployedHook | SvmDeployedIgpHook>;
@@ -1 +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,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,EACtB,cAAc,CAAC,EAAE,OAAO,YAAA,EACxB,IAAI,GAAE,UAA6B;IAGhD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAqB9D,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"}
1
+ {"version":3,"file":"hook-artifact-manager.d.ts","sourceRoot":"","sources":["../../src/hook/hook-artifact-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAGpE,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAE5B,MAAM,kCAAkC,CAAC;AAG1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAa/E,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,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,GAAG,EAAE,MAAM,EACX,cAAc,CAAC,EAAE,OAAO,YAAA,EACxB,IAAI,GAAE,UAA6B;IAGhD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAqB9D,YAAY,CAAC,CAAC,SAAS,MAAM,sBAAsB,EACjD,IAAI,EAAE,CAAC,GACN,cAAc,CACf,sBAAsB,CAAC,CAAC,CAAC,EACzB,eAAe,GAAG,kBAAkB,CACrC;IAiBD,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;IAiCD,OAAO,CAAC,cAAc;CAUvB"}
@@ -1,6 +1,8 @@
1
- import { address as parseAddress, } from '@solana/kit';
1
+ import { address as parseAddress } from '@solana/kit';
2
2
  import { HookType } from '@hyperlane-xyz/provider-sdk/altvm';
3
+ import { throwUnsupportedHookType, } from '@hyperlane-xyz/provider-sdk/hook';
3
4
  import { assert } from '@hyperlane-xyz/utils';
5
+ import { HYPERLANE_SVM_PROGRAM_BYTES } from '../hyperlane/program-bytes.js';
4
6
  import { detectHookType } from './hook-query.js';
5
7
  import { DEFAULT_IGP_SALT, SvmIgpHookReader, SvmIgpHookWriter, } from './igp-hook.js';
6
8
  import { SvmMerkleTreeHookReader, SvmMerkleTreeHookWriter, } from './merkle-tree-hook.js';
@@ -31,18 +33,23 @@ export class SvmHookArtifactManager {
31
33
  interchainGasPaymaster: () => new SvmIgpHookReader(this.rpc, this.salt),
32
34
  };
33
35
  const factory = readers[type];
34
- if (!factory)
35
- throw new Error(`Unsupported hook type: ${type}`);
36
+ if (!factory) {
37
+ return throwUnsupportedHookType(type, 'Sealevel');
38
+ }
36
39
  return factory();
37
40
  }
38
41
  createWriter(type, signer) {
39
42
  const writers = {
40
- merkleTreeHook: () => new SvmMerkleTreeHookWriter(this.rpc, signer),
41
- interchainGasPaymaster: () => new SvmIgpHookWriter(this.rpc, this.salt, signer),
43
+ merkleTreeHook: () => {
44
+ assert(this.mailboxAddress, 'Mailbox address is required to create a merkle tree hook writer on SVM');
45
+ return new SvmMerkleTreeHookWriter({ mailboxAddress: this.mailboxAddress }, this.rpc, signer);
46
+ },
47
+ interchainGasPaymaster: () => new SvmIgpHookWriter({ program: { programBytes: HYPERLANE_SVM_PROGRAM_BYTES.igp } }, this.rpc, this.salt, signer),
42
48
  };
43
49
  const factory = writers[type];
44
- if (!factory)
45
- throw new Error(`Unsupported hook type: ${type}`);
50
+ if (!factory) {
51
+ return throwUnsupportedHookType(type, 'Sealevel');
52
+ }
46
53
  return factory();
47
54
  }
48
55
  altVmToTypeKey(hookType) {
@@ -1 +1 @@
1
- {"version":3,"file":"hook-artifact-manager.js","sourceRoot":"","sources":["../../src/hook/hook-artifact-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hook-artifact-manager.js","sourceRoot":"","sources":["../../src/hook/hook-artifact-manager.ts"],"names":[],"mappings":"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"}