ripple-binary-codec 1.5.0-beta.2 → 1.5.0-beta.4
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/binary.d.ts +23 -7
- package/dist/binary.js +54 -33
- package/dist/binary.js.map +1 -1
- package/dist/coretypes.d.ts +2 -2
- package/dist/coretypes.js +33 -9
- package/dist/coretypes.js.map +1 -1
- package/dist/enums/bytes.d.ts +26 -0
- package/dist/enums/bytes.js +64 -0
- package/dist/enums/bytes.js.map +1 -0
- package/dist/enums/constants.d.ts +4 -0
- package/dist/enums/constants.js +8 -0
- package/dist/enums/constants.js.map +1 -0
- package/dist/enums/definitions.json +108 -138
- package/dist/enums/field.d.ts +29 -0
- package/dist/enums/field.js +59 -0
- package/dist/enums/field.js.map +1 -0
- package/dist/enums/index.d.ts +12 -48
- package/dist/enums/index.js +42 -124
- package/dist/enums/index.js.map +1 -1
- package/dist/enums/src/enums/definitions.json +108 -138
- package/dist/enums/utils-renumber.js +14 -14
- package/dist/enums/utils-renumber.js.map +1 -1
- package/dist/enums/xrpl-definitions-base.d.ts +44 -0
- package/dist/enums/xrpl-definitions-base.js +59 -0
- package/dist/enums/xrpl-definitions-base.js.map +1 -0
- package/dist/enums/xrpl-definitions.d.ts +21 -0
- package/dist/enums/xrpl-definitions.js +29 -0
- package/dist/enums/xrpl-definitions.js.map +1 -0
- package/dist/hash-prefixes.js +3 -3
- package/dist/hash-prefixes.js.map +1 -1
- package/dist/hashes.js +21 -43
- package/dist/hashes.js.map +1 -1
- package/dist/index.d.ts +14 -16
- package/dist/index.js +62 -24
- package/dist/index.js.map +1 -1
- package/dist/ledger-hashes.d.ts +5 -2
- package/dist/ledger-hashes.js +54 -29
- package/dist/ledger-hashes.js.map +1 -1
- package/dist/quality.js +18 -21
- package/dist/quality.js.map +1 -1
- package/dist/serdes/binary-parser.d.ts +6 -3
- package/dist/serdes/binary-parser.js +82 -57
- package/dist/serdes/binary-parser.js.map +1 -1
- package/dist/serdes/binary-serializer.d.ts +1 -1
- package/dist/serdes/binary-serializer.js +59 -40
- package/dist/serdes/binary-serializer.js.map +1 -1
- package/dist/shamap.js +72 -98
- package/dist/shamap.js.map +1 -1
- package/dist/types/account-id.js +18 -35
- package/dist/types/account-id.js.map +1 -1
- package/dist/types/amount.js +71 -88
- package/dist/types/amount.js.map +1 -1
- package/dist/types/blob.js +10 -27
- package/dist/types/blob.js.map +1 -1
- package/dist/types/currency.js +26 -44
- package/dist/types/currency.js.map +1 -1
- package/dist/types/hash-128.d.ts +6 -0
- package/dist/types/hash-128.js +23 -25
- package/dist/types/hash-128.js.map +1 -1
- package/dist/types/hash-160.js +8 -25
- package/dist/types/hash-160.js.map +1 -1
- package/dist/types/hash-256.js +8 -25
- package/dist/types/hash-256.js.map +1 -1
- package/dist/types/hash.js +20 -38
- package/dist/types/hash.js.map +1 -1
- package/dist/types/index.d.ts +3 -24
- package/dist/types/index.js +39 -28
- package/dist/types/index.js.map +1 -1
- package/dist/types/issue.js +24 -41
- package/dist/types/issue.js.map +1 -1
- package/dist/types/path-set.js +57 -87
- package/dist/types/path-set.js.map +1 -1
- package/dist/types/serialized-type.d.ts +3 -3
- package/dist/types/serialized-type.js +35 -56
- package/dist/types/serialized-type.js.map +1 -1
- package/dist/types/st-array.js +26 -46
- package/dist/types/st-array.js.map +1 -1
- package/dist/types/st-object.d.ts +6 -3
- package/dist/types/st-object.js +52 -74
- package/dist/types/st-object.js.map +1 -1
- package/dist/types/uint-16.js +15 -32
- package/dist/types/uint-16.js.map +1 -1
- package/dist/types/uint-32.js +16 -33
- package/dist/types/uint-32.js.map +1 -1
- package/dist/types/uint-64.d.ts +1 -1
- package/dist/types/uint-64.js +30 -47
- package/dist/types/uint-64.js.map +1 -1
- package/dist/types/uint-8.js +15 -32
- package/dist/types/uint-8.js.map +1 -1
- package/dist/types/uint.d.ts +1 -1
- package/dist/types/uint.js +10 -27
- package/dist/types/uint.js.map +1 -1
- package/dist/types/vector-256.js +23 -40
- package/dist/types/vector-256.js.map +1 -1
- package/dist/types/xchain-bridge.js +44 -61
- package/dist/types/xchain-bridge.js.map +1 -1
- package/package.json +7 -7
- package/test/amount.test.js +1 -1
- package/test/binary-json.test.js +1 -1
- package/test/binary-parser.test.js +4 -4
- package/test/binary-serializer.test.js +3 -3
- package/test/definitions.test.js +100 -0
- package/test/fixtures/codec-fixtures.json +136 -196
- package/test/hash.test.js +28 -2
- package/test/ledger.test.js +1 -1
- package/test/lower-case-hex.test.js +1 -1
- package/test/pseudo-transaction.test.js +1 -1
- package/test/quality.test.js +1 -1
- package/test/shamap.test.js +3 -3
- package/test/signing-data-encoding.test.js +128 -3
- package/test/tx-encode-decode.test.js +1 -1
- package/test/types.test.js +2 -2
- package/test/uint.test.js +2 -2
- package/test/x-address.test.js +1 -1
- package/dist/types/issued-currency.d.ts +0 -46
- package/dist/types/issued-currency.js +0 -108
- package/dist/types/issued-currency.js.map +0 -1
- package/dist/types/xchain-attestation-batch.d.ts +0 -44
- package/dist/types/xchain-attestation-batch.js +0 -107
- package/dist/types/xchain-attestation-batch.js.map +0 -1
package/dist/ledger-hashes.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Hash256 } from './types/hash-256';
|
|
2
2
|
import { JsonObject } from './types/serialized-type';
|
|
3
|
-
import
|
|
3
|
+
import bigInt = require('big-integer');
|
|
4
|
+
import { XrplDefinitionsBase } from './enums';
|
|
4
5
|
/**
|
|
5
6
|
* Function computing the hash of a transaction tree
|
|
6
7
|
*
|
|
@@ -40,7 +41,9 @@ declare function ledgerHash(header: ledgerObject): Hash256;
|
|
|
40
41
|
* Decodes a serialized ledger header
|
|
41
42
|
*
|
|
42
43
|
* @param binary A serialized ledger header
|
|
44
|
+
* @param definitions Type definitions to parse the ledger objects.
|
|
45
|
+
* Used if there are non-default ledger objects to decode.
|
|
43
46
|
* @returns A JSON object describing a ledger header
|
|
44
47
|
*/
|
|
45
|
-
declare function decodeLedgerData(binary: string): object;
|
|
48
|
+
declare function decodeLedgerData(binary: string, definitions?: XrplDefinitionsBase): object;
|
|
46
49
|
export { accountStateHash, transactionTreeHash, ledgerHash, decodeLedgerData };
|
package/dist/ledger-hashes.js
CHANGED
|
@@ -1,18 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
26
|
exports.decodeLedgerData = exports.ledgerHash = exports.transactionTreeHash = exports.accountStateHash = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
27
|
+
const assert = __importStar(require("assert"));
|
|
28
|
+
const shamap_1 = require("./shamap");
|
|
29
|
+
const hash_prefixes_1 = require("./hash-prefixes");
|
|
30
|
+
const hashes_1 = require("./hashes");
|
|
31
|
+
const binary_1 = require("./binary");
|
|
32
|
+
const hash_256_1 = require("./types/hash-256");
|
|
33
|
+
const st_object_1 = require("./types/st-object");
|
|
34
|
+
const uint_64_1 = require("./types/uint-64");
|
|
35
|
+
const uint_32_1 = require("./types/uint-32");
|
|
36
|
+
const uint_8_1 = require("./types/uint-8");
|
|
37
|
+
const binary_parser_1 = require("./serdes/binary-parser");
|
|
38
|
+
const bigInt = require("big-integer");
|
|
16
39
|
/**
|
|
17
40
|
* Computes the hash of a list of objects
|
|
18
41
|
*
|
|
@@ -21,8 +44,8 @@ var bigInt = require("big-integer");
|
|
|
21
44
|
* @returns the hash of the SHAMap
|
|
22
45
|
*/
|
|
23
46
|
function computeHash(itemizer, itemsJson) {
|
|
24
|
-
|
|
25
|
-
itemsJson.forEach(
|
|
47
|
+
const map = new shamap_1.ShaMap();
|
|
48
|
+
itemsJson.forEach((item) => map.addItem(...itemizer(item)));
|
|
26
49
|
return map.hash();
|
|
27
50
|
}
|
|
28
51
|
/**
|
|
@@ -33,13 +56,13 @@ function computeHash(itemizer, itemsJson) {
|
|
|
33
56
|
*/
|
|
34
57
|
function transactionItemizer(json) {
|
|
35
58
|
assert.ok(json.hash);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
hashPrefix
|
|
59
|
+
const index = hash_256_1.Hash256.from(json.hash);
|
|
60
|
+
const item = {
|
|
61
|
+
hashPrefix() {
|
|
39
62
|
return hash_prefixes_1.HashPrefix.transaction;
|
|
40
63
|
},
|
|
41
|
-
toBytesSink
|
|
42
|
-
|
|
64
|
+
toBytesSink(sink) {
|
|
65
|
+
const serializer = new binary_1.BinarySerializer(sink);
|
|
43
66
|
serializer.writeLengthEncoded(st_object_1.STObject.from(json));
|
|
44
67
|
serializer.writeLengthEncoded(st_object_1.STObject.from(json.metaData));
|
|
45
68
|
},
|
|
@@ -53,13 +76,13 @@ function transactionItemizer(json) {
|
|
|
53
76
|
* @returns a tuple of index and item to be added to SHAMap
|
|
54
77
|
*/
|
|
55
78
|
function entryItemizer(json) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
hashPrefix
|
|
79
|
+
const index = hash_256_1.Hash256.from(json.index);
|
|
80
|
+
const bytes = (0, binary_1.serializeObject)(json);
|
|
81
|
+
const item = {
|
|
82
|
+
hashPrefix() {
|
|
60
83
|
return hash_prefixes_1.HashPrefix.accountStateEntry;
|
|
61
84
|
},
|
|
62
|
-
toBytesSink
|
|
85
|
+
toBytesSink(sink) {
|
|
63
86
|
sink.put(bytes);
|
|
64
87
|
},
|
|
65
88
|
};
|
|
@@ -72,7 +95,7 @@ function entryItemizer(json) {
|
|
|
72
95
|
* @returns A Hash256 object
|
|
73
96
|
*/
|
|
74
97
|
function transactionTreeHash(param) {
|
|
75
|
-
|
|
98
|
+
const itemizer = transactionItemizer;
|
|
76
99
|
return computeHash(itemizer, param);
|
|
77
100
|
}
|
|
78
101
|
exports.transactionTreeHash = transactionTreeHash;
|
|
@@ -83,7 +106,7 @@ exports.transactionTreeHash = transactionTreeHash;
|
|
|
83
106
|
* @returns A Hash256 object
|
|
84
107
|
*/
|
|
85
108
|
function accountStateHash(param) {
|
|
86
|
-
|
|
109
|
+
const itemizer = entryItemizer;
|
|
87
110
|
return computeHash(itemizer, param);
|
|
88
111
|
}
|
|
89
112
|
exports.accountStateHash = accountStateHash;
|
|
@@ -94,7 +117,7 @@ exports.accountStateHash = accountStateHash;
|
|
|
94
117
|
* @returns the hash of header
|
|
95
118
|
*/
|
|
96
119
|
function ledgerHash(header) {
|
|
97
|
-
|
|
120
|
+
const hash = new hashes_1.Sha512Half();
|
|
98
121
|
hash.put(hash_prefixes_1.HashPrefix.ledgerHeader);
|
|
99
122
|
assert.ok(header.parent_close_time !== undefined);
|
|
100
123
|
assert.ok(header.close_flags !== undefined);
|
|
@@ -114,11 +137,13 @@ exports.ledgerHash = ledgerHash;
|
|
|
114
137
|
* Decodes a serialized ledger header
|
|
115
138
|
*
|
|
116
139
|
* @param binary A serialized ledger header
|
|
140
|
+
* @param definitions Type definitions to parse the ledger objects.
|
|
141
|
+
* Used if there are non-default ledger objects to decode.
|
|
117
142
|
* @returns A JSON object describing a ledger header
|
|
118
143
|
*/
|
|
119
|
-
function decodeLedgerData(binary) {
|
|
144
|
+
function decodeLedgerData(binary, definitions) {
|
|
120
145
|
assert.ok(typeof binary === 'string', 'binary must be a hex string');
|
|
121
|
-
|
|
146
|
+
const parser = new binary_parser_1.BinaryParser(binary, definitions);
|
|
122
147
|
return {
|
|
123
148
|
ledger_index: parser.readUInt32(),
|
|
124
149
|
total_coins: parser.readType(uint_64_1.UInt64).valueOf().toString(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-hashes.js","sourceRoot":"","sources":["../src/ledger-hashes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ledger-hashes.js","sourceRoot":"","sources":["../src/ledger-hashes.ts"],"names":[],"mappings":"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"}
|
package/dist/quality.js
CHANGED
|
@@ -1,43 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.quality = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
const decimal_js_1 = require("decimal.js");
|
|
6
|
+
const bigInt = require("big-integer");
|
|
7
|
+
const buffer_1 = require("buffer/");
|
|
8
8
|
/**
|
|
9
9
|
* class for encoding and decoding quality
|
|
10
10
|
*/
|
|
11
|
-
|
|
12
|
-
function quality() {
|
|
13
|
-
}
|
|
11
|
+
class quality {
|
|
14
12
|
/**
|
|
15
13
|
* Encode quality amount
|
|
16
14
|
*
|
|
17
15
|
* @param arg string representation of an amount
|
|
18
16
|
* @returns Serialized quality
|
|
19
17
|
*/
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
static encode(quality) {
|
|
19
|
+
const decimal = new decimal_js_1.Decimal(quality);
|
|
20
|
+
const exponent = decimal.e - 15;
|
|
21
|
+
const qualityString = decimal.times(`1e${-exponent}`).abs().toString();
|
|
22
|
+
const bytes = types_1.coreTypes.UInt64.from(bigInt(qualityString)).toBytes();
|
|
25
23
|
bytes[0] = exponent + 100;
|
|
26
24
|
return bytes;
|
|
27
|
-
}
|
|
25
|
+
}
|
|
28
26
|
/**
|
|
29
27
|
* Decode quality amount
|
|
30
28
|
*
|
|
31
29
|
* @param arg hex-string denoting serialized quality
|
|
32
30
|
* @returns deserialized quality
|
|
33
31
|
*/
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return mantissa.times(
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
}());
|
|
32
|
+
static decode(quality) {
|
|
33
|
+
const bytes = buffer_1.Buffer.from(quality, 'hex').slice(-8);
|
|
34
|
+
const exponent = bytes[0] - 100;
|
|
35
|
+
const mantissa = new decimal_js_1.Decimal(`0x${bytes.slice(1).toString('hex')}`);
|
|
36
|
+
return mantissa.times(`1e${exponent}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
42
39
|
exports.quality = quality;
|
|
43
40
|
//# sourceMappingURL=quality.js.map
|
package/dist/quality.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality.js","sourceRoot":"","sources":["../src/quality.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"quality.js","sourceRoot":"","sources":["../src/quality.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AACnC,2CAAoC;AACpC,sCAAsC;AACtC,oCAAgC;AAEhC;;GAEG;AACH,MAAM,OAAO;IACX;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,OAAe;QAC3B,MAAM,OAAO,GAAG,IAAI,oBAAO,CAAC,OAAO,CAAC,CAAA;QACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,CAAA;QAC/B,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;QACtE,MAAM,KAAK,GAAG,iBAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;QACpE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,GAAG,CAAA;QACzB,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,OAAe;QAC3B,MAAM,KAAK,GAAG,eAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAA;QAC/B,MAAM,QAAQ,GAAG,IAAI,oBAAO,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACnE,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAA;IACxC,CAAC;CACF;AAEQ,0BAAO"}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
import { FieldInstance } from '../enums';
|
|
2
|
-
import { SerializedType } from '../types/serialized-type';
|
|
1
|
+
import { XrplDefinitionsBase, FieldInstance } from '../enums';
|
|
2
|
+
import { type SerializedType } from '../types/serialized-type';
|
|
3
3
|
import { Buffer } from 'buffer/';
|
|
4
4
|
/**
|
|
5
5
|
* BinaryParser is used to compute fields and values from a HexString
|
|
6
6
|
*/
|
|
7
7
|
declare class BinaryParser {
|
|
8
8
|
private bytes;
|
|
9
|
+
definitions: XrplDefinitionsBase;
|
|
9
10
|
/**
|
|
10
11
|
* Initialize bytes to a hex string
|
|
11
12
|
*
|
|
12
13
|
* @param hexBytes a hex string
|
|
14
|
+
* @param definitions Rippled definitions used to parse the values of transaction types and such.
|
|
15
|
+
* Can be customized for sidechains and amendments.
|
|
13
16
|
*/
|
|
14
|
-
constructor(hexBytes: string);
|
|
17
|
+
constructor(hexBytes: string, definitions?: XrplDefinitionsBase);
|
|
15
18
|
/**
|
|
16
19
|
* Peek the first byte of the BinaryParser
|
|
17
20
|
*
|
|
@@ -1,114 +1,140 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
26
|
exports.BinaryParser = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
27
|
+
const assert = __importStar(require("assert"));
|
|
28
|
+
const enums_1 = require("../enums");
|
|
29
|
+
const buffer_1 = require("buffer/");
|
|
7
30
|
/**
|
|
8
31
|
* BinaryParser is used to compute fields and values from a HexString
|
|
9
32
|
*/
|
|
10
|
-
|
|
33
|
+
class BinaryParser {
|
|
11
34
|
/**
|
|
12
35
|
* Initialize bytes to a hex string
|
|
13
36
|
*
|
|
14
37
|
* @param hexBytes a hex string
|
|
38
|
+
* @param definitions Rippled definitions used to parse the values of transaction types and such.
|
|
39
|
+
* Can be customized for sidechains and amendments.
|
|
15
40
|
*/
|
|
16
|
-
|
|
41
|
+
constructor(hexBytes, definitions = enums_1.DEFAULT_DEFINITIONS) {
|
|
17
42
|
this.bytes = buffer_1.Buffer.from(hexBytes, 'hex');
|
|
43
|
+
this.definitions = definitions;
|
|
18
44
|
}
|
|
19
45
|
/**
|
|
20
46
|
* Peek the first byte of the BinaryParser
|
|
21
47
|
*
|
|
22
48
|
* @returns The first byte of the BinaryParser
|
|
23
49
|
*/
|
|
24
|
-
|
|
50
|
+
peek() {
|
|
25
51
|
assert.ok(this.bytes.byteLength !== 0);
|
|
26
52
|
return this.bytes[0];
|
|
27
|
-
}
|
|
53
|
+
}
|
|
28
54
|
/**
|
|
29
55
|
* Consume the first n bytes of the BinaryParser
|
|
30
56
|
*
|
|
31
57
|
* @param n the number of bytes to skip
|
|
32
58
|
*/
|
|
33
|
-
|
|
59
|
+
skip(n) {
|
|
34
60
|
assert.ok(n <= this.bytes.byteLength);
|
|
35
61
|
this.bytes = this.bytes.slice(n);
|
|
36
|
-
}
|
|
62
|
+
}
|
|
37
63
|
/**
|
|
38
64
|
* read the first n bytes from the BinaryParser
|
|
39
65
|
*
|
|
40
66
|
* @param n The number of bytes to read
|
|
41
67
|
* @return The bytes
|
|
42
68
|
*/
|
|
43
|
-
|
|
69
|
+
read(n) {
|
|
44
70
|
assert.ok(n <= this.bytes.byteLength);
|
|
45
|
-
|
|
71
|
+
const slice = this.bytes.slice(0, n);
|
|
46
72
|
this.skip(n);
|
|
47
73
|
return slice;
|
|
48
|
-
}
|
|
74
|
+
}
|
|
49
75
|
/**
|
|
50
76
|
* Read an integer of given size
|
|
51
77
|
*
|
|
52
78
|
* @param n The number of bytes to read
|
|
53
79
|
* @return The number represented by those bytes
|
|
54
80
|
*/
|
|
55
|
-
|
|
81
|
+
readUIntN(n) {
|
|
56
82
|
assert.ok(0 < n && n <= 4, 'invalid n');
|
|
57
|
-
return this.read(n).reduce(
|
|
58
|
-
}
|
|
59
|
-
|
|
83
|
+
return this.read(n).reduce((a, b) => (a << 8) | b) >>> 0;
|
|
84
|
+
}
|
|
85
|
+
readUInt8() {
|
|
60
86
|
return this.readUIntN(1);
|
|
61
|
-
}
|
|
62
|
-
|
|
87
|
+
}
|
|
88
|
+
readUInt16() {
|
|
63
89
|
return this.readUIntN(2);
|
|
64
|
-
}
|
|
65
|
-
|
|
90
|
+
}
|
|
91
|
+
readUInt32() {
|
|
66
92
|
return this.readUIntN(4);
|
|
67
|
-
}
|
|
68
|
-
|
|
93
|
+
}
|
|
94
|
+
size() {
|
|
69
95
|
return this.bytes.byteLength;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
|
|
96
|
+
}
|
|
97
|
+
end(customEnd) {
|
|
98
|
+
const length = this.bytes.byteLength;
|
|
73
99
|
return length === 0 || (customEnd !== undefined && length <= customEnd);
|
|
74
|
-
}
|
|
100
|
+
}
|
|
75
101
|
/**
|
|
76
102
|
* Reads variable length encoded bytes
|
|
77
103
|
*
|
|
78
104
|
* @return The variable length bytes
|
|
79
105
|
*/
|
|
80
|
-
|
|
106
|
+
readVariableLength() {
|
|
81
107
|
return this.read(this.readVariableLengthLength());
|
|
82
|
-
}
|
|
108
|
+
}
|
|
83
109
|
/**
|
|
84
110
|
* Reads the length of the variable length encoded bytes
|
|
85
111
|
*
|
|
86
112
|
* @return The length of the variable length encoded bytes
|
|
87
113
|
*/
|
|
88
|
-
|
|
89
|
-
|
|
114
|
+
readVariableLengthLength() {
|
|
115
|
+
const b1 = this.readUInt8();
|
|
90
116
|
if (b1 <= 192) {
|
|
91
117
|
return b1;
|
|
92
118
|
}
|
|
93
119
|
else if (b1 <= 240) {
|
|
94
|
-
|
|
120
|
+
const b2 = this.readUInt8();
|
|
95
121
|
return 193 + (b1 - 193) * 256 + b2;
|
|
96
122
|
}
|
|
97
123
|
else if (b1 <= 254) {
|
|
98
|
-
|
|
99
|
-
|
|
124
|
+
const b2 = this.readUInt8();
|
|
125
|
+
const b3 = this.readUInt8();
|
|
100
126
|
return 12481 + (b1 - 241) * 65536 + b2 * 256 + b3;
|
|
101
127
|
}
|
|
102
128
|
throw new Error('Invalid variable length indicator');
|
|
103
|
-
}
|
|
129
|
+
}
|
|
104
130
|
/**
|
|
105
131
|
* Reads the field ordinal from the BinaryParser
|
|
106
132
|
*
|
|
107
133
|
* @return Field ordinal
|
|
108
134
|
*/
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
135
|
+
readFieldOrdinal() {
|
|
136
|
+
let type = this.readUInt8();
|
|
137
|
+
let nth = type & 15;
|
|
112
138
|
type >>= 4;
|
|
113
139
|
if (type === 0) {
|
|
114
140
|
type = this.readUInt8();
|
|
@@ -123,63 +149,62 @@ var BinaryParser = /** @class */ (function () {
|
|
|
123
149
|
}
|
|
124
150
|
}
|
|
125
151
|
return (type << 16) | nth;
|
|
126
|
-
}
|
|
152
|
+
}
|
|
127
153
|
/**
|
|
128
154
|
* Read the field from the BinaryParser
|
|
129
155
|
*
|
|
130
156
|
* @return The field represented by the bytes at the head of the BinaryParser
|
|
131
157
|
*/
|
|
132
|
-
|
|
133
|
-
return
|
|
134
|
-
}
|
|
158
|
+
readField() {
|
|
159
|
+
return this.definitions.field.fromString(this.readFieldOrdinal().toString());
|
|
160
|
+
}
|
|
135
161
|
/**
|
|
136
162
|
* Read a given type from the BinaryParser
|
|
137
163
|
*
|
|
138
164
|
* @param type The type that you want to read from the BinaryParser
|
|
139
165
|
* @return The instance of that type read from the BinaryParser
|
|
140
166
|
*/
|
|
141
|
-
|
|
167
|
+
readType(type) {
|
|
142
168
|
return type.fromParser(this);
|
|
143
|
-
}
|
|
169
|
+
}
|
|
144
170
|
/**
|
|
145
171
|
* Get the type associated with a given field
|
|
146
172
|
*
|
|
147
173
|
* @param field The field that you wan to get the type of
|
|
148
174
|
* @return The type associated with the given field
|
|
149
175
|
*/
|
|
150
|
-
|
|
176
|
+
typeForField(field) {
|
|
151
177
|
return field.associatedType;
|
|
152
|
-
}
|
|
178
|
+
}
|
|
153
179
|
/**
|
|
154
180
|
* Read value of the type specified by field from the BinaryParser
|
|
155
181
|
*
|
|
156
182
|
* @param field The field that you want to get the associated value for
|
|
157
183
|
* @return The value associated with the given field
|
|
158
184
|
*/
|
|
159
|
-
|
|
160
|
-
|
|
185
|
+
readFieldValue(field) {
|
|
186
|
+
const type = this.typeForField(field);
|
|
161
187
|
if (!type) {
|
|
162
|
-
throw new Error(
|
|
188
|
+
throw new Error(`unsupported: (${field.name}, ${field.type.name})`);
|
|
163
189
|
}
|
|
164
|
-
|
|
190
|
+
const sizeHint = field.isVariableLengthEncoded
|
|
165
191
|
? this.readVariableLengthLength()
|
|
166
192
|
: undefined;
|
|
167
|
-
|
|
193
|
+
const value = type.fromParser(this, sizeHint);
|
|
168
194
|
if (value === undefined) {
|
|
169
|
-
throw new Error(
|
|
195
|
+
throw new Error(`fromParser for (${field.name}, ${field.type.name}) -> undefined `);
|
|
170
196
|
}
|
|
171
197
|
return value;
|
|
172
|
-
}
|
|
198
|
+
}
|
|
173
199
|
/**
|
|
174
200
|
* Get the next field and value from the BinaryParser
|
|
175
201
|
*
|
|
176
202
|
* @return The field and value
|
|
177
203
|
*/
|
|
178
|
-
|
|
179
|
-
|
|
204
|
+
readFieldAndValue() {
|
|
205
|
+
const field = this.readField();
|
|
180
206
|
return [field, this.readFieldValue(field)];
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
}());
|
|
207
|
+
}
|
|
208
|
+
}
|
|
184
209
|
exports.BinaryParser = BinaryParser;
|
|
185
210
|
//# sourceMappingURL=binary-parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-parser.js","sourceRoot":"","sources":["../../src/serdes/binary-parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"binary-parser.js","sourceRoot":"","sources":["../../src/serdes/binary-parser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAgC;AAChC,oCAIiB;AAEjB,oCAAgC;AAEhC;;GAEG;AACH,MAAM,YAAY;IAIhB;;;;;;OAMG;IACH,YACE,QAAgB,EAChB,cAAmC,2BAAmB;QAEtD,IAAI,CAAC,KAAK,GAAG,eAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;QACzC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAChC,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,CAAC,CAAA;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACtB,CAAC;IAED;;;;OAIG;IACH,IAAI,CAAC,CAAS;QACZ,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAClC,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAAC,CAAS;QACZ,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QAErC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACpC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACZ,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,CAAS;QACjB,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;IAC1D,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAA;IAC9B,CAAC;IAED,GAAG,CAAC,SAAkB;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAA;QACpC,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,IAAI,SAAS,CAAC,CAAA;IACzE,CAAC;IAED;;;;OAIG;IACH,kBAAkB;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAA;IACnD,CAAC;IAED;;;;OAIG;IACH,wBAAwB;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC3B,IAAI,EAAE,IAAI,GAAG,EAAE;YACb,OAAO,EAAE,CAAA;SACV;aAAM,IAAI,EAAE,IAAI,GAAG,EAAE;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;YAC3B,OAAO,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAA;SACnC;aAAM,IAAI,EAAE,IAAI,GAAG,EAAE;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;YAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;YAC3B,OAAO,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAA;SAClD;QACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACtD,CAAC;IAED;;;;OAIG;IACH,gBAAgB;QACd,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC3B,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;QACnB,IAAI,KAAK,CAAC,CAAA;QAEV,IAAI,IAAI,KAAK,CAAC,EAAE;YACd,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;YACvB,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,GAAG,EAAE,EAAE;gBAC3B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;aACpE;SACF;QAED,IAAI,GAAG,KAAK,CAAC,EAAE;YACb,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;YACtB,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,EAAE,EAAE;gBACzB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;aACrE;SACF;QAED,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,GAAG,CAAA;IAC3B,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC9E,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,IAA2B;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,KAAoB;QAC/B,OAAO,KAAK,CAAC,cAAc,CAAA;IAC7B,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,KAAoB;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QACrC,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;SACpE;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,uBAAuB;YAC5C,CAAC,CAAC,IAAI,CAAC,wBAAwB,EAAE;YACjC,CAAC,CAAC,SAAS,CAAA;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC7C,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,MAAM,IAAI,KAAK,CACb,mBAAmB,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,iBAAiB,CACnE,CAAA;SACF;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;OAIG;IACH,iBAAiB;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC9B,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAA;IAC5C,CAAC;CACF;AAEQ,oCAAY"}
|