@sequence0/sdk 1.1.2 → 2.0.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.
- package/README.md +1 -1
- package/dist/chains/algorand.d.ts +44 -0
- package/dist/chains/algorand.d.ts.map +1 -0
- package/dist/chains/algorand.js +148 -0
- package/dist/chains/algorand.js.map +1 -0
- package/dist/chains/aptos.d.ts +39 -0
- package/dist/chains/aptos.d.ts.map +1 -0
- package/dist/chains/aptos.js +168 -0
- package/dist/chains/aptos.js.map +1 -0
- package/dist/chains/cardano.d.ts +42 -0
- package/dist/chains/cardano.d.ts.map +1 -0
- package/dist/chains/cardano.js +188 -0
- package/dist/chains/cardano.js.map +1 -0
- package/dist/chains/cosmos.d.ts +42 -0
- package/dist/chains/cosmos.d.ts.map +1 -0
- package/dist/chains/cosmos.js +216 -0
- package/dist/chains/cosmos.js.map +1 -0
- package/dist/chains/dogecoin-litecoin.d.ts +57 -0
- package/dist/chains/dogecoin-litecoin.d.ts.map +1 -0
- package/dist/chains/dogecoin-litecoin.js +521 -0
- package/dist/chains/dogecoin-litecoin.js.map +1 -0
- package/dist/chains/ethereum.d.ts.map +1 -1
- package/dist/chains/ethereum.js +16 -0
- package/dist/chains/ethereum.js.map +1 -1
- package/dist/chains/hedera.d.ts +113 -0
- package/dist/chains/hedera.d.ts.map +1 -0
- package/dist/chains/hedera.js +302 -0
- package/dist/chains/hedera.js.map +1 -0
- package/dist/chains/icp.d.ts +95 -0
- package/dist/chains/icp.d.ts.map +1 -0
- package/dist/chains/icp.js +520 -0
- package/dist/chains/icp.js.map +1 -0
- package/dist/chains/kaspa.d.ts +152 -0
- package/dist/chains/kaspa.d.ts.map +1 -0
- package/dist/chains/kaspa.js +790 -0
- package/dist/chains/kaspa.js.map +1 -0
- package/dist/chains/multiversx.d.ts +143 -0
- package/dist/chains/multiversx.d.ts.map +1 -0
- package/dist/chains/multiversx.js +524 -0
- package/dist/chains/multiversx.js.map +1 -0
- package/dist/chains/near.d.ts +40 -0
- package/dist/chains/near.d.ts.map +1 -0
- package/dist/chains/near.js +170 -0
- package/dist/chains/near.js.map +1 -0
- package/dist/chains/polkadot.d.ts +43 -0
- package/dist/chains/polkadot.d.ts.map +1 -0
- package/dist/chains/polkadot.js +179 -0
- package/dist/chains/polkadot.js.map +1 -0
- package/dist/chains/ripple.d.ts +41 -0
- package/dist/chains/ripple.d.ts.map +1 -0
- package/dist/chains/ripple.js +190 -0
- package/dist/chains/ripple.js.map +1 -0
- package/dist/chains/stellar.d.ts +40 -0
- package/dist/chains/stellar.d.ts.map +1 -0
- package/dist/chains/stellar.js +156 -0
- package/dist/chains/stellar.js.map +1 -0
- package/dist/chains/sui.d.ts +44 -0
- package/dist/chains/sui.d.ts.map +1 -0
- package/dist/chains/sui.js +157 -0
- package/dist/chains/sui.js.map +1 -0
- package/dist/chains/tezos.d.ts +43 -0
- package/dist/chains/tezos.d.ts.map +1 -0
- package/dist/chains/tezos.js +162 -0
- package/dist/chains/tezos.js.map +1 -0
- package/dist/chains/ton.d.ts +40 -0
- package/dist/chains/ton.d.ts.map +1 -0
- package/dist/chains/ton.js +168 -0
- package/dist/chains/ton.js.map +1 -0
- package/dist/chains/tron.d.ts +41 -0
- package/dist/chains/tron.d.ts.map +1 -0
- package/dist/chains/tron.js +124 -0
- package/dist/chains/tron.js.map +1 -0
- package/dist/core/atomic.d.ts +76 -0
- package/dist/core/atomic.d.ts.map +1 -0
- package/dist/core/atomic.js +39 -0
- package/dist/core/atomic.js.map +1 -0
- package/dist/core/client.d.ts +238 -0
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +536 -4
- package/dist/core/client.js.map +1 -1
- package/dist/core/delegation.d.ts +184 -0
- package/dist/core/delegation.d.ts.map +1 -0
- package/dist/core/delegation.js +37 -0
- package/dist/core/delegation.js.map +1 -0
- package/dist/core/programmable.d.ts +66 -0
- package/dist/core/programmable.d.ts.map +1 -0
- package/dist/core/programmable.js +36 -0
- package/dist/core/programmable.js.map +1 -0
- package/dist/core/solvency.d.ts +223 -0
- package/dist/core/solvency.d.ts.map +1 -0
- package/dist/core/solvency.js +267 -0
- package/dist/core/solvency.js.map +1 -0
- package/dist/core/types.d.ts +172 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/universal-account.d.ts +438 -0
- package/dist/core/universal-account.d.ts.map +1 -0
- package/dist/core/universal-account.js +597 -0
- package/dist/core/universal-account.js.map +1 -0
- package/dist/core/witness.d.ts +197 -0
- package/dist/core/witness.d.ts.map +1 -0
- package/dist/core/witness.js +298 -0
- package/dist/core/witness.js.map +1 -0
- package/dist/erc4337/types.js +2 -2
- package/dist/index.d.ts +30 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +91 -4
- package/dist/index.js.map +1 -1
- package/dist/settlement/settlement.d.ts +152 -0
- package/dist/settlement/settlement.d.ts.map +1 -0
- package/dist/settlement/settlement.js +172 -0
- package/dist/settlement/settlement.js.map +1 -0
- package/dist/utils/eip712.js +2 -2
- package/dist/utils/fee.d.ts +2 -2
- package/dist/utils/fee.js +2 -2
- package/dist/utils/optional-deps.d.ts +9 -0
- package/dist/utils/optional-deps.d.ts.map +1 -0
- package/dist/utils/optional-deps.js +21 -0
- package/dist/utils/optional-deps.js.map +1 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +6 -1
- package/dist/utils/validation.js.map +1 -1
- package/dist/wallet/wallet.d.ts +52 -0
- package/dist/wallet/wallet.d.ts.map +1 -1
- package/dist/wallet/wallet.js +265 -33
- package/dist/wallet/wallet.js.map +1 -1
- 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"}
|