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
+12
View File
@@ -0,0 +1,12 @@
declare enum HashPrefix {
TRANSACTION_ID = 1415073280,
TRANSACTION_NODE = 1397638144,
INNER_NODE = 1296649728,
LEAF_NODE = 1296846336,
TRANSACTION_SIGN = 1398036480,
TRANSACTION_SIGN_TESTNET = 1937012736,
TRANSACTION_MULTISIGN = 1397576704,
LEDGER = 1280791040
}
export default HashPrefix;
//# sourceMappingURL=HashPrefix.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"HashPrefix.d.ts","sourceRoot":"","sources":["../../../../src/utils/hashes/HashPrefix.ts"],"names":[],"mappings":"AAaA,aAAK,UAAU;IAEb,cAAc,aAAa;IAG3B,gBAAgB,aAAa;IAG7B,UAAU,aAAa;IAGvB,SAAS,aAAa;IAGtB,gBAAgB,aAAa;IAG7B,wBAAwB,aAAa;IAGrC,qBAAqB,aAAa;IAGlC,MAAM,aAAa;CACpB;AAED,eAAe,UAAU,CAAA"}
+15
View File
@@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var HashPrefix;
(function (HashPrefix) {
HashPrefix[HashPrefix["TRANSACTION_ID"] = 1415073280] = "TRANSACTION_ID";
HashPrefix[HashPrefix["TRANSACTION_NODE"] = 1397638144] = "TRANSACTION_NODE";
HashPrefix[HashPrefix["INNER_NODE"] = 1296649728] = "INNER_NODE";
HashPrefix[HashPrefix["LEAF_NODE"] = 1296846336] = "LEAF_NODE";
HashPrefix[HashPrefix["TRANSACTION_SIGN"] = 1398036480] = "TRANSACTION_SIGN";
HashPrefix[HashPrefix["TRANSACTION_SIGN_TESTNET"] = 1937012736] = "TRANSACTION_SIGN_TESTNET";
HashPrefix[HashPrefix["TRANSACTION_MULTISIGN"] = 1397576704] = "TRANSACTION_MULTISIGN";
HashPrefix[HashPrefix["LEDGER"] = 1280791040] = "LEDGER";
})(HashPrefix || (HashPrefix = {}));
exports.default = HashPrefix;
//# sourceMappingURL=HashPrefix.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"HashPrefix.js","sourceRoot":"","sources":["../../../../src/utils/hashes/HashPrefix.ts"],"names":[],"mappings":";;AAaA,IAAK,UAwBJ;AAxBD,WAAK,UAAU;IAEb,wEAA2B,CAAA;IAG3B,4EAA6B,CAAA;IAG7B,gEAAuB,CAAA;IAGvB,8DAAsB,CAAA;IAGtB,4EAA6B,CAAA;IAG7B,4FAAqC,CAAA;IAGrC,sFAAkC,CAAA;IAGlC,wDAAmB,CAAA;AACrB,CAAC,EAxBI,UAAU,KAAV,UAAU,QAwBd;AAED,kBAAe,UAAU,CAAA"}
+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"}
+14
View File
@@ -0,0 +1,14 @@
import type { Ledger } from '../../models/ledger';
import { LedgerEntry } from '../../models/ledger';
import { Transaction, TransactionMetadata } from '../../models/transactions';
export declare function hashSignedTx(tx: Transaction | string): string;
export declare function hashLedgerHeader(ledgerHeader: Ledger): string;
export declare function hashTxTree(transactions: Array<Transaction & {
metaData?: TransactionMetadata;
}>): string;
export declare function hashStateTree(entries: LedgerEntry[]): string;
declare function hashLedger(ledger: Ledger, options?: {
computeTreeHashes?: boolean;
}): string;
export default hashLedger;
//# sourceMappingURL=hashLedger.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"hashLedger.d.ts","sourceRoot":"","sources":["../../../../src/utils/hashes/hashLedger.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AA8D5E,wBAAgB,YAAY,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,CAkB7D;AASD,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAgB7D;AASD,wBAAgB,UAAU,CACxB,YAAY,EAAE,KAAK,CAAC,WAAW,GAAG;IAAE,QAAQ,CAAC,EAAE,mBAAmB,CAAA;CAAE,CAAC,GACpE,MAAM,CAWR;AASD,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAS5D;AAkED,iBAAS,UAAU,CACjB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IACP,iBAAiB,CAAC,EAAE,OAAO,CAAA;CACvB,GACL,MAAM,CAMR;AAED,eAAe,UAAU,CAAA"}
+164
View File
@@ -0,0 +1,164 @@
"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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.hashStateTree = exports.hashTxTree = exports.hashLedgerHeader = exports.hashSignedTx = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const ripple_binary_codec_1 = require("ripple-binary-codec");
const errors_1 = require("../../errors");
const HashPrefix_1 = __importDefault(require("./HashPrefix"));
const sha512Half_1 = __importDefault(require("./sha512Half"));
const SHAMap_1 = __importStar(require("./SHAMap"));
const HEX = 16;
function intToHex(integer, byteLength) {
const foo = Number(integer)
.toString(HEX)
.padStart(byteLength * 2, '0');
return foo;
}
function bytesToHex(bytes) {
return Buffer.from(bytes).toString('hex');
}
function bigintToHex(integerString, byteLength) {
const hex = new bignumber_js_1.default(integerString).toString(HEX);
return hex.padStart(byteLength * 2, '0');
}
function addLengthPrefix(hex) {
const length = hex.length / 2;
if (length <= 192) {
return bytesToHex([length]) + hex;
}
if (length <= 12480) {
const prefix = length - 193;
return bytesToHex([193 + (prefix >>> 8), prefix & 0xff]) + hex;
}
if (length <= 918744) {
const prefix = length - 12481;
return (bytesToHex([
241 + (prefix >>> 16),
(prefix >>> 8) & 0xff,
prefix & 0xff,
]) + hex);
}
throw new errors_1.XrplError('Variable integer overflow.');
}
function hashSignedTx(tx) {
let txBlob;
let txObject;
if (typeof tx === 'string') {
txBlob = tx;
txObject = (0, ripple_binary_codec_1.decode)(tx);
}
else {
txBlob = (0, ripple_binary_codec_1.encode)(tx);
txObject = tx;
}
if (txObject.TxnSignature === undefined && txObject.Signers === undefined) {
throw new errors_1.ValidationError('The transaction must be signed to hash it.');
}
const prefix = HashPrefix_1.default.TRANSACTION_ID.toString(16).toUpperCase();
return (0, sha512Half_1.default)(prefix.concat(txBlob));
}
exports.hashSignedTx = hashSignedTx;
function hashLedgerHeader(ledgerHeader) {
const prefix = HashPrefix_1.default.LEDGER.toString(HEX).toUpperCase();
const ledger = prefix +
intToHex(Number(ledgerHeader.ledger_index), 4) +
bigintToHex(ledgerHeader.total_coins, 8) +
ledgerHeader.parent_hash +
ledgerHeader.transaction_hash +
ledgerHeader.account_hash +
intToHex(ledgerHeader.parent_close_time, 4) +
intToHex(ledgerHeader.close_time, 4) +
intToHex(ledgerHeader.close_time_resolution, 1) +
intToHex(ledgerHeader.close_flags, 1);
return (0, sha512Half_1.default)(ledger);
}
exports.hashLedgerHeader = hashLedgerHeader;
function hashTxTree(transactions) {
var _a;
const shamap = new SHAMap_1.default();
for (const txJSON of transactions) {
const txBlobHex = (0, ripple_binary_codec_1.encode)(txJSON);
const metaHex = (0, ripple_binary_codec_1.encode)((_a = txJSON.metaData) !== null && _a !== void 0 ? _a : {});
const txHash = hashSignedTx(txBlobHex);
const data = addLengthPrefix(txBlobHex) + addLengthPrefix(metaHex);
shamap.addItem(txHash, data, SHAMap_1.NodeType.TRANSACTION_METADATA);
}
return shamap.hash;
}
exports.hashTxTree = hashTxTree;
function hashStateTree(entries) {
const shamap = new SHAMap_1.default();
entries.forEach((ledgerEntry) => {
const data = (0, ripple_binary_codec_1.encode)(ledgerEntry);
shamap.addItem(ledgerEntry.index, data, SHAMap_1.NodeType.ACCOUNT_STATE);
});
return shamap.hash;
}
exports.hashStateTree = hashStateTree;
function computeTransactionHash(ledger, options) {
const { transaction_hash } = ledger;
if (!options.computeTreeHashes) {
return transaction_hash;
}
if (ledger.transactions == null) {
throw new errors_1.ValidationError('transactions is missing from the ledger');
}
const transactionHash = hashTxTree(ledger.transactions);
if (transaction_hash !== transactionHash) {
throw new errors_1.ValidationError('transactionHash in header' +
' does not match computed hash of transactions', {
transactionHashInHeader: transaction_hash,
computedHashOfTransactions: transactionHash,
});
}
return transactionHash;
}
function computeStateHash(ledger, options) {
const { account_hash } = ledger;
if (!options.computeTreeHashes) {
return account_hash;
}
if (ledger.accountState == null) {
throw new errors_1.ValidationError('accountState is missing from the ledger');
}
const stateHash = hashStateTree(ledger.accountState);
if (account_hash !== stateHash) {
throw new errors_1.ValidationError('stateHash in header does not match computed hash of state');
}
return stateHash;
}
function hashLedger(ledger, options = {}) {
const subhashes = {
transaction_hash: computeTransactionHash(ledger, options),
account_hash: computeStateHash(ledger, options),
};
return hashLedgerHeader(Object.assign(Object.assign({}, ledger), subhashes));
}
exports.default = hashLedger;
//# sourceMappingURL=hashLedger.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"hashLedger.js","sourceRoot":"","sources":["../../../../src/utils/hashes/hashLedger.ts"],"names":[],"mappings":"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"}
+10
View File
@@ -0,0 +1,10 @@
import hashLedger, { hashLedgerHeader, hashSignedTx, hashTxTree, hashStateTree } from './hashLedger';
export declare function hashTx(txBlobHex: string): string;
export declare function hashAccountRoot(address: string): string;
export declare function hashSignerListId(address: string): string;
export declare function hashOfferId(address: string, sequence: number): string;
export declare function hashTrustline(address1: string, address2: string, currency: string): string;
export declare function hashEscrow(address: string, sequence: number): string;
export declare function hashPaymentChannel(address: string, dstAddress: string, sequence: number): string;
export { hashLedgerHeader, hashSignedTx, hashLedger, hashStateTree, hashTxTree };
//# sourceMappingURL=index.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/hashes/index.ts"],"names":[],"mappings":"AAQA,OAAO,UAAU,EAAE,EACjB,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,aAAa,EACd,MAAM,cAAc,CAAA;AAsCrB,wBAAgB,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGhD;AAgBD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAgBD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIxD;AAiBD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQrE;AAWD,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,MAAM,CAcR;AAUD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMpE;AAWD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,CAOR;AAED,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,CAAA"}
+106
View File
@@ -0,0 +1,106 @@
"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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.hashTxTree = exports.hashStateTree = exports.hashLedger = exports.hashSignedTx = exports.hashLedgerHeader = exports.hashPaymentChannel = exports.hashEscrow = exports.hashTrustline = exports.hashOfferId = exports.hashSignerListId = exports.hashAccountRoot = exports.hashTx = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const ripple_address_codec_1 = require("ripple-address-codec");
const hashLedger_1 = __importStar(require("./hashLedger"));
exports.hashLedger = hashLedger_1.default;
Object.defineProperty(exports, "hashLedgerHeader", { enumerable: true, get: function () { return hashLedger_1.hashLedgerHeader; } });
Object.defineProperty(exports, "hashSignedTx", { enumerable: true, get: function () { return hashLedger_1.hashSignedTx; } });
Object.defineProperty(exports, "hashTxTree", { enumerable: true, get: function () { return hashLedger_1.hashTxTree; } });
Object.defineProperty(exports, "hashStateTree", { enumerable: true, get: function () { return hashLedger_1.hashStateTree; } });
const HashPrefix_1 = __importDefault(require("./HashPrefix"));
const ledgerSpaces_1 = __importDefault(require("./ledgerSpaces"));
const sha512Half_1 = __importDefault(require("./sha512Half"));
const HEX = 16;
const BYTE_LENGTH = 4;
function addressToHex(address) {
return Buffer.from((0, ripple_address_codec_1.decodeAccountID)(address)).toString('hex');
}
function ledgerSpaceHex(name) {
return ledgerSpaces_1.default[name].charCodeAt(0).toString(HEX).padStart(4, '0');
}
const MASK = 0xff;
function currencyToHex(currency) {
if (currency.length !== 3) {
return currency;
}
const bytes = Array(20).fill(0);
bytes[12] = currency.charCodeAt(0) & MASK;
bytes[13] = currency.charCodeAt(1) & MASK;
bytes[14] = currency.charCodeAt(2) & MASK;
return Buffer.from(bytes).toString('hex');
}
function hashTx(txBlobHex) {
const prefix = HashPrefix_1.default.TRANSACTION_SIGN.toString(HEX).toUpperCase();
return (0, sha512Half_1.default)(prefix + txBlobHex);
}
exports.hashTx = hashTx;
function hashAccountRoot(address) {
return (0, sha512Half_1.default)(ledgerSpaceHex('account') + addressToHex(address));
}
exports.hashAccountRoot = hashAccountRoot;
function hashSignerListId(address) {
return (0, sha512Half_1.default)(`${ledgerSpaceHex('signerList') + addressToHex(address)}00000000`);
}
exports.hashSignerListId = hashSignerListId;
function hashOfferId(address, sequence) {
const hexPrefix = ledgerSpaces_1.default.offer
.charCodeAt(0)
.toString(HEX)
.padStart(2, '0');
const hexSequence = sequence.toString(HEX).padStart(8, '0');
const prefix = `00${hexPrefix}`;
return (0, sha512Half_1.default)(prefix + addressToHex(address) + hexSequence);
}
exports.hashOfferId = hashOfferId;
function hashTrustline(address1, address2, currency) {
const address1Hex = addressToHex(address1);
const address2Hex = addressToHex(address2);
const swap = new bignumber_js_1.default(address1Hex, 16).isGreaterThan(new bignumber_js_1.default(address2Hex, 16));
const lowAddressHex = swap ? address2Hex : address1Hex;
const highAddressHex = swap ? address1Hex : address2Hex;
const prefix = ledgerSpaceHex('rippleState');
return (0, sha512Half_1.default)(prefix + lowAddressHex + highAddressHex + currencyToHex(currency));
}
exports.hashTrustline = hashTrustline;
function hashEscrow(address, sequence) {
return (0, sha512Half_1.default)(ledgerSpaceHex('escrow') +
addressToHex(address) +
sequence.toString(HEX).padStart(BYTE_LENGTH * 2, '0'));
}
exports.hashEscrow = hashEscrow;
function hashPaymentChannel(address, dstAddress, sequence) {
return (0, sha512Half_1.default)(ledgerSpaceHex('paychan') +
addressToHex(address) +
addressToHex(dstAddress) +
sequence.toString(HEX).padStart(BYTE_LENGTH * 2, '0'));
}
exports.hashPaymentChannel = hashPaymentChannel;
//# sourceMappingURL=index.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/hashes/index.ts"],"names":[],"mappings":"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"}
+21
View File
@@ -0,0 +1,21 @@
declare const ledgerSpaces: {
account: string;
dirNode: string;
generatorMap: string;
rippleState: string;
offer: string;
ownerDir: string;
bookDir: string;
contract: string;
skipList: string;
escrow: string;
amendment: string;
feeSettings: string;
ticket: string;
signerList: string;
paychan: string;
check: string;
depositPreauth: string;
};
export default ledgerSpaces;
//# sourceMappingURL=ledgerSpaces.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"ledgerSpaces.d.ts","sourceRoot":"","sources":["../../../../src/utils/hashes/ledgerSpaces.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;CAqBjB,CAAA;AAED,eAAe,YAAY,CAAA"}
+23
View File
@@ -0,0 +1,23 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const ledgerSpaces = {
account: 'a',
dirNode: 'd',
generatorMap: 'g',
rippleState: 'r',
offer: 'o',
ownerDir: 'O',
bookDir: 'B',
contract: 'c',
skipList: 's',
escrow: 'u',
amendment: 'f',
feeSettings: 'e',
ticket: 'T',
signerList: 'S',
paychan: 'x',
check: 'C',
depositPreauth: 'p',
};
exports.default = ledgerSpaces;
//# sourceMappingURL=ledgerSpaces.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"ledgerSpaces.js","sourceRoot":"","sources":["../../../../src/utils/hashes/ledgerSpaces.ts"],"names":[],"mappings":";;AAUA,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,YAAY,EAAE,GAAG;IACjB,WAAW,EAAE,GAAG;IAEhB,KAAK,EAAE,GAAG;IAEV,QAAQ,EAAE,GAAG;IAEb,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,MAAM,EAAE,GAAG;IACX,SAAS,EAAE,GAAG;IACd,WAAW,EAAE,GAAG;IAChB,MAAM,EAAE,GAAG;IACX,UAAU,EAAE,GAAG;IACf,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,GAAG;IACV,cAAc,EAAE,GAAG;CACpB,CAAA;AAED,kBAAe,YAAY,CAAA"}
+3
View File
@@ -0,0 +1,3 @@
declare function sha512Half(hex: string): string;
export default sha512Half;
//# sourceMappingURL=sha512Half.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"sha512Half.d.ts","sourceRoot":"","sources":["../../../../src/utils/hashes/sha512Half.ts"],"names":[],"mappings":"AAUA,iBAAS,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMvC;AAED,eAAe,UAAU,CAAA"}
+13
View File
@@ -0,0 +1,13 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const crypto_1 = require("crypto");
const HASH_SIZE = 64;
function sha512Half(hex) {
return (0, crypto_1.createHash)('sha512')
.update(Buffer.from(hex, 'hex'))
.digest('hex')
.toUpperCase()
.slice(0, HASH_SIZE);
}
exports.default = sha512Half;
//# sourceMappingURL=sha512Half.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"sha512Half.js","sourceRoot":"","sources":["../../../../src/utils/hashes/sha512Half.ts"],"names":[],"mappings":";;AAAA,mCAAmC;AAEnC,MAAM,SAAS,GAAG,EAAE,CAAA;AAQpB,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC/B,MAAM,CAAC,KAAK,CAAC;SACb,WAAW,EAAE;SACb,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;AACxB,CAAC;AAED,kBAAe,UAAU,CAAA"}