@sequence0/sdk 1.1.0 → 1.2.0

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 (115) hide show
  1. package/README.md +1 -1
  2. package/dist/chains/algorand.d.ts +44 -0
  3. package/dist/chains/algorand.d.ts.map +1 -0
  4. package/dist/chains/algorand.js +148 -0
  5. package/dist/chains/algorand.js.map +1 -0
  6. package/dist/chains/aptos.d.ts +39 -0
  7. package/dist/chains/aptos.d.ts.map +1 -0
  8. package/dist/chains/aptos.js +168 -0
  9. package/dist/chains/aptos.js.map +1 -0
  10. package/dist/chains/bitcoin-taproot.d.ts +77 -14
  11. package/dist/chains/bitcoin-taproot.d.ts.map +1 -1
  12. package/dist/chains/bitcoin-taproot.js +324 -65
  13. package/dist/chains/bitcoin-taproot.js.map +1 -1
  14. package/dist/chains/bitcoin.d.ts +12 -7
  15. package/dist/chains/bitcoin.d.ts.map +1 -1
  16. package/dist/chains/bitcoin.js +14 -9
  17. package/dist/chains/bitcoin.js.map +1 -1
  18. package/dist/chains/cardano.d.ts +42 -0
  19. package/dist/chains/cardano.d.ts.map +1 -0
  20. package/dist/chains/cardano.js +188 -0
  21. package/dist/chains/cardano.js.map +1 -0
  22. package/dist/chains/cosmos.d.ts +42 -0
  23. package/dist/chains/cosmos.d.ts.map +1 -0
  24. package/dist/chains/cosmos.js +216 -0
  25. package/dist/chains/cosmos.js.map +1 -0
  26. package/dist/chains/dogecoin-litecoin.d.ts +57 -0
  27. package/dist/chains/dogecoin-litecoin.d.ts.map +1 -0
  28. package/dist/chains/dogecoin-litecoin.js +521 -0
  29. package/dist/chains/dogecoin-litecoin.js.map +1 -0
  30. package/dist/chains/ethereum.d.ts.map +1 -1
  31. package/dist/chains/ethereum.js +16 -0
  32. package/dist/chains/ethereum.js.map +1 -1
  33. package/dist/chains/hedera.d.ts +113 -0
  34. package/dist/chains/hedera.d.ts.map +1 -0
  35. package/dist/chains/hedera.js +302 -0
  36. package/dist/chains/hedera.js.map +1 -0
  37. package/dist/chains/icp.d.ts +95 -0
  38. package/dist/chains/icp.d.ts.map +1 -0
  39. package/dist/chains/icp.js +520 -0
  40. package/dist/chains/icp.js.map +1 -0
  41. package/dist/chains/kaspa.d.ts +152 -0
  42. package/dist/chains/kaspa.d.ts.map +1 -0
  43. package/dist/chains/kaspa.js +790 -0
  44. package/dist/chains/kaspa.js.map +1 -0
  45. package/dist/chains/multiversx.d.ts +143 -0
  46. package/dist/chains/multiversx.d.ts.map +1 -0
  47. package/dist/chains/multiversx.js +524 -0
  48. package/dist/chains/multiversx.js.map +1 -0
  49. package/dist/chains/near.d.ts +40 -0
  50. package/dist/chains/near.d.ts.map +1 -0
  51. package/dist/chains/near.js +170 -0
  52. package/dist/chains/near.js.map +1 -0
  53. package/dist/chains/polkadot.d.ts +43 -0
  54. package/dist/chains/polkadot.d.ts.map +1 -0
  55. package/dist/chains/polkadot.js +179 -0
  56. package/dist/chains/polkadot.js.map +1 -0
  57. package/dist/chains/ripple.d.ts +41 -0
  58. package/dist/chains/ripple.d.ts.map +1 -0
  59. package/dist/chains/ripple.js +190 -0
  60. package/dist/chains/ripple.js.map +1 -0
  61. package/dist/chains/stellar.d.ts +40 -0
  62. package/dist/chains/stellar.d.ts.map +1 -0
  63. package/dist/chains/stellar.js +156 -0
  64. package/dist/chains/stellar.js.map +1 -0
  65. package/dist/chains/sui.d.ts +44 -0
  66. package/dist/chains/sui.d.ts.map +1 -0
  67. package/dist/chains/sui.js +157 -0
  68. package/dist/chains/sui.js.map +1 -0
  69. package/dist/chains/tezos.d.ts +43 -0
  70. package/dist/chains/tezos.d.ts.map +1 -0
  71. package/dist/chains/tezos.js +162 -0
  72. package/dist/chains/tezos.js.map +1 -0
  73. package/dist/chains/ton.d.ts +40 -0
  74. package/dist/chains/ton.d.ts.map +1 -0
  75. package/dist/chains/ton.js +168 -0
  76. package/dist/chains/ton.js.map +1 -0
  77. package/dist/chains/tron.d.ts +41 -0
  78. package/dist/chains/tron.d.ts.map +1 -0
  79. package/dist/chains/tron.js +124 -0
  80. package/dist/chains/tron.js.map +1 -0
  81. package/dist/core/client.d.ts +4 -5
  82. package/dist/core/client.d.ts.map +1 -1
  83. package/dist/core/client.js +54 -29
  84. package/dist/core/client.js.map +1 -1
  85. package/dist/core/types.d.ts +161 -1
  86. package/dist/core/types.d.ts.map +1 -1
  87. package/dist/erc4337/types.js +2 -2
  88. package/dist/index.d.ts +21 -3
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +85 -4
  91. package/dist/index.js.map +1 -1
  92. package/dist/utils/discovery.d.ts.map +1 -1
  93. package/dist/utils/discovery.js +56 -1
  94. package/dist/utils/discovery.js.map +1 -1
  95. package/dist/utils/eip712.d.ts +36 -0
  96. package/dist/utils/eip712.d.ts.map +1 -0
  97. package/dist/utils/eip712.js +80 -0
  98. package/dist/utils/eip712.js.map +1 -0
  99. package/dist/utils/fee.d.ts +2 -2
  100. package/dist/utils/fee.js +2 -2
  101. package/dist/utils/optional-deps.d.ts +9 -0
  102. package/dist/utils/optional-deps.d.ts.map +1 -0
  103. package/dist/utils/optional-deps.js +21 -0
  104. package/dist/utils/optional-deps.js.map +1 -0
  105. package/dist/utils/validation.d.ts +8 -0
  106. package/dist/utils/validation.d.ts.map +1 -1
  107. package/dist/utils/validation.js +24 -1
  108. package/dist/utils/validation.js.map +1 -1
  109. package/dist/utils/websocket.js +1 -1
  110. package/dist/utils/websocket.js.map +1 -1
  111. package/dist/wallet/wallet.d.ts +16 -2
  112. package/dist/wallet/wallet.d.ts.map +1 -1
  113. package/dist/wallet/wallet.js +131 -58
  114. package/dist/wallet/wallet.js.map +1 -1
  115. package/package.json +35 -1
@@ -0,0 +1,524 @@
1
+ "use strict";
2
+ /**
3
+ * MultiversX (formerly Elrond) Chain Adapter
4
+ *
5
+ * Builds MultiversX transactions using the REST API, attaches Ed25519
6
+ * signatures from the FROST threshold signing network, and broadcasts
7
+ * via the MultiversX gateway/API.
8
+ *
9
+ * MultiversX uses Ed25519 for signing. The signing payload is the raw
10
+ * bytes of the deterministic JSON serialization of the transaction —
11
+ * no hashing is needed because Ed25519 signs the raw message bytes.
12
+ *
13
+ * No external dependencies — uses raw HTTP API calls.
14
+ *
15
+ * Address format: erd1... (bech32 with "erd" HRP)
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * import { MultiversXAdapter } from '@sequence0/sdk';
20
+ *
21
+ * const mvx = new MultiversXAdapter('mainnet');
22
+ *
23
+ * // Build a transfer transaction
24
+ * const unsignedTx = await mvx.buildTransaction(
25
+ * { to: 'erd1...recipient', amount: '1000000000000000000' }, // 1 EGLD
26
+ * 'erd1...sender'
27
+ * );
28
+ *
29
+ * // ... sign via FROST ed25519 ...
30
+ * const signedTx = await mvx.attachSignature(unsignedTx, signatureHex);
31
+ * const txHash = await mvx.broadcast(signedTx);
32
+ * ```
33
+ */
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.MultiversXAdapter = void 0;
36
+ exports.createMultiversXAdapter = createMultiversXAdapter;
37
+ exports.createMultiversXDevnetAdapter = createMultiversXDevnetAdapter;
38
+ exports.createMultiversXTestnetAdapter = createMultiversXTestnetAdapter;
39
+ const errors_1 = require("../utils/errors");
40
+ // ── Network Configuration ──
41
+ const DEFAULT_API_URLS = {
42
+ 'mainnet': 'https://api.multiversx.com',
43
+ 'devnet': 'https://devnet-api.multiversx.com',
44
+ 'testnet': 'https://testnet-api.multiversx.com',
45
+ };
46
+ const CHAIN_IDS = {
47
+ 'mainnet': '1',
48
+ 'devnet': 'D',
49
+ 'testnet': 'T',
50
+ };
51
+ /** Default gas price in atomic units */
52
+ const DEFAULT_GAS_PRICE = 1000000000;
53
+ /** Default gas limit for a simple EGLD transfer */
54
+ const DEFAULT_TRANSFER_GAS_LIMIT = 50000;
55
+ /** Gas per data byte for transactions with data payloads */
56
+ const GAS_PER_DATA_BYTE = 1500;
57
+ /** Minimum gas limit */
58
+ const MIN_GAS_LIMIT = 50000;
59
+ /** Transaction version (current protocol version) */
60
+ const TX_VERSION = 2;
61
+ // ── Bech32 Utilities ──
62
+ const BECH32_ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';
63
+ /**
64
+ * Expand the HRP for bech32 checksum computation
65
+ */
66
+ function bech32HrpExpand(hrp) {
67
+ const ret = [];
68
+ for (let i = 0; i < hrp.length; i++) {
69
+ ret.push(hrp.charCodeAt(i) >> 5);
70
+ }
71
+ ret.push(0);
72
+ for (let i = 0; i < hrp.length; i++) {
73
+ ret.push(hrp.charCodeAt(i) & 31);
74
+ }
75
+ return ret;
76
+ }
77
+ /**
78
+ * Bech32 polymod for checksum verification
79
+ */
80
+ function bech32Polymod(values) {
81
+ const GEN = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];
82
+ let chk = 1;
83
+ for (const v of values) {
84
+ const b = chk >> 25;
85
+ chk = ((chk & 0x1ffffff) << 5) ^ v;
86
+ for (let i = 0; i < 5; i++) {
87
+ if ((b >> i) & 1) {
88
+ chk ^= GEN[i];
89
+ }
90
+ }
91
+ }
92
+ return chk;
93
+ }
94
+ /**
95
+ * Verify and decode a bech32 address, returning the 32-byte public key
96
+ */
97
+ function bech32Decode(addr) {
98
+ const pos = addr.lastIndexOf('1');
99
+ if (pos < 1 || pos + 7 > addr.length) {
100
+ throw new Error(`Invalid bech32 address: ${addr}`);
101
+ }
102
+ const hrp = addr.slice(0, pos);
103
+ const dataStr = addr.slice(pos + 1);
104
+ const data5bit = [];
105
+ for (const c of dataStr) {
106
+ const idx = BECH32_ALPHABET.indexOf(c);
107
+ if (idx < 0)
108
+ throw new Error(`Invalid bech32 character: ${c}`);
109
+ data5bit.push(idx);
110
+ }
111
+ // Verify checksum
112
+ const check = bech32Polymod(bech32HrpExpand(hrp).concat(data5bit));
113
+ if (check !== 1) {
114
+ throw new Error('Invalid bech32 checksum');
115
+ }
116
+ // Remove the 6-character checksum
117
+ const payload5bit = data5bit.slice(0, data5bit.length - 6);
118
+ // Convert from 5-bit groups to 8-bit bytes
119
+ const data = convertBits(payload5bit, 5, 8, false);
120
+ return { hrp, data: new Uint8Array(data) };
121
+ }
122
+ /**
123
+ * Encode bytes as a bech32 address
124
+ */
125
+ function bech32Encode(hrp, data) {
126
+ // Convert from 8-bit bytes to 5-bit groups
127
+ const data5bit = convertBits(Array.from(data), 8, 5, true);
128
+ // Compute checksum
129
+ const values = bech32HrpExpand(hrp).concat(data5bit).concat([0, 0, 0, 0, 0, 0]);
130
+ const polymod = bech32Polymod(values) ^ 1;
131
+ const checksum = [];
132
+ for (let i = 0; i < 6; i++) {
133
+ checksum.push((polymod >> (5 * (5 - i))) & 31);
134
+ }
135
+ let result = hrp + '1';
136
+ for (const d of data5bit.concat(checksum)) {
137
+ result += BECH32_ALPHABET[d];
138
+ }
139
+ return result;
140
+ }
141
+ /**
142
+ * Convert between bit groups (e.g., 5-bit to 8-bit or vice versa)
143
+ */
144
+ function convertBits(data, fromBits, toBits, pad) {
145
+ let acc = 0;
146
+ let bits = 0;
147
+ const ret = [];
148
+ const maxv = (1 << toBits) - 1;
149
+ for (const value of data) {
150
+ if (value < 0 || value >> fromBits !== 0) {
151
+ throw new Error('Invalid value for bit conversion');
152
+ }
153
+ acc = (acc << fromBits) | value;
154
+ bits += fromBits;
155
+ while (bits >= toBits) {
156
+ bits -= toBits;
157
+ ret.push((acc >> bits) & maxv);
158
+ }
159
+ }
160
+ if (pad) {
161
+ if (bits > 0) {
162
+ ret.push((acc << (toBits - bits)) & maxv);
163
+ }
164
+ }
165
+ else if (bits >= fromBits || ((acc << (toBits - bits)) & maxv)) {
166
+ throw new Error('Invalid padding in bit conversion');
167
+ }
168
+ return ret;
169
+ }
170
+ /**
171
+ * Extract the 32-byte public key from an erd1... address
172
+ */
173
+ function addressToPublicKey(address) {
174
+ if (!address.startsWith('erd1')) {
175
+ throw new Error(`Invalid MultiversX address (must start with erd1): ${address}`);
176
+ }
177
+ const { data } = bech32Decode(address);
178
+ if (data.length !== 32) {
179
+ throw new Error(`Invalid MultiversX address length: expected 32 bytes, got ${data.length}`);
180
+ }
181
+ return Buffer.from(data).toString('hex');
182
+ }
183
+ /**
184
+ * Encode a 32-byte public key as an erd1... bech32 address
185
+ */
186
+ function publicKeyToAddress(pubkeyHex) {
187
+ const bytes = Buffer.from(pubkeyHex, 'hex');
188
+ if (bytes.length !== 32) {
189
+ throw new Error(`Invalid public key length: expected 32 bytes, got ${bytes.length}`);
190
+ }
191
+ return bech32Encode('erd', new Uint8Array(bytes));
192
+ }
193
+ // ── Transaction Serialization ──
194
+ /**
195
+ * Serialize a MultiversX transaction to the deterministic JSON format
196
+ * used as the signing payload.
197
+ *
198
+ * MultiversX requires a specific field ordering for deterministic serialization:
199
+ * nonce, value, receiver, sender, gasPrice, gasLimit, data (optional),
200
+ * chainID, version, options (optional)
201
+ *
202
+ * The serialized JSON string (as UTF-8 bytes) is the ed25519 signing payload.
203
+ */
204
+ function serializeTransaction(txFields) {
205
+ // Build the JSON object with deterministic field ordering
206
+ // MultiversX uses a specific ordering that must be preserved
207
+ const parts = [];
208
+ parts.push(`"nonce":${txFields.nonce}`);
209
+ parts.push(`"value":"${txFields.value}"`);
210
+ parts.push(`"receiver":"${txFields.receiver}"`);
211
+ parts.push(`"sender":"${txFields.sender}"`);
212
+ parts.push(`"gasPrice":${txFields.gasPrice}`);
213
+ parts.push(`"gasLimit":${txFields.gasLimit}`);
214
+ if (txFields.data && txFields.data.length > 0) {
215
+ // Data is base64-encoded in the serialized form
216
+ const dataBase64 = Buffer.from(txFields.data, 'utf8').toString('base64');
217
+ parts.push(`"data":"${dataBase64}"`);
218
+ }
219
+ parts.push(`"chainID":"${txFields.chainID}"`);
220
+ parts.push(`"version":${txFields.version}`);
221
+ return `{${parts.join(',')}}`;
222
+ }
223
+ // ── Adapter ──
224
+ class MultiversXAdapter {
225
+ /**
226
+ * Create a MultiversX adapter.
227
+ *
228
+ * @param network - Network to connect to: 'mainnet', 'devnet', or 'testnet'
229
+ * @param apiUrl - Custom API URL (overrides the default for the network)
230
+ */
231
+ constructor(network = 'mainnet', apiUrl) {
232
+ this.network = network;
233
+ this.apiUrl = apiUrl || DEFAULT_API_URLS[network];
234
+ this.chainId = CHAIN_IDS[network];
235
+ }
236
+ getRpcUrl() {
237
+ return this.apiUrl;
238
+ }
239
+ // ────────────────────────────────────────────────
240
+ // Build Transaction
241
+ // ────────────────────────────────────────────────
242
+ /**
243
+ * Build an unsigned MultiversX transaction.
244
+ *
245
+ * The signing payload is the raw UTF-8 bytes of the deterministic
246
+ * JSON serialization of the transaction fields. Ed25519 signs these
247
+ * bytes directly (no hashing step needed — ed25519 internally hashes).
248
+ *
249
+ * Returns hex-encoded JSON containing the serialized TX and signing payload.
250
+ *
251
+ * @param tx - Transaction parameters (to, amount, data, gasLimit)
252
+ * @param fromAddress - Sender erd1... address
253
+ * @returns Hex-encoded payload containing serialized TX and signing bytes
254
+ */
255
+ async buildTransaction(tx, fromAddress) {
256
+ try {
257
+ // Validate addresses
258
+ if (!fromAddress.startsWith('erd1')) {
259
+ throw new Error(`Invalid sender address: ${fromAddress}`);
260
+ }
261
+ if (!tx.to.startsWith('erd1')) {
262
+ throw new Error(`Invalid receiver address: ${tx.to}`);
263
+ }
264
+ // Fetch sender nonce from the network
265
+ const nonce = await this.fetchAccountNonce(fromAddress);
266
+ // Compute gas limit
267
+ let gasLimit = tx.gasLimit || DEFAULT_TRANSFER_GAS_LIMIT;
268
+ if (tx.data && tx.data.length > 0) {
269
+ // Additional gas for data bytes
270
+ const dataGas = Buffer.from(tx.data, 'utf8').length * GAS_PER_DATA_BYTE;
271
+ gasLimit = Math.max(gasLimit, MIN_GAS_LIMIT + dataGas);
272
+ }
273
+ // Build the transaction fields
274
+ const txFields = {
275
+ nonce,
276
+ value: tx.amount,
277
+ receiver: tx.to,
278
+ sender: fromAddress,
279
+ gasPrice: DEFAULT_GAS_PRICE,
280
+ gasLimit,
281
+ data: tx.data,
282
+ chainID: this.chainId,
283
+ version: TX_VERSION,
284
+ };
285
+ // Serialize to deterministic JSON
286
+ const serialized = serializeTransaction(txFields);
287
+ // The signing payload is the raw UTF-8 bytes of the serialized JSON
288
+ // Ed25519 signs this directly (it internally hashes with SHA-512)
289
+ const signingPayloadHex = Buffer.from(serialized, 'utf8').toString('hex');
290
+ const payload = {
291
+ signingPayload: signingPayloadHex,
292
+ serialized,
293
+ nonce,
294
+ sender: fromAddress,
295
+ receiver: tx.to,
296
+ value: tx.amount,
297
+ gasPrice: DEFAULT_GAS_PRICE,
298
+ gasLimit,
299
+ data: tx.data,
300
+ chainID: this.chainId,
301
+ version: TX_VERSION,
302
+ };
303
+ return Buffer.from(JSON.stringify(payload)).toString('hex');
304
+ }
305
+ catch (e) {
306
+ if (e instanceof errors_1.ChainError)
307
+ throw e;
308
+ throw new errors_1.ChainError(`Failed to build MultiversX transaction: ${e.message}`, 'multiversx');
309
+ }
310
+ }
311
+ /**
312
+ * Extract the signing payload from the buildTransaction output.
313
+ *
314
+ * Returns the hex-encoded raw bytes of the serialized TX JSON string.
315
+ * This is signed directly by ed25519 (no additional hashing).
316
+ */
317
+ getSigningPayload(unsignedTx) {
318
+ try {
319
+ const payload = JSON.parse(Buffer.from(unsignedTx, 'hex').toString());
320
+ return payload.signingPayload;
321
+ }
322
+ catch {
323
+ return unsignedTx;
324
+ }
325
+ }
326
+ // ────────────────────────────────────────────────
327
+ // Attach Signature
328
+ // ────────────────────────────────────────────────
329
+ /**
330
+ * Attach an Ed25519 signature to the MultiversX transaction.
331
+ *
332
+ * The signature is a 64-byte Ed25519 signature, attached as a hex
333
+ * string in the "signature" field of the transaction JSON.
334
+ *
335
+ * @param unsignedTx - Hex-encoded unsigned transaction from buildTransaction
336
+ * @param signature - 64-byte Ed25519 signature (hex-encoded, with optional 0x prefix)
337
+ * @returns Hex-encoded signed transaction payload
338
+ */
339
+ async attachSignature(unsignedTx, signature) {
340
+ try {
341
+ const payload = JSON.parse(Buffer.from(unsignedTx, 'hex').toString());
342
+ const sig = signature.startsWith('0x') ? signature.slice(2) : signature;
343
+ // Validate signature length (64 bytes = 128 hex chars)
344
+ if (sig.length !== 128) {
345
+ throw new Error(`Invalid Ed25519 signature length: expected 128 hex chars (64 bytes), got ${sig.length}`);
346
+ }
347
+ const signedPayload = {
348
+ ...payload,
349
+ signature: sig,
350
+ };
351
+ return Buffer.from(JSON.stringify(signedPayload)).toString('hex');
352
+ }
353
+ catch (e) {
354
+ if (e instanceof errors_1.ChainError)
355
+ throw e;
356
+ throw new errors_1.ChainError(`Failed to attach MultiversX signature: ${e.message}`, 'multiversx');
357
+ }
358
+ }
359
+ // ────────────────────────────────────────────────
360
+ // Broadcast
361
+ // ────────────────────────────────────────────────
362
+ /**
363
+ * Broadcast a signed MultiversX transaction.
364
+ *
365
+ * Sends the signed TX JSON to the MultiversX API gateway.
366
+ * The API expects a JSON body with all TX fields plus the "signature" field.
367
+ *
368
+ * @param signedTx - Hex-encoded signed transaction from attachSignature
369
+ * @returns Transaction hash
370
+ */
371
+ async broadcast(signedTx) {
372
+ try {
373
+ const payload = JSON.parse(Buffer.from(signedTx, 'hex').toString());
374
+ if (!payload.signature) {
375
+ throw new Error('Transaction is not signed (missing signature field)');
376
+ }
377
+ // Build the broadcast body in the format the MultiversX API expects
378
+ const broadcastBody = {
379
+ nonce: payload.nonce,
380
+ value: payload.value,
381
+ receiver: payload.receiver,
382
+ sender: payload.sender,
383
+ gasPrice: payload.gasPrice,
384
+ gasLimit: payload.gasLimit,
385
+ chainID: payload.chainID,
386
+ version: payload.version,
387
+ signature: payload.signature,
388
+ };
389
+ // Include data field only if present
390
+ if (payload.data && payload.data.length > 0) {
391
+ broadcastBody.data = Buffer.from(payload.data, 'utf8').toString('base64');
392
+ }
393
+ const response = await fetch(`${this.apiUrl}/transactions`, {
394
+ method: 'POST',
395
+ headers: {
396
+ 'Content-Type': 'application/json',
397
+ },
398
+ body: JSON.stringify(broadcastBody),
399
+ });
400
+ if (!response.ok) {
401
+ const errorText = await response.text();
402
+ throw new Error(`Broadcast failed (HTTP ${response.status}): ${errorText}`);
403
+ }
404
+ const result = await response.json();
405
+ // The API returns the transaction hash in the "txHash" field
406
+ return result.txHash || result.hash || '';
407
+ }
408
+ catch (e) {
409
+ if (e instanceof errors_1.ChainError)
410
+ throw e;
411
+ throw new errors_1.ChainError(`Failed to broadcast MultiversX tx: ${e.message}`, 'multiversx');
412
+ }
413
+ }
414
+ // ────────────────────────────────────────────────
415
+ // Balance
416
+ // ────────────────────────────────────────────────
417
+ /**
418
+ * Get the EGLD balance for an address.
419
+ *
420
+ * Returns balance in atomic EGLD units (1 EGLD = 1e18 atomic units).
421
+ *
422
+ * @param address - MultiversX erd1... bech32 address
423
+ * @returns Balance in atomic EGLD as a string
424
+ */
425
+ async getBalance(address) {
426
+ try {
427
+ if (!address.startsWith('erd1')) {
428
+ throw new Error(`Invalid MultiversX address: ${address}`);
429
+ }
430
+ const response = await fetch(`${this.apiUrl}/accounts/${address}`);
431
+ if (!response.ok) {
432
+ if (response.status === 404)
433
+ return '0';
434
+ throw new Error(`HTTP ${response.status}: ${await response.text()}`);
435
+ }
436
+ const data = await response.json();
437
+ return data.balance || '0';
438
+ }
439
+ catch (e) {
440
+ if (e instanceof errors_1.ChainError)
441
+ throw e;
442
+ // Return '0' for network errors (account may not exist yet)
443
+ return '0';
444
+ }
445
+ }
446
+ // ────────────────────────────────────────────────
447
+ // Utility Methods
448
+ // ────────────────────────────────────────────────
449
+ /**
450
+ * Fetch the current nonce for an account from the network.
451
+ *
452
+ * @param address - erd1... bech32 address
453
+ * @returns Current nonce (next expected TX sequence number)
454
+ */
455
+ async fetchAccountNonce(address) {
456
+ try {
457
+ const response = await fetch(`${this.apiUrl}/accounts/${address}`);
458
+ if (!response.ok) {
459
+ if (response.status === 404)
460
+ return 0; // New account
461
+ throw new Error(`HTTP ${response.status}: ${await response.text()}`);
462
+ }
463
+ const data = await response.json();
464
+ return data.nonce || 0;
465
+ }
466
+ catch (e) {
467
+ if (e instanceof errors_1.ChainError)
468
+ throw e;
469
+ throw new errors_1.ChainError(`Failed to fetch MultiversX account nonce: ${e.message}`, 'multiversx');
470
+ }
471
+ }
472
+ /**
473
+ * Derive an erd1... address from a 32-byte Ed25519 public key.
474
+ *
475
+ * Useful for converting the FROST group verifying key to a
476
+ * MultiversX address.
477
+ *
478
+ * @param pubkeyHex - 32-byte Ed25519 public key (hex-encoded)
479
+ * @returns erd1... bech32 address
480
+ */
481
+ static deriveAddress(pubkeyHex) {
482
+ const clean = pubkeyHex.startsWith('0x') ? pubkeyHex.slice(2) : pubkeyHex;
483
+ return publicKeyToAddress(clean);
484
+ }
485
+ /**
486
+ * Extract the 32-byte public key from an erd1... address.
487
+ *
488
+ * @param address - erd1... bech32 address
489
+ * @returns 32-byte public key (hex-encoded)
490
+ */
491
+ static addressToPublicKey(address) {
492
+ return addressToPublicKey(address);
493
+ }
494
+ }
495
+ exports.MultiversXAdapter = MultiversXAdapter;
496
+ // ── Factory Functions ──
497
+ /**
498
+ * Create a MultiversX mainnet adapter
499
+ *
500
+ * @param apiUrl - Optional custom API URL
501
+ * @returns MultiversXAdapter configured for mainnet
502
+ */
503
+ function createMultiversXAdapter(apiUrl) {
504
+ return new MultiversXAdapter('mainnet', apiUrl);
505
+ }
506
+ /**
507
+ * Create a MultiversX devnet adapter
508
+ *
509
+ * @param apiUrl - Optional custom API URL
510
+ * @returns MultiversXAdapter configured for devnet
511
+ */
512
+ function createMultiversXDevnetAdapter(apiUrl) {
513
+ return new MultiversXAdapter('devnet', apiUrl);
514
+ }
515
+ /**
516
+ * Create a MultiversX testnet adapter
517
+ *
518
+ * @param apiUrl - Optional custom API URL
519
+ * @returns MultiversXAdapter configured for testnet
520
+ */
521
+ function createMultiversXTestnetAdapter(apiUrl) {
522
+ return new MultiversXAdapter('testnet', apiUrl);
523
+ }
524
+ //# sourceMappingURL=multiversx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiversx.js","sourceRoot":"","sources":["../../src/chains/multiversx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Near Chain Adapter
3
+ *
4
+ * Builds Near Protocol transactions using Borsh serialization,
5
+ * attaches Ed25519 signatures from the FROST threshold signing
6
+ * network, and broadcasts via Near JSON RPC.
7
+ *
8
+ * Requires: npm install near-api-js
9
+ */
10
+ import { ChainAdapter, NearTransaction } from '../core/types';
11
+ export declare class NearAdapter implements ChainAdapter {
12
+ private rpcUrl;
13
+ private network;
14
+ private nearApi;
15
+ constructor(network?: 'mainnet' | 'testnet', rpcUrl?: string);
16
+ getRpcUrl(): string;
17
+ /**
18
+ * Build an unsigned Near transaction.
19
+ *
20
+ * Near uses Borsh serialization. The signing payload is
21
+ * SHA-256 of the Borsh-serialized Transaction object.
22
+ */
23
+ buildTransaction(tx: NearTransaction, fromAddress: string): Promise<string>;
24
+ getSigningPayload(unsignedTx: string): string;
25
+ /**
26
+ * Attach an Ed25519 signature to the Near transaction
27
+ */
28
+ attachSignature(unsignedTx: string, signature: string): Promise<string>;
29
+ /**
30
+ * Broadcast a signed Near transaction
31
+ */
32
+ broadcast(signedTx: string): Promise<string>;
33
+ /**
34
+ * Get NEAR balance in yoctoNEAR
35
+ */
36
+ getBalance(address: string): Promise<string>;
37
+ }
38
+ export declare function createNearAdapter(rpcUrl?: string): NearAdapter;
39
+ export declare function createNearTestnetAdapter(rpcUrl?: string): NearAdapter;
40
+ //# sourceMappingURL=near.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"near.d.ts","sourceRoot":"","sources":["../../src/chains/near.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAS9D,qBAAa,WAAY,YAAW,YAAY;IAC5C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAM;gBAET,OAAO,GAAE,SAAS,GAAG,SAAqB,EAAE,MAAM,CAAC,EAAE,MAAM;IAMvE,SAAS,IAAI,MAAM;IAInB;;;;;OAKG;IACG,gBAAgB,CAAC,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqEjF,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAS7C;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB7E;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuClD;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAgBrD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAE9D;AAED,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAErE"}