@humanode-hyperlane/starknet-sdk 0.0.0-stage → 27.2.3-humanode.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.
- package/LICENSE.md +193 -0
- package/dist/clients/protocol.d.ts +24 -0
- package/dist/clients/protocol.d.ts.map +1 -0
- package/dist/clients/protocol.js +55 -0
- package/dist/clients/protocol.js.map +1 -0
- package/dist/clients/protocol.test.d.ts +2 -0
- package/dist/clients/protocol.test.d.ts.map +1 -0
- package/dist/clients/protocol.test.js +36 -0
- package/dist/clients/protocol.test.js.map +1 -0
- package/dist/clients/provider.d.ts +93 -0
- package/dist/clients/provider.d.ts.map +1 -0
- package/dist/clients/provider.js +746 -0
- package/dist/clients/provider.js.map +1 -0
- package/dist/clients/provider.test.d.ts +2 -0
- package/dist/clients/provider.test.d.ts.map +1 -0
- package/dist/clients/provider.test.js +493 -0
- package/dist/clients/provider.test.js.map +1 -0
- package/dist/clients/signer.d.ts +56 -0
- package/dist/clients/signer.d.ts.map +1 -0
- package/dist/clients/signer.js +486 -0
- package/dist/clients/signer.js.map +1 -0
- package/dist/clients/signer.test.d.ts +2 -0
- package/dist/clients/signer.test.d.ts.map +1 -0
- package/dist/clients/signer.test.js +245 -0
- package/dist/clients/signer.test.js.map +1 -0
- package/dist/contracts.d.ts +43 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +310 -0
- package/dist/contracts.js.map +1 -0
- package/dist/contracts.test.d.ts +2 -0
- package/dist/contracts.test.d.ts.map +1 -0
- package/dist/contracts.test.js +56 -0
- package/dist/contracts.test.js.map +1 -0
- package/dist/hook/hook-artifact-manager.d.ts +18 -0
- package/dist/hook/hook-artifact-manager.d.ts.map +1 -0
- package/dist/hook/hook-artifact-manager.js +70 -0
- package/dist/hook/hook-artifact-manager.js.map +1 -0
- package/dist/hook/hook-artifact-manager.test.d.ts +2 -0
- package/dist/hook/hook-artifact-manager.test.d.ts.map +1 -0
- package/dist/hook/hook-artifact-manager.test.js +166 -0
- package/dist/hook/hook-artifact-manager.test.js.map +1 -0
- package/dist/hook/interchain-gas-paymaster-hook-artifact-manager.d.ts +5 -0
- package/dist/hook/interchain-gas-paymaster-hook-artifact-manager.d.ts.map +1 -0
- package/dist/hook/interchain-gas-paymaster-hook-artifact-manager.js +23 -0
- package/dist/hook/interchain-gas-paymaster-hook-artifact-manager.js.map +1 -0
- package/dist/hook/merkle-tree-hook-artifact-manager.d.ts +18 -0
- package/dist/hook/merkle-tree-hook-artifact-manager.d.ts.map +1 -0
- package/dist/hook/merkle-tree-hook-artifact-manager.js +43 -0
- package/dist/hook/merkle-tree-hook-artifact-manager.js.map +1 -0
- package/dist/hook/protocol-fee-hook-artifact-manager.d.ts +22 -0
- package/dist/hook/protocol-fee-hook-artifact-manager.d.ts.map +1 -0
- package/dist/hook/protocol-fee-hook-artifact-manager.js +169 -0
- package/dist/hook/protocol-fee-hook-artifact-manager.js.map +1 -0
- package/dist/hook/unknown-hook-artifact-manager.d.ts +14 -0
- package/dist/hook/unknown-hook-artifact-manager.d.ts.map +1 -0
- package/dist/hook/unknown-hook-artifact-manager.js +20 -0
- package/dist/hook/unknown-hook-artifact-manager.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/ism/domain-routing-ism-artifact-manager.d.ts +20 -0
- package/dist/ism/domain-routing-ism-artifact-manager.d.ts.map +1 -0
- package/dist/ism/domain-routing-ism-artifact-manager.js +136 -0
- package/dist/ism/domain-routing-ism-artifact-manager.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 +51 -0
- package/dist/ism/ism-artifact-manager.js.map +1 -0
- package/dist/ism/ism-artifact-manager.test.d.ts +2 -0
- package/dist/ism/ism-artifact-manager.test.d.ts.map +1 -0
- package/dist/ism/ism-artifact-manager.test.js +86 -0
- package/dist/ism/ism-artifact-manager.test.js.map +1 -0
- package/dist/ism/merkle-root-multisig-ism-artifact-manager.d.ts +20 -0
- package/dist/ism/merkle-root-multisig-ism-artifact-manager.d.ts.map +1 -0
- package/dist/ism/merkle-root-multisig-ism-artifact-manager.js +52 -0
- package/dist/ism/merkle-root-multisig-ism-artifact-manager.js.map +1 -0
- package/dist/ism/message-id-multisig-ism-artifact-manager.d.ts +20 -0
- package/dist/ism/message-id-multisig-ism-artifact-manager.d.ts.map +1 -0
- package/dist/ism/message-id-multisig-ism-artifact-manager.js +52 -0
- package/dist/ism/message-id-multisig-ism-artifact-manager.js.map +1 -0
- package/dist/ism/test-ism-artifact-manager.d.ts +20 -0
- package/dist/ism/test-ism-artifact-manager.d.ts.map +1 -0
- package/dist/ism/test-ism-artifact-manager.js +44 -0
- package/dist/ism/test-ism-artifact-manager.js.map +1 -0
- package/dist/mailbox/mailbox-artifact-manager.d.ts +15 -0
- package/dist/mailbox/mailbox-artifact-manager.d.ts.map +1 -0
- package/dist/mailbox/mailbox-artifact-manager.js +194 -0
- package/dist/mailbox/mailbox-artifact-manager.js.map +1 -0
- package/dist/mailbox/mailbox-artifact-manager.test.d.ts +2 -0
- package/dist/mailbox/mailbox-artifact-manager.test.d.ts.map +1 -0
- package/dist/mailbox/mailbox-artifact-manager.test.js +100 -0
- package/dist/mailbox/mailbox-artifact-manager.test.js.map +1 -0
- package/dist/testing/constants.d.ts +8 -0
- package/dist/testing/constants.d.ts.map +1 -0
- package/dist/testing/constants.js +27 -0
- package/dist/testing/constants.js.map +1 -0
- package/dist/testing/index.d.ts +4 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +4 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/node.d.ts +4 -0
- package/dist/testing/node.d.ts.map +1 -0
- package/dist/testing/node.js +77 -0
- package/dist/testing/node.js.map +1 -0
- package/dist/testing/utils.d.ts +6 -0
- package/dist/testing/utils.d.ts.map +1 -0
- package/dist/testing/utils.js +20 -0
- package/dist/testing/utils.js.map +1 -0
- package/dist/tests/e2e-test.setup.d.ts +2 -0
- package/dist/tests/e2e-test.setup.d.ts.map +1 -0
- package/dist/tests/e2e-test.setup.js +24 -0
- package/dist/tests/e2e-test.setup.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 +78 -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 +116 -0
- package/dist/tests/ism.e2e-test.js.map +1 -0
- 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 +112 -0
- package/dist/tests/mailbox.e2e-test.js.map +1 -0
- package/dist/tests/read-warp-token.e2e-test.d.ts +2 -0
- package/dist/tests/read-warp-token.e2e-test.d.ts.map +1 -0
- package/dist/tests/read-warp-token.e2e-test.js +67 -0
- package/dist/tests/read-warp-token.e2e-test.js.map +1 -0
- 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 +70 -0
- package/dist/tests/validator_announce.e2e-test.js.map +1 -0
- package/dist/tests/warp_core.e2e-test.d.ts +2 -0
- package/dist/tests/warp_core.e2e-test.d.ts.map +1 -0
- package/dist/tests/warp_core.e2e-test.js +109 -0
- package/dist/tests/warp_core.e2e-test.js.map +1 -0
- package/dist/tests/warp_transfer.e2e-test.d.ts +2 -0
- package/dist/tests/warp_transfer.e2e-test.d.ts.map +1 -0
- package/dist/tests/warp_transfer.e2e-test.js +95 -0
- package/dist/tests/warp_transfer.e2e-test.js.map +1 -0
- package/dist/types.d.ts +26 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validator-announce/validator-announce-artifact-manager.d.ts +14 -0
- package/dist/validator-announce/validator-announce-artifact-manager.d.ts.map +1 -0
- package/dist/validator-announce/validator-announce-artifact-manager.js +127 -0
- package/dist/validator-announce/validator-announce-artifact-manager.js.map +1 -0
- package/dist/validator-announce/validator-announce-artifact-manager.test.d.ts +2 -0
- package/dist/validator-announce/validator-announce-artifact-manager.test.d.ts.map +1 -0
- package/dist/validator-announce/validator-announce-artifact-manager.test.js +66 -0
- package/dist/validator-announce/validator-announce-artifact-manager.test.js.map +1 -0
- package/dist/warp/collateral-token-artifact-manager.d.ts +14 -0
- package/dist/warp/collateral-token-artifact-manager.d.ts.map +1 -0
- package/dist/warp/collateral-token-artifact-manager.js +43 -0
- package/dist/warp/collateral-token-artifact-manager.js.map +1 -0
- package/dist/warp/native-token-artifact-manager.d.ts +13 -0
- package/dist/warp/native-token-artifact-manager.d.ts.map +1 -0
- package/dist/warp/native-token-artifact-manager.js +28 -0
- package/dist/warp/native-token-artifact-manager.js.map +1 -0
- package/dist/warp/synthetic-token-artifact-manager.d.ts +15 -0
- package/dist/warp/synthetic-token-artifact-manager.d.ts.map +1 -0
- package/dist/warp/synthetic-token-artifact-manager.js +49 -0
- package/dist/warp/synthetic-token-artifact-manager.js.map +1 -0
- package/dist/warp/token-artifact-manager.d.ts +43 -0
- package/dist/warp/token-artifact-manager.d.ts.map +1 -0
- package/dist/warp/token-artifact-manager.js +241 -0
- package/dist/warp/token-artifact-manager.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 +54 -0
- package/dist/warp/warp-artifact-manager.js.map +1 -0
- package/dist/warp/warp-artifact-manager.test.d.ts +2 -0
- package/dist/warp/warp-artifact-manager.test.d.ts.map +1 -0
- package/dist/warp/warp-artifact-manager.test.js +128 -0
- package/dist/warp/warp-artifact-manager.test.js.map +1 -0
- package/package.json +53 -3
- package/README.md +0 -3
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { ArtifactState, } from '@humanode-hyperlane/provider-sdk/artifact';
|
|
2
|
+
import { assert, eqAddressStarknet, isNullish, rootLogger, } from '@humanode-hyperlane/utils';
|
|
3
|
+
import { hash } from 'starknet';
|
|
4
|
+
import { StarknetContractName, callContract, getFeeTokenAddress, getStarknetContract, normalizeStarknetAddressSafe, populateInvokeTx, shouldFallbackStorageRead, toBigInt, } from '../contracts.js';
|
|
5
|
+
const STARKNET_STORAGE_ADDRESS_BOUND = (1n << 251n) - 256n;
|
|
6
|
+
const logger = rootLogger.child({
|
|
7
|
+
module: 'starknet-hook-artifact-manager',
|
|
8
|
+
});
|
|
9
|
+
const MAX_PROTOCOL_FEE_STORAGE_KEYS = [
|
|
10
|
+
'max_protocol_fee',
|
|
11
|
+
'_max_protocol_fee',
|
|
12
|
+
].map((name) => hash.starknetKeccak(name) % STARKNET_STORAGE_ADDRESS_BOUND);
|
|
13
|
+
async function readUint256Storage(provider, contractAddress, key) {
|
|
14
|
+
try {
|
|
15
|
+
const rawProvider = provider.getRawProvider();
|
|
16
|
+
const [low, high] = await Promise.all([
|
|
17
|
+
rawProvider.getStorageAt(contractAddress, `0x${key.toString(16)}`),
|
|
18
|
+
rawProvider.getStorageAt(contractAddress, `0x${(key + 1n).toString(16)}`),
|
|
19
|
+
]);
|
|
20
|
+
return toBigInt(low) + (toBigInt(high) << 128n);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
if (!shouldFallbackStorageRead(error)) {
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
logger.warn({
|
|
27
|
+
contractAddress,
|
|
28
|
+
key: `0x${key.toString(16)}`,
|
|
29
|
+
error,
|
|
30
|
+
}, 'Falling back to lossy Starknet protocolFee max read after unsupported storage lookup');
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function readProtocolFeeMaxFromStorage(provider, contractAddress, protocolFee) {
|
|
35
|
+
// Different Starknet contract builds have used different storage keys for
|
|
36
|
+
// max_protocol_fee. Accept any candidate that is at least the live
|
|
37
|
+
// protocolFee, prefer a single non-zero value over zero sentinels, and only
|
|
38
|
+
// fall back to all candidates when multiple non-zero slots are populated.
|
|
39
|
+
const candidates = (await Promise.all(MAX_PROTOCOL_FEE_STORAGE_KEYS.map(async (key) => readUint256Storage(provider, contractAddress, key)))).filter((value) => value !== undefined && value >= protocolFee);
|
|
40
|
+
if (candidates.length === 0)
|
|
41
|
+
return undefined;
|
|
42
|
+
const nonZeroCandidates = candidates.filter((value) => value > 0n);
|
|
43
|
+
const relevantCandidates = nonZeroCandidates.length === 1 ? nonZeroCandidates : candidates;
|
|
44
|
+
const uniqueValues = [
|
|
45
|
+
...new Set(relevantCandidates.map((value) => value.toString())),
|
|
46
|
+
];
|
|
47
|
+
if (uniqueValues.length === 1) {
|
|
48
|
+
const uniqueValue = uniqueValues[0];
|
|
49
|
+
assert(!isNullish(uniqueValue), 'Expected Starknet protocolFee storage read to yield one value');
|
|
50
|
+
return BigInt(uniqueValue);
|
|
51
|
+
}
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
export class StarknetProtocolFeeHookReader {
|
|
55
|
+
chainMetadata;
|
|
56
|
+
provider;
|
|
57
|
+
constructor(chainMetadata, provider) {
|
|
58
|
+
this.chainMetadata = chainMetadata;
|
|
59
|
+
this.provider = provider;
|
|
60
|
+
}
|
|
61
|
+
async read(address) {
|
|
62
|
+
const normalizedAddress = normalizeStarknetAddressSafe(address);
|
|
63
|
+
const hook = getStarknetContract(StarknetContractName.PROTOCOL_FEE, normalizedAddress, this.provider.getRawProvider());
|
|
64
|
+
const [owner, beneficiary, protocolFee] = await Promise.all([
|
|
65
|
+
callContract(hook, 'owner'),
|
|
66
|
+
callContract(hook, 'get_beneficiary'),
|
|
67
|
+
callContract(hook, 'get_protocol_fee'),
|
|
68
|
+
]);
|
|
69
|
+
const ownerAddress = normalizeStarknetAddressSafe(owner);
|
|
70
|
+
const beneficiaryAddress = normalizeStarknetAddressSafe(beneficiary);
|
|
71
|
+
const protocolFeeAmount = toBigInt(protocolFee);
|
|
72
|
+
const maxProtocolFee = await readProtocolFeeMaxFromStorage(this.provider, normalizedAddress, protocolFeeAmount);
|
|
73
|
+
const config = {
|
|
74
|
+
type: 'protocolFee',
|
|
75
|
+
owner: ownerAddress,
|
|
76
|
+
beneficiary: beneficiaryAddress,
|
|
77
|
+
maxProtocolFee: (maxProtocolFee ?? protocolFeeAmount).toString(),
|
|
78
|
+
protocolFee: protocolFeeAmount.toString(),
|
|
79
|
+
};
|
|
80
|
+
if (isNullish(maxProtocolFee)) {
|
|
81
|
+
// Starknet protocol_fee does not expose maxProtocolFee in its ABI.
|
|
82
|
+
// If storage lookup is unavailable or ambiguous, mark the read config
|
|
83
|
+
// as lossy so generic deploy logic can fail closed instead of silently
|
|
84
|
+
// ignoring maxProtocolFee drift.
|
|
85
|
+
Object.defineProperty(config, '__maxProtocolFeeUnknown', {
|
|
86
|
+
enumerable: true,
|
|
87
|
+
value: true,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
artifactState: ArtifactState.DEPLOYED,
|
|
92
|
+
config,
|
|
93
|
+
deployed: { address: normalizedAddress },
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export class StarknetProtocolFeeHookWriter extends StarknetProtocolFeeHookReader {
|
|
98
|
+
signer;
|
|
99
|
+
constructor(chainMetadata, provider, signer) {
|
|
100
|
+
super(chainMetadata, provider);
|
|
101
|
+
this.signer = signer;
|
|
102
|
+
}
|
|
103
|
+
async create(artifact) {
|
|
104
|
+
const tokenAddress = getFeeTokenAddress({
|
|
105
|
+
chainName: this.chainMetadata.name,
|
|
106
|
+
nativeDenom: this.chainMetadata.nativeToken?.denom,
|
|
107
|
+
});
|
|
108
|
+
const deployTx = {
|
|
109
|
+
kind: 'deploy',
|
|
110
|
+
contractName: StarknetContractName.PROTOCOL_FEE,
|
|
111
|
+
constructorArgs: [
|
|
112
|
+
artifact.config.maxProtocolFee,
|
|
113
|
+
artifact.config.protocolFee,
|
|
114
|
+
normalizeStarknetAddressSafe(artifact.config.beneficiary),
|
|
115
|
+
normalizeStarknetAddressSafe(artifact.config.owner),
|
|
116
|
+
tokenAddress,
|
|
117
|
+
],
|
|
118
|
+
};
|
|
119
|
+
const receipt = await this.signer.sendAndConfirmTransaction(deployTx);
|
|
120
|
+
assert(receipt.contractAddress, 'failed to deploy Starknet protocol_fee hook');
|
|
121
|
+
return [
|
|
122
|
+
{
|
|
123
|
+
artifactState: ArtifactState.DEPLOYED,
|
|
124
|
+
config: artifact.config,
|
|
125
|
+
deployed: {
|
|
126
|
+
address: normalizeStarknetAddressSafe(receipt.contractAddress),
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
[receipt],
|
|
130
|
+
];
|
|
131
|
+
}
|
|
132
|
+
async update(artifact) {
|
|
133
|
+
const current = await this.read(artifact.deployed.address);
|
|
134
|
+
const maxProtocolFeeUnknown =
|
|
135
|
+
// CAST: Reflect.get requires an object argument; protocolFee config is always an object here.
|
|
136
|
+
Reflect.get(current.config, '__maxProtocolFeeUnknown') === true;
|
|
137
|
+
assert(!maxProtocolFeeUnknown, 'Cannot update Starknet protocolFee hook because the current maxProtocolFee is unreadable; redeploy required');
|
|
138
|
+
assert(current.config.maxProtocolFee === artifact.config.maxProtocolFee, 'Changing maxProtocolFee requires redeploying the Starknet protocolFee hook');
|
|
139
|
+
const contractAddress = artifact.deployed.address;
|
|
140
|
+
const contract = getStarknetContract(StarknetContractName.PROTOCOL_FEE, contractAddress, this.provider.getRawProvider());
|
|
141
|
+
const txs = [];
|
|
142
|
+
if (!eqAddressStarknet(current.config.beneficiary, artifact.config.beneficiary)) {
|
|
143
|
+
txs.push({
|
|
144
|
+
annotation: `Updating protocol fee beneficiary for ${contractAddress}`,
|
|
145
|
+
...(await populateInvokeTx(contract, 'set_beneficiary', [
|
|
146
|
+
normalizeStarknetAddressSafe(artifact.config.beneficiary),
|
|
147
|
+
])),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
if (current.config.protocolFee !== artifact.config.protocolFee) {
|
|
151
|
+
txs.push({
|
|
152
|
+
annotation: `Updating protocol fee amount for ${contractAddress}`,
|
|
153
|
+
...(await populateInvokeTx(contract, 'set_protocol_fee', [
|
|
154
|
+
artifact.config.protocolFee,
|
|
155
|
+
])),
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
if (!eqAddressStarknet(current.config.owner, artifact.config.owner)) {
|
|
159
|
+
txs.push({
|
|
160
|
+
annotation: `Transferring protocol fee hook ownership for ${contractAddress}`,
|
|
161
|
+
...(await populateInvokeTx(contract, 'transfer_ownership', [
|
|
162
|
+
normalizeStarknetAddressSafe(artifact.config.owner),
|
|
163
|
+
])),
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
return txs;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=protocol-fee-hook-artifact-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol-fee-hook-artifact-manager.js","sourceRoot":"","sources":["../../src/hook/protocol-fee-hook-artifact-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ArtifactDeployed, type ArtifactNew, type ArtifactReader, type ArtifactWriter } from '@humanode-hyperlane/provider-sdk/artifact';
|
|
2
|
+
import { type DeployedHookAddress, type RawHookArtifactConfigs } from '@humanode-hyperlane/provider-sdk/hook';
|
|
3
|
+
import { type AnnotatedTx, type TxReceipt } from '@humanode-hyperlane/provider-sdk/module';
|
|
4
|
+
export declare class StarknetUnknownHookReader implements ArtifactReader<RawHookArtifactConfigs['unknownHook'], DeployedHookAddress> {
|
|
5
|
+
read(address: string): Promise<ArtifactDeployed<RawHookArtifactConfigs['unknownHook'], DeployedHookAddress>>;
|
|
6
|
+
}
|
|
7
|
+
export declare class StarknetUnknownHookWriter extends StarknetUnknownHookReader implements ArtifactWriter<RawHookArtifactConfigs['unknownHook'], DeployedHookAddress> {
|
|
8
|
+
create(_artifact: ArtifactNew<RawHookArtifactConfigs['unknownHook']>): Promise<[
|
|
9
|
+
ArtifactDeployed<RawHookArtifactConfigs['unknownHook'], DeployedHookAddress>,
|
|
10
|
+
TxReceipt[]
|
|
11
|
+
]>;
|
|
12
|
+
update(_artifact: ArtifactDeployed<RawHookArtifactConfigs['unknownHook'], DeployedHookAddress>): Promise<AnnotatedTx[]>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=unknown-hook-artifact-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unknown-hook-artifact-manager.d.ts","sourceRoot":"","sources":["../../src/hook/unknown-hook-artifact-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,cAAc,EAEnB,KAAK,cAAc,EACpB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC5B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,yCAAyC,CAAC;AAIjD,qBAAa,yBAA0B,YAAW,cAAc,CAC9D,sBAAsB,CAAC,aAAa,CAAC,EACrC,mBAAmB,CACpB;IACO,IAAI,CACR,OAAO,EAAE,MAAM,GACd,OAAO,CACR,gBAAgB,CAAC,sBAAsB,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC,CAC7E;CAOF;AAED,qBAAa,yBACX,SAAQ,yBACR,YACE,cAAc,CAAC,sBAAsB,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IAEtE,MAAM,CACV,SAAS,EAAE,WAAW,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC,GAC5D,OAAO,CACR;QACE,gBAAgB,CACd,sBAAsB,CAAC,aAAa,CAAC,EACrC,mBAAmB,CACpB;QACD,SAAS,EAAE;KACZ,CACF;IAMK,MAAM,CACV,SAAS,EAAE,gBAAgB,CACzB,sBAAsB,CAAC,aAAa,CAAC,EACrC,mBAAmB,CACpB,GACA,OAAO,CAAC,WAAW,EAAE,CAAC;CAG1B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ArtifactState, } from '@humanode-hyperlane/provider-sdk/artifact';
|
|
2
|
+
import { normalizeStarknetAddressSafe } from '../contracts.js';
|
|
3
|
+
export class StarknetUnknownHookReader {
|
|
4
|
+
async read(address) {
|
|
5
|
+
return {
|
|
6
|
+
artifactState: ArtifactState.DEPLOYED,
|
|
7
|
+
config: { type: 'unknownHook' },
|
|
8
|
+
deployed: { address: normalizeStarknetAddressSafe(address) },
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class StarknetUnknownHookWriter extends StarknetUnknownHookReader {
|
|
13
|
+
async create(_artifact) {
|
|
14
|
+
throw new Error('unknownHook artifacts are read-only on Starknet; deploy noop hooks via signer.createNoopHook');
|
|
15
|
+
}
|
|
16
|
+
async update(_artifact) {
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=unknown-hook-artifact-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unknown-hook-artifact-manager.js","sourceRoot":"","sources":["../../src/hook/unknown-hook-artifact-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,aAAa,GAEd,MAAM,2CAA2C,CAAC;AAUnD,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAE/D,MAAM,OAAO,yBAAyB;IAIpC,KAAK,CAAC,IAAI,CACR,OAAe;QAIf,OAAO;YACL,aAAa,EAAE,aAAa,CAAC,QAAQ;YACrC,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;YAC/B,QAAQ,EAAE,EAAE,OAAO,EAAE,4BAA4B,CAAC,OAAO,CAAC,EAAE;SAC7D,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,yBACX,SAAQ,yBAAyB;IAIjC,KAAK,CAAC,MAAM,CACV,SAA6D;QAU7D,MAAM,IAAI,KAAK,CACb,8FAA8F,CAC/F,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CACV,SAGC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { StarknetProtocolProvider } from './clients/protocol.js';
|
|
2
|
+
export { StarknetProvider } from './clients/provider.js';
|
|
3
|
+
export { StarknetSigner } from './clients/signer.js';
|
|
4
|
+
export { StarknetIsmArtifactManager } from './ism/ism-artifact-manager.js';
|
|
5
|
+
export { StarknetHookArtifactManager } from './hook/hook-artifact-manager.js';
|
|
6
|
+
export { StarknetMailboxArtifactManager } from './mailbox/mailbox-artifact-manager.js';
|
|
7
|
+
export { StarknetValidatorAnnounceArtifactManager } from './validator-announce/validator-announce-artifact-manager.js';
|
|
8
|
+
export { StarknetWarpArtifactManager } from './warp/warp-artifact-manager.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,EAAE,wCAAwC,EAAE,MAAM,6DAA6D,CAAC;AACvH,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { StarknetProtocolProvider } from './clients/protocol.js';
|
|
2
|
+
export { StarknetProvider } from './clients/provider.js';
|
|
3
|
+
export { StarknetSigner } from './clients/signer.js';
|
|
4
|
+
export { StarknetIsmArtifactManager } from './ism/ism-artifact-manager.js';
|
|
5
|
+
export { StarknetHookArtifactManager } from './hook/hook-artifact-manager.js';
|
|
6
|
+
export { StarknetMailboxArtifactManager } from './mailbox/mailbox-artifact-manager.js';
|
|
7
|
+
export { StarknetValidatorAnnounceArtifactManager } from './validator-announce/validator-announce-artifact-manager.js';
|
|
8
|
+
export { StarknetWarpArtifactManager } from './warp/warp-artifact-manager.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,EAAE,wCAAwC,EAAE,MAAM,6DAA6D,CAAC;AACvH,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ArtifactDeployed, type ArtifactNew, type ArtifactReader, type ArtifactWriter } from '@humanode-hyperlane/provider-sdk/artifact';
|
|
2
|
+
import { type DeployedIsmAddress, type RawIsmArtifactConfigs } from '@humanode-hyperlane/provider-sdk/ism';
|
|
3
|
+
import { type AnnotatedTx, type TxReceipt } from '@humanode-hyperlane/provider-sdk/module';
|
|
4
|
+
import { StarknetProvider } from '../clients/provider.js';
|
|
5
|
+
import { StarknetSigner } from '../clients/signer.js';
|
|
6
|
+
export declare class StarknetRoutingIsmReader implements ArtifactReader<RawIsmArtifactConfigs['domainRoutingIsm'], DeployedIsmAddress> {
|
|
7
|
+
protected readonly provider: StarknetProvider;
|
|
8
|
+
constructor(provider: StarknetProvider);
|
|
9
|
+
read(address: string): Promise<ArtifactDeployed<RawIsmArtifactConfigs['domainRoutingIsm'], DeployedIsmAddress>>;
|
|
10
|
+
}
|
|
11
|
+
export declare class StarknetRoutingIsmWriter extends StarknetRoutingIsmReader implements ArtifactWriter<RawIsmArtifactConfigs['domainRoutingIsm'], DeployedIsmAddress> {
|
|
12
|
+
private readonly signer;
|
|
13
|
+
constructor(provider: StarknetProvider, signer: StarknetSigner);
|
|
14
|
+
create(artifact: ArtifactNew<RawIsmArtifactConfigs['domainRoutingIsm']>): Promise<[
|
|
15
|
+
ArtifactDeployed<RawIsmArtifactConfigs['domainRoutingIsm'], DeployedIsmAddress>,
|
|
16
|
+
TxReceipt[]
|
|
17
|
+
]>;
|
|
18
|
+
update(artifact: ArtifactDeployed<RawIsmArtifactConfigs['domainRoutingIsm'], DeployedIsmAddress>): Promise<AnnotatedTx[]>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=domain-routing-ism-artifact-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-routing-ism-artifact-manager.d.ts","sourceRoot":"","sources":["../../src/ism/domain-routing-ism-artifact-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,cAAc,EAEnB,KAAK,cAAc,EAIpB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC3B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,qBAAa,wBAAyB,YAAW,cAAc,CAC7D,qBAAqB,CAAC,kBAAkB,CAAC,EACzC,kBAAkB,CACnB;IACa,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB;gBAA1B,QAAQ,EAAE,gBAAgB;IAEnD,IAAI,CACR,OAAO,EAAE,MAAM,GACd,OAAO,CACR,gBAAgB,CACd,qBAAqB,CAAC,kBAAkB,CAAC,EACzC,kBAAkB,CACnB,CACF;CAuBF;AAED,qBAAa,wBACX,SAAQ,wBACR,YACE,cAAc,CACZ,qBAAqB,CAAC,kBAAkB,CAAC,EACzC,kBAAkB,CACnB;IAID,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADvB,QAAQ,EAAE,gBAAgB,EACT,MAAM,EAAE,cAAc;IAKnC,MAAM,CACV,QAAQ,EAAE,WAAW,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC,GAC/D,OAAO,CACR;QACE,gBAAgB,CACd,qBAAqB,CAAC,kBAAkB,CAAC,EACzC,kBAAkB,CACnB;QACD,SAAS,EAAE;KACZ,CACF;IA0DK,MAAM,CACV,QAAQ,EAAE,gBAAgB,CACxB,qBAAqB,CAAC,kBAAkB,CAAC,EACzC,kBAAkB,CACnB,GACA,OAAO,CAAC,WAAW,EAAE,CAAC;CA0E1B"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { ArtifactState, isArtifactDeployed, isArtifactNew, isArtifactUnderived, } from '@humanode-hyperlane/provider-sdk/artifact';
|
|
2
|
+
import { assert, eqAddressStarknet } from '@humanode-hyperlane/utils';
|
|
3
|
+
import { normalizeStarknetAddressSafe } from '../contracts.js';
|
|
4
|
+
export class StarknetRoutingIsmReader {
|
|
5
|
+
provider;
|
|
6
|
+
constructor(provider) {
|
|
7
|
+
this.provider = provider;
|
|
8
|
+
}
|
|
9
|
+
async read(address) {
|
|
10
|
+
const routing = await this.provider.getRoutingIsm({
|
|
11
|
+
ismAddress: address,
|
|
12
|
+
});
|
|
13
|
+
const domains = {};
|
|
14
|
+
for (const route of routing.routes) {
|
|
15
|
+
domains[route.domainId] = {
|
|
16
|
+
artifactState: ArtifactState.UNDERIVED,
|
|
17
|
+
deployed: { address: route.ismAddress },
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
artifactState: ArtifactState.DEPLOYED,
|
|
22
|
+
config: {
|
|
23
|
+
type: 'domainRoutingIsm',
|
|
24
|
+
owner: routing.owner,
|
|
25
|
+
domains,
|
|
26
|
+
},
|
|
27
|
+
deployed: { address: routing.address },
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class StarknetRoutingIsmWriter extends StarknetRoutingIsmReader {
|
|
32
|
+
signer;
|
|
33
|
+
constructor(provider, signer) {
|
|
34
|
+
super(provider);
|
|
35
|
+
this.signer = signer;
|
|
36
|
+
}
|
|
37
|
+
async create(artifact) {
|
|
38
|
+
const routes = Object.entries(artifact.config.domains).map(([domainId, domainIsm]) => {
|
|
39
|
+
assert(!isArtifactNew(domainIsm), `Routing ISM domain ${domainId} must be deployed before Starknet raw routing deployment`);
|
|
40
|
+
assert(isArtifactUnderived(domainIsm) || isArtifactDeployed(domainIsm), `Routing ISM domain ${domainId} has invalid state`);
|
|
41
|
+
return {
|
|
42
|
+
domainId: Number(domainId),
|
|
43
|
+
ismAddress: domainIsm.deployed.address,
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
const receipts = [];
|
|
47
|
+
const createTx = await this.signer.getCreateRoutingIsmTransaction({
|
|
48
|
+
signer: this.signer.getSignerAddress(),
|
|
49
|
+
routes,
|
|
50
|
+
});
|
|
51
|
+
const createReceipt = await this.signer.sendAndConfirmTransaction(createTx);
|
|
52
|
+
receipts.push(createReceipt);
|
|
53
|
+
const ismAddress = createReceipt.contractAddress;
|
|
54
|
+
assert(ismAddress, 'failed to get Starknet routing ISM address');
|
|
55
|
+
for (const route of routes) {
|
|
56
|
+
const tx = await this.signer.getSetRoutingIsmRouteTransaction({
|
|
57
|
+
signer: this.signer.getSignerAddress(),
|
|
58
|
+
ismAddress,
|
|
59
|
+
route,
|
|
60
|
+
});
|
|
61
|
+
receipts.push(await this.signer.sendAndConfirmTransaction(tx));
|
|
62
|
+
}
|
|
63
|
+
if (!eqAddressStarknet(artifact.config.owner, this.signer.getSignerAddress())) {
|
|
64
|
+
const ownerTx = await this.signer.getSetRoutingIsmOwnerTransaction({
|
|
65
|
+
signer: this.signer.getSignerAddress(),
|
|
66
|
+
ismAddress,
|
|
67
|
+
newOwner: artifact.config.owner,
|
|
68
|
+
});
|
|
69
|
+
receipts.push(await this.signer.sendAndConfirmTransaction(ownerTx));
|
|
70
|
+
}
|
|
71
|
+
return [
|
|
72
|
+
{
|
|
73
|
+
artifactState: ArtifactState.DEPLOYED,
|
|
74
|
+
config: artifact.config,
|
|
75
|
+
deployed: { address: ismAddress },
|
|
76
|
+
},
|
|
77
|
+
receipts,
|
|
78
|
+
];
|
|
79
|
+
}
|
|
80
|
+
async update(artifact) {
|
|
81
|
+
const current = await this.read(artifact.deployed.address);
|
|
82
|
+
const expectedRoutes = Object.entries(artifact.config.domains).map(([domainId, domainIsm]) => {
|
|
83
|
+
if (isArtifactUnderived(domainIsm) || isArtifactDeployed(domainIsm)) {
|
|
84
|
+
return {
|
|
85
|
+
domainId: Number(domainId),
|
|
86
|
+
ismAddress: normalizeStarknetAddressSafe(domainIsm.deployed.address),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
throw new Error(`Routing ISM domain ${domainId} has invalid state`);
|
|
90
|
+
});
|
|
91
|
+
const actualByDomain = new Map(Object.entries(current.config.domains).map(([domainId, domainIsm]) => [
|
|
92
|
+
Number(domainId),
|
|
93
|
+
normalizeStarknetAddressSafe(domainIsm.deployed.address),
|
|
94
|
+
]));
|
|
95
|
+
const expectedByDomain = new Map(expectedRoutes.map((route) => [route.domainId, route.ismAddress]));
|
|
96
|
+
const updateTxs = [];
|
|
97
|
+
for (const route of expectedRoutes) {
|
|
98
|
+
const actualAddress = actualByDomain.get(route.domainId);
|
|
99
|
+
if (!actualAddress ||
|
|
100
|
+
!eqAddressStarknet(actualAddress, route.ismAddress)) {
|
|
101
|
+
updateTxs.push({
|
|
102
|
+
annotation: `Setting routing ISM route ${route.domainId}`,
|
|
103
|
+
...(await this.signer.getSetRoutingIsmRouteTransaction({
|
|
104
|
+
signer: this.signer.getSignerAddress(),
|
|
105
|
+
ismAddress: artifact.deployed.address,
|
|
106
|
+
route,
|
|
107
|
+
})),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
for (const [domainId] of actualByDomain) {
|
|
112
|
+
if (!expectedByDomain.has(domainId)) {
|
|
113
|
+
updateTxs.push({
|
|
114
|
+
annotation: `Removing routing ISM route ${domainId}`,
|
|
115
|
+
...(await this.signer.getRemoveRoutingIsmRouteTransaction({
|
|
116
|
+
signer: this.signer.getSignerAddress(),
|
|
117
|
+
ismAddress: artifact.deployed.address,
|
|
118
|
+
domainId,
|
|
119
|
+
})),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (!eqAddressStarknet(current.config.owner, artifact.config.owner)) {
|
|
124
|
+
updateTxs.push({
|
|
125
|
+
annotation: `Updating routing ISM owner`,
|
|
126
|
+
...(await this.signer.getSetRoutingIsmOwnerTransaction({
|
|
127
|
+
signer: this.signer.getSignerAddress(),
|
|
128
|
+
ismAddress: artifact.deployed.address,
|
|
129
|
+
newOwner: artifact.config.owner,
|
|
130
|
+
})),
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return updateTxs;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=domain-routing-ism-artifact-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-routing-ism-artifact-manager.js","sourceRoot":"","sources":["../../src/ism/domain-routing-ism-artifact-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ChainMetadataForAltVM } from '@humanode-hyperlane/provider-sdk';
|
|
2
|
+
import { type ISigner } from '@humanode-hyperlane/provider-sdk/altvm';
|
|
3
|
+
import { type ArtifactReader, type ArtifactWriter } from '@humanode-hyperlane/provider-sdk/artifact';
|
|
4
|
+
import { type DeployedIsmAddress, type DeployedRawIsmArtifact, type IRawIsmArtifactManager, type IsmType, type RawIsmArtifactConfigs } from '@humanode-hyperlane/provider-sdk/ism';
|
|
5
|
+
import { type AnnotatedTx, type TxReceipt } from '@humanode-hyperlane/provider-sdk/module';
|
|
6
|
+
export declare class StarknetIsmArtifactManager implements IRawIsmArtifactManager {
|
|
7
|
+
private readonly provider;
|
|
8
|
+
constructor(chainMetadata: ChainMetadataForAltVM);
|
|
9
|
+
private requireStarknetSigner;
|
|
10
|
+
readIsm(address: string): Promise<DeployedRawIsmArtifact>;
|
|
11
|
+
createReader<T extends IsmType>(type: T): ArtifactReader<RawIsmArtifactConfigs[T], DeployedIsmAddress>;
|
|
12
|
+
createWriter<T extends IsmType>(type: T, signer: ISigner<AnnotatedTx, TxReceipt>): ArtifactWriter<RawIsmArtifactConfigs[T], DeployedIsmAddress>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=ism-artifact-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ism-artifact-manager.d.ts","sourceRoot":"","sources":["../../src/ism/ism-artifact-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,OAAO,EACZ,KAAK,qBAAqB,EAE3B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,yCAAyC,CAAC;AAsBjD,qBAAa,0BAA2B,YAAW,sBAAsB;IACvE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;gBAEhC,aAAa,EAAE,qBAAqB;IAQhD,OAAO,CAAC,qBAAqB;IAOvB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAS/D,YAAY,CAAC,CAAC,SAAS,OAAO,EAC5B,IAAI,EAAE,CAAC,GACN,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC;IAmB/D,YAAY,CAAC,CAAC,SAAS,OAAO,EAC5B,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,GACtC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC;CAoBhE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { AltVM, } from '@humanode-hyperlane/provider-sdk';
|
|
2
|
+
import { altVMIsmTypeToProviderSdkType, } from '@humanode-hyperlane/provider-sdk/ism';
|
|
3
|
+
import { assert } from '@humanode-hyperlane/utils';
|
|
4
|
+
import { StarknetProvider } from '../clients/provider.js';
|
|
5
|
+
import { StarknetSigner } from '../clients/signer.js';
|
|
6
|
+
import { StarknetRoutingIsmReader, StarknetRoutingIsmWriter, } from './domain-routing-ism-artifact-manager.js';
|
|
7
|
+
import { StarknetMerkleRootMultisigIsmReader, StarknetMerkleRootMultisigIsmWriter, } from './merkle-root-multisig-ism-artifact-manager.js';
|
|
8
|
+
import { StarknetMessageIdMultisigIsmReader, StarknetMessageIdMultisigIsmWriter, } from './message-id-multisig-ism-artifact-manager.js';
|
|
9
|
+
import { StarknetTestIsmReader, StarknetTestIsmWriter, } from './test-ism-artifact-manager.js';
|
|
10
|
+
export class StarknetIsmArtifactManager {
|
|
11
|
+
provider;
|
|
12
|
+
constructor(chainMetadata) {
|
|
13
|
+
this.provider = StarknetProvider.connect((chainMetadata.rpcUrls ?? []).map(({ http }) => http), chainMetadata.chainId, { metadata: chainMetadata });
|
|
14
|
+
}
|
|
15
|
+
requireStarknetSigner(signer) {
|
|
16
|
+
assert(signer instanceof StarknetSigner, 'Expected StarknetSigner');
|
|
17
|
+
return signer;
|
|
18
|
+
}
|
|
19
|
+
async readIsm(address) {
|
|
20
|
+
const type = await this.provider.getIsmType({ ismAddress: address });
|
|
21
|
+
if (type === AltVM.IsmType.CUSTOM) {
|
|
22
|
+
return this.createReader(AltVM.IsmType.TEST_ISM).read(address);
|
|
23
|
+
}
|
|
24
|
+
const reader = this.createReader(altVMIsmTypeToProviderSdkType(type));
|
|
25
|
+
return reader.read(address);
|
|
26
|
+
}
|
|
27
|
+
createReader(type) {
|
|
28
|
+
const readers = {
|
|
29
|
+
testIsm: () => new StarknetTestIsmReader(this.provider),
|
|
30
|
+
merkleRootMultisigIsm: () => new StarknetMerkleRootMultisigIsmReader(this.provider),
|
|
31
|
+
messageIdMultisigIsm: () => new StarknetMessageIdMultisigIsmReader(this.provider),
|
|
32
|
+
domainRoutingIsm: () => new StarknetRoutingIsmReader(this.provider),
|
|
33
|
+
};
|
|
34
|
+
const readerFactory = readers[type];
|
|
35
|
+
assert(readerFactory, `Unsupported Starknet ISM type: ${type}`);
|
|
36
|
+
return readerFactory();
|
|
37
|
+
}
|
|
38
|
+
createWriter(type, signer) {
|
|
39
|
+
const writers = {
|
|
40
|
+
testIsm: (starknetSigner) => new StarknetTestIsmWriter(this.provider, starknetSigner),
|
|
41
|
+
merkleRootMultisigIsm: (starknetSigner) => new StarknetMerkleRootMultisigIsmWriter(this.provider, starknetSigner),
|
|
42
|
+
messageIdMultisigIsm: (starknetSigner) => new StarknetMessageIdMultisigIsmWriter(this.provider, starknetSigner),
|
|
43
|
+
domainRoutingIsm: (starknetSigner) => new StarknetRoutingIsmWriter(this.provider, starknetSigner),
|
|
44
|
+
};
|
|
45
|
+
const writer = writers[type];
|
|
46
|
+
assert(writer, `Unsupported Starknet ISM type: ${type}`);
|
|
47
|
+
const starknetSigner = this.requireStarknetSigner(signer);
|
|
48
|
+
return writer(starknetSigner);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=ism-artifact-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ism-artifact-manager.js","sourceRoot":"","sources":["../../src/ism/ism-artifact-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,GAEN,MAAM,kCAAkC,CAAC;AAM1C,OAAO,EAML,6BAA6B,GAC9B,MAAM,sCAAsC,CAAC;AAK9C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,mCAAmC,EACnC,mCAAmC,GACpC,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACL,kCAAkC,EAClC,kCAAkC,GACnC,MAAM,+CAA+C,CAAC;AACvD,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,gCAAgC,CAAC;AAExC,MAAM,OAAO,0BAA0B;IACpB,QAAQ,CAAmB;IAE5C,YAAY,aAAoC;QAC9C,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CACtC,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EACrD,aAAa,CAAC,OAAO,EACrB,EAAE,QAAQ,EAAE,aAAa,EAAE,CAC5B,CAAC;IACJ,CAAC;IAEO,qBAAqB,CAC3B,MAAuC;QAEvC,MAAM,CAAC,MAAM,YAAY,cAAc,EAAE,yBAAyB,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe;QAC3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACrE,IAAI,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,YAAY,CACV,IAAO;QAEP,MAAM,OAAO,GAKR;YACH,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACvD,qBAAqB,EAAE,GAAG,EAAE,CAC1B,IAAI,mCAAmC,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxD,oBAAoB,EAAE,GAAG,EAAE,CACzB,IAAI,kCAAkC,CAAC,IAAI,CAAC,QAAQ,CAAC;YACvD,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC;SACpE,CAAC;QACF,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,aAAa,EAAE,kCAAkC,IAAI,EAAE,CAAC,CAAC;QAChE,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,YAAY,CACV,IAAO,EACP,MAAuC;QAEvC,MAAM,OAAO,GAIR;YACH,OAAO,EAAE,CAAC,cAAc,EAAE,EAAE,CAC1B,IAAI,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC;YAC1D,qBAAqB,EAAE,CAAC,cAAc,EAAE,EAAE,CACxC,IAAI,mCAAmC,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC;YACxE,oBAAoB,EAAE,CAAC,cAAc,EAAE,EAAE,CACvC,IAAI,kCAAkC,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC;YACvE,gBAAgB,EAAE,CAAC,cAAc,EAAE,EAAE,CACnC,IAAI,wBAAwB,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC;SAC9D,CAAC;QACF,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,EAAE,kCAAkC,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ism-artifact-manager.test.d.ts","sourceRoot":"","sources":["../../src/ism/ism-artifact-manager.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { RpcProvider } from 'starknet';
|
|
3
|
+
import { AltVM, ProtocolType } from '@humanode-hyperlane/provider-sdk';
|
|
4
|
+
import { ArtifactState } from '@humanode-hyperlane/provider-sdk/artifact';
|
|
5
|
+
import { StarknetSigner } from '../clients/signer.js';
|
|
6
|
+
import { StarknetIsmArtifactManager } from './ism-artifact-manager.js';
|
|
7
|
+
describe('StarknetIsmArtifactManager', () => {
|
|
8
|
+
const chainMetadata = {
|
|
9
|
+
name: 'starknetsepolia',
|
|
10
|
+
protocol: ProtocolType.Starknet,
|
|
11
|
+
chainId: 'SN_SEPOLIA',
|
|
12
|
+
domainId: 421614,
|
|
13
|
+
rpcUrls: [{ http: 'http://localhost:9545' }],
|
|
14
|
+
};
|
|
15
|
+
class MockStarknetSigner extends StarknetSigner {
|
|
16
|
+
capturedTxs = [];
|
|
17
|
+
constructor() {
|
|
18
|
+
super(new RpcProvider({ nodeUrl: 'http://localhost:9545' }), chainMetadata, ['http://localhost:9545'], '0x1', '0x1111111111111111111111111111111111111111111111111111111111111111');
|
|
19
|
+
}
|
|
20
|
+
async sendAndConfirmTransaction(tx) {
|
|
21
|
+
this.capturedTxs.push(tx);
|
|
22
|
+
return {
|
|
23
|
+
transactionHash: `0x${this.capturedTxs.length}`,
|
|
24
|
+
contractAddress: tx.kind === 'deploy' ? '0xabc' : undefined,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
it('throws for unsupported reader type', () => {
|
|
29
|
+
const manager = new StarknetIsmArtifactManager(chainMetadata);
|
|
30
|
+
expect(() => {
|
|
31
|
+
// @ts-expect-error testing runtime validation for unsupported value
|
|
32
|
+
manager.createReader('unsupported');
|
|
33
|
+
}).to.throw(/Unsupported Starknet ISM type/i);
|
|
34
|
+
});
|
|
35
|
+
it('throws for unsupported writer type', () => {
|
|
36
|
+
const manager = new StarknetIsmArtifactManager(chainMetadata);
|
|
37
|
+
expect(() => {
|
|
38
|
+
// @ts-expect-error testing runtime validation for unsupported value
|
|
39
|
+
manager.createWriter('unsupported', {});
|
|
40
|
+
}).to.throw(/Unsupported Starknet ISM type/i);
|
|
41
|
+
});
|
|
42
|
+
it('treats custom noop ISMs as testIsm on generic reads', async () => {
|
|
43
|
+
const manager = new StarknetIsmArtifactManager(chainMetadata);
|
|
44
|
+
const provider = Reflect.get(manager, 'provider');
|
|
45
|
+
provider.getIsmType = async () => AltVM.IsmType.CUSTOM;
|
|
46
|
+
provider.getNoopIsm = async ({ ismAddress }) => ({ address: ismAddress });
|
|
47
|
+
const artifact = await manager.readIsm('0xabc');
|
|
48
|
+
expect(artifact.config).to.deep.equal({ type: 'testIsm' });
|
|
49
|
+
expect(artifact.deployed.address).to.equal('0xabc');
|
|
50
|
+
});
|
|
51
|
+
it('returns noop ISM deployment receipts', async () => {
|
|
52
|
+
const manager = new StarknetIsmArtifactManager(chainMetadata);
|
|
53
|
+
const signer = new MockStarknetSigner();
|
|
54
|
+
const writer = manager.createWriter('testIsm', signer);
|
|
55
|
+
const [, receipts] = await writer.create({
|
|
56
|
+
artifactState: ArtifactState.NEW,
|
|
57
|
+
config: { type: 'testIsm' },
|
|
58
|
+
});
|
|
59
|
+
expect(receipts).to.have.length(1);
|
|
60
|
+
expect(signer.capturedTxs).to.have.length(1);
|
|
61
|
+
expect(signer.capturedTxs[0]?.kind).to.equal('deploy');
|
|
62
|
+
});
|
|
63
|
+
it('returns routing ISM deployment and route receipts', async () => {
|
|
64
|
+
const manager = new StarknetIsmArtifactManager(chainMetadata);
|
|
65
|
+
const signer = new MockStarknetSigner();
|
|
66
|
+
const writer = manager.createWriter('domainRoutingIsm', signer);
|
|
67
|
+
const [, receipts] = await writer.create({
|
|
68
|
+
artifactState: ArtifactState.NEW,
|
|
69
|
+
config: {
|
|
70
|
+
type: 'domainRoutingIsm',
|
|
71
|
+
owner: signer.getSignerAddress(),
|
|
72
|
+
domains: {
|
|
73
|
+
1337: {
|
|
74
|
+
artifactState: ArtifactState.UNDERIVED,
|
|
75
|
+
deployed: { address: '0x222' },
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
expect(receipts).to.have.length(2);
|
|
81
|
+
expect(signer.capturedTxs).to.have.length(2);
|
|
82
|
+
expect(signer.capturedTxs[0]?.kind).to.equal('deploy');
|
|
83
|
+
expect(signer.capturedTxs[1]?.kind).to.equal('invoke');
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=ism-artifact-manager.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ism-artifact-manager.test.js","sourceRoot":"","sources":["../../src/ism/ism-artifact-manager.test.ts"],"names":[],"mappings":"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"}
|