@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.
Files changed (194) hide show
  1. package/LICENSE +96 -0
  2. package/README.md +1080 -0
  3. package/bin/cli.js +3 -0
  4. package/defaults/.env.anvil +4 -0
  5. package/defaults/.env.dexalot +7 -0
  6. package/defaults/.env.fuji +4 -0
  7. package/defaults/.env.kiteai +2 -0
  8. package/defaults/.env.mainnet +4 -0
  9. package/defaults/.env.template +10 -0
  10. package/dist/abis/AccessControl.d.ts +176 -0
  11. package/dist/abis/AccessControl.js +230 -0
  12. package/dist/abis/AccessControl.js.map +1 -0
  13. package/dist/abis/BalancerValidatorManager.d.ts +1121 -0
  14. package/dist/abis/BalancerValidatorManager.js +1469 -0
  15. package/dist/abis/BalancerValidatorManager.js.map +1 -0
  16. package/dist/abis/DefaultCollateral.d.ts +620 -0
  17. package/dist/abis/DefaultCollateral.js +811 -0
  18. package/dist/abis/DefaultCollateral.js.map +1 -0
  19. package/dist/abis/ERC20.d.ts +635 -0
  20. package/dist/abis/ERC20.js +831 -0
  21. package/dist/abis/ERC20.js.map +1 -0
  22. package/dist/abis/IWarpMessenger.d.ts +104 -0
  23. package/dist/abis/IWarpMessenger.js +139 -0
  24. package/dist/abis/IWarpMessenger.js.map +1 -0
  25. package/dist/abis/KiteStakingManager.d.ts +1459 -0
  26. package/dist/abis/KiteStakingManager.js +1886 -0
  27. package/dist/abis/KiteStakingManager.js.map +1 -0
  28. package/dist/abis/L1Middleware.d.ts +1712 -0
  29. package/dist/abis/L1Middleware.js +2242 -0
  30. package/dist/abis/L1Middleware.js.map +1 -0
  31. package/dist/abis/L1Registry.d.ts +415 -0
  32. package/dist/abis/L1Registry.js +544 -0
  33. package/dist/abis/L1Registry.js.map +1 -0
  34. package/dist/abis/L1RestakeDelegator.d.ts +865 -0
  35. package/dist/abis/L1RestakeDelegator.js +1118 -0
  36. package/dist/abis/L1RestakeDelegator.js.map +1 -0
  37. package/dist/abis/OperatorL1OptInService.d.ts +288 -0
  38. package/dist/abis/OperatorL1OptInService.js +374 -0
  39. package/dist/abis/OperatorL1OptInService.js.map +1 -0
  40. package/dist/abis/OperatorRegistry.d.ts +125 -0
  41. package/dist/abis/OperatorRegistry.js +166 -0
  42. package/dist/abis/OperatorRegistry.js.map +1 -0
  43. package/dist/abis/OperatorVaultOptInService.d.ts +288 -0
  44. package/dist/abis/OperatorVaultOptInService.js +374 -0
  45. package/dist/abis/OperatorVaultOptInService.js.map +1 -0
  46. package/dist/abis/Ownable.d.ts +59 -0
  47. package/dist/abis/Ownable.js +79 -0
  48. package/dist/abis/Ownable.js.map +1 -0
  49. package/dist/abis/PoASecurityModule.d.ts +225 -0
  50. package/dist/abis/PoASecurityModule.js +299 -0
  51. package/dist/abis/PoASecurityModule.js.map +1 -0
  52. package/dist/abis/RewardsNativeToken.d.ts +1334 -0
  53. package/dist/abis/RewardsNativeToken.js +1749 -0
  54. package/dist/abis/RewardsNativeToken.js.map +1 -0
  55. package/dist/abis/StakingVault.d.ts +2913 -0
  56. package/dist/abis/StakingVault.js +3780 -0
  57. package/dist/abis/StakingVault.js.map +1 -0
  58. package/dist/abis/StakingVaultOperations.d.ts +980 -0
  59. package/dist/abis/StakingVaultOperations.js +1270 -0
  60. package/dist/abis/StakingVaultOperations.js.map +1 -0
  61. package/dist/abis/UptimeTracker.d.ts +300 -0
  62. package/dist/abis/UptimeTracker.js +397 -0
  63. package/dist/abis/UptimeTracker.js.map +1 -0
  64. package/dist/abis/ValidatorManager.d.ts +842 -0
  65. package/dist/abis/ValidatorManager.js +1101 -0
  66. package/dist/abis/ValidatorManager.js.map +1 -0
  67. package/dist/abis/VaultFactory.d.ts +288 -0
  68. package/dist/abis/VaultFactory.js +378 -0
  69. package/dist/abis/VaultFactory.js.map +1 -0
  70. package/dist/abis/VaultManager.d.ts +519 -0
  71. package/dist/abis/VaultManager.js +678 -0
  72. package/dist/abis/VaultManager.js.map +1 -0
  73. package/dist/abis/VaultTokenized.d.ts +1626 -0
  74. package/dist/abis/VaultTokenized.js +2114 -0
  75. package/dist/abis/VaultTokenized.js.map +1 -0
  76. package/dist/abis/abi-selectors.json +700 -0
  77. package/dist/abis/index.d.ts +18356 -0
  78. package/dist/abis/index.js +58 -0
  79. package/dist/abis/index.js.map +1 -0
  80. package/dist/accessControl.d.ts +15 -0
  81. package/dist/accessControl.js +36 -0
  82. package/dist/accessControl.js.map +1 -0
  83. package/dist/balancer.d.ts +25 -0
  84. package/dist/balancer.js +42 -0
  85. package/dist/balancer.js.map +1 -0
  86. package/dist/cli.d.mts +1 -0
  87. package/dist/cli.d.ts +2 -0
  88. package/dist/cli.js +3183 -0
  89. package/dist/cli.js.map +1 -0
  90. package/dist/cli.mjs +31343 -0
  91. package/dist/cli.mjs.map +1 -0
  92. package/dist/client.d.ts +34 -0
  93. package/dist/client.js +76 -0
  94. package/dist/client.js.map +1 -0
  95. package/dist/config.d.ts +10 -0
  96. package/dist/config.js +63 -0
  97. package/dist/config.js.map +1 -0
  98. package/dist/delegator.d.ts +4 -0
  99. package/dist/delegator.js +16 -0
  100. package/dist/delegator.js.map +1 -0
  101. package/dist/index.d.mts +19770 -0
  102. package/dist/index.d.ts +7 -0
  103. package/dist/index.js +24 -0
  104. package/dist/index.js.map +1 -0
  105. package/dist/index.mjs +27451 -0
  106. package/dist/index.mjs.map +1 -0
  107. package/dist/keyStore.d.ts +3 -0
  108. package/dist/keyStore.js +105 -0
  109. package/dist/keyStore.js.map +1 -0
  110. package/dist/kiteStaking.d.ts +91 -0
  111. package/dist/kiteStaking.js +731 -0
  112. package/dist/kiteStaking.js.map +1 -0
  113. package/dist/l1.d.ts +5 -0
  114. package/dist/l1.js +22 -0
  115. package/dist/l1.js.map +1 -0
  116. package/dist/lib/autoCompletion.d.ts +3 -0
  117. package/dist/lib/autoCompletion.js +55 -0
  118. package/dist/lib/autoCompletion.js.map +1 -0
  119. package/dist/lib/cChainUtils.d.ts +42 -0
  120. package/dist/lib/cChainUtils.js +271 -0
  121. package/dist/lib/cChainUtils.js.map +1 -0
  122. package/dist/lib/castUtils.d.ts +18 -0
  123. package/dist/lib/castUtils.js +81 -0
  124. package/dist/lib/castUtils.js.map +1 -0
  125. package/dist/lib/chainList.d.ts +5 -0
  126. package/dist/lib/chainList.js +86 -0
  127. package/dist/lib/chainList.js.map +1 -0
  128. package/dist/lib/cliParser.d.ts +27 -0
  129. package/dist/lib/cliParser.js +167 -0
  130. package/dist/lib/cliParser.js.map +1 -0
  131. package/dist/lib/commandUtils.d.ts +13 -0
  132. package/dist/lib/commandUtils.js +38 -0
  133. package/dist/lib/commandUtils.js.map +1 -0
  134. package/dist/lib/coreWalletUtils.d.ts +3 -0
  135. package/dist/lib/coreWalletUtils.js +74 -0
  136. package/dist/lib/coreWalletUtils.js.map +1 -0
  137. package/dist/lib/justification.d.ts +90 -0
  138. package/dist/lib/justification.js +577 -0
  139. package/dist/lib/justification.js.map +1 -0
  140. package/dist/lib/ledgerUtils.d.ts +4 -0
  141. package/dist/lib/ledgerUtils.js +258 -0
  142. package/dist/lib/ledgerUtils.js.map +1 -0
  143. package/dist/lib/logger.d.ts +46 -0
  144. package/dist/lib/logger.js +226 -0
  145. package/dist/lib/logger.js.map +1 -0
  146. package/dist/lib/pChainUtils.d.ts +128 -0
  147. package/dist/lib/pChainUtils.js +436 -0
  148. package/dist/lib/pChainUtils.js.map +1 -0
  149. package/dist/lib/pass.d.ts +81 -0
  150. package/dist/lib/pass.js +353 -0
  151. package/dist/lib/pass.js.map +1 -0
  152. package/dist/lib/safeUtils.d.ts +25 -0
  153. package/dist/lib/safeUtils.js +93 -0
  154. package/dist/lib/safeUtils.js.map +1 -0
  155. package/dist/lib/transferUtils.d.ts +643 -0
  156. package/dist/lib/transferUtils.js +141 -0
  157. package/dist/lib/transferUtils.js.map +1 -0
  158. package/dist/lib/utils.d.ts +28 -0
  159. package/dist/lib/utils.js +166 -0
  160. package/dist/lib/utils.js.map +1 -0
  161. package/dist/lib/viemUtils.d.ts +80 -0
  162. package/dist/lib/viemUtils.js +317 -0
  163. package/dist/lib/viemUtils.js.map +1 -0
  164. package/dist/lib/warpUtils.d.ts +76 -0
  165. package/dist/lib/warpUtils.js +448 -0
  166. package/dist/lib/warpUtils.js.map +1 -0
  167. package/dist/middleware.d.ts +75 -0
  168. package/dist/middleware.js +430 -0
  169. package/dist/middleware.js.map +1 -0
  170. package/dist/operator.d.ts +4 -0
  171. package/dist/operator.js +22 -0
  172. package/dist/operator.js.map +1 -0
  173. package/dist/operatorOptIn.d.ts +8 -0
  174. package/dist/operatorOptIn.js +39 -0
  175. package/dist/operatorOptIn.js.map +1 -0
  176. package/dist/rewards.d.ts +116 -0
  177. package/dist/rewards.js +244 -0
  178. package/dist/rewards.js.map +1 -0
  179. package/dist/securityModule.d.ts +8 -0
  180. package/dist/securityModule.js +305 -0
  181. package/dist/securityModule.js.map +1 -0
  182. package/dist/stakingVault.d.ts +184 -0
  183. package/dist/stakingVault.js +1224 -0
  184. package/dist/stakingVault.js.map +1 -0
  185. package/dist/uptime.d.ts +54 -0
  186. package/dist/uptime.js +246 -0
  187. package/dist/uptime.js.map +1 -0
  188. package/dist/vault.d.ts +16 -0
  189. package/dist/vault.js +131 -0
  190. package/dist/vault.js.map +1 -0
  191. package/dist/vaultManager.d.ts +8 -0
  192. package/dist/vaultManager.js +40 -0
  193. package/dist/vaultManager.js.map +1 -0
  194. 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
+ }[]>;