init
This commit is contained in:
+16
@@ -0,0 +1,16 @@
|
||||
import { NodeType, Node } from './node';
|
||||
declare class InnerNode extends Node {
|
||||
leaves: {
|
||||
[slot: number]: Node | undefined;
|
||||
};
|
||||
type: NodeType;
|
||||
depth: number;
|
||||
empty: boolean;
|
||||
constructor(depth?: number);
|
||||
get hash(): string;
|
||||
addItem(tag: string, node: Node): void;
|
||||
setNode(slot: number, node: Node): void;
|
||||
getNode(slot: number): Node | undefined;
|
||||
}
|
||||
export default InnerNode;
|
||||
//# sourceMappingURL=InnerNode.d.ts.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"InnerNode.d.ts","sourceRoot":"","sources":["../../../../../src/utils/hashes/SHAMap/InnerNode.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAWvC,cAAM,SAAU,SAAQ,IAAI;IACnB,MAAM,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;KAAE,CAAA;IAC5C,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;gBAOF,KAAK,SAAI;IAa5B,IAAW,IAAI,IAAI,MAAM,CAaxB;IASM,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IAsCtC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IAevC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;CAM/C;AAED,eAAe,SAAS,CAAA"}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const errors_1 = require("../../../errors");
|
||||
const HashPrefix_1 = __importDefault(require("../HashPrefix"));
|
||||
const sha512Half_1 = __importDefault(require("../sha512Half"));
|
||||
const LeafNode_1 = __importDefault(require("./LeafNode"));
|
||||
const node_1 = require("./node");
|
||||
const HEX_ZERO = '0000000000000000000000000000000000000000000000000000000000000000';
|
||||
const SLOT_MAX = 15;
|
||||
const HEX = 16;
|
||||
class InnerNode extends node_1.Node {
|
||||
constructor(depth = 0) {
|
||||
super();
|
||||
this.leaves = {};
|
||||
this.type = node_1.NodeType.INNER;
|
||||
this.depth = depth;
|
||||
this.empty = true;
|
||||
}
|
||||
get hash() {
|
||||
if (this.empty) {
|
||||
return HEX_ZERO;
|
||||
}
|
||||
let hex = '';
|
||||
for (let iter = 0; iter <= SLOT_MAX; iter++) {
|
||||
const child = this.leaves[iter];
|
||||
const hash = child == null ? HEX_ZERO : child.hash;
|
||||
hex += hash;
|
||||
}
|
||||
const prefix = HashPrefix_1.default.INNER_NODE.toString(HEX);
|
||||
return (0, sha512Half_1.default)(prefix + hex);
|
||||
}
|
||||
addItem(tag, node) {
|
||||
const existingNode = this.getNode(parseInt(tag[this.depth], HEX));
|
||||
if (existingNode === undefined) {
|
||||
this.setNode(parseInt(tag[this.depth], HEX), node);
|
||||
return;
|
||||
}
|
||||
if (existingNode instanceof InnerNode) {
|
||||
existingNode.addItem(tag, node);
|
||||
}
|
||||
else if (existingNode instanceof LeafNode_1.default) {
|
||||
if (existingNode.tag === tag) {
|
||||
throw new errors_1.XrplError('Tried to add a node to a SHAMap that was already in there.');
|
||||
}
|
||||
else {
|
||||
const newInnerNode = new InnerNode(this.depth + 1);
|
||||
newInnerNode.addItem(existingNode.tag, existingNode);
|
||||
newInnerNode.addItem(tag, node);
|
||||
this.setNode(parseInt(tag[this.depth], HEX), newInnerNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
setNode(slot, node) {
|
||||
if (slot < 0 || slot > SLOT_MAX) {
|
||||
throw new errors_1.XrplError('Invalid slot: slot must be between 0-15.');
|
||||
}
|
||||
this.leaves[slot] = node;
|
||||
this.empty = false;
|
||||
}
|
||||
getNode(slot) {
|
||||
if (slot < 0 || slot > SLOT_MAX) {
|
||||
throw new errors_1.XrplError('Invalid slot: slot must be between 0-15.');
|
||||
}
|
||||
return this.leaves[slot];
|
||||
}
|
||||
}
|
||||
exports.default = InnerNode;
|
||||
//# sourceMappingURL=InnerNode.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"InnerNode.js","sourceRoot":"","sources":["../../../../../src/utils/hashes/SHAMap/InnerNode.ts"],"names":[],"mappings":"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"}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
import { NodeType, Node } from './node';
|
||||
declare class LeafNode extends Node {
|
||||
tag: string;
|
||||
type: NodeType;
|
||||
data: string;
|
||||
constructor(tag: string, data: string, type: NodeType);
|
||||
get hash(): string;
|
||||
addItem(tag: string, node: Node): void;
|
||||
}
|
||||
export default LeafNode;
|
||||
//# sourceMappingURL=LeafNode.d.ts.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"LeafNode.d.ts","sourceRoot":"","sources":["../../../../../src/utils/hashes/SHAMap/LeafNode.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAOvC,cAAM,QAAS,SAAQ,IAAI;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;gBASA,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ;IAa5D,IAAW,IAAI,IAAI,MAAM,CAiBxB;IASM,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;CAI9C;AAED,eAAe,QAAQ,CAAA"}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const errors_1 = require("../../../errors");
|
||||
const HashPrefix_1 = __importDefault(require("../HashPrefix"));
|
||||
const sha512Half_1 = __importDefault(require("../sha512Half"));
|
||||
const node_1 = require("./node");
|
||||
const HEX = 16;
|
||||
class LeafNode extends node_1.Node {
|
||||
constructor(tag, data, type) {
|
||||
super();
|
||||
this.tag = tag;
|
||||
this.type = type;
|
||||
this.data = data;
|
||||
}
|
||||
get hash() {
|
||||
switch (this.type) {
|
||||
case node_1.NodeType.ACCOUNT_STATE: {
|
||||
const leafPrefix = HashPrefix_1.default.LEAF_NODE.toString(HEX);
|
||||
return (0, sha512Half_1.default)(leafPrefix + this.data + this.tag);
|
||||
}
|
||||
case node_1.NodeType.TRANSACTION_NO_METADATA: {
|
||||
const txIDPrefix = HashPrefix_1.default.TRANSACTION_ID.toString(HEX);
|
||||
return (0, sha512Half_1.default)(txIDPrefix + this.data);
|
||||
}
|
||||
case node_1.NodeType.TRANSACTION_METADATA: {
|
||||
const txNodePrefix = HashPrefix_1.default.TRANSACTION_NODE.toString(HEX);
|
||||
return (0, sha512Half_1.default)(txNodePrefix + this.data + this.tag);
|
||||
}
|
||||
default:
|
||||
throw new errors_1.XrplError('Tried to hash a SHAMap node of unknown type.');
|
||||
}
|
||||
}
|
||||
addItem(tag, node) {
|
||||
throw new errors_1.XrplError('Cannot call addItem on a LeafNode');
|
||||
this.addItem(tag, node);
|
||||
}
|
||||
}
|
||||
exports.default = LeafNode;
|
||||
//# sourceMappingURL=LeafNode.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"LeafNode.js","sourceRoot":"","sources":["../../../../../src/utils/hashes/SHAMap/LeafNode.ts"],"names":[],"mappings":";;;;;AAAA,4CAA2C;AAC3C,+DAAsC;AACtC,+DAAsC;AAEtC,iCAAuC;AAEvC,MAAM,GAAG,GAAG,EAAE,CAAA;AAKd,MAAM,QAAS,SAAQ,WAAI;IAYzB,YAAmB,GAAW,EAAE,IAAY,EAAE,IAAc;QAC1D,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAQD,IAAW,IAAI;QACb,QAAQ,IAAI,CAAC,IAAI,EAAE;YACjB,KAAK,eAAQ,CAAC,aAAa,CAAC,CAAC;gBAC3B,MAAM,UAAU,GAAG,oBAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;gBACrD,OAAO,IAAA,oBAAU,EAAC,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;aACrD;YACD,KAAK,eAAQ,CAAC,uBAAuB,CAAC,CAAC;gBACrC,MAAM,UAAU,GAAG,oBAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;gBAC1D,OAAO,IAAA,oBAAU,EAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;aAC1C;YACD,KAAK,eAAQ,CAAC,oBAAoB,CAAC,CAAC;gBAClC,MAAM,YAAY,GAAG,oBAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;gBAC9D,OAAO,IAAA,oBAAU,EAAC,YAAY,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;aACvD;YACD;gBACE,MAAM,IAAI,kBAAS,CAAC,8CAA8C,CAAC,CAAA;SACtE;IACH,CAAC;IASM,OAAO,CAAC,GAAW,EAAE,IAAU;QACpC,MAAM,IAAI,kBAAS,CAAC,mCAAmC,CAAC,CAAA;QACxD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACzB,CAAC;CACF;AAED,kBAAe,QAAQ,CAAA"}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
import InnerNode from './InnerNode';
|
||||
import { NodeType } from './node';
|
||||
declare class SHAMap {
|
||||
root: InnerNode;
|
||||
constructor();
|
||||
get hash(): string;
|
||||
addItem(tag: string, data: string, type: NodeType): void;
|
||||
}
|
||||
export * from './node';
|
||||
export default SHAMap;
|
||||
//# sourceMappingURL=index.d.ts.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/utils/hashes/SHAMap/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAA;AAEnC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAMjC,cAAM,MAAM;IACH,IAAI,EAAE,SAAS,CAAA;;IActB,IAAW,IAAI,IAAI,MAAM,CAExB;IASM,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;CAGhE;AAED,cAAc,QAAQ,CAAA;AACtB,eAAe,MAAM,CAAA"}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
||||
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
||||
};
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const InnerNode_1 = __importDefault(require("./InnerNode"));
|
||||
const LeafNode_1 = __importDefault(require("./LeafNode"));
|
||||
class SHAMap {
|
||||
constructor() {
|
||||
this.root = new InnerNode_1.default(0);
|
||||
}
|
||||
get hash() {
|
||||
return this.root.hash;
|
||||
}
|
||||
addItem(tag, data, type) {
|
||||
this.root.addItem(tag, new LeafNode_1.default(tag, data, type));
|
||||
}
|
||||
}
|
||||
__exportStar(require("./node"), exports);
|
||||
exports.default = SHAMap;
|
||||
//# sourceMappingURL=index.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/utils/hashes/SHAMap/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,4DAAmC;AACnC,0DAAiC;AAOjC,MAAM,MAAM;IAMV;QACE,IAAI,CAAC,IAAI,GAAG,IAAI,mBAAS,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC;IAOD,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IACvB,CAAC;IASM,OAAO,CAAC,GAAW,EAAE,IAAY,EAAE,IAAc;QACtD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,kBAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IACvD,CAAC;CACF;AAED,yCAAsB;AACtB,kBAAe,MAAM,CAAA"}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
export declare enum NodeType {
|
||||
INNER = 1,
|
||||
TRANSACTION_NO_METADATA = 2,
|
||||
TRANSACTION_METADATA = 3,
|
||||
ACCOUNT_STATE = 4
|
||||
}
|
||||
export declare abstract class Node {
|
||||
abstract get hash(): string;
|
||||
abstract addItem(_tag: string, _node: Node): void;
|
||||
}
|
||||
//# sourceMappingURL=node.d.ts.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../../../src/utils/hashes/SHAMap/node.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,uBAAuB,IAAI;IAC3B,oBAAoB,IAAI;IACxB,aAAa,IAAI;CAClB;AAKD,8BAAsB,IAAI;IACxB,aAAoB,IAAI,IAAI,MAAM,CAAA;aAClB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI;CACzD"}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.Node = exports.NodeType = void 0;
|
||||
var NodeType;
|
||||
(function (NodeType) {
|
||||
NodeType[NodeType["INNER"] = 1] = "INNER";
|
||||
NodeType[NodeType["TRANSACTION_NO_METADATA"] = 2] = "TRANSACTION_NO_METADATA";
|
||||
NodeType[NodeType["TRANSACTION_METADATA"] = 3] = "TRANSACTION_METADATA";
|
||||
NodeType[NodeType["ACCOUNT_STATE"] = 4] = "ACCOUNT_STATE";
|
||||
})(NodeType = exports.NodeType || (exports.NodeType = {}));
|
||||
class Node {
|
||||
}
|
||||
exports.Node = Node;
|
||||
//# sourceMappingURL=node.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../../../src/utils/hashes/SHAMap/node.ts"],"names":[],"mappings":";;;AAAA,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,6EAA2B,CAAA;IAC3B,uEAAwB,CAAA;IACxB,yDAAiB,CAAA;AACnB,CAAC,EALW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAKnB;AAKD,MAAsB,IAAI;CAGzB;AAHD,oBAGC"}
|
||||
Reference in New Issue
Block a user