postchain-client 2.0.0 → 2.0.2

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 (74) hide show
  1. package/README.md +11 -0
  2. package/built/cjs/index.js +138 -1421
  3. package/built/cjs/index.js.map +1 -1
  4. package/built/esm/index.js +12400 -13410
  5. package/built/esm/index.js.map +1 -1
  6. package/built/index.d.ts +0 -1
  7. package/built/index.js +0 -2
  8. package/built/index.js.map +1 -1
  9. package/built/src/ICCF/IccfProofTxMaterialBuilder.d.ts +3 -2
  10. package/built/src/ICCF/IccfProofTxMaterialBuilder.js +23 -10
  11. package/built/src/ICCF/IccfProofTxMaterialBuilder.js.map +1 -1
  12. package/built/src/blockchainClient/blockchainClient.js +7 -3
  13. package/built/src/blockchainClient/blockchainClient.js.map +1 -1
  14. package/built/src/blockchainClient/failoverStrategies.js +2 -1
  15. package/built/src/blockchainClient/failoverStrategies.js.map +1 -1
  16. package/built/src/blockchainClient/nodeManager.d.ts +3 -0
  17. package/built/src/blockchainClient/nodeManager.js +7 -0
  18. package/built/src/blockchainClient/nodeManager.js.map +1 -1
  19. package/built/src/blockchainClient/types.d.ts +1 -0
  20. package/built/src/blockchainClient/utils.d.ts +11 -1
  21. package/built/src/blockchainClient/utils.js +14 -1
  22. package/built/src/blockchainClient/utils.js.map +1 -1
  23. package/built/src/gtv/index.d.ts +2 -2
  24. package/built/src/gtv/index.js +4 -6
  25. package/built/src/gtv/index.js.map +1 -1
  26. package/built/test/pcctf/getSuites.test.js +106 -0
  27. package/built/test/pcctf/getSuites.test.js.map +1 -0
  28. package/built/test/pcctf/helpers.d.ts +92 -0
  29. package/built/test/pcctf/helpers.js +239 -0
  30. package/built/test/pcctf/helpers.js.map +1 -0
  31. package/built/test/unit/blockchainClient/client.test.js +2 -0
  32. package/built/test/unit/blockchainClient/client.test.js.map +1 -1
  33. package/built/test/unit/failoverStrategies.test.js +1 -1
  34. package/built/test/unit/failoverStrategies.test.js.map +1 -1
  35. package/built/umd/index.js +14393 -13535
  36. package/built/umd/index.js.map +1 -1
  37. package/changelog.md +33 -1
  38. package/package.json +8 -4
  39. package/built/src/merkle/binarytree.d.ts +0 -131
  40. package/built/src/merkle/binarytree.js +0 -146
  41. package/built/src/merkle/binarytree.js.map +0 -1
  42. package/built/src/merkle/binarytreefactory.d.ts +0 -86
  43. package/built/src/merkle/binarytreefactory.js +0 -251
  44. package/built/src/merkle/binarytreefactory.js.map +0 -1
  45. package/built/src/merkle/merkleHelper.d.ts +0 -17
  46. package/built/src/merkle/merkleHelper.js +0 -109
  47. package/built/src/merkle/merkleHelper.js.map +0 -1
  48. package/built/src/merkle/merklehashcalculator.d.ts +0 -37
  49. package/built/src/merkle/merklehashcalculator.js +0 -73
  50. package/built/src/merkle/merklehashcalculator.js.map +0 -1
  51. package/built/src/merkle/path.d.ts +0 -151
  52. package/built/src/merkle/path.js +0 -306
  53. package/built/src/merkle/path.js.map +0 -1
  54. package/built/src/merkle/proof/merklehashcarrier.d.ts +0 -17
  55. package/built/src/merkle/proof/merklehashcarrier.js +0 -23
  56. package/built/src/merkle/proof/merklehashcarrier.js.map +0 -1
  57. package/built/src/merkle/proof/merklehashsummaryfactory.d.ts +0 -53
  58. package/built/src/merkle/proof/merklehashsummaryfactory.js +0 -82
  59. package/built/src/merkle/proof/merklehashsummaryfactory.js.map +0 -1
  60. package/built/src/merkle/proof/merkleproof.d.ts +0 -36
  61. package/built/src/merkle/proof/merkleproof.js +0 -61
  62. package/built/src/merkle/proof/merkleproof.js.map +0 -1
  63. package/built/src/merkle/proof/merkleprooftree.d.ts +0 -124
  64. package/built/src/merkle/proof/merkleprooftree.js +0 -117
  65. package/built/src/merkle/proof/merkleprooftree.js.map +0 -1
  66. package/built/src/merkle/proof/merkleprooftreefactory.d.ts +0 -47
  67. package/built/src/merkle/proof/merkleprooftreefactory.js +0 -123
  68. package/built/src/merkle/proof/merkleprooftreefactory.js.map +0 -1
  69. package/built/src/merkle/types.d.ts +0 -11
  70. package/built/src/merkle/types.js +0 -2
  71. package/built/src/merkle/types.js.map +0 -1
  72. package/built/test/unit/merkle/merkleHelper/merkleHelperTest.js +0 -85
  73. package/built/test/unit/merkle/merkleHelper/merkleHelperTest.js.map +0 -1
  74. /package/built/test/{unit/merkle/merkleHelper/merkleHelperTest.d.ts → pcctf/getSuites.test.d.ts} +0 -0
@@ -1,124 +0,0 @@
1
- /**
2
- *
3
- * @param {Buffer} prefix
4
- * @param {MerkleProofElement} left
5
- * @param {MerkleProofElement} right
6
- */
7
- export function ProofNode(prefix: Buffer, left: typeof MerkleProofElement, right: typeof MerkleProofElement): void;
8
- export class ProofNode {
9
- /**
10
- *
11
- * @param {Buffer} prefix
12
- * @param {MerkleProofElement} left
13
- * @param {MerkleProofElement} right
14
- */
15
- constructor(prefix: Buffer, left: typeof MerkleProofElement, right: typeof MerkleProofElement);
16
- prefix: Buffer;
17
- left: typeof MerkleProofElement;
18
- right: typeof MerkleProofElement;
19
- }
20
- /**
21
- *
22
- * @param {MerkleProofElement} left
23
- * @param {MerkleProofElement} right
24
- */
25
- export function ProofNodeSimple(left: typeof MerkleProofElement, right: typeof MerkleProofElement): void;
26
- export class ProofNodeSimple {
27
- /**
28
- *
29
- * @param {MerkleProofElement} left
30
- * @param {MerkleProofElement} right
31
- */
32
- constructor(left: typeof MerkleProofElement, right: typeof MerkleProofElement);
33
- }
34
- /**
35
- *
36
- * @param {Buffer} merkleHash
37
- */
38
- export function ProofHashedLeaf(merkleHash: Buffer): void;
39
- export class ProofHashedLeaf {
40
- /**
41
- *
42
- * @param {Buffer} merkleHash
43
- */
44
- constructor(merkleHash: Buffer);
45
- merkleHash: Buffer;
46
- /**
47
- * @param {ProofHashedLeaf} other
48
- */
49
- equals(other: ProofHashedLeaf): boolean;
50
- }
51
- /**
52
- *
53
- * @param {*} content
54
- * @param {SearchablePathElement} pathElem
55
- */
56
- export function ProofValueLeaf(content: any, pathElem: SearchablePathElement): void;
57
- export class ProofValueLeaf {
58
- /**
59
- *
60
- * @param {*} content
61
- * @param {SearchablePathElement} pathElem
62
- */
63
- constructor(content: any, pathElem: SearchablePathElement);
64
- content: any;
65
- pathElem: SearchablePathElement;
66
- }
67
- /**
68
- *
69
- * @param {MerkleProofElement} left
70
- * @param {MerkleProofElement} right
71
- * @param {SearchablePathElement} pathElem
72
- */
73
- export function ProofNodeArrayHead(left: typeof MerkleProofElement, right: typeof MerkleProofElement, pathElem?: SearchablePathElement): void;
74
- export class ProofNodeArrayHead {
75
- /**
76
- *
77
- * @param {MerkleProofElement} left
78
- * @param {MerkleProofElement} right
79
- * @param {SearchablePathElement} pathElem
80
- */
81
- constructor(left: typeof MerkleProofElement, right: typeof MerkleProofElement, pathElem?: SearchablePathElement);
82
- pathElem: SearchablePathElement;
83
- }
84
- /**
85
- *
86
- * @param {MerkleProofElement} left
87
- * @param {MerkleProofElement} right
88
- * @param {SearchablePathElement} pathElem
89
- */
90
- export function ProofNodeDictHead(left: typeof MerkleProofElement, right: typeof MerkleProofElement, pathElem?: SearchablePathElement): void;
91
- export class ProofNodeDictHead {
92
- /**
93
- *
94
- * @param {MerkleProofElement} left
95
- * @param {MerkleProofElement} right
96
- * @param {SearchablePathElement} pathElem
97
- */
98
- constructor(left: typeof MerkleProofElement, right: typeof MerkleProofElement, pathElem?: SearchablePathElement);
99
- pathElem: SearchablePathElement;
100
- }
101
- /**
102
- *
103
- */
104
- export function MerkleProofElement(): void;
105
- /**
106
- *
107
- * @param {MerkleProofElement} root
108
- */
109
- export function MerkleProofTree(root: typeof MerkleProofElement): void;
110
- export class MerkleProofTree {
111
- /**
112
- *
113
- * @param {MerkleProofElement} root
114
- */
115
- constructor(root: typeof MerkleProofElement);
116
- root: typeof MerkleProofElement;
117
- maxLevel(): any;
118
- /**
119
- * @param {MerkleProofElement} node
120
- */
121
- maxLevelInternal(node: typeof MerkleProofElement): any;
122
- }
123
- import SearchablePathElement_1 = require("../path");
124
- import SearchablePathElement = SearchablePathElement_1.SearchablePathElement;
@@ -1,117 +0,0 @@
1
- "use strict";
2
- var SearchablePathElement = require('../path').SearchablePathElement;
3
- var HASH_PREFIX_NODE = require('../binarytree').HASH_PREFIX_NODE;
4
- var HASH_PREFIX_NODE_ARRAY = require('../binarytree').HASH_PREFIX_NODE_ARRAY;
5
- var HASH_PREFIX_NODE_DICT = require('../binarytree').HASH_PREFIX_NODE_DICT;
6
- /**
7
- *
8
- */
9
- function MerkleProofElement() { }
10
- /**
11
- *
12
- * @param {Buffer} prefix
13
- * @param {MerkleProofElement} left
14
- * @param {MerkleProofElement} right
15
- */
16
- function ProofNode(prefix, left, right) {
17
- this.prefix = prefix;
18
- this.left = left;
19
- this.right = right;
20
- }
21
- ProofNode.prototype = Object.create(MerkleProofElement.prototype);
22
- ProofNode.prototype.constructor = ProofNode;
23
- /**
24
- *
25
- * @param {MerkleProofElement} left
26
- * @param {MerkleProofElement} right
27
- */
28
- function ProofNodeSimple(left, right) {
29
- ProofNode.call(this, HASH_PREFIX_NODE, left, right);
30
- }
31
- ProofNodeSimple.prototype = Object.create(ProofNode.prototype);
32
- ProofNodeSimple.prototype.constructor = ProofNodeSimple;
33
- /**
34
- *
35
- * @param {*} content
36
- * @param {SearchablePathElement} pathElem
37
- */
38
- function ProofValueLeaf(content, pathElem) {
39
- this.content = content;
40
- this.pathElem = pathElem;
41
- }
42
- ProofValueLeaf.prototype = Object.create(MerkleProofElement.prototype);
43
- ProofValueLeaf.prototype.constructor = ProofValueLeaf;
44
- /**
45
- *
46
- * @param {Buffer} merkleHash
47
- */
48
- function ProofHashedLeaf(merkleHash) {
49
- this.merkleHash = merkleHash;
50
- }
51
- ProofHashedLeaf.prototype = Object.create(MerkleProofElement.prototype);
52
- ProofHashedLeaf.prototype.constructor = ProofHashedLeaf;
53
- /**
54
- * @param {ProofHashedLeaf} other
55
- */
56
- ProofHashedLeaf.prototype.equals = function (other) {
57
- if (other instanceof ProofHashedLeaf) {
58
- return this.merkleHash.equals(other.merkleHash);
59
- }
60
- else {
61
- return false;
62
- }
63
- };
64
- /**
65
- *
66
- * @param {MerkleProofElement} left
67
- * @param {MerkleProofElement} right
68
- * @param {SearchablePathElement} pathElem
69
- */
70
- function ProofNodeArrayHead(left, right, pathElem = null) {
71
- ProofNode.call(this, HASH_PREFIX_NODE_ARRAY, left, right);
72
- this.pathElem = pathElem;
73
- }
74
- ProofNodeArrayHead.prototype = Object.create(ProofNode.prototype);
75
- ProofNodeArrayHead.prototype.constructor = ProofNodeArrayHead;
76
- /**
77
- *
78
- * @param {MerkleProofElement} left
79
- * @param {MerkleProofElement} right
80
- * @param {SearchablePathElement} pathElem
81
- */
82
- function ProofNodeDictHead(left, right, pathElem = null) {
83
- ProofNode.call(this, HASH_PREFIX_NODE_DICT, left, right);
84
- this.pathElem = pathElem;
85
- }
86
- ProofNodeDictHead.prototype = Object.create(ProofNode.prototype);
87
- ProofNodeDictHead.prototype.constructor = ProofNodeDictHead;
88
- /**
89
- *
90
- * @param {MerkleProofElement} root
91
- */
92
- function MerkleProofTree(root) {
93
- this.root = root;
94
- }
95
- MerkleProofTree.prototype.maxLevel = function () {
96
- return this.maxLevelInternal(this.root);
97
- };
98
- /**
99
- * @param {MerkleProofElement} node
100
- */
101
- MerkleProofTree.prototype.maxLevelInternal = function (node) {
102
- if (node instanceof ProofValueLeaf) {
103
- return 1;
104
- }
105
- else if (node instanceof ProofHashedLeaf) {
106
- return 1;
107
- }
108
- else if (node instanceof ProofNode) {
109
- return Math.max(this.maxLevelInternal(node.left), this.maxLevelInternal(node.right)) + 1;
110
- }
111
- else {
112
- throw new Error("Should be able to handle node type: " + typeof node);
113
- }
114
- };
115
- module.exports = { ProofNode, ProofNodeSimple, ProofHashedLeaf, ProofValueLeaf,
116
- ProofNodeArrayHead, ProofNodeDictHead, MerkleProofElement, MerkleProofTree };
117
- //# sourceMappingURL=merkleprooftree.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merkleprooftree.js","sourceRoot":"","sources":["../../../../src/merkle/proof/merkleprooftree.js"],"names":[],"mappings":";AACA,IAAI,qBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAA;AACpE,IAAI,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAA;AAChE,IAAI,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,sBAAsB,CAAA;AAC5E,IAAI,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,qBAAqB,CAAA;AAC1E;;GAEG;AACH,SAAS,kBAAkB,KAAI,CAAC;AAEhC;;;;;GAKG;AACH,SAAS,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK;IACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;AACpB,CAAC;AAED,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;AACjE,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,CAAA;AAE3C;;;;GAIG;AACH,SAAS,eAAe,CAAC,IAAI,EAAE,KAAK;IAClC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AACrD,CAAC;AAED,eAAe,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;AAC9D,eAAe,CAAC,SAAS,CAAC,WAAW,GAAG,eAAe,CAAA;AAEvD;;;;GAIG;AACH,SAAS,cAAc,CAAC,OAAO,EAAE,QAAQ;IACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;AAC1B,CAAC;AACD,cAAc,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;AACtE,cAAc,CAAC,SAAS,CAAC,WAAW,GAAG,cAAc,CAAA;AAErD;;;GAGG;AACH,SAAS,eAAe,CAAC,UAAU;IACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;AAC9B,CAAC;AACD,eAAe,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;AACvE,eAAe,CAAC,SAAS,CAAC,WAAW,GAAG,eAAe,CAAA;AAEvD;;GAEG;AACH,eAAe,CAAC,SAAS,CAAC,MAAM,GAAG,UAAS,KAAK;IAC/C,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IACjD,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,GAAC,IAAI;IACpD,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;IACzD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;AAC1B,CAAC;AACD,kBAAkB,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;AACjE,kBAAkB,CAAC,SAAS,CAAC,WAAW,GAAG,kBAAkB,CAAA;AAE7D;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,GAAC,IAAI;IACnD,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;IACxD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;AAC1B,CAAC;AACD,iBAAiB,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;AAChE,iBAAiB,CAAC,SAAS,CAAC,WAAW,GAAG,iBAAiB,CAAA;AAE3D;;;GAGG;AACH,SAAS,eAAe,CAAC,IAAI;IAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;AAClB,CAAC;AAED,eAAe,CAAC,SAAS,CAAC,QAAQ,GAAG;IACnC,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzC,CAAC,CAAA;AAED;;GAEG;AACH,eAAe,CAAC,SAAS,CAAC,gBAAgB,GAAG,UAAS,IAAI;IACxD,IAAI,IAAI,YAAY,cAAc,EAAE,CAAC;QACnC,OAAO,CAAC,CAAA;IACV,CAAC;SAAM,IAAI,IAAI,YAAY,eAAe,EAAE,CAAC;QAC3C,OAAO,CAAC,CAAA;IACV,CAAC;SAAM,IAAI,IAAI,YAAY,SAAS,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA;IAC1F,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,OAAO,IAAI,CAAC,CAAA;IACvE,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,OAAO,GAAG,EAAC,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc;IAC3E,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAC,CAAA"}
@@ -1,47 +0,0 @@
1
- /**
2
- *
3
- */
4
- export function MerkleProofTreeFactory(): void;
5
- export class MerkleProofTreeFactory {
6
- /**
7
- * @param {BinaryTree} originalTree
8
- */
9
- buildFromBinaryTree(originalTree: BinaryTree, calculator: any): MerkleProofTree;
10
- /**
11
- * @param {BinaryTreeElement} elem
12
- * @param {*} calculator
13
- */
14
- buildFromBinaryTreeInternal(elem: BinaryTreeElement, calculator: any): any;
15
- /**
16
- * @param {Node} node
17
- */
18
- convertNode(node: Node, calculator: any): any;
19
- /**
20
- * @param {ArrayHeadNode} node
21
- */
22
- extractSearchablePathElement(node: ArrayHeadNode): any;
23
- /**
24
- * @param {Node} node
25
- * @param {MerkleProofElement} left
26
- * @param {MerkleProofElement} right
27
- */
28
- buildNodeOfCorrectType(node: Node, left: typeof MerkleProofElement, right: typeof MerkleProofElement): ProofNodeSimple | ProofNodeArrayHead | ProofNodeDictHead;
29
- }
30
- import BinaryTree_1 = require("../binarytree");
31
- import BinaryTree = BinaryTree_1.BinaryTree;
32
- import MerkleProofTree_1 = require("./merkleprooftree");
33
- import MerkleProofTree = MerkleProofTree_1.MerkleProofTree;
34
- import BinaryTreeElement_1 = require("../binarytree");
35
- import BinaryTreeElement = BinaryTreeElement_1.BinaryTreeElement;
36
- import Node_1 = require("../binarytree");
37
- import Node = Node_1.Node;
38
- import ArrayHeadNode_1 = require("../binarytree");
39
- import ArrayHeadNode = ArrayHeadNode_1.ArrayHeadNode;
40
- import MerkleProofElement_1 = require("./merkleprooftree");
41
- import MerkleProofElement = MerkleProofElement_1.MerkleProofElement;
42
- import ProofNodeSimple_1 = require("./merkleprooftree");
43
- import ProofNodeSimple = ProofNodeSimple_1.ProofNodeSimple;
44
- import ProofNodeArrayHead_1 = require("./merkleprooftree");
45
- import ProofNodeArrayHead = ProofNodeArrayHead_1.ProofNodeArrayHead;
46
- import ProofNodeDictHead_1 = require("./merkleprooftree");
47
- import ProofNodeDictHead = ProofNodeDictHead_1.ProofNodeDictHead;
@@ -1,123 +0,0 @@
1
- "use strict";
2
- const { Buffer } = require('buffer');
3
- var BinaryTreeElement = require('../binarytree').BinaryTreeElement;
4
- var Node = require('../binarytree').Node;
5
- var Leaf = require('../binarytree').Leaf;
6
- var EmptyLeaf = require('../binarytree').EmptyLeaf;
7
- var BinaryTree = require('../binarytree').BinaryTree;
8
- var ProofHashedLeaf = require('./merkleprooftree').ProofHashedLeaf;
9
- var ProofValueLeaf = require('./merkleprooftree').ProofValueLeaf;
10
- var MerkleProofElement = require('./merkleprooftree').MerkleProofElement;
11
- var MerkleProofTree = require('./merkleprooftree').MerkleProofTree;
12
- var ProofNodeArrayHead = require('./merkleprooftree').ProofNodeArrayHead;
13
- var ProofNodeDictHead = require('./merkleprooftree').ProofNodeDictHead;
14
- var PathLeafElement = require('../path').PathLeafElement;
15
- var SubTreeRootNode = require('../binarytree').SubTreeRootNode;
16
- var ArrayHeadNode = require('../binarytree').ArrayHeadNode;
17
- var DictHeadNode = require('../binarytree').DictHeadNode;
18
- var ProofNodeSimple = require('./merkleprooftree').ProofNodeSimple;
19
- const EMPTY_HASH = new Buffer.alloc(32);
20
- /**
21
- *
22
- */
23
- function MerkleProofTreeFactory() { }
24
- /**
25
- * @param {BinaryTree} originalTree
26
- */
27
- MerkleProofTreeFactory.prototype.buildFromBinaryTree = function (originalTree, calculator) {
28
- var rootElem = this.buildFromBinaryTreeInternal(originalTree.root, calculator);
29
- return new MerkleProofTree(rootElem);
30
- };
31
- /**
32
- * @param {BinaryTreeElement} elem
33
- * @param {*} calculator
34
- */
35
- MerkleProofTreeFactory.prototype.buildFromBinaryTreeInternal = function (elem, calculator) {
36
- if (elem instanceof EmptyLeaf) {
37
- return new ProofHashedLeaf(EMPTY_HASH);
38
- }
39
- else if (elem instanceof Leaf) {
40
- var pathElem = elem.pathElem;
41
- if (pathElem != null) {
42
- if (pathElem instanceof PathLeafElement) {
43
- return new ProofValueLeaf(elem.content, pathElem.previous);
44
- }
45
- else {
46
- throw new Error("The path and structure don't match. We are at a leaf, but path elem is not a leaf: " + pathElem);
47
- }
48
- }
49
- else {
50
- // make a hash
51
- var hash = calculator.calculateLeafHash(elem.content);
52
- return new ProofHashedLeaf(hash);
53
- }
54
- }
55
- else if (elem instanceof SubTreeRootNode) {
56
- var pathElem = elem.pathElem;
57
- if (pathElem != null) {
58
- if (pathElem instanceof PathLeafElement) {
59
- // Don't convert it
60
- return new ProofValueLeaf(elem.content, pathElem.previous);
61
- }
62
- else {
63
- return this.convertNode(elem, calculator);
64
- }
65
- }
66
- else {
67
- return this.convertNode(elem, calculator);
68
- }
69
- }
70
- else if (elem instanceof Node) {
71
- return this.convertNode(elem, calculator);
72
- }
73
- else {
74
- throw new Error("Cannot handle " + elem);
75
- }
76
- };
77
- /**
78
- * @param {Node} node
79
- */
80
- MerkleProofTreeFactory.prototype.convertNode = function (node, calculator) {
81
- var left = this.buildFromBinaryTreeInternal(node.left, calculator);
82
- var right = this.buildFromBinaryTreeInternal(node.right, calculator);
83
- if (left instanceof ProofHashedLeaf && right instanceof ProofHashedLeaf) {
84
- var addedHash = calculator.calculateNodeHash(node.getPrefixByte(), left.merkleHash, right.merkleHash);
85
- return new ProofHashedLeaf(addedHash);
86
- }
87
- else {
88
- return this.buildNodeOfCorrectType(node, left, right);
89
- }
90
- };
91
- /**
92
- * @param {ArrayHeadNode} node
93
- */
94
- MerkleProofTreeFactory.prototype.extractSearchablePathElement = function (node) {
95
- var pathElem = node.pathElem;
96
- if (pathElem != null) {
97
- return pathElem.previous;
98
- }
99
- else {
100
- return null;
101
- }
102
- };
103
- /**
104
- * @param {Node} node
105
- * @param {MerkleProofElement} left
106
- * @param {MerkleProofElement} right
107
- */
108
- MerkleProofTreeFactory.prototype.buildNodeOfCorrectType = function (node, left, right) {
109
- if (node instanceof ArrayHeadNode) {
110
- return new ProofNodeArrayHead(left, right, this.extractSearchablePathElement(node));
111
- }
112
- else if (node instanceof DictHeadNode) {
113
- return new ProofNodeDictHead(left, right, this.extractSearchablePathElement(node));
114
- }
115
- else if (node instanceof Node) {
116
- return new ProofNodeSimple(left, right);
117
- }
118
- else {
119
- throw new Error("Should have taken care of this node type: " + node);
120
- }
121
- };
122
- module.exports = { MerkleProofTreeFactory };
123
- //# sourceMappingURL=merkleprooftreefactory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merkleprooftreefactory.js","sourceRoot":"","sources":["../../../../src/merkle/proof/merkleprooftreefactory.js"],"names":[],"mappings":";AAAA,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AACrC,IAAI,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,iBAAiB,CAAA;AAClE,IAAI,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAA;AACxC,IAAI,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAA;AACxC,IAAI,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,SAAS,CAAA;AAClD,IAAI,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,UAAU,CAAA;AACpD,IAAI,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAA;AAClE,IAAI,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,cAAc,CAAA;AAChE,IAAI,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,kBAAkB,CAAA;AACxE,IAAI,eAAe,GAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAA;AACnE,IAAI,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,kBAAkB,CAAA;AACxE,IAAI,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,iBAAiB,CAAA;AACtE,IAAI,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,eAAe,CAAA;AACxD,IAAI,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,eAAe,CAAA;AAC9D,IAAI,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,aAAa,CAAA;AAC1D,IAAI,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,YAAY,CAAA;AACxD,IAAI,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAA;AAElE,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;AACvC;;GAEG;AACH,SAAS,sBAAsB,KAAI,CAAC;AAEpC;;GAEG;AACH,sBAAsB,CAAC,SAAS,CAAC,mBAAmB,GAAG,UAAS,YAAY,EAAE,UAAU;IACtF,IAAI,QAAQ,GAAG,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAC9E,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAA;AACtC,CAAC,CAAA;AACD;;;GAGG;AACH,sBAAsB,CAAC,SAAS,CAAC,2BAA2B,GAAG,UAAS,IAAI,EAAE,UAAU;IACtF,IAAI,IAAI,YAAY,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,eAAe,CAAC,UAAU,CAAC,CAAA;IACxC,CAAC;SAAM,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;QAChC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC5B,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,QAAQ,YAAY,eAAe,EAAE,CAAC;gBACxC,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAC5D,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,qFAAqF,GAAG,QAAQ,CAAC,CAAA;YACnH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,cAAc;YACd,IAAI,IAAI,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACrD,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,YAAY,eAAe,EAAE,CAAC;QAC3C,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC5B,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,QAAQ,YAAY,eAAe,EAAE,CAAC;gBACxC,mBAAmB;gBACnB,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAC5D,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;YAC3C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAC3C,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC,CAAA;AAED;;GAEG;AACH,sBAAsB,CAAC,SAAS,CAAC,WAAW,GAAG,UAAS,IAAI,EAAE,UAAU;IACtE,IAAI,IAAI,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAClE,IAAI,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;IACpE,IAAI,IAAI,YAAY,eAAe,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;QACxE,IAAI,SAAS,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;QACrG,OAAO,IAAI,eAAe,CAAC,SAAS,CAAC,CAAA;IACvC,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;IACvD,CAAC;AACH,CAAC,CAAA;AAED;;GAEG;AACH,sBAAsB,CAAC,SAAS,CAAC,4BAA4B,GAAG,UAAS,IAAI;IAC3E,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC5B,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,OAAO,QAAQ,CAAC,QAAQ,CAAA;IAC1B,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED;;;;GAIG;AACH,sBAAsB,CAAC,SAAS,CAAC,sBAAsB,GAAG,UAAS,IAAI,EAAE,IAAI,EAAE,KAAK;IAClF,IAAI,IAAI,YAAY,aAAa,EAAE,CAAC;QAClC,OAAO,IAAI,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAA;IACrF,CAAC;SAAM,IAAI,IAAI,YAAY,YAAY,EAAE,CAAC;QACxC,OAAO,IAAI,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAA;IACpF,CAAC;SAAM,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;QAChC,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACzC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,4CAA4C,GAAG,IAAI,CAAC,CAAA;IACtE,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,OAAO,GAAG,EAAC,sBAAsB,EAAC,CAAA"}
@@ -1,11 +0,0 @@
1
- /// <reference types="node" />
2
- export type Step = {
3
- side: number;
4
- hash: Buffer;
5
- };
6
- export type StringStep = {
7
- side: number;
8
- hash: string;
9
- };
10
- export type Path = Step[];
11
- export type StringPath = StringStep[];
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/merkle/types.ts"],"names":[],"mappings":""}
@@ -1,85 +0,0 @@
1
- import assert from "assert";
2
- import { hash256 } from "../../../../src/encryption/encryption";
3
- import { calculateRoot, merklePath, validateMerklePath } from "../../../../src/merkle/merkleHelper";
4
- function merkleRoot(stringList) {
5
- return calculateRoot(hashList(stringList));
6
- }
7
- function stringToHash(string) {
8
- return hash256(Buffer.from(string));
9
- }
10
- function hashList(stringList) {
11
- return stringList.map(stringToHash);
12
- }
13
- function checkDifferent(list1, list2) {
14
- const root1 = merkleRoot(list1);
15
- const root2 = merkleRoot(list2);
16
- expect(root1.equals(root2)).toBeFalsy();
17
- }
18
- function testPath(stringList, stringToProve) {
19
- const path = merklePath(hashList(stringList), stringToHash(stringToProve));
20
- expect(validateMerklePath(path, stringToHash(stringToProve), merkleRoot(stringList))).toBeTruthy();
21
- }
22
- const a = ["a"];
23
- const aa = ["a", "a"];
24
- const abcde = ["a", "b", "c", "d", "e"];
25
- const abcdee = ["a", "b", "c", "d", "e", "e"];
26
- const abcdef = ["a", "b", "c", "d", "e", "f"];
27
- const abcdefef = ["a", "b", "c", "d", "e", "f", "e", "f"];
28
- describe("MerkleHelper", function () {
29
- it("merkle root of empty list is 32 0s", () => {
30
- expect(merkleRoot([]).equals(Buffer.alloc(32))).toBeTruthy();
31
- });
32
- it("merkle root of single element", () => {
33
- expect(merkleRoot(a).equals(stringToHash("a"))).toBeTruthy();
34
- });
35
- it("merkle root collisions", function () {
36
- checkDifferent(a, aa);
37
- checkDifferent(abcde, abcdee);
38
- checkDifferent(abcdef, abcdefef);
39
- });
40
- it("merkle proof throws on empty list", () => {
41
- assert.throws(() => {
42
- merklePath([], stringToHash("a"));
43
- }, Error);
44
- });
45
- it("merkle proof throws if tx not exist in list", () => {
46
- assert.throws(() => {
47
- merklePath(hashList(abcdee), stringToHash("f"));
48
- }, Error);
49
- });
50
- it("merkle proof structure", () => {
51
- const path = merklePath(hashList(abcde), stringToHash("e"));
52
- assert.equal(path.length, 3);
53
- assert.equal(path[0].side, 1); // right
54
- assert.equal(path[1].side, 1); // right
55
- assert.equal(path[2].side, 0); // left
56
- expect(validateMerklePath(path, stringToHash("e"), merkleRoot(abcde))).toBeTruthy();
57
- expect(validateMerklePath(path, stringToHash("c"), merkleRoot(abcde))).toBeFalsy();
58
- });
59
- it("merkle proof structure fails without hashes", () => {
60
- assert.throws(() => merklePath([], stringToHash("e")), Error);
61
- });
62
- it("merkle path to size 20", () => {
63
- const txs = [];
64
- for (let i = 1; i < 20; i++) {
65
- txs.push(`${i}`);
66
- for (let j = 1; j <= i; j++) {
67
- testPath(txs, `${j}`);
68
- }
69
- }
70
- }, 400000);
71
- it("dummy", () => {
72
- testPath(["1", "2", "3"], "1");
73
- });
74
- it("merkle path negative test wrong side", () => {
75
- const path = merklePath(hashList(abcde), stringToHash("d"));
76
- path[1].side = 1; // Flip side of one path component
77
- expect(validateMerklePath(path, stringToHash("d"), merkleRoot(abcde))).toBeFalsy();
78
- });
79
- it("merkle path negative test wrong hash", () => {
80
- const path = merklePath(hashList(abcde), stringToHash("d"));
81
- path[2].hash = stringToHash("invalid"); // wrong hash
82
- expect(validateMerklePath(path, stringToHash("d"), merkleRoot(abcde))).toBeFalsy();
83
- });
84
- });
85
- //# sourceMappingURL=merkleHelperTest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merkleHelperTest.js","sourceRoot":"","sources":["../../../../../test/unit/merkle/merkleHelper/merkleHelperTest.ts"],"names":[],"mappings":"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"}