@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,577 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractPayloadFromAddressedCall = extractPayloadFromAddressedCall;
4
+ exports.calculateValidationID = calculateValidationID;
5
+ exports.GetRegistrationJustification = GetRegistrationJustification;
6
+ exports.hexToUint8Array = hexToUint8Array;
7
+ exports.parseRegisterL1ValidatorMessage = parseRegisterL1ValidatorMessage;
8
+ exports.parseUint32 = parseUint32;
9
+ // Using more generic types without specific library dependencies
10
+ const buffer_1 = require("buffer");
11
+ const viem_1 = require("viem");
12
+ const avalanchejs_1 = require("@avalabs/avalanchejs");
13
+ const sha2_1 = require("@noble/hashes/sha2");
14
+ const warpUtils_1 = require("./warpUtils");
15
+ const logger_1 = require("./logger");
16
+ const codecVersion = 0;
17
+ const REGISTER_L1_VALIDATOR_MESSAGE_TYPE_ID = 1;
18
+ /**
19
+ * Extracts the addressedCall from an unsignedWarpMessage
20
+ *
21
+ * UnsignedMessage structure from convertWarp:
22
+ * - codecVersion (uint16 - 2 bytes)
23
+ * - networkID (uint32 - 4 bytes)
24
+ * - sourceChainID (32 bytes)
25
+ * - message length (uint32 - 4 bytes)
26
+ * - message (the variable-length bytes we want)
27
+ *
28
+ * @param messageBytes - The raw unsignedWarpMessage bytes
29
+ * @returns The extracted message (addressedCall)
30
+ */
31
+ function extractAddressedCall(messageBytes) {
32
+ try {
33
+ // logger.log(`Parsing UnsignedMessage of length: ${messageBytes.length} bytes`);
34
+ if (messageBytes.length < 42) { // 2 + 4 + 32 + 4 = minimum 42 bytes
35
+ // logger.log('UnsignedMessage too short');
36
+ return new Uint8Array();
37
+ }
38
+ // const codecVersion = (messageBytes[0] << 8) | messageBytes[1];
39
+ // logger.log(`Raw codecVersion bytes: 0x${Buffer.from([messageBytes[0], messageBytes[1]]).toString('hex')}`);
40
+ // const networkIDBytes = messageBytes.slice(2, 6);
41
+ // logger.log(`Raw networkID bytes: 0x${Buffer.from(networkIDBytes).toString('hex')}`);
42
+ // const networkID = (messageBytes[2] << 24) |
43
+ // (messageBytes[3] << 16) |
44
+ // (messageBytes[4] << 8) |
45
+ // messageBytes[5];
46
+ // logger.log(`UnsignedMessage -> codecVersion: ${codecVersion}, NetworkID: ${networkID}`);
47
+ // const sourceChainIDBytes = messageBytes.slice(6, 38);
48
+ // logger.log(`Raw sourceChainID bytes: 0x${Buffer.from(sourceChainIDBytes).toString('hex')}`);
49
+ // try {
50
+ // let sourceChainIDStr = utils.base58check.encode(Buffer.from(sourceChainIDBytes));
51
+ // logger.log(`UnsignedMessage -> SourceChainID: ${sourceChainIDStr}`);
52
+ // } catch (e) {
53
+ // logger.log('Could not encode sourceChainID from UnsignedMessage');
54
+ // }
55
+ const messageLength = (messageBytes[38] << 24) |
56
+ (messageBytes[39] << 16) |
57
+ (messageBytes[40] << 8) |
58
+ messageBytes[41];
59
+ // logger.log(`UnsignedMessage -> AddressedCall length: ${messageLength} bytes`);
60
+ if (messageLength <= 0 || 42 + messageLength > messageBytes.length) {
61
+ // logger.log('Invalid message length or message extends beyond UnsignedMessage data bounds');
62
+ return new Uint8Array();
63
+ }
64
+ const addressedCall = messageBytes.slice(42, 42 + messageLength);
65
+ // logger.log(`Extracted AddressedCall of length ${addressedCall.length} bytes`);
66
+ return addressedCall;
67
+ }
68
+ catch (error) {
69
+ logger_1.logger.error('Error extracting addressedCall from UnsignedMessage:', error);
70
+ return new Uint8Array();
71
+ }
72
+ }
73
+ /**
74
+ * Decodes a Base58Check encoded ID string (like SubnetID or ChainID) into its raw bytes.
75
+ * Returns null if decoding fails.
76
+ * @param idString - The ID string.
77
+ * @returns The decoded bytes as Uint8Array or null.
78
+ */
79
+ function decodeID(idString) {
80
+ if (!idString) {
81
+ logger_1.logger.error("Invalid ID format: empty string");
82
+ return null;
83
+ }
84
+ try {
85
+ return avalanchejs_1.utils.base58check.decode(idString);
86
+ }
87
+ catch (e) {
88
+ logger_1.logger.error("Error decoding ID:", idString, e);
89
+ return null;
90
+ }
91
+ }
92
+ /**
93
+ * Decodes a Base58Check encoded NodeID string (e.g., "NodeID-...") into its raw bytes.
94
+ * Returns null if decoding fails.
95
+ * @param nodeIDString - The NodeID string.
96
+ * @returns The decoded bytes as Uint8Array or null.
97
+ */
98
+ function decodeNodeID(nodeIDString) {
99
+ if (!nodeIDString || !nodeIDString.startsWith("NodeID-")) {
100
+ logger_1.logger.error("Invalid NodeID format:", nodeIDString);
101
+ return null;
102
+ }
103
+ try {
104
+ // Remove "NodeID-" prefix before decoding
105
+ return avalanchejs_1.utils.base58check.decode(nodeIDString.substring(7));
106
+ }
107
+ catch (e) {
108
+ logger_1.logger.error("Error decoding NodeID:", nodeIDString, e);
109
+ return null;
110
+ }
111
+ }
112
+ /**
113
+ * Converts a non-negative integer (up to 32 bits) to a 4-byte Big Endian Uint8Array.
114
+ * @param value - The number to convert.
115
+ * @returns A 4-byte Uint8Array.
116
+ */
117
+ function uint32ToBigEndianBytes(value) {
118
+ const buffer = buffer_1.Buffer.alloc(4);
119
+ buffer.writeUInt32BE(value, 0);
120
+ return new Uint8Array(buffer);
121
+ }
122
+ /**
123
+ * Appends a uint32 index to a byte array (typically a SubnetID) to compute a derived ID.
124
+ * This mimics the Go `ids.ID.Append(uint32)` logic used for bootstrap validator IDs.
125
+ * @param baseIDBytes - The base ID bytes (e.g., SubnetID).
126
+ * @param index - The uint32 index to append.
127
+ * @returns The combined ID bytes.
128
+ */
129
+ function computeDerivedID(baseIDBytes, index) {
130
+ const indexBytes = uint32ToBigEndianBytes(index);
131
+ const combined = new Uint8Array(baseIDBytes.length + indexBytes.length);
132
+ combined.set(baseIDBytes, 0);
133
+ combined.set(indexBytes, baseIDBytes.length);
134
+ return combined;
135
+ }
136
+ /**
137
+ * Compares two Uint8Arrays for byte equality.
138
+ * @param a - First Uint8Array.
139
+ * @param b - Second Uint8Array.
140
+ * @returns True if arrays are identical, false otherwise.
141
+ */
142
+ function compareBytes(a, b) {
143
+ if (!a || !b)
144
+ return false;
145
+ if (a.length !== b.length)
146
+ return false;
147
+ for (let i = 0; i < a.length; i++) {
148
+ if (a[i] !== b[i])
149
+ return false;
150
+ }
151
+ return true;
152
+ }
153
+ /**
154
+ * Encodes a non-negative integer into Protobuf Varint format.
155
+ * @param value - The non-negative integer to encode.
156
+ * @returns A Uint8Array containing the Varint bytes.
157
+ */
158
+ function encodeVarint(value) {
159
+ const bytes = [];
160
+ while (value >= 0x80) {
161
+ bytes.push((value & 0x7f) | 0x80);
162
+ value >>>= 7; // Use unsigned right shift
163
+ }
164
+ bytes.push(value);
165
+ return new Uint8Array(bytes);
166
+ }
167
+ /**
168
+ * Manually marshals the ConvertSubnetToL1TxData justification protobuf.
169
+ * L1ValidatorRegistrationJustification {
170
+ * oneof preimage {
171
+ * // Field 1
172
+ * SubnetIDIndex convert_subnet_to_l1_tx_data = 1;
173
+ * // Field 2
174
+ * bytes register_l1_validator_message = 2;
175
+ * }
176
+ * }
177
+ * SubnetIDIndex {
178
+ * bytes subnet_id = 1; // wire type 2
179
+ * uint32 index = 2; // wire type 0 (varint)
180
+ * }
181
+ *
182
+ * @param subnetIDBytes - The raw bytes of the subnet ID.
183
+ * @param index - The bootstrap index.
184
+ * @returns The marshalled L1ValidatorRegistrationJustification bytes.
185
+ */
186
+ function marshalConvertSubnetToL1TxDataJustification(subnetIDBytes, index) {
187
+ // Marshal Inner SubnetIDIndex message
188
+ // Field 1: subnet_id (bytes)
189
+ const subnetIdTag = new Uint8Array([0x0a]); // Field 1, wire type 2
190
+ const subnetIdLen = encodeVarint(subnetIDBytes.length);
191
+ // Field 2: index (uint32, varint)
192
+ const indexTag = new Uint8Array([0x10]); // Field 2, wire type 0
193
+ const indexVarint = encodeVarint(index);
194
+ const innerMsgLength = subnetIdTag.length + subnetIdLen.length + subnetIDBytes.length + indexTag.length + indexVarint.length;
195
+ const innerMsgBytes = new Uint8Array(innerMsgLength);
196
+ let offset = 0;
197
+ innerMsgBytes.set(subnetIdTag, offset);
198
+ offset += subnetIdTag.length;
199
+ innerMsgBytes.set(subnetIdLen, offset);
200
+ offset += subnetIdLen.length;
201
+ innerMsgBytes.set(subnetIDBytes, offset);
202
+ offset += subnetIDBytes.length;
203
+ innerMsgBytes.set(indexTag, offset);
204
+ offset += indexTag.length;
205
+ innerMsgBytes.set(indexVarint, offset);
206
+ // Marshal Outer L1ValidatorRegistrationJustification message
207
+ // Field 1: convert_subnet_to_l1_tx_data (message)
208
+ const outerTag = new Uint8Array([0x0a]); // Field 1, wire type 2
209
+ const outerLen = encodeVarint(innerMsgBytes.length);
210
+ const justificationBytes = new Uint8Array(outerTag.length + outerLen.length + innerMsgBytes.length);
211
+ offset = 0;
212
+ justificationBytes.set(outerTag, offset);
213
+ offset += outerTag.length;
214
+ justificationBytes.set(outerLen, offset);
215
+ offset += outerLen.length;
216
+ justificationBytes.set(innerMsgBytes, offset);
217
+ return justificationBytes;
218
+ }
219
+ /**
220
+ * Extracts the payload bytes from an AddressedCall byte array.
221
+ * Assumes AddressedCall structure:
222
+ * - TypeID (4 bytes, starting at index 2)
223
+ * - Source Address Length (4 bytes, starting at index 6)
224
+ * - Source Address (variable)
225
+ * - Payload Length (4 bytes, starting after source address)
226
+ * - Payload (variable)
227
+ *
228
+ * @param addressedCall - The AddressedCall bytes.
229
+ * @returns The extracted payload as a Uint8Array, or null if parsing fails or data is insufficient.
230
+ */
231
+ function extractPayloadFromAddressedCall(addressedCall) {
232
+ try {
233
+ // Need at least 10 bytes for TypeID and Source Address Length.
234
+ if (addressedCall.length < 10) {
235
+ // logger.warn('AddressedCall too short to contain Source Address Length');
236
+ return null;
237
+ }
238
+ // Source Address Length starts at index 6
239
+ const sourceAddrLen = (addressedCall[6] << 24) | (addressedCall[7] << 16) | (addressedCall[8] << 8) | addressedCall[9];
240
+ if (sourceAddrLen < 0) { // Should not happen with unsigned bytes, but good practice
241
+ // logger.warn('Invalid Source Address Length (<0)');
242
+ return null;
243
+ }
244
+ // Position where Payload Length starts
245
+ const payloadLenPos = 10 + sourceAddrLen;
246
+ // Check if we have enough bytes to read Payload Length
247
+ if (payloadLenPos + 4 > addressedCall.length) {
248
+ // logger.warn('AddressedCall too short to contain Payload Length');
249
+ return null;
250
+ }
251
+ // Read Payload Length
252
+ const payloadLen = (addressedCall[payloadLenPos] << 24) |
253
+ (addressedCall[payloadLenPos + 1] << 16) |
254
+ (addressedCall[payloadLenPos + 2] << 8) |
255
+ addressedCall[payloadLenPos + 3];
256
+ // Check if payload length is valid
257
+ if (payloadLen <= 0) {
258
+ // logger.warn('Invalid Payload Length (<=0)');
259
+ return null;
260
+ }
261
+ const payloadStartPos = payloadLenPos + 4;
262
+ const payloadEndPos = payloadStartPos + payloadLen;
263
+ // Check if payload extends beyond data bounds
264
+ if (payloadEndPos > addressedCall.length) {
265
+ // logger.warn('Payload extends beyond AddressedCall data bounds');
266
+ return null;
267
+ }
268
+ // Extract Payload
269
+ const payloadBytes = addressedCall.slice(payloadStartPos, payloadEndPos);
270
+ return payloadBytes;
271
+ }
272
+ catch (error) {
273
+ logger_1.logger.error('Error extracting payload from AddressedCall:', error);
274
+ return null;
275
+ }
276
+ }
277
+ /**
278
+ * Calculates the validationID hash for a RegisterL1ValidatorMessage payload.
279
+ * Uses the SolidityValidationPeriod interface.
280
+ */
281
+ function calculateValidationID(validationPeriod) {
282
+ const payload = (0, warpUtils_1.packRegisterL1ValidatorPayload)(validationPeriod);
283
+ return (0, sha2_1.sha256)(payload);
284
+ }
285
+ // Define the ABI for the SendWarpMessage event
286
+ const sendWarpMessageEventAbi = (0, viem_1.parseAbiItem)('event SendWarpMessage(address indexed sourceAddress, bytes32 indexed unsignedMessageID, bytes message)');
287
+ /**
288
+ * Gets the marshalled L1ValidatorRegistrationJustification protobuf bytes for a specific
289
+ * validation ID and subnet. It first checks if the validation ID corresponds to the hash
290
+ * of a derived bootstrap validator ID (SubnetID + Index). If not found, it queries
291
+ * Warp logs for a RegisterL1ValidatorMessage payload whose hash matches the validation ID
292
+ * and constructs the justification using that message payload.
293
+ *
294
+ * @param nodeID - The node ID of the validator (e.g., "NodeID-..."), used for logging and secondary confirmation.
295
+ * @param validationIDHex - The target validation ID as a '0x' prefixed hex string (bytes32).
296
+ * @param subnetIDStr - The subnet ID as a Base58Check string.
297
+ * @param ExtendedPublicClient - A client that can perform getLogs operations.
298
+ * @returns The marshalled L1ValidatorRegistrationJustification bytes as a Uint8Array, or null if not found/error.
299
+ */
300
+ async function GetRegistrationJustification(nodeID, // Keep for logging/confirmation
301
+ validationIDHex, subnetIDStr, ExtendedPublicClient, latestBlock) {
302
+ const WARP_ADDRESS = '0x0200000000000000000000000000000000000005';
303
+ const NUM_BOOTSTRAP_VALIDATORS_TO_SEARCH = 100;
304
+ let targetValidationIDBytes;
305
+ try {
306
+ targetValidationIDBytes = (0, viem_1.hexToBytes)(validationIDHex);
307
+ if (targetValidationIDBytes.length !== 32) {
308
+ throw new Error(`Decoded validationID must be 32 bytes, got ${targetValidationIDBytes.length}`);
309
+ }
310
+ }
311
+ catch (e) {
312
+ logger_1.logger.error(`Failed to decode provided validationIDHex '${validationIDHex}': ${e.message}`);
313
+ return null;
314
+ }
315
+ const subnetIDBytes = decodeID(subnetIDStr);
316
+ const targetNodeIDBytes = decodeNodeID(nodeID); // Decode for log confirmation
317
+ if (!subnetIDBytes) {
318
+ logger_1.logger.error(`Failed to decode provided SubnetID: ${subnetIDStr}`);
319
+ return null;
320
+ }
321
+ if (!targetNodeIDBytes) {
322
+ logger_1.logger.warn(`Failed to decode provided NodeID for confirmation: ${nodeID}`);
323
+ // Allow continuing without targetNodeIDBytes for confirmation
324
+ }
325
+ // 1. Check for bootstrap validators (comparing hash of derived ID against targetValidationIDBytes)
326
+ for (let index = 0; index < NUM_BOOTSTRAP_VALIDATORS_TO_SEARCH; index++) {
327
+ // Compute the 36-byte derived ID (SubnetID + Index)
328
+ const bootstrapDerivedBytes = computeDerivedID(subnetIDBytes, index);
329
+ // Compute the SHA-256 hash (32 bytes)
330
+ const bootstrapValidationIDHash = (0, sha2_1.sha256)(bootstrapDerivedBytes);
331
+ // Compare the derived hash with the target validation ID
332
+ if (compareBytes(bootstrapValidationIDHash, targetValidationIDBytes)) {
333
+ logger_1.logger.log(`ValidationID ${validationIDHex} matches HASH of bootstrap validator derived ID (subnet ${subnetIDStr}, index ${index})`);
334
+ // Marshal justification using the *original* subnetID and index
335
+ const justificationBytes = marshalConvertSubnetToL1TxDataJustification(subnetIDBytes, index);
336
+ return justificationBytes;
337
+ }
338
+ }
339
+ logger_1.logger.log(`ValidationID ${validationIDHex} not found within the HASHES of the first ${NUM_BOOTSTRAP_VALIDATORS_TO_SEARCH} bootstrap validator indices for subnet ${subnetIDStr}. Checking Warp logs...`);
340
+ // 2. If not a bootstrap validator, search Warp logs
341
+ try {
342
+ // Start from the latest block and search backwards in batches
343
+ latestBlock = latestBlock ? latestBlock : await ExtendedPublicClient.getLogs({ fromBlock: 'latest' }).then(logs => logs.length > 0 ? logs[0].blockNumber : 0) || 0n;
344
+ const BATCH_SIZE = 2048;
345
+ let fromBlock = latestBlock;
346
+ let toBlock = latestBlock;
347
+ let justification = null;
348
+ logger_1.logger.log(`Starting search from latest block ${latestBlock} in batches of ${BATCH_SIZE} blocks...`);
349
+ while (fromBlock > 0n && !justification) {
350
+ // Calculate batch range
351
+ fromBlock = BigInt(Math.max(0, Number(toBlock) - BATCH_SIZE + 1));
352
+ logger_1.logger.log(`Searching for Warp logs in block range: ${fromBlock} to ${toBlock}...`);
353
+ const warpLogs = await ExtendedPublicClient.getLogs({
354
+ address: WARP_ADDRESS,
355
+ event: sendWarpMessageEventAbi,
356
+ fromBlock: fromBlock,
357
+ toBlock: toBlock,
358
+ });
359
+ if (warpLogs.length > 0) {
360
+ logger_1.logger.log(`Found ${warpLogs.length} Warp logs in block range ${fromBlock}-${toBlock}. Searching for justification matching ValidationID ${validationIDHex}...`);
361
+ for (const log of warpLogs) {
362
+ try {
363
+ const decodedArgs = log.args;
364
+ const fullMessageHex = decodedArgs.message;
365
+ if (!fullMessageHex)
366
+ continue;
367
+ const unsignedMessageBytes = buffer_1.Buffer.from(fullMessageHex.slice(2), 'hex');
368
+ const addressedCall = extractAddressedCall(unsignedMessageBytes);
369
+ if (addressedCall.length === 0)
370
+ continue;
371
+ // Check TypeID within AddressedCall for RegisterL1ValidatorMessage
372
+ if (addressedCall.length < 6)
373
+ continue;
374
+ const acTypeID = (addressedCall[2] << 24) | (addressedCall[3] << 16) | (addressedCall[4] << 8) | addressedCall[5];
375
+ const REGISTER_L1_VALIDATOR_MESSAGE_TYPE_ID_IN_AC = 1;
376
+ if (acTypeID !== REGISTER_L1_VALIDATOR_MESSAGE_TYPE_ID_IN_AC) {
377
+ continue;
378
+ }
379
+ const payloadBytes = extractPayloadFromAddressedCall(addressedCall);
380
+ if (!payloadBytes)
381
+ continue;
382
+ try {
383
+ // Unpack the payload
384
+ const parsedPayload = (0, warpUtils_1.unpackRegisterL1ValidatorPayload)(payloadBytes);
385
+ // Calculate the validationID (hash) of this message payload
386
+ const logValidationIDBytes = calculateValidationID(parsedPayload);
387
+ // Compare the calculated hash with the target validation ID
388
+ if (compareBytes(logValidationIDBytes, targetValidationIDBytes)) {
389
+ if (targetNodeIDBytes && !compareBytes(parsedPayload.nodeID, targetNodeIDBytes)) {
390
+ logger_1.logger.warn(`ValidationID match found (${validationIDHex}) in log ${log.transactionHash}, but NodeID in message (${avalanchejs_1.utils.base58check.encode(buffer_1.Buffer.from(parsedPayload.nodeID))}) does not match expected NodeID ${nodeID}. Skipping.`);
391
+ continue;
392
+ }
393
+ const tag = new Uint8Array([0x12]);
394
+ const lengthVarint = encodeVarint(payloadBytes.length);
395
+ const marshalledJustification = new Uint8Array(tag.length + lengthVarint.length + payloadBytes.length);
396
+ marshalledJustification.set(tag, 0);
397
+ marshalledJustification.set(lengthVarint, tag.length);
398
+ marshalledJustification.set(payloadBytes, tag.length + lengthVarint.length);
399
+ logger_1.logger.log(`Found matching ValidationID ${validationIDHex} (NodeID ${nodeID}) in Warp log (Tx: ${log.transactionHash}, Block: ${log.blockNumber}). Marshalled justification.`);
400
+ justification = marshalledJustification;
401
+ break; // Exit the loop once found
402
+ }
403
+ }
404
+ catch {
405
+ // logger.warn(`Error parsing/hashing RegisterL1ValidatorMessage payload from Tx ${log.transactionHash}:`, parseOrHashError);
406
+ }
407
+ }
408
+ catch (logProcessingError) {
409
+ logger_1.logger.error(`Error processing log entry for tx ${log.transactionHash}:`, logProcessingError);
410
+ }
411
+ }
412
+ }
413
+ else {
414
+ logger_1.logger.log(`No Warp logs found in block range ${fromBlock}-${toBlock}.`);
415
+ }
416
+ // If justification was found, break out of the while loop
417
+ if (justification)
418
+ break;
419
+ // Move to previous batch
420
+ toBlock = fromBlock - 1n;
421
+ // Exit if we've scanned all blocks
422
+ if (toBlock < 0)
423
+ break;
424
+ }
425
+ if (!justification) {
426
+ logger_1.logger.log(`No matching registration log found for ValidationID ${validationIDHex} in any Warp logs.`);
427
+ }
428
+ return justification;
429
+ }
430
+ catch (fetchLogError) {
431
+ logger_1.logger.error(`Error fetching or decoding logs for ValidationID ${validationIDHex}:`, fetchLogError);
432
+ return null;
433
+ }
434
+ }
435
+ // Helper functions
436
+ function hexToUint8Array(hex) {
437
+ // Remove '0x' prefix if present
438
+ const hexString = hex.startsWith('0x') ? hex.slice(2) : hex;
439
+ return buffer_1.Buffer.from(hexString, 'hex');
440
+ }
441
+ /**
442
+ * Parses a RegisterL1ValidatorMessage from a byte array.
443
+ * The message format specification is:
444
+ *
445
+ * RegisterL1ValidatorMessage:
446
+ * +-----------------------+-------------+--------------------------------------------------------------------+
447
+ * | codecID : uint16 | 2 bytes |
448
+ * +-----------------------+-------------+--------------------------------------------------------------------+
449
+ * | typeID : uint32 | 4 bytes |
450
+ * +-----------------------+-------------+-------------------------------------------------------------------+
451
+ * | subnetID : [32]byte | 32 bytes |
452
+ * +-----------------------+-------------+--------------------------------------------------------------------+
453
+ * | nodeID : []byte | 4 + len(nodeID) bytes |
454
+ * +-----------------------+-------------+--------------------------------------------------------------------+
455
+ * | blsPublicKey : [48]byte | 48 bytes |
456
+ * +-----------------------+-------------+--------------------------------------------------------------------+
457
+ * | expiry : uint64 | 8 bytes |
458
+ * +-----------------------+-------------+--------------------------------------------------------------------+
459
+ * | remainingBalanceOwner : PChainOwner | 8 + len(addresses) * 20 bytes |
460
+ * +-----------------------+-------------+--------------------------------------------------------------------+
461
+ * | disableOwner : PChainOwner | 8 + len(addresses) * 20 bytes |
462
+ * +-----------------------+-------------+--------------------------------------------------------------------+
463
+ * | weight : uint64 | 8 bytes |
464
+ * +-----------------------+-------------+--------------------------------------------------------------------+
465
+ * | 122 + len(nodeID) + (len(addresses1) + len(addresses2)) * 20 bytes |
466
+ * +--------------------------------------------------------------------+
467
+ *
468
+ * PChainOwner:
469
+ * +-----------+------------+-------------------------------+
470
+ * | threshold : uint32 | 4 bytes |
471
+ * +-----------+------------+-------------------------------+
472
+ * | addresses : [][20]byte | 4 + len(addresses) * 20 bytes |
473
+ * +-----------+------------+-------------------------------+
474
+ * | 8 + len(addresses) * 20 bytes |
475
+ * +-------------------------------+
476
+ */
477
+ function parseRegisterL1ValidatorMessage(input) {
478
+ let index = 0;
479
+ const validation = {
480
+ subnetId: '',
481
+ nodeID: '',
482
+ blsPublicKey: '0x',
483
+ registrationExpiry: 0n,
484
+ remainingBalanceOwner: { threshold: 0, addresses: [] },
485
+ disableOwner: { threshold: 0, addresses: [] },
486
+ weight: 0n
487
+ };
488
+ // Parse codec ID
489
+ const codecID = parseUint16(input, index);
490
+ if (codecID !== codecVersion) {
491
+ throw new Error(`Invalid codec ID: ${codecID}`);
492
+ }
493
+ index += 2;
494
+ // Parse type ID
495
+ const typeID = parseUint32(input, index);
496
+ if (typeID !== REGISTER_L1_VALIDATOR_MESSAGE_TYPE_ID) {
497
+ throw new Error(`Invalid message type: ${typeID}`);
498
+ }
499
+ index += 4;
500
+ // Parse subnetID
501
+ const subnetIDBytes = input.slice(index, index + 32);
502
+ validation.subnetId = avalanchejs_1.utils.base58check.encode(subnetIDBytes);
503
+ index += 32;
504
+ // Parse nodeID length
505
+ const nodeIDLength = parseUint32(input, index);
506
+ index += 4;
507
+ // Parse nodeID
508
+ const nodeIDBytes = input.slice(index, index + nodeIDLength);
509
+ validation.nodeID = `NodeID-${avalanchejs_1.utils.base58check.encode(nodeIDBytes)}`;
510
+ index += nodeIDLength;
511
+ // Parse BLS public key
512
+ const blsPublicKeyBytes = input.slice(index, index + 48);
513
+ validation.blsPublicKey = `0x${buffer_1.Buffer.from(blsPublicKeyBytes).toString('hex')}`;
514
+ index += 48;
515
+ // Parse registration expiry
516
+ validation.registrationExpiry = parseUint64(input, index);
517
+ index += 8;
518
+ // Parse remainingBalanceOwner threshold
519
+ validation.remainingBalanceOwner.threshold = parseUint32(input, index);
520
+ index += 4;
521
+ // Parse remainingBalanceOwner addresses length
522
+ const remainingBalanceOwnerAddressesLength = parseUint32(input, index);
523
+ index += 4;
524
+ // Parse remainingBalanceOwner addresses
525
+ validation.remainingBalanceOwner.addresses = [];
526
+ for (let i = 0; i < remainingBalanceOwnerAddressesLength; i++) {
527
+ const addrBytes = input.slice(index, index + 20);
528
+ const addr = `0x${buffer_1.Buffer.from(addrBytes).toString('hex')}`;
529
+ validation.remainingBalanceOwner.addresses.push(addr);
530
+ index += 20;
531
+ }
532
+ // Parse disableOwner threshold
533
+ validation.disableOwner.threshold = parseUint32(input, index);
534
+ index += 4;
535
+ // Parse disableOwner addresses length
536
+ const disableOwnerAddressesLength = parseUint32(input, index);
537
+ index += 4;
538
+ // Parse disableOwner addresses
539
+ validation.disableOwner.addresses = [];
540
+ for (let i = 0; i < disableOwnerAddressesLength; i++) {
541
+ const addrBytes = input.slice(index, index + 20);
542
+ const addr = `0x${buffer_1.Buffer.from(addrBytes).toString('hex')}`;
543
+ validation.disableOwner.addresses.push(addr);
544
+ index += 20;
545
+ }
546
+ // Validate input length
547
+ const expectedLength = 122 + nodeIDLength + (remainingBalanceOwnerAddressesLength + disableOwnerAddressesLength) * 20;
548
+ if (input.length !== expectedLength) {
549
+ throw new Error(`Invalid message length: got ${input.length}, expected ${expectedLength}`);
550
+ }
551
+ // Parse weight
552
+ validation.weight = parseUint64(input, index);
553
+ return validation;
554
+ }
555
+ // Helper functions for parsing numbers
556
+ function parseUint16(input, offset) {
557
+ let result = 0;
558
+ for (let i = 0; i < 2; i++) {
559
+ result = (result << 8) | input[offset + i];
560
+ }
561
+ return result;
562
+ }
563
+ function parseUint32(input, offset) {
564
+ let result = 0;
565
+ for (let i = 0; i < 4; i++) {
566
+ result = (result << 8) | input[offset + i];
567
+ }
568
+ return result;
569
+ }
570
+ function parseUint64(input, offset) {
571
+ let result = 0n;
572
+ for (let i = 0; i < 8; i++) {
573
+ result = (result << 8n) | BigInt(input[offset + i]);
574
+ }
575
+ return result;
576
+ }
577
+ //# sourceMappingURL=justification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"justification.js","sourceRoot":"","sources":["../../src/lib/justification.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { PublicActions, WalletClient } from "viem";
2
+ import { ExtendedAccount, Network } from "../client";
3
+ export declare function getLedgerAccount(network: Network, accountIndex?: number): Promise<ExtendedAccount>;
4
+ export declare function toSafeProvider(client: WalletClient & PublicActions, account: ExtendedAccount): Promise<any>;