koilib 2.7.0 → 2.8.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/dist/koinos.js +70 -25
- package/dist/koinos.min.js +1 -1
- package/lib/Serializer.d.ts +6 -2
- package/lib/Serializer.js +10 -4
- package/lib/Serializer.js.map +1 -1
- package/lib/Signer.d.ts +20 -6
- package/lib/Signer.js +60 -21
- package/lib/Signer.js.map +1 -1
- package/lib/browser/Serializer.d.ts +6 -2
- package/lib/browser/Serializer.js +10 -4
- package/lib/browser/Serializer.js.map +1 -1
- package/lib/browser/Signer.d.ts +20 -6
- package/lib/browser/Signer.js +60 -21
- package/lib/browser/Signer.js.map +1 -1
- package/package.json +1 -1
package/lib/Serializer.d.ts
CHANGED
|
@@ -70,12 +70,16 @@ export declare class Serializer {
|
|
|
70
70
|
* It also prepares the bytes for special cases (base58, hex string)
|
|
71
71
|
* when bytesConversion param is true.
|
|
72
72
|
*/
|
|
73
|
-
serialize(valueDecoded: Record<string, unknown>, typeName?: string
|
|
73
|
+
serialize(valueDecoded: Record<string, unknown>, typeName?: string, opts?: {
|
|
74
|
+
bytesConversion?: boolean;
|
|
75
|
+
}): Promise<Uint8Array>;
|
|
74
76
|
/**
|
|
75
77
|
* Function to decode bytes using the protobuffer definitions
|
|
76
78
|
* It also encodes the bytes for special cases (base58, hex string)
|
|
77
79
|
* when bytesConversion param is true.
|
|
78
80
|
*/
|
|
79
|
-
deserialize<T = Record<string, unknown>>(valueEncoded: string | Uint8Array, typeName?: string
|
|
81
|
+
deserialize<T = Record<string, unknown>>(valueEncoded: string | Uint8Array, typeName?: string, opts?: {
|
|
82
|
+
bytesConversion?: boolean;
|
|
83
|
+
}): Promise<T>;
|
|
80
84
|
}
|
|
81
85
|
export default Serializer;
|
package/lib/Serializer.js
CHANGED
|
@@ -73,10 +73,13 @@ class Serializer {
|
|
|
73
73
|
* It also prepares the bytes for special cases (base58, hex string)
|
|
74
74
|
* when bytesConversion param is true.
|
|
75
75
|
*/
|
|
76
|
-
async serialize(valueDecoded, typeName) {
|
|
76
|
+
async serialize(valueDecoded, typeName, opts) {
|
|
77
77
|
const protobufType = this.defaultType || this.root.lookupType(typeName);
|
|
78
78
|
let object = {};
|
|
79
|
-
|
|
79
|
+
const bytesConversion = (opts === null || opts === void 0 ? void 0 : opts.bytesConversion) === undefined
|
|
80
|
+
? this.bytesConversion
|
|
81
|
+
: opts.bytesConversion;
|
|
82
|
+
if (bytesConversion) {
|
|
80
83
|
// TODO: format from Buffer to base58/base64 for nested fields
|
|
81
84
|
Object.keys(protobufType.fields).forEach((fieldName) => {
|
|
82
85
|
const { options, name, type } = protobufType.fields[fieldName];
|
|
@@ -122,14 +125,17 @@ class Serializer {
|
|
|
122
125
|
* It also encodes the bytes for special cases (base58, hex string)
|
|
123
126
|
* when bytesConversion param is true.
|
|
124
127
|
*/
|
|
125
|
-
async deserialize(valueEncoded, typeName) {
|
|
128
|
+
async deserialize(valueEncoded, typeName, opts) {
|
|
126
129
|
const valueBuffer = typeof valueEncoded === "string"
|
|
127
130
|
? (0, utils_1.decodeBase64)(valueEncoded)
|
|
128
131
|
: valueEncoded;
|
|
129
132
|
const protobufType = this.defaultType || this.root.lookupType(typeName);
|
|
130
133
|
const message = protobufType.decode(valueBuffer);
|
|
131
134
|
const object = protobufType.toObject(message, { longs: String });
|
|
132
|
-
|
|
135
|
+
const bytesConversion = (opts === null || opts === void 0 ? void 0 : opts.bytesConversion) === undefined
|
|
136
|
+
? this.bytesConversion
|
|
137
|
+
: opts.bytesConversion;
|
|
138
|
+
if (!bytesConversion)
|
|
133
139
|
return object;
|
|
134
140
|
// TODO: format from Buffer to base58/base64 for nested fields
|
|
135
141
|
Object.keys(protobufType.fields).forEach((fieldName) => {
|
package/lib/Serializer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Serializer.js","sourceRoot":"","sources":["../src/Serializer.ts"],"names":[],"mappings":";;;AAAA,qDAAqD;AACrD,4CAA0D;AAC1D,mCAOiB;AAEjB,MAAM,QAAQ,GAAG,qBAAqB,CAAC;AAEvC;;;;;;;;GAQG;AACH,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC1D,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAY,CAAC;AACtD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAa,UAAU;IAsBrB,YACE,KAAiB,EACjB,IAaC;QApBH;;WAEG;QACH,oBAAe,GAAG,IAAI,CAAC;QAmBrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,YAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,eAAe;YACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAChE,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,WAAW;YACrD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,SAAS,CACb,YAAqC,EACrC,QAAiB;
|
|
1
|
+
{"version":3,"file":"Serializer.js","sourceRoot":"","sources":["../src/Serializer.ts"],"names":[],"mappings":"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"}
|
package/lib/Signer.d.ts
CHANGED
|
@@ -163,13 +163,27 @@ export declare class Signer implements SignerInterface {
|
|
|
163
163
|
* ```
|
|
164
164
|
*/
|
|
165
165
|
getPrivateKey(format?: "wif" | "hex", compressed?: boolean): string;
|
|
166
|
+
/**
|
|
167
|
+
* Function to sign a hash value. It returns the signature encoded
|
|
168
|
+
* in base64. The signature is in compact format with the
|
|
169
|
+
* recovery byte
|
|
170
|
+
* @param hash Hash value. Also known as digest
|
|
171
|
+
*/
|
|
172
|
+
signHash(hash: Uint8Array): Promise<string>;
|
|
166
173
|
/**
|
|
167
174
|
* Function to sign a transaction. It's important to remark that
|
|
168
175
|
* the transaction parameter is modified inside this function.
|
|
169
176
|
* @param tx - Unsigned transaction
|
|
170
|
-
* @returns
|
|
171
177
|
*/
|
|
172
178
|
signTransaction(tx: TransactionJson): Promise<TransactionJson>;
|
|
179
|
+
/**
|
|
180
|
+
* Function to sign a block for federated consensus. That is,
|
|
181
|
+
* just the ecdsa signature. For other algorithms, like PoW,
|
|
182
|
+
* you have to sign the block and then process the signature
|
|
183
|
+
* to add the extra data (nonce in the case of PoW).
|
|
184
|
+
* @param block - Unsigned block
|
|
185
|
+
*/
|
|
186
|
+
signBlock(block: BlockJson): Promise<BlockJson>;
|
|
173
187
|
/**
|
|
174
188
|
* Function to sign and send a transaction. It internally uses
|
|
175
189
|
* [[Provider.sendTransaction]]
|
|
@@ -221,7 +235,7 @@ export declare class Signer implements SignerInterface {
|
|
|
221
235
|
* defaultTypeName: "pow_signature_data",
|
|
222
236
|
* });
|
|
223
237
|
*
|
|
224
|
-
* const signer = await
|
|
238
|
+
* const signer = await signer.recoverPublicKey(block, {
|
|
225
239
|
* transformSignature: async (signatureData) => {
|
|
226
240
|
* const powSignatureData = await serializer.deserialize(signatureData);
|
|
227
241
|
* return powSignatureData.recoverable_signature;
|
|
@@ -229,14 +243,14 @@ export declare class Signer implements SignerInterface {
|
|
|
229
243
|
* });
|
|
230
244
|
* ```
|
|
231
245
|
*/
|
|
232
|
-
|
|
246
|
+
recoverPublicKey(txOrBlock: TransactionJson | BlockJson, opts?: RecoverPublicKeyOptions): Promise<string>;
|
|
233
247
|
/**
|
|
234
248
|
* Function to recover the signer address from a signed
|
|
235
249
|
* transaction or block.
|
|
236
250
|
* The output format can be compressed (default) or uncompressed.
|
|
237
251
|
* @example
|
|
238
252
|
* ```ts
|
|
239
|
-
* const publicKey = await
|
|
253
|
+
* const publicKey = await signer.recoverAddress(tx);
|
|
240
254
|
* ```
|
|
241
255
|
*
|
|
242
256
|
* If the signature data contains more data, like in the
|
|
@@ -270,7 +284,7 @@ export declare class Signer implements SignerInterface {
|
|
|
270
284
|
* defaultTypeName: "pow_signature_data",
|
|
271
285
|
* });
|
|
272
286
|
*
|
|
273
|
-
* const signer = await
|
|
287
|
+
* const signer = await signer.recoverAddress(block, {
|
|
274
288
|
* transformSignature: async (signatureData) => {
|
|
275
289
|
* const powSignatureData = await serializer.deserialize(signatureData);
|
|
276
290
|
* return powSignatureData.recoverable_signature;
|
|
@@ -278,7 +292,7 @@ export declare class Signer implements SignerInterface {
|
|
|
278
292
|
* });
|
|
279
293
|
* ```
|
|
280
294
|
*/
|
|
281
|
-
|
|
295
|
+
recoverAddress(txOrBlock: TransactionJson | BlockJson, opts?: RecoverPublicKeyOptions): Promise<string>;
|
|
282
296
|
/**
|
|
283
297
|
* Function to encode a transaction
|
|
284
298
|
* @param activeData - Active data consists of nonce, rc_limit, and
|
package/lib/Signer.js
CHANGED
|
@@ -109,7 +109,6 @@ class Signer {
|
|
|
109
109
|
}
|
|
110
110
|
else {
|
|
111
111
|
this.serializer = new Serializer_1.Serializer(protocol_proto_json_1.default, {
|
|
112
|
-
defaultTypeName: "active_transaction_data",
|
|
113
112
|
bytesConversion: false,
|
|
114
113
|
});
|
|
115
114
|
}
|
|
@@ -211,15 +210,12 @@ class Signer {
|
|
|
211
210
|
}
|
|
212
211
|
}
|
|
213
212
|
/**
|
|
214
|
-
* Function to sign a
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
* @
|
|
213
|
+
* Function to sign a hash value. It returns the signature encoded
|
|
214
|
+
* in base64. The signature is in compact format with the
|
|
215
|
+
* recovery byte
|
|
216
|
+
* @param hash Hash value. Also known as digest
|
|
218
217
|
*/
|
|
219
|
-
async
|
|
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));
|
|
218
|
+
async signHash(hash) {
|
|
223
219
|
const [compSignature, recovery] = await secp.sign(hash, this.privateKey, {
|
|
224
220
|
recovered: true,
|
|
225
221
|
canonical: true,
|
|
@@ -228,11 +224,41 @@ class Signer {
|
|
|
228
224
|
const compactSignature = new Uint8Array(65);
|
|
229
225
|
compactSignature.set([recovery + 31], 0);
|
|
230
226
|
compactSignature.set(compSignature, 1);
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
227
|
+
return (0, utils_1.encodeBase64)(compactSignature);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Function to sign a transaction. It's important to remark that
|
|
231
|
+
* the transaction parameter is modified inside this function.
|
|
232
|
+
* @param tx - Unsigned transaction
|
|
233
|
+
*/
|
|
234
|
+
async signTransaction(tx) {
|
|
235
|
+
if (!tx.active)
|
|
236
|
+
throw new Error("Active data is not defined");
|
|
237
|
+
const hash = (0, sha256_1.sha256)((0, utils_1.decodeBase64)(tx.active));
|
|
238
|
+
tx.signature_data = await this.signHash(hash);
|
|
239
|
+
// multihash 0x1220. 12: code sha2-256. 20: length (32 bytes)
|
|
240
|
+
tx.id = `0x1220${(0, utils_1.toHexString)(hash)}`;
|
|
234
241
|
return tx;
|
|
235
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Function to sign a block for federated consensus. That is,
|
|
245
|
+
* just the ecdsa signature. For other algorithms, like PoW,
|
|
246
|
+
* you have to sign the block and then process the signature
|
|
247
|
+
* to add the extra data (nonce in the case of PoW).
|
|
248
|
+
* @param block - Unsigned block
|
|
249
|
+
*/
|
|
250
|
+
async signBlock(block) {
|
|
251
|
+
const activeBytes = (0, utils_1.decodeBase64)(block.active);
|
|
252
|
+
const headerBytes = await this.serializer.serialize(block.header, "block_header", { bytesConversion: true });
|
|
253
|
+
const headerActiveBytes = new Uint8Array(headerBytes.length + activeBytes.length);
|
|
254
|
+
headerActiveBytes.set(headerBytes, 0);
|
|
255
|
+
headerActiveBytes.set(activeBytes, headerBytes.length);
|
|
256
|
+
const hash = (0, sha256_1.sha256)(headerActiveBytes);
|
|
257
|
+
block.signature_data = await this.signHash(hash);
|
|
258
|
+
// multihash 0x1220. 12: code sha2-256. 20: length (32 bytes)
|
|
259
|
+
block.id = `0x1220${(0, utils_1.toHexString)(hash)}`;
|
|
260
|
+
return block;
|
|
261
|
+
}
|
|
236
262
|
/**
|
|
237
263
|
* Function to sign and send a transaction. It internally uses
|
|
238
264
|
* [[Provider.sendTransaction]]
|
|
@@ -298,7 +324,7 @@ class Signer {
|
|
|
298
324
|
* defaultTypeName: "pow_signature_data",
|
|
299
325
|
* });
|
|
300
326
|
*
|
|
301
|
-
* const signer = await
|
|
327
|
+
* const signer = await signer.recoverPublicKey(block, {
|
|
302
328
|
* transformSignature: async (signatureData) => {
|
|
303
329
|
* const powSignatureData = await serializer.deserialize(signatureData);
|
|
304
330
|
* return powSignatureData.recoverable_signature;
|
|
@@ -306,7 +332,7 @@ class Signer {
|
|
|
306
332
|
* });
|
|
307
333
|
* ```
|
|
308
334
|
*/
|
|
309
|
-
|
|
335
|
+
async recoverPublicKey(txOrBlock, opts) {
|
|
310
336
|
if (!txOrBlock.active)
|
|
311
337
|
throw new Error("active is not defined");
|
|
312
338
|
if (!txOrBlock.signature_data)
|
|
@@ -319,7 +345,20 @@ class Signer {
|
|
|
319
345
|
if (opts && typeof opts.compressed !== "undefined") {
|
|
320
346
|
compressed = opts.compressed;
|
|
321
347
|
}
|
|
322
|
-
const
|
|
348
|
+
const block = txOrBlock;
|
|
349
|
+
let hash;
|
|
350
|
+
const activeBytes = (0, utils_1.decodeBase64)(block.active);
|
|
351
|
+
if (block.header) {
|
|
352
|
+
const headerBytes = await this.serializer.serialize(block.header, "block_header", { bytesConversion: true });
|
|
353
|
+
const headerActiveBytes = new Uint8Array(headerBytes.length + activeBytes.length);
|
|
354
|
+
headerActiveBytes.set(headerBytes, 0);
|
|
355
|
+
headerActiveBytes.set(activeBytes, headerBytes.length);
|
|
356
|
+
hash = (0, sha256_1.sha256)(headerActiveBytes);
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
// transaction
|
|
360
|
+
hash = (0, sha256_1.sha256)(activeBytes);
|
|
361
|
+
}
|
|
323
362
|
const compactSignatureHex = (0, utils_1.toHexString)((0, utils_1.decodeBase64)(signatureData));
|
|
324
363
|
const recovery = Number(`0x${compactSignatureHex.slice(0, 2)}`) - 31;
|
|
325
364
|
const rHex = compactSignatureHex.slice(2, 66);
|
|
@@ -340,7 +379,7 @@ class Signer {
|
|
|
340
379
|
* The output format can be compressed (default) or uncompressed.
|
|
341
380
|
* @example
|
|
342
381
|
* ```ts
|
|
343
|
-
* const publicKey = await
|
|
382
|
+
* const publicKey = await signer.recoverAddress(tx);
|
|
344
383
|
* ```
|
|
345
384
|
*
|
|
346
385
|
* If the signature data contains more data, like in the
|
|
@@ -374,7 +413,7 @@ class Signer {
|
|
|
374
413
|
* defaultTypeName: "pow_signature_data",
|
|
375
414
|
* });
|
|
376
415
|
*
|
|
377
|
-
* const signer = await
|
|
416
|
+
* const signer = await signer.recoverAddress(block, {
|
|
378
417
|
* transformSignature: async (signatureData) => {
|
|
379
418
|
* const powSignatureData = await serializer.deserialize(signatureData);
|
|
380
419
|
* return powSignatureData.recoverable_signature;
|
|
@@ -382,8 +421,8 @@ class Signer {
|
|
|
382
421
|
* });
|
|
383
422
|
* ```
|
|
384
423
|
*/
|
|
385
|
-
|
|
386
|
-
const publicKey = await
|
|
424
|
+
async recoverAddress(txOrBlock, opts) {
|
|
425
|
+
const publicKey = await this.recoverPublicKey(txOrBlock, opts);
|
|
387
426
|
return (0, utils_1.bitcoinAddress)((0, utils_1.toUint8Array)(publicKey));
|
|
388
427
|
}
|
|
389
428
|
/**
|
|
@@ -410,7 +449,7 @@ class Signer {
|
|
|
410
449
|
nonce,
|
|
411
450
|
operations,
|
|
412
451
|
};
|
|
413
|
-
const buffer = await this.serializer.serialize(activeData2);
|
|
452
|
+
const buffer = await this.serializer.serialize(activeData2, "active_transaction_data");
|
|
414
453
|
return {
|
|
415
454
|
active: (0, utils_1.encodeBase64)(buffer),
|
|
416
455
|
};
|
|
@@ -421,7 +460,7 @@ class Signer {
|
|
|
421
460
|
async decodeTransaction(tx) {
|
|
422
461
|
if (!tx.active)
|
|
423
462
|
throw new Error("Active data is not defined");
|
|
424
|
-
return this.serializer.deserialize(tx.active);
|
|
463
|
+
return this.serializer.deserialize(tx.active, "active_transaction_data");
|
|
425
464
|
}
|
|
426
465
|
}
|
|
427
466
|
exports.Signer = Signer;
|
package/lib/Signer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Signer.js","sourceRoot":"","sources":["../src/Signer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAsC;AACtC,iDAA8C;AAC9C,uDAAyC;AAUzC,gGAAiE;AACjE,mCAQiB;AACjB,6CAA0C;AAkB1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,MAAa,MAAM;IA0BjB;;;;;;;;;;;;;;;OAeG;IACH,YAAY,CAWX;QACC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QAC5E,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC3B,IAAI,CAAC,CAAC,UAAU,EAAE;YAChB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;SAChC;aAAM;YACL,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAU,CAAC,6BAAY,EAAE;gBAC7C,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"Signer.js","sourceRoot":"","sources":["../src/Signer.ts"],"names":[],"mappings":"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"}
|
|
@@ -70,12 +70,16 @@ export declare class Serializer {
|
|
|
70
70
|
* It also prepares the bytes for special cases (base58, hex string)
|
|
71
71
|
* when bytesConversion param is true.
|
|
72
72
|
*/
|
|
73
|
-
serialize(valueDecoded: Record<string, unknown>, typeName?: string
|
|
73
|
+
serialize(valueDecoded: Record<string, unknown>, typeName?: string, opts?: {
|
|
74
|
+
bytesConversion?: boolean;
|
|
75
|
+
}): Promise<Uint8Array>;
|
|
74
76
|
/**
|
|
75
77
|
* Function to decode bytes using the protobuffer definitions
|
|
76
78
|
* It also encodes the bytes for special cases (base58, hex string)
|
|
77
79
|
* when bytesConversion param is true.
|
|
78
80
|
*/
|
|
79
|
-
deserialize<T = Record<string, unknown>>(valueEncoded: string | Uint8Array, typeName?: string
|
|
81
|
+
deserialize<T = Record<string, unknown>>(valueEncoded: string | Uint8Array, typeName?: string, opts?: {
|
|
82
|
+
bytesConversion?: boolean;
|
|
83
|
+
}): Promise<T>;
|
|
80
84
|
}
|
|
81
85
|
export default Serializer;
|
|
@@ -73,10 +73,13 @@ class Serializer {
|
|
|
73
73
|
* It also prepares the bytes for special cases (base58, hex string)
|
|
74
74
|
* when bytesConversion param is true.
|
|
75
75
|
*/
|
|
76
|
-
async serialize(valueDecoded, typeName) {
|
|
76
|
+
async serialize(valueDecoded, typeName, opts) {
|
|
77
77
|
const protobufType = this.defaultType || this.root.lookupType(typeName);
|
|
78
78
|
let object = {};
|
|
79
|
-
|
|
79
|
+
const bytesConversion = (opts === null || opts === void 0 ? void 0 : opts.bytesConversion) === undefined
|
|
80
|
+
? this.bytesConversion
|
|
81
|
+
: opts.bytesConversion;
|
|
82
|
+
if (bytesConversion) {
|
|
80
83
|
// TODO: format from Buffer to base58/base64 for nested fields
|
|
81
84
|
Object.keys(protobufType.fields).forEach((fieldName) => {
|
|
82
85
|
const { options, name, type } = protobufType.fields[fieldName];
|
|
@@ -122,14 +125,17 @@ class Serializer {
|
|
|
122
125
|
* It also encodes the bytes for special cases (base58, hex string)
|
|
123
126
|
* when bytesConversion param is true.
|
|
124
127
|
*/
|
|
125
|
-
async deserialize(valueEncoded, typeName) {
|
|
128
|
+
async deserialize(valueEncoded, typeName, opts) {
|
|
126
129
|
const valueBuffer = typeof valueEncoded === "string"
|
|
127
130
|
? (0, utils_1.decodeBase64)(valueEncoded)
|
|
128
131
|
: valueEncoded;
|
|
129
132
|
const protobufType = this.defaultType || this.root.lookupType(typeName);
|
|
130
133
|
const message = protobufType.decode(valueBuffer);
|
|
131
134
|
const object = protobufType.toObject(message, { longs: String });
|
|
132
|
-
|
|
135
|
+
const bytesConversion = (opts === null || opts === void 0 ? void 0 : opts.bytesConversion) === undefined
|
|
136
|
+
? this.bytesConversion
|
|
137
|
+
: opts.bytesConversion;
|
|
138
|
+
if (!bytesConversion)
|
|
133
139
|
return object;
|
|
134
140
|
// TODO: format from Buffer to base58/base64 for nested fields
|
|
135
141
|
Object.keys(protobufType.fields).forEach((fieldName) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Serializer.js","sourceRoot":"","sources":["../../src/Serializer.ts"],"names":[],"mappings":";;;AAAA,qDAAqD;AACrD,4CAA0D;AAC1D,mCAOiB;AAEjB,MAAM,QAAQ,GAAG,qBAAqB,CAAC;AAEvC;;;;;;;;GAQG;AACH,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC1D,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAY,CAAC;AACtD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAa,UAAU;IAsBrB,YACE,KAAiB,EACjB,IAaC;QApBH;;WAEG;QACH,oBAAe,GAAG,IAAI,CAAC;QAmBrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,YAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,eAAe;YACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAChE,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,WAAW;YACrD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,SAAS,CACb,YAAqC,EACrC,QAAiB;
|
|
1
|
+
{"version":3,"file":"Serializer.js","sourceRoot":"","sources":["../../src/Serializer.ts"],"names":[],"mappings":"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"}
|
package/lib/browser/Signer.d.ts
CHANGED
|
@@ -163,13 +163,27 @@ export declare class Signer implements SignerInterface {
|
|
|
163
163
|
* ```
|
|
164
164
|
*/
|
|
165
165
|
getPrivateKey(format?: "wif" | "hex", compressed?: boolean): string;
|
|
166
|
+
/**
|
|
167
|
+
* Function to sign a hash value. It returns the signature encoded
|
|
168
|
+
* in base64. The signature is in compact format with the
|
|
169
|
+
* recovery byte
|
|
170
|
+
* @param hash Hash value. Also known as digest
|
|
171
|
+
*/
|
|
172
|
+
signHash(hash: Uint8Array): Promise<string>;
|
|
166
173
|
/**
|
|
167
174
|
* Function to sign a transaction. It's important to remark that
|
|
168
175
|
* the transaction parameter is modified inside this function.
|
|
169
176
|
* @param tx - Unsigned transaction
|
|
170
|
-
* @returns
|
|
171
177
|
*/
|
|
172
178
|
signTransaction(tx: TransactionJson): Promise<TransactionJson>;
|
|
179
|
+
/**
|
|
180
|
+
* Function to sign a block for federated consensus. That is,
|
|
181
|
+
* just the ecdsa signature. For other algorithms, like PoW,
|
|
182
|
+
* you have to sign the block and then process the signature
|
|
183
|
+
* to add the extra data (nonce in the case of PoW).
|
|
184
|
+
* @param block - Unsigned block
|
|
185
|
+
*/
|
|
186
|
+
signBlock(block: BlockJson): Promise<BlockJson>;
|
|
173
187
|
/**
|
|
174
188
|
* Function to sign and send a transaction. It internally uses
|
|
175
189
|
* [[Provider.sendTransaction]]
|
|
@@ -221,7 +235,7 @@ export declare class Signer implements SignerInterface {
|
|
|
221
235
|
* defaultTypeName: "pow_signature_data",
|
|
222
236
|
* });
|
|
223
237
|
*
|
|
224
|
-
* const signer = await
|
|
238
|
+
* const signer = await signer.recoverPublicKey(block, {
|
|
225
239
|
* transformSignature: async (signatureData) => {
|
|
226
240
|
* const powSignatureData = await serializer.deserialize(signatureData);
|
|
227
241
|
* return powSignatureData.recoverable_signature;
|
|
@@ -229,14 +243,14 @@ export declare class Signer implements SignerInterface {
|
|
|
229
243
|
* });
|
|
230
244
|
* ```
|
|
231
245
|
*/
|
|
232
|
-
|
|
246
|
+
recoverPublicKey(txOrBlock: TransactionJson | BlockJson, opts?: RecoverPublicKeyOptions): Promise<string>;
|
|
233
247
|
/**
|
|
234
248
|
* Function to recover the signer address from a signed
|
|
235
249
|
* transaction or block.
|
|
236
250
|
* The output format can be compressed (default) or uncompressed.
|
|
237
251
|
* @example
|
|
238
252
|
* ```ts
|
|
239
|
-
* const publicKey = await
|
|
253
|
+
* const publicKey = await signer.recoverAddress(tx);
|
|
240
254
|
* ```
|
|
241
255
|
*
|
|
242
256
|
* If the signature data contains more data, like in the
|
|
@@ -270,7 +284,7 @@ export declare class Signer implements SignerInterface {
|
|
|
270
284
|
* defaultTypeName: "pow_signature_data",
|
|
271
285
|
* });
|
|
272
286
|
*
|
|
273
|
-
* const signer = await
|
|
287
|
+
* const signer = await signer.recoverAddress(block, {
|
|
274
288
|
* transformSignature: async (signatureData) => {
|
|
275
289
|
* const powSignatureData = await serializer.deserialize(signatureData);
|
|
276
290
|
* return powSignatureData.recoverable_signature;
|
|
@@ -278,7 +292,7 @@ export declare class Signer implements SignerInterface {
|
|
|
278
292
|
* });
|
|
279
293
|
* ```
|
|
280
294
|
*/
|
|
281
|
-
|
|
295
|
+
recoverAddress(txOrBlock: TransactionJson | BlockJson, opts?: RecoverPublicKeyOptions): Promise<string>;
|
|
282
296
|
/**
|
|
283
297
|
* Function to encode a transaction
|
|
284
298
|
* @param activeData - Active data consists of nonce, rc_limit, and
|