UNPKG

dpos-offline

Version:

Offline Signing Transactions for DPOS Blockchains

115 lines (114 loc) 4.64 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; Object.defineProperty(exports, "__esModule", { value: true }); var ByteBuffer = require("bytebuffer"); var varuint = require("varuint-bitcoin"); var base_rise_1 = require("../base_rise"); var rise_address_1 = require("../rise_address"); var BaseRiseV2Codec = /** @class */ (function (_super) { __extends(BaseRiseV2Codec, _super); function BaseRiseV2Codec() { return _super !== null && _super.apply(this, arguments) || this; } BaseRiseV2Codec.prototype.calcBytes = function (tx) { var bb = new ByteBuffer(1024, true); function encodeVarUint(buf) { return Buffer.concat([varuint.encode(buf.length), buf]); } bb.writeUint8(tx.type); bb.writeUint32(tx.version); bb.writeUint32(tx.timestamp); bb.append(encodeVarUint(tx.senderPubData)); bb.append(encodeVarUint(tx.recipientId ? rise_address_1.RiseIdsHandler.addressToBytes(tx.recipientId) : Buffer.alloc(0))); // TODO: use some arbitrary precision lib to serialize it into a buff bb.writeUint64(parseInt(tx.amount, 10)); bb.writeUint64(parseInt(tx.fee, 10)); bb.append(encodeVarUint(this.assetBytes(tx))); bb.flip(); return new Buffer(bb.toBuffer()); }; BaseRiseV2Codec.prototype.fromBytes = function (buff) { var offset = 0; function readVarUint() { var length = varuint.decode(buff, offset); offset += varuint.decode.bytes; return readSlice(length); } function readUint8() { var toRet = buff.readUInt8(offset); offset += 1; return toRet; } function readUint32() { var toRet = buff.readUInt32LE(offset); offset += 4; return toRet; } function readUint64() { var _a = __read([ readUint32(), readUint32(), ], 2), second = _a[0], first = _a[1]; return first * Math.pow(2, 32) + second; } function readSlice(howMuch) { var toRet = buff.slice(offset, offset + howMuch); offset += howMuch; return toRet; } return __assign({ // tslint:disable object-literal-sort-keys id: rise_address_1.RiseIdsHandler.calcTxIdFromBytes(buff), type: readUint8(), version: readUint32(), timestamp: readUint32() }, (function () { var senderPubData = readVarUint(); return { senderId: rise_address_1.RiseIdsHandler.addressFromPubData(senderPubData), senderPubData: senderPubData, }; })(), { recipientId: rise_address_1.RiseIdsHandler.addressFromBytes(readVarUint()), amount: "" + readUint64(), fee: "" + readUint64(), asset: this.assetFromBytes(readVarUint()), signatures: (function () { return new Array(Math.floor((buff.length - offset) / 64)) .fill(null) .map(function () { return readSlice(64); }); })() }); }; return BaseRiseV2Codec; }(base_rise_1.BaseRiseCodec)); exports.BaseRiseV2Codec = BaseRiseV2Codec;