{"version":3,"sources":["jsdelivr-header.js","/npm/eth4you@2.0.4/eth4you.js"],"names":[],"mappings":"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","file":"/npm/eth4you@2.0.4/eth4you.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/eth4you@2.0.4/eth4you.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const bip39 = require('bip39');\nconst EC = require('elliptic').ec;\nconst ec = new EC('secp256k1');\n\nconst { stripHexPrefix, isHexString, toUtf8, fromUtf8, unpadHexString, fromRpcSig, toRpcSig, ecrecover, toBuffer, publicToAddress, bufferToHex, hashPersonalMessage, ecsign, rlp, keccak256, pubToAddress, isValidPrivate } = require('ethereumjs-util');\n\nconst sha3 = require(\"./misc/sha3\");\n\nconst randomBytes = require('randombytes/browser');\n\nconst CryptoJS = require('crypto-js');\nconst hasher = CryptoJS.algo.SHA256.create();\n\nconst scrypt = require('./misc/scrypt');\nconst utils = require('./misc/utils');\n\nconst uuidv4 = require('uuidv4').default;\n\nconst { BigNumber } = require('bignumber.js');\n\nconst Units = require('ethereumjs-units');\n\nconst { default: Common, Hardfork } = require('@ethereumjs/common');\n\nconst encryptMessage = require(\"./functions/encryptMessage\");\nconst decryptMessage = require(\"./functions/decryptMessage\");\n\nconst { TransactionFactory } = require('@ethereumjs/tx');\n\nconst HDWallet = require('ethereum-hdwallet')\n\nfunction isChainCompatibleEIP1559(chainId) {\n\tif (chainId == \"ropsten\" || chainId == 3) {\n\t\treturn true;\n\t}\n\tif (chainId == \"rinkeby\" || chainId == 4) {\n\t\treturn true;\n\t}\n\tif (chainId == \"goerli\" || chainId == 5) {\n\t\treturn true;\n\t}\n\tif (chainId == \"mainnet\" || chainId == 1) {\n\t\treturn true;\n\t}\n\tif (chainId == \"fantom\" || chainId == 250) {\n\t\treturn true;\n\t}\n\tif (chainId == \"polygon\" || chainId == 137) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction generateCompatibleRawTx(rawTx, chainId) {\n\tlet compatibleRawTx = { ...rawTx };\n\n\tcompatibleRawTx.gasLimit = `0x${new BigNumber(compatibleRawTx.gasLimit || compatibleRawTx.gas || \"\").toString(16)}`;\n\tcompatibleRawTx.value = `0x${new BigNumber(compatibleRawTx.value || compatibleRawTx.rawNativeValue || '0').toString(16)}`;\n\tcompatibleRawTx.data = compatibleRawTx.data || compatibleRawTx.input || \"0x\";\n\n\tif (isChainCompatibleEIP1559(chainId)) {\n\t\tcompatibleRawTx.accessList = compatibleRawTx.accessList || [];\n\t\tcompatibleRawTx.type = compatibleRawTx.type || \"0x02\";\n\t\tcompatibleRawTx.maxPriorityFeePerGas = `0x${new BigNumber(compatibleRawTx.maxPriorityFeePerGas || compatibleRawTx.gasPrice || \"\").toString(16)}`;\n\t\tcompatibleRawTx.maxFeePerGas = `0x${new BigNumber(compatibleRawTx.maxFeePerGas || compatibleRawTx.gasPrice || \"\").toString(16)}`;\n\t\t// rawTx.gasLimit = `0x${new BigNumber(rawTx.gasLimit || rawTx.gas || \"\").toString(16)}`;\n\t\t// rawTx.value = `0x${new BigNumber(rawTx.value || \"0\").toString(16)}`;\n\t\t// rawTx.data = rawTx.data || rawTx.input || \"0x\";\n\t\tdelete compatibleRawTx.gasPrice;\n\t}\n\n\tdelete compatibleRawTx.normalValue;\n\tdelete compatibleRawTx.customChain;\n\n\treturn compatibleRawTx;\n}\n\nexports.generateCompatibleRawTx = generateCompatibleRawTx;\n\nconst customConfig = (id, name, testnet = false) => {\n\tlet baseChain = 'mainnet';\n\tif (testnet) {\n\t\tbaseChain = id === 5 ? 'goerli' : (id === 4 ? 'rinkeby' : 'ropsten');\n\t}\n\treturn Common.custom(\n\t\t{\n\t\t\tname,\n\t\t\tnetworkId: id,\n\t\t\tchainId: id,\n\t\t\tdefaultHardfork: isChainCompatibleEIP1559(id) ? Hardfork.London : Hardfork.Istanbul\n\t\t}, {\n\t\tbaseChain,\n\t})\n};\n//let __tokens = require('./tokens');\n// let ens = require('./ens.js');\n\nconst toHex = function (str) {\n\tlet hex = '';\n\tfor (let i = 0; i < str.length; i++)\n\t\thex += '' + str.charCodeAt(i).toString(16);\n\treturn hex;\n}\n\nconst decimalToHex = function (dec) {\n\treturn new BigNumber(dec).toString(16);\n}\n\nexports.decimalToHex = decimalToHex\n\nconst wei2ether = '1000000000000000000';\n\nexports.randomBytes = randomBytes;\nexports.toUtf8 = toUtf8;\nexports.sha3 = sha3;\nexports.sha256 = CryptoJS.SHA256;\nexports.ripemd160 = CryptoJS.RIPEMD160;\nexports.CryptoJS = CryptoJS;\n// exports.ens = ens;\nexports.uuid = uuidv4;\n\nexports.uccs = {\n\t'ETH': {\n\t\tpath: [\"m/44'/60'/0'/0\", \"m/44'/60'/0'\", \"m/44'/60'/0\"]\n\t},\n\t'ETHTEST': {\n\t\tpath: [\"m/44'/1'/0'/0\", \"m/44'/1'/0'\", \"m/44'/1'/0\"]\n\t},\n\t'EIDOODEV': {\n\t\tpath: [\"m/44'/1'/0'/0\", \"m/44'/1'/0'\", \"m/44'/1'/0\"]\n\t},\n\t'NOKU_CHAIN': {\n\t\tpath: [\"m/44'/60'/0'/0\", \"m/44'/60'/0'\", \"m/44'/60'/0\"]\n\t},\n\t'NOKU_CHAINTEST': {\n\t\tpath: [\"m/44'/60'/0'/0\", \"m/44'/60'/0'\", \"m/44'/60'/0\"]\n\t},\n\t'SWISS_LEDGER': {\n\t\tpath: [\"m/44'/60'/0'/0\", \"m/44'/60'/0'\", \"m/44'/60'/0\"]\n\t},\n\t'SWISS_LEDGER_TEST': {\n\t\tpath: [\"m/44'/60'/0'/0\", \"m/44'/60'/0'\", \"m/44'/60'/0\"]\n\t},\n\t'LUXO_CHAIN': {\n\t\tpath: [\"m/44'/60'/0'/0\", \"m/44'/60'/0'\", \"m/44'/60'/0\"]\n\t},\n\t'LUXO_CHAINTEST': {\n\t\tpath: [\"m/44'/60'/0'/0\", \"m/44'/60'/0'\", \"m/44'/60'/0\"]\n\t},\n\t'NOKU_CHAIN2': {\n\t\tpath: [\"m/44'/60'/0'/0\", \"m/44'/60'/0'\", \"m/44'/60'/0\"]\n\t},\n\t'NOKU_CHAIN2TEST': {\n\t\tpath: [\"m/44'/60'/0'/0\", \"m/44'/60'/0'\", \"m/44'/60'/0\"]\n\t},\n\t'FANTOM': {\n\t\tpath: [\"m/44'/60'/0'/0\", \"m/44'/60'/0'\", \"m/44'/60'/0\"]\n\t},\n\t'BSC': {\n\t\tpath: [\"m/44'/60'/0'/0\", \"m/44'/60'/0'\", \"m/44'/60'/0\"]\n\t},\n\t'BSC_TEST': {\n\t\tpath: [\"m/44'/60'/0'/0\", \"m/44'/60'/0'\", \"m/44'/60'/0\"]\n\t},\n\t'ROPSTEN': {\n\t\tpath: [\"m/44'/1'/0'/0\", \"m/44'/1'/0'\", \"m/44'/1'/0\"]\n\t},\n\t'RINKEBY': {\n\t\tpath: [\"m/44'/1'/0'/0\", \"m/44'/1'/0'\", \"m/44'/1'/0\"]\n\t},\n\t'GOERLI': {\n\t\tpath: [\"m/44'/1'/0'/0\", \"m/44'/1'/0'\", \"m/44'/1'/0\"]\n\t},\n\t'POLYGON': {\n\t\tpath: [\"m/44'/60'/0'/0\", \"m/44'/60'/0'\", \"m/44'/60'/0\"]\n\t},\n\t'OPTIMISM': {\n\t\tpath: [\"m/44'/60'/0'/0\", \"m/44'/60'/0'\", \"m/44'/60'/0\"]\n\t},\n\t'BTC': {\n\t\tpath: \"m/44'/0'/0'/0\",\n\t\tk58: \"80\",\n\t\tp58: \"00\",\n\t\ts58: \"05\",\n\t\tp32: \"bc1\"\n\t},\n\t'LTC': {\n\t\tpath: \"m/44'/2'/0'/0\",\n\t\tk58: \"b0\",\n\t\tp58: \"30\",\n\t\ts58: \"32\",\n\t\tp32: \"ltc1\"\n\t},\n\t'DOGE': {\n\t\tpath: \"m/44'/3'/0'/0\",\n\t\tk58: \"9e\",\n\t\tp58: \"1e\"\n\t},\n\t'DASH': {\n\t\tpath: \"m/44'/5'/0'/0\",\n\t\tk58: \"cc\",\n\t\tp58: \"4c\"\n\t},\n\t'PPC': {\n\t\tpath: \"m/44'/6'/0'/0\",\n\t\tk58: \"b7\",\n\t\tp58: \"37\"\n\t},\n\t'DCR': {\n\t\tpath: \"m/44'/42'/0'/0\",\n\t\tk58: \"22de00\",\n\t\tp58: \"073f\",\n\t\tblake: 1\n\t},\n\t'ZEC': {\n\t\tpath: \"m/44'/133'/0'/0\",\n\t\tk58: \"80\",\n\t\tp58: \"1cb8\"\n\t},\n\t'BCH': {\n\t\tpath: \"m/44'/145'/0'/0\",\n\t\tk58: \"80\",\n\t\tp32: \"bitcoincash:\"\n\t},\n\t'BTG': {\n\t\tpath: \"m/44'/156'/0'/0\",\n\t\tk58: \"80\",\n\t\tp58: \"26\"\n\t},\n\t'EOS': {\n\t\tpath: \"m/44'/194'/0'/0\",\n\t\tp58: \"EOS\",\n\t\tnohash: 1\n\t},\n\t'QTUM': {\n\t\tpath: \"m/44'/2301'/0'/0\",\n\t\tk58: \"80\",\n\t\tp58: \"3a\"\n\t},\n\t'RVN': {\n\t\tpath: \"m/44'/1'/0'/0\",\n\t\tk58: \"80\",\n\t\tp58: \"3c\"\n\t},\n\n\t'BTCTEST': {\n\t\tpath: \"m/44'/1'/0'/0\",\n\t\tk58: \"ef\",\n\t\tp58: \"6f\",\n\t\ts58: \"c4\",\n\t\tp32: \"tb1\"\n\t},\n\t'LTCTEST': {\n\t\tpath: \"m/44'/1'/0'/0\",\n\t\tk58: \"ef\",\n\t\tp58: \"6f\",\n\t\ts58: \"3a\",\n\t\tp32: \"tltc1\"\n\t},\n\t'BCHTEST': {\n\t\tpath: \"m/44'/1'/0'/0\",\n\t\tk58: \"ef\",\n\t\tp32: \"bchtest:\"\n\t},\n\t'PPCTEST': {\n\t\tpath: \"m/44'/1'/0'/0\",\n\t\tk58: \"ef\",\n\t\tp58: \"6f\"\n\t},\n\t'BTGTEST': {\n\t\tpath: \"m/44'/1'/0'/0\",\n\t\tk58: \"ef\",\n\t\tp58: \"6f\"\n\t},\n\t'ZECTEST': {\n\t\tpath: \"m/44'/1'/0'/0\",\n\t\tk58: \"ef\",\n\t\tp58: \"1d25\"\n\t},\n\t'DASHTEST': {\n\t\tpath: \"m/44'/1'/0'/0\",\n\t\tk58: \"ef\",\n\t\tp58: \"8c\"\n\t},\n\t'DOGETEST': {\n\t\tpath: \"m/44'/1'/0'/0\",\n\t\tk58: \"f1\",\n\t\tp58: \"71\"\n\t},\n\t'DCRTEST': {\n\t\tpath: \"m/44'/1'/0'/0\",\n\t\tk58: \"230700\",\n\t\tp58: \"0f21\",\n\t\tblake: 1\n\t},\n\t'QTUMTEST': {\n\t\tpath: \"m/44'/1'/0'/0\",\n\t\tk58: \"ef\",\n\t\tp58: \"78\"\n\t},\n\n\t'RVNTEST': {\n\t\tpath: \"m/44'/1'/0'/0\",\n\t\tk58: \"ef\",\n\t\tp58: \"6f\"\n\t},\n};\n\nfunction getChainIdFromName(_chain) {\n\tconst chain = typeof _chain === \"string\" ? _chain.toLowerCase() : _chain;\n\n\tif (chain == \"eth\" || chain == 1) {\n\t\treturn 1;\n\t} else if (chain == \"ropsten\" || chain == 3) {\n\t\treturn 3;\n\t} else if (chain == \"rinkeby\" || chain == 4) {\n\t\treturn 4;\n\t} else if (chain == \"goerli\" || chain == 5) {\n\t\treturn 5;\n\t} else if (chain == \"eidoodev\" || chain == 8995) {\n\t\treturn 8995;\n\t} else if (chain == \"swissledgertest\" || chain == \"swissledger\" || chain == 222) {\n\t\treturn 222;\n\t} else if (chain == \"nokuchaintest\" || chain == \"noku_chaintest\" || chain == 222) {\n\t\treturn 222;\n\t} else if (chain == \"nokuchain\" || chain == \"noku_chain\" || chain == 110) {\n\t\treturn 110;\n\t} else if (chain == \"nokuchain2test\" || chain == \"noku_chain2test\" || chain == 333) {\n\t\treturn 333;\n\t} else if (chain == \"nokuchain2\" || chain == \"noku_chain2\" || chain == 888) {\n\t\treturn 888;\n\t} else if (chain == \"bsc\" || chain == 56) {\n\t\treturn 56;\n\t} else if (chain == \"fantom\" || chain == 250) {\n\t\treturn 250;\n\t} else if (chain == \"polygon\" || chain == 137) {\n\t\treturn 137;\n\t} else if (chain == \"optimism\" || chain == 10) {\n\t\treturn 10;\n\t}\n\n\treturn _chain;\n}\n\nexports.getChainIdFromName = getChainIdFromName;\n\nfunction getOptsEthereumTx(chainId, customChain) {\n\tlet opts = {};\n\n\tif (getChainIdFromName(chainId) == 3) {\n\t\topts.common = customConfig(3, \"ropsten\", true);\n\t} else if (getChainIdFromName(chainId) == 4) {\n\t\topts.common = customConfig(4, \"rinkeby\", true);\n\t} else if (getChainIdFromName(chainId) == 5) {\n\t\topts.common = customConfig(5, \"goerli\", true);\n\t} else if (getChainIdFromName(chainId) == 8995) {\n\t\topts.common = customConfig(8995, \"eidoodev\", true);\n\t} else if (getChainIdFromName(chainId) == 222) {\n\t\topts.common = customConfig(222, \"nokuchaintest\", true);\n\t} else if (getChainIdFromName(chainId) == 110) {\n\t\topts.common = customConfig(110, \"nokuchain\", true);\n\t} else if (getChainIdFromName(chainId) == 333) {\n\t\topts.common = customConfig(333, \"nokuchain2test\", true);\n\t} else if (getChainIdFromName(chainId) == 888) {\n\t\topts.common = customConfig(888, \"nokuchain2\", true);\n\t} else if (chainId == \"bsc\" || chainId == 56) {\n\t\topts.common = customConfig(56, \"bsc\", false);\n\t} else if (getChainIdFromName(chainId) == 250) {\n\t\topts.common = customConfig(250, \"fantom\", false);\n\t} else if (getChainIdFromName(chainId) == 137) {\n\t\topts.common = customConfig(137, \"polygon\", false);\n\t} else if (getChainIdFromName(chainId) == 10) {\n\t\topts.common = customConfig(10, \"optimism\", false);\n\t} else if (customChain && typeof customChain === \"object\") {\n\t\tif (isNaN(chainId)) {\n\t\t\tthrow \"chainId must be int\";\n\t\t}\n\t\tchainId = parseInt(chainId);\n\t\topts.common = customConfig(chainId, customChain.name, customChain.testnet);\n\t} else {\n\t\tif (!isNaN(chainId)) {\n\t\t\tchainId = parseInt(chainId);\n\t\t}\n\t\topts.chain = chainId || 1;\n\t}\n\n\treturn opts;\n}\n\nexports.Buffer = Buffer;\nlet outputFormat = {\n\tdecimalSeparator: '.',\n\tgroupSeparator: ',',\n\tgroupSize: 3\n};\nlet inputFormat = {\n\tdecimalSeparator: '.',\n\tgroupSeparator: ',',\n\tgroupSize: 3\n};\n//let inputFormat = { decimalSeparator: '.'};\n\nBigNumber.config({\n\tFORMAT: outputFormat\n});\n\nexports.formatInputString = function (value) {\n\tlet result = fromUtf8(value).substr(2);\n\tlet length = result.length / 2;\n\tlet l = Math.floor((result.length + 63) / 64);\n\tresult = utils.padRight(result, l * 64);\n\tresult = padLeft((new BigNumber((String(length))).toString(16)), 64) + result;\n\treturn result;\n}\nexports.formatInputBytes = function (value) {\n\tlet result = utils.toHex(value).substr(2);\n\tlet l = Math.floor((result.length + 63) / 64);\n\tresult = utils.padRight(result, l * 64);\n\treturn result;\n};\n\nif (typeof window !== \"undefined\") {\n\t// let __blockies = require('ethereum-blockies'); // da includere per browserify in noku.js\n\texports.blockies = require('./misc/blockies');\n}\n\nconst tokenBalanceHex = \"0x70a08231\";\nconst tokenTransferHex = \"0xa9059cbb\";\nconst tokenTransferFromHex = \"0x23b872dd\"; //transferFrom(address,address,uint256) --  function transferFrom(address _from, address _to, uint256 _tokenId)\nconst tokenSafeTransferFromHex = \"0x42842e0e\"; //safeTransferFrom(address,address,uint256) -- function safeTransferFrom(address _from, address _to, uint256 _tokenId)\nconst tokenSafeTransferFromDataHex = \"0xb88d4fde\"; //safeTransferFrom(address,address,uint256,bytes) -- function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data)\n\nlet namehash = function (name) {\n\treturn \"0x\" + sha3(name).substr(0, 8);\n}\n\nexports.namehash = namehash;\n\nexports.timeDate = function (date) {\n\tlet y = parseInt(date.substr(0, 4));\n\tlet M = parseInt(date.substr(5, 2)) - 1;\n\tlet d = parseInt(date.substr(8, 2));\n\tlet h = parseInt(date.substr(11, 2));\n\tlet m = parseInt(date.substr(14, 2));\n\n\tlet D = new Date();\n\tD.setFullYear(y);\n\tD.setMonth(M);\n\tD.setDate(d);\n\tD.setHours(h);\n\tD.setMinutes(m);\n\tD.setSeconds(0);\n\tD.setTime(D.getTime() - D.getTimezoneOffset() * 60 * 1000);\n\treturn parseInt(D.getTime() / 1000);\n}\n\nlet byteArrayToHexString = function (byteArray) {\n\treturn Array.prototype.map.call(byteArray, function (byte) {\n\t\treturn ('0' + (byte & 0xFF).toString(16)).slice(-2);\n\t}).join('');\n}\n\nexports.generatePrivateKey = function (isRN) {\n\tif (!isRN) {\n\t\treturn randomBytes(32).toString(\"hex\");\n\t}\n\telse {\n\t\treturn byteArrayToHexString(crypto.getRandomValues(new Uint8Array(32)));\n\t}\n}\n\nexports.bigNumber = function (s) {\n\ttry {\n\t\treturn new BigNumber(s);\n\t} catch (e) {\n\t\treturn new BigNumber(0);\n\t}\n}\n\nexports.randomId = function (isRN) {\n\tif (!isRN) {\n\t\treturn randomBytes(16).readUInt32LE(0);\n\t}\n\telse {\n\t\treturn Buffer.from(crypto.getRandomValues(new Uint8Array(16))).readUInt32LE(0);\n\t}\n}\n\nexports.validateHexString = function (str) {\n\tif (str == \"\" || str == null) return true;\n\tstr = str.substring(0, 2) == '0x' ? str.substring(2).toUpperCase() : str.toUpperCase();\n\tlet re = /^[0-9A-F]+$/g;\n\treturn re.test(str);\n}\n\n\n\nexports.weiToEther = function (number) {\n\ttry {\n\t\tlet returnValue = new BigNumber(number).div(wei2ether);\n\t\treturn returnValue.toString();\n\t} catch (e) {\n\t\tconsole.error(e);\n\t\treturn null;\n\t}\n};\n\nexports.toUnit = function (value, from = \"eth\", to = \"wei\") {\n\treturn Units.convert(value, from, to);\n}\n\nexports.toWei = function (value, from = \"eth\") {\n\treturn Units.convert(value, from, \"wei\");\n}\n\nexports.weiize = function (wei) {\n\treturn new BigNumber(wei);\n}\nexports.etherize = function (wei) {\n\tlet ether = new BigNumber(wei).div(wei2ether);\n\treturn ether.toFormat(3);\n}\n\nexports.etherizeN = function (wei) {\n\tlet ether = new BigNumber(wei).div(wei2ether);\n\treturn ether.toFormat();\n}\n\nexports.addressFromPrivate = function (privkey) {\n\treturn addressFromPublic(exports.keyPublicFromPrivate(privkey));\n}\nexports.Now = function () {\n\tlet d = new Date();\n\tlet day = d.getDate();\n\tlet month = d.getMonth() + 1;\n\tlet year = d.getFullYear();\n\tif (day < 10)\n\t\tday = \"0\" + day;\n\tif (month < 10)\n\t\tmonth = \"0\" + month;\n\tlet hour = d.getHours();\n\tif (hour < 10)\n\t\thour = \"0\" + hour;\n\tlet min = d.getMinutes() + 1;\n\tif (min < 10)\n\t\tmin = \"0\" + min;\n\tlet sec = d.getSeconds();\n\tif (sec < 10)\n\t\tsec = \"0\" + sec;\n\treturn day + \"/\" + month + \"/\" + year + \" \" + hour + ':' + min + ':' + sec;\n}\nexports.filenameV3 = function (privkey) {\n\tlet ts = new Date();\n\treturn ['UTC--', ts.toJSON().replace(/:/g, '-'), '--', exports.addressFromPrivate(privkey)].join('')\n}\n\nexports.toV3 = function (privkey, password, name, address, chain, additionalInfo, mnemonicPhrase, isRN) {\n\tlet salt;\n\tlet iv;\n\tlet random;\n\n\tif (!isRN) {\n\t\tsalt = randomBytes(32);\n\t\tiv = randomBytes(16);\n\t\trandom = randomBytes(16);\n\t}\n\telse {\n\t\tsalt = Buffer.from(crypto.getRandomValues(new Uint8Array(32)));\n\t\tiv = Buffer.from(crypto.getRandomValues(new Uint8Array(16)));\n\t\trandom = Buffer.from(crypto.getRandomValues(new Uint8Array(16)));;\n\t}\n\n\tlet kdfparams = {\n\t\tdklen: 32,\n\t\tsalt: salt.toString('hex'),\n\t\tn: 1024,\n\t\tr: 8,\n\t\tp: 1\n\t}\n\n\tlet derivedKey = scrypt(password, salt, kdfparams.n, kdfparams.r, kdfparams.p, kdfparams.dklen)\n\tlet ciphertext = aes_128_ctr_encrypt(privkey, derivedKey.slice(0, 16), iv);\n\n\tlet mac = sha3(Buffer.concat([derivedKey.slice(16, 32), new Buffer.from(ciphertext, 'hex')]))\n\tlet ret = {\n\t\tversion: 3,\n\t\tid: uuidv4({\n\t\t\trandom: random\n\t\t}),\n\t\taddress: address ? stripHexPrefix(address) : \"\",\n\t\tcrypto: {\n\t\t\tciphertext: ciphertext.toString('hex'),\n\t\t\tcipherparams: {\n\t\t\t\tiv: iv.toString('hex')\n\t\t\t},\n\t\t\tcipher: 'aes-128-ctr',\n\t\t\tkdf: 'scrypt',\n\t\t\tkdfparams: kdfparams,\n\t\t\tmac: mac.toString('hex')\n\t\t}\n\t};\n\tif (name) {\n\t\tret.wallet_name = name;\n\t}\n\tif (chain) {\n\t\tret.chain = chain;\n\t}\n\tif (mnemonicPhrase && typeof mnemonicPhrase === 'string') {\n\t\tconst encryptedMnemonicPhrase = encryptMessage(mnemonicPhrase, password);\n\t\tret.mnemonicPhrase = encryptedMnemonicPhrase;\n\t}\n\tif (additionalInfo) {\n\t\tlet keys = Object.keys(additionalInfo);\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tret[keys[i]] = additionalInfo[keys[i]];\n\t\t}\n\t}\n\treturn JSON.stringify(ret);\n}\nexports.generateValue = function (value) {\n\treturn '0x' + decimalToHex(new BigNumber((String(value))).times(wei2ether));\n}\nexports.speedupTx = function (to, value, gasPrice, gasLimit, data, chainId, privkey, nonce) {\n\tlet h;\n\ttry {\n\t\tgasPrice = new BigNumber(gasPrice).times(1000).times(1000).times(1000).toString();\n\t\tlet rawTx = {\n\t\t\tnonce: sanitizeHex(nonce),\n\t\t\tgasPrice: sanitizeHex(decimalToHex(gasPrice)),\n\t\t\tgasLimit: sanitizeHex(gasLimit),\n\t\t\tto: sanitizeHex(to),\n\t\t\tvalue: sanitizeHex(value),\n\t\t\tdata: sanitizeHex(data),\n\t\t\tchainId: parseInt(chainId || \"1\")\n\t\t}\n\t\t// h = signTx(rawTx, chainId, privkey);\n\n\t\treturn exports.signEthTransaction(rawTx, privkey, chainId);\n\t} catch (e) {\n\t\tconsole.error(e);\n\t\treturn null;\n\t}\n}\nexports.generateApproveCustomToken = function (token, to, value, gasPrice, gasLimit, chainId, privkey, nonce) {\n\tlet h;\n\ttry {\n\t\tlet data;\n\n\t\t//compatibily issues\n\t\tif (token && token.dec === undefined) {\n\t\t\ttoken.dec = token.decimals;\n\t\t}\n\t\tif (token && token.addr === undefined) {\n\t\t\ttoken.addr = token.address;\n\t\t}\n\n\t\tif (!isValidAddress(to)) throw new Error('Not a valid address')\n\t\tif (!isNumeric(value) || parseFloat(value) < 0) throw \"Not a valid amount\";\n\t\tvalue = padLeft(new BigNumber((String(value))).times(new BigNumber(10).pow(token.dec)).toString(16), 64);\n\t\tto = padLeft(getNakedAddress(to), 64);\n\t\tdata = namehash(\"approve(address,uint256)\") + to + value;\n\n\t\tif (!isNumeric(gasLimit) || parseFloat(gasLimit) <= 0) throw 'Please enter a valid gas limit (Must be integer. Try 21000-4000000). ';\n\t\tif (!nonce)\n\t\t\tnonce = \"0x00\";\n\t\tgasPrice = new BigNumber(gasPrice).times(1000).times(1000).times(1000).toString();\n\t\tlet rawTx = {\n\t\t\tnonce: sanitizeHex(nonce),\n\t\t\tgasPrice: sanitizeHex(decimalToHex(gasPrice)),\n\t\t\tgasLimit: sanitizeHex(decimalToHex(gasLimit)),\n\t\t\tto: sanitizeHex(token.addr || token.address),\n\t\t\tvalue: '0x00',\n\t\t\tdata: sanitizeHex(data),\n\t\t\tchainId: parseInt(chainId || \"1\")\n\t\t}\n\t\t// h = signTx(rawTx, chainId, privkey);\n\n\t\treturn exports.signEthTransaction(rawTx, privkey, chainId);\n\t} catch (e) {\n\t\tconsole.error(e);\n\t\treturn null;\n\t}\n}\n\n/**\n * A token object\n * @typedef {{address: string, decimals: number}} Token\n */\n\n/**\n* Generate mint transaction\n* @param {Token} token the token\n* @param {string} to the receiver address\n* @param {string} value hexadecimal transaction value (in WEI),\n* @param {number|string} gasPrice hexadecimal gasPrice (in WEI)\n* @param {*} gasLimit hexadecimal gasLimit (in WEI)\n* @param {number} chainId the chain id\n* @param {string} privkey the sender private key\n* @param {string} nonce the transaction nonce (latest + 1)\n* @returns {string} The signed transaction\n*/\nexports.generateMintCustomToken = function (token, to, value, gasPrice, gasLimit, chainId, privkey, nonce, baseFeeWei = 0, maxFeeWei = 0) {\n\tlet h;\n\ttry {\n\t\tlet data;\n\n\t\t//compatibily issues\n\t\tif (token && token.dec === undefined) {\n\t\t\ttoken.dec = token.decimals;\n\t\t}\n\t\tif (token && token.addr === undefined) {\n\t\t\ttoken.addr = token.address;\n\t\t}\n\n\t\tif (!isValidAddress(to)) throw new Error('Not a valid address')\n\t\tif (!isNumeric(value) || parseFloat(value) < 0) throw \"Not a valid amount\";\n\t\tvalue = padLeft(new BigNumber((String(value))).times(new BigNumber(10).pow(token.dec)).toString(16), 64);\n\t\tto = padLeft(getNakedAddress(to), 64);\n\t\tdata = namehash(\"mint(address,uint256)\") + to + value;\n\n\t\tif (!isNumeric(gasLimit) || parseFloat(gasLimit) <= 0) throw 'Please enter a valid gas limit (Must be integer. Try 21000-4000000). ';\n\t\tif (!nonce)\n\t\t\tnonce = \"0x00\";\n\t\tgasPrice = new BigNumber(gasPrice).times(1000).times(1000).times(1000).toString();\n\t\tlet rawTx = {\n\t\t\tnonce: sanitizeHex(nonce),\n\t\t\tgasPrice: sanitizeHex(decimalToHex(gasPrice)),\n\t\t\tgasLimit: sanitizeHex(decimalToHex(gasLimit)),\n\t\t\tto: sanitizeHex(token.addr || token.address),\n\t\t\tvalue: '0x00',\n\t\t\tdata: sanitizeHex(data),\n\t\t\tchainId: parseInt(chainId || \"1\")\n\t\t}\n\n\t\tif (baseFeeWei) {\n\t\t\trawTx.maxPriorityFeePerGas = gasPrice; // gasPrice is already hex\n\t\t\t// If maxFeeWei is specified, use it\n\t\t\trawTx.maxFeePerGas = maxFeeWei ? `0x${new BigNumber(maxFeeWei).toString(16)}` : `0x${new BigNumber(baseFeeWei).plus(gasPriceDec).toString(16)}`;\n\t\t}\n\n\t\tif (!privkey) {\n\t\t\treturn rawTx;\n\t\t}\n\n\t\t// h = signTx(rawTx, chainId, privkey);\n\n\t\treturn exports.signEthTransaction(rawTx, privkey, chainId);\n\t} catch (e) {\n\t\tconsole.error(e);\n\t\treturn null;\n\t}\n}\n\n\n/**\n* Generate burn transaction\n* @param {string} tokenAddress the token address\n* @param {string} value decimal transaction value (in WEI), or token_id for ERC721,\n* @param {number|string} gasPrice decimal gasPrice (in WEI)\n* @param {*} gasLimit decimal gasLimit (in WEI)\n* @param {number} chainId the chain id\n* @param {string} privkey the sender private key\n* @param {string} nonce the transaction nonce (latest + 1)\n* @param {*} nativeValueWei decimal value (in WEI)\n* @returns {string} The signed transaction\n*/\nexports.generateBurnRawTx = function (tokenAddress, value, gasPrice, gasLimit, chainId, privkey, nonce, nativeValueWei) {\n\ttry {\n\n\t\tconst data = namehash(\"burn(uint256)\") + padLeft(new BigNumber(value).toString(16), 64);\n\n\t\tlet rawTx = {\n\t\t\tnonce: sanitizeHex(nonce),\n\t\t\tgasPrice: sanitizeHex(decimalToHex(gasPrice)),\n\t\t\tgasLimit: sanitizeHex(decimalToHex(gasLimit)),\n\t\t\tto: sanitizeHex(tokenAddress),\n\t\t\tvalue: sanitizeHex(decimalToHex(nativeValueWei || \"0\")),\n\t\t\tdata: sanitizeHex(data),\n\t\t\tchainId: decimalToHex(getChainIdFromName(chainId))\n\t\t}\n\n\t\trawTx = generateCompatibleRawTx(rawTx, chainId);\n\n\t\tif (!privkey) {\n\t\t\treturn rawTx;\n\t\t}\n\n\t\treturn exports.signEthTransaction(rawTx, privkey, chainId);\n\n\n\t\t// let data;\n\n\t\t// //compatibily issues\n\t\t// if (token && token.dec === undefined) {\n\t\t// \ttoken.dec = token.decimals;\n\t\t// }\n\t\t// if (token && token.addr === undefined) {\n\t\t// \ttoken.addr = token.address;\n\t\t// }\n\n\t\t// if (!isNumeric(value) || parseFloat(value) < 0) throw \"Not a valid amount\";\n\t\t// value = padLeft(new BigNumber((String(value))).times(new BigNumber(10).pow(token.dec)).toString(16), 64);\n\t\t// data = namehash(\"burn(uint256)\") + value;\n\n\t\t// if (!isNumeric(gasLimit) || parseFloat(gasLimit) <= 0) throw 'Please enter a valid gas limit (Must be integer. Try 21000-4000000). ';\n\t\t// if (!nonce)\n\t\t// \tnonce = \"0x00\";\n\t\t// gasPrice = new BigNumber(gasPrice).times(1000).times(1000).times(1000).toString();\n\t\t// let rawTx = {\n\t\t// \tnonce: sanitizeHex(nonce),\n\t\t// \tgasPrice: sanitizeHex(decimalToHex(gasPrice)),\n\t\t// \tgasLimit: sanitizeHex(decimalToHex(gasLimit)),\n\t\t// \tto: sanitizeHex(token.addr || token.address),\n\t\t// \tvalue: '0x00',\n\t\t// \tdata: sanitizeHex(data),\n\t\t// \tchainId: parseInt(chainId || \"1\")\n\t\t// }\n\n\t\t// if (!privkey) {\n\t\t// \treturn rawTx;\n\t\t// }\n\n\t\t// return exports.signEthTransaction(rawTx, privkey, chainId);\n\n\t} catch (e) {\n\t\tconsole.error(e);\n\t\treturn null;\n\t}\n}\n\n/**\n* Generate burn transaction\n* @param {string} token the token address\n* @param {string} to the receiver address\n* @param {string} value hexadecimal transaction value (in GWEI),\n* @param {number|string} gasPrice hexadecimal gasPrice (in GWEI)\n* @param {*} gasLimit hexadecimal gasLimit (in WEI)\n* @param {number} chainId the chain id\n* @param {string} privkey the sender private key\n* @param {string} nonce the transaction nonce (latest + 1)\n* @returns {string} The signed transaction\n*/\nexports.generateBurnCustomToken = function (token, value, gasPrice, gasLimit, chainId, privkey, nonce) {\n\tlet h;\n\ttry {\n\t\tlet data;\n\n\t\t//compatibily issues\n\t\tif (token && token.dec === undefined) {\n\t\t\ttoken.dec = token.decimals;\n\t\t}\n\t\tif (token && token.addr === undefined) {\n\t\t\ttoken.addr = token.address;\n\t\t}\n\n\t\tif (!isNumeric(value) || parseFloat(value) < 0) throw \"Not a valid amount\";\n\t\tvalue = padLeft(new BigNumber((String(value))).times(new BigNumber(10).pow(token.dec)).toString(16), 64);\n\t\tdata = namehash(\"burn(uint256)\") + value;\n\n\t\tif (!isNumeric(gasLimit) || parseFloat(gasLimit) <= 0) throw 'Please enter a valid gas limit (Must be integer. Try 21000-4000000). ';\n\t\tif (!nonce)\n\t\t\tnonce = \"0x00\";\n\t\tgasPrice = new BigNumber(gasPrice).times(1000).times(1000).times(1000).toString();\n\t\tlet rawTx = {\n\t\t\tnonce: sanitizeHex(nonce),\n\t\t\tgasPrice: sanitizeHex(decimalToHex(gasPrice)),\n\t\t\tgasLimit: sanitizeHex(decimalToHex(gasLimit)),\n\t\t\tto: sanitizeHex(token.addr || token.address),\n\t\t\tvalue: '0x00',\n\t\t\tdata: sanitizeHex(data),\n\t\t\tchainId: parseInt(chainId || \"1\")\n\t\t}\n\n\t\tif (!privkey) {\n\t\t\treturn rawTx;\n\t\t}\n\n\t\treturn exports.signEthTransaction(rawTx, privkey, chainId);\n\n\t} catch (e) {\n\t\tconsole.error(e);\n\t\treturn null;\n\t}\n}\nexports.generateCreateCustomToken = function (addr, name, symbol, decimals, gasPrice, gasLimit, chainId, privkey, nonce, transferableFromBlock, lockEndBlock) {\n\tlet h;\n\ttry {\n\t\tlet data;\n\n\t\tdata = namehash(\"createCustomToken(string,string,uint8,uint256,uint256)\")\n\t\tdata += padLeft(\"a0\", 64); // offset dei parametri di tipo stringa che vanno posizionate dopo i parametri di tipo uint\n\t\tdata += padLeft(\"e0\", 64);\n\t\tdata += padLeft(new BigNumber((String(decimals))).toString(16), 64);\n\t\tdata += padLeft(new BigNumber((String(transferableFromBlock))).toString(16), 64);\n\t\tdata += padLeft(new BigNumber((String(lockEndBlock))).toString(16), 64);\n\t\tdata += exports.formatInputString(name);\n\t\tdata += exports.formatInputString(symbol);\n\n\t\tif (!isNumeric(gasLimit) || parseFloat(gasLimit) <= 0) throw 'Please enter a valid gas limit (Must be integer. Try 21000-4000000). ';\n\t\tif (!nonce)\n\t\t\tnonce = \"0x00\";\n\t\tgasPrice = new BigNumber(gasPrice).times(1000).times(1000).times(1000).toString();\n\t\tlet rawTx = {\n\t\t\tnonce: sanitizeHex(nonce),\n\t\t\tgasPrice: sanitizeHex(decimalToHex(gasPrice)),\n\t\t\tgasLimit: sanitizeHex(decimalToHex(gasLimit)),\n\t\t\tto: sanitizeHex(addr),\n\t\t\tvalue: '0x00',\n\t\t\tdata: sanitizeHex(data),\n\t\t\tchainId: parseInt(chainId || \"1\")\n\t\t}\n\t\t// h = signTx(rawTx, chainId, privkey);\n\n\t\treturn exports.signEthTransaction(rawTx, privkey, chainId);\n\t} catch (e) {\n\t\tconsole.error(e);\n\t\treturn null;\n\t}\n}\n\nexports.signEthTransaction = function (rawTx, privkey, chainId) {\n\n\tif (rawTx.gasLimit.toString().indexOf(\"0x\") < 0) {\n\t\trawTx.gasLimit = `0x${new BigNumber(rawTx.gasLimit).toString(16)}`;\n\t}\n\n\tif (rawTx.gasPrice && rawTx.gasPrice.toString().indexOf(\"0x\") < 0) {\n\t\trawTx.gasPrice = `0x${new BigNumber(rawTx.gasPrice).toString(16)}`;\n\t}\n\n\tif (rawTx.nonce.toString().indexOf(\"0x\") < 0) {\n\t\trawTx.nonce = `0x${new BigNumber(rawTx.nonce).toString(16)}`;\n\t}\n\n\tif (rawTx.value.toString().indexOf(\"0x\") < 0) {\n\t\trawTx.value = `0x${new BigNumber(rawTx.value).toString(16)}`;\n\t}\n\n\tif (!rawTx.chainId || rawTx.chainId.toString().indexOf(\"0x\") < 0) {\n\t\trawTx.chainId = `0x${new BigNumber(rawTx.chainId || chainId).toString(16)}`;\n\t}\n\n\tif (!rawTx.data) {\n\t\trawTx.data = \"0x\";\n\t} else if ((rawTx.data || \"\").toString().indexOf(\"0x\") < 0) {\n\t\trawTx.data = `0x${new BigNumber(rawTx.data).toString(16)}`;\n\t}\n\n\t// const common = new Common({ chain: 'mainnet', hardfork: 'london' })\n\n\t// const txData = {\n\t// \t\"data\": \"0x1a8451e600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n\t// \t\"gasLimit\": \"0x02625a00\",\n\t// \t\"maxPriorityFeePerGas\": \"0x01\",\n\t// \t\"maxFeePerGas\": \"0xff\",\n\t// \t\"nonce\": \"0x00\",\n\t// \t\"to\": \"0xcccccccccccccccccccccccccccccccccccccccc\",\n\t// \t\"value\": \"0x0186a0\",\n\t// \t// \"v\": \"0x01\",\n\t// \t// \"r\": \"0xafb6e247b1c490e284053c87ab5f6b59e219d51f743f7a4d83e400782bc7e4b9\",\n\t// \t// \"s\": \"0x479a268e0e0acd4de3f1e28e4fac2a6b32a4195e8dfa9d19147abe8807aa6f64\",\n\t// \t\"chainId\": \"0x01\",\n\t// \t\"accessList\": [],\n\t// \t\"type\": \"0x02\"\n\t// }\n\n\t// const tx = TransactionFactory.fromTxData(txData, { common });\n\n\tconst tx = TransactionFactory.fromTxData(\n\t\tgenerateCompatibleRawTx(rawTx, chainId),\n\t\tgetOptsEthereumTx(chainId, rawTx.customChain)\n\t);\n\tconst signedTx = tx.sign(Buffer.from(privkey, 'hex'));\n\tconst serializedTx = signedTx.serialize();\n\treturn `0x${serializedTx.toString('hex')}`;\n}\n\n/**\n* Generate ETH transaction\n* @param {string} from the sender address\n* @param {string} to the receiver address\n* @param {string} value transaction value (in native value),\n* @param {Token} token if defined the token to transfer\n* @param {number|string} gasPrice hexadecimal gasPrice (in WEI)\n* @param {*} gasLimit hexadecimal gasLimit (in WEI)\n* @param {string} data data field in transaction\n* @param {number} chainId the chain id\n* @param {string} privkey the sender private key\n* @param {string} nonce the transaction nonce (latest + 1)\n* @param {string} note \n* @param {string} baseFeeWei EIP-1559\n* @param {string} maxFeeWei EIP-1559\n* @returns {string} The signed transaction\n*/\nexports.generateEthTransaction = function (from, to, value, token, gasPrice, gasLimit, data, chainId, privkey, nonce, note, baseFeeWei = 0, maxFeeWei = 0, _nativeValueWei) {\n\ttry {\n\t\tnote = note ? note : \"\";\n\t\tdata = data ? data : \"\";\n\t\tif (!to || !exports.validateEtherAddress(to)) {\n\t\t\tthrow \"Not a valid address\";\n\t\t}\n\n\t\tif ((!isNumeric(value) || parseFloat(value) < 0) && !(token || {}).erc721) {\n\t\t\tthrow \"Not a valid amount\";\n\t\t}\n\n\t\tif (!isNumeric(gasLimit) || parseFloat(gasLimit) <= 0) {\n\t\t\tthrow 'Please enter a valid gas limit (Must be integer. Try 21000-4000000)';\n\t\t}\n\n\t\tif (!isNumeric(gasPrice) || parseFloat(gasPrice) < 0) {\n\t\t\tthrow 'Please enter a valid gas price';\n\t\t}\n\n\t\tif (!isNumeric(chainId) || parseFloat(chainId) <= 0) {\n\t\t\tconst ethOpts = getOptsEthereumTx(chainId);\n\t\t\tchainId = ethOpts.chain || ((ethOpts.common || {})._chainParams || {}).chainId;\n\t\t\tif (!isNumeric(chainId) || parseFloat(chainId) <= 0) {\n\t\t\t\tthrow 'Please enter a valid chain id';\n\t\t\t}\n\t\t}\n\n\t\tdata = stripHexPrefix(data);\n\n\t\tif (!data && token && (token || {}).erc721 && !(token || {}).token_id) {\n\t\t\tthrow 'Not a valid erc721 token';\n\t\t}\n\n\t\tlet nativeValueWei;\n\n\t\tif (_nativeValueWei && !isHexString(_nativeValueWei)) {\n\t\t\tnativeValueWei = decimalToHex(_nativeValueWei);\n\t\t} else {\n\t\t\tnativeValueWei = _nativeValueWei ? _nativeValueWei : \"0x0\";\n\t\t}\n\n\t\tlet re = /[0-9A-Fa-f]{6}/g;\n\t\tlet dataHex = re.test(data) ? data : toHex(data || \"\");\n\n\t\tnonce = nonce ? nonce : \"0x00\";\n\n\t\tlet gasPriceDec = gasPrice;\n\n\t\tif (!isHexString(gasPrice)) {\n\t\t\tgasPrice = new BigNumber(gasPrice).times(1000).times(1000).times(1000).toString();\n\t\t} else {\n\t\t\tgasPriceDec = new BigNumber(gasPrice).toString(10);\n\t\t}\n\n\t\t//compatibily issues\n\t\tif (token && token.dec === undefined) {\n\t\t\ttoken.dec = token.decimals;\n\t\t}\n\t\tif (token && token.addr === undefined) {\n\t\t\ttoken.addr = token.address;\n\t\t}\n\n\t\tlet rawTx = {};\n\t\tif ((token || {}).erc721 && !data) { //ERC721\n\t\t\tif (!from) {\n\t\t\t\tif (privkey) {\n\t\t\t\t\tfrom = exports.addressFromPrivate(privkey);\n\t\t\t\t} else {\n\t\t\t\t\tthrow \"Missing parameter from or private key!\"\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (token.useErc721safeTransferFromData && ((data || {}).length > 0)) {\n\t\t\t\trawTx = {\n\t\t\t\t\tnonce: sanitizeHex(nonce),\n\t\t\t\t\tgasPrice: sanitizeHex(decimalToHex(gasPrice)),\n\t\t\t\t\tgasLimit: sanitizeHex(decimalToHex(gasLimit)),\n\t\t\t\t\tto: token.addr,\n\t\t\t\t\tvalue: nativeValueWei,\n\t\t\t\t\tdata: sanitizeHex(tokenSafeTransferFromDataHex + padLeft(getNakedAddress(from), 64) + padLeft(getNakedAddress(to), 64) + padLeft(new BigNumber((String(token.token_id))).toString(16), 64) + padLeft(data.length.toString(16), 64) + utils.padRight(dataHex, 64)), //0xmethod + from + to + value + data\n\t\t\t\t\tchainId: parseInt(chainId || \"1\")\n\t\t\t\t}\n\t\t\t} else if (token.useErc721safeTransferFrom) {\n\t\t\t\trawTx = {\n\t\t\t\t\tnonce: sanitizeHex(nonce),\n\t\t\t\t\tgasPrice: sanitizeHex(decimalToHex(gasPrice)),\n\t\t\t\t\tgasLimit: sanitizeHex(decimalToHex(gasLimit)),\n\t\t\t\t\tto: token.addr,\n\t\t\t\t\tvalue: nativeValueWei,\n\t\t\t\t\tdata: sanitizeHex(tokenSafeTransferFromHex + padLeft(getNakedAddress(from), 64) + padLeft(getNakedAddress(to), 64) + padLeft(new BigNumber((String(token.token_id))).toString(16), 64)), //0xmethod + from + to + value\n\t\t\t\t\tchainId: parseInt(chainId || \"1\")\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trawTx = {\n\t\t\t\t\tnonce: sanitizeHex(nonce),\n\t\t\t\t\tgasPrice: sanitizeHex(decimalToHex(gasPrice)),\n\t\t\t\t\tgasLimit: sanitizeHex(decimalToHex(gasLimit)),\n\t\t\t\t\tto: token.addr,\n\t\t\t\t\tvalue: nativeValueWei,\n\t\t\t\t\tdata: sanitizeHex(tokenTransferFromHex + padLeft(getNakedAddress(from), 64) + padLeft(getNakedAddress(to), 64) + padLeft(new BigNumber((String(token.token_id))).toString(16), 64)), //0xmethod + from + to + value\n\t\t\t\t\tchainId: parseInt(chainId || \"1\")\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else if ((token || {}).erc20) { //ERC20\n\t\t\trawTx = {\n\t\t\t\tnonce: sanitizeHex(nonce),\n\t\t\t\tgasPrice: sanitizeHex(decimalToHex(gasPrice)),\n\t\t\t\tgasLimit: sanitizeHex(decimalToHex(gasLimit)),\n\t\t\t\tto: token.addr,\n\t\t\t\tvalue: nativeValueWei,\n\t\t\t\tdata: sanitizeHex(tokenTransferHex + padLeft(getNakedAddress(to), 64) + padLeft(new BigNumber((String(value))).times(new BigNumber(10).pow(token.dec)).toString(16), 64) + note), //0xmethod + to + value  + note\n\t\t\t\tchainId: parseInt(chainId || \"1\")\n\t\t\t}\n\t\t} else { //ETH\n\t\t\trawTx = {\n\t\t\t\tnonce: sanitizeHex(nonce),\n\t\t\t\tgasPrice: sanitizeHex(decimalToHex(gasPrice)),\n\t\t\t\tgasLimit: sanitizeHex(decimalToHex(gasLimit)),\n\t\t\t\tto: sanitizeHex(to),\n\t\t\t\tvalue: sanitizeHex(decimalToHex(new BigNumber((String(value))).times(wei2ether))),\n\t\t\t\tdata: sanitizeHex(dataHex),\n\t\t\t\tchainId: parseInt(chainId || \"1\")\n\t\t\t}\n\t\t}\n\n\t\tif (baseFeeWei) {\n\t\t\trawTx.maxPriorityFeePerGas = gasPrice; // gasPrice is already hex\n\t\t\t// If maxFeeWei is specified, use it\n\t\t\trawTx.maxFeePerGas = maxFeeWei ? `0x${new BigNumber(maxFeeWei).toString(16)}` : `0x${new BigNumber(baseFeeWei).plus(gasPriceDec).toString(16)}`;\n\t\t}\n\n\t\tif (!privkey) {\n\t\t\treturn rawTx;\n\t\t}\n\n\t\treturn exports.signEthTransaction(rawTx, privkey, chainId);\n\n\t} catch (ex) {\n\t\tthrow ex;\n\t}\n}\n\nexports.generateTx = function (token, to, value, gasPrice, gasLimit, data, chainId, privkey, nonce, note = \"\") {\n\t// let h;\n\tif (!note) {\n\t\tnote = \"\";\n\t}\n\ttry {\n\t\t//compatibily issues\n\t\tif (token && token.dec === undefined) {\n\t\t\ttoken.dec = token.decimals;\n\t\t}\n\t\tif (token && token.addr === undefined) {\n\t\t\ttoken.addr = token.address;\n\t\t}\n\t\t//if(!isValidAddress(to)) throw new Error('Not a valid address')\n\n\t\tif (to != \"0xCONTRACT\" && !exports.validateEtherAddress(to)) throw \"Not a valid address\";\n\t\tif (to == \"0xCONTRACT\") to = '';\n\n\t\tif (!isNumeric(value) || parseFloat(value) < 0) throw \"Not a valid amount\";\n\t\tif (token != null) {\n\t\t\tvalue = padLeft(new BigNumber((String(value))).times(new BigNumber(10).pow(token.dec)).toString(16), 64);\n\t\t\tto = padLeft(getNakedAddress(to), 64);\n\t\t\tdata = tokenTransferHex + to + value + note;\n\t\t\tto = token.addr || token.address;\n\t\t\tvalue = '0x00';\n\t\t} else\n\t\t\tvalue = sanitizeHex(decimalToHex(new BigNumber((String(value))).times(wei2ether)));\n\t\tif (!exports.validateHexString(data)) throw 'Please enter a valid data value (Must be hex). ';\n\t\tif (!isNumeric(gasLimit) || parseFloat(gasLimit) <= 0) throw 'Please enter a valid gas limit (Must be integer. Try 21000-4000000). ';\n\n\t\tif (!nonce)\n\t\t\tnonce = \"0x00\";\n\t\tgasPrice = new BigNumber(gasPrice).times(1000).times(1000).times(1000).toString();\n\t\tlet rawTx = {\n\t\t\tnonce: sanitizeHex(nonce),\n\t\t\tgasPrice: sanitizeHex(decimalToHex(gasPrice)),\n\t\t\tgasLimit: sanitizeHex(decimalToHex(gasLimit)),\n\t\t\tto: sanitizeHex(to),\n\t\t\t//value: sanitizeHex(decimalToHex(new BigNumber((String(value))).times(wei2ether))),\n\t\t\tvalue: value,\n\t\t\tdata: sanitizeHex(data),\n\t\t\tchainId: parseInt(chainId || \"1\")\n\t\t}\n\t\tif (!privkey)\n\t\t\treturn rawTx;\n\t\t// h = signTx(rawTx, chainId, privkey);\n\n\n\t\treturn exports.signEthTransaction(rawTx, privkey, chainId);\n\t} catch (e) {\n\t\tconsole.error(e);\n\t\treturn null;\n\t}\n}\nexports.buildTx = function (token, to, value, gasPrice, gasLimit, data, chainId, nonce, note) {\n\treturn exports.generateTx(token, to, value, gasPrice, gasLimit, data, chainId, null, nonce, note);\n}\n\nexports.decodeTx = function (_rawTx, _token, _from, _to, _skipMethodCheck, chainId) {\n\tlet ethTx, from;\n\n\ttry {\n\t\tif (typeof _rawTx == \"string\") {\n\t\t\tethTx = TransactionFactory.fromSerializedData(Buffer.from(stripHexPrefix(_rawTx), 'hex'), getOptsEthereumTx(chainId));\n\t\t} else {\n\t\t\tethTx = TransactionFactory.fromTxData(\n\t\t\t\tgenerateCompatibleRawTx(_rawTx, chainId),\n\t\t\t\tgetOptsEthereumTx(chainId, _rawTx.customChain)\n\t\t\t);\n\t\t}\n\t\tfrom = `0x${stripHexPrefix(ethTx.getSenderAddress().toString(\"hex\"))}`.toLowerCase();\n\t} catch (e) {\n\t\treturn null;\n\t}\n\n\tlet value = `0x${stripHexPrefix(ethTx.value.toString(\"hex\") || '0')}`,\n\t\tdata = `0x${stripHexPrefix(ethTx.data.toString(\"hex\"))}`,\n\t\tgasPrice = ethTx.gasPrice ? `0x${stripHexPrefix(ethTx.gasPrice.toString(\"hex\"))}` : \"0x0\",\n\t\tgasLimit = `0x${stripHexPrefix(ethTx.gasLimit.toString(\"hex\"))}`,\n\t\tto = `0x${stripHexPrefix(ethTx.to.toString(\"hex\"))}`.toLowerCase();\n\n\n\tif (_from && _from.toLowerCase() !== from) {\n\t\treturn null;\n\t}\n\n\tlet method = data.substr(0, 10);\n\tif (method == tokenTransferHex ||\n\t\tmethod == namehash(\"approve(address,uint256)\") ||\n\t\tmethod == namehash(\"mint(address,uint256)\") ||\n\t\tmethod == namehash(\"safeMint(address,string)\") ||\n\t\tmethod == namehash(\"multipleSafeMint(address,string,uint256)\") ||\n\t\tmethod == namehash(\"safeMint(uint256,address,string)\") ||\n\t\tmethod == namehash(\"multipleSafeMint(uint256[],address,string)\") ||\n\t\tmethod == tokenTransferFromHex ||\n\t\tmethod == tokenSafeTransferFromHex ||\n\t\tmethod == tokenSafeTransferFromDataHex\n\t) {\n\t\tif (_token == null || (_token.addr || _token.address).toLowerCase() != to) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (method == namehash(\"safeMint(uint256,address,string)\") || method == namehash(\"multipleSafeMint(uint256[],address,string)\")) {\n\t\t\tto = '0x' + data.substr(98, 40);\n\t\t} else if (\n\t\t\tmethod == tokenTransferFromHex ||\n\t\t\tmethod == tokenSafeTransferFromHex ||\n\t\t\tmethod == tokenSafeTransferFromDataHex\n\t\t) {\n\t\t\tvalue = new BigNumber('0x' + data.substr(10 + 64 + 64, 64)).toString();\n\t\t\tto = `0x${unpadHexString(`0x${data.substr(10 + 64, 64)}`)}`;\n\t\t} else {\n\t\t\tif (_token.dec || _token.decimals) {\n\t\t\t\tvalue = new BigNumber('0x' + data.substr(10 + 64, 64)).div(new BigNumber(10).pow(_token.dec || _token.decimals)).toString();\n\t\t\t} else {\n\t\t\t\tvalue = new BigNumber('0x' + data.substr(10 + 64, 64)).toString();\n\t\t\t}\n\t\t\tto = '0x' + data.substr(10 + 24, 40);\n\t\t}\n\n\t\tif (\n\t\t\tmethod == tokenTransferHex ||\n\t\t\tmethod == tokenTransferFromHex ||\n\t\t\tmethod == tokenSafeTransferFromHex ||\n\t\t\tmethod == tokenSafeTransferFromDataHex\n\t\t) {\n\t\t\tmethod = \"tokenTransfer\";\n\t\t} else if (method == namehash(\"approve(address,uint256)\")) {\n\t\t\tmethod = \"approve\";\n\t\t} else if (\n\t\t\tmethod == namehash(\"mint(address,uint256)\") ||\n\t\t\tmethod == namehash(\"safeMint(address,string)\") ||\n\t\t\tmethod == namehash(\"multipleSafeMint(address,string,uint256)\") ||\n\t\t\tmethod == namehash(\"safeMint(uint256,address,string)\") ||\n\t\t\tmethod == namehash(\"multipleSafeMint(uint256[],address,string)\")\n\t\t) {\n\t\t\tmethod = \"mint\";\n\t\t}\n\t} else if (\n\t\tmethod == namehash(\"createCustomToken(string,string,uint8,uint256,uint256)\") ||\n\t\tmethod == namehash(\"createCustomToken(string,string,string,uint256,uint256,address,uint8)\") ||\n\t\tmethod == namehash(\"createCustomToken(string,string,bool,address)\") ||\n\t\tmethod == namehash(\"createCustomToken(string,string,string,bool,bool,uint8,address)\") ||\n\t\tmethod == namehash(\"createCustomToken(string,string,uint8,bool,address)\")\n\t) {\n\t\tmethod = 'create';\n\t\tvalue = '';\n\t} else if (method == namehash(\"burn(uint256)\")) {\n\t\tif (_token == null || (_token.addr || _token.address).toLowerCase() != to) {\n\t\t\treturn null;\n\t\t}\n\t\tif (_token.dec || _token.decimals) {\n\t\t\tvalue = new BigNumber('0x' + data.substr(10, 64)).div(new BigNumber(10).pow(_token.dec || _token.decimals)).toString();\n\t\t} else {\n\t\t\tvalue = new BigNumber('0x' + data.substr(10, 64)).toString();\n\t\t}\n\t\tmethod = 'burn';\n\t} else if (method != '0x') {\n\t\tif (!_skipMethodCheck) {\n\t\t\treturn null;\n\t\t}\n\t} else {\n\t\tvalue = new BigNumber(value).div(wei2ether).toString();\n\t\tmethod = 'transfer';\n\t}\n\n\tif (_to && _to.toLowerCase() !== to) {\n\t\treturn null;\n\t}\n\n\t// if (method != 'burn' && to != _to.toLowerCase()) {\n\t// \treturn null;\n\t// }\n\n\tlet _chainId = undefined;\n\n\ttry {\n\t\t_chainId = ethTx.common.chainIdBN().toString('hex');\n\t} catch (e) { }\n\n\treturn {\n\t\tmethod: method,\n\t\tfrom: from,\n\t\tgasPrice: gasPrice,\n\t\tgasLimit: gasLimit,\n\t\tto: to,\n\t\tvalue: value,\n\t\tdata: data,\n\t\ttokenAddress: (_token || {}).addr || (_token || {}).address || undefined,\n\t\tmaxPriorityFeePerGas: ethTx.maxPriorityFeePerGas ? ethTx.maxPriorityFeePerGas.toString('hex') : undefined,\n\t\tmaxFeePerGas: ethTx.maxFeePerGas ? ethTx.maxFeePerGas.toString('hex') : undefined,\n\t\tchainId: _chainId\n\t};\n}\n\nexports.initEquivalent = function () {\n\tlet eq = {\n\t\tusd: new BigNumber(0),\n\t\teth: new BigNumber(0),\n\t\teur: new BigNumber(0),\n\t\tchf: new BigNumber(0),\n\t\tgbp: new BigNumber(0),\n\t\tcad: new BigNumber(0),\n\t\tjpy: new BigNumber(0),\n\t\tcny: new BigNumber(0),\n\t\trub: new BigNumber(0),\n\t\taud: new BigNumber(0),\n\t\tbtc: new BigNumber(0)\n\t};\n\treturn eq;\n}\nexports.getIndirectQuoted = function (eth, etherPrice) {\n\tlet quoted = {};\n\tquoted.usd = new BigNumber(((eth * etherPrice.USD) / etherPrice.ETH).toString());\n\tquoted.eur = new BigNumber(((eth * etherPrice.EUR) / etherPrice.ETH).toString());\n\tquoted.chf = new BigNumber(((eth * etherPrice.CHF) / etherPrice.ETH).toString());\n\tquoted.btc = new BigNumber(((eth * etherPrice.BTC) / etherPrice.ETH).toString());\n\tquoted.gbp = new BigNumber(((eth * etherPrice.GBP) / etherPrice.ETH).toString());\n\tquoted.cad = new BigNumber(((eth * etherPrice.CAD) / etherPrice.ETH).toString());\n\tquoted.jpy = new BigNumber(((eth * etherPrice.JPY) / etherPrice.ETH).toString());\n\tquoted.cny = new BigNumber(((eth * etherPrice.CNY) / etherPrice.ETH).toString());\n\tquoted.rub = new BigNumber(((eth * etherPrice.RUB) / etherPrice.ETH).toString());\n\tquoted.aud = new BigNumber(((eth * etherPrice.AUD) / etherPrice.ETH).toString());\n\treturn quoted;\n}\nexports.getQuoted = function (token, price) {\n\t//compatibily issues\n\tif (token && token.dec === undefined) {\n\t\ttoken.dec = token.decimals;\n\t}\n\tif (token && token.addr === undefined) {\n\t\ttoken.addr = token.address;\n\t}\n\tlet pow = new BigNumber(10).pow(token.dec);\n\tlet balance = new BigNumber(token.balance);\n\tlet eq = {};\n\t/// TUTTO DA RIVEDERE\n\tif (price.USD) eq.usd = balance.times(parseFloat(price.USD).toString()).div(pow);\n\tif (price.ETH) eq.eth = balance.times(parseFloat(price.ETH).toString()).div(pow);\n\tif (price.EUR) eq.eur = balance.times(parseFloat(price.EUR).toString()).div(pow);\n\tif (price.CHF) eq.chf = balance.times(parseFloat(price.CHF).toString()).div(pow);\n\tif (price.BTC) eq.btc = balance.times(parseFloat(price.BTC).toString()).div(pow);\n\tif (price.GBP) eq.gbp = balance.times(parseFloat(price.GBP).toString()).div(pow);\n\tif (price.CAD) eq.cad = balance.times(parseFloat(price.CAD).toString()).div(pow);\n\tif (price.AUD) eq.aud = balance.times(parseFloat(price.AUD).toString()).div(pow);\n\tif (price.JPY) eq.jpy = balance.times(parseFloat(price.JPY).toString()).div(pow);\n\tif (price.CNY) eq.cny = balance.times(parseFloat(price.CNY).toString()).div(pow);\n\tif (price.RUB) eq.rub = balance.times(parseFloat(price.RUB).toString()).div(pow);\n\treturn eq;\n}\nexports.sumEquivalent = function (total, eth, quoted) {\n\ttotal.eth = total.eth.plus(eth);\n\ttotal.usd = total.usd.plus(quoted.usd);\n\ttotal.eur = total.eur.plus(quoted.eur);\n\ttotal.btc = total.btc.plus(quoted.btc);\n\ttotal.gbp = total.gbp.plus(quoted.gbp);\n\ttotal.chf = total.chf.plus(quoted.chf);\n};\nexports.addEquivalent = function (eq, token, price) {\n\t//compatibily issues\n\tif (token && token.dec === undefined) {\n\t\ttoken.dec = token.decimals;\n\t}\n\tif (token && token.addr === undefined) {\n\t\ttoken.addr = token.address;\n\t}\n\tlet pow = new BigNumber(10).pow(token.dec);\n\tlet balance = new BigNumber(token.balance);\n\t/// TUTTO DA RIVEDERE\n\tif (price.USD) eq.usd = balance.times(parseFloat(price.USD).toString()).div(pow).plus(eq.usd);\n\tif (price.ETH) eq.eth = balance.times(parseFloat(price.ETH).toString()).div(pow).plus(eq.eth);\n\tif (price.EUR) eq.eur = balance.times(parseFloat(price.EUR).toString()).div(pow).plus(eq.eur);\n\tif (price.CHF) eq.chf = balance.times(parseFloat(price.CHF).toString()).div(pow).plus(eq.chf);\n\tif (price.BTC) eq.btc = balance.times(parseFloat(price.BTC).toString()).div(pow).plus(eq.btc);\n\tif (price.GBP) eq.gbp = balance.times(parseFloat(price.GBP).toString()).div(pow).plus(eq.gbp);\n\n\tif (price.CAD) eq.cad = balance.times(parseFloat(price.CAD).toString()).div(pow).plus(eq.cad);\n\tif (price.JPY) eq.jpy = balance.times(parseFloat(price.JPY).toString()).div(pow).plus(eq.jpy);\n\tif (price.CNY) eq.cny = balance.times(parseFloat(price.CNY).toString()).div(pow).plus(eq.cny);\n\tif (price.RUB) eq.rub = balance.times(parseFloat(price.RUB).toString()).div(pow).plus(eq.rub);\n\tif (price.AUD) eq.aud = balance.times(parseFloat(price.AUD).toString()).div(pow).plus(eq.aud);\n}\nexports.equivalent = function (token, price) {\n\tlet eq = exports.initEquivalent();\n\texports.addEquivalent(eq, token, price);\n\treturn eq;\n}\nexports.tokenRounder = function (value, token, n) {\n\t//compatibily issues\n\tif (token && token.dec === undefined) {\n\t\ttoken.dec = token.decimals;\n\t}\n\tif (token && token.addr === undefined) {\n\t\ttoken.addr = token.address;\n\t}\n\tlet dec = token.dec;\n\tif (!dec)\n\t\tdec = 0;\n\tvalue = new BigNumber(value).div(new BigNumber(10).pow(dec));\n\tlet s = value.toFormat();\n\tif (s.length <= n)\n\t\treturn s;\n\tlet decimals = s.indexOf('.');\n\tif (decimals > 0) {\n\t\tdecimals = n - decimals;\n\t\tif (decimals < 0)\n\t\t\tdecimals = 0;\n\t\treturn value.toFormat(decimals);\n\t}\n\tlet m = '';\n\tvalue = s;\n\tfor (; ;) {\n\t\tif (value.length <= n)\n\t\t\tbreak;\n\t\tvalue = value.substr(0, value.length - 4)\n\t\tif (m == '')\n\t\t\tm = 'k';\n\t\telse if (m == 'k')\n\t\t\tm = 'm';\n\t\telse if (m == 'm')\n\t\t\tm = 'g';\n\t\telse if (m == 'g')\n\t\t\tm = 't';\n\t}\n\treturn value + m;\n}\nexports.rounder = function (value, n) {\n\tlet s = value.toFormat();\n\tif (s.length <= n)\n\t\treturn s;\n\tlet decimals = s.indexOf('.');\n\tif (decimals <= 0)\n\t\treturn s;\n\tdecimals = n - decimals;\n\treturn value.toFormat(decimals);\n}\nexports.tokenRounded = function (value, token) {\n\t//compatibily issues\n\tif (token && token.dec === undefined) {\n\t\ttoken.dec = token.decimals;\n\t}\n\treturn new BigNumber(value).div(new BigNumber(10).pow(token.dec)).toFormat(2);\n}\nexports.tokenRoundedChecked = function (value, token) {\n\t//compatibily issues\n\tif (token && token.dec === undefined) {\n\t\ttoken.dec = token.decimals;\n\t}\n\tlet r = exports.tokenRounded(value, token);\n\tif (r != 0)\n\t\treturn r;\n\treturn new BigNumber(value).div(new BigNumber(10).pow(token.dec)).toFormat(12);\n}\nexports.tokenTransfert = function (value, token) {\n\t//compatibily issues\n\tif (token && token.dec === undefined) {\n\t\ttoken.dec = token.decimals;\n\t}\n\treturn new BigNumber(value).div(new BigNumber(10).pow(token.dec)).toFormat();\n}\nexports.tokenNotRounded = function (_value, token, locked) {\n\t//compatibily issues\n\tif (token && token.dec === undefined) {\n\t\ttoken.dec = token.decimals;\n\t}\n\tif (!locked)\n\t\tlocked = 0;\n\tlocked = new BigNumber(locked);\n\tBigNumber.config({\n\t\tFORMAT: inputFormat\n\t});\n\tlet value = new BigNumber(_value).minus(locked).div(new BigNumber(10).pow(token.dec)).toFormat();\n\tBigNumber.config({\n\t\tFORMAT: outputFormat\n\t});\n\tvalue = value.replace(/,/g, '');\n\treturn value;\n}\nexports.etherizeNotRounded = function (wei) {\n\tBigNumber.config({\n\t\tFORMAT: inputFormat\n\t});\n\tlet ether = new BigNumber(wei).div(wei2ether).toFormat();\n\tBigNumber.config({\n\t\tFORMAT: outputFormat\n\t});\n\tether = ether.replace(/,/g, '');\n\treturn ether;\n}\nexports.tokenRaw = function (value, token) {\n\t//compatibily issues\n\tif (token && token.dec === undefined) {\n\t\ttoken.dec = token.decimals;\n\t}\n\tBigNumber.config({\n\t\tFORMAT: inputFormat\n\t});\n\tvalue = new BigNumber(value).times(new BigNumber(10).pow(token.dec));\n\tBigNumber.config({\n\t\tFORMAT: outputFormat\n\t});\n\treturn value;\n}\nexports.tokenToEth = function (value, token, price) {\n\t//compatibily issues\n\tif (token && token.dec === undefined) {\n\t\ttoken.dec = token.decimals;\n\t}\n\treturn new BigNumber(value).div(new BigNumber(10).pow(token.dec)).times(new BigNumber(price.toString()));\n}\nexports.tokenToWei = function (value, token, price) {\n\t//compatibily issues\n\tif (token && token.dec === undefined) {\n\t\ttoken.dec = token.decimals;\n\t}\n\treturn new BigNumber(value).times(new BigNumber(10).pow(18 - token.dec)).times(new BigNumber(price.toString()));\n}\nexports.rounded = function (value, n) {\n\treturn value.toFormat(n);\n}\nexports.notRounded = function (value) {\n\treturn value.toFormat().replace(/,/g, '');\n}\nexports.rounded0 = function (value) {\n\treturn value.toFormat(0);\n}\nexports.rounded1 = function (value) {\n\treturn value.toFormat(1);\n}\nexports.rounded5 = function (value) {\n\treturn value.toFormat(5);\n}\n\nexports.fromMyEtherWalletKey = function (input, password) {\n\ttry {\n\t\treturn decodeEncryptedPrivate(input.slice(0, 128), password);\n\t} catch (e) {\n\t\tconsole.error(e);\n\t\treturn null;\n\t}\n}\n\nexports.fromFile = function (input, password) {\n\tconst content = fromFile_remastered(input, password);\n\treturn (content || {}).key || null;\n}\n\nfunction fromFile_remastered(input, password) {\n\ttry {\n\t\tconst json = JSON.parse(input);\n\n\t\t// if (json.encseed != null) return fromEthSale(input, password);\n\t\tif (json.Crypto != null || json.crypto != null) return fromV3(input, password);\n\t\t// if (json.hash != null) return fromMyEtherWallet(input, password); // questa decodifica e' da testare\n\t\t// if (json.publisher == \"MyEtherWallet\") return fromV2(input); // questa decodifica e' da testare\n\t} catch (e) { }\n\treturn null;\n}\nexports.fromFile_remastered = fromFile_remastered;\n\nexports.requirePassword = function (ethjson) {\n\tlet jsonArr;\n\ttry {\n\t\tjsonArr = JSON.parse(ethjson);\n\t} catch (e) {\n\t\tconsole.error(\"Wrong JSON/UTC file\");\n\t\treturn false;\n\t}\n\tif (jsonArr.encseed != null) return true; // questo file e' generato da pyethsaletool e non funziona\n\tif (jsonArr.Crypto != null || jsonArr.crypto != null) return true\n\tif (jsonArr.hash != null && jsonArr.locked) return true;\n\tif (jsonArr.hash != null && !jsonArr.locked) return false;\n\tif (jsonArr.publisher == \"MyEtherWallet\" && !jsonArr.encrypted) return false;\n\treturn false;\n}\nexports.keyPublicFromPrivate = function (privKey) {\n\tconst strippedPrivateKey = stripHexPrefix(privKey);\n\tlet key = ec.keyFromPrivate(strippedPrivateKey, 'hex');\n\treturn key.getPublic('hex').slice(2); // se la chiave pubblica e' piu' lunga di 64 bisogna fare slice(2) per tagliare lo 04 iniziale usano key.getPublic('hex');\n}\n\nexports.getCleanPrivateKey = function (privKey) {\n\tconst strippedPrivateKey = stripHexPrefix(privKey);\n\tlet key = ec.keyFromPrivate(strippedPrivateKey, 'hex');\n\treturn key.getPrivate('hex');\n}\n\nlet addressFromPublic = function (pubkey) {\n\treturn sha3(Buffer.from(pubkey, 'hex')).slice(24); // Only take the lower 160bits of the hash\n}\nexports.verify = function (msgHash, signature, pubkey) {\n\tlet r = ec.verify(msgHash, signature, Buffer.from('04' + pubkey, 'hex'));\n\treturn ec.verify(msgHash, signature, Buffer.from('04' + pubkey, 'hex')); // need 04 header\n}\nexports.check = function (msgHash, signature, privkey) {\n\tlet key = ec.keyFromPrivate(privkey, 'hex');\n\treturn key.verify(msgHash, signature);\n}\nexports.recovery = function (msgHash, signature, recoveryParam) {\n\tlet msg = new Buffer.from(msgHash, 'hex');\n\treturn ec.recoverPubKey(msg, signature, recoveryParam).encode('hex').slice(2);\n}\nexports.sign = function (msgHash, privkey) {\n\treturn ec.sign(msgHash, Buffer.from(privkey, 'hex'), {\n\t\tcanonical: true\n\t}); // canonical e' importante per avere risultati uguali alle altre librerie. funzionerebbe lo stesso perche' userebbe nonce diverso\n}\n\n// let isHexPrefixed = function (str) {\n// \treturn str.slice(0, 2) === '0x';\n// }\n// let stripHexPrefix = function (str) {\n// \tif (typeof str !== 'string') return str\n// \treturn isHexPrefixed(str) ? str.slice(2) : str\n// }\nexports.toChecksumAddress = function (address) {\n\taddress = stripHexPrefix(address).toLowerCase()\n\tlet hash = sha3(address);\n\tlet ret = '0x'\n\tfor (let i = 0; i < address.length; i++) {\n\t\tif (parseInt(hash[i], 16) >= 8) {\n\t\t\tret += address[i].toUpperCase()\n\t\t} else {\n\t\t\tret += address[i]\n\t\t}\n\t}\n\treturn ret\n}\nlet isChecksumAddress = function (address) {\n\treturn address == exports.toChecksumAddress(address);\n}\nexports.validateEtherAddress = function (address) {\n\tif (address.substring(0, 2) != \"0x\") return false;\n\tif (!/^(0x)?[0-9a-f]{40}$/i.test(address)) return false;\n\tif (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) return true;\n\treturn isChecksumAddress(address);\n}\nlet isValidAddress = function (address) {\n\tif (address && address == \"0x0000000000000000000000000000000000000000\") return false;\n\tif (address)\n\t\treturn exports.validateEtherAddress(address);\n\treturn false;\n}\nlet isNumeric = function (n) {\n\treturn !isNaN(parseFloat(n)) && isFinite(n);\n}\nlet sanitizeHex = function (hex) {\n\thex = hex.substring(0, 2) == '0x' ? hex.substring(2) : hex;\n\tif (hex == \"\") return \"\";\n\treturn '0x' + padLeftEven(hex);\n}\n// let trimHexZero = function (hex) {\n// \tif (hex == \"0x00\" || hex == \"0x0\") return \"0x0\";\n// \thex = sanitizeHex(hex);\n// \thex = hex.substring(2).replace(/^0+/, '');\n// \treturn '0x' + hex;\n// }\nlet padLeftEven = function (hex) {\n\thex = hex.length % 2 != 0 ? '0' + hex : hex;\n\treturn hex;\n}\nlet padLeft = function (n, width, z) {\n\tz = z || '0';\n\tn = n + '';\n\treturn n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n}\n\nlet getNakedAddress = function (address) {\n\treturn address.toLowerCase().replace('0x', '');\n}\nlet aes_128_ctr_encrypt = function (text, key, iv) {\n\tlet wiv = CryptoJS.enc.Hex.parse(iv.toString('hex'));\n\tlet wdk = CryptoJS.enc.Hex.parse(key.toString('hex'));\n\tlet wpr = CryptoJS.enc.Hex.parse(text);\n\tlet cipher = CryptoJS.AES.encrypt(wpr, wdk, {\n\t\tmode: CryptoJS.mode.CTR,\n\t\tiv: wiv,\n\t\tpadding: CryptoJS.pad.NoPadding\n\t});\n\treturn cipher.ciphertext.toString();\n}\nlet aes_128_decrypt = function (ciphertext, derivedKey, iv, mode) {\n\tlet wiv = CryptoJS.enc.Hex.parse(iv);\n\tlet wdk = CryptoJS.enc.Hex.parse(derivedKey.toString('hex'));\n\tlet cip = CryptoJS.enc.Hex.parse(ciphertext);\n\tlet cipher = CryptoJS.algo.AES.createDecryptor(wdk, {\n\t\tmode: mode,\n\t\tiv: wiv,\n\t\tpadding: CryptoJS.pad.NoPadding\n\t});\n\treturn cipher.process(cip).toString() + cipher.finalize().toString();\n}\nlet aes_128_ctr_decrypt = function (text, key, iv) {\n\treturn aes_128_decrypt(text, key, iv, CryptoJS.mode.CTR);\n}\nlet pbkdf2 = function (password, salt, c, dkLen) {\n\tsalt = CryptoJS.enc.Hex.parse(salt);\n\tlet derivedKey = CryptoJS.PBKDF2(password, salt, {\n\t\titerations: c,\n\t\tkeySize: dkLen / 4,\n\t\thasher: hasher\n\t});\n\treturn Buffer.from(derivedKey.toString(), \"hex\");\n}\nlet pbkdf2_ethsale = function (password, c, dkLen) {\n\tlet salt = CryptoJS.enc.Utf8.parse(password);\n\tlet derivedKey = CryptoJS.PBKDF2(password, salt, {\n\t\titerations: c,\n\t\tkeySize: dkLen / 4,\n\t\thasher: hasher\n\t});\n\treturn Buffer.from(derivedKey.toString(), \"hex\");\n}\n\n\nlet fromV3 = function (input, password) {\n\tlet json = JSON.parse(input);\n\tlet jsonMnemonicPhrase = json.mnemonicPhrase;\n\tjson = JSON.parse(input.toLowerCase());\n\tif (json.version !== 3) {\n\t\tthrow new Error('Not a V3 wallet');\n\t}\n\tlet crypto = json.crypto;\n\n\tlet derivedKey;\n\tlet kdfparams = crypto.kdfparams;\n\tif (crypto.kdf === 'scrypt') {\n\t\tderivedKey = scrypt(password, kdfparams.salt, kdfparams.n, kdfparams.r, kdfparams.p, kdfparams.dklen);\n\t} else if (crypto.kdf === 'pbkdf2') {\n\t\tif (kdfparams.prf !== 'hmac-sha256') {\n\t\t\tthrow 'Unsupported parameters to PBKDF2'\n\t\t}\n\t\tderivedKey = pbkdf2(password, kdfparams.salt, kdfparams.c, kdfparams.dklen)\n\n\t} else {\n\t\tthrow 'Unsupported key derivation scheme'\n\t}\n\tlet ciphertext = new Buffer.from(crypto.ciphertext, 'hex')\n\n\tlet mac = sha3(Buffer.concat([derivedKey.slice(16, 32), ciphertext]))\n\tif (mac.toString('hex') !== json.crypto.mac) {\n\t\tthrow new Error('Key derivation failed - possibly wrong passphrase')\n\t}\n\n\tlet mnemonicPhrase;\n\tif (jsonMnemonicPhrase && jsonMnemonicPhrase.encryptedMessage && jsonMnemonicPhrase.salt && jsonMnemonicPhrase.iv) {\n\t\ttry {\n\t\t\tmnemonicPhrase = decryptMessage(jsonMnemonicPhrase.encryptedMessage, jsonMnemonicPhrase.salt, jsonMnemonicPhrase.iv, password);\n\t\t} catch (ex) {\n\t\t\tconsole.log(ex);\n\t\t}\n\t}\n\n\treturn {\n\t\tkey: aes_128_decrypt(crypto.ciphertext, derivedKey.slice(0, 16), crypto.cipherparams.iv, CryptoJS.mode.CTR),\n\t\tmnemonicPhrase: mnemonicPhrase\n\t};\n}\n\nlet decodeEncryptedPrivate = function (cipher, password) {\n\tlet ciphertext = new Buffer.from(cipher, 'base64')\n\tif (ciphertext.slice(0, 8).toString() === 'Salted__') {\n\t\tlet bytes = CryptoJS.AES.decrypt(cipher, password);\n\t\treturn bytes.toString(CryptoJS.enc.Utf8);\n\t}\n\tcipher = {\n\t\tsalt: ciphertext.slice(8, 16),\n\t\tciphertext: ciphertext.slice(16)\n\t}\n\tlet evp = CryptoJS.EvpKDF(password, cipher.salt, {\n\t\tkeySize: 32 / 8,\n\t\titerations: (32 + 16) / 16\n\t});\n\treturn aes_256_decrypt(cipher.ciphertext, evp.key, evp.iv, CryptoJS.mode.CBC);\n}\nlet aes_256_decrypt = function (ciphertext, derivedKey, iv, mode) {\n\tlet wiv = CryptoJS.enc.Hex.parse(iv);\n\tlet wdk = CryptoJS.enc.Hex.parse(derivedKey.toString('hex'));\n\tlet cip = CryptoJS.enc.Hex.parse(ciphertext);\n\tlet cipher = CryptoJS.algo.AES.createDecryptor(wdk, {\n\t\tmode: mode,\n\t\tiv: wiv\n\t});\n\treturn cipher.process(cip).toString() + cipher.finalize().toString();\n}\nlet fromEthSale = function (input, password) {\n\tlet json = JSON.parse(input);\n\tlet encseed = json.encseed;\n\n\tlet derivedKey = pbkdf2_ethsale(password, 2000, 32);\n\tlet decrypted = aes_128_decrypt(encseed.slice(16), derivedKey.slice(0, 16), encseed.slice(0, 16), CryptoJS.mode.CBC); // 32 perche' e' in hex e non buffer\n\n\tlet privkey = sha3(Buffer.from(decrypted, 'hex'));\n\tlet address = exports.addressFromPrivate(privkey);\n\tif (address !== json.ethaddr) throw 'Decoded key mismatch - possibly wrong passphrase';\n\treturn privkey;\n}\nlet fromMyEtherWallet = function (input, password) {\n\tlet json = JSON.parse(input)\n\tif (!json.locked) {\n\t\tif (json.private.length !== 64) throw 'Invalid private key length';\n\t\treturn json.private;\n\t}\n\tlet cipher = json.encrypted ? json.private.slice(0, 128) : json.private\n\treturn decodeEncryptedPrivate(cipher, password);\n}\nlet fromV2 = function (input) {\n\tlet json = JSON.parse(input);\n\tif (json.privKey.length !== 64) throw new 'Invalid private key length';\n\treturn json.privkey;\n}\nexports.newBN = function (val) {\n\tlet N = ec.n.clone();\n\tN._init(val.toString('hex'), 'hex');\n\treturn N;\n}\n// MALEDETTI BITCOINER\nlet MASTER_SECRET = 'Bitcoin seed';\nlet HARDENED_OFFSET = 0x80000000;\nlet privateKeyTweakAdd = function (privateKey, tweak) {\n\tlet bn = exports.newBN(tweak);\n\tif (bn.cmp(ec.n) >= 0) throw \"Private TweakAddFail\";\n\tbn.iadd(exports.newBN(privateKey));\n\tif (bn.cmp(ec.n) >= 0) bn.isub(ec.n);\n\tif (bn.isZero()) throw \"Private TweakAddFail\";\n\treturn bn.toArrayLike(Buffer, 'be', 32);\n};\nlet publicKeyTweakAdd = function (publicKey, tweak, compressed) {\n\t//let pair = loadPublicKey(publicKey);\n\tlet pair = ec.fromPublic(publickey, 'hex');\n\tif (pair === null) throw \"Public TweakAddFail\";\n\ttweak = exports.newBN(tweak);\n\tif (tweak.cmp(ec.n) >= 0) throw \"Public TweakAddFail\";\n\treturn Buffer.from(ec.g.mul(tweak).add(pair.pub).encode(true, compressed));\n};\nlet derive = function (hdkey, path) {\n\tlet entries = path.split('/');\n\tentries.forEach(function (c, i) {\n\t\tif (i == 0)\n\t\t\treturn;\n\t\tlet hardened = c.length > 1 && c[c.length - 1] === \"'\";\n\t\tlet childIndex = parseInt(c, 10); // & (HARDENED_OFFSET - 1)\n\t\tif (hardened) childIndex += HARDENED_OFFSET;\n\t\thdkey = deriveChild(hdkey, childIndex);\n\t});\n\treturn hdkey;\n};\nlet DoPublicKey = function (hd) {\n\tlet key = ec.keyFromPrivate(hd.privateKey);\n\t//hd.publicKey = Buffer.from('02' + key.getPublic('hex').slice(2,66),'hex');\n\thd.publicKey = Buffer.from(key.getPublic(true, 'hex').slice(0, 66), 'hex');\n}\n\nlet deriveChild = function (babbo, index) {\n\tlet isHardened = index >= HARDENED_OFFSET;\n\tlet indexBuffer = new Buffer.alloc(4);\n\tindexBuffer.writeUInt32BE(index, 0);\n\tlet data;\n\n\tif (isHardened) {\n\t\tlet pk = babbo.privateKey;\n\t\tlet zb = new Buffer.from([0]);\n\t\tpk = Buffer.concat([zb, pk]);\n\t\tdata = Buffer.concat([pk, indexBuffer]);\n\t} else {\n\t\tdata = Buffer.concat([babbo.publicKey, indexBuffer]);\n\t}\n\tlet wordArray = CryptoJS.enc.Hex.parse(data.toString('hex'));\n\tlet codeArray = CryptoJS.enc.Hex.parse(babbo.chainCode.toString('hex'));\n\tlet I = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA512, codeArray).finalize(wordArray).toString();\n\n\tlet IL = Buffer.from(I.slice(0, 64), 'hex');\n\tlet IR = Buffer.from(I.slice(64), 'hex');\n\tlet hd = {};\n\tif (babbo.privateKey) {\n\t\ttry {\n\t\t\thd.privateKey = privateKeyTweakAdd(babbo.privateKey, IL);\n\t\t\tDoPublicKey(hd);\n\t\t} catch (err) {\n\t\t\treturn deriveChild(babbo, index + 1);\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\thd.publicKey = publicKeyTweakAdd(babbo.publicKey, IL, true);\n\t\t} catch (err) {\n\t\t\treturn deriveChild(babbo, index + 1, isHardened);\n\t\t}\n\t}\n\thd.chainCode = IR;\n\treturn hd;\n}\nlet masterSeed = function (mnemonic, password) {\n\tlet master;\n\tif (mnemonic.indexOf(' ') < 0 && mnemonic.length == 128)\n\t\tmaster = mnemonic;\n\telse\n\t\tmaster = bip39.mnemonicToSeedSync(mnemonic, password);\n\tlet B = Buffer.from(master, 'hex');\n\tlet wordArray = CryptoJS.enc.Hex.parse(B.toString('hex'));\n\tlet I = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA512, MASTER_SECRET).finalize(wordArray).toString();\n\tlet hd = {\n\t\tprivateKey: Buffer.from(I.substr(0, 64), 'hex'),\n\t\tchainCode: Buffer.from(I.substr(64), 'hex')\n\t};\n\tDoPublicKey(hd);\n\treturn hd;\n}\n\nexports.getHD = function (mnemonic, password) {\n\tlet master = bip39.mnemonicToSeedSync(mnemonic, password);\n\tlet B = Buffer.from(master, 'hex');\n\tlet wordArray = CryptoJS.enc.Hex.parse(B.toString('hex'));\n\tlet I = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA512, MASTER_SECRET).finalize(wordArray).toString();\n\tlet hd = {\n\t\tseed: master.toString(),\n\t\tprivateKey: I.substr(0, 64)\n\t};\n\treturn hd;\n}\nexports.generateHD = function (lan) {\n\treturn bip39.generateMnemonic(128, null, lan);\n}\nexports.getChangeAccounts = function (mnemonic, password, index, count, alt, symbol) {\n\treturn exports.getMnemonicAccounts(mnemonic, password, index, count, alt, symbol, 1);\n}\nexports.getMnemonicAccounts = function (mnemonic, password, index, count, alt, symbol, change) {\n\tlet hdkey = masterSeed(mnemonic, password);\n\tlet e = exports.uccs[symbol];\n\tlet path = e.path;\n\tif (symbol == 'ETH' || (typeof (alt) == 'string' && alt.substr(0, 2) == \"m/\")) { }\n\n\tif (alt && !isNaN(alt)) {\n\t\talt = path[alt];\n\t}\n\n\tlet ret = [];\n\n\tif (typeof (alt) == 'string' && alt.substr(0, 2) == \"m/\") {\n\t\tpath = alt;\n\t\tif (!path) {\n\t\t\tif (alt == 'ledger')\n\t\t\t\tpath = e.path[1];\n\t\t\telse if (alt == 'eidoo')\n\t\t\t\tpath = e.path[2];\n\t\t\telse\n\t\t\t\tpath = e.path[0];\n\t\t}\n\n\t\tfor (let limit = index + count; index < limit; index++) {\n\t\t\tlet derived = derive(hdkey, path + \"/\" + index);\n\t\t\tlet privkey = derived.privateKey.toString('hex');\n\t\t\tlet address = exports.toChecksumAddress(exports.addressFromPrivate(privkey));\n\t\t\tlet rec = {\n\t\t\t\tprivateKey: privkey,\n\t\t\t\taddress: address\n\t\t\t};\n\t\t\tret.push(rec);\n\t\t}\n\t\treturn ret;\n\t}\n\t// if (change)\n\t// \tpath = path.substr(0, path.length - 2) + '1';\n\t// let ret = [];\n\t// for (let limit = index + count; index < limit; index++) {\n\t// \tlet rec = {};\n\t// \tlet derived = derive(hdkey, path + \"/\" + index);\n\t// \tlet privkey = derived.privateKey.toString('hex');\n\t// \trec.arcaic = {\n\t// \t\taddress: exports.getArcaicAddress(privkey, symbol),\n\t// \t\tprivateKeyBase58: exports.encodePrivateKey(privkey, symbol),\n\t// \t\tprivateKeyBase58Uncompressed: exports.encodePrivateKeyUncompressed(privkey, symbol)\n\t// \t};\n\t// \trec.legacy = {\n\t// \t\taddress: exports.getAddress(privkey, symbol),\n\t// \t\tprivateKeyBase58: exports.encodePrivateKey(privkey, symbol),\n\t// \t\tprivateKeyBase58Uncompressed: exports.encodePrivateKeyUncompressed(privkey, symbol)\n\t// \t};\n\n\t// \tif (e.p32) {\n\t// \t\tlet p = \"m/84\" + path.substr(4);\n\t// \t\tlet derived = derive(hdkey, p + \"/\" + index);\n\t// \t\tlet privkey = derived.privateKey.toString('hex');\n\t// \t\trec.bech32 = {\n\t// \t\t\taddress: exports.getBech32Address(privkey, symbol),\n\t// \t\t\tprivateKeyBase58: exports.encodePrivateKey(privkey, symbol),\n\t// \t\t\tprivateKeyBase58Uncompressed: exports.encodePrivateKeyUncompressed(privkey, symbol)\n\t// \t\t};\n\t// \t}\n\t// \tif (e.s58) {\n\t// \t\tlet p = \"m/49\" + path.substr(4);\n\t// \t\tlet derived = derive(hdkey, p + \"/\" + index);\n\t// \t\tlet privkey = derived.privateKey.toString('hex');\n\t// \t\trec.script = {\n\t// \t\t\taddress: exports.getScriptAddress(privkey, symbol),\n\t// \t\t\tprivateKeyBase58: exports.encodePrivateKey(privkey, symbol),\n\t// \t\t\tprivateKeyBase58Uncompressed: exports.encodePrivateKeyUncompressed(privkey, symbol)\n\t// \t\t};\n\t// \t}\n\t// \tret.push(rec);\n\t// }\n\treturn ret;\n}\n\nexports.getMnemonicAccounts2 = async function (mnemonic, password, index, count, alt, symbol) {\n\tconst hdwallet = HDWallet.fromMnemonic(mnemonic);\n\n\t// START BACKWARD COMPATIBILITY\n\tlet e = exports.uccs[symbol];\n\tlet path = e.path;\n\tif (alt && !isNaN(alt)) {\n\t\tpath = path[alt];\n\t}\n\n\tif (!path || typeof (path) !== \"string\") {\n\t\tif (alt == 'ledger')\n\t\t\tpath = e.path[1];\n\t\telse if (alt == 'eidoo')\n\t\t\tpath = e.path[2];\n\t\telse\n\t\t\tpath = e.path[0];\n\t}\n\t// END BACKWARD COMPATIBILITY\n\n\tconst mywallet = hdwallet.derive(path);\n\n\tlet ret = [];\n\n\tfor (let i = 0; i < count; i++) {\n\t\tlet derived = mywallet.derive(index + i);\n\t\tlet rec = {\n\t\t\tprivateKey: derived.getPrivateKey().toString('hex'),\n\t\t\taddress: `0x${derived.getAddress().toString('hex')}`\n\t\t}\n\t\tret.push(rec);\n\t}\n\n\treturn ret;\n}\n\nexports.hashTransaction = function (hex, symbol) {\n\tif (symbol == 'ETH' || symbol == 'ETHTEST') return sha3(Buffer.from(hex, 'hex'));\n\treturn bitcoinReverse(exports.sha256sha256(hex));\n}\nexports.makeComment = function (ascii, hex) {\n\treturn toHex(ascii + ' ' + hex);\n}\n\nexports.fromSignedMessageToAddress = function (message2Sign, signature) {\n\tconst message2SignHex = `0x${toHex(message2Sign)}`;\n\tconst msgBuffer = toBuffer(message2SignHex);\n\tconst msgHash = hashPersonalMessage(msgBuffer);\n\tconst signatureBuffer = toBuffer(signature);\n\tconst { r, s, v } = fromRpcSig(signatureBuffer);\n\tconst publicKey = ecrecover(\n\t\tmsgHash,\n\t\tv,\n\t\tr,\n\t\ts\n\t);\n\tconst addressBuffer = publicToAddress(publicKey);\n\tconst userAddress = bufferToHex(addressBuffer);\n\treturn {\n\t\tpublicKey, userAddress,\n\t};\n}\n\nexports.signMessage = function (message, privKey, returnECDSASignature = false) {\n\tconst bufferedMessage = toBuffer(`0x${toHex(message)}`);\n\tconst msgHash = hashPersonalMessage(bufferedMessage);\n\tconst privateKey = toBuffer(`0x${privKey}`);\n\tconst { r, s, v } = ecsign(msgHash, privateKey);\n\tif (returnECDSASignature) {\n\t\treturn { r, s, v };\n\t}\n\treturn toRpcSig(v, r, s).toString(\"hex\");\n}\n\nexports.validateTxHash = function (hash) {\n\tconst reg = new RegExp(/^0x([A-Fa-f0-9]{64})$/);\n\treturn reg.test(hash);\n}\n\nexports.padLeft = padLeft;\n\nexports.extractMinerFromBlock = function (block, chainId) {\n\tconst header = [\n\t\ttoBuffer(block.parentHash),\n\t\ttoBuffer(block.sha3Uncles),\n\t\ttoBuffer(block.miner),\n\t\ttoBuffer(block.stateRoot),\n\t\ttoBuffer(block.transactionsRoot),\n\t\ttoBuffer(block.receiptsRoot),\n\t\ttoBuffer(block.logsBloom),\n\t\tparseInt(block.difficulty),\n\t\tparseInt(block.number),\n\t\tparseInt(block.gasLimit),\n\t\tparseInt(block.gasUsed),\n\t\tparseInt(block.timestamp),\n\t\ttoBuffer(block.extraData.slice(0, block.extraData.length - 130)),\n\t\ttoBuffer(block.mixHash),\n\t\ttoBuffer(block.nonce)\n\t];\n\n\tconst msg = rlp.encode(header);\n\tconst msghash = keccak256(msg);\n\tconst sig = block.extraData.slice(-130);\n\tconst { r, s, v } = fromRpcSig(Buffer.from(sig, 'hex'));\n\tconst pub = ecrecover(msghash, v, r, s);\n\tconst addr = pubToAddress(pub);\n\n\treturn bufferToHex(addr);\n}\n\nexports.isValidPrivate = function (pk) {\n\ttry {\n\t\tconst pkBuffer = Buffer.from(pk, 'hex');\n\t\treturn isValidPrivate(pkBuffer);\n\t} catch (error) {\n\t\treturn false;\n\t}\n}"]}