@meterio/devkit
Version:
Typescript library to aid DApp development on Meter network
329 lines • 24.2 kB
JavaScript
;
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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