UNPKG

@planq-network/connect

Version:

Light Toolkit for connecting with the Planq network

226 lines 9.04 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.inputSignFormatter = exports.inputAddressFormatter = exports.outputBigNumberFormatter = exports.outputLogFormatter = exports.hexToNumber = exports.outputBlockFormatter = exports.outputBlockHeaderFormatter = exports.inputBlockNumberFormatter = exports.inputDefaultBlockNumberFormatter = exports.outputPlanqTxReceiptFormatter = exports.outputPlanqTxFormatter = exports.inputPlanqTxFormatter = void 0; var address_1 = require("@planq-network/base/lib/address"); var address_2 = require("@planq-network/utils/lib/address"); var solidity_1 = require("@planq-network/utils/lib/solidity"); var bignumber_js_1 = __importDefault(require("bignumber.js")); var utf8_1 = require("utf8"); /** * Formats the input of a transaction and converts all values to HEX */ function inputPlanqTxFormatter(tx) { var _a, _b, _c, _d; tx.from = inputAddressFormatter((_a = tx.from) === null || _a === void 0 ? void 0 : _a.toString()); tx.to = inputAddressFormatter(tx.to); if (tx.data) { tx.data = (0, address_1.ensureLeading0x)(tx.data); } if (tx.data && !isHex(tx.data)) { throw new Error("The data field must be HEX encoded data."); } tx.gas = numberToHex(tx.gas); tx.gasPrice = numberToHex((_b = tx.gasPrice) === null || _b === void 0 ? void 0 : _b.toString()); tx.value = numberToHex((_c = tx.value) === null || _c === void 0 ? void 0 : _c.toString()); // @ts-ignore - nonce is defined as number, but uses as string (web3) tx.nonce = numberToHex((_d = tx.nonce) === null || _d === void 0 ? void 0 : _d.toString()); // @ts-ignore - prune undefines Object.keys(tx).forEach(function (key) { return tx[key] === undefined && delete tx[key]; }); return tx; } exports.inputPlanqTxFormatter = inputPlanqTxFormatter; function outputPlanqTxFormatter(tx) { if (tx.blockNumber !== null) { tx.blockNumber = hexToNumber(tx.blockNumber); } if (tx.transactionIndex !== null) { tx.transactionIndex = hexToNumber(tx.transactionIndex); } tx.nonce = hexToNumber(tx.nonce); tx.gas = hexToNumber(tx.gas); tx.gasPrice = outputBigNumberFormatter(tx.gasPrice); tx.value = outputBigNumberFormatter(tx.value); tx.to = tx.to && (0, address_2.isValidAddress)(tx.to) ? // tx.to could be `0x0` or `null` while contract creation (tx.to = (0, address_2.toChecksumAddress)(tx.to)) : null; // set to `null` if invalid address if (tx.from) { tx.from = (0, address_2.toChecksumAddress)(tx.from); } return tx; } exports.outputPlanqTxFormatter = outputPlanqTxFormatter; function outputPlanqTxReceiptFormatter(receipt) { if (typeof receipt !== "object") { throw new Error("Received receipt is invalid: " + receipt); } if (receipt.blockNumber !== null) { receipt.blockNumber = hexToNumber(receipt.blockNumber); } if (receipt.transactionIndex !== null) { receipt.transactionIndex = hexToNumber(receipt.transactionIndex); } receipt.cumulativeGasUsed = hexToNumber(receipt.cumulativeGasUsed); receipt.gasUsed = hexToNumber(receipt.gasUsed); if (Array.isArray(receipt.logs)) { receipt.logs = receipt.logs.map(outputLogFormatter); } if (receipt.contractAddress) { receipt.contractAddress = (0, address_2.toChecksumAddress)(receipt.contractAddress); } if (typeof receipt.status !== "undefined" && receipt.status !== null) { receipt.status = Boolean(parseInt((0, address_1.trimLeading0x)(receipt.status), 10)); } return receipt; } exports.outputPlanqTxReceiptFormatter = outputPlanqTxReceiptFormatter; function inputDefaultBlockNumberFormatter(blockNumber) { if (blockNumber == null) { blockNumber = "latest"; } return inputBlockNumberFormatter(blockNumber); } exports.inputDefaultBlockNumberFormatter = inputDefaultBlockNumberFormatter; function inputBlockNumberFormatter(blockNumber) { if (blockNumber == null) { return undefined; } if (isPredefinedBlockNumber(blockNumber)) { return blockNumber; } if (blockNumber === "genesis") { return "0x0"; } return isHexStrict(blockNumber.toString()) ? blockNumber.toString().toLocaleLowerCase() : numberToHex(blockNumber.toString()); } exports.inputBlockNumberFormatter = inputBlockNumberFormatter; function outputBlockHeaderFormatter(blockHeader) { // transform to number blockHeader.gasLimit = hexToNumber(blockHeader.gasLimit); blockHeader.gasUsed = hexToNumber(blockHeader.gasUsed); blockHeader.size = hexToNumber(blockHeader.size); blockHeader.timestamp = hexToNumber(blockHeader.timestamp); if (blockHeader.number !== null) { blockHeader.number = hexToNumber(blockHeader.number); } if (blockHeader.miner) { blockHeader.miner = (0, address_2.toChecksumAddress)(blockHeader.miner); } return blockHeader; } exports.outputBlockHeaderFormatter = outputBlockHeaderFormatter; function outputBlockFormatter(block) { block = outputBlockHeaderFormatter(block); if (block.difficulty) { block.difficulty = outputBigNumberFormatter(block.difficulty); } if (block.totalDifficulty) { block.totalDifficulty = outputBigNumberFormatter(block.totalDifficulty); } if (Array.isArray(block.transactions)) { block.transactions.forEach(function (item) { if (typeof item !== "string" && !(item instanceof String)) { return outputPlanqTxFormatter(item); } }); } return block; } exports.outputBlockFormatter = outputBlockFormatter; function hexToNumber(hex) { if (hex) { return new bignumber_js_1.default(hex).toNumber(); } return undefined; } exports.hexToNumber = hexToNumber; function outputLogFormatter(log) { // generate a custom log id if (typeof log.blockHash === "string" && typeof log.transactionHash === "string" && typeof log.logIndex === "string") { var shaId = (0, solidity_1.sha3)((0, address_1.trimLeading0x)(log.blockHash) + (0, address_1.trimLeading0x)(log.transactionHash) + (0, address_1.trimLeading0x)(log.logIndex)); log.id = "log_" + (0, address_1.trimLeading0x)(shaId).substring(0, 8); } else if (!log.id) { log.id = null; } if (log.blockNumber !== null) { log.blockNumber = hexToNumber(log.blockNumber); } if (log.transactionIndex !== null) { log.transactionIndex = hexToNumber(log.transactionIndex); } if (log.logIndex !== null) { log.logIndex = hexToNumber(log.logIndex); } if (log.address) { log.address = (0, address_2.toChecksumAddress)(log.address); } return log; } exports.outputLogFormatter = outputLogFormatter; function outputBigNumberFormatter(hex) { return new bignumber_js_1.default(hex).toString(10); } exports.outputBigNumberFormatter = outputBigNumberFormatter; function inputAddressFormatter(address) { if (!address || address === "0x") { return undefined; } if ((0, address_2.isValidAddress)(address)) { return (0, address_1.ensureLeading0x)(address).toLocaleLowerCase(); } throw new Error("Provided address ".concat(address, " is invalid, the capitalization checksum test failed")); } exports.inputAddressFormatter = inputAddressFormatter; function inputSignFormatter(data) { return isHexStrict(data) ? data : utf8ToHex(data); } exports.inputSignFormatter = inputSignFormatter; function utf8ToHex(str) { str = (0, utf8_1.encode)(str); var hex = ""; // remove \u0000 padding from either side str = str.replace(/^(?:\u0000)*/, ""); str = str.split("").reverse().join(""); str = str.replace(/^(?:\u0000)*/, ""); str = str.split("").reverse().join(""); for (var i = 0; i < str.length; i++) { var code = str.charCodeAt(i); // if (code !== 0) { var n = code.toString(16); hex += n.length < 2 ? "0" + n : n; // } } return (0, address_1.ensureLeading0x)(hex); } function isHex(hex) { return /^(-0x|0x)?[0-9a-f]*$/i.test(hex); } function isHexStrict(hex) { return /^(-)?0x[0-9a-f]*$/i.test(hex); } function numberToHex(value) { if (value) { var numberValue = new bignumber_js_1.default(value); var result = (0, address_1.ensureLeading0x)(new bignumber_js_1.default(value).toString(16)); // Seen in web3, copied just in case return numberValue.lt(new bignumber_js_1.default(0)) ? "-".concat(result) : result; } return undefined; } function isPredefinedBlockNumber(blockNumber) { return (blockNumber === "latest" || blockNumber === "pending" || blockNumber === "earliest"); } //# sourceMappingURL=formatter.js.map