UNPKG

thor-devkit

Version:

Typescript library to aid DApp development on VeChain Thor

261 lines 20 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (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.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.RLP = void 0; const bignumber_js_1 = __importDefault(require("bignumber.js")); const rlp = __importStar(require("rlp")); const buffer_1 = require("buffer"); class RLP { constructor(profile) { this.profile = profile; } /** * encode data according to profile * @param data the structured data to be encoded */ encode(data) { const packed = pack(data, this.profile, ''); return rlp.encode(packed); } /** * decode buffer according to profile * @param buf rlp encoded data */ decode(buf) { const packed = rlp.decode(buf); return unpack(packed, this.profile, ''); } } exports.RLP = RLP; (function (RLP) { /** base class of scalar kind */ class ScalarKind { } RLP.ScalarKind = ScalarKind; /** a buffer kind to keep buffer type */ class BufferKind extends ScalarKind { data(data, ctx) { assert(buffer_1.Buffer.isBuffer(data), ctx, 'expected buffer'); return { encode() { return data; } }; } buffer(buf, ctx) { return { decode() { return buf; } }; } } RLP.BufferKind = BufferKind; /** a scalar kind to presents number */ class NumericKind extends ScalarKind { /** * create a numeric kind * @param maxBytes up limit of data in bytes */ constructor(maxBytes) { super(); this.maxBytes = maxBytes; } data(data, ctx) { assert(typeof data === 'string' || typeof data === 'number', ctx, 'expected string or number'); if (typeof data === 'string') { const isHex = isHexString(data); const isDec = isDecString(data); assert(isHex || isDec, ctx, 'expected non-negative integer in hex or dec string'); if (isHex) { assert(data.length > 2, ctx, 'expected valid hex string'); } } else { assert(Number.isSafeInteger(data) && data >= 0, ctx, 'expected non-negative safe integer'); } const bn = new bignumber_js_1.default(data); if (bn.isZero()) { return { encode() { return buffer_1.Buffer.alloc(0); } }; } let hex = bn.toString(16); if (hex.length % 2 !== 0) { hex = '0' + hex; } assert(this.maxBytes ? hex.length <= this.maxBytes * 2 : true, ctx, `expected number in ${this.maxBytes} bytes`); return { encode() { return buffer_1.Buffer.from(hex, 'hex'); } }; } buffer(buf, ctx) { assert(this.maxBytes ? buf.length <= this.maxBytes : true, ctx, `expected less than ${this.maxBytes} bytes`); assert(buf.length === 0 || buf[0] !== 0, ctx, `expected canonical integer (no leading zero bytes)`); return { decode() { if (buf.length === 0) { return 0; } const bn = new bignumber_js_1.default(buf.toString('hex'), 16); const num = bn.toNumber(); return Number.isSafeInteger(num) ? num : '0x' + bn.toString(16); } }; } } RLP.NumericKind = NumericKind; /** a scalar kind to present blob */ class BlobKind extends ScalarKind { data(data, ctx) { assert(isHexString(data), ctx, 'expected hex string'); assert(data.length % 2 === 0, ctx, 'expected even length hex'); return { encode() { return buffer_1.Buffer.from(data.slice(2), 'hex'); } }; } buffer(buf, ctx) { return { decode() { return '0x' + buf.toString('hex'); } }; } } RLP.BlobKind = BlobKind; /** fixed length blob */ class FixedBlobKind extends BlobKind { constructor(bytes) { super(); this.bytes = bytes; } data(data, ctx) { const encoder = super.data(data, ctx); assert(data.length === this.bytes * 2 + 2, ctx, `expected hex string presents ${this.bytes} bytes`); return encoder; } buffer(buf, ctx) { const decoder = super.buffer(buf, ctx); assert(buf.length === this.bytes, ctx, `expected ${this.bytes} bytes`); return decoder; } } RLP.FixedBlobKind = FixedBlobKind; /** fixed length blob allowing null */ class NullableFixedBlobKind extends FixedBlobKind { data(data, ctx) { if (!data) { return { encode() { return buffer_1.Buffer.alloc(0); } }; } return super.data(data, ctx); } buffer(buf, ctx) { if (buf.length === 0) { return { decode() { return null; } }; } return super.buffer(buf, ctx); } } RLP.NullableFixedBlobKind = NullableFixedBlobKind; /** fixed length blob kind that will remove leading zero on encoding and pad zero on decoding */ class CompactFixedBlobKind extends FixedBlobKind { data(data, ctx) { const buf = super.data(data, ctx).encode(); return { encode() { const nzIndex = buf.findIndex(v => v !== 0); if (nzIndex >= 0) { return buf.slice(nzIndex); } return buffer_1.Buffer.alloc(0); } }; } buffer(buf, ctx) { assert(buf.length <= this.bytes, ctx, `expected less than ${this.bytes} bytes`); assert(buf.length === 0 || buf[0] !== 0, ctx, `expected no leading zero bytes`); const bytes = this.bytes; return { decode() { const zeros = '0'.repeat((bytes - buf.length) * 2); return '0x' + zeros + buf.toString('hex'); } }; } } RLP.CompactFixedBlobKind = CompactFixedBlobKind; })(RLP = exports.RLP || (exports.RLP = {})); function pack(obj, profile, ctx) { ctx = ctx ? ctx + '.' + profile.name : profile.name; const kind = profile.kind; if (kind instanceof RLP.ScalarKind) { return kind.data(obj, ctx).encode(); } if (Array.isArray(kind)) { return kind.map(k => pack(obj[k.name], k, ctx)); } assert(Array.isArray(obj), ctx, 'expected array'); const item = kind.item; return obj.map((part, i) => pack(part, { name: '#' + i, kind: item }, ctx)); } function unpack(packed, profile, ctx) { ctx = ctx ? ctx + '.' + profile.name : profile.name; const kind = profile.kind; if (kind instanceof RLP.ScalarKind) { assert(buffer_1.Buffer.isBuffer(packed), ctx, 'expected Buffer'); return kind.buffer(packed, ctx).decode(); } if (Array.isArray(kind)) { assert(Array.isArray(packed), ctx, 'expected array'); const parts = packed; assert(parts.length === kind.length, ctx, `expected ${kind.length} items, but got ${parts.length}`); return kind.reduce((o, p, i) => { o[p.name] = unpack(parts[i], p, ctx); return o; }, {}); } assert(Array.isArray(packed), ctx, 'expected array'); const item = kind.item; return packed.map((part, i) => unpack(part, { name: '#' + i, kind: item }, ctx)); } function assert(cond, ctx, msg) { if (!cond) { throw new RLPError(`${ctx}: ${msg}`); } } function isHexString(str) { return /^0x[0-9a-f]*$/i.test(str); } function isDecString(str) { return /^\d+$/.test(str); } class RLPError extends Error { constructor(msg) { super(msg); this.name = RLPError.name; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmxwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JscC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0VBQW9DO0FBQ3BDLHlDQUEwQjtBQUMxQixtQ0FBK0I7QUFFL0IsTUFBYSxHQUFHO0lBQ1osWUFBcUIsT0FBb0I7UUFBcEIsWUFBTyxHQUFQLE9BQU8sQ0FBYTtJQUFJLENBQUM7SUFFOUM7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLElBQVM7UUFDbkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQzNDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQWtCLENBQUE7SUFDOUMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxHQUFXO1FBQ3JCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBVSxDQUFDLENBQUE7UUFDckMsT0FBTyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDM0MsQ0FBQztDQUNKO0FBcEJELGtCQW9CQztBQUVELFdBQWlCLEdBQUc7SUFDaEIsZ0NBQWdDO0lBQ2hDLE1BQXNCLFVBQVU7S0FHL0I7SUFIcUIsY0FBVSxhQUcvQixDQUFBO0lBRUQsd0NBQXdDO0lBQ3hDLE1BQWEsVUFBVyxTQUFRLFVBQVU7UUFDL0IsSUFBSSxDQUFDLElBQVksRUFBRSxHQUFXO1lBQ2pDLE1BQU0sQ0FBQyxlQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO1lBQ3JELE9BQU8sRUFBRSxNQUFNLEtBQUssT0FBTyxJQUFJLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUN2QyxDQUFDO1FBQ00sTUFBTSxDQUFDLEdBQVcsRUFBRSxHQUFX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