@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,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.waitCChainTx = waitCChainTx;
|
|
4
|
+
exports.pChainImport = pChainImport;
|
|
5
|
+
exports.requirePChainBallance = requirePChainBallance;
|
|
6
|
+
exports.requireCChainBallance = requireCChainBallance;
|
|
7
|
+
exports.getERC20Events = getERC20Events;
|
|
8
|
+
const avalanchejs_1 = require("@avalabs/avalanchejs");
|
|
9
|
+
const pChainUtils_1 = require("./pChainUtils");
|
|
10
|
+
const logger_1 = require("./logger");
|
|
11
|
+
const viem_1 = require("viem");
|
|
12
|
+
// Wait c chain tx until it is confirmed with a timeout
|
|
13
|
+
async function waitCChainTx(txID, evmApi, pollingInterval = 6, retryCount = 10) {
|
|
14
|
+
let tx = await evmApi.getAtomicTxStatus(txID);
|
|
15
|
+
let retry = 0;
|
|
16
|
+
while (tx.status !== 'Committed' && tx.status !== 'Accepted' && retry < retryCount) {
|
|
17
|
+
logger_1.logger.log(`Waiting for C-Chain transaction ${txID} to be committed... (current status: ${tx.status})`);
|
|
18
|
+
await new Promise(resolve => setTimeout(resolve, pollingInterval * 1000));
|
|
19
|
+
tx = await evmApi.getAtomicTxStatus(txID);
|
|
20
|
+
retry++;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/*
|
|
24
|
+
* @notice Prepare a C-Chain export transaction
|
|
25
|
+
* @param privateKeyHex - The private key of the user in hex format
|
|
26
|
+
* @param pAddress - The P-Chain address to export AVAX from
|
|
27
|
+
* @param cAddress - The C-Chain address to export AVAX to
|
|
28
|
+
* @param client - The ExtendedWalletClient instance
|
|
29
|
+
* @param amount - The amount of AVAX (9 decimals as supported by the p-chain) to export
|
|
30
|
+
* @returns - A promise that resolves to a tuple of the signed transaction and the export fees
|
|
31
|
+
*/
|
|
32
|
+
async function prepareCchainExport(pAddress, cAddress, client, amount) {
|
|
33
|
+
const rpcUrl = (0, pChainUtils_1.getPchainBaseUrl)(client);
|
|
34
|
+
const evmapi = new avalanchejs_1.evm.EVMApi(rpcUrl);
|
|
35
|
+
const context = await avalanchejs_1.Context.getContextFromURI(rpcUrl);
|
|
36
|
+
const txCount = await client.getTransactionCount({ address: cAddress });
|
|
37
|
+
const baseFee = await evmapi.getBaseFee();
|
|
38
|
+
const pAddressBytes = avalanchejs_1.utils.bech32ToBytes(pAddress);
|
|
39
|
+
const exportFees = avalanchejs_1.evm.estimateExportCost(context, baseFee, amount, context.pBlockchainID, avalanchejs_1.utils.hexToBuffer(cAddress), [pAddressBytes], BigInt(txCount));
|
|
40
|
+
const tx = avalanchejs_1.evm.newExportTx(context, amount + exportFees, context.pBlockchainID, avalanchejs_1.utils.hexToBuffer(cAddress), [pAddressBytes], exportFees, BigInt(txCount));
|
|
41
|
+
await (0, pChainUtils_1.addSigToAllCreds)(tx, client, true);
|
|
42
|
+
return [tx.getSignedTx(), exportFees];
|
|
43
|
+
}
|
|
44
|
+
async function pChainImport(client) {
|
|
45
|
+
const { P: pAddress } = client.addresses;
|
|
46
|
+
const rpcUrl = (0, pChainUtils_1.getPchainBaseUrl)(client);
|
|
47
|
+
const pvmApi = new avalanchejs_1.pvm.PVMApi(rpcUrl);
|
|
48
|
+
const context = await avalanchejs_1.Context.getContextFromURI(rpcUrl);
|
|
49
|
+
const feeState = await pvmApi.getFeeState();
|
|
50
|
+
const { utxos } = await pvmApi.getUTXOs({
|
|
51
|
+
sourceChain: 'C',
|
|
52
|
+
addresses: [pAddress],
|
|
53
|
+
});
|
|
54
|
+
const importTx = avalanchejs_1.pvm.newImportTx({
|
|
55
|
+
feeState,
|
|
56
|
+
sourceChainId: context.cBlockchainID,
|
|
57
|
+
utxos,
|
|
58
|
+
toAddressesBytes: [avalanchejs_1.utils.bech32ToBytes(pAddress)],
|
|
59
|
+
fromAddressesBytes: [avalanchejs_1.utils.bech32ToBytes(pAddress.replace('P-', 'C-'))], // Convert P-Chain address to C-Chain address
|
|
60
|
+
}, context);
|
|
61
|
+
await (0, pChainUtils_1.addSigToAllCreds)(importTx, client);
|
|
62
|
+
return pvmApi.issueSignedTx(importTx.getSignedTx());
|
|
63
|
+
}
|
|
64
|
+
;
|
|
65
|
+
// @notice Check if the user has enough AVAX in the P-Chain address to cover the amount
|
|
66
|
+
// @param privateKeyHex - The private key of the user in hex format (not the address because automatic C to P Chain transfer may be supported in the future)
|
|
67
|
+
// @param network - The network to use (mainnet or fuji)
|
|
68
|
+
// @param amount - The amount of AVAX to check for (9 decimals as supported by the p-chain)
|
|
69
|
+
// @param signedTx - The signed transaction to check for (calculate the fees)
|
|
70
|
+
// @param checkRetry - The number of times to check for the amount (default: 3)
|
|
71
|
+
// @returns - A promise that resolves when the user has enough AVAX in the P-Chain address
|
|
72
|
+
// @throws - An error if the user doesn't have enough AVAX in the P-Chain address
|
|
73
|
+
async function requirePChainBallance(client, amount = BigInt(0), promptUser = true, signedTx, checkRetry = 3) {
|
|
74
|
+
const rpcUrl = (0, pChainUtils_1.getPchainBaseUrl)(client);
|
|
75
|
+
const pvmApi = new avalanchejs_1.pvm.PVMApi(rpcUrl);
|
|
76
|
+
const evmapi = new avalanchejs_1.evm.EVMApi(rpcUrl);
|
|
77
|
+
const { P: pAddress, C: cAddress } = client.addresses;
|
|
78
|
+
// Check on the P-Chain
|
|
79
|
+
let pBalance = await pvmApi.getBalance({ addresses: [pAddress] });
|
|
80
|
+
let remainingPBalance = pBalance.unlocked - amount;
|
|
81
|
+
// If not enough found on the P-Chain, check the C-Chain
|
|
82
|
+
for (let pTry = 0; remainingPBalance < BigInt(0) && pTry < checkRetry; pTry++) {
|
|
83
|
+
if (pTry === checkRetry)
|
|
84
|
+
throw new Error(`You don't have enough AVAX in your P-Chain address`); // Stop if too more retries on the P-Chain
|
|
85
|
+
logger_1.logger.log(`You have only ${(0, viem_1.formatUnits)(pBalance.unlocked, 9)}/${(0, viem_1.formatUnits)(amount, 9)} AVAX in your P-Chain address ${pAddress}`);
|
|
86
|
+
const [cChainSignedExportTx, transferFees] = await prepareCchainExport(pAddress, cAddress, client, -remainingPBalance);
|
|
87
|
+
const neededOnCchain = (transferFees - remainingPBalance) * BigInt(10 ** 9); // // Negative amount to positive (from 9 (p-chain) to 18 (c-chain) decimals) and add exportfees to get the needed amount on the C-Chain
|
|
88
|
+
// Ask user to transfer AVAX to its C-Chain address if not enough found
|
|
89
|
+
await requireCChainBallance(client, neededOnCchain, promptUser, checkRetry);
|
|
90
|
+
let cChainExportTxResponse, pChainImportTxResponse;
|
|
91
|
+
switch (promptUser ? await logger_1.logger.prompt(`C-Chain address ${cAddress} have enough founds to transfer ${(0, viem_1.formatUnits)(neededOnCchain, 18)} to the P-Chain address.. Do you want to transfer it automatically (y/n)`) : 'y') {
|
|
92
|
+
case 'y':
|
|
93
|
+
logger_1.logger.log(`Exporting AVAX from C-Chain...`);
|
|
94
|
+
cChainExportTxResponse = await evmapi.issueSignedTx(cChainSignedExportTx);
|
|
95
|
+
logger_1.logger.log(cChainExportTxResponse.txID);
|
|
96
|
+
await waitCChainTx(cChainExportTxResponse.txID, evmapi);
|
|
97
|
+
logger_1.logger.log(`Importing AVAX to P-Chain...`);
|
|
98
|
+
pChainImportTxResponse = await pChainImport(client);
|
|
99
|
+
await (0, pChainUtils_1.waitPChainTx)(pChainImportTxResponse.txID, pvmApi);
|
|
100
|
+
logger_1.logger.log("Transfer successfully completed !");
|
|
101
|
+
// Call the transfer function here
|
|
102
|
+
break;
|
|
103
|
+
case 'n':
|
|
104
|
+
await logger_1.logger.prompt(`Please transfer ${(0, viem_1.formatUnits)(amount, 9)} AVAX to the P-Chain address (${pAddress}) manually and press enter to continue...`);
|
|
105
|
+
break;
|
|
106
|
+
default:
|
|
107
|
+
throw new Error(`Canceled by the user`);
|
|
108
|
+
}
|
|
109
|
+
pBalance = await pvmApi.getBalance({ addresses: [pAddress] });
|
|
110
|
+
remainingPBalance = pBalance.unlocked - amount;
|
|
111
|
+
}
|
|
112
|
+
// TODO: Fix small diff issue: "Sufficient found on the P-Chain (0.099953453/0.010000000 AVAX)"
|
|
113
|
+
logger_1.logger.log(`Sufficient found on the P-Chain (${(0, viem_1.formatUnits)(pBalance.unlocked, 9)}/${(0, viem_1.formatUnits)(amount, 9)} AVAX)`);
|
|
114
|
+
}
|
|
115
|
+
async function requireCChainBallance(client, amount = BigInt(0), promptUser = true, checkRetry = 3) {
|
|
116
|
+
const { C: cAddress } = client.addresses;
|
|
117
|
+
let cBalance = await client.getBalance({ address: cAddress });
|
|
118
|
+
let remainingCBalance = cBalance - amount;
|
|
119
|
+
for (let cTry = 0; remainingCBalance < BigInt(0) && cTry < checkRetry; cTry++) {
|
|
120
|
+
if (cTry === checkRetry)
|
|
121
|
+
throw new Error(`You don't have enough AVAX in your C-Chain address`);
|
|
122
|
+
logger_1.logger.log(`You have only ${(0, viem_1.formatUnits)(cBalance, 18)}/${(0, viem_1.formatUnits)(amount, 18)} AVAX in your C-Chain address ${cAddress}`);
|
|
123
|
+
if (!promptUser) {
|
|
124
|
+
throw new Error(`You don't have enough AVAX in your C-Chain address ${cAddress}`);
|
|
125
|
+
}
|
|
126
|
+
await logger_1.logger.prompt(`Please transfer ${(0, viem_1.formatUnits)(amount, 18)} AVAX to the C-Chain address (${cAddress}) manually and press enter to continue...`);
|
|
127
|
+
cBalance = await client.getBalance({ address: cAddress }); // ETH to AVAX decimals
|
|
128
|
+
remainingCBalance = cBalance - amount;
|
|
129
|
+
}
|
|
130
|
+
logger_1.logger.log(`Sufficient found on the C-Chain address ${cAddress} (${(0, viem_1.formatUnits)(cBalance, 18)}/${(0, viem_1.formatUnits)(amount, 18)} AVAX)`);
|
|
131
|
+
return cBalance;
|
|
132
|
+
}
|
|
133
|
+
async function getERC20Events(hash, config) {
|
|
134
|
+
const receipt = await config.client.getTransactionReceipt({ hash });
|
|
135
|
+
const logs = (0, viem_1.parseEventLogs)({
|
|
136
|
+
abi: config.abis.ERC20,
|
|
137
|
+
logs: receipt.logs,
|
|
138
|
+
});
|
|
139
|
+
return logs;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=transferUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferUtils.js","sourceRoot":"","sources":["../../src/lib/transferUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Hex } from "viem";
|
|
2
|
+
import { Addresses } from "../client";
|
|
3
|
+
export declare function bytes32ToAddress(bytes32: `0x${string}`): string;
|
|
4
|
+
export declare function cb58ToBytes(cb58: string): Uint8Array;
|
|
5
|
+
export declare function cb58ToHex(cb58: string): Hex;
|
|
6
|
+
export declare function cb58ToHex(cb58: string, include0x: true): Hex;
|
|
7
|
+
export declare function cb58ToHex(cb58: string, include0x: false): string;
|
|
8
|
+
/**
|
|
9
|
+
* Derives addresses from a private key
|
|
10
|
+
* @param privateKeyHex - Private key in hexadecimal format
|
|
11
|
+
* @returns Object containing derived addresses for different chains
|
|
12
|
+
*/
|
|
13
|
+
export declare function getAddresses(privateKeyHex: string, network: string): Addresses;
|
|
14
|
+
export declare function getCchainAddress(privateKeyHex: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Validates a private key format
|
|
17
|
+
* @param privateKeyHex - Private key in hexadecimal format
|
|
18
|
+
* @returns boolean indicating if the format is valid
|
|
19
|
+
*/
|
|
20
|
+
export declare function isValidPrivateKey(privateKeyHex: string): boolean;
|
|
21
|
+
export declare function bytesToCB58(bytes: Uint8Array): string;
|
|
22
|
+
export type NodeId = `NodeID-${string}`;
|
|
23
|
+
export declare const parseNodeID: (nodeID: NodeId, padding?: boolean) => Hex;
|
|
24
|
+
export declare const encodeNodeID: (nodeIDBytes: Hex) => NodeId;
|
|
25
|
+
export declare function retryWhileError<T>(fetcher: () => Promise<T>, intervalMs: number, timeoutMs: number, accept?: (result: T) => boolean): Promise<T>;
|
|
26
|
+
export declare function bigintReplacer(_key: string, value: any): any;
|
|
27
|
+
export declare function getClipboardValue(): string;
|
|
28
|
+
export declare function setClipboardValue(value: string): void;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.encodeNodeID = exports.parseNodeID = void 0;
|
|
4
|
+
exports.bytes32ToAddress = bytes32ToAddress;
|
|
5
|
+
exports.cb58ToBytes = cb58ToBytes;
|
|
6
|
+
exports.cb58ToHex = cb58ToHex;
|
|
7
|
+
exports.getAddresses = getAddresses;
|
|
8
|
+
exports.getCchainAddress = getCchainAddress;
|
|
9
|
+
exports.isValidPrivateKey = isValidPrivateKey;
|
|
10
|
+
exports.bytesToCB58 = bytesToCB58;
|
|
11
|
+
exports.retryWhileError = retryWhileError;
|
|
12
|
+
exports.bigintReplacer = bigintReplacer;
|
|
13
|
+
exports.getClipboardValue = getClipboardValue;
|
|
14
|
+
exports.setClipboardValue = setClipboardValue;
|
|
15
|
+
const avalanchejs_1 = require("@avalabs/avalanchejs");
|
|
16
|
+
const utils_1 = require("@noble/hashes/utils");
|
|
17
|
+
const micro_eth_signer_1 = require("micro-eth-signer");
|
|
18
|
+
const sha2_1 = require("@noble/hashes/sha2");
|
|
19
|
+
const base_1 = require("@scure/base");
|
|
20
|
+
const viem_1 = require("viem");
|
|
21
|
+
const logger_1 = require("./logger");
|
|
22
|
+
const justification_1 = require("./justification");
|
|
23
|
+
const child_process_1 = require("child_process");
|
|
24
|
+
function bytes32ToAddress(bytes32) {
|
|
25
|
+
// on garde les 20 derniers bytes (40 hex chars)
|
|
26
|
+
const raw = (0, viem_1.sliceHex)(bytes32, 12, 32); // bytes 12 → 32
|
|
27
|
+
return (0, viem_1.getAddress)(raw);
|
|
28
|
+
}
|
|
29
|
+
const CHECKSUM_LENGTH = 4;
|
|
30
|
+
function cb58ToBytes(cb58) {
|
|
31
|
+
const decodedBytes = base_1.base58.decode(cb58);
|
|
32
|
+
if (decodedBytes.length < CHECKSUM_LENGTH) {
|
|
33
|
+
throw new Error('Input string is smaller than the checksum size');
|
|
34
|
+
}
|
|
35
|
+
return decodedBytes.slice(0, -CHECKSUM_LENGTH);
|
|
36
|
+
}
|
|
37
|
+
function cb58ToHex(cb58, include0x) {
|
|
38
|
+
const rawBytes = cb58ToBytes(cb58);
|
|
39
|
+
const hex = (0, utils_1.bytesToHex)(rawBytes);
|
|
40
|
+
// Pad to 32 bytes (64 characters) - excluding the '0x' prefix
|
|
41
|
+
const paddedHex = hex.padStart(64, '0');
|
|
42
|
+
return (include0x === false ? '' : '0x') + paddedHex;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Derives addresses from a private key
|
|
46
|
+
* @param privateKeyHex - Private key in hexadecimal format
|
|
47
|
+
* @returns Object containing derived addresses for different chains
|
|
48
|
+
*/
|
|
49
|
+
function getAddresses(privateKeyHex, network) {
|
|
50
|
+
const networkPrefix = network === 'mainnet' ? 'avax' : 'fuji';
|
|
51
|
+
const publicKey = avalanchejs_1.secp256k1.getPublicKey((0, utils_1.hexToBytes)(privateKeyHex.startsWith('0x') ? privateKeyHex.slice(2) : privateKeyHex));
|
|
52
|
+
const pChainAddress = `P-${avalanchejs_1.utils.formatBech32(networkPrefix, avalanchejs_1.secp256k1.publicKeyBytesToAddress(publicKey))}`;
|
|
53
|
+
const cChainAddress = micro_eth_signer_1.Address.fromPublicKey(publicKey);
|
|
54
|
+
return {
|
|
55
|
+
C: cChainAddress,
|
|
56
|
+
P: pChainAddress
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function getCchainAddress(privateKeyHex) {
|
|
60
|
+
const publicKey = avalanchejs_1.secp256k1.getPublicKey((0, utils_1.hexToBytes)(privateKeyHex.startsWith('0x') ? privateKeyHex.slice(2) : privateKeyHex));
|
|
61
|
+
return micro_eth_signer_1.Address.fromPublicKey(publicKey);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Validates a private key format
|
|
65
|
+
* @param privateKeyHex - Private key in hexadecimal format
|
|
66
|
+
* @returns boolean indicating if the format is valid
|
|
67
|
+
*/
|
|
68
|
+
function isValidPrivateKey(privateKeyHex) {
|
|
69
|
+
try {
|
|
70
|
+
if (!privateKeyHex.match(/^[0-9a-fA-F]{64}$/)) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
const privateKey = (0, utils_1.hexToBytes)(privateKeyHex);
|
|
74
|
+
return privateKey.length === 32;
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function bytesToCB58(bytes) {
|
|
81
|
+
// Calculate checksum (first 4 bytes of sha256)
|
|
82
|
+
const checksum = (0, sha2_1.sha256)(bytes).slice(0, 4);
|
|
83
|
+
// Concatenate bytes and checksum
|
|
84
|
+
const withChecksum = new Uint8Array(bytes.length + 4);
|
|
85
|
+
withChecksum.set(bytes);
|
|
86
|
+
withChecksum.set(checksum, bytes.length);
|
|
87
|
+
// Encode to base58
|
|
88
|
+
return base_1.base58.encode(withChecksum);
|
|
89
|
+
}
|
|
90
|
+
const parseNodeID = (nodeID, padding = true) => {
|
|
91
|
+
const nodeIDWithoutPrefix = nodeID.replace("NodeID-", "");
|
|
92
|
+
const decodedID = avalanchejs_1.utils.base58.decode(nodeIDWithoutPrefix);
|
|
93
|
+
const nodeIDHex = (0, viem_1.fromBytes)(decodedID, 'hex');
|
|
94
|
+
const nodeIDHexTrimmed = nodeIDHex.slice(0, -8);
|
|
95
|
+
return padding ? (0, viem_1.pad)(nodeIDHexTrimmed, { size: 32 }) : nodeIDHexTrimmed;
|
|
96
|
+
};
|
|
97
|
+
exports.parseNodeID = parseNodeID;
|
|
98
|
+
const encodeNodeID = (nodeIDBytes) => {
|
|
99
|
+
let nodeU8Array = (0, justification_1.hexToUint8Array)(nodeIDBytes);
|
|
100
|
+
nodeU8Array = nodeU8Array.length === 32 ? nodeU8Array.slice(12) : nodeU8Array; // Remove the first 12 bytes if it's a full bytes32
|
|
101
|
+
const nodeId = `NodeID-${avalanchejs_1.utils.base58check.encode(nodeU8Array)}`;
|
|
102
|
+
return nodeId;
|
|
103
|
+
};
|
|
104
|
+
exports.encodeNodeID = encodeNodeID;
|
|
105
|
+
async function retryWhileError(fetcher, intervalMs, timeoutMs, accept = () => true) {
|
|
106
|
+
const start = Date.now();
|
|
107
|
+
let lastErr;
|
|
108
|
+
while (true) {
|
|
109
|
+
try {
|
|
110
|
+
const result = await fetcher();
|
|
111
|
+
if (accept(result))
|
|
112
|
+
return result;
|
|
113
|
+
else
|
|
114
|
+
throw new Error("retryWhileError Result not accepted by:\n" + accept.toString() + "\n");
|
|
115
|
+
}
|
|
116
|
+
catch (e) {
|
|
117
|
+
lastErr = e;
|
|
118
|
+
const elapsed = Date.now() - start;
|
|
119
|
+
const remaining = timeoutMs - elapsed;
|
|
120
|
+
if (remaining <= 0)
|
|
121
|
+
break;
|
|
122
|
+
await new Promise(res => setTimeout(res, Math.min(intervalMs, remaining)));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
logger_1.logger.error("Timeout reached !\n", lastErr);
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
function bigintReplacer(_key, value) {
|
|
129
|
+
if (typeof value === "bigint") {
|
|
130
|
+
return Number(value);
|
|
131
|
+
}
|
|
132
|
+
return value;
|
|
133
|
+
}
|
|
134
|
+
function getClipboardValue() {
|
|
135
|
+
let result;
|
|
136
|
+
const platform = process.platform;
|
|
137
|
+
if (platform === 'win32') {
|
|
138
|
+
// Windows
|
|
139
|
+
result = (0, child_process_1.spawnSync)('powershell', ['-command', 'Get-Clipboard'], { encoding: 'utf-8', shell: false }).stdout;
|
|
140
|
+
}
|
|
141
|
+
else if (platform === 'darwin') {
|
|
142
|
+
// macOS
|
|
143
|
+
result = (0, child_process_1.spawnSync)('pbpaste', [], { encoding: 'utf-8', shell: false }).stdout;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// Linux and others
|
|
147
|
+
result = (0, child_process_1.spawnSync)('xclip', ['-selection', 'clipboard', '-o'], { encoding: 'utf-8', shell: false }).stdout;
|
|
148
|
+
}
|
|
149
|
+
return result.trim();
|
|
150
|
+
}
|
|
151
|
+
function setClipboardValue(value) {
|
|
152
|
+
const platform = process.platform;
|
|
153
|
+
if (platform === 'win32') {
|
|
154
|
+
// Windows
|
|
155
|
+
(0, child_process_1.spawnSync)('powershell', ['-command', `Set-Clipboard -Value "${value.replace(/"/g, '""')}"`], { encoding: 'utf-8', shell: false });
|
|
156
|
+
}
|
|
157
|
+
else if (platform === 'darwin') {
|
|
158
|
+
// macOS
|
|
159
|
+
(0, child_process_1.spawnSync)('pbcopy', [], { input: value, encoding: 'utf-8', shell: false });
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
// Linux and others
|
|
163
|
+
(0, child_process_1.spawnSync)('echo ' + value + ' | xclip -selection clipboard', { encoding: 'utf-8', shell: false });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { GetContractReturnType, Address, Hex, ContractFunctionName, ContractFunctionArgs, ContractFunctionReturnType } from 'viem';
|
|
2
|
+
import { SuzakuABI } from '../abis';
|
|
3
|
+
import { ExtendedClient, ExtendedWalletClient } from '../client';
|
|
4
|
+
export { setCastMode, isCastMode } from './castUtils';
|
|
5
|
+
export type SuzakuABINames = keyof typeof SuzakuABI;
|
|
6
|
+
export type TSuzakuABI = {
|
|
7
|
+
[K in SuzakuABINames]: typeof SuzakuABI[K];
|
|
8
|
+
};
|
|
9
|
+
type MakeAccountOptionalInWrite<T> = T extends {
|
|
10
|
+
write: infer W;
|
|
11
|
+
} ? Omit<T, 'write'> & {
|
|
12
|
+
write: {
|
|
13
|
+
[K in keyof W]: W[K] extends (args: infer A, options: infer O) => infer R ? A extends O ? (options?: Omit<O, 'account'> & {
|
|
14
|
+
account?: O extends {
|
|
15
|
+
account: infer Acc;
|
|
16
|
+
} ? Acc : never;
|
|
17
|
+
}) => R : (args: A, options?: Omit<O, 'account'> & {
|
|
18
|
+
account?: O extends {
|
|
19
|
+
account: infer Acc;
|
|
20
|
+
} ? Acc : never;
|
|
21
|
+
}) => R : W[K];
|
|
22
|
+
};
|
|
23
|
+
} : T;
|
|
24
|
+
export type SuzakuContract = {
|
|
25
|
+
[K in SuzakuABINames]: MakeAccountOptionalInWrite<GetContractReturnType<typeof SuzakuABI[K], ExtendedClient>> & {
|
|
26
|
+
address: Hex;
|
|
27
|
+
name: string;
|
|
28
|
+
multicall: MulticallFn<K>;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
export type TWriteSuzakuContract = {
|
|
32
|
+
[K in SuzakuABINames]: SuzakuContract[K] extends {
|
|
33
|
+
write: infer W;
|
|
34
|
+
} ? W : never;
|
|
35
|
+
};
|
|
36
|
+
export type SafeSuzakuContract = {
|
|
37
|
+
[K in SuzakuABINames]: SuzakuContract[K] & {
|
|
38
|
+
safeWrite: TWriteSuzakuContract[K];
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
type ReadFunctionNames<T extends SuzakuABINames> = ContractFunctionName<typeof SuzakuABI[T], 'view' | 'pure'>;
|
|
42
|
+
type HasArgs<T extends SuzakuABINames, FName extends ReadFunctionNames<T>> = ContractFunctionArgs<typeof SuzakuABI[T], 'view' | 'pure', FName> extends readonly [] ? false : true;
|
|
43
|
+
type MulticallItem<T extends SuzakuABINames, FName extends ReadFunctionNames<T> = ReadFunctionNames<T>> = FName extends ReadFunctionNames<T> ? HasArgs<T, FName> extends true ? {
|
|
44
|
+
name: FName;
|
|
45
|
+
args: ContractFunctionArgs<typeof SuzakuABI[T], 'view' | 'pure', FName>;
|
|
46
|
+
} : FName | {
|
|
47
|
+
name: FName;
|
|
48
|
+
} : never;
|
|
49
|
+
type ExtractFunctionName<T extends SuzakuABINames, Item> = Item extends string ? Item : Item extends {
|
|
50
|
+
name: infer N;
|
|
51
|
+
} ? N extends ReadFunctionNames<T> ? N : never : never;
|
|
52
|
+
type MulticallItemResult<T extends SuzakuABINames, Item> = ExtractFunctionName<T, Item> extends ReadFunctionNames<T> ? ContractFunctionReturnType<typeof SuzakuABI[T], 'view' | 'pure', ExtractFunctionName<T, Item>> : never;
|
|
53
|
+
type MulticallResultsDetailed<T extends SuzakuABINames, Items extends readonly MulticallItem<T>[]> = {
|
|
54
|
+
[K in keyof Items]: {
|
|
55
|
+
name: ExtractFunctionName<T, Items[K]>;
|
|
56
|
+
result: MulticallItemResult<T, Items[K]>;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
type MulticallResultsSimple<T extends SuzakuABINames, Items extends readonly MulticallItem<T>[]> = {
|
|
60
|
+
[K in keyof Items]: MulticallItemResult<T, Items[K]>;
|
|
61
|
+
};
|
|
62
|
+
interface MulticallOptions<D extends boolean = false, S extends boolean = true> {
|
|
63
|
+
strict?: S;
|
|
64
|
+
details?: D;
|
|
65
|
+
}
|
|
66
|
+
type MulticallFn<T extends SuzakuABINames> = {
|
|
67
|
+
<const Items extends readonly MulticallItem<T>[], D extends boolean = false, S extends boolean = true>(items: Items, options?: MulticallOptions<D, S>): Promise<D extends true ? MulticallResultsDetailed<T, Items> : MulticallResultsSimple<T, Items>>;
|
|
68
|
+
};
|
|
69
|
+
export type CurriedContractFn<T extends SuzakuABINames, C extends ExtendedClient> = (address?: Address) => Promise<C extends ExtendedWalletClient ? SafeSuzakuContract[T] : SuzakuContract[T]>;
|
|
70
|
+
export type CurriedSuzakuContractMap<C extends ExtendedClient> = {
|
|
71
|
+
[key in SuzakuABINames]: CurriedContractFn<key, C>;
|
|
72
|
+
};
|
|
73
|
+
export declare function withSafeWrite<T extends SuzakuABINames>(contract: SuzakuContract[T], abi: T, client: ExtendedClient, confirmations?: number): SafeSuzakuContract[T];
|
|
74
|
+
export declare function withMulticall<T extends SuzakuABINames>(contract: SuzakuContract[T], abi: T, client: ExtendedClient): SuzakuContract[T];
|
|
75
|
+
export declare const curriedContract: <T extends SuzakuABINames, C extends ExtendedClient>(abi: T, client: C, wait?: number, skipAbiValidation?: boolean) => CurriedContractFn<T, C>;
|
|
76
|
+
export declare function contractAbiValidation<T extends SuzakuABINames>(client: ExtendedClient, abis: T[], address: Address): Promise<{
|
|
77
|
+
name: T;
|
|
78
|
+
ratio: number;
|
|
79
|
+
valid: boolean;
|
|
80
|
+
}[]>;
|