@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,448 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compareNodeIDs = void 0;
4
+ exports.packL1ConversionMessage = packL1ConversionMessage;
5
+ exports.subnetToL1ConversionID = subnetToL1ConversionID;
6
+ exports.marshalSubnetToL1ConversionData = marshalSubnetToL1ConversionData;
7
+ exports.packWarpIntoAccessList = packWarpIntoAccessList;
8
+ exports.collectSignaturesInitializeValidatorSet = collectSignaturesInitializeValidatorSet;
9
+ exports.getSigningSubnetIdFromWarpMessage = getSigningSubnetIdFromWarpMessage;
10
+ exports.collectSignatures = collectSignatures;
11
+ exports.packL1ValidatorRegistration = packL1ValidatorRegistration;
12
+ exports.packL1ValidatorWeightMessage = packL1ValidatorWeightMessage;
13
+ exports.packRegisterL1ValidatorPayload = packRegisterL1ValidatorPayload;
14
+ exports.unpackRegisterL1ValidatorPayload = unpackRegisterL1ValidatorPayload;
15
+ exports.packValidationUptimeMessage = packValidationUptimeMessage;
16
+ exports.decodeWarpMessage = decodeWarpMessage;
17
+ const viem_1 = require("viem");
18
+ const sha2_1 = require("@noble/hashes/sha2");
19
+ const utils_1 = require("./utils");
20
+ const avalanchejs_1 = require("@avalabs/avalanchejs");
21
+ const config_1 = require("../config");
22
+ const logger_1 = require("./logger");
23
+ const pChainUtils_1 = require("./pChainUtils");
24
+ // Helper functions for packing messages
25
+ const codecVersion = 0;
26
+ const encodeUint16 = (num) => encodeNumber(num, 2);
27
+ const encodeUint32 = (num) => encodeNumber(num, 4);
28
+ const encodeUint64 = (num) => encodeNumber(num, 8);
29
+ function encodeNumber(num, numberBytes) {
30
+ const arr = new Uint8Array(numberBytes);
31
+ const isBigInt = typeof num === 'bigint';
32
+ let value = isBigInt ? num : BigInt(num);
33
+ for (let i = numberBytes - 1; i >= 0; i--) {
34
+ arr[i] = Number(value & 0xffn);
35
+ value = value >> 8n;
36
+ }
37
+ return arr;
38
+ }
39
+ function encodeVarBytes(bytes) {
40
+ const lengthBytes = encodeUint32(bytes.length);
41
+ const result = new Uint8Array(lengthBytes.length + bytes.length);
42
+ result.set(lengthBytes);
43
+ result.set(bytes, lengthBytes.length);
44
+ return result;
45
+ }
46
+ function concatenateUint8Arrays(...arrays) {
47
+ const totalLength = arrays.reduce((acc, arr) => acc + arr.length, 0);
48
+ const result = new Uint8Array(totalLength);
49
+ let offset = 0;
50
+ for (const arr of arrays) {
51
+ result.set(arr, offset);
52
+ offset += arr.length;
53
+ }
54
+ return result;
55
+ }
56
+ function packL1ConversionMessage(args, networkID, sourceChainID) {
57
+ // Uses subnetToL1ConversionID -> marshalSubnetToL1ConversionData (based on TS interfaces)
58
+ const subnetConversionID = subnetToL1ConversionID(args);
59
+ // Uses newSubnetToL1Conversion (which packs codec, len=0, id)
60
+ const addressedCallPayload = newSubnetToL1Conversion(subnetConversionID);
61
+ // Uses newAddressedCall (which packs codec, type=1, sourceAddr, payload)
62
+ const subnetConversionAddressedCall = newAddressedCall(new Uint8Array([]), addressedCallPayload);
63
+ // Uses newUnsignedMessage (which packs codec, network, sourceChain, message)
64
+ const unsignedMessage = newUnsignedMessage(networkID, sourceChainID, subnetConversionAddressedCall);
65
+ return [unsignedMessage, avalanchejs_1.utils.base58check.decode(args.subnetId)];
66
+ }
67
+ function subnetToL1ConversionID(args) {
68
+ const data = marshalSubnetToL1ConversionData(args);
69
+ return (0, sha2_1.sha256)(data);
70
+ }
71
+ function marshalSubnetToL1ConversionData(args) {
72
+ const parts = [];
73
+ parts.push(encodeUint16(CODEC_ID)); // Use constant CODEC_ID
74
+ parts.push(avalanchejs_1.utils.base58check.decode(args.subnetId));
75
+ parts.push(avalanchejs_1.utils.base58check.decode(args.managerChainID));
76
+ parts.push(encodeVarBytes(avalanchejs_1.utils.hexToBuffer(args.managerAddress)));
77
+ parts.push(encodeUint32(args.validators.length));
78
+ // Sort validators by nodeID (using existing compareNodeIDs)
79
+ let sortedValidators;
80
+ try {
81
+ sortedValidators = [...args.validators].sort((a, b) => (0, exports.compareNodeIDs)(a.nodeID, b.nodeID));
82
+ }
83
+ catch (error) {
84
+ logger_1.logger.warn("Error sorting validators, using original order:", error);
85
+ sortedValidators = args.validators;
86
+ }
87
+ for (const validator of sortedValidators) {
88
+ if (!validator.nodeID || !validator.nodePOP || !validator.nodePOP.publicKey) { // Check publicKey existence
89
+ throw new Error(`Invalid validator data: ${JSON.stringify(validator)}`);
90
+ }
91
+ let nodeIDBytes;
92
+ try {
93
+ nodeIDBytes = validator.nodeID.startsWith("NodeID-")
94
+ ? avalanchejs_1.utils.base58check.decode(validator.nodeID.split("-")[1])
95
+ : avalanchejs_1.utils.hexToBuffer(validator.nodeID);
96
+ }
97
+ catch (error) {
98
+ throw new Error(`Failed to parse nodeID '${validator.nodeID}': ${error.message}`);
99
+ }
100
+ // NOTE: This uses nodePOP.publicKey, whereas the Solidity port uses blsPublicKey.
101
+ // Ensure this publicKey corresponds to the expected BLS key if used for similar purposes.
102
+ // Assuming nodePOP.publicKey is the BLS key here based on context.
103
+ const blsPublicKeyBytes = avalanchejs_1.utils.hexToBuffer(validator.nodePOP.publicKey);
104
+ if (blsPublicKeyBytes.length !== 48) {
105
+ logger_1.logger.warn(`Expected BLS public key (nodePOP.publicKey) to be 48 bytes, got ${blsPublicKeyBytes.length}`);
106
+ // Decide whether to throw or allow based on requirements
107
+ // throw new Error(`Invalid BLS public key length from nodePOP.publicKey: ${blsPublicKeyBytes.length}`);
108
+ }
109
+ parts.push(encodeVarBytes(nodeIDBytes));
110
+ parts.push(blsPublicKeyBytes); // Packing the publicKey as if it's the BLS key
111
+ // Note: Solidity uses uint64 (bigint), TS interface uses number. Convert.
112
+ parts.push(encodeUint64(BigInt(validator.weight)));
113
+ }
114
+ const result = concatenateUint8Arrays(...parts);
115
+ return result;
116
+ }
117
+ const compareNodeIDs = (a, b) => {
118
+ // logger.log(a, b); // Removed console log
119
+ let aNodeID;
120
+ let bNodeID;
121
+ try {
122
+ // Try to parse as NodeID-{base58check} or hex
123
+ aNodeID = a.startsWith("NodeID-") ? avalanchejs_1.utils.base58check.decode(a.split("-")[1]) : avalanchejs_1.utils.hexToBuffer(a);
124
+ bNodeID = b.startsWith("NodeID-") ? avalanchejs_1.utils.base58check.decode(b.split("-")[1]) : avalanchejs_1.utils.hexToBuffer(b);
125
+ }
126
+ catch (error) {
127
+ // Fallback to string comparison if parsing fails (e.g., invalid format)
128
+ logger_1.logger.warn(`Failed to parse NodeIDs for comparison ('${a}', '${b}'), falling back to string compare: ${error.message}`);
129
+ return a.localeCompare(b);
130
+ }
131
+ // Compare byte arrays lexicographically
132
+ const minLength = Math.min(aNodeID.length, bNodeID.length);
133
+ for (let i = 0; i < minLength; i++) {
134
+ if (aNodeID[i] !== bNodeID[i]) {
135
+ return aNodeID[i] < bNodeID[i] ? -1 : 1;
136
+ }
137
+ }
138
+ // If one is a prefix of the other, the shorter one comes first
139
+ return aNodeID.length - bNodeID.length;
140
+ };
141
+ exports.compareNodeIDs = compareNodeIDs;
142
+ function newAddressedCall(sourceAddress, payload) {
143
+ return concatenateUint8Arrays(encodeUint16(codecVersion), encodeUint32(1), encodeVarBytes(sourceAddress), encodeVarBytes(payload));
144
+ }
145
+ function newSubnetToL1Conversion(subnetConversionID) {
146
+ return concatenateUint8Arrays(encodeUint16(codecVersion), encodeUint32(0), subnetConversionID);
147
+ }
148
+ function newUnsignedMessage(networkID, sourceChainID, message) {
149
+ return concatenateUint8Arrays(encodeUint16(codecVersion), encodeUint32(networkID), (0, utils_1.cb58ToBytes)(sourceChainID), encodeUint32(message.length), message);
150
+ }
151
+ function packWarpIntoAccessList(warpMessageBytes) {
152
+ const CHUNK_SIZE = 32;
153
+ const chunks = [];
154
+ let currentChunk = Array.from(warpMessageBytes);
155
+ // Add 0xFF terminator
156
+ currentChunk.push(0xFF);
157
+ // Pad to multiple of 32 bytes with zeros
158
+ const paddingNeeded = (CHUNK_SIZE - (currentChunk.length % CHUNK_SIZE)) % CHUNK_SIZE;
159
+ currentChunk = currentChunk.concat(Array(paddingNeeded).fill(0));
160
+ // Split into 32-byte chunks
161
+ for (let i = 0; i < currentChunk.length; i += CHUNK_SIZE) {
162
+ const chunk = currentChunk.slice(i, i + CHUNK_SIZE);
163
+ const hexChunk = chunk
164
+ .map(byte => byte.toString(16).padStart(2, '0'))
165
+ .join('');
166
+ chunks.push(`0x${hexChunk}`);
167
+ }
168
+ return [{
169
+ address: "0x0200000000000000000000000000000000000005",
170
+ storageKeys: chunks
171
+ }];
172
+ }
173
+ async function collectSignaturesInitializeValidatorSet(params) {
174
+ // Pack the message locally
175
+ const [message, justification] = packL1ConversionMessage({
176
+ subnetId: params.subnetId,
177
+ managerChainID: params.validatorManagerBlockchainID,
178
+ managerAddress: params.managerAddress,
179
+ validators: params.validators.map(v => ({
180
+ nodeID: v.nodeID,
181
+ nodePOP: {
182
+ publicKey: v.blsPublicKey,
183
+ proofOfPossession: v.blsProofOfPossession
184
+ },
185
+ weight: v.weight
186
+ }))
187
+ }, params.network === 'fuji' ? 5 : 1, config_1.pChainChainID);
188
+ // logger.log("Message:", fromBytes(message, 'hex'));
189
+ // logger.log("Justification:", fromBytes(justification, 'hex'));
190
+ // Use the signature aggregation API from Glacier
191
+ const baseURL = process.env.SIG_AGG_URL ? process.env.SIG_AGG_URL : params.network === 'fuji' ? 'https://glacier-api-dev.avax.network/v1/signatureAggregator/fuji/aggregateSignatures' : 'https://glacier-api.avax.network/v1/signatureAggregator/mainnet/aggregateSignatures';
192
+ const signResponse = await (0, utils_1.retryWhileError)(() => fetch(baseURL, {
193
+ method: 'POST',
194
+ headers: {
195
+ 'accept': 'application/json',
196
+ 'Content-Type': 'application/json',
197
+ },
198
+ body: JSON.stringify({
199
+ "message": (0, viem_1.fromBytes)(message, 'hex'),
200
+ "justification": (0, viem_1.fromBytes)(justification, 'hex'),
201
+ "signingSubnetId": params.validatorManagerSubnetID,
202
+ // "quorumPercentage": 67
203
+ })
204
+ }), 2000, 30000, (result) => result.status !== 500);
205
+ if (!signResponse.ok) {
206
+ const errorText = await signResponse.text();
207
+ throw new Error(errorText || `HTTP error! status: ${signResponse.status}`);
208
+ }
209
+ const { signedMessage } = await signResponse.json();
210
+ return signedMessage;
211
+ }
212
+ async function getSigningSubnetIdFromWarpMessage(client, message) {
213
+ const signingChainIdHex = "0x" + message.slice(14, 78);
214
+ const signingChainId = avalanchejs_1.utils.base58check.encode((0, viem_1.hexToBytes)(signingChainIdHex));
215
+ const signingSubnetId = await (0, pChainUtils_1.validatedBy)(client, signingChainId);
216
+ if (!signingSubnetId)
217
+ throw new Error("Could not find signing subnet ID");
218
+ return signingSubnetId;
219
+ }
220
+ async function collectSignatures({ network, message, justification, signingSubnetId }) {
221
+ // Use the signature aggregation API from Glacier
222
+ const body = { message };
223
+ if (justification)
224
+ body.justification = justification;
225
+ body.signingSubnetId = signingSubnetId;
226
+ body.quorumPercentage = 67;
227
+ // Test every 2 seconds, timeout after 30 seconds
228
+ const baseURL = process.env.SIG_AGG_URL ? process.env.SIG_AGG_URL : network === 'fuji' ? 'https://glacier-api-dev.avax.network/v1/signatureAggregator/fuji/aggregateSignatures' : 'https://glacier-api.avax.network/v1/signatureAggregator/mainnet/aggregateSignatures';
229
+ const signResponse = await (0, utils_1.retryWhileError)(() => fetch(baseURL, {
230
+ method: 'POST',
231
+ headers: {
232
+ 'accept': 'application/json',
233
+ 'Content-Type': 'application/json'
234
+ },
235
+ body: JSON.stringify(body)
236
+ }), 2000, 30000, (result) => result.status !== 500);
237
+ if (!signResponse.ok) {
238
+ const errorText = await signResponse.text();
239
+ throw new Error(errorText || `HTTP error! status: ${signResponse.status}`);
240
+ }
241
+ const { signedMessage } = await signResponse.json();
242
+ return signedMessage;
243
+ }
244
+ // Add new function to pack L1 validator registration message
245
+ function packL1ValidatorRegistration(validationID, registered, networkID, sourceChainID) {
246
+ // Validate validationID length
247
+ if (validationID.length !== 32) {
248
+ throw new Error('ValidationID must be exactly 32 bytes');
249
+ }
250
+ const messagePayload = concatenateUint8Arrays(encodeUint16(codecVersion), encodeUint32(2), // L1_VALIDATOR_REGISTRATION_MESSAGE_TYPE_ID
251
+ validationID, new Uint8Array([registered ? 1 : 0]));
252
+ // Create addressed call with empty source address
253
+ const addressedCall = newAddressedCall(new Uint8Array([]), messagePayload);
254
+ // Create unsigned message
255
+ return newUnsignedMessage(networkID, sourceChainID, addressedCall);
256
+ }
257
+ // Add new function to pack L1 validator weight message
258
+ function packL1ValidatorWeightMessage(validationID, nonce, weight, networkID, sourceChainID) {
259
+ // Validate validationID length
260
+ if (validationID.length !== 32) {
261
+ throw new Error('ValidationID must be exactly 32 bytes');
262
+ }
263
+ const messagePayload = concatenateUint8Arrays(encodeUint16(codecVersion), encodeUint32(3), // L1_VALIDATOR_WEIGHT_MESSAGE_TYPE_ID
264
+ validationID, encodeUint64(nonce), encodeUint64(weight));
265
+ // Create addressed call with empty source address
266
+ const addressedCall = newAddressedCall(new Uint8Array([]), messagePayload);
267
+ // Create unsigned message
268
+ return newUnsignedMessage(networkID, sourceChainID, addressedCall);
269
+ }
270
+ // --- Constants ---
271
+ const CODEC_ID = 0; // uint16 internal constant CODEC_ID = 0; (replaces codecVersion variable)
272
+ // const codecVersion = 0; // Replaced by CODEC_ID
273
+ // const SUBNET_TO_L1_CONVERSION_MESSAGE_TYPE_ID = 0; // uint32
274
+ const REGISTER_L1_VALIDATOR_MESSAGE_TYPE_ID = 1; // uint32 (already defined in original file)
275
+ // const L1_VALIDATOR_REGISTRATION_MESSAGE_TYPE_ID = 2; // uint32 (already defined in original file)
276
+ // const L1_VALIDATOR_WEIGHT_MESSAGE_TYPE_ID = 3; // uint32
277
+ const VALIDATION_UPTIME_MESSAGE_TYPE_ID = 0; // uint32 (Note: same as SUBNET_TO_L1_CONVERSION_MESSAGE_TYPE_ID)
278
+ // --- RegisterL1ValidatorMessage ---
279
+ // Function to pack *only* the payload using the SolidityValidationPeriod interface.
280
+ function packRegisterL1ValidatorPayload(validationPeriod) {
281
+ if (validationPeriod.blsPublicKey.length !== 48) {
282
+ throw new Error('Invalid BLS public key length, expected 48 bytes');
283
+ }
284
+ const parts = [];
285
+ parts.push(encodeUint16(CODEC_ID));
286
+ parts.push(encodeUint32(REGISTER_L1_VALIDATOR_MESSAGE_TYPE_ID));
287
+ if (validationPeriod.subnetID.length !== 32)
288
+ throw new Error("subnetID must be 32 bytes");
289
+ parts.push(validationPeriod.subnetID);
290
+ parts.push(encodeVarBytes(validationPeriod.nodeID)); // Includes length prefix
291
+ parts.push(validationPeriod.blsPublicKey);
292
+ parts.push(encodeUint64(validationPeriod.registrationExpiry));
293
+ // remainingBalanceOwner
294
+ parts.push(encodeUint32(validationPeriod.remainingBalanceOwner.threshold));
295
+ parts.push(encodeUint32(validationPeriod.remainingBalanceOwner.addresses.length));
296
+ for (const address of validationPeriod.remainingBalanceOwner.addresses) {
297
+ const addrBytes = avalanchejs_1.utils.hexToBuffer(address);
298
+ if (addrBytes.length !== 20)
299
+ throw new Error("Owner address must be 20 bytes hex string");
300
+ parts.push(addrBytes);
301
+ }
302
+ // disableOwner
303
+ parts.push(encodeUint32(validationPeriod.disableOwner.threshold));
304
+ parts.push(encodeUint32(validationPeriod.disableOwner.addresses.length));
305
+ for (const address of validationPeriod.disableOwner.addresses) {
306
+ const addrBytes = avalanchejs_1.utils.hexToBuffer(address);
307
+ if (addrBytes.length !== 20)
308
+ throw new Error("Owner address must be 20 bytes hex string");
309
+ parts.push(addrBytes);
310
+ }
311
+ parts.push(encodeUint64(validationPeriod.weight));
312
+ return concatenateUint8Arrays(...parts);
313
+ }
314
+ /**
315
+ * Parses the payload of a RegisterL1ValidatorMessage into the SolidityValidationPeriod structure.
316
+ * Mirrors Solidity's unpackRegisterL1ValidatorMessage.
317
+ */
318
+ function unpackRegisterL1ValidatorPayload(input) {
319
+ let index = 0;
320
+ const validation = {
321
+ remainingBalanceOwner: { threshold: 0, addresses: [] },
322
+ disableOwner: { threshold: 0, addresses: [] },
323
+ };
324
+ // Unpack codec ID
325
+ const codecID = parseUint16(input, index);
326
+ if (codecID !== CODEC_ID) {
327
+ throw new Error(`Invalid codec ID: ${codecID}`);
328
+ }
329
+ index += 2;
330
+ // Unpack type ID
331
+ const typeID = parseUint32(input, index);
332
+ if (typeID !== REGISTER_L1_VALIDATOR_MESSAGE_TYPE_ID) {
333
+ throw new Error(`Invalid message type: ${typeID}`);
334
+ }
335
+ index += 4;
336
+ // Unpack subnetID
337
+ validation.subnetID = parseBytes(input, index, 32);
338
+ index += 32;
339
+ // Unpack nodeID (var bytes)
340
+ const { bytes: nodeIDBytes, newOffset: nodeIDEndOffset } = parseVarBytes(input, index);
341
+ validation.nodeID = nodeIDBytes;
342
+ index = nodeIDEndOffset;
343
+ // Unpack BLS public key
344
+ validation.blsPublicKey = parseBytes(input, index, 48);
345
+ index += 48;
346
+ // Unpack registration expiry
347
+ validation.registrationExpiry = parseUint64(input, index);
348
+ index += 8;
349
+ // Unpack remainingBalanceOwner threshold
350
+ validation.remainingBalanceOwner.threshold = parseUint32(input, index);
351
+ index += 4;
352
+ // Unpack remainingBalanceOwner addresses length
353
+ const remainingBalanceOwnerAddressesLength = parseUint32(input, index);
354
+ index += 4;
355
+ // Unpack remainingBalanceOwner addresses
356
+ validation.remainingBalanceOwner.addresses = [];
357
+ for (let i = 0; i < remainingBalanceOwnerAddressesLength; i++) {
358
+ const addrBytes = parseBytes(input, index, 20);
359
+ validation.remainingBalanceOwner.addresses.push(bytesToHexPrefixed(addrBytes));
360
+ index += 20;
361
+ }
362
+ // Unpack disableOwner threshold
363
+ validation.disableOwner.threshold = parseUint32(input, index);
364
+ index += 4;
365
+ // Unpack disableOwner addresses length
366
+ const disableOwnerAddressesLength = parseUint32(input, index);
367
+ index += 4;
368
+ // Unpack disableOwner addresses
369
+ validation.disableOwner.addresses = [];
370
+ for (let i = 0; i < disableOwnerAddressesLength; i++) {
371
+ const addrBytes = parseBytes(input, index, 20);
372
+ validation.disableOwner.addresses.push(bytesToHexPrefixed(addrBytes));
373
+ index += 20;
374
+ }
375
+ // Unpack weight
376
+ validation.weight = parseUint64(input, index);
377
+ index += 8;
378
+ // Validate total length by comparing the final index with input length
379
+ if (index !== input.length) {
380
+ // Calculate expected length based on parsed variable fields for better error message
381
+ const expectedLength = 2 + 4 + 32 + (4 + validation.nodeID.length) + 48 + 8 +
382
+ (4 + 4 + remainingBalanceOwnerAddressesLength * 20) +
383
+ (4 + 4 + disableOwnerAddressesLength * 20) + 8;
384
+ throw new Error(`Invalid message length: parsed ${index} bytes, expected ${expectedLength}, total length ${input.length}`);
385
+ }
386
+ return validation;
387
+ }
388
+ // Helper functions for parsing numbers (already exist at end of file, moved up for clarity)
389
+ function parseUint16(input, offset) {
390
+ if (offset + 2 > input.length)
391
+ throw new Error("parseUint16: Offset out of bounds");
392
+ let result = 0;
393
+ for (let i = 0; i < 2; i++) {
394
+ result = (result << 8) | input[offset + i];
395
+ }
396
+ return result;
397
+ }
398
+ function parseUint32(input, offset) {
399
+ if (offset + 4 > input.length)
400
+ throw new Error("parseUint32: Offset out of bounds");
401
+ let result = 0;
402
+ for (let i = 0; i < 4; i++) {
403
+ result = (result << 8) | input[offset + i];
404
+ }
405
+ // Return as unsigned integer
406
+ return result >>> 0;
407
+ }
408
+ function parseUint64(input, offset) {
409
+ if (offset + 8 > input.length)
410
+ throw new Error("parseUint64: Offset out of bounds");
411
+ let result = 0n;
412
+ for (let i = 0; i < 8; i++) {
413
+ result = (result << 8n) | BigInt(input[offset + i]);
414
+ }
415
+ return result;
416
+ }
417
+ function parseBytes(input, offset, length) {
418
+ if (offset + length > input.length)
419
+ throw new Error("parseBytes: Offset/length out of bounds");
420
+ return input.slice(offset, offset + length);
421
+ }
422
+ function parseVarBytes(input, offset) {
423
+ const length = parseUint32(input, offset);
424
+ const newOffset = offset + 4;
425
+ const bytes = parseBytes(input, newOffset, length);
426
+ return { bytes, newOffset: newOffset + length };
427
+ }
428
+ const bytesToHexPrefixed = (bytes) => `0x${Buffer.from(bytes).toString('hex')}`;
429
+ function packValidationUptimeMessage(validationId, uptimeSeconds, networkID, sourceChainID) {
430
+ // Convert validationId to hex
431
+ const validationIdHex = (0, utils_1.cb58ToHex)(validationId);
432
+ const validationIdBytes = (0, viem_1.hexToBytes)(validationIdHex);
433
+ // Create the message payload with the proper format
434
+ const messagePayload = concatenateUint8Arrays(encodeUint16(codecVersion), encodeUint32(VALIDATION_UPTIME_MESSAGE_TYPE_ID), validationIdBytes, encodeUint64(BigInt(uptimeSeconds)));
435
+ // Create addressed call with empty source address
436
+ const addressedCall = newAddressedCall(new Uint8Array([]), messagePayload);
437
+ // Create unsigned message
438
+ return newUnsignedMessage(networkID, sourceChainID, addressedCall);
439
+ }
440
+ function decodeWarpMessage(log) {
441
+ const abi = (0, viem_1.parseAbiItem)('event SendWarpMessage(address indexed sender, bytes32 indexed messageID, bytes message)');
442
+ return (0, viem_1.decodeEventLog)({
443
+ abi: [abi],
444
+ data: log.data,
445
+ topics: log.topics,
446
+ });
447
+ }
448
+ //# sourceMappingURL=warpUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warpUtils.js","sourceRoot":"","sources":["../../src/lib/warpUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import { Hex } from 'viem';
2
+ import { SafeSuzakuContract, SuzakuContract } from './lib/viemUtils';
3
+ import { ExtendedClient, ExtendedPublicClient, ExtendedWalletClient } from './client';
4
+ import { Config } from './config';
5
+ import { NodeId } from './lib/utils';
6
+ import { DecodedEvent } from './lib/cChainUtils';
7
+ export declare function middlewareRegisterOperator(middleware: SafeSuzakuContract['L1Middleware'], operator: Hex): Promise<void>;
8
+ export declare function middlewareDisableOperator(middleware: SafeSuzakuContract['L1Middleware'], operator: Hex): Promise<void>;
9
+ export declare function middlewareRemoveOperator(middleware: SafeSuzakuContract['L1Middleware'], operator: Hex): Promise<void>;
10
+ export declare function middlewareAddNode(middleware: SafeSuzakuContract['L1Middleware'], nodeId: NodeId, blsKey: Hex, remainingBalanceOwner: [number, `0x${string}`[]], disableOwner: [number, `0x${string}`[]], initialStake: bigint): Promise<`0x${string}`>;
11
+ export declare function middlewareRemoveNode(middleware: SafeSuzakuContract['L1Middleware'], nodeId: NodeId): Promise<`0x${string}`>;
12
+ export declare function middlewareInitStakeUpdate(middleware: SafeSuzakuContract['L1Middleware'], nodeId: NodeId, newStake: bigint): Promise<`0x${string}`>;
13
+ export declare function middlewareCalcNodeStakes(middleware: SafeSuzakuContract['L1Middleware']): Promise<void>;
14
+ export declare function middlewareForceUpdateNodes(middleware: SafeSuzakuContract['L1Middleware'], operator: Hex, limitStake: bigint): Promise<void>;
15
+ export declare function middlewareGetOperatorStake(middleware: SuzakuContract['L1Middleware'], operator: Hex, epoch: number, collateralClass: bigint): Promise<void>;
16
+ export declare function middlewareGetCurrentEpoch(middleware: SuzakuContract['L1Middleware']): Promise<void>;
17
+ export declare function middlewareGetEpochStartTs(middleware: SuzakuContract['L1Middleware'], epoch: number): Promise<void>;
18
+ export declare function middlewareGetActiveNodesForEpoch(middleware: SuzakuContract['L1Middleware'], operator: Hex, epoch: number): Promise<void>;
19
+ export declare function middlewareGetOperatorNodesLength(middleware: SuzakuContract['L1Middleware'], operator: Hex): Promise<void>;
20
+ export declare function middlewareGetNodeStakeCache(middleware: SuzakuContract['L1Middleware'], epoch: number, validationId: Hex): Promise<void>;
21
+ export declare function middlewareGetOperatorLockedStake(middleware: SuzakuContract['L1Middleware'], operator: Hex): Promise<void>;
22
+ export declare function middlewareNodePendingRemoval(middleware: SuzakuContract['L1Middleware'], validatorId: Hex): Promise<void>;
23
+ export declare function middlewareNodePendingUpdate(middleware: SuzakuContract['L1Middleware'], validatorId: Hex): Promise<void>;
24
+ export declare function middlewareGetOperatorUsedStake(middleware: SuzakuContract['L1Middleware'], operator: Hex): Promise<void>;
25
+ export declare function middlewareGetAllOperators(middleware: SuzakuContract['L1Middleware']): Promise<void>;
26
+ /**
27
+ * Gets all operator nodes
28
+ */
29
+ export declare function getAllOperators(middleware: SuzakuContract['L1Middleware']): Promise<readonly string[]>;
30
+ /**
31
+ * Gets all collateral class IDs
32
+ */
33
+ export declare function getCollateralClassIds(middleware: SuzakuContract['L1Middleware']): Promise<readonly bigint[]>;
34
+ /**
35
+ * Gets active collateral classes (primary and secondary)
36
+ */
37
+ export declare function getActiveCollateralClasses(middleware: SuzakuContract['L1Middleware']): Promise<readonly [bigint, readonly bigint[]]>;
38
+ export declare function middlewareGetNodeLogs(client: ExtendedClient, middleware: SuzakuContract['L1Middleware'], config: Config<ExtendedPublicClient>, nodeId?: NodeId, snowscanApiKey?: string, quiet?: boolean): Promise<DecodedEvent[] | undefined>;
39
+ export declare function groupEventsByNodeId(events: DecodedEvent[]): Record<string, {
40
+ source: string;
41
+ event: string;
42
+ hash: string;
43
+ executionTime: string;
44
+ }[]>;
45
+ export declare function middlewareManualProcessNodeStakeCache(middleware: SafeSuzakuContract['L1Middleware'], numEpochsToProcess: number): Promise<void>;
46
+ export declare function middlewareLastValidationId(client: ExtendedClient, middleware: SuzakuContract['L1Middleware'], balancer: SuzakuContract['BalancerValidatorManager'], nodeId: NodeId): Promise<Hex>;
47
+ export declare function weightSync(middleware: SafeSuzakuContract['L1Middleware'], config: Config<ExtendedWalletClient>, options: {
48
+ epochs?: number;
49
+ loopEpochs?: number;
50
+ }): Promise<void>;
51
+ export interface OperatorForceUpdatePrediction {
52
+ operator: Hex;
53
+ willLoseWeight: boolean;
54
+ currentTotalStake: bigint;
55
+ cappedTotalStake: bigint;
56
+ registeredStake: bigint;
57
+ stakeDeficit: bigint;
58
+ activeNodesCount: number;
59
+ }
60
+ export declare function predictForceUpdateImpact(config: Config<ExtendedClient>, middleware: SafeSuzakuContract['L1Middleware'], operators: Hex[]): Promise<OperatorForceUpdatePrediction[]>;
61
+ export declare function middlewareInfo(middleware: SuzakuContract['L1Middleware']): Promise<{
62
+ middlewareAddress: `0x${string}`;
63
+ owner: Hex;
64
+ balancerValidatorManager: Hex;
65
+ primaryAssetClass: string;
66
+ primaryAsset: Hex;
67
+ weightScaleFactor: string;
68
+ updateWindow: string;
69
+ startTime: string;
70
+ currentEpoch: string;
71
+ operatorsCount: number;
72
+ collateralClassIds: string[];
73
+ lastGlobalNodeStakeUpdateEpoch: string;
74
+ vaultManager: Hex;
75
+ }>;