koilib 2.7.0 → 3.1.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 (66) hide show
  1. package/README.md +75 -12
  2. package/dist/koinos.js +8556 -269
  3. package/dist/koinos.min.js +1 -1
  4. package/lib/Contract.d.ts +66 -18
  5. package/lib/Contract.js +103 -40
  6. package/lib/Contract.js.map +1 -1
  7. package/lib/Provider.d.ts +22 -7
  8. package/lib/Provider.js +60 -21
  9. package/lib/Provider.js.map +1 -1
  10. package/lib/Serializer.d.ts +9 -3
  11. package/lib/Serializer.js +111 -85
  12. package/lib/Serializer.js.map +1 -1
  13. package/lib/Signer.d.ts +58 -38
  14. package/lib/Signer.js +318 -97
  15. package/lib/Signer.js.map +1 -1
  16. package/lib/browser/Contract.d.ts +66 -18
  17. package/lib/browser/Contract.js +103 -40
  18. package/lib/browser/Contract.js.map +1 -1
  19. package/lib/browser/Provider.d.ts +22 -7
  20. package/lib/browser/Provider.js +60 -21
  21. package/lib/browser/Provider.js.map +1 -1
  22. package/lib/browser/Serializer.d.ts +9 -3
  23. package/lib/browser/Serializer.js +111 -85
  24. package/lib/browser/Serializer.js.map +1 -1
  25. package/lib/browser/Signer.d.ts +58 -38
  26. package/lib/browser/Signer.js +318 -97
  27. package/lib/browser/Signer.js.map +1 -1
  28. package/lib/browser/index.d.ts +1 -1
  29. package/lib/browser/index.js +1 -1
  30. package/lib/browser/index.js.map +1 -1
  31. package/lib/browser/indexUtils.d.ts +2 -0
  32. package/lib/browser/indexUtils.js +15 -0
  33. package/lib/browser/indexUtils.js.map +1 -0
  34. package/lib/browser/interface.d.ts +242 -46
  35. package/lib/browser/jsonDescriptors/chain-proto.json +676 -0
  36. package/lib/browser/jsonDescriptors/{krc20-proto.json → token-proto.json} +47 -4
  37. package/lib/browser/protoModules/protocol-proto.d.ts +2 -0
  38. package/lib/browser/protoModules/protocol-proto.js +6336 -0
  39. package/lib/browser/protoModules/protocol-proto.js.map +1 -0
  40. package/lib/browser/utils.d.ts +19 -255
  41. package/lib/browser/utils.js +170 -15
  42. package/lib/browser/utils.js.map +1 -1
  43. package/lib/browser/utilsNode.d.ts +1021 -0
  44. package/lib/browser/utilsNode.js +346 -0
  45. package/lib/browser/utilsNode.js.map +1 -0
  46. package/lib/index.d.ts +1 -1
  47. package/lib/index.js +1 -1
  48. package/lib/index.js.map +1 -1
  49. package/lib/indexUtils.d.ts +2 -0
  50. package/lib/indexUtils.js +15 -0
  51. package/lib/indexUtils.js.map +1 -0
  52. package/lib/interface.d.ts +242 -46
  53. package/lib/jsonDescriptors/chain-proto.json +676 -0
  54. package/lib/jsonDescriptors/{krc20-proto.json → token-proto.json} +47 -4
  55. package/lib/protoModules/protocol-proto.d.ts +2 -0
  56. package/lib/protoModules/protocol-proto.js +6336 -0
  57. package/lib/protoModules/protocol-proto.js.map +1 -0
  58. package/lib/utils.d.ts +19 -255
  59. package/lib/utils.js +170 -15
  60. package/lib/utils.js.map +1 -1
  61. package/lib/utilsNode.d.ts +1021 -0
  62. package/lib/utilsNode.js +346 -0
  63. package/lib/utilsNode.js.map +1 -0
  64. package/package.json +1 -1
  65. package/lib/browser/jsonDescriptors/protocol-proto.json +0 -246
  66. package/lib/jsonDescriptors/protocol-proto.json +0 -246
package/lib/Signer.js CHANGED
@@ -18,17 +18,71 @@ var __importStar = (this && this.__importStar) || function (mod) {
18
18
  __setModuleDefault(result, mod);
19
19
  return result;
20
20
  };
21
- var __importDefault = (this && this.__importDefault) || function (mod) {
22
- return (mod && mod.__esModule) ? mod : { "default": mod };
23
- };
24
21
  Object.defineProperty(exports, "__esModule", { value: true });
25
22
  exports.Signer = void 0;
26
- /* eslint-disable no-param-reassign */
23
+ /* eslint-disable no-param-reassign, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment */
27
24
  const sha256_1 = require("@noble/hashes/sha256");
28
25
  const secp = __importStar(require("@noble/secp256k1"));
29
- const protocol_proto_json_1 = __importDefault(require("./jsonDescriptors/protocol-proto.json"));
30
26
  const utils_1 = require("./utils");
31
- const Serializer_1 = require("./Serializer");
27
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
28
+ // @ts-ignore
29
+ const protocol_proto_js_1 = require("./protoModules/protocol-proto.js");
30
+ const btypeBlockHeader = {
31
+ previous: { type: "bytes", btype: "BLOCK_ID" },
32
+ height: { type: "uint64" },
33
+ timestamp: { type: "uint64" },
34
+ previous_state_merkle_root: { type: "bytes" },
35
+ transaction_merkle_root: { type: "bytes" },
36
+ signer: { type: "bytes", btype: "ADDRESS" },
37
+ };
38
+ const btypeTransactionHeader = {
39
+ chain_id: { type: "bytes" },
40
+ rc_limit: { type: "uint64" },
41
+ nonce: { type: "bytes" },
42
+ operation_merkle_root: { type: "bytes" },
43
+ payer: { type: "bytes", btype: "ADDRESS" },
44
+ payee: { type: "bytes", btype: "ADDRESS" },
45
+ };
46
+ const btypesOperation = {
47
+ upload_contract: {
48
+ type: "object",
49
+ subtypes: {
50
+ contract_id: { type: "bytes", btype: "CONTRACT_ID" },
51
+ bytecode: { type: "bytes" },
52
+ abi: { type: "string" },
53
+ authorizes_call_contract: { type: "bool" },
54
+ authorizes_transaction_application: { type: "bool" },
55
+ authorizes_upload_contract: { type: "bool" },
56
+ },
57
+ },
58
+ call_contract: {
59
+ type: "object",
60
+ subtypes: {
61
+ contract_id: { type: "bytes", btype: "CONTRACT_ID" },
62
+ entry_point: { type: "uint32" },
63
+ args: { type: "bytes" },
64
+ },
65
+ },
66
+ set_system_call: {
67
+ type: "object",
68
+ subtypes: {
69
+ call_id: { type: "uint32" },
70
+ target: {
71
+ type: "object",
72
+ subtypes: {
73
+ thunk_id: { type: "uint32" },
74
+ system_call_bundle: {
75
+ type: "object",
76
+ subtypes: {
77
+ contract_id: { type: "bytes", btype: "CONTRACT_ID" },
78
+ entry_point: { type: "uint32" },
79
+ },
80
+ },
81
+ },
82
+ },
83
+ },
84
+ },
85
+ };
32
86
  /**
33
87
  * The Signer Class contains the private key needed to sign transactions.
34
88
  * It can be created using the seed, wif, or private key
@@ -101,18 +155,13 @@ class Signer {
101
155
  * ```
102
156
  */
103
157
  constructor(c) {
158
+ /**
159
+ * Chain id
160
+ */
161
+ this.chainId = "";
104
162
  this.compressed = typeof c.compressed === "undefined" ? true : c.compressed;
105
163
  this.privateKey = c.privateKey;
106
164
  this.provider = c.provider;
107
- if (c.serializer) {
108
- this.serializer = c.serializer;
109
- }
110
- else {
111
- this.serializer = new Serializer_1.Serializer(protocol_proto_json_1.default, {
112
- defaultTypeName: "active_transaction_data",
113
- bytesConversion: false,
114
- });
115
- }
116
165
  if (typeof c.privateKey === "string") {
117
166
  this.publicKey = secp.getPublicKey(c.privateKey, this.compressed);
118
167
  this.address = (0, utils_1.bitcoinAddress)(this.publicKey);
@@ -121,6 +170,8 @@ class Signer {
121
170
  this.publicKey = secp.getPublicKey(c.privateKey, this.compressed);
122
171
  this.address = (0, utils_1.bitcoinAddress)(this.publicKey);
123
172
  }
173
+ if (c.chainId)
174
+ this.chainId = c.chainId;
124
175
  }
125
176
  /**
126
177
  * Function to import a private key from the WIF
@@ -133,12 +184,12 @@ class Signer {
133
184
  * ```
134
185
  * @returns Signer object
135
186
  */
136
- static fromWif(wif) {
137
- const compressed = wif[0] !== "5";
187
+ static fromWif(wif, compressed) {
188
+ const comp = compressed === undefined ? wif[0] !== "5" : compressed;
138
189
  const privateKey = (0, utils_1.bitcoinDecode)(wif);
139
190
  return new Signer({
140
191
  privateKey: (0, utils_1.toHexString)(privateKey),
141
- compressed,
192
+ compressed: comp,
142
193
  });
143
194
  }
144
195
  /**
@@ -211,15 +262,11 @@ class Signer {
211
262
  }
212
263
  }
213
264
  /**
214
- * Function to sign a transaction. It's important to remark that
215
- * the transaction parameter is modified inside this function.
216
- * @param tx - Unsigned transaction
217
- * @returns
265
+ * Function to sign a hash value. It returns the bytes signature.
266
+ * The signature is in compact format with the recovery byte
267
+ * @param hash - Hash value. Also known as digest
218
268
  */
219
- async signTransaction(tx) {
220
- if (!tx.active)
221
- throw new Error("Active data is not defined");
222
- const hash = (0, sha256_1.sha256)((0, utils_1.decodeBase64)(tx.active));
269
+ async signHash(hash) {
223
270
  const [compSignature, recovery] = await secp.sign(hash, this.privateKey, {
224
271
  recovered: true,
225
272
  canonical: true,
@@ -228,11 +275,42 @@ class Signer {
228
275
  const compactSignature = new Uint8Array(65);
229
276
  compactSignature.set([recovery + 31], 0);
230
277
  compactSignature.set(compSignature, 1);
231
- tx.signature_data = (0, utils_1.encodeBase64)(compactSignature);
232
- const multihash = `0x1220${(0, utils_1.toHexString)(hash)}`; // 12: code sha2-256. 20: length (32 bytes)
233
- tx.id = multihash;
278
+ return compactSignature;
279
+ }
280
+ /**
281
+ * Function to sign a transaction. It's important to remark that
282
+ * the transaction parameter is modified inside this function.
283
+ * @param tx - Unsigned transaction
284
+ */
285
+ async signTransaction(tx, _abis) {
286
+ if (!tx.id)
287
+ throw new Error("Missing transaction id");
288
+ // multihash 0x1220. 12: code sha2-256. 20: length (32 bytes)
289
+ // tx id is a stringified multihash, need to extract the hash digest only
290
+ const hash = (0, utils_1.toUint8Array)(tx.id.slice(6));
291
+ const signature = await this.signHash(hash);
292
+ if (!tx.signatures)
293
+ tx.signatures = [];
294
+ tx.signatures.push((0, utils_1.encodeBase64url)(signature));
234
295
  return tx;
235
296
  }
297
+ /**
298
+ * Function to sign a block for federated consensus. That is,
299
+ * just the ecdsa signature. For other algorithms, like PoW,
300
+ * you have to sign the block and then process the signature
301
+ * to add the extra data (nonce in the case of PoW).
302
+ * @param block - Unsigned block
303
+ */
304
+ async signBlock(block) {
305
+ if (!block.id)
306
+ throw new Error("Missing block id");
307
+ // multihash 0x1220. 12: code sha2-256. 20: length (32 bytes)
308
+ // block id is a stringified multihash, need to extract the hash digest only
309
+ const hash = (0, utils_1.toUint8Array)(block.id.slice(6));
310
+ const signature = await this.signHash(hash);
311
+ block.signature = (0, utils_1.encodeBase64url)(signature);
312
+ return block;
313
+ }
236
314
  /**
237
315
  * Function to sign and send a transaction. It internally uses
238
316
  * [[Provider.sendTransaction]]
@@ -243,28 +321,51 @@ class Signer {
243
321
  * @returns
244
322
  */
245
323
  async sendTransaction(tx, _abis) {
246
- if (!tx.signature_data || !tx.id)
247
- await this.signTransaction(tx);
324
+ var _a;
325
+ if (!tx.signatures || !((_a = tx.signatures) === null || _a === void 0 ? void 0 : _a.length))
326
+ tx = await this.signTransaction(tx);
248
327
  if (!this.provider)
249
328
  throw new Error("provider is undefined");
250
- await this.provider.sendTransaction(tx);
251
- return {
252
- ...tx,
253
- wait: async (type = "byBlock", timeout = 30000) => {
254
- if (!this.provider)
255
- throw new Error("provider is undefined");
256
- return this.provider.wait(tx.id, type, timeout);
257
- },
329
+ const { receipt } = await this.provider.sendTransaction(tx);
330
+ tx.wait = async (type = "byBlock", timeout = 60000) => {
331
+ if (!this.provider)
332
+ throw new Error("provider is undefined");
333
+ return this.provider.wait(tx.id, type, timeout);
258
334
  };
335
+ return { receipt, transaction: tx };
259
336
  }
260
337
  /**
261
- * Function to recover the public key from a signed
338
+ * Function to recover the public key from hash and signature
339
+ * @param hash - hash sha256
340
+ * @param signature - compact signature
341
+ * @param compressed - default true
342
+ */
343
+ static recoverPublicKey(hash, signature, compressed = true) {
344
+ const compactSignatureHex = (0, utils_1.toHexString)(signature);
345
+ const recovery = Number(`0x${compactSignatureHex.slice(0, 2)}`) - 31;
346
+ const rHex = compactSignatureHex.slice(2, 66);
347
+ const sHex = compactSignatureHex.slice(66);
348
+ const r = BigInt(`0x${rHex}`);
349
+ const s = BigInt(`0x${sHex}`);
350
+ const sig = new secp.Signature(r, s);
351
+ const publicKey = secp.recoverPublicKey((0, utils_1.toHexString)(hash), sig.toHex(), recovery);
352
+ if (!publicKey)
353
+ throw new Error("Public key cannot be recovered");
354
+ if (!compressed) {
355
+ return (0, utils_1.toHexString)(publicKey);
356
+ }
357
+ else {
358
+ return secp.Point.fromHex(publicKey).toHex(true);
359
+ }
360
+ }
361
+ /**
362
+ * Function to recover the publics keys from a signed
262
363
  * transaction or block.
263
364
  * The output format can be compressed (default) or uncompressed.
264
365
  *
265
366
  * @example
266
367
  * ```ts
267
- * const publicKey = await Signer.recoverPublicKey(tx);
368
+ * const publicKeys = await Signer.recoverPublicKeys(tx);
268
369
  * ```
269
370
  *
270
371
  * If the signature data contains more data, like in the
@@ -298,7 +399,7 @@ class Signer {
298
399
  * defaultTypeName: "pow_signature_data",
299
400
  * });
300
401
  *
301
- * const signer = await Signer.recoverPublicKey(block, {
402
+ * const publicKeys = await signer.recoverPublicKeys(block, {
302
403
  * transformSignature: async (signatureData) => {
303
404
  * const powSignatureData = await serializer.deserialize(signatureData);
304
405
  * return powSignatureData.recoverable_signature;
@@ -306,41 +407,50 @@ class Signer {
306
407
  * });
307
408
  * ```
308
409
  */
309
- static async recoverPublicKey(txOrBlock, opts) {
310
- if (!txOrBlock.active)
311
- throw new Error("active is not defined");
312
- if (!txOrBlock.signature_data)
313
- throw new Error("signature_data is not defined");
314
- let signatureData = txOrBlock.signature_data;
315
- if (opts && typeof opts.transformSignature === "function") {
316
- signatureData = await opts.transformSignature(txOrBlock.signature_data);
317
- }
410
+ async recoverPublicKeys(txOrBlock, opts) {
318
411
  let compressed = true;
319
- if (opts && typeof opts.compressed !== "undefined") {
412
+ if (opts && opts.compressed !== undefined) {
320
413
  compressed = opts.compressed;
321
414
  }
322
- const hash = (0, sha256_1.sha256)((0, utils_1.decodeBase64)(txOrBlock.active));
323
- const compactSignatureHex = (0, utils_1.toHexString)((0, utils_1.decodeBase64)(signatureData));
324
- const recovery = Number(`0x${compactSignatureHex.slice(0, 2)}`) - 31;
325
- const rHex = compactSignatureHex.slice(2, 66);
326
- const sHex = compactSignatureHex.slice(66);
327
- const r = BigInt(`0x${rHex}`);
328
- const s = BigInt(`0x${sHex}`);
329
- const sig = new secp.Signature(r, s);
330
- const publicKey = secp.recoverPublicKey((0, utils_1.toHexString)(hash), sig.toHex(), recovery);
331
- if (!publicKey)
332
- throw new Error("Public key cannot be recovered");
333
- if (!compressed)
334
- return (0, utils_1.toHexString)(publicKey);
335
- return secp.Point.fromHex(publicKey).toHex(true);
415
+ let signatures = [];
416
+ let headerBytes;
417
+ const block = txOrBlock;
418
+ if (block.signature) {
419
+ if (!block.header)
420
+ throw new Error("Missing block header");
421
+ if (!block.signature)
422
+ throw new Error("Missing block signature");
423
+ signatures = [block.signature];
424
+ const headerDecoded = (0, utils_1.btypeDecode)(block.header, btypeBlockHeader);
425
+ const message = protocol_proto_js_1.koinos.protocol.block_header.create(headerDecoded);
426
+ headerBytes = protocol_proto_js_1.koinos.protocol.block_header.encode(message).finish();
427
+ }
428
+ else {
429
+ const transaction = txOrBlock;
430
+ if (!transaction.header)
431
+ throw new Error("Missing transaction header");
432
+ if (!transaction.signatures)
433
+ throw new Error("Missing transaction signatures");
434
+ signatures = transaction.signatures;
435
+ const headerDecoded = (0, utils_1.btypeDecode)(transaction.header, btypeTransactionHeader);
436
+ const message = protocol_proto_js_1.koinos.protocol.transaction_header.create(headerDecoded);
437
+ headerBytes = protocol_proto_js_1.koinos.protocol.transaction_header.encode(message).finish();
438
+ }
439
+ const hash = (0, sha256_1.sha256)(headerBytes);
440
+ return Promise.all(signatures.map(async (signature) => {
441
+ if (opts && typeof opts.transformSignature === "function") {
442
+ signature = await opts.transformSignature(signature);
443
+ }
444
+ return Signer.recoverPublicKey(hash, (0, utils_1.decodeBase64url)(signature), compressed);
445
+ }));
336
446
  }
337
447
  /**
338
- * Function to recover the signer address from a signed
448
+ * Function to recover the signer addresses from a signed
339
449
  * transaction or block.
340
450
  * The output format can be compressed (default) or uncompressed.
341
451
  * @example
342
452
  * ```ts
343
- * const publicKey = await Signer.recoverAddress(tx);
453
+ * const addresses = await signer.recoverAddress(tx);
344
454
  * ```
345
455
  *
346
456
  * If the signature data contains more data, like in the
@@ -374,7 +484,7 @@ class Signer {
374
484
  * defaultTypeName: "pow_signature_data",
375
485
  * });
376
486
  *
377
- * const signer = await Signer.recoverAddress(block, {
487
+ * const addresses = await signer.recoverAddress(block, {
378
488
  * transformSignature: async (signatureData) => {
379
489
  * const powSignatureData = await serializer.deserialize(signatureData);
380
490
  * return powSignatureData.recoverable_signature;
@@ -382,46 +492,157 @@ class Signer {
382
492
  * });
383
493
  * ```
384
494
  */
385
- static async recoverAddress(txOrBlock, opts) {
386
- const publicKey = await Signer.recoverPublicKey(txOrBlock, opts);
387
- return (0, utils_1.bitcoinAddress)((0, utils_1.toUint8Array)(publicKey));
495
+ async recoverAddresses(txOrBlock, opts) {
496
+ const publicKeys = await this.recoverPublicKeys(txOrBlock, opts);
497
+ return publicKeys.map((publicKey) => (0, utils_1.bitcoinAddress)((0, utils_1.toUint8Array)(publicKey)));
388
498
  }
389
499
  /**
390
- * Function to encode a transaction
391
- * @param activeData - Active data consists of nonce, rc_limit, and
392
- * operations. Do not set the nonce to get it from the blockchain
500
+ * Function to prepare a transaction
501
+ * @param tx - Do not set the nonce to get it from the blockchain
393
502
  * using the provider. The rc_limit is 1e8 by default.
394
- * @returns A transaction encoded. The active field is encoded in
395
- * base64url
503
+ * @returns A prepared transaction. ()
396
504
  */
397
- async encodeTransaction(activeData) {
398
- let { nonce } = activeData;
399
- if (activeData.nonce === undefined) {
505
+ async prepareTransaction(tx) {
506
+ var _a, _b;
507
+ if (!tx.header) {
508
+ tx.header = {};
509
+ }
510
+ const payer = (_a = tx.header.payer) !== null && _a !== void 0 ? _a : this.address;
511
+ const { payee } = tx.header;
512
+ let nonce;
513
+ if (tx.header.nonce === undefined) {
400
514
  if (!this.provider)
401
- throw new Error("Cannot get the nonce because provider is undefined. To skip this call set a nonce in the parameters");
402
- // TODO: Option to resolve names
403
- // this depends on the final architecture for names on Koinos
404
- nonce = await this.provider.getNonce(this.getAddress());
515
+ throw new Error("Cannot get the nonce because provider is undefined. To skip this call set a nonce in the transaction header");
516
+ const oldNonce = (await this.provider.getNonce(payee || payer));
517
+ const message = protocol_proto_js_1.koinos.chain.value_type.create({
518
+ // todo: consider using bigint for big nonces
519
+ uint64_value: String(oldNonce + 1),
520
+ });
521
+ const nonceEncoded = protocol_proto_js_1.koinos.chain.value_type
522
+ .encode(message)
523
+ .finish();
524
+ nonce = (0, utils_1.encodeBase64url)(nonceEncoded);
405
525
  }
406
- const rcLimit = activeData.rc_limit === undefined ? 1e8 : activeData.rc_limit;
407
- const operations = activeData.operations ? activeData.operations : [];
408
- const activeData2 = {
526
+ else {
527
+ nonce = tx.header.nonce;
528
+ }
529
+ let rcLimit;
530
+ if (tx.header.rc_limit === undefined) {
531
+ if (!this.provider)
532
+ throw new Error("Cannot get the rc_limit because provider is undefined. To skip this call set a rc_limit in the transaction header");
533
+ rcLimit = await this.provider.getAccountRc(payer);
534
+ }
535
+ else {
536
+ rcLimit = tx.header.rc_limit;
537
+ }
538
+ let chainId = tx.header.chain_id || this.chainId;
539
+ if (!chainId) {
540
+ if (!this.provider)
541
+ throw new Error("Cannot get the chain_id because provider is undefined. To skip this call set a chain_id in the Signer");
542
+ chainId = await this.provider.getChainId();
543
+ this.chainId = chainId;
544
+ }
545
+ const operationsHashes = [];
546
+ if (tx.operations) {
547
+ for (let index = 0; index < ((_b = tx.operations) === null || _b === void 0 ? void 0 : _b.length); index += 1) {
548
+ const operationDecoded = (0, utils_1.btypeDecode)(tx.operations[index], btypesOperation);
549
+ const message = protocol_proto_js_1.koinos.protocol.operation.create(operationDecoded);
550
+ const operationEncoded = protocol_proto_js_1.koinos.protocol.operation
551
+ .encode(message)
552
+ .finish();
553
+ operationsHashes.push((0, sha256_1.sha256)(operationEncoded));
554
+ }
555
+ }
556
+ const operationMerkleRoot = (0, utils_1.encodeBase64url)(new Uint8Array([
557
+ // multihash sha256: 18, 32
558
+ 18,
559
+ 32,
560
+ ...(0, utils_1.calculateMerkleRoot)(operationsHashes),
561
+ ]));
562
+ tx.header = {
563
+ chain_id: chainId,
409
564
  rc_limit: rcLimit,
410
565
  nonce,
411
- operations,
412
- };
413
- const buffer = await this.serializer.serialize(activeData2);
414
- return {
415
- active: (0, utils_1.encodeBase64)(buffer),
566
+ operation_merkle_root: operationMerkleRoot,
567
+ payer,
568
+ ...(payee && { payee }),
569
+ // TODO: Option to resolve names (payer, payee)
416
570
  };
571
+ const headerDecoded = (0, utils_1.btypeDecode)(tx.header, btypeTransactionHeader);
572
+ const message = protocol_proto_js_1.koinos.protocol.transaction_header.create(headerDecoded);
573
+ const headerBytes = protocol_proto_js_1.koinos.protocol.transaction_header
574
+ .encode(message)
575
+ .finish();
576
+ const hash = (0, sha256_1.sha256)(headerBytes);
577
+ // multihash 0x1220. 12: code sha2-256. 20: length (32 bytes)
578
+ tx.id = `0x1220${(0, utils_1.toHexString)(hash)}`;
579
+ return tx;
417
580
  }
418
581
  /**
419
- * Function to decode a transaction
582
+ * Function to prepare a block
583
+ * @param block -
584
+ * @returns A prepared block. ()
420
585
  */
421
- async decodeTransaction(tx) {
422
- if (!tx.active)
423
- throw new Error("Active data is not defined");
424
- return this.serializer.deserialize(tx.active);
586
+ async prepareBlock(block) {
587
+ var _a;
588
+ if (!block.header) {
589
+ block.header = {};
590
+ }
591
+ const hashes = [];
592
+ if (block.transactions) {
593
+ for (let index = 0; index < block.transactions.length; index++) {
594
+ const tx = block.transactions[index];
595
+ const headerDecoded = (0, utils_1.btypeDecode)(tx.header, btypeTransactionHeader);
596
+ const message = protocol_proto_js_1.koinos.protocol.transaction_header.create(headerDecoded);
597
+ const headerBytes = protocol_proto_js_1.koinos.protocol.transaction_header
598
+ .encode(message)
599
+ .finish();
600
+ hashes.push((0, sha256_1.sha256)(headerBytes));
601
+ let signaturesBytes = new Uint8Array();
602
+ (_a = tx.signatures) === null || _a === void 0 ? void 0 : _a.forEach((sig) => {
603
+ signaturesBytes = new Uint8Array([
604
+ ...signaturesBytes,
605
+ ...(0, utils_1.decodeBase64url)(sig),
606
+ ]);
607
+ });
608
+ hashes.push((0, sha256_1.sha256)(signaturesBytes));
609
+ }
610
+ }
611
+ // retrieve head info if not provided
612
+ // eslint-disable-next-line @typescript-eslint/naming-convention
613
+ let { height, previous, previous_state_merkle_root } = block.header;
614
+ if (!height || !previous || !previous_state_merkle_root) {
615
+ if (!this.provider) {
616
+ throw new Error("Cannot get the head info because provider is undefined.");
617
+ }
618
+ const headInfo = await this.provider.getHeadInfo();
619
+ height = height || `${Number(headInfo.head_topology.height) + 1}`;
620
+ previous = previous || headInfo.head_topology.id;
621
+ previous_state_merkle_root =
622
+ previous_state_merkle_root || headInfo.head_state_merkle_root;
623
+ }
624
+ block.header = {
625
+ height,
626
+ previous,
627
+ previous_state_merkle_root,
628
+ timestamp: block.header.timestamp || `${Date.now()}`,
629
+ transaction_merkle_root: (0, utils_1.encodeBase64url)(new Uint8Array([
630
+ // multihash sha256: 18, 32
631
+ 18,
632
+ 32,
633
+ ...(0, utils_1.calculateMerkleRoot)(hashes),
634
+ ])),
635
+ signer: this.address,
636
+ };
637
+ const headerDecoded = (0, utils_1.btypeDecode)(block.header, btypeBlockHeader);
638
+ const message = protocol_proto_js_1.koinos.protocol.block_header.create(headerDecoded);
639
+ const headerBytes = protocol_proto_js_1.koinos.protocol.block_header
640
+ .encode(message)
641
+ .finish();
642
+ const hash = (0, sha256_1.sha256)(headerBytes);
643
+ // multihash 0x1220. 12: code sha2-256. 20: length (32 bytes)
644
+ block.id = `0x1220${(0, utils_1.toHexString)(hash)}`;
645
+ return block;
425
646
  }
426
647
  }
427
648
  exports.Signer = Signer;
package/lib/Signer.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Signer.js","sourceRoot":"","sources":["../src/Signer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Signer.js","sourceRoot":"","sources":["../src/Signer.ts"],"names":[],"mappings":"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"}