UNPKG

xrpl

Version:

A TypeScript/JavaScript API for interacting with the XRP Ledger in Node.js and the browser

71 lines (63 loc) 1.98 kB
import { XrplError } from '../../../errors' import HashPrefix from '../HashPrefix' import sha512Half from '../sha512Half' import { NodeType, Node } from './node' const HEX = 16 /** * Class for SHAMap Leaf Node. */ class LeafNode extends Node { public tag: string public type: NodeType public data: string /** * Leaf node in a SHAMap tree. * * @param tag - Equates to a ledger entry `index`. * @param data - Hex of account state, transaction etc. * @param type - One of TYPE_ACCOUNT_STATE, TYPE_TRANSACTION_MD etc. */ public constructor(tag: string, data: string, type: NodeType) { super() this.tag = tag this.type = type this.data = data } /** * Get the hash of a LeafNode. * * @returns Hash or undefined. * @throws If node is of unknown type. */ public get hash(): string { // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- TODO: https://github.com/XRPLF/xrpl.js/issues/3060 switch (this.type) { case NodeType.ACCOUNT_STATE: { const leafPrefix = HashPrefix.LEAF_NODE.toString(HEX) return sha512Half(leafPrefix + this.data + this.tag) } case NodeType.TRANSACTION_NO_METADATA: { const txIDPrefix = HashPrefix.TRANSACTION_ID.toString(HEX) return sha512Half(txIDPrefix + this.data) } case NodeType.TRANSACTION_METADATA: { const txNodePrefix = HashPrefix.TRANSACTION_NODE.toString(HEX) return sha512Half(txNodePrefix + this.data + this.tag) } default: throw new XrplError('Tried to hash a SHAMap node of unknown type.') } } /** * Add item to Leaf. * * @param tag - Index of the Node. * @param node - Node to insert. * @throws When called, because LeafNodes cannot addItem. */ public addItem(tag: string, node: Node): void { throw new XrplError('Cannot call addItem on a LeafNode') this.addItem(tag, node) } } export default LeafNode