@hyperlane-xyz/sealevel-sdk 28.1.0 → 29.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/dist/clients/protocol.d.ts +2 -2
- package/dist/clients/protocol.d.ts.map +1 -1
- package/dist/clients/protocol.js +9 -7
- package/dist/clients/protocol.js.map +1 -1
- package/dist/clients/provider.js +1 -2
- package/dist/clients/provider.js.map +1 -1
- package/dist/clients/signer.d.ts +2 -2
- package/dist/clients/signer.d.ts.map +1 -1
- package/dist/clients/signer.js +6 -1
- package/dist/clients/signer.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/core/mailbox-artifact-manager.d.ts +13 -0
- package/dist/core/mailbox-artifact-manager.d.ts.map +1 -0
- package/dist/core/mailbox-artifact-manager.js +24 -0
- package/dist/core/mailbox-artifact-manager.js.map +1 -0
- package/dist/core/mailbox-query.d.ts +23 -0
- package/dist/core/mailbox-query.d.ts.map +1 -0
- package/dist/core/mailbox-query.js +53 -0
- package/dist/core/mailbox-query.js.map +1 -0
- package/dist/core/mailbox-tx.d.ts +38 -0
- package/dist/core/mailbox-tx.d.ts.map +1 -0
- package/dist/core/mailbox-tx.js +74 -0
- package/dist/core/mailbox-tx.js.map +1 -0
- package/dist/core/mailbox.d.ts +21 -0
- package/dist/core/mailbox.d.ts.map +1 -0
- package/dist/core/mailbox.js +131 -0
- package/dist/core/mailbox.js.map +1 -0
- package/dist/core/types.d.ts +22 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/validator-announce-artifact-manager.d.ts +13 -0
- package/dist/core/validator-announce-artifact-manager.d.ts.map +1 -0
- package/dist/core/validator-announce-artifact-manager.js +26 -0
- package/dist/core/validator-announce-artifact-manager.js.map +1 -0
- package/dist/core/validator-announce-query.d.ts +16 -0
- package/dist/core/validator-announce-query.d.ts.map +1 -0
- package/dist/core/validator-announce-query.js +42 -0
- package/dist/core/validator-announce-query.js.map +1 -0
- package/dist/core/validator-announce-tx.d.ts +37 -0
- package/dist/core/validator-announce-tx.d.ts.map +1 -0
- package/dist/core/validator-announce-tx.js +80 -0
- package/dist/core/validator-announce-tx.js.map +1 -0
- package/dist/core/validator-announce.d.ts +21 -0
- package/dist/core/validator-announce.d.ts.map +1 -0
- package/dist/core/validator-announce.js +66 -0
- package/dist/core/validator-announce.js.map +1 -0
- package/dist/hook/hook-artifact-manager.d.ts +4 -4
- package/dist/hook/hook-artifact-manager.d.ts.map +1 -1
- package/dist/hook/hook-artifact-manager.js +14 -7
- package/dist/hook/hook-artifact-manager.js.map +1 -1
- package/dist/hook/igp-hook.d.ts +12 -8
- package/dist/hook/igp-hook.d.ts.map +1 -1
- package/dist/hook/igp-hook.js +8 -3
- package/dist/hook/igp-hook.js.map +1 -1
- package/dist/hook/merkle-tree-hook.d.ts +17 -9
- package/dist/hook/merkle-tree-hook.d.ts.map +1 -1
- package/dist/hook/merkle-tree-hook.js +6 -10
- package/dist/hook/merkle-tree-hook.js.map +1 -1
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/ism/ism-artifact-manager.d.ts +2 -3
- package/dist/ism/ism-artifact-manager.d.ts.map +1 -1
- package/dist/ism/ism-artifact-manager.js +11 -5
- package/dist/ism/ism-artifact-manager.js.map +1 -1
- package/dist/ism/multisig-ism.d.ts +5 -5
- package/dist/ism/multisig-ism.d.ts.map +1 -1
- package/dist/ism/multisig-ism.js +1 -1
- package/dist/ism/multisig-ism.js.map +1 -1
- package/dist/ism/test-ism.d.ts +13 -8
- package/dist/ism/test-ism.d.ts.map +1 -1
- package/dist/ism/test-ism.js +7 -7
- package/dist/ism/test-ism.js.map +1 -1
- package/dist/pda.d.ts +4 -0
- package/dist/pda.d.ts.map +1 -1
- package/dist/pda.js +32 -0
- package/dist/pda.js.map +1 -1
- package/dist/testing/fixtures/docker-seccomp.json +713 -0
- package/dist/testing/fixtures/spl_token_2022_v10.so +0 -0
- package/dist/testing/setup.d.ts +2 -2
- package/dist/testing/setup.d.ts.map +1 -1
- package/dist/testing/setup.js +3 -2
- package/dist/testing/setup.js.map +1 -1
- package/dist/tests/collateral-token.e2e-test.js +4 -9
- package/dist/tests/collateral-token.e2e-test.js.map +1 -1
- package/dist/tests/e2e-test.setup.js +1 -0
- package/dist/tests/e2e-test.setup.js.map +1 -1
- package/dist/tests/hook.e2e-test.js +5 -12
- package/dist/tests/hook.e2e-test.js.map +1 -1
- package/dist/tests/ism.e2e-test.js +4 -8
- package/dist/tests/ism.e2e-test.js.map +1 -1
- package/dist/tests/mailbox.e2e-test.d.ts +2 -0
- package/dist/tests/mailbox.e2e-test.d.ts.map +1 -0
- package/dist/tests/mailbox.e2e-test.js +190 -0
- package/dist/tests/mailbox.e2e-test.js.map +1 -0
- package/dist/tests/native-token.e2e-test.js +4 -9
- package/dist/tests/native-token.e2e-test.js.map +1 -1
- package/dist/tests/provider.e2e-test.js +1 -2
- package/dist/tests/provider.e2e-test.js.map +1 -1
- package/dist/tests/synthetic-token.e2e-test.js +4 -9
- package/dist/tests/synthetic-token.e2e-test.js.map +1 -1
- package/dist/tests/validator-announce.e2e-test.d.ts +2 -0
- package/dist/tests/validator-announce.e2e-test.d.ts.map +1 -0
- package/dist/tests/validator-announce.e2e-test.js +103 -0
- package/dist/tests/validator-announce.e2e-test.js.map +1 -0
- package/dist/tx.d.ts +16 -2
- package/dist/tx.d.ts.map +1 -1
- package/dist/tx.js +48 -2
- package/dist/tx.js.map +1 -1
- package/dist/warp/collateral-token.d.ts.map +1 -1
- package/dist/warp/collateral-token.js +2 -2
- package/dist/warp/collateral-token.js.map +1 -1
- package/dist/warp/native-token.d.ts.map +1 -1
- package/dist/warp/native-token.js +2 -1
- package/dist/warp/native-token.js.map +1 -1
- package/dist/warp/synthetic-token.d.ts.map +1 -1
- package/dist/warp/synthetic-token.js +2 -2
- package/dist/warp/synthetic-token.js.map +1 -1
- 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 @@
|
|
|
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
|
|
1
|
+
import { type Address } from '@solana/kit';
|
|
2
2
|
import type { ArtifactReader, ArtifactWriter } from '@hyperlane-xyz/provider-sdk/artifact';
|
|
3
|
-
import type
|
|
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:
|
|
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,
|
|
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
|
|
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
|
-
|
|
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: () =>
|
|
41
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"hook-artifact-manager.js","sourceRoot":"","sources":["../../src/hook/hook-artifact-manager.ts"],"names":[],"mappings":"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"}
|