UNPKG

@findeth/abi

Version:

A tiny Solidity ABI encoder and decoder

63 lines (47 loc) 1.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.number = exports.asNumber = exports.isSigned = void 0; var _utils = require("../utils"); const NUMBER_REGEX = /^u?int([0-9]*)?$/; const isSigned = type => { return !type.startsWith('u'); }; exports.isSigned = isSigned; const asNumber = value => { if (typeof value === 'bigint') { return value; } return BigInt(value); }; exports.asNumber = asNumber; const number = { isDynamic: false, isType(type) { return NUMBER_REGEX.test(type); }, encode({ type, buffer, value }) { const number = asNumber(value); if (isSigned(type)) { return (0, _utils.concat)([buffer, (0, _utils.toTwosComplement)(number, 32)]); } return (0, _utils.concat)([buffer, (0, _utils.toBuffer)(number)]); }, decode({ type, value }) { const buffer = value.slice(0, 32); if (isSigned(type)) { return (0, _utils.fromTwosComplement)(buffer); } return (0, _utils.toNumber)(buffer); } }; exports.number = number; //# sourceMappingURL=number.js.map