This commit is contained in:
nitowa
2023-08-15 22:28:03 +02:00
commit 1dae68b1c7
5529 changed files with 1659171 additions and 0 deletions
+16
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -0,0 +1 @@
{"version":3,"file":"InnerNode.js","sourceRoot":"","sources":["../../../../../src/utils/hashes/SHAMap/InnerNode.ts"],"names":[],"mappings":"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"}
+11
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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"}