@suzaku-network/suzaku-cli 1.0.2
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 +96 -0
- package/README.md +1080 -0
- package/bin/cli.js +3 -0
- package/defaults/.env.anvil +4 -0
- package/defaults/.env.dexalot +7 -0
- package/defaults/.env.fuji +4 -0
- package/defaults/.env.kiteai +2 -0
- package/defaults/.env.mainnet +4 -0
- package/defaults/.env.template +10 -0
- package/dist/abis/AccessControl.d.ts +176 -0
- package/dist/abis/AccessControl.js +230 -0
- package/dist/abis/AccessControl.js.map +1 -0
- package/dist/abis/BalancerValidatorManager.d.ts +1121 -0
- package/dist/abis/BalancerValidatorManager.js +1469 -0
- package/dist/abis/BalancerValidatorManager.js.map +1 -0
- package/dist/abis/DefaultCollateral.d.ts +620 -0
- package/dist/abis/DefaultCollateral.js +811 -0
- package/dist/abis/DefaultCollateral.js.map +1 -0
- package/dist/abis/ERC20.d.ts +635 -0
- package/dist/abis/ERC20.js +831 -0
- package/dist/abis/ERC20.js.map +1 -0
- package/dist/abis/IWarpMessenger.d.ts +104 -0
- package/dist/abis/IWarpMessenger.js +139 -0
- package/dist/abis/IWarpMessenger.js.map +1 -0
- package/dist/abis/KiteStakingManager.d.ts +1459 -0
- package/dist/abis/KiteStakingManager.js +1886 -0
- package/dist/abis/KiteStakingManager.js.map +1 -0
- package/dist/abis/L1Middleware.d.ts +1712 -0
- package/dist/abis/L1Middleware.js +2242 -0
- package/dist/abis/L1Middleware.js.map +1 -0
- package/dist/abis/L1Registry.d.ts +415 -0
- package/dist/abis/L1Registry.js +544 -0
- package/dist/abis/L1Registry.js.map +1 -0
- package/dist/abis/L1RestakeDelegator.d.ts +865 -0
- package/dist/abis/L1RestakeDelegator.js +1118 -0
- package/dist/abis/L1RestakeDelegator.js.map +1 -0
- package/dist/abis/OperatorL1OptInService.d.ts +288 -0
- package/dist/abis/OperatorL1OptInService.js +374 -0
- package/dist/abis/OperatorL1OptInService.js.map +1 -0
- package/dist/abis/OperatorRegistry.d.ts +125 -0
- package/dist/abis/OperatorRegistry.js +166 -0
- package/dist/abis/OperatorRegistry.js.map +1 -0
- package/dist/abis/OperatorVaultOptInService.d.ts +288 -0
- package/dist/abis/OperatorVaultOptInService.js +374 -0
- package/dist/abis/OperatorVaultOptInService.js.map +1 -0
- package/dist/abis/Ownable.d.ts +59 -0
- package/dist/abis/Ownable.js +79 -0
- package/dist/abis/Ownable.js.map +1 -0
- package/dist/abis/PoASecurityModule.d.ts +225 -0
- package/dist/abis/PoASecurityModule.js +299 -0
- package/dist/abis/PoASecurityModule.js.map +1 -0
- package/dist/abis/RewardsNativeToken.d.ts +1334 -0
- package/dist/abis/RewardsNativeToken.js +1749 -0
- package/dist/abis/RewardsNativeToken.js.map +1 -0
- package/dist/abis/StakingVault.d.ts +2913 -0
- package/dist/abis/StakingVault.js +3780 -0
- package/dist/abis/StakingVault.js.map +1 -0
- package/dist/abis/StakingVaultOperations.d.ts +980 -0
- package/dist/abis/StakingVaultOperations.js +1270 -0
- package/dist/abis/StakingVaultOperations.js.map +1 -0
- package/dist/abis/UptimeTracker.d.ts +300 -0
- package/dist/abis/UptimeTracker.js +397 -0
- package/dist/abis/UptimeTracker.js.map +1 -0
- package/dist/abis/ValidatorManager.d.ts +842 -0
- package/dist/abis/ValidatorManager.js +1101 -0
- package/dist/abis/ValidatorManager.js.map +1 -0
- package/dist/abis/VaultFactory.d.ts +288 -0
- package/dist/abis/VaultFactory.js +378 -0
- package/dist/abis/VaultFactory.js.map +1 -0
- package/dist/abis/VaultManager.d.ts +519 -0
- package/dist/abis/VaultManager.js +678 -0
- package/dist/abis/VaultManager.js.map +1 -0
- package/dist/abis/VaultTokenized.d.ts +1626 -0
- package/dist/abis/VaultTokenized.js +2114 -0
- package/dist/abis/VaultTokenized.js.map +1 -0
- package/dist/abis/abi-selectors.json +700 -0
- package/dist/abis/index.d.ts +18356 -0
- package/dist/abis/index.js +58 -0
- package/dist/abis/index.js.map +1 -0
- package/dist/accessControl.d.ts +15 -0
- package/dist/accessControl.js +36 -0
- package/dist/accessControl.js.map +1 -0
- package/dist/balancer.d.ts +25 -0
- package/dist/balancer.js +42 -0
- package/dist/balancer.js.map +1 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +3183 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.mjs +31343 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/client.d.ts +34 -0
- package/dist/client.js +76 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.js +63 -0
- package/dist/config.js.map +1 -0
- package/dist/delegator.d.ts +4 -0
- package/dist/delegator.js +16 -0
- package/dist/delegator.js.map +1 -0
- package/dist/index.d.mts +19770 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +27451 -0
- package/dist/index.mjs.map +1 -0
- package/dist/keyStore.d.ts +3 -0
- package/dist/keyStore.js +105 -0
- package/dist/keyStore.js.map +1 -0
- package/dist/kiteStaking.d.ts +91 -0
- package/dist/kiteStaking.js +731 -0
- package/dist/kiteStaking.js.map +1 -0
- package/dist/l1.d.ts +5 -0
- package/dist/l1.js +22 -0
- package/dist/l1.js.map +1 -0
- package/dist/lib/autoCompletion.d.ts +3 -0
- package/dist/lib/autoCompletion.js +55 -0
- package/dist/lib/autoCompletion.js.map +1 -0
- package/dist/lib/cChainUtils.d.ts +42 -0
- package/dist/lib/cChainUtils.js +271 -0
- package/dist/lib/cChainUtils.js.map +1 -0
- package/dist/lib/castUtils.d.ts +18 -0
- package/dist/lib/castUtils.js +81 -0
- package/dist/lib/castUtils.js.map +1 -0
- package/dist/lib/chainList.d.ts +5 -0
- package/dist/lib/chainList.js +86 -0
- package/dist/lib/chainList.js.map +1 -0
- package/dist/lib/cliParser.d.ts +27 -0
- package/dist/lib/cliParser.js +167 -0
- package/dist/lib/cliParser.js.map +1 -0
- package/dist/lib/commandUtils.d.ts +13 -0
- package/dist/lib/commandUtils.js +38 -0
- package/dist/lib/commandUtils.js.map +1 -0
- package/dist/lib/coreWalletUtils.d.ts +3 -0
- package/dist/lib/coreWalletUtils.js +74 -0
- package/dist/lib/coreWalletUtils.js.map +1 -0
- package/dist/lib/justification.d.ts +90 -0
- package/dist/lib/justification.js +577 -0
- package/dist/lib/justification.js.map +1 -0
- package/dist/lib/ledgerUtils.d.ts +4 -0
- package/dist/lib/ledgerUtils.js +258 -0
- package/dist/lib/ledgerUtils.js.map +1 -0
- package/dist/lib/logger.d.ts +46 -0
- package/dist/lib/logger.js +226 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/pChainUtils.d.ts +128 -0
- package/dist/lib/pChainUtils.js +436 -0
- package/dist/lib/pChainUtils.js.map +1 -0
- package/dist/lib/pass.d.ts +81 -0
- package/dist/lib/pass.js +353 -0
- package/dist/lib/pass.js.map +1 -0
- package/dist/lib/safeUtils.d.ts +25 -0
- package/dist/lib/safeUtils.js +93 -0
- package/dist/lib/safeUtils.js.map +1 -0
- package/dist/lib/transferUtils.d.ts +643 -0
- package/dist/lib/transferUtils.js +141 -0
- package/dist/lib/transferUtils.js.map +1 -0
- package/dist/lib/utils.d.ts +28 -0
- package/dist/lib/utils.js +166 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/viemUtils.d.ts +80 -0
- package/dist/lib/viemUtils.js +317 -0
- package/dist/lib/viemUtils.js.map +1 -0
- package/dist/lib/warpUtils.d.ts +76 -0
- package/dist/lib/warpUtils.js +448 -0
- package/dist/lib/warpUtils.js.map +1 -0
- package/dist/middleware.d.ts +75 -0
- package/dist/middleware.js +430 -0
- package/dist/middleware.js.map +1 -0
- package/dist/operator.d.ts +4 -0
- package/dist/operator.js +22 -0
- package/dist/operator.js.map +1 -0
- package/dist/operatorOptIn.d.ts +8 -0
- package/dist/operatorOptIn.js +39 -0
- package/dist/operatorOptIn.js.map +1 -0
- package/dist/rewards.d.ts +116 -0
- package/dist/rewards.js +244 -0
- package/dist/rewards.js.map +1 -0
- package/dist/securityModule.d.ts +8 -0
- package/dist/securityModule.js +305 -0
- package/dist/securityModule.js.map +1 -0
- package/dist/stakingVault.d.ts +184 -0
- package/dist/stakingVault.js +1224 -0
- package/dist/stakingVault.js.map +1 -0
- package/dist/uptime.d.ts +54 -0
- package/dist/uptime.js +246 -0
- package/dist/uptime.js.map +1 -0
- package/dist/vault.d.ts +16 -0
- package/dist/vault.js +131 -0
- package/dist/vault.js.map +1 -0
- package/dist/vaultManager.d.ts +8 -0
- package/dist/vaultManager.js +40 -0
- package/dist/vaultManager.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.curriedContract = exports.isCastMode = exports.setCastMode = void 0;
|
|
7
|
+
exports.withSafeWrite = withSafeWrite;
|
|
8
|
+
exports.withMulticall = withMulticall;
|
|
9
|
+
exports.contractAbiValidation = contractAbiValidation;
|
|
10
|
+
const viem_1 = require("viem");
|
|
11
|
+
const abis_1 = require("../abis");
|
|
12
|
+
const logger_1 = require("./logger");
|
|
13
|
+
const utils_1 = require("./utils");
|
|
14
|
+
const console_log_colors_1 = require("console-log-colors");
|
|
15
|
+
const safeUtils_1 = require("./safeUtils");
|
|
16
|
+
const abi_selectors_json_1 = __importDefault(require("../abis/abi-selectors.json"));
|
|
17
|
+
const modern_ahocorasick_1 = __importDefault(require("modern-ahocorasick"));
|
|
18
|
+
const castUtils_1 = require("./castUtils");
|
|
19
|
+
var castUtils_2 = require("./castUtils");
|
|
20
|
+
Object.defineProperty(exports, "setCastMode", { enumerable: true, get: function () { return castUtils_2.setCastMode; } });
|
|
21
|
+
Object.defineProperty(exports, "isCastMode", { enumerable: true, get: function () { return castUtils_2.isCastMode; } });
|
|
22
|
+
function handleContractError(error, abi) {
|
|
23
|
+
if (error instanceof viem_1.ContractFunctionExecutionError) {
|
|
24
|
+
throw Error(`${abi} ${error.cause}`);
|
|
25
|
+
}
|
|
26
|
+
else if (error instanceof Error) {
|
|
27
|
+
const eraseToIndex = error.message.indexOf("Docs:");
|
|
28
|
+
if (eraseToIndex === -1)
|
|
29
|
+
throw error;
|
|
30
|
+
throw Error(`${abi} ${error.message.slice(0, eraseToIndex - 1)}`);
|
|
31
|
+
}
|
|
32
|
+
else if (error instanceof Object) {
|
|
33
|
+
const eraseToIndex = error.message.indexOf("Docs:");
|
|
34
|
+
if (eraseToIndex === -1)
|
|
35
|
+
throw error;
|
|
36
|
+
throw Error(`${abi} ${error.message.slice(0, eraseToIndex - 1)}`);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Map a proxy handler on safeWrite methods of the contract to simulate the write operation before executing it
|
|
43
|
+
function withSafeWrite(contract, abi, client, confirmations = 1) {
|
|
44
|
+
// Introspection
|
|
45
|
+
contract.name = abi;
|
|
46
|
+
if ('write' in contract) {
|
|
47
|
+
// Proxy handler for write methods to add Safe transaction handling and wait for confirmations
|
|
48
|
+
const writeHandler = {
|
|
49
|
+
get(target, prop) {
|
|
50
|
+
const fn = target[prop];
|
|
51
|
+
if (typeof fn !== 'function')
|
|
52
|
+
return fn;
|
|
53
|
+
return async (args, options) => {
|
|
54
|
+
try {
|
|
55
|
+
// ── Cast mode: log the equivalent cast send command and skip execution
|
|
56
|
+
if ((0, castUtils_1.isCastMode)()) {
|
|
57
|
+
const rpcUrl = client.chain?.rpcUrls?.default?.http?.[0];
|
|
58
|
+
(0, castUtils_1.logCastSend)(contract.name, contract.address, abis_1.SuzakuABI[abi], prop, Array.isArray(args) ? args : args != null ? [args] : [], rpcUrl, options);
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
let hash;
|
|
62
|
+
// If a safe smart account is connected, use it to send the transaction
|
|
63
|
+
if ("safe" in client && client.safe != undefined) {
|
|
64
|
+
const transaction = {
|
|
65
|
+
to: contract.address,
|
|
66
|
+
data: (0, viem_1.encodeFunctionData)({
|
|
67
|
+
abi: abis_1.SuzakuABI[abi],
|
|
68
|
+
functionName: prop,
|
|
69
|
+
args
|
|
70
|
+
}),
|
|
71
|
+
chain: null,
|
|
72
|
+
account: client.account,
|
|
73
|
+
...options,
|
|
74
|
+
value: options?.value ? options.value : '0',
|
|
75
|
+
};
|
|
76
|
+
const selection = await (0, safeUtils_1.handleTransactionStrategy)(transaction, client.safe, abis_1.SuzakuABI[abi], client.account.address);
|
|
77
|
+
switch (selection.action) {
|
|
78
|
+
case 'new':
|
|
79
|
+
logger_1.logger.debug(`Sending a new Safe transaction as owner`);
|
|
80
|
+
hash = (await client.safe.send({ transactions: [transaction] })).transactions?.ethereumTxHash;
|
|
81
|
+
break;
|
|
82
|
+
case 'confirm':
|
|
83
|
+
logger_1.logger.debug(`Confirming a Safe transaction as owner`);
|
|
84
|
+
hash = (await client.safe.confirm({ safeTxHash: selection.hash })).transactions?.ethereumTxHash;
|
|
85
|
+
break;
|
|
86
|
+
case 'propose':
|
|
87
|
+
logger_1.logger.debug(`Proposing a Safe transaction as delegate`);
|
|
88
|
+
const safeTransaction = await client.safe.protocolKit.createTransaction({
|
|
89
|
+
transactions: [transaction]
|
|
90
|
+
});
|
|
91
|
+
const safeTxHash = await client.safe.protocolKit.getTransactionHash(safeTransaction);
|
|
92
|
+
const signature = await client.safe.protocolKit.signHash(safeTxHash);
|
|
93
|
+
await client.safe.apiKit.proposeTransaction({
|
|
94
|
+
safeAddress: await client.safe.getAddress(),
|
|
95
|
+
safeTransactionData: safeTransaction.data,
|
|
96
|
+
safeTxHash,
|
|
97
|
+
senderAddress: (0, viem_1.getAddress)(client.account.address),
|
|
98
|
+
senderSignature: signature.data
|
|
99
|
+
});
|
|
100
|
+
hash = selection.hash;
|
|
101
|
+
break;
|
|
102
|
+
default: // same as skip
|
|
103
|
+
logger_1.logger.debug(`Skipping a Safe transaction`);
|
|
104
|
+
hash = selection.hash;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
hash = await fn(args, { chain: null, account: client.account, ...options });
|
|
109
|
+
}
|
|
110
|
+
const sig = `${contract.name}.${prop}(${args.join ? args.join(', ') : args})`;
|
|
111
|
+
logger_1.logger.addData('txs', { to: contract.address, invocation: sig, hash, options });
|
|
112
|
+
if (!hash)
|
|
113
|
+
return undefined; // when skipping
|
|
114
|
+
const receipt = await client.waitForTransactionReceipt({ hash, confirmations });
|
|
115
|
+
if (receipt.status === 'reverted')
|
|
116
|
+
throw new Error(`Transaction ${console_log_colors_1.color.red(sig)} (hash: ${hash}) reverted, pls resend the transaction:\n` + JSON.stringify(receipt.logs, utils_1.bigintReplacer));
|
|
117
|
+
const logs = (0, viem_1.parseEventLogs)({
|
|
118
|
+
abi: abis_1.SuzakuABI[abi],
|
|
119
|
+
logs: receipt.logs,
|
|
120
|
+
});
|
|
121
|
+
if (logs.length > 0) {
|
|
122
|
+
logger_1.logger.log("\nLogs emitted during the transaction:");
|
|
123
|
+
logger_1.logger.log(logs.map((log) => {
|
|
124
|
+
return ` ${console_log_colors_1.color.magenta(log.eventName)}${JSON.stringify(log.args, utils_1.bigintReplacer)}`;
|
|
125
|
+
}).join('\n'));
|
|
126
|
+
logger_1.logger.log("");
|
|
127
|
+
logger_1.logger.addData('receipt', receipt);
|
|
128
|
+
}
|
|
129
|
+
return hash;
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
handleContractError(error, abi);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
contract.write = new Proxy(contract.write, writeHandler);
|
|
138
|
+
// Proxy handler for safeWrite methods to simulate the write operation before executing it
|
|
139
|
+
const safeWriteHandler = {
|
|
140
|
+
get(target, prop) {
|
|
141
|
+
const fn = target[prop];
|
|
142
|
+
if (typeof fn !== 'function')
|
|
143
|
+
return fn;
|
|
144
|
+
return async (args, options) => {
|
|
145
|
+
try {
|
|
146
|
+
// Skip simulation in cast mode — the write handler will log the command
|
|
147
|
+
if (!(0, castUtils_1.isCastMode)()) {
|
|
148
|
+
const simulateFn = contract.simulate?.[prop];
|
|
149
|
+
if (typeof simulateFn === 'function') {
|
|
150
|
+
// If any safe is connected, use its address to simulate the transaction
|
|
151
|
+
await simulateFn(args, "safe" in client && client.safe != undefined ? { ...options, account: await client.safe.getAddress() } : options);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return await fn(args, options);
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
handleContractError(error, abi);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
contract.safeWrite = new Proxy(contract.write, safeWriteHandler);
|
|
163
|
+
}
|
|
164
|
+
return contract;
|
|
165
|
+
}
|
|
166
|
+
// Map a proxy handler on safeWrite methods of the contract to simulate the write operation before executing it
|
|
167
|
+
function withMulticall(contract, abi, client) {
|
|
168
|
+
// Introspection
|
|
169
|
+
contract.name = abi;
|
|
170
|
+
if ('read' in contract) {
|
|
171
|
+
// Proxy handler for read methods to catch and format errors
|
|
172
|
+
const readHandler = {
|
|
173
|
+
get(target, prop) {
|
|
174
|
+
const fn = target[prop];
|
|
175
|
+
if (typeof fn !== 'function')
|
|
176
|
+
return fn;
|
|
177
|
+
return async (...args) => {
|
|
178
|
+
try {
|
|
179
|
+
if ((0, castUtils_1.isCastMode)()) {
|
|
180
|
+
const rpcUrl = client.chain?.rpcUrls?.default?.http?.[0];
|
|
181
|
+
(0, castUtils_1.logCastCall)(contract.name, contract.address, abis_1.SuzakuABI[abi], prop, args, rpcUrl);
|
|
182
|
+
}
|
|
183
|
+
const result = await fn(...args);
|
|
184
|
+
const functionSignature = `${contract.name}.${prop}(${args.join ? args.join(', ') : args})`;
|
|
185
|
+
logger_1.logger.addData('receipt', { functionSignature, result });
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
handleContractError(error, abi);
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
contract.read = new Proxy(contract.read, readHandler);
|
|
195
|
+
// Multicall implementation for batching read operations
|
|
196
|
+
contract.multicall = async (items, options) => {
|
|
197
|
+
const contracts = items.map((item) => {
|
|
198
|
+
const functionName = typeof item === 'string' ? item : item.name;
|
|
199
|
+
const args = typeof item === 'object' && 'args' in item ? item.args : [];
|
|
200
|
+
return {
|
|
201
|
+
address: contract.address,
|
|
202
|
+
abi: abis_1.SuzakuABI[abi],
|
|
203
|
+
functionName,
|
|
204
|
+
args,
|
|
205
|
+
};
|
|
206
|
+
});
|
|
207
|
+
if ((0, castUtils_1.isCastMode)()) {
|
|
208
|
+
const rpcUrl = client.chain?.rpcUrls?.default?.http?.[0];
|
|
209
|
+
for (const c of contracts) {
|
|
210
|
+
(0, castUtils_1.logCastCall)(contract.name, c.address, c.abi, c.functionName, c.args ?? [], rpcUrl);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
const results = await client.multicall({ contracts: contracts });
|
|
214
|
+
return results.map((result, index) => {
|
|
215
|
+
const item = items[index];
|
|
216
|
+
const name = typeof item === 'string' ? item : item.name;
|
|
217
|
+
if (result.status === 'failure') {
|
|
218
|
+
if (options?.strict) {
|
|
219
|
+
throw new Error(`Multicall failed for ${name}: ${result.error}`);
|
|
220
|
+
}
|
|
221
|
+
logger_1.logger.warn(`Multicall failed for ${name}: ${result.error}`);
|
|
222
|
+
}
|
|
223
|
+
return options?.details ? {
|
|
224
|
+
name,
|
|
225
|
+
result: result.status === 'success' ? result.result : undefined,
|
|
226
|
+
args: typeof item === 'object' && 'args' in item ? item.args : [],
|
|
227
|
+
} : result.result;
|
|
228
|
+
});
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
return contract;
|
|
232
|
+
}
|
|
233
|
+
const curriedContract = (abi, client, wait = 0, skipAbiValidation = false) => async (address) => {
|
|
234
|
+
// format camelCase ABI name to SCREAMING_SNAKE_CASE for env var lookup
|
|
235
|
+
const envVar = abi.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();
|
|
236
|
+
if (!address) {
|
|
237
|
+
if (process.env[envVar])
|
|
238
|
+
address = process.env[envVar];
|
|
239
|
+
else
|
|
240
|
+
throw new Error(`Address is required to create a contract instance for ${abi}. Please provide associated option or set as environment variable ${envVar}`);
|
|
241
|
+
}
|
|
242
|
+
if (!skipAbiValidation) {
|
|
243
|
+
// (StakingVault uses delegatecall to forward to operations implementation)
|
|
244
|
+
// Skip ABI validation since functions are forwarded via fallback
|
|
245
|
+
if (abi.includes("StakingVault")) {
|
|
246
|
+
await contractAbiValidation(client, ["StakingVault"], address);
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
await contractAbiValidation(client, [abi], address);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
const contract = withMulticall((0, viem_1.getContract)({
|
|
253
|
+
abi: abis_1.SuzakuABI[abi],
|
|
254
|
+
address,
|
|
255
|
+
client,
|
|
256
|
+
}), abi, client);
|
|
257
|
+
return withSafeWrite(contract, abi, client, wait);
|
|
258
|
+
};
|
|
259
|
+
exports.curriedContract = curriedContract;
|
|
260
|
+
async function contractAbiValidation(client, abis, address) {
|
|
261
|
+
// Tolerance for missing selectors 6%
|
|
262
|
+
const TOLERANCE = 0.06;
|
|
263
|
+
// Check for proxy
|
|
264
|
+
const proxyImplementation = await client.getStorageAt({
|
|
265
|
+
address,
|
|
266
|
+
slot: '0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC' // EIP-1967 implementation slot
|
|
267
|
+
});
|
|
268
|
+
if (proxyImplementation !== '0x0000000000000000000000000000000000000000000000000000000000000000') {
|
|
269
|
+
address = (0, utils_1.bytes32ToAddress)(proxyImplementation);
|
|
270
|
+
logger_1.logger.debug(`Detected proxy contract. Using implementation at address ${address} for ABI validation.`);
|
|
271
|
+
}
|
|
272
|
+
let contractByteCode = await client.getCode({ address });
|
|
273
|
+
if (!contractByteCode || contractByteCode === '0x') {
|
|
274
|
+
logger_1.logger.exitError([`No contract found at address ${address} for ABIs ${abis.join(', ')}`], 3);
|
|
275
|
+
return [];
|
|
276
|
+
}
|
|
277
|
+
// Check for EIP-1167 minimal proxy
|
|
278
|
+
if (contractByteCode.startsWith('0x363d3d373d3d3d363d73') && contractByteCode.endsWith('5af43d82803e903d91602b57fd5bf3')) {
|
|
279
|
+
const implementationAddress = '0x' + contractByteCode.slice(22, 62);
|
|
280
|
+
logger_1.logger.debug(`Detected EIP-1167 minimal proxy. Using implementation at address ${implementationAddress} for ABI validation.`);
|
|
281
|
+
contractByteCode = await client.getCode({ address: implementationAddress });
|
|
282
|
+
if (!contractByteCode || contractByteCode === '0x') {
|
|
283
|
+
logger_1.logger.exitError([`No contract found at address ${address} for ABIs ${abis.join(', ')}`], 3);
|
|
284
|
+
return [];
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// Validate ABI by checking that all function selectors are present in the bytecode
|
|
288
|
+
const ACs = abis.map((abi) => {
|
|
289
|
+
const selectors = abi_selectors_json_1.default[abi];
|
|
290
|
+
if (!selectors) {
|
|
291
|
+
logger_1.logger.warn(`No selectors found for ABI ${abi}, skipping validation`);
|
|
292
|
+
return [new modern_ahocorasick_1.default([]), 0];
|
|
293
|
+
}
|
|
294
|
+
return [new modern_ahocorasick_1.default(selectors), Object.keys(selectors).length];
|
|
295
|
+
}); // Use Aho-Corasick algorithm for multi-pattern search (perf)
|
|
296
|
+
const missingRatio = ACs.map(([ac, selectorCount]) => {
|
|
297
|
+
const matches = new Set(ac.search(contractByteCode).map(m => m[1][0])); // get only the matched selectors
|
|
298
|
+
// Validation
|
|
299
|
+
const missingCount = selectorCount - matches.size;
|
|
300
|
+
return [missingCount, missingCount / selectorCount, matches];
|
|
301
|
+
});
|
|
302
|
+
const result = missingRatio.reduce((acc, [missingCount, ratio, matches], i) => {
|
|
303
|
+
if (ratio > 0) {
|
|
304
|
+
const selectors = abi_selectors_json_1.default[abis[i]];
|
|
305
|
+
logger_1.logger.debug(`ABI validation for contract ${abis[i]} at address ${address}: ${matches.size} selectors matched, ${missingCount} missing (${(ratio * 100).toFixed(2)}% missing)`);
|
|
306
|
+
if (selectors) {
|
|
307
|
+
logger_1.logger.debug(`Missing selectors: ${selectors.filter((s) => !matches.has(s)).join(', ')}`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return [...acc, { name: abis[i], ratio, valid: ratio < TOLERANCE }];
|
|
311
|
+
}, []);
|
|
312
|
+
if (result.every(r => !r.valid)) {
|
|
313
|
+
logger_1.logger.exitError([`The contract at address ${address} does not match the expected ABI for ${abis.join(', ')} contract.`], 3);
|
|
314
|
+
}
|
|
315
|
+
return result;
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=viemUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viemUtils.js","sourceRoot":"","sources":["../../src/lib/viemUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Hex, Log } from 'viem';
|
|
2
|
+
import { PChainOwner } from './justification';
|
|
3
|
+
import { ExtendedClient, Network } from '../client';
|
|
4
|
+
interface CollectSignaturesProps {
|
|
5
|
+
network: Network;
|
|
6
|
+
message: string;
|
|
7
|
+
justification?: string;
|
|
8
|
+
signingSubnetId?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface PackL1ConversionMessageArgs {
|
|
11
|
+
subnetId: string;
|
|
12
|
+
managerChainID: string;
|
|
13
|
+
managerAddress: string;
|
|
14
|
+
validators: SubnetToL1ConversionValidatorData[];
|
|
15
|
+
}
|
|
16
|
+
export interface SubnetToL1ConversionValidatorData {
|
|
17
|
+
nodeID: string;
|
|
18
|
+
nodePOP: {
|
|
19
|
+
publicKey: string;
|
|
20
|
+
proofOfPossession: string;
|
|
21
|
+
};
|
|
22
|
+
weight: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function packL1ConversionMessage(args: PackL1ConversionMessageArgs, networkID: number, sourceChainID: string): [Uint8Array, Uint8Array];
|
|
25
|
+
export declare function subnetToL1ConversionID(args: PackL1ConversionMessageArgs): Uint8Array;
|
|
26
|
+
export declare function marshalSubnetToL1ConversionData(args: PackL1ConversionMessageArgs): Uint8Array;
|
|
27
|
+
export declare const compareNodeIDs: (a: string, b: string) => number;
|
|
28
|
+
export declare function packWarpIntoAccessList(warpMessageBytes: Uint8Array): [
|
|
29
|
+
{
|
|
30
|
+
address: Hex;
|
|
31
|
+
storageKeys: Hex[];
|
|
32
|
+
}
|
|
33
|
+
];
|
|
34
|
+
export declare function collectSignaturesInitializeValidatorSet(params: {
|
|
35
|
+
network: Network;
|
|
36
|
+
subnetId: string;
|
|
37
|
+
validatorManagerBlockchainID: string;
|
|
38
|
+
validatorManagerSubnetID: string;
|
|
39
|
+
managerAddress: Hex;
|
|
40
|
+
validators: {
|
|
41
|
+
nodeID: string;
|
|
42
|
+
blsPublicKey: string;
|
|
43
|
+
blsProofOfPossession: string;
|
|
44
|
+
weight: number;
|
|
45
|
+
balance: number;
|
|
46
|
+
}[];
|
|
47
|
+
}): Promise<string>;
|
|
48
|
+
export declare function getSigningSubnetIdFromWarpMessage(client: ExtendedClient, message: string): Promise<string>;
|
|
49
|
+
export declare function collectSignatures({ network, message, justification, signingSubnetId }: CollectSignaturesProps): Promise<Hex>;
|
|
50
|
+
export declare function packL1ValidatorRegistration(validationID: Uint8Array, registered: boolean, networkID: number, sourceChainID: string): Uint8Array;
|
|
51
|
+
export declare function packL1ValidatorWeightMessage(validationID: Uint8Array, nonce: bigint, weight: bigint, networkID: number, sourceChainID: string): Uint8Array;
|
|
52
|
+
export interface SolidityValidationPeriod {
|
|
53
|
+
subnetID: Uint8Array;
|
|
54
|
+
nodeID: Uint8Array;
|
|
55
|
+
blsPublicKey: Uint8Array;
|
|
56
|
+
registrationExpiry: bigint;
|
|
57
|
+
remainingBalanceOwner: PChainOwner;
|
|
58
|
+
disableOwner: PChainOwner;
|
|
59
|
+
weight: bigint;
|
|
60
|
+
}
|
|
61
|
+
export declare function packRegisterL1ValidatorPayload(validationPeriod: SolidityValidationPeriod): Uint8Array;
|
|
62
|
+
/**
|
|
63
|
+
* Parses the payload of a RegisterL1ValidatorMessage into the SolidityValidationPeriod structure.
|
|
64
|
+
* Mirrors Solidity's unpackRegisterL1ValidatorMessage.
|
|
65
|
+
*/
|
|
66
|
+
export declare function unpackRegisterL1ValidatorPayload(input: Uint8Array): SolidityValidationPeriod;
|
|
67
|
+
export declare function packValidationUptimeMessage(validationId: string, uptimeSeconds: number, networkID: number, sourceChainID: string): Uint8Array;
|
|
68
|
+
export declare function decodeWarpMessage(log: Log): {
|
|
69
|
+
eventName: "SendWarpMessage";
|
|
70
|
+
args: {
|
|
71
|
+
sender: string;
|
|
72
|
+
messageID: `0x${string}`;
|
|
73
|
+
message: `0x${string}`;
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
export {};
|