UNPKG

@meterio/devkit

Version:

Typescript library to aid DApp development on Meter network

329 lines 24.2 kB
"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.RLP = void 0; const bignumber_js_1 = __importDefault(require("bignumber.js")); const rlp = __importStar(require("rlp")); 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, ''); const encoded = rlp.encode(packed); const hex = Buffer.from(encoded).toString('hex'); return Buffer.from(hex, 'hex'); } /** * 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.isBuffer(data), ctx, 'expected buffer'); return { encode() { return data; }, }; } buffer(buf, ctx) { return { decode() { return buf; }, }; } } RLP.BufferKind = BufferKind; class HexKind extends ScalarKind { data(data, ctx) { assert(typeof data === 'string', ctx, 'expected string: '); assert(isHexString(data) || isHexString2(data) || data === '', ctx, 'expected hex string: ' + data); const buf = data === '' ? Buffer.from('') : isHexString2(data) ? Buffer.from(data, 'hex') : Buffer.from(data.slice(2), 'hex'); return { encode() { return buf; }, }; } buffer(buf, ctx) { return { decode() { return '0x' + buf.toString('hex'); }, }; } } RLP.HexKind = HexKind; class TextKind extends ScalarKind { data(data, ctx) { assert(typeof data === 'string', ctx, 'expected string: '); const buf = Buffer.from(data); return { encode() { return buf; }, }; } buffer(buf, ctx) { return { decode() { return buf.toString(); }, }; } } RLP.TextKind = TextKind; /** 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.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.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.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.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.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; 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; 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; 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; if (kind instanceof RLP.ScalarKind) { if (packed instanceof Uint8Array) { const packedBuf = Buffer.from(packed); assert(Buffer.isBuffer(packedBuf), ctx, 'expected Buffer'); return kind.buffer(packedBuf, ctx).decode(); } assert(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; 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 isHexString2(str) { return /^[0-9a-f]*$/i.test(str); } function isDecString(str) { return /^[0-9]+$/.test(str); } class RLPError extends Error { constructor(msg) { super(msg); this.name = RLPError.name; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmxwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JscC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdFQUFxQztBQUNyQyx5Q0FBMkI7QUFFM0IsTUFBYSxHQUFHO0lBQ2QsWUFBcUIsT0FBb0I7UUFBcEIsWUFBTyxHQUFQLE9BQU8sQ0FBYTtJQUFHLENBQUM7SUFFN0M7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLElBQVM7UUFDckIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLEdBQVc7UUFDdkIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFVLENBQUMsQ0FBQztRQUN0QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ0Y7QUF0QkQsa0JBc0JDO0FBRUQsV0FBaUIsR0FBRztJQUNsQixnQ0FBZ0M7SUFDaEMsTUFBc0IsVUFBVTtLQUkvQjtJQUpxQixjQUFVLGFBSS9CLENBQUE7SUFFRCx3Q0FBd0M7SUFDeEMsTUFBYSxVQUFXLFNBQVEsVUFBVTtRQUNqQyxJQUFJLENBQUMsSUFBWSxFQUFFLEdBQVc7WUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxD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