UNPKG

303 kBSource Map (JSON)View Raw
1{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external \"@babel/runtime/regenerator\"","webpack:///external \"@babel/runtime/helpers/asyncToGenerator\"","webpack:///external \"@babel/runtime/helpers/classCallCheck\"","webpack:///external \"@babel/runtime/helpers/createClass\"","webpack:///external \"@babel/runtime/helpers/defineProperty\"","webpack:///external \"injectpromise\"","webpack:///external \"@babel/runtime/helpers/toConsumableArray\"","webpack:///external \"@babel/runtime/helpers/slicedToArray\"","webpack:///external \"@babel/runtime/helpers/typeof\"","webpack:///external \"bignumber.js\"","webpack:///external \"ethers\"","webpack:///external \"@babel/runtime/helpers/assertThisInitialized\"","webpack:///external \"semver\"","webpack:///external \"elliptic\"","webpack:///external \"@babel/runtime/helpers/possibleConstructorReturn\"","webpack:///external \"@babel/runtime/helpers/getPrototypeOf\"","webpack:///external \"@babel/runtime/helpers/inherits\"","webpack:///external \"axios\"","webpack:///external \"validator\"","webpack:///external \"eventemitter3\"","webpack:///external \"querystring\"","webpack:///./src/utils/base64.js","webpack:///./src/utils/bytes.js","webpack:///./src/utils/address.js","webpack:///./src/utils/code.js","webpack:///./src/utils/base58.js","webpack:///./src/utils/ethersUtils.js","webpack:///./src/utils/crypto.js","webpack:///./src/utils/accounts.js","webpack:///./src/utils/abi.js","webpack:///./src/utils/index.js","webpack:///./src/lib/transactionBuilder.js","webpack:///./src/lib/providers/index.js","webpack:///./src/lib/providers/HttpProvider.js","webpack:///./src/paramValidator/index.js","webpack:///./src/lib/trx.js","webpack:///./src/lib/contract/method.js","webpack:///./src/lib/contract/index.js","webpack:///./src/lib/plugin.js","webpack:///./src/lib/event.js","webpack:///./src/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","require","Base64","this","_keyStr","encode","input","chr1","chr2","chr3","enc1","enc2","enc3","enc4","output","length","charCodeAt","isNaN","charAt","encodeIgnoreUtf8","inputBytes","decode","replace","indexOf","String","fromCharCode","_utf8_decode","decodeToByteArray","_out2ByteArray","utftext","byteArray","Array","_utf8_encode","string","c2","c3","byte2hexStr","byte","Error","str","bytesToString","arr","one","toString","v","match","bytesLength","store","slice","st","parseInt","hextoString","hex","split","out","tmp","byteArray2hexStr","base64DecodeFromString","string64","base64EncodeToString","bytes","ADDRESS_SIZE","ADDRESS_PREFIX","ADDRESS_PREFIX_BYTE","ADDRESS_PREFIX_REGEX","bin2String","array","arrayEquals","array1","array2","strict","JSON","stringify","stringToBytes","len","push","hexChar2byte","isHexChar","hexStr2byteArray","j","k","strToDate","test","tempStrs","dateStrs","year","month","day","timeStrs","hour","minute","second","Date","isNumber","getStringType","ALPHABET","ALPHABET_MAP","BASE","encode58","buffer","digits","carry","reverse","map","digit","join","decode58","keccak256","utils","sha256","toUtf8Bytes","recoverAddress","SigningKey","AbiCoder","getBase58CheckAddress","addressBytes","hash0","SHA256","checkSum","concat","decodeBase58Address","base58Sting","address","offset","checkSum1","signTransaction","priKeyBytes","transaction","signature","ECKeySign","txID","isArray","includes","arrayToBase64String","a","btoa","signBytes","privateKey","contents","getRowBytesFromTransactionBase64","base64Data","bytesDecode","proto","protocol","Transaction","deserializeBinary","getRawData","serializeBinary","genPriKey","priKeyHex","EC","genKeyPair","getPrivate","computeAddress","pubBytes","hash","substring","getAddressFromPriKey","getPubKeyFromPriKey","decode58Check","addressStr","decodeCheck","decodeData","hash1","isAddressValid","base58Str","getBase58CheckAddressFromPriKeyBase64String","priKeyBase64String","getHexStrAddressFromPriKeyBase64String","getAddressFromPriKeyBase64String","pubkey","keyFromPrivate","getPublic","x","y","xHex","yHex","hashBytes","sign","id","recoveryParam","rHex","sHex","msgBytes","msgHex","passwordToAddress","password","pkToAddress","generateAccount","pubKeyBytes","publicKey","base58","abiCoder","decodeParams","names","types","ignoreMethodHash","type","reduce","obj","arg","index","substr","toLowerCase","encodeParams","values","TronWeb","toHex","self","isValidURL","url","validator","isURL","protocols","require_tld","isObject","isJson","parse","ex","isBoolean","bool","isBigNumber","number","BigNumber","constructor","isString","isFunction","isHex","isInteger","Number","hasProperty","hasProperties","properties","mapEvent","event","data","block","block_number","timestamp","block_timestamp","contract","contract_address","event_name","transaction_id","result","resourceNode","resource_Node","_unconfirmed","unconfirmed","_fingerprint","fingerprint","parseEvent","abi","inputs","padLeft","padding","amount","res","isNotNullOrUndefined","val","sleep","millis","Promise","resolve","setTimeout","code","accounts","crypto","ethersUtils","HttpProvider","host","timeout","user","headers","statusPage","instance","axios","baseURL","auth","request","then","payload","method","keys","params","Validator","tronWeb","param","msg","callback","Function","normalized","no","gt","lt","gte","lte","optional","se","isAddress","notPositive","notEqual","invalid","fromUtf8","resultManager","message","toUtf8","TransactionBuilder","injectPromise","injectpromise","to","from","defaultAddress","options","sendTrx","notValid","to_address","owner_address","permissionId","Permission_id","fullNode","err","tokenID","sendToken","asset_name","issuerAddress","buyer","purchaseToken","duration","resource","receiverAddress","undefined","freezeBalance","frozen_balance","frozen_duration","receiver_address","unfreezeBalance","withdrawBlockRewards","console","log","applyForSR","votes","voterAddress","vote","entries","srAddress","voteCount","vote_address","vote_count","createSmartContract","feeLimit","userFeePercentage","originEnergyLimit","callValue","tokenValue","tokenId","token_id","bytecode","parameters","entrys","payable","some","func","constructorParams","find","it","args","fee_limit","call_value","consume_user_resource_percent","origin_energy_limit","parameter","call_token_value","splice","_triggerSmartContract","_isConstant","triggerSmartContract","confirmed","contractAddress","functionSelector","assign","function_selector","ownerAddress","clearABI","trx","cache","contracts","brokerage","updateBrokerage","createToken","abbreviation","description","totalSupply","trxRatio","tokenRatio","saleStart","now","saleEnd","freeBandwidth","freeBandwidthLimit","frozenAmount","frozenDuration","voteScore","precision","abbr","total_supply","trx_num","num","start_time","end_time","free_asset_net_limit","public_free_asset_net_limit","frozen_supply","frozen_amount","frozen_days","fullnodeSatisfies","vote_score","accountName","updateAccount","account_name","accountId","setAccountId","startsWith","account_id","updateToken","new_limit","new_public_limit","createProposal","proposalID","deleteProposal","proposal_id","isApproval","voteProposal","is_add_approval","tokenName","tokenBalance","trxBalance","createTRXExchange","first_token_id","first_token_balance","second_token_id","second_token_balance","resources","firstTokenName","firstTokenBalance","secondTokenName","secondTokenBalance","createTokenExchange","exchangeID","tokenAmount","injectExchangeTokens","exchange_id","quant","withdrawExchangeTokens","tokenAmountSold","tokenAmountExpected","tradeExchangeTokens","fromAscii","expected","updateSetting","updateEnergyLimit","permissions","permission_name","threshold","weight","operations","ownerPermissions","witnessPermissions","activesPermissions","updateAccountPermissions","checkPermissions","activesPermission","owner","witness","actives","newTxID","newTransaction","visible","alterTransaction","dataFormat","raw_data","extension","expiration","extendExpiration","addUpdateData","ETH_MESSAGE_HEADER","Trx","token","getCurrentBlock","getConfirmedCurrentBlock","solidityNode","defaultBlock","getBlockByHash","getBlockByNumber","getBlock","blockHash","blockID","getBlockTransactionCount","transactions","getTransactionFromBlock","transactionID","getTransaction","getConfirmedTransaction","_getTransactionInfoById","limit","getTransactionsRelated","getTransactionsToAddress","getTransactionsFromAddress","direction","all","tx","sort","b","account","getAccount","getAccountById","getAccountInfoById","getBalance","balance","getUnconfirmedAccount","getUnconfirmedAccountById","getUnconfirmedBalance","freeNetUsed","freeNetLimit","NetUsed","NetLimit","getBandwidth","assetIssue","tokens","_parseToken","getTokensIssuedByAddress","getTokenFromID","listNodes","nodes","port","start","end","startNum","endNum","getBlockRange","listSuperRepresentatives","witnesses","listTokens","timeUntilNextVoteCycle","Math","floor","getContract","useTronHeader","verifyMessage","verifySignature","defaultPrivateKey","multisig","signatureHex","signString","fromPrivateKey","multiSign","getSignWeight","signWeight","foundKey","permission","approved_list","getApprovedList","signedTransaction","sendRawTransaction","sendTransaction","transactionBuilder","proposal","getProposal","listProposals","proposals","getChainParameters","chainParameter","getAccountResources","exchange","getExchangeByID","listExchanges","exchanges","getNodeInfo","info","getTokenListByName","getTokenByID","_getReward","_getBrokerage","reward","messageBytes","messageDigest","recovered","tronAddress","base58Address","fromHex","signingKey","signDigest","getFunctionSelector","getParamTypes","decodeOutput","filter","Method","outputs","sha3","defaultOptions","shouldPollResponse","forEach","methodArgs","_call","send","_send","watch","_watch","deployed","stateMutability","constant_result","msg2","chunk","broadcast","error","checkResult","getTransactionInfo","resMessage","rawResponse","decoded","contractResult","keepTxID","eventServer","listener","lastBlock","since","getEvents","eventName","blockNumber","filters","onlyUnconfirmed","onlyConfirmed","getEventsByContractAddress","events","latestEvent","newEvents","priorEvent","reject","bindListener","clearInterval","setInterval","stop","Contract","eventListener","methods","methodInstances","props","loadAbi","eventCallback","_getEvents","__proto__","prop","methodCall","onMethod","methodName","inputData","decodeInput","at","startCallback","_startEventListener","_stopEventListener","Plugin","pluginNoOverride","disablePlugins","pluginInterface","requires","components","libs","plugged","skipped","plugin","semver","satisfies","version","fullClass","className","classInstanceName","component","Event","healthcheck","providers","isValidProvider","isConnected","sinceTimestamp","size","page","fromTimestamp","previousLastEventFingerprint","previousFingerprint","routeParams","warn","qs","querystring","response","getEventsByTransactionID","DEFAULT_VERSION","fullHost","setFullNode","setSolidityNode","setEventServer","setPrivateKey","fullnodeVersion","nodeInfo","configNodeInfo","codeVersion","abs","setAddress","emit","provider","knownProvider","setStatusPage","getFullnodeVersion","setServer","currentProviders","prefix","Buffer","fromDecimal","isFinite","padEnd","toBigNumber","toNumber","isLessThan","sun","div","times","EventEmitter"],"mappings":"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","file":"TronWeb.node.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 22);\n","module.exports = require(\"@babel/runtime/regenerator\");","module.exports = require(\"@babel/runtime/helpers/asyncToGenerator\");","module.exports = require(\"@babel/runtime/helpers/classCallCheck\");","module.exports = require(\"@babel/runtime/helpers/createClass\");","module.exports = require(\"@babel/runtime/helpers/defineProperty\");","module.exports = require(\"injectpromise\");","module.exports = require(\"@babel/runtime/helpers/toConsumableArray\");","module.exports = require(\"@babel/runtime/helpers/slicedToArray\");","module.exports = require(\"@babel/runtime/helpers/typeof\");","module.exports = require(\"bignumber.js\");","module.exports = require(\"ethers\");","module.exports = require(\"@babel/runtime/helpers/assertThisInitialized\");","module.exports = require(\"semver\");","module.exports = require(\"elliptic\");","module.exports = require(\"@babel/runtime/helpers/possibleConstructorReturn\");","module.exports = require(\"@babel/runtime/helpers/getPrototypeOf\");","module.exports = require(\"@babel/runtime/helpers/inherits\");","module.exports = require(\"axios\");","module.exports = require(\"validator\");","module.exports = require(\"eventemitter3\");","module.exports = require(\"querystring\");","export function Base64() {\n this._keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n this.encode = input => {\n let output = \"\";\n let chr1;\n let chr2;\n let chr3;\n let enc1;\n let enc2;\n let enc3;\n let enc4;\n let i = 0;\n\n while (i < input.length) {\n chr1 = input.charCodeAt(i++);\n chr2 = input.charCodeAt(i++);\n chr3 = input.charCodeAt(i++);\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2))\n enc3 = enc4 = 64;\n else if (isNaN(chr3))\n enc4 = 64;\n\n output = output +\n this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +\n this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);\n }\n\n return output;\n }\n\n this.encodeIgnoreUtf8 = inputBytes => {\n let output = \"\";\n let chr1;\n let chr2;\n let chr3;\n let enc1;\n let enc2;\n let enc3;\n let enc4;\n let i = 0;\n\n while (i < inputBytes.length) {\n chr1 = inputBytes[i++];\n chr2 = inputBytes[i++];\n chr3 = inputBytes[i++];\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2))\n enc3 = enc4 = 64;\n else if (isNaN(chr3))\n enc4 = 64;\n\n output = output +\n this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +\n this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);\n }\n\n return output;\n }\n\n this.decode = input => {\n let output = \"\";\n let chr1;\n let chr2;\n let chr3;\n let enc1;\n let enc2;\n let enc3;\n let enc4;\n let i = 0;\n\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n while (i < input.length) {\n enc1 = this._keyStr.indexOf(input.charAt(i++));\n enc2 = this._keyStr.indexOf(input.charAt(i++));\n enc3 = this._keyStr.indexOf(input.charAt(i++));\n enc4 = this._keyStr.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n output = output + String.fromCharCode(chr1);\n\n if (enc3 != 64)\n output = output + String.fromCharCode(chr2);\n\n if (enc4 != 64)\n output = output + String.fromCharCode(chr3);\n }\n\n return this._utf8_decode(output);\n }\n\n this.decodeToByteArray = input => {\n let output = \"\";\n let chr1;\n let chr2;\n let chr3;\n let enc1;\n let enc2;\n let enc3;\n let enc4;\n let i = 0;\n\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n while (i < input.length) {\n enc1 = this._keyStr.indexOf(input.charAt(i++));\n enc2 = this._keyStr.indexOf(input.charAt(i++));\n enc3 = this._keyStr.indexOf(input.charAt(i++));\n enc4 = this._keyStr.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n output = output + String.fromCharCode(chr1);\n\n if (enc3 != 64)\n output = output + String.fromCharCode(chr2);\n\n if (enc4 != 64)\n output = output + String.fromCharCode(chr3);\n }\n\n return this._out2ByteArray(output);\n }\n\n this._out2ByteArray = utftext => {\n const byteArray = new Array(utftext.length);\n\n let i = 0;\n let c = 0;\n\n while (i < utftext.length) {\n c = utftext.charCodeAt(i);\n byteArray[i] = c;\n i++;\n }\n\n return byteArray;\n }\n\n this._utf8_encode = string => {\n string = string.replace(/\\r\\n/g, \"\\n\");\n let utftext = \"\";\n\n for (let n = 0; n < string.length; n++) {\n const c = string.charCodeAt(n);\n\n if (c < 128) {\n utftext += String.fromCharCode(c);\n } else if ((c > 127) && (c < 2048)) {\n utftext += String.fromCharCode((c >> 6) | 192);\n utftext += String.fromCharCode((c & 63) | 128);\n } else {\n utftext += String.fromCharCode((c >> 12) | 224);\n utftext += String.fromCharCode(((c >> 6) & 63) | 128);\n utftext += String.fromCharCode((c & 63) | 128);\n }\n }\n\n return utftext;\n }\n\n this._utf8_decode = utftext => {\n let string = \"\";\n let i = 0;\n let c = 0;\n let c2 = 0;\n let c3 = 0;\n\n while (i < utftext.length) {\n c = utftext.charCodeAt(i);\n\n if (c < 128) {\n string += String.fromCharCode(c);\n i++;\n } else if ((c > 191) && (c < 224)) {\n c2 = utftext.charCodeAt(i + 1);\n string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n i += 2;\n } else {\n c2 = utftext.charCodeAt(i + 1);\n c3 = utftext.charCodeAt(i + 2);\n\n string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\n i += 3;\n }\n }\n\n return string;\n }\n}\n","import {Base64} from './base64';\n\nexport function byte2hexStr(byte) {\n if (typeof byte !== 'number')\n throw new Error('Input must be a number');\n\n if (byte < 0 || byte > 255)\n throw new Error('Input must be a byte');\n\n const hexByteMap = '0123456789ABCDEF';\n\n let str = '';\n str += hexByteMap.charAt(byte >> 4);\n str += hexByteMap.charAt(byte & 0x0f);\n\n return str;\n}\n\nexport function bytesToString(arr) {\n if (typeof arr === 'string')\n return arr;\n\n let str = '';\n\n for (let i = 0; i < arr.length; i++) {\n const one = arr[i].toString(2);\n const v = one.match(/^1+?(?=0)/);\n\n if (v && one.length === 8) {\n const bytesLength = v[0].length;\n let store = arr[i].toString(2).slice(7 - bytesLength);\n\n for (let st = 1; st < bytesLength; st++)\n store += arr[st + i].toString(2).slice(2);\n\n str += String.fromCharCode(parseInt(store, 2));\n i += bytesLength - 1;\n } else {\n str += String.fromCharCode(arr[i]);\n }\n }\n\n return str;\n}\n\nexport function hextoString(hex) {\n const arr = hex.replace(/^0x/, '').split('');\n let out = '';\n\n for (let i = 0; i < arr.length / 2; i++) {\n let tmp = `0x${arr[i * 2]}${arr[i * 2 + 1]}`;\n out += String.fromCharCode(tmp);\n }\n\n return out;\n}\n\nexport function byteArray2hexStr(byteArray) {\n let str = '';\n\n for (let i = 0; i < (byteArray.length); i++)\n str += byte2hexStr(byteArray[i]);\n\n return str;\n}\n\nexport function base64DecodeFromString(string64) {\n return new Base64().decodeToByteArray(string64);\n}\n\nexport function base64EncodeToString(bytes) {\n const b = new Base64();\n const string64 = b.encodeIgnoreUtf8(bytes);\n\n return string64\n}\n\n","export const ADDRESS_SIZE = 34;\nexport const ADDRESS_PREFIX = \"41\";\nexport const ADDRESS_PREFIX_BYTE = 0x41;\nexport const ADDRESS_PREFIX_REGEX = /^(41)/;\n","import {\n byte2hexStr,\n bytesToString,\n hextoString,\n byteArray2hexStr,\n base64DecodeFromString,\n base64EncodeToString\n} from './bytes';\n\nexport function bin2String(array) {\n // TODO Do we need this alias?\n return bytesToString(array);\n}\n\nexport function arrayEquals(array1, array2, strict) {\n if (array1.length != array2.length)\n return false;\n\n let i;\n\n for (i = 0; i < array1.length; i++) {\n if (strict) {\n if (array1[i] != array2[i])\n return false;\n } else if (JSON.stringify(array1[i]) != JSON.stringify(array2[i]))\n return false;\n }\n\n return true;\n}\n\nexport function stringToBytes(str) {\n\n if (typeof str !== 'string')\n throw new Error('The passed string is not a string')\n\n const bytes = new Array();\n let len;\n let c;\n\n len = str.length;\n\n for (let i = 0; i < len; i++) {\n c = str.charCodeAt(i);\n\n if (c >= 0x010000 && c <= 0x10FFFF) {\n bytes.push(((c >> 18) & 0x07) | 0xF0);\n bytes.push(((c >> 12) & 0x3F) | 0x80);\n bytes.push(((c >> 6) & 0x3F) | 0x80);\n bytes.push((c & 0x3F) | 0x80);\n } else if (c >= 0x000800 && c <= 0x00FFFF) {\n bytes.push(((c >> 12) & 0x0F) | 0xE0);\n bytes.push(((c >> 6) & 0x3F) | 0x80);\n bytes.push((c & 0x3F) | 0x80);\n } else if (c >= 0x000080 && c <= 0x0007FF) {\n bytes.push(((c >> 6) & 0x1F) | 0xC0);\n bytes.push((c & 0x3F) | 0x80);\n } else bytes.push(c & 0xFF);\n }\n\n return bytes;\n}\n\nexport {byte2hexStr, bytesToString, hextoString, byteArray2hexStr, base64DecodeFromString, base64EncodeToString}\n\nexport function hexChar2byte(c) {\n let d;\n\n if (c >= 'A' && c <= 'F')\n d = c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n else if (c >= 'a' && c <= 'f')\n d = c.charCodeAt(0) - 'a'.charCodeAt(0) + 10;\n else if (c >= '0' && c <= '9')\n d = c.charCodeAt(0) - '0'.charCodeAt(0);\n\n if (typeof d === 'number')\n return d;\n else\n throw new Error('The passed hex char is not a valid hex char');\n}\n\nexport function isHexChar(c) {\n if ((c >= 'A' && c <= 'F') ||\n (c >= 'a' && c <= 'f') ||\n (c >= '0' && c <= '9')) {\n return 1;\n }\n\n return 0;\n}\n\nexport function hexStr2byteArray(str) {\n if (typeof str !== 'string')\n throw new Error('The passed string is not a string')\n\n const byteArray = Array();\n let d = 0;\n let j = 0;\n let k = 0;\n\n for (let i = 0; i < str.length; i++) {\n const c = str.charAt(i);\n\n if (isHexChar(c)) {\n d <<= 4;\n d += hexChar2byte(c);\n j++;\n\n if (0 === (j % 2)) {\n byteArray[k++] = d;\n d = 0;\n }\n } else\n throw new Error('The passed hex char is not a valid hex string')\n }\n\n return byteArray;\n}\n\n//yyyy-MM-DD HH-mm-ss\nexport function strToDate(str) {\n\n if (!/^\\d{4}-\\d{2}-\\d{2}( \\d{2}-\\d{2}-\\d{2}|)/.test(str))\n throw new Error('The passed date string is not valid')\n\n const tempStrs = str.split(\" \");\n const dateStrs = tempStrs[0].split(\"-\");\n const year = parseInt(dateStrs[0], 10);\n const month = parseInt(dateStrs[1], 10) - 1;\n const day = parseInt(dateStrs[2], 10);\n\n if (tempStrs.length > 1) {\n const timeStrs = tempStrs[1].split(\"-\");\n const hour = parseInt(timeStrs[0], 10);\n const minute = parseInt(timeStrs[1], 10);\n const second = parseInt(timeStrs[2], 10);\n\n return new Date(year, month, day, hour, minute, second);\n }\n\n return new Date(year, month, day);\n}\n\nexport function isNumber(c) {\n if (c >= '0' && c <= '9')\n return 1;\n\n return 0;\n}\n\n//return 1: address --- 20Bytes HexString\n//return 2: blockNumber ------ Decimal number\n//return 3: assetName ------ String\n//return other: error\nexport function getStringType(str) {\n if (null == str)\n return -1;\n\n if (typeof (str) != 'string')\n return -1;\n\n if (str.length == 0 || str == \"\")\n return -1;\n\n let i = 0;\n\n // TODO Should we return 1 if someone passes a full, 42-chars long address?\n // if (str.length == 42 && /^41/.test(str)) {\n // for (; i < 40; i++) {\n // var c = str.charAt(i+2);\n //\n // if (!isHexChar(c))\n // break;\n // }\n // } else\n if (str.length == 40) {\n for (; i < 40; i++) {\n var c = str.charAt(i);\n\n if (!isHexChar(c))\n break;\n }\n }\n\n if (i == 40)\n return 1; //40 Hex, Address\n\n for (i = 0; i < str.length; i++) {\n var c = str.charAt(i);\n\n if (!isNumber(c))\n break;\n }\n\n if (i == str.length)\n return 2; // All Decimal number, BlockNumber\n\n for (i = 0; i < str.length; i++) {\n var c = str.charAt(i);\n\n if (c > ' ')\n return 3; // At least one visible character\n }\n\n return -1;\n}\n","const ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\nconst ALPHABET_MAP = {};\n\nfor (let i = 0; i < ALPHABET.length; i++)\n ALPHABET_MAP[ALPHABET.charAt(i)] = i;\n\nconst BASE = 58;\n\nexport function encode58(buffer) {\n if (buffer.length === 0)\n return '';\n\n let i;\n let j;\n\n const digits = [0];\n\n for (i = 0; i < buffer.length; i++) {\n for (j = 0; j < digits.length; j++)\n digits[j] <<= 8;\n\n digits[0] += buffer[i];\n let carry = 0;\n\n for (j = 0; j < digits.length; ++j) {\n digits[j] += carry;\n carry = (digits[j] / BASE) | 0;\n digits[j] %= BASE\n }\n\n while (carry) {\n digits.push(carry % BASE);\n carry = (carry / BASE) | 0\n }\n }\n\n for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++)\n digits.push(0);\n\n return digits.reverse().map(digit => ALPHABET[digit]).join('');\n}\n\nexport function decode58(string) {\n if (string.length === 0)\n return [];\n\n let i;\n let j;\n\n const bytes = [0];\n\n for (i = 0; i < string.length; i++) {\n const c = string[i];\n\n if (!(c in ALPHABET_MAP))\n throw new Error('Non-base58 character');\n\n for (j = 0; j < bytes.length; j++)\n bytes[j] *= BASE;\n\n bytes[0] += ALPHABET_MAP[c];\n let carry = 0;\n\n for (j = 0; j < bytes.length; ++j) {\n bytes[j] += carry;\n carry = bytes[j] >> 8;\n bytes[j] &= 0xff;\n }\n\n while (carry) {\n bytes.push(carry & 0xff);\n carry >>= 8;\n }\n }\n\n for (i = 0; string[i] === '1' && i < string.length - 1; i++)\n bytes.push(0);\n\n return bytes.reverse();\n}\n","\nimport {utils} from 'ethers';\n\nconst keccak256 = utils.keccak256;\nconst sha256 = utils.sha256;\nconst toUtf8Bytes = utils.toUtf8Bytes;\nconst recoverAddress = utils.recoverAddress;\nconst SigningKey = utils.SigningKey;\nconst AbiCoder = utils.AbiCoder;\n\nexport {\n keccak256,\n sha256,\n toUtf8Bytes,\n recoverAddress,\n SigningKey,\n AbiCoder\n}\n","import {ADDRESS_PREFIX, ADDRESS_PREFIX_BYTE, ADDRESS_SIZE} from './address';\nimport {base64EncodeToString} from './code';\nimport {base64DecodeFromString, hexStr2byteArray} from './code';\nimport {encode58, decode58} from './base58';\nimport {byte2hexStr, byteArray2hexStr} from './bytes';\nimport {ec as EC} from 'elliptic';\nimport {keccak256, sha256} from './ethersUtils';\n\nexport function getBase58CheckAddress(addressBytes) {\n const hash0 = SHA256(addressBytes);\n const hash1 = SHA256(hash0);\n\n let checkSum = hash1.slice(0, 4);\n checkSum = addressBytes.concat(checkSum);\n\n return encode58(checkSum);\n}\n\nexport function decodeBase58Address(base58Sting) {\n if (typeof (base58Sting) != 'string')\n return false;\n\n if (base58Sting.length <= 4)\n return false;\n\n let address = decode58(base58Sting);\n\n if (base58Sting.length <= 4)\n return false;\n\n const len = address.length;\n const offset = len - 4;\n const checkSum = address.slice(offset);\n\n address = address.slice(0, offset);\n\n const hash0 = SHA256(address);\n const hash1 = SHA256(hash0);\n const checkSum1 = hash1.slice(0, 4);\n\n if (checkSum[0] == checkSum1[0] && checkSum[1] == checkSum1[1] && checkSum[2] ==\n checkSum1[2] && checkSum[3] == checkSum1[3]\n ) {\n return address;\n }\n\n throw new Error('Invalid address provided');\n}\n\nexport function signTransaction(priKeyBytes, transaction) {\n if (typeof priKeyBytes === 'string')\n priKeyBytes = hexStr2byteArray(priKeyBytes);\n\n const txID = transaction.txID;\n const signature = ECKeySign(hexStr2byteArray(txID), priKeyBytes);\n\n if (Array.isArray(transaction.signature)) {\n if (!transaction.signature.includes(signature))\n transaction.signature.push(signature);\n } else\n transaction.signature = [signature];\n return transaction;\n}\n\nexport function arrayToBase64String(a) {\n return btoa(String.fromCharCode(...a));\n}\n\nexport function signBytes(privateKey, contents) {\n if (typeof privateKey === 'string')\n privateKey = hexStr2byteArray(privateKey);\n\n const hashBytes = SHA256(contents);\n const signBytes = ECKeySign(hashBytes, privateKey);\n\n return signBytes;\n}\n\nexport function getRowBytesFromTransactionBase64(base64Data) {\n const bytesDecode = base64DecodeFromString(base64Data);\n const transaction = proto.protocol.Transaction.deserializeBinary(bytesDecode);\n const raw = transaction.getRawData();\n\n return raw.serializeBinary();\n}\n\nexport function genPriKey() {\n const ec = new EC('secp256k1');\n const key = ec.genKeyPair();\n const priKey = key.getPrivate();\n\n let priKeyHex = priKey.toString('hex');\n\n while (priKeyHex.length < 64) {\n priKeyHex = `0${priKeyHex}`;\n }\n\n return hexStr2byteArray(priKeyHex);\n}\n\nexport function computeAddress(pubBytes) {\n if (pubBytes.length === 65)\n pubBytes = pubBytes.slice(1);\n\n const hash = keccak256(pubBytes).toString().substring(2);\n const addressHex = ADDRESS_PREFIX + hash.substring(24);\n\n return hexStr2byteArray(addressHex);\n}\n\nexport function getAddressFromPriKey(priKeyBytes) {\n let pubBytes = getPubKeyFromPriKey(priKeyBytes);\n return computeAddress(pubBytes);\n}\n\nexport function decode58Check(addressStr) {\n const decodeCheck = decode58(addressStr);\n\n if (decodeCheck.length <= 4)\n return false;\n\n const decodeData = decodeCheck.slice(0, decodeCheck.length - 4);\n const hash0 = SHA256(decodeData);\n const hash1 = SHA256(hash0);\n\n if (hash1[0] === decodeCheck[decodeData.length] &&\n hash1[1] === decodeCheck[decodeData.length + 1] &&\n hash1[2] === decodeCheck[decodeData.length + 2] &&\n hash1[3] === decodeCheck[decodeData.length + 3]) {\n return decodeData;\n }\n\n return false;\n}\n\nexport function isAddressValid(base58Str) {\n if (typeof (base58Str) !== 'string')\n return false;\n\n if (base58Str.length !== ADDRESS_SIZE)\n return false;\n\n let address = decode58(base58Str);\n\n if (address.length !== 25)\n return false;\n\n if (address[0] !== ADDRESS_PREFIX_BYTE)\n return false;\n\n const checkSum = address.slice(21);\n address = address.slice(0, 21);\n\n const hash0 = SHA256(address);\n const hash1 = SHA256(hash0);\n const checkSum1 = hash1.slice(0, 4);\n\n if (checkSum[0] == checkSum1[0] && checkSum[1] == checkSum1[1] && checkSum[2] ==\n checkSum1[2] && checkSum[3] == checkSum1[3]\n ) {\n return true\n }\n\n return false;\n}\n\nexport function getBase58CheckAddressFromPriKeyBase64String(priKeyBase64String) {\n const priKeyBytes = base64DecodeFromString(priKeyBase64String);\n const pubBytes = getPubKeyFromPriKey(priKeyBytes);\n const addressBytes = computeAddress(pubBytes);\n\n return getBase58CheckAddress(addressBytes);\n}\n\nexport function getHexStrAddressFromPriKeyBase64String(priKeyBase64String) {\n const priKeyBytes = base64DecodeFromString(priKeyBase64String);\n const pubBytes = getPubKeyFromPriKey(priKeyBytes);\n const addressBytes = computeAddress(pubBytes);\n const addressHex = byteArray2hexStr(addressBytes);\n\n return addressHex;\n}\n\nexport function getAddressFromPriKeyBase64String(priKeyBase64String) {\n const priKeyBytes = base64DecodeFromString(priKeyBase64String);\n const pubBytes = getPubKeyFromPriKey(priKeyBytes);\n const addressBytes = computeAddress(pubBytes);\n const addressBase64 = base64EncodeToString(addressBytes);\n\n return addressBase64;\n}\n\nexport function getPubKeyFromPriKey(priKeyBytes) {\n const ec = new EC('secp256k1');\n const key = ec.keyFromPrivate(priKeyBytes, 'bytes');\n const pubkey = key.getPublic();\n const x = pubkey.x;\n const y = pubkey.y;\n\n let xHex = x.toString('hex');\n\n while (xHex.length < 64) {\n xHex = `0${xHex}`;\n }\n\n let yHex = y.toString('hex');\n\n while (yHex.length < 64) {\n yHex = `0${yHex}`;\n }\n\n const pubkeyHex = `04${xHex}${yHex}`;\n const pubkeyBytes = hexStr2byteArray(pubkeyHex);\n\n return pubkeyBytes;\n}\n\nexport function ECKeySign(hashBytes, priKeyBytes) {\n const ec = new EC('secp256k1');\n const key = ec.keyFromPrivate(priKeyBytes, 'bytes');\n const signature = key.sign(hashBytes);\n const r = signature.r;\n const s = signature.s;\n const id = signature.recoveryParam;\n\n let rHex = r.toString('hex');\n\n while (rHex.length < 64) {\n rHex = `0${rHex}`;\n }\n\n let sHex = s.toString('hex');\n\n while (sHex.length < 64) {\n sHex = `0${sHex}`;\n }\n\n const idHex = byte2hexStr(id);\n const signHex = rHex + sHex + idHex;\n\n return signHex;\n}\n\nexport function SHA256(msgBytes) {\n const msgHex = byteArray2hexStr(msgBytes);\n const hashHex = sha256('0x' + msgHex).replace(/^0x/, '')\n return hexStr2byteArray(hashHex);\n}\n\nexport function passwordToAddress(password) {\n const com_priKeyBytes = base64DecodeFromString(password);\n const com_addressBytes = getAddressFromPriKey(com_priKeyBytes);\n\n return getBase58CheckAddress(com_addressBytes);\n}\n\nexport function pkToAddress(privateKey) {\n const com_priKeyBytes = hexStr2byteArray(privateKey);\n const com_addressBytes = getAddressFromPriKey(com_priKeyBytes);\n\n return getBase58CheckAddress(com_addressBytes);\n}\n","import {byteArray2hexStr} from './bytes';\nimport {\n getBase58CheckAddress,\n genPriKey,\n getAddressFromPriKey,\n getPubKeyFromPriKey\n} from './crypto';\n\nexport function generateAccount() {\n const priKeyBytes = genPriKey();\n const pubKeyBytes = getPubKeyFromPriKey(priKeyBytes);\n const addressBytes = getAddressFromPriKey(priKeyBytes);\n\n const privateKey = byteArray2hexStr(priKeyBytes);\n const publicKey = byteArray2hexStr(pubKeyBytes);\n\n return {\n privateKey,\n publicKey,\n address: {\n base58: getBase58CheckAddress(addressBytes),\n hex: byteArray2hexStr(addressBytes)\n }\n }\n}\n","import {AbiCoder} from './ethersUtils';\nimport TronWeb from 'index';\nimport {ADDRESS_PREFIX, ADDRESS_PREFIX_REGEX} from 'utils/address';\n\nconst abiCoder = new AbiCoder();\n\nexport function decodeParams(names, types, output, ignoreMethodHash) {\n\n if (!output || typeof output === 'boolean') {\n ignoreMethodHash = output;\n output = types;\n types = names;\n names = [];\n }\n\n if (ignoreMethodHash && output.replace(/^0x/, '').length % 64 === 8)\n output = '0x' + output.replace(/^0x/, '').substring(8);\n\n if (output.replace(/^0x/, '').length % 64)\n throw new Error('The encoded string is not valid. Its length must be a multiple of 64.');\n\n // workaround for unsupported trcToken type\n types = types.map(type => {\n if (/trcToken/.test(type)) {\n type = type.replace(/trcToken/, 'uint256')\n }\n return type\n })\n\n return abiCoder.decode(types, output).reduce((obj, arg, index) => {\n if (types[index] == 'address')\n arg = ADDRESS_PREFIX + arg.substr(2).toLowerCase();\n\n if (names.length)\n obj[names[index]] = arg;\n else obj.push(arg);\n\n return obj;\n }, names.length ? {} : []);\n}\n\nexport function encodeParams(types, values) {\n\n for (let i = 0; i < types.length; i++) {\n if (types[i] === 'address') {\n values[i] = TronWeb.address.toHex(values[i]).replace(ADDRESS_PREFIX_REGEX, '0x');\n }\n }\n\n return abiCoder.encode(types, values);\n}\n","import * as accounts from './accounts';\nimport * as base58 from './base58';\nimport * as bytes from './bytes';\nimport * as crypto from './crypto';\nimport * as code from './code';\nimport * as abi from './abi';\nimport * as ethersUtils from './ethersUtils';\n\nimport validator from 'validator';\nimport BigNumber from 'bignumber.js';\nimport {ADDRESS_PREFIX} from 'utils/address';\n\nconst utils = {\n isValidURL(url) {\n if (typeof url !== 'string')\n return false;\n return validator.isURL(url.toString(), {\n protocols: ['http', 'https'],\n require_tld: false\n });\n },\n\n isObject(obj) {\n return obj === Object(obj) && Object.prototype.toString.call(obj) !== '[object Array]';\n },\n\n isArray(array) {\n return Array.isArray(array);\n },\n\n isJson(string) {\n try {\n return !!JSON.parse(string);\n } catch (ex) {\n return false;\n }\n },\n\n isBoolean(bool) {\n return typeof bool === 'boolean';\n },\n\n isBigNumber(number) {\n return number && (number instanceof BigNumber || (number.constructor && number.constructor.name === 'BigNumber'));\n },\n\n isString(string) {\n return typeof string === 'string' || (string && string.constructor && string.constructor.name === 'String');\n },\n\n isFunction(obj) {\n return typeof obj === 'function';\n },\n\n isHex(string) {\n return (typeof string === 'string'\n && !isNaN(parseInt(string, 16))\n && /^(0x|)[a-fA-F0-9]+$/.test(string));\n },\n\n isInteger(number) {\n if (number === null)\n return false\n return Number.isInteger(\n Number(number)\n );\n },\n\n hasProperty(obj, property) {\n return Object.prototype.hasOwnProperty.call(obj, property);\n },\n\n hasProperties(obj, ...properties) {\n return properties.length && !properties.map(property => {\n return this.hasProperty(obj, property)\n }).includes(false);\n },\n\n mapEvent(event) {\n let data = {\n block: event.block_number,\n timestamp: event.block_timestamp,\n contract: event.contract_address,\n name: event.event_name,\n transaction: event.transaction_id,\n result: event.result,\n resourceNode: event.resource_Node || (event._unconfirmed ? 'fullNode' : 'solidityNode')\n };\n if (event._unconfirmed) {\n data.unconfirmed = event._unconfirmed\n }\n if (event._fingerprint) {\n data.fingerprint = event._fingerprint;\n }\n return data;\n },\n\n parseEvent(event, {inputs: abi}) {\n if (!event.result)\n return event;\n\n if (this.isObject(event.result)) {\n for (var i = 0; i < abi.length; i++) {\n let obj = abi[i];\n if (obj.type == 'address' && obj.name in event.result)\n event.result[obj.name] = ADDRESS_PREFIX + event.result[obj.name].substr(2).toLowerCase();\n }\n } else if (this.isArray(event.result)) {\n event.result = event.result.reduce((obj, result, index) => {\n const {\n name,\n type\n } = abi[index];\n\n if (type == 'address')\n result = ADDRESS_PREFIX + result.substr(2).toLowerCase();\n\n obj[name] = result;\n\n return obj;\n }, {});\n }\n\n return event;\n },\n\n padLeft(input, padding, amount) {\n let res = input.toString();\n\n while (res.length < amount)\n res = padding + res;\n\n return res;\n },\n\n isNotNullOrUndefined(val) {\n return val !== null && typeof val !== 'undefined';\n },\n\n async sleep(millis = 1000){\n return new Promise(resolve => setTimeout(resolve, millis));\n }\n}\n\nexport default {\n ...utils,\n code,\n accounts,\n base58,\n bytes,\n crypto,\n abi,\n ethersUtils\n};\n","import TronWeb from 'index';\nimport utils from 'utils';\nimport {AbiCoder} from 'utils/ethersUtils';\nimport Validator from 'paramValidator';\nimport {ADDRESS_PREFIX_REGEX} from 'utils/address';\nimport injectpromise from 'injectpromise';\n\nlet self;\n\n//helpers\n\nfunction toHex(value) {\n return TronWeb.address.toHex(value);\n}\n\nfunction fromUtf8(value) {\n return self.tronWeb.fromUtf8(value);\n}\n\nfunction resultManager(transaction, callback) {\n if (transaction.Error)\n return callback(transaction.Error);\n\n if (transaction.result && transaction.result.message) {\n return callback(\n self.tronWeb.toUtf8(transaction.result.message)\n );\n }\n\n return callback(null, transaction);\n}\n\n\nexport default class TransactionBuilder {\n constructor(tronWeb = false) {\n if (!tronWeb || !tronWeb instanceof TronWeb)\n throw new Error('Expected instance of TronWeb');\n self = this;\n this.tronWeb = tronWeb;\n this.injectPromise = injectpromise(this);\n this.validator = new Validator(tronWeb);\n }\n\n sendTrx(to = false, amount = 0, from = this.tronWeb.defaultAddress.hex, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(from)) {\n callback = from;\n from = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(from)) {\n options = from;\n from = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.sendTrx, to, amount, from, options);\n\n // accept amounts passed as strings\n amount = parseInt(amount)\n\n if (this.validator.notValid([\n {\n name: 'recipient',\n type: 'address',\n value: to\n },\n {\n name: 'origin',\n type: 'address',\n value: from\n },\n {\n names: ['recipient', 'origin'],\n type: 'notEqual',\n msg: 'Cannot transfer TRX to the same account'\n },\n {\n name: 'amount',\n type: 'integer',\n gt: 0,\n value: amount\n }\n ], callback))\n return;\n\n const data = {\n to_address: toHex(to),\n owner_address: toHex(from),\n amount: amount,\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/createtransaction', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n sendToken(to = false, amount = 0, tokenID = false, from = this.tronWeb.defaultAddress.hex, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(from)) {\n callback = from;\n from = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(from)) {\n options = from;\n from = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.sendToken, to, amount, tokenID, from, options);\n\n amount = parseInt(amount)\n if (this.validator.notValid([\n {\n name: 'recipient',\n type: 'address',\n value: to\n },\n {\n name: 'origin',\n type: 'address',\n value: from,\n },\n {\n names: ['recipient', 'origin'],\n type: 'notEqual',\n msg: 'Cannot transfer tokens to the same account'\n },\n {\n name: 'amount',\n type: 'integer',\n gt: 0,\n value: amount\n },\n {\n name: 'token ID',\n type: 'tokenId',\n value: tokenID\n }\n ], callback))\n return;\n\n const data = {\n to_address: toHex(to),\n owner_address: toHex(from),\n asset_name: fromUtf8(tokenID),\n amount: parseInt(amount)\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/transferasset', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n purchaseToken(issuerAddress = false, tokenID = false, amount = 0, buyer = this.tronWeb.defaultAddress.hex, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(buyer)) {\n callback = buyer;\n buyer = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(buyer)) {\n options = buyer;\n buyer = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.purchaseToken, issuerAddress, tokenID, amount, buyer, options);\n\n if (this.validator.notValid([\n {\n name: 'buyer',\n type: 'address',\n value: buyer\n },\n {\n name: 'issuer',\n type: 'address',\n value: issuerAddress\n },\n {\n names: ['buyer', 'issuer'],\n type: 'notEqual',\n msg: 'Cannot purchase tokens from same account'\n },\n {\n name: 'amount',\n type: 'integer',\n gt: 0,\n value: amount\n },\n {\n name: 'token ID',\n type: 'tokenId',\n value: tokenID\n }\n ], callback))\n return;\n\n const data = {\n to_address: toHex(issuerAddress),\n owner_address: toHex(buyer),\n asset_name: fromUtf8(tokenID),\n amount: parseInt(amount)\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/participateassetissue', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n freezeBalance(amount = 0, duration = 3, resource = \"BANDWIDTH\", address = this.tronWeb.defaultAddress.hex, receiverAddress = undefined, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(receiverAddress)) {\n callback = receiverAddress;\n receiverAddress = undefined;\n } else if (utils.isObject(receiverAddress)) {\n options = receiverAddress;\n receiverAddress = undefined;\n }\n\n if (utils.isFunction(address)) {\n callback = address;\n address = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(address)) {\n options = address;\n address = this.tronWeb.defaultAddress.hex;\n }\n\n if (utils.isFunction(duration)) {\n callback = duration;\n duration = 3;\n }\n\n if (utils.isFunction(resource)) {\n callback = resource;\n resource = \"BANDWIDTH\";\n }\n\n if (!callback)\n return this.injectPromise(this.freezeBalance, amount, duration, resource, address, receiverAddress, options);\n\n if (this.validator.notValid([\n {\n name: 'origin',\n type: 'address',\n value: address\n },\n {\n name: 'receiver',\n type: 'address',\n value: receiverAddress,\n optional: true\n },\n {\n name: 'amount',\n type: 'integer',\n gt: 0,\n value: amount\n },\n {\n name: 'duration',\n type: 'integer',\n gte: 3,\n value: duration\n },\n {\n name: 'resource',\n type: 'resource',\n value: resource,\n msg: 'Invalid resource provided: Expected \"BANDWIDTH\" or \"ENERGY'\n }\n ], callback))\n return;\n\n const data = {\n owner_address: toHex(address),\n frozen_balance: parseInt(amount),\n frozen_duration: parseInt(duration),\n resource: resource\n }\n\n if (utils.isNotNullOrUndefined(receiverAddress) && toHex(receiverAddress) !== toHex(address)) {\n data.receiver_address = toHex(receiverAddress)\n }\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/freezebalance', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n unfreezeBalance(resource = \"BANDWIDTH\", address = this.tronWeb.defaultAddress.hex, receiverAddress = undefined, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(receiverAddress)) {\n callback = receiverAddress;\n receiverAddress = undefined;\n } else if (utils.isObject(receiverAddress)) {\n options = receiverAddress;\n receiverAddress = undefined;\n }\n\n if (utils.isFunction(address)) {\n callback = address;\n address = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(address)) {\n options = address;\n address = this.tronWeb.defaultAddress.hex;\n }\n\n if (utils.isFunction(resource)) {\n callback = resource;\n resource = \"BANDWIDTH\";\n }\n\n if (!callback)\n return this.injectPromise(this.unfreezeBalance, resource, address, receiverAddress, options);\n\n if (this.validator.notValid([\n {\n name: 'origin',\n type: 'address',\n value: address\n },\n {\n name: 'receiver',\n type: 'address',\n value: receiverAddress,\n optional: true\n },\n {\n name: 'resource',\n type: 'resource',\n value: resource,\n msg: 'Invalid resource provided: Expected \"BANDWIDTH\" or \"ENERGY'\n }\n ], callback))\n return;\n\n const data = {\n owner_address: toHex(address),\n resource: resource\n }\n\n if (utils.isNotNullOrUndefined(receiverAddress) && toHex(receiverAddress) !== toHex(address)) {\n data.receiver_address = toHex(receiverAddress)\n }\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/unfreezebalance', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n withdrawBlockRewards(address = this.tronWeb.defaultAddress.hex, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(address)) {\n callback = address;\n address = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(address)) {\n options = address;\n address = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.withdrawBlockRewards, address, options);\n\n if (this.validator.notValid([\n {\n name: 'origin',\n type: 'address',\n value: address\n }\n ], callback))\n return;\n\n const data = {\n owner_address: toHex(address)\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/withdrawbalance', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n applyForSR(\n address = this.tronWeb.defaultAddress.hex,\n url = false,\n options,\n callback = false\n ) {\n console.log(toHex(address), utils.isObject(url))\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n if (utils.isObject(url) && utils.isValidURL(address)) {\n options = url;\n url = address;\n address = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.applyForSR, address, url, options);\n\n if (this.validator.notValid([\n {\n name: 'origin',\n type: 'address',\n value: address\n },\n {\n name: 'url',\n type: 'url',\n value: url,\n msg: 'Invalid url provided'\n }\n ], callback))\n return;\n\n console.log(toHex(address))\n\n const data = {\n owner_address: toHex(address),\n url: fromUtf8(url)\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/createwitness', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n vote(votes = {}, voterAddress = this.tronWeb.defaultAddress.hex, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(voterAddress)) {\n callback = voterAddress;\n voterAddress = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(voterAddress)) {\n options = voterAddress;\n voterAddress = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.vote, votes, voterAddress, options);\n\n if (this.validator.notValid([\n {\n name: 'voter',\n type: 'address',\n value: voterAddress\n },\n {\n name: 'votes',\n type: 'notEmptyObject',\n value: votes\n }\n ], callback))\n return;\n\n let invalid = false;\n\n votes = Object.entries(votes).map(([srAddress, voteCount]) => {\n if (invalid)\n return;\n\n if (this.validator.notValid([\n {\n name: 'SR',\n type: 'address',\n value: srAddress\n },\n {\n name: 'vote count',\n type: 'integer',\n gt: 0,\n value: voteCount,\n msg: 'Invalid vote count provided for SR: ' + srAddress\n }\n ]))\n return invalid = true;\n\n return {\n vote_address: toHex(srAddress),\n vote_count: parseInt(voteCount)\n };\n });\n\n if (invalid)\n return;\n\n const data = {\n owner_address: toHex(voterAddress),\n votes,\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/votewitnessaccount', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n createSmartContract(options = {}, issuerAddress = this.tronWeb.defaultAddress.hex, callback = false) {\n if (utils.isFunction(issuerAddress)) {\n callback = issuerAddress;\n issuerAddress = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.createSmartContract, options, issuerAddress);\n\n const feeLimit = options.feeLimit || 1_000_000_000;\n let userFeePercentage = options.userFeePercentage;\n if (typeof userFeePercentage !== 'number' && !userFeePercentage) {\n userFeePercentage = 100;\n }\n const originEnergyLimit = options.originEnergyLimit || 10_000_000;\n const callValue = options.callValue || 0;\n const tokenValue = options.tokenValue;\n const tokenId = options.tokenId || options.token_id;\n\n let {\n abi = false,\n bytecode = false,\n parameters = [],\n name = \"\"\n } = options;\n\n if (abi && utils.isString(abi)) {\n try {\n abi = JSON.parse(abi);\n } catch {\n return callback('Invalid options.abi provided');\n }\n }\n\n if (abi.entrys)\n abi = abi.entrys;\n\n if (!utils.isArray(abi))\n return callback('Invalid options.abi provided');\n\n\n const payable = abi.some(func => {\n return func.type == 'constructor' && func.payable;\n });\n\n if (this.validator.notValid([\n {\n name: 'bytecode',\n type: 'hex',\n value: bytecode\n },\n {\n name: 'feeLimit',\n type: 'integer',\n value: feeLimit,\n gt: 0,\n lte: 1_000_000_000\n },\n {\n name: 'callValue',\n type: 'integer',\n value: callValue,\n gte: 0\n },\n {\n name: 'userFeePercentage',\n type: 'integer',\n value: userFeePercentage,\n gte: 0,\n lte: 100\n },\n {\n name: 'originEnergyLimit',\n type: 'integer',\n value: originEnergyLimit,\n gte: 0,\n lte: 10_000_000\n },\n {\n name: 'parameters',\n type: 'array',\n value: parameters\n },\n {\n name: 'issuer',\n type: 'address',\n value: issuerAddress\n },\n {\n name: 'tokenValue',\n type: 'integer',\n value: tokenValue,\n gte: 0,\n optional: true\n },\n {\n name: 'tokenId',\n type: 'integer',\n value: tokenId,\n gte: 0,\n optional: true\n }\n ], callback))\n return;\n\n if (payable && callValue == 0 && tokenValue == 0)\n return callback('When contract is payable, options.callValue or options.tokenValue must be a positive integer');\n\n if (!payable && (callValue > 0 || tokenValue > 0))\n return callback('When contract is not payable, options.callValue and options.tokenValue must be 0');\n\n\n var constructorParams = abi.find(\n (it) => {\n return it.type === 'constructor';\n }\n );\n\n if (typeof constructorParams !== 'undefined' && constructorParams) {\n const abiCoder = new AbiCoder();\n const types = [];\n const values = [];\n constructorParams = constructorParams.inputs;\n\n if (parameters.length != constructorParams.length)\n return callback(`constructor needs ${constructorParams.length} but ${parameters.length} provided`);\n\n for (let i = 0; i < parameters.length; i++) {\n let type = constructorParams[i].type;\n let value = parameters[i];\n\n if (!type || !utils.isString(type) || !type.length)\n return callback('Invalid parameter type provided: ' + type);\n\n if (type == 'address')\n value = toHex(value).replace(ADDRESS_PREFIX_REGEX, '0x');\n else if (type == 'address[]')\n value = value.map(v => toHex(v).replace(ADDRESS_PREFIX_REGEX, '0x'));\n\n types.push(type);\n values.push(value);\n }\n\n try {\n parameters = abiCoder.encode(types, values).replace(/^(0x)/, '');\n } catch (ex) {\n return callback(ex);\n }\n } else parameters = '';\n\n const args = {\n owner_address: toHex(issuerAddress),\n fee_limit: parseInt(feeLimit),\n call_value: parseInt(callValue),\n consume_user_resource_percent: userFeePercentage,\n origin_energy_limit: originEnergyLimit,\n abi: JSON.stringify(abi),\n bytecode,\n parameter: parameters,\n name\n };\n\n // tokenValue and tokenId can cause errors if provided when the trx10 proposal has not been approved yet. So we set them only if they are passed to the method.\n if (utils.isNotNullOrUndefined(tokenValue))\n args.call_token_value = parseInt(tokenValue)\n if (utils.isNotNullOrUndefined(tokenId))\n args.token_id = parseInt(tokenId)\n if (options && options.permissionId)\n args.Permission_id = options.permissionId;\n\n this.tronWeb.fullNode.request('wallet/deploycontract', args, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n triggerSmartContract(...params) {\n if (typeof params[2] !== 'object') {\n params[2] = {\n feeLimit: params[2],\n callValue: params[3]\n }\n params.splice(3, 1)\n }\n return this._triggerSmartContract(...params);\n }\n\n triggerConstantContract(...params) {\n params[2]._isConstant = true\n return this.triggerSmartContract(...params);\n }\n\n triggerConfirmedConstantContract(...params) {\n params[2]._isConstant = true\n params[2].confirmed = true\n return this.triggerSmartContract(...params);\n }\n\n _triggerSmartContract(\n contractAddress,\n functionSelector,\n options = {},\n parameters = [],\n issuerAddress = this.tronWeb.defaultAddress.hex,\n callback = false\n ) {\n\n if (utils.isFunction(issuerAddress)) {\n callback = issuerAddress;\n issuerAddress = this.tronWeb.defaultAddress.hex;\n }\n\n if (utils.isFunction(parameters)) {\n callback = parameters;\n parameters = [];\n }\n\n if (!callback) {\n return this.injectPromise(\n this._triggerSmartContract,\n contractAddress,\n functionSelector,\n options,\n parameters,\n issuerAddress\n );\n }\n\n let {\n tokenValue,\n tokenId,\n callValue,\n feeLimit,\n } = Object.assign({\n callValue: 0,\n feeLimit: 1_000_000_000\n }, options)\n\n if (this.validator.notValid([\n {\n name: 'feeLimit',\n type: 'integer',\n value: feeLimit,\n gt: 0,\n lte: 1_000_000_000\n },\n {\n name: 'callValue',\n type: 'integer',\n value: callValue,\n gte: 0\n },\n {\n name: 'parameters',\n type: 'array',\n value: parameters\n },\n {\n name: 'contract',\n type: 'address',\n value: contractAddress\n },\n {\n name: 'issuer',\n type: 'address',\n value: issuerAddress,\n optional: true\n },\n {\n name: 'tokenValue',\n type: 'integer',\n value: tokenValue,\n gte: 0,\n optional: true\n },\n {\n name: 'tokenId',\n type: 'integer',\n value: tokenId,\n gte: 0,\n optional: true\n },\n {\n name: 'function selector',\n type: 'not-empty-string',\n value: functionSelector\n }\n ], callback))\n return;\n\n functionSelector = functionSelector.replace('/\\s*/g', '');\n\n if (parameters.length) {\n const abiCoder = new AbiCoder();\n let types = [];\n const values = [];\n\n for (let i = 0; i < parameters.length; i++) {\n let {type, value} = parameters[i];\n\n if (!type || !utils.isString(type) || !type.length)\n return callback('Invalid parameter type provided: ' + type);\n\n if (type == 'address')\n value = toHex(value).replace(ADDRESS_PREFIX_REGEX, '0x');\n else if (type == 'address[]')\n value = value.map(v => toHex(v).replace(ADDRESS_PREFIX_REGEX, '0x'));\n\n types.push(type);\n values.push(value);\n }\n\n try {\n // workaround for unsupported trcToken type\n types = types.map(type => {\n if (/trcToken/.test(type)) {\n type = type.replace(/trcToken/, 'uint256')\n }\n return type\n })\n\n parameters = abiCoder.encode(types, values).replace(/^(0x)/, '');\n } catch (ex) {\n return callback(ex);\n }\n } else parameters = '';\n\n const args = {\n contract_address: toHex(contractAddress),\n owner_address: toHex(issuerAddress),\n function_selector: functionSelector,\n parameter: parameters\n };\n\n if (!options._isConstant) {\n args.call_value = parseInt(callValue)\n args.fee_limit = parseInt(feeLimit)\n if (utils.isNotNullOrUndefined(tokenValue))\n args.call_token_value = parseInt(tokenValue)\n if (utils.isNotNullOrUndefined(tokenId))\n args.token_id = parseInt(tokenId)\n }\n\n if (options.permissionId) {\n args.Permission_id = options.permissionId;\n }\n\n this.tronWeb[options.confirmed ? 'solidityNode' : 'fullNode'].request(`wallet${options.confirmed ? 'solidity' : ''}/trigger${options._isConstant ? 'constant' : 'smart'}contract`, args, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n clearABI(contractAddress, ownerAddress = this.tronWeb.defaultAddress.hex, callback = false) {\n if (!callback)\n return this.injectPromise(this.clearABI, contractAddress, ownerAddress);\n\n if (!this.tronWeb.isAddress(contractAddress))\n return callback('Invalid contract address provided');\n\n if (!this.tronWeb.isAddress(ownerAddress))\n return callback('Invalid owner address provided');\n\n const data = {\n contract_address: toHex(contractAddress),\n owner_address: toHex(ownerAddress)\n };\n\n if (this.tronWeb.trx.cache.contracts[contractAddress]) {\n delete this.tronWeb.trx.cache.contracts[contractAddress]\n }\n this.tronWeb.fullNode.request('wallet/clearabi', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n\n }\n\n updateBrokerage(brokerage, ownerAddress = this.tronWeb.defaultAddress.hex, callback = false) {\n if (!callback)\n return this.injectPromise(this.updateBrokerage, brokerage, ownerAddress);\n\n if (!utils.isNotNullOrUndefined(brokerage))\n return callback('Invalid brokerage provided');\n\n if (!utils.isInteger(brokerage) || brokerage < 0 || brokerage > 100)\n return callback('Brokerage must be an integer between 0 and 100');\n\n if (!this.tronWeb.isAddress(ownerAddress))\n return callback('Invalid owner address provided');\n\n const data = {\n brokerage: parseInt(brokerage),\n owner_address: toHex(ownerAddress)\n };\n\n this.tronWeb.fullNode.request('wallet/updateBrokerage', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n\n }\n\n createToken(options = {}, issuerAddress = this.tronWeb.defaultAddress.hex, callback = false) {\n if (utils.isFunction(issuerAddress)) {\n callback = issuerAddress;\n issuerAddress = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.createToken, options, issuerAddress);\n\n const {\n name = false,\n abbreviation = false,\n description = false,\n url = false,\n totalSupply = 0,\n trxRatio = 1, // How much TRX will `tokenRatio` cost?\n tokenRatio = 1, // How many tokens will `trxRatio` afford?\n saleStart = Date.now(),\n saleEnd = false,\n freeBandwidth = 0, // The creator's \"donated\" bandwidth for use by token holders\n freeBandwidthLimit = 0, // Out of `totalFreeBandwidth`, the amount each token holder get\n frozenAmount = 0,\n frozenDuration = 0,\n // for now there is no default for the following values\n voteScore,\n precision\n } = options;\n\n if (this.validator.notValid([\n {\n name: 'Supply amount',\n type: 'positive-integer',\n value: totalSupply\n },\n {\n name: 'TRX ratio',\n type: 'positive-integer',\n value: trxRatio\n },\n {\n name: 'Token ratio',\n type: 'positive-integer',\n value: tokenRatio\n },\n {\n name: 'token abbreviation',\n type: 'not-empty-string',\n value: abbreviation\n },\n {\n name: 'token name',\n type: 'not-empty-string',\n value: name\n },\n {\n name: 'token description',\n type: 'not-empty-string',\n value: description\n },\n {\n name: 'token url',\n type: 'url',\n value: url\n },\n {\n name: 'issuer',\n type: 'address',\n value: issuerAddress\n },\n {\n name: 'sale start timestamp',\n type: 'integer',\n value: saleStart,\n gte: Date.now()\n },\n {\n name: 'sale end timestamp',\n type: 'integer',\n value: saleEnd,\n gt: saleStart\n },\n {\n name: 'Free bandwidth amount',\n type: 'integer',\n value: freeBandwidth,\n gte: 0\n },\n {\n name: 'Free bandwidth limit',\n type: 'integer',\n value: freeBandwidthLimit,\n gte: 0\n },\n {\n name: 'Frozen supply',\n type: 'integer',\n value: frozenAmount,\n gte: 0\n },\n {\n name: 'Frozen duration',\n type: 'integer',\n value: frozenDuration,\n gte: 0\n }\n ], callback))\n return;\n\n if (utils.isNotNullOrUndefined(voteScore) && (!utils.isInteger(voteScore) || voteScore <= 0))\n return callback('voteScore must be a positive integer greater than 0');\n\n if (utils.isNotNullOrUndefined(precision) && (!utils.isInteger(precision) || precision <= 0 || precision > 6))\n return callback('precision must be a positive integer > 0 and <= 6');\n\n const data = {\n owner_address: toHex(issuerAddress),\n name: fromUtf8(name),\n abbr: fromUtf8(abbreviation),\n description: fromUtf8(description),\n url: fromUtf8(url),\n total_supply: parseInt(totalSupply),\n trx_num: parseInt(trxRatio),\n num: parseInt(tokenRatio),\n start_time: parseInt(saleStart),\n end_time: parseInt(saleEnd),\n free_asset_net_limit: parseInt(freeBandwidth),\n public_free_asset_net_limit: parseInt(freeBandwidthLimit),\n frozen_supply: {\n frozen_amount: parseInt(frozenAmount),\n frozen_days: parseInt(frozenDuration)\n }\n }\n if (this.tronWeb.fullnodeSatisfies('>=3.5.0') && !(parseInt(frozenAmount) > 0)) {\n delete data.frozen_supply\n }\n if (precision && !isNaN(parseInt(precision))) {\n data.precision = parseInt(precision);\n }\n if (voteScore && !isNaN(parseInt(voteScore))) {\n data.vote_score = parseInt(voteScore)\n }\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/createassetissue', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n updateAccount(accountName = false, address = this.tronWeb.defaultAddress.hex, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(address)) {\n callback = address;\n address = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(address)) {\n options = address;\n address = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback) {\n return this.injectPromise(this.updateAccount, accountName, address, options);\n }\n\n if (this.validator.notValid([\n {\n name: 'Name',\n type: 'not-empty-string',\n value: accountName\n },\n {\n name: 'origin',\n type: 'address',\n value: address\n }\n ], callback))\n return;\n\n const data = {\n account_name: fromUtf8(accountName),\n owner_address: toHex(address),\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/updateaccount', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n setAccountId(accountId, address = this.tronWeb.defaultAddress.hex, callback = false) {\n if (utils.isFunction(address)) {\n callback = address;\n address = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback) {\n return this.injectPromise(this.setAccountId, accountId, address);\n }\n\n if (accountId && utils.isString(accountId) && accountId.startsWith('0x')) {\n accountId = accountId.slice(2);\n }\n\n if (this.validator.notValid([\n {\n name: 'accountId',\n type: 'hex',\n value: accountId\n },\n {\n name: 'accountId',\n type: 'string',\n lte: 32,\n gte: 8,\n value: accountId\n },\n {\n name: 'origin',\n type: 'address',\n value: address\n }\n ], callback))\n return;\n\n\n this.tronWeb.fullNode.request('wallet/setaccountid', {\n account_id: accountId,\n owner_address: toHex(address),\n }, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n updateToken(options = {}, issuerAddress = this.tronWeb.defaultAddress.hex, callback = false) {\n if (utils.isFunction(issuerAddress)) {\n callback = issuerAddress;\n issuerAddress = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(issuerAddress)) {\n options = issuerAddress;\n issuerAddress = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.updateToken, options, issuerAddress);\n\n const {\n description = false,\n url = false,\n freeBandwidth = 0, // The creator's \"donated\" bandwidth for use by token holders\n freeBandwidthLimit = 0 // Out of `totalFreeBandwidth`, the amount each token holder get\n } = options;\n\n\n if (this.validator.notValid([\n {\n name: 'token description',\n type: 'not-empty-string',\n value: description\n },\n {\n name: 'token url',\n type: 'url',\n value: url\n },\n {\n name: 'issuer',\n type: 'address',\n value: issuerAddress\n },\n {\n name: 'Free bandwidth amount',\n type: 'positive-integer',\n value: freeBandwidth\n },\n {\n name: 'Free bandwidth limit',\n type: 'positive-integer',\n value: freeBandwidthLimit\n }\n ], callback))\n return;\n\n const data = {\n owner_address: toHex(issuerAddress),\n description: fromUtf8(description),\n url: fromUtf8(url),\n new_limit: parseInt(freeBandwidth),\n new_public_limit: parseInt(freeBandwidthLimit)\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/updateasset', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n sendAsset(...args) {\n return this.sendToken(...args);\n }\n\n purchaseAsset(...args) {\n return this.purchaseToken(...args);\n }\n\n createAsset(...args) {\n return this.createToken(...args);\n }\n\n updateAsset(...args) {\n return this.updateToken(...args);\n }\n\n /**\n * Creates a proposal to modify the network.\n * Can only be created by a current Super Representative.\n */\n createProposal(parameters = false, issuerAddress = this.tronWeb.defaultAddress.hex, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(issuerAddress)) {\n callback = issuerAddress;\n issuerAddress = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(issuerAddress)) {\n options = issuerAddress;\n issuerAddress = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.createProposal, parameters, issuerAddress, options);\n\n if (this.validator.notValid([\n {\n name: 'issuer',\n type: 'address',\n value: issuerAddress\n }\n ], callback))\n return;\n\n const invalid = 'Invalid proposal parameters provided';\n\n if (!parameters)\n return callback(invalid);\n\n if (!utils.isArray(parameters))\n parameters = [parameters];\n\n for (let parameter of parameters) {\n if (!utils.isObject(parameter))\n return callback(invalid);\n }\n\n const data = {\n owner_address: toHex(issuerAddress),\n parameters: parameters\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/proposalcreate', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n /**\n * Deletes a network modification proposal that the owner issued.\n * Only current Super Representative can vote on a proposal.\n */\n deleteProposal(proposalID = false, issuerAddress = this.tronWeb.defaultAddress.hex, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(issuerAddress)) {\n callback = issuerAddress;\n issuerAddress = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(issuerAddress)) {\n options = issuerAddress;\n issuerAddress = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.deleteProposal, proposalID, issuerAddress, options);\n\n if (this.validator.notValid([\n {\n name: 'issuer',\n type: 'address',\n value: issuerAddress\n },\n {\n name: 'proposalID',\n type: 'integer',\n value: proposalID,\n gte: 0\n }\n ], callback))\n return;\n\n const data = {\n owner_address: toHex(issuerAddress),\n proposal_id: parseInt(proposalID)\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/proposaldelete', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n /**\n * Adds a vote to an issued network modification proposal.\n * Only current Super Representative can vote on a proposal.\n */\n voteProposal(proposalID = false, isApproval = false, voterAddress = this.tronWeb.defaultAddress.hex, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(voterAddress)) {\n callback = voterAddress;\n voterAddress = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(voterAddress)) {\n options = voterAddress;\n voterAddress = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.voteProposal, proposalID, isApproval, voterAddress, options);\n\n if (this.validator.notValid([\n {\n name: 'voter',\n type: 'address',\n value: voterAddress\n },\n {\n name: 'proposalID',\n type: 'integer',\n value: proposalID,\n gte: 0\n },\n {\n name: 'has approval',\n type: 'boolean',\n value: isApproval\n }\n ], callback))\n return;\n\n const data = {\n owner_address: toHex(voterAddress),\n proposal_id: parseInt(proposalID),\n is_add_approval: isApproval\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/proposalapprove', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n /**\n * Create an exchange between a token and TRX.\n * Token Name should be a CASE SENSITIVE string.\n * PLEASE VERIFY THIS ON TRONSCAN.\n */\n createTRXExchange(tokenName, tokenBalance, trxBalance, ownerAddress = this.tronWeb.defaultAddress.hex, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(ownerAddress)) {\n callback = ownerAddress;\n ownerAddress = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(ownerAddress)) {\n options = ownerAddress;\n ownerAddress = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.createTRXExchange, tokenName, tokenBalance, trxBalance, ownerAddress, options);\n\n if (this.validator.notValid([\n {\n name: 'owner',\n type: 'address',\n value: ownerAddress\n },\n {\n name: 'token name',\n type: 'not-empty-string',\n value: tokenName\n },\n {\n name: 'token balance',\n type: 'positive-integer',\n value: tokenBalance\n },\n {\n name: 'trx balance',\n type: 'positive-integer',\n value: trxBalance\n }\n ], callback))\n return;\n\n const data = {\n owner_address: toHex(ownerAddress),\n first_token_id: fromUtf8(tokenName),\n first_token_balance: tokenBalance,\n second_token_id: '5f', // Constant for TRX.\n second_token_balance: trxBalance\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/exchangecreate', data, 'post').then(resources => {\n callback(null, resources);\n }).catch(err => callback(err));\n }\n\n /**\n * Create an exchange between a token and another token.\n * DO NOT USE THIS FOR TRX.\n * Token Names should be a CASE SENSITIVE string.\n * PLEASE VERIFY THIS ON TRONSCAN.\n */\n createTokenExchange(firstTokenName, firstTokenBalance, secondTokenName, secondTokenBalance, ownerAddress = this.tronWeb.defaultAddress.hex, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(ownerAddress)) {\n callback = ownerAddress;\n ownerAddress = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(ownerAddress)) {\n options = ownerAddress;\n ownerAddress = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.createTokenExchange, firstTokenName, firstTokenBalance, secondTokenName, secondTokenBalance, ownerAddress, options);\n\n if (this.validator.notValid([\n {\n name: 'owner',\n type: 'address',\n value: ownerAddress\n },\n {\n name: 'first token name',\n type: 'not-empty-string',\n value: firstTokenName\n },\n {\n name: 'second token name',\n type: 'not-empty-string',\n value: secondTokenName\n },\n {\n name: 'first token balance',\n type: 'positive-integer',\n value: firstTokenBalance\n },\n {\n name: 'second token balance',\n type: 'positive-integer',\n value: secondTokenBalance\n }\n ], callback))\n return;\n\n const data = {\n owner_address: toHex(ownerAddress),\n first_token_id: fromUtf8(firstTokenName),\n first_token_balance: firstTokenBalance,\n second_token_id: fromUtf8(secondTokenName),\n second_token_balance: secondTokenBalance\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/exchangecreate', data, 'post').then(resources => {\n callback(null, resources);\n }).catch(err => callback(err));\n }\n\n /**\n * Adds tokens into a bancor style exchange.\n * Will add both tokens at market rate.\n * Use \"_\" for the constant value for TRX.\n */\n injectExchangeTokens(exchangeID = false, tokenName = false, tokenAmount = 0, ownerAddress = this.tronWeb.defaultAddress.hex, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(ownerAddress)) {\n callback = ownerAddress;\n ownerAddress = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(ownerAddress)) {\n options = ownerAddress;\n ownerAddress = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.injectExchangeTokens, exchangeID, tokenName, tokenAmount, ownerAddress, options);\n\n if (this.validator.notValid([\n {\n name: 'owner',\n type: 'address',\n value: ownerAddress\n },\n {\n name: 'token name',\n type: 'not-empty-string',\n value: tokenName\n },\n {\n name: 'token amount',\n type: 'integer',\n value: tokenAmount,\n gte: 1\n },\n {\n name: 'exchangeID',\n type: 'integer',\n value: exchangeID,\n gte: 0\n }\n ], callback))\n return;\n\n const data = {\n owner_address: toHex(ownerAddress),\n exchange_id: parseInt(exchangeID),\n token_id: fromUtf8(tokenName),\n quant: parseInt(tokenAmount)\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/exchangeinject', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n /**\n * Withdraws tokens from a bancor style exchange.\n * Will withdraw at market rate both tokens.\n * Use \"_\" for the constant value for TRX.\n */\n withdrawExchangeTokens(exchangeID = false, tokenName = false, tokenAmount = 0, ownerAddress = this.tronWeb.defaultAddress.hex, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(ownerAddress)) {\n callback = ownerAddress;\n ownerAddress = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(ownerAddress)) {\n options = ownerAddress;\n ownerAddress = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.withdrawExchangeTokens, exchangeID, tokenName, tokenAmount, ownerAddress, options);\n\n if (this.validator.notValid([\n {\n name: 'owner',\n type: 'address',\n value: ownerAddress\n },\n {\n name: 'token name',\n type: 'not-empty-string',\n value: tokenName\n },\n {\n name: 'token amount',\n type: 'integer',\n value: tokenAmount,\n gte: 1\n },\n {\n name: 'exchangeID',\n type: 'integer',\n value: exchangeID,\n gte: 0\n }\n ], callback))\n return;\n\n const data = {\n owner_address: toHex(ownerAddress),\n exchange_id: parseInt(exchangeID),\n token_id: fromUtf8(tokenName),\n quant: parseInt(tokenAmount)\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/exchangewithdraw', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n /**\n * Trade tokens on a bancor style exchange.\n * Expected value is a validation and used to cap the total amt of token 2 spent.\n * Use \"_\" for the constant value for TRX.\n */\n tradeExchangeTokens(exchangeID = false,\n tokenName = false,\n tokenAmountSold = 0,\n tokenAmountExpected = 0,\n ownerAddress = this.tronWeb.defaultAddress.hex,\n options,\n callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(ownerAddress)) {\n callback = ownerAddress;\n ownerAddress = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(ownerAddress)) {\n options = ownerAddress;\n ownerAddress = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.tradeExchangeTokens, exchangeID, tokenName, tokenAmountSold, tokenAmountExpected, ownerAddress, options);\n\n if (this.validator.notValid([\n {\n name: 'owner',\n type: 'address',\n value: ownerAddress\n },\n {\n name: 'token name',\n type: 'not-empty-string',\n value: tokenName\n },\n {\n name: 'tokenAmountSold',\n type: 'integer',\n value: tokenAmountSold,\n gte: 1\n },\n {\n name: 'tokenAmountExpected',\n type: 'integer',\n value: tokenAmountExpected,\n gte: 1\n },\n {\n name: 'exchangeID',\n type: 'integer',\n value: exchangeID,\n gte: 0\n }\n ], callback))\n return;\n\n const data = {\n owner_address: toHex(ownerAddress),\n exchange_id: parseInt(exchangeID),\n token_id: this.tronWeb.fromAscii(tokenName),\n quant: parseInt(tokenAmountSold),\n expected: parseInt(tokenAmountExpected)\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/exchangetransaction', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n /**\n * Update userFeePercentage.\n */\n updateSetting(contractAddress = false,\n userFeePercentage = false,\n ownerAddress = this.tronWeb.defaultAddress.hex,\n options,\n callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(ownerAddress)) {\n callback = ownerAddress;\n ownerAddress = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(ownerAddress)) {\n options = ownerAddress;\n ownerAddress = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.updateSetting, contractAddress, userFeePercentage, ownerAddress, options);\n\n if (this.validator.notValid([\n {\n name: 'owner',\n type: 'address',\n value: ownerAddress\n },\n {\n name: 'contract',\n type: 'address',\n value: contractAddress\n },\n {\n name: 'userFeePercentage',\n type: 'integer',\n value: userFeePercentage,\n gte: 0,\n lte: 100\n }\n ], callback))\n return;\n\n const data = {\n owner_address: toHex(ownerAddress),\n contract_address: toHex(contractAddress),\n consume_user_resource_percent: userFeePercentage\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/updatesetting', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n /**\n * Update energy limit.\n */\n updateEnergyLimit(contractAddress = false,\n originEnergyLimit = false,\n ownerAddress = this.tronWeb.defaultAddress.hex,\n options,\n callback = false) {\n\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(ownerAddress)) {\n callback = ownerAddress;\n ownerAddress = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(ownerAddress)) {\n options = ownerAddress;\n ownerAddress = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.updateEnergyLimit, contractAddress, originEnergyLimit, ownerAddress, options);\n\n if (this.validator.notValid([\n {\n name: 'owner',\n type: 'address',\n value: ownerAddress\n },\n {\n name: 'contract',\n type: 'address',\n value: contractAddress\n },\n {\n name: 'originEnergyLimit',\n type: 'integer',\n value: originEnergyLimit,\n gte: 0,\n lte: 10_000_000\n }\n ], callback))\n return;\n\n const data = {\n owner_address: toHex(ownerAddress),\n contract_address: toHex(contractAddress),\n origin_energy_limit: originEnergyLimit\n };\n\n if (options && options.permissionId) {\n data.Permission_id = options.permissionId;\n }\n\n this.tronWeb.fullNode.request('wallet/updateenergylimit', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n checkPermissions(permissions, type) {\n if (permissions) {\n if (permissions.type !== type\n || !permissions.permission_name\n || !utils.isString(permissions.permission_name)\n || !utils.isInteger(permissions.threshold)\n || permissions.threshold < 1\n || !permissions.keys\n ) {\n return false\n }\n for (let key of permissions.keys) {\n if (!this.tronWeb.isAddress(key.address)\n || !utils.isInteger(key.weight)\n || key.weight > permissions.threshold\n || key.weight < 1\n || (type === 2 && !permissions.operations)\n ) {\n return false\n }\n }\n }\n return true\n }\n\n updateAccountPermissions(ownerAddress = this.tronWeb.defaultAddress.hex,\n ownerPermissions = false,\n witnessPermissions = false,\n activesPermissions = false,\n callback = false) {\n\n if (utils.isFunction(activesPermissions)) {\n callback = activesPermissions;\n activesPermissions = false;\n }\n\n if (utils.isFunction(witnessPermissions)) {\n callback = witnessPermissions;\n witnessPermissions = activesPermissions = false;\n }\n\n if (utils.isFunction(ownerPermissions)) {\n callback = ownerPermissions;\n ownerPermissions = witnessPermissions = activesPermissions = false;\n }\n\n if (!callback)\n return this.injectPromise(this.updateAccountPermissions, ownerAddress, ownerPermissions, witnessPermissions, activesPermissions);\n\n if (!this.tronWeb.isAddress(ownerAddress))\n return callback('Invalid ownerAddress provided');\n\n if (!this.checkPermissions(ownerPermissions, 0)) {\n return callback('Invalid ownerPermissions provided');\n }\n\n if (!this.checkPermissions(witnessPermissions, 1)) {\n return callback('Invalid witnessPermissions provided');\n }\n\n if (!Array.isArray(activesPermissions)) {\n activesPermissions = [activesPermissions]\n }\n\n for (let activesPermission of activesPermissions) {\n if (!this.checkPermissions(activesPermission, 2)) {\n return callback('Invalid activesPermissions provided');\n }\n }\n\n const data = {\n owner_address: ownerAddress\n }\n if (ownerPermissions) {\n data.owner = ownerPermissions\n }\n if (witnessPermissions) {\n data.witness = witnessPermissions\n }\n if (activesPermissions) {\n data.actives = activesPermissions.length === 1 ? activesPermissions[0] : activesPermissions\n }\n\n this.tronWeb.fullNode.request('wallet/accountpermissionupdate', data, 'post').then(transaction => resultManager(transaction, callback)).catch(err => callback(err));\n }\n\n async newTxID(transaction, callback) {\n\n if (!callback)\n return this.injectPromise(this.newTxID, transaction);\n\n this.tronWeb.fullNode\n .request(\n 'wallet/getsignweight',\n transaction,\n 'post'\n )\n .then(newTransaction => {\n newTransaction = newTransaction.transaction.transaction\n if (typeof transaction.visible === 'boolean') {\n newTransaction.visible = transaction.visible\n }\n callback(null, newTransaction)\n })\n .catch(err => callback('Error generating a new transaction id.'));\n }\n\n async alterTransaction(transaction, options = {}, callback = false) {\n if (!callback)\n return this.injectPromise(this.alterTransaction, transaction, options);\n\n if (transaction.signature)\n return callback('You can not extend the expiration of a signed transaction.')\n\n if (options.data) {\n if (options.dataFormat !== 'hex')\n options.data = this.tronWeb.toHex(options.data);\n options.data = options.data.replace(/^0x/, '')\n if (options.data.length === 0)\n return callback('Invalid data provided');\n transaction.raw_data.data = options.data;\n }\n\n if (options.extension) {\n options.extension = parseInt(options.extension * 1000);\n if (isNaN(options.extension) || transaction.raw_data.expiration + options.extension <= Date.now() + 3000)\n return callback('Invalid extension provided');\n transaction.raw_data.expiration += options.extension;\n }\n\n this.newTxID(transaction, callback)\n }\n\n async extendExpiration(transaction, extension, callback = false) {\n if (!callback)\n return this.injectPromise(this.extendExpiration, transaction, extension);\n\n this.alterTransaction(transaction, {extension}, callback);\n }\n\n async addUpdateData(transaction, data, dataFormat = 'utf8', callback = false) {\n\n if (utils.isFunction(dataFormat)) {\n callback = dataFormat;\n dataFormat = 'utf8';\n }\n\n if (!callback)\n return this.injectPromise(this.addUpdateData, transaction, data, dataFormat);\n\n this.alterTransaction(transaction, {data, dataFormat}, callback);\n }\n\n}\n","import HttpProvider from './HttpProvider';\n\nexport default {\n HttpProvider\n};","import axios from 'axios';\nimport utils from 'utils';\n\nexport default class HttpProvider {\n constructor(host, timeout = 30000, user = false, password = false, headers = {}, statusPage = '/') {\n if (!utils.isValidURL(host))\n throw new Error('Invalid URL provided to HttpProvider');\n\n if (isNaN(timeout) || timeout < 0)\n throw new Error('Invalid timeout duration provided');\n\n if (!utils.isObject(headers))\n throw new Error('Invalid headers object provided');\n\n host = host.replace(/\\/+$/, '');\n\n this.host = host;\n this.timeout = timeout;\n this.user = user;\n this.password = password;\n this.headers = headers;\n this.statusPage = statusPage;\n\n this.instance = axios.create({\n baseURL: host,\n timeout: timeout,\n headers: headers,\n auth: user && {\n user,\n password\n },\n });\n }\n\n setStatusPage(statusPage = '/') {\n this.statusPage = statusPage;\n }\n\n async isConnected(statusPage = this.statusPage) {\n return this.request(statusPage).then(data => {\n return utils.hasProperties(data, 'blockID', 'block_header');\n }).catch(() => false);\n }\n\n request(url, payload = {}, method = 'get') {\n method = method.toLowerCase();\n\n return this.instance.request({\n data: method == 'post' && Object.keys(payload).length ? payload : null,\n params: method == 'get' && payload,\n url,\n method\n }).then(({data}) => data);\n }\n};\n","import TronWeb from 'index';\nimport utils from 'utils';\n\nexport default class Validator {\n\n constructor(tronWeb = false) {\n if (!tronWeb || !tronWeb instanceof TronWeb)\n throw new Error('Expected instance of TronWeb');\n this.tronWeb = tronWeb;\n }\n\n invalid(param) {\n return param.msg || `Invalid ${param.name}${param.type === 'address' ? ' address' : ''} provided`;\n }\n\n notPositive(param) {\n return `${param.name} must be a positive integer`;\n }\n\n notEqual(param) {\n return param.msg || `${param.names[0]} can not be equal to ${param.names[1]}`;\n }\n\n notValid(params = [], callback = new Function) {\n\n let normalized = {};\n let no = false;\n for (const param of params) {\n let {\n name,\n names,\n value,\n type,\n gt,\n lt,\n gte,\n lte,\n se,\n optional\n } = param;\n if (optional && (\n !utils.isNotNullOrUndefined(value)\n || (type !== 'boolean' && value === false)))\n continue;\n normalized[param.name] = param.value;\n switch (type) {\n\n case 'address':\n if (!this.tronWeb.isAddress(value)) {\n no = true;\n } else {\n normalized[name] = this.tronWeb.address.toHex(value);\n }\n break;\n\n case 'integer':\n if (!utils.isInteger(value) ||\n (typeof gt === 'number' && value <= param.gt) ||\n (typeof lt === 'number' && value >= param.lt) ||\n (typeof gte === 'number' && value < param.gte) ||\n (typeof lte === 'number' && value > param.lte)) {\n no = true;\n }\n break;\n\n case 'positive-integer':\n if (!utils.isInteger(value) || value <= 0) {\n callback(this.notPositive(param));\n return;\n }\n break;\n\n case 'tokenId':\n if (!utils.isString(value) || !value.length) {\n no = true;\n }\n break;\n\n case 'notEmptyObject':\n if (!utils.isObject(value) || !Object.keys(value).length) {\n no = true;\n }\n break;\n\n case 'notEqual':\n if (normalized[names[0]] === normalized[names[1]]) {\n callback(this.notEqual(param));\n return true;\n }\n break;\n\n case 'resource':\n if (!['BANDWIDTH', 'ENERGY'].includes(value)) {\n no = true;\n }\n break;\n\n case 'url':\n if (!utils.isValidURL(value)) {\n no = true;\n }\n break;\n\n case 'hex':\n if (!utils.isHex(value)) {\n no = true;\n }\n break;\n\n case 'array':\n if (!Array.isArray(value)) {\n no = true;\n }\n break;\n\n case 'not-empty-string':\n if (!utils.isString(value) || !value.length) {\n no = true;\n }\n break;\n\n case 'boolean':\n if (!utils.isBoolean(value)) {\n no = true;\n }\n break;\n case 'string':\n if (!utils.isString(value) ||\n (typeof gt === 'number' && value.length <= param.gt) ||\n (typeof lt === 'number' && value.length >= param.lt) ||\n (typeof gte === 'number' && value.length < param.gte) ||\n (typeof lte === 'number' && value.length > param.lte)) {\n no = true;\n }\n break;\n }\n if (no) {\n callback(this.invalid(param));\n return true;\n }\n }\n return false;\n }\n}\n\n","import TronWeb from 'index';\nimport utils from 'utils';\nimport {keccak256, toUtf8Bytes, recoverAddress, SigningKey} from 'utils/ethersUtils';\nimport {ADDRESS_PREFIX} from 'utils/address';\nimport Validator from \"../paramValidator\";\nimport injectpromise from 'injectpromise';\n\nconst TRX_MESSAGE_HEADER = '\\x19TRON Signed Message:\\n32';\n// it should be: '\\x15TRON Signed Message:\\n32';\nconst ETH_MESSAGE_HEADER = '\\x19Ethereum Signed Message:\\n32';\n\nfunction toHex(value) {\n return TronWeb.address.toHex(value);\n}\n\nexport default class Trx {\n constructor(tronWeb = false) {\n if (!tronWeb || !tronWeb instanceof TronWeb)\n throw new Error('Expected instance of TronWeb');\n\n this.tronWeb = tronWeb;\n this.injectPromise = injectpromise(this);\n this.cache = {\n contracts: {}\n }\n this.validator = new Validator(tronWeb);\n }\n\n _parseToken(token) {\n return {\n ...token,\n name: this.tronWeb.toUtf8(token.name),\n abbr: token.abbr && this.tronWeb.toUtf8(token.abbr),\n description: token.description && this.tronWeb.toUtf8(token.description),\n url: token.url && this.tronWeb.toUtf8(token.url)\n };\n }\n\n getCurrentBlock(callback = false) {\n if (!callback)\n return this.injectPromise(this.getCurrentBlock);\n\n this.tronWeb.fullNode.request('wallet/getnowblock').then(block => {\n callback(null, block);\n }).catch(err => callback(err));\n }\n\n getConfirmedCurrentBlock(callback = false) {\n if (!callback)\n return this.injectPromise(this.getConfirmedCurrentBlock);\n\n this.tronWeb.solidityNode.request('walletsolidity/getnowblock').then(block => {\n callback(null, block);\n }).catch(err => callback(err));\n }\n\n getBlock(block = this.tronWeb.defaultBlock, callback = false) {\n if (utils.isFunction(block)) {\n callback = block;\n block = this.tronWeb.defaultBlock;\n }\n\n if (!callback)\n return this.injectPromise(this.getBlock, block);\n\n if (block === false)\n return callback('No block identifier provided');\n\n if (block == 'earliest')\n block = 0;\n\n if (block == 'latest')\n return this.getCurrentBlock(callback);\n\n if (isNaN(block) && utils.isHex(block))\n return this.getBlockByHash(block, callback);\n\n this.getBlockByNumber(block, callback);\n }\n\n getBlockByHash(blockHash, callback = false) {\n if (!callback)\n return this.injectPromise(this.getBlockByHash, blockHash);\n\n this.tronWeb.fullNode.request('wallet/getblockbyid', {\n value: blockHash\n }, 'post').then(block => {\n if (!Object.keys(block).length)\n return callback('Block not found');\n\n callback(null, block);\n }).catch(err => callback(err));\n }\n\n getBlockByNumber(blockID, callback = false) {\n if (!callback)\n return this.injectPromise(this.getBlockByNumber, blockID);\n\n if (!utils.isInteger(blockID) || blockID < 0)\n return callback('Invalid block number provided');\n\n this.tronWeb.fullNode.request('wallet/getblockbynum', {\n num: parseInt(blockID)\n }, 'post').then(block => {\n if (!Object.keys(block).length)\n return callback('Block not found');\n\n callback(null, block);\n }).catch(err => callback(err));\n }\n\n getBlockTransactionCount(block = this.tronWeb.defaultBlock, callback = false) {\n if (utils.isFunction(block)) {\n callback = block;\n block = this.tronWeb.defaultBlock;\n }\n\n if (!callback)\n return this.injectPromise(this.getBlockTransactionCount, block);\n\n this.getBlock(block).then(({transactions = []}) => {\n callback(null, transactions.length);\n }).catch(err => callback(err));\n }\n\n getTransactionFromBlock(block = this.tronWeb.defaultBlock, index, callback = false) {\n if (utils.isFunction(index)) {\n callback = index;\n index = 0;\n }\n\n if (utils.isFunction(block)) {\n callback = block;\n block = this.tronWeb.defaultBlock;\n }\n\n if (!callback)\n return this.injectPromise(this.getTransactionFromBlock, block, index);\n\n this.getBlock(block).then(({transactions = false}) => {\n if (!transactions)\n callback('Transaction not found in block');\n else if (typeof index == 'number') {\n if (index >= 0 && index < transactions.length)\n callback(null, transactions[index]);\n else\n callback('Invalid transaction index provided');\n } else\n callback(null, transactions);\n }).catch(err => callback(err));\n }\n\n getTransaction(transactionID, callback = false) {\n if (!callback)\n return this.injectPromise(this.getTransaction, transactionID);\n\n this.tronWeb.fullNode.request('wallet/gettransactionbyid', {\n value: transactionID\n }, 'post').then(transaction => {\n if (!Object.keys(transaction).length)\n return callback('Transaction not found');\n\n callback(null, transaction);\n }).catch(err => callback(err));\n }\n\n getConfirmedTransaction(transactionID, callback = false) {\n if (!callback)\n return this.injectPromise(this.getConfirmedTransaction, transactionID);\n\n this.tronWeb.solidityNode.request('walletsolidity/gettransactionbyid', {\n value: transactionID\n }, 'post').then(transaction => {\n if (!Object.keys(transaction).length)\n return callback('Transaction not found');\n\n callback(null, transaction);\n }).catch(err => callback(err));\n }\n\n getUnconfirmedTransactionInfo(transactionID, callback = false) {\n return this._getTransactionInfoById(transactionID, {confirmed: false}, callback)\n }\n\n getTransactionInfo(transactionID, callback = false) {\n return this._getTransactionInfoById(transactionID, {confirmed: true}, callback)\n }\n\n _getTransactionInfoById(transactionID, options, callback = false) {\n if (!callback)\n return this.injectPromise(this._getTransactionInfoById, transactionID, options);\n\n this.tronWeb[options.confirmed ? 'solidityNode' : 'fullNode'].request(`wallet${options.confirmed ? 'solidity' : ''}/gettransactioninfobyid`, {\n value: transactionID\n }, 'post').then(transaction => {\n callback(null, transaction);\n }).catch(err => callback(err));\n }\n\n getTransactionsToAddress(address = this.tronWeb.defaultAddress.hex, limit = 30, offset = 0, callback = false) {\n if (utils.isFunction(offset)) {\n callback = offset;\n offset = 0;\n }\n\n if (utils.isFunction(limit)) {\n callback = limit;\n limit = 30;\n }\n\n if (!callback)\n return this.injectPromise(this.getTransactionsToAddress, address, limit, offset);\n\n address = this.tronWeb.address.toHex(address);\n\n return this.getTransactionsRelated(address, 'to', limit, offset, callback);\n }\n\n getTransactionsFromAddress(address = this.tronWeb.defaultAddress.hex, limit = 30, offset = 0, callback = false) {\n if (utils.isFunction(offset)) {\n callback = offset;\n offset = 0;\n }\n\n if (utils.isFunction(limit)) {\n callback = limit;\n limit = 30;\n }\n\n if (!callback)\n return this.injectPromise(this.getTransactionsFromAddress, address, limit, offset);\n\n address = this.tronWeb.address.toHex(address);\n\n return this.getTransactionsRelated(address, 'from', limit, offset, callback);\n }\n\n async getTransactionsRelated(address = this.tronWeb.defaultAddress.hex, direction = 'all', limit = 30, offset = 0, callback = false) {\n if (utils.isFunction(offset)) {\n callback = offset;\n offset = 0;\n }\n\n if (utils.isFunction(limit)) {\n callback = limit;\n limit = 30;\n }\n\n if (utils.isFunction(direction)) {\n callback = direction;\n direction = 'all';\n }\n\n if (utils.isFunction(address)) {\n callback = address;\n address = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.getTransactionsRelated, address, direction, limit, offset);\n\n if (!['to', 'from', 'all'].includes(direction))\n return callback('Invalid direction provided: Expected \"to\", \"from\" or \"all\"');\n\n if (direction == 'all') {\n try {\n const [from, to] = await Promise.all([\n this.getTransactionsRelated(address, 'from', limit, offset),\n this.getTransactionsRelated(address, 'to', limit, offset)\n ])\n\n return callback(null, [\n ...from.map(tx => (tx.direction = 'from', tx)),\n ...to.map(tx => (tx.direction = 'to', tx))\n ].sort((a, b) => {\n return b.raw_data.timestamp - a.raw_data.timestamp\n }));\n } catch (ex) {\n return callback(ex);\n }\n }\n\n if (!this.tronWeb.isAddress(address))\n return callback('Invalid address provided');\n\n if (!utils.isInteger(limit) || limit < 0 || (offset && limit < 1))\n return callback('Invalid limit provided');\n\n if (!utils.isInteger(offset) || offset < 0)\n return callback('Invalid offset provided');\n\n address = this.tronWeb.address.toHex(address);\n\n this.tronWeb.solidityNode.request(`walletextension/gettransactions${direction}this`, {\n account: {\n address\n },\n offset,\n limit\n }, 'post').then(({transaction}) => {\n callback(null, transaction);\n }).catch(err => callback(err));\n }\n\n getAccount(address = this.tronWeb.defaultAddress.hex, callback = false) {\n if (utils.isFunction(address)) {\n callback = address;\n address = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.getAccount, address);\n\n if (!this.tronWeb.isAddress(address))\n return callback('Invalid address provided');\n\n address = this.tronWeb.address.toHex(address);\n\n this.tronWeb.solidityNode.request('walletsolidity/getaccount', {\n address\n }, 'post').then(account => {\n callback(null, account);\n }).catch(err => callback(err));\n }\n\n getAccountById(id = false, callback = false) {\n if (!callback)\n return this.injectPromise(this.getAccountById, id);\n\n this.getAccountInfoById(id, {confirmed: true}, callback);\n }\n\n getAccountInfoById(id, options, callback) {\n if (this.validator.notValid([\n {\n name: 'accountId',\n type: 'hex',\n value: id\n },\n {\n name: 'accountId',\n type: 'string',\n lte: 32,\n gte: 8,\n value: id\n }\n ], callback))\n return;\n\n if (id.startsWith('0x')) {\n id = id.slice(2);\n }\n\n this.tronWeb[options.confirmed ? 'solidityNode' : 'fullNode'].request(`wallet${options.confirmed ? 'solidity' : ''}/getaccountbyid`, {\n account_id: id\n }, 'post').then(account => {\n callback(null, account);\n }).catch(err => callback(err));\n }\n\n getBalance(address = this.tronWeb.defaultAddress.hex, callback = false) {\n if (utils.isFunction(address)) {\n callback = address;\n address = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.getBalance, address);\n\n this.getAccount(address).then(({balance = 0}) => {\n callback(null, balance);\n }).catch(err => callback(err));\n }\n\n getUnconfirmedAccount(address = this.tronWeb.defaultAddress.hex, callback = false) {\n if (utils.isFunction(address)) {\n callback = address;\n address = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.getUnconfirmedAccount, address);\n\n if (!this.tronWeb.isAddress(address))\n return callback('Invalid address provided');\n\n address = this.tronWeb.address.toHex(address);\n\n this.tronWeb.fullNode.request('wallet/getaccount', {\n address\n }, 'post').then(account => {\n callback(null, account);\n }).catch(err => callback(err));\n }\n\n getUnconfirmedAccountById(id, callback = false) {\n if (!callback)\n return this.injectPromise(this.getUnconfirmedAccountById, id);\n\n this.getAccountInfoById(id, {confirmed: false}, callback);\n }\n\n getUnconfirmedBalance(address = this.tronWeb.defaultAddress.hex, callback = false) {\n if (utils.isFunction(address)) {\n callback = address;\n address = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.getUnconfirmedBalance, address);\n\n this.getUnconfirmedAccount(address).then(({balance = 0}) => {\n callback(null, balance);\n }).catch(err => callback(err));\n }\n\n getBandwidth(address = this.tronWeb.defaultAddress.hex, callback = false) {\n if (utils.isFunction(address)) {\n callback = address;\n address = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.getBandwidth, address);\n\n if (!this.tronWeb.isAddress(address))\n return callback('Invalid address provided');\n\n address = this.tronWeb.address.toHex(address);\n\n this.tronWeb.fullNode.request('wallet/getaccountnet', {\n address\n }, 'post').then(({freeNetUsed = 0, freeNetLimit = 0, NetUsed = 0, NetLimit = 0}) => {\n callback(null, (freeNetLimit - freeNetUsed) + (NetLimit - NetUsed));\n }).catch(err => callback(err));\n }\n\n getTokensIssuedByAddress(address = this.tronWeb.defaultAddress.hex, callback = false) {\n if (utils.isFunction(address)) {\n callback = address;\n address = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this.getTokensIssuedByAddress, address);\n\n if (!this.tronWeb.isAddress(address))\n return callback('Invalid address provided');\n\n address = this.tronWeb.address.toHex(address);\n\n this.tronWeb.fullNode.request('wallet/getassetissuebyaccount', {\n address\n }, 'post').then(({assetIssue = false}) => {\n if (!assetIssue)\n return callback(null, {});\n\n const tokens = assetIssue.map(token => {\n return this._parseToken(token);\n }).reduce((tokens, token) => {\n return tokens[token.name] = token, tokens;\n }, {});\n\n callback(null, tokens);\n }).catch(err => callback(err));\n }\n\n getTokenFromID(tokenID = false, callback = false) {\n if (!callback)\n return this.injectPromise(this.getTokenFromID, tokenID);\n\n if (utils.isInteger(tokenID))\n tokenID = tokenID.toString()\n\n if (!utils.isString(tokenID) || !tokenID.length)\n return callback('Invalid token ID provided');\n\n this.tronWeb.fullNode.request('wallet/getassetissuebyname', {\n value: this.tronWeb.fromUtf8(tokenID)\n }, 'post').then(token => {\n if (!token.name)\n return callback('Token does not exist');\n\n callback(null, this._parseToken(token));\n }).catch(err => callback(err));\n }\n\n listNodes(callback = false) {\n if (!callback)\n return this.injectPromise(this.listNodes);\n\n this.tronWeb.fullNode.request('wallet/listnodes').then(({nodes = []}) => {\n callback(null, nodes.map(({address: {host, port}}) => (\n `${this.tronWeb.toUtf8(host)}:${port}`\n )));\n }).catch(err => callback(err));\n }\n\n getBlockRange(start = 0, end = 30, callback = false) {\n if (utils.isFunction(end)) {\n callback = end;\n end = 30;\n }\n\n if (utils.isFunction(start)) {\n callback = start;\n start = 0;\n }\n\n if (!callback)\n return this.injectPromise(this.getBlockRange, start, end);\n\n if (!utils.isInteger(start) || start < 0)\n return callback('Invalid start of range provided');\n\n if (!utils.isInteger(end) || end <= start)\n return callback('Invalid end of range provided');\n\n this.tronWeb.fullNode.request('wallet/getblockbylimitnext', {\n startNum: parseInt(start),\n endNum: parseInt(end) + 1\n }, 'post').then(({block = []}) => {\n callback(null, block);\n }).catch(err => callback(err));\n }\n\n listSuperRepresentatives(callback = false) {\n if (!callback)\n return this.injectPromise(this.listSuperRepresentatives);\n\n this.tronWeb.fullNode.request('wallet/listwitnesses').then(({witnesses = []}) => {\n callback(null, witnesses);\n }).catch(err => callback(err));\n }\n\n listTokens(limit = 0, offset = 0, callback = false) {\n if (utils.isFunction(offset)) {\n callback = offset;\n offset = 0;\n }\n\n if (utils.isFunction(limit)) {\n callback = limit;\n limit = 0;\n }\n\n if (!callback)\n return this.injectPromise(this.listTokens, limit, offset);\n\n if (!utils.isInteger(limit) || limit < 0 || (offset && limit < 1))\n return callback('Invalid limit provided');\n\n if (!utils.isInteger(offset) || offset < 0)\n return callback('Invalid offset provided');\n\n if (!limit) {\n return this.tronWeb.fullNode.request('wallet/getassetissuelist').then(({assetIssue = []}) => {\n callback(null, assetIssue.map(token => this._parseToken(token)));\n }).catch(err => callback(err));\n }\n\n this.tronWeb.fullNode.request('wallet/getpaginatedassetissuelist', {\n offset: parseInt(offset),\n limit: parseInt(limit)\n }, 'post').then(({assetIssue = []}) => {\n callback(null, assetIssue.map(token => this._parseToken(token)));\n }).catch(err => callback(err));\n }\n\n timeUntilNextVoteCycle(callback = false) {\n if (!callback)\n return this.injectPromise(this.timeUntilNextVoteCycle);\n\n this.tronWeb.fullNode.request('wallet/getnextmaintenancetime').then(({num = -1}) => {\n if (num == -1)\n return callback('Failed to get time until next vote cycle');\n\n callback(null, Math.floor(num / 1000));\n }).catch(err => callback(err));\n }\n\n getContract(contractAddress, callback = false) {\n if (!callback)\n return this.injectPromise(this.getContract, contractAddress);\n\n if (!this.tronWeb.isAddress(contractAddress))\n return callback('Invalid contract address provided');\n\n if (this.cache.contracts[contractAddress]) {\n callback(null, this.cache.contracts[contractAddress]);\n return;\n }\n\n contractAddress = this.tronWeb.address.toHex(contractAddress);\n\n this.tronWeb.fullNode.request('wallet/getcontract', {\n value: contractAddress\n }).then(contract => {\n if (contract.Error)\n return callback('Contract does not exist');\n this.cache.contracts[contractAddress] = contract;\n callback(null, contract);\n }).catch(err => callback(err));\n }\n\n async verifyMessage(message = false, signature = false, address = this.tronWeb.defaultAddress.base58, useTronHeader = true, callback = false) {\n if (utils.isFunction(address)) {\n callback = address;\n address = this.tronWeb.defaultAddress.base58;\n useTronHeader = true;\n }\n\n if (utils.isFunction(useTronHeader)) {\n callback = useTronHeader;\n useTronHeader = true;\n }\n\n if (!callback)\n return this.injectPromise(this.verifyMessage, message, signature, address, useTronHeader);\n\n if (!utils.isHex(message))\n return callback('Expected hex message input');\n\n if (Trx.verifySignature(message, address, signature, useTronHeader))\n return callback(null, true);\n\n callback('Signature does not match');\n }\n\n static verifySignature(message, address, signature, useTronHeader = true) {\n message = message.replace(/^0x/, '');\n signature = signature.replace(/^0x/, '');\n const messageBytes = [\n ...toUtf8Bytes(useTronHeader ? TRX_MESSAGE_HEADER : ETH_MESSAGE_HEADER),\n ...utils.code.hexStr2byteArray(message)\n ];\n\n const messageDigest = keccak256(messageBytes);\n const recovered = recoverAddress(messageDigest, {\n recoveryParam: signature.substring(128, 130) == '1c' ? 1 : 0,\n r: '0x' + signature.substring(0, 64),\n s: '0x' + signature.substring(64, 128)\n });\n\n const tronAddress = ADDRESS_PREFIX + recovered.substr(2);\n const base58Address = TronWeb.address.fromHex(tronAddress);\n\n return base58Address == TronWeb.address.fromHex(address);\n }\n\n async sign(transaction = false, privateKey = this.tronWeb.defaultPrivateKey, useTronHeader = true, multisig = false, callback = false) {\n\n if (utils.isFunction(multisig)) {\n callback = multisig;\n multisig = false;\n }\n\n if (utils.isFunction(useTronHeader)) {\n callback = useTronHeader;\n useTronHeader = true;\n multisig = false;\n }\n\n if (utils.isFunction(privateKey)) {\n callback = privateKey;\n privateKey = this.tronWeb.defaultPrivateKey;\n useTronHeader = true;\n multisig = false;\n }\n\n\n if (!callback)\n return this.injectPromise(this.sign, transaction, privateKey, useTronHeader, multisig);\n\n // Message signing\n if (utils.isString(transaction)) {\n\n if (!utils.isHex(transaction))\n return callback('Expected hex message input');\n\n try {\n const signatureHex = Trx.signString(transaction, privateKey, useTronHeader)\n return callback(null, signatureHex);\n } catch (ex) {\n callback(ex);\n }\n }\n\n if (!utils.isObject(transaction))\n return callback('Invalid transaction provided');\n\n if (!multisig && transaction.signature)\n return callback('Transaction is already signed');\n\n try {\n if (!multisig) {\n const address = this.tronWeb.address.toHex(\n this.tronWeb.address.fromPrivateKey(privateKey)\n ).toLowerCase();\n\n if (address !== transaction.raw_data.contract[0].parameter.value.owner_address.toLowerCase())\n return callback('Private key does not match address in transaction');\n }\n return callback(null,\n utils.crypto.signTransaction(privateKey, transaction)\n );\n } catch (ex) {\n callback(ex);\n }\n }\n\n static signString(message, privateKey, useTronHeader = true) {\n message = message.replace(/^0x/, '');\n const signingKey = new SigningKey(privateKey);\n const messageBytes = [\n ...toUtf8Bytes(useTronHeader ? TRX_MESSAGE_HEADER : ETH_MESSAGE_HEADER),\n ...utils.code.hexStr2byteArray(message)\n ];\n\n const messageDigest = keccak256(messageBytes);\n const signature = signingKey.signDigest(messageDigest);\n\n const signatureHex = [\n '0x',\n signature.r.substring(2),\n signature.s.substring(2),\n Number(signature.v).toString(16)\n ].join('');\n\n return signatureHex\n }\n\n async multiSign(transaction = false, privateKey = this.tronWeb.defaultPrivateKey, permissionId = false, callback = false) {\n\n if (utils.isFunction(permissionId)) {\n callback = permissionId;\n permissionId = 0;\n }\n\n if (utils.isFunction(privateKey)) {\n callback = privateKey;\n privateKey = this.tronWeb.defaultPrivateKey;\n permissionId = 0;\n }\n\n if (!callback)\n return this.injectPromise(this.multiSign, transaction, privateKey, permissionId);\n\n if (!utils.isObject(transaction) || !transaction.raw_data || !transaction.raw_data.contract)\n return callback('Invalid transaction provided');\n\n // If owner permission or permission id exists in transaction, do sign directly\n // If no permission id inside transaction or user passes permission id, use old way to reset permission id\n if (!transaction.raw_data.contract[0].Permission_id && permissionId > 0) {\n // set permission id\n transaction.raw_data.contract[0].Permission_id = permissionId;\n\n // check if private key insides permission list\n const address = this.tronWeb.address.toHex(this.tronWeb.address.fromPrivateKey(privateKey)).toLowerCase();\n const signWeight = await this.getSignWeight(transaction, permissionId);\n\n if (signWeight.result.code === 'PERMISSION_ERROR') {\n return callback(signWeight.result.message);\n }\n\n let foundKey = false;\n signWeight.permission.keys.map(key => {\n if (key.address === address)\n foundKey = true;\n });\n\n if (!foundKey)\n return callback(privateKey + ' has no permission to sign');\n\n if (signWeight.approved_list && signWeight.approved_list.indexOf(address) != -1) {\n return callback(privateKey + ' already sign transaction');\n }\n\n // reset transaction\n if (signWeight.transaction && signWeight.transaction.transaction) {\n transaction = signWeight.transaction.transaction;\n if (permissionId > 0) {\n transaction.raw_data.contract[0].Permission_id = permissionId;\n }\n } else {\n return callback('Invalid transaction provided');\n }\n }\n\n // sign\n try {\n return callback(null, utils.crypto.signTransaction(privateKey, transaction));\n } catch (ex) {\n callback(ex);\n }\n }\n\n async getApprovedList(transaction, callback = false) {\n if (!callback)\n return this.injectPromise(this.getApprovedList, transaction);\n\n if (!utils.isObject(transaction))\n return callback('Invalid transaction provided');\n\n\n this.tronWeb.fullNode.request(\n 'wallet/getapprovedlist',\n transaction,\n 'post'\n ).then(result => {\n callback(null, result);\n }).catch(err => callback(err));\n }\n\n async getSignWeight(transaction, permissionId, callback = false) {\n if (utils.isFunction(permissionId)) {\n callback = permissionId;\n permissionId = undefined;\n }\n\n if (!callback)\n return this.injectPromise(this.getSignWeight, transaction, permissionId);\n\n if (!utils.isObject(transaction) || !transaction.raw_data || !transaction.raw_data.contract)\n return callback('Invalid transaction provided');\n\n if (utils.isInteger(permissionId)) {\n transaction.raw_data.contract[0].Permission_id = parseInt(permissionId);\n } else if (typeof transaction.raw_data.contract[0].Permission_id !== 'number') {\n transaction.raw_data.contract[0].Permission_id = 0;\n }\n\n if (!utils.isObject(transaction))\n return callback('Invalid transaction provided');\n\n\n this.tronWeb.fullNode.request(\n 'wallet/getsignweight',\n transaction,\n 'post'\n ).then(result => {\n callback(null, result);\n }).catch(err => callback(err));\n }\n\n sendRawTransaction(signedTransaction = false, options = {}, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (!callback)\n return this.injectPromise(this.sendRawTransaction, signedTransaction, options);\n\n if (!utils.isObject(signedTransaction))\n return callback('Invalid transaction provided');\n\n if (!utils.isObject(options))\n return callback('Invalid options provided');\n\n if (!signedTransaction.signature || !utils.isArray(signedTransaction.signature))\n return callback('Transaction is not signed');\n\n this.tronWeb.fullNode.request(\n 'wallet/broadcasttransaction',\n signedTransaction,\n 'post'\n ).then(result => {\n if (result.result)\n result.transaction = signedTransaction;\n callback(null, result);\n }).catch(err => callback(err));\n }\n\n async sendTransaction(to = false, amount = false, options = {}, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (typeof options === 'string')\n options = {privateKey: options};\n\n if (!callback)\n return this.injectPromise(this.sendTransaction, to, amount, options);\n\n if (!this.tronWeb.isAddress(to))\n return callback('Invalid recipient provided');\n\n if (!utils.isInteger(amount) || amount <= 0)\n return callback('Invalid amount provided');\n\n options = {\n privateKey: this.tronWeb.defaultPrivateKey,\n address: this.tronWeb.defaultAddress.hex,\n ...options\n };\n\n if (!options.privateKey && !options.address)\n return callback('Function requires either a private key or address to be set');\n\n try {\n const address = options.privateKey ? this.tronWeb.address.fromPrivateKey(options.privateKey) : options.address;\n const transaction = await this.tronWeb.transactionBuilder.sendTrx(to, amount, address);\n const signedTransaction = await this.sign(transaction, options.privateKey || undefined);\n const result = await this.sendRawTransaction(signedTransaction);\n\n return callback(null, result);\n } catch (ex) {\n return callback(ex);\n }\n }\n\n async sendToken(to = false, amount = false, tokenID = false, options = {}, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (typeof options === 'string')\n options = {privateKey: options};\n\n if (!callback)\n return this.injectPromise(this.sendToken, to, amount, tokenID, options);\n\n if (!this.tronWeb.isAddress(to))\n return callback('Invalid recipient provided');\n\n if (!utils.isInteger(amount) || amount <= 0)\n return callback('Invalid amount provided');\n\n if (utils.isInteger(tokenID))\n tokenID = tokenID.toString()\n\n if (!utils.isString(tokenID))\n return callback('Invalid token ID provided');\n\n options = {\n privateKey: this.tronWeb.defaultPrivateKey,\n address: this.tronWeb.defaultAddress.hex,\n ...options\n };\n\n if (!options.privateKey && !options.address)\n return callback('Function requires either a private key or address to be set');\n\n try {\n const address = options.privateKey ? this.tronWeb.address.fromPrivateKey(options.privateKey) : options.address;\n const transaction = await this.tronWeb.transactionBuilder.sendToken(to, amount, tokenID, address);\n const signedTransaction = await this.sign(transaction, options.privateKey || undefined);\n const result = await this.sendRawTransaction(signedTransaction);\n\n return callback(null, result);\n } catch (ex) {\n return callback(ex);\n }\n }\n\n /**\n * Freezes an amount of TRX.\n * Will give bandwidth OR Energy and TRON Power(voting rights)\n * to the owner of the frozen tokens.\n *\n * @param amount - is the number of frozen trx\n * @param duration - is the duration in days to be frozen\n * @param resource - is the type, must be either \"ENERGY\" or \"BANDWIDTH\"\n * @param options\n * @param callback\n */\n async freezeBalance(amount = 0, duration = 3, resource = \"BANDWIDTH\", options = {}, receiverAddress = undefined, callback = false) {\n if (utils.isFunction(receiverAddress)) {\n callback = receiverAddress;\n receiverAddress = undefined;\n }\n if (utils.isFunction(duration)) {\n callback = duration;\n duration = 3;\n }\n\n if (utils.isFunction(resource)) {\n callback = resource;\n resource = \"BANDWIDTH\";\n }\n\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (typeof options === 'string')\n options = {privateKey: options};\n\n if (!callback)\n return this.injectPromise(this.freezeBalance, amount, duration, resource, options, receiverAddress);\n\n if (!['BANDWIDTH', 'ENERGY'].includes(resource))\n return callback('Invalid resource provided: Expected \"BANDWIDTH\" or \"ENERGY\"');\n\n if (!utils.isInteger(amount) || amount <= 0)\n return callback('Invalid amount provided');\n\n if (!utils.isInteger(duration) || duration < 3)\n return callback('Invalid duration provided, minimum of 3 days');\n\n options = {\n privateKey: this.tronWeb.defaultPrivateKey,\n address: this.tronWeb.defaultAddress.hex,\n ...options\n };\n\n if (!options.privateKey && !options.address)\n return callback('Function requires either a private key or address to be set');\n\n try {\n const address = options.privateKey ? this.tronWeb.address.fromPrivateKey(options.privateKey) : options.address;\n const freezeBalance = await this.tronWeb.transactionBuilder.freezeBalance(amount, duration, resource, address, receiverAddress);\n const signedTransaction = await this.sign(freezeBalance, options.privateKey || undefined);\n const result = await this.sendRawTransaction(signedTransaction);\n\n return callback(null, result);\n } catch (ex) {\n return callback(ex);\n }\n }\n\n /**\n * Unfreeze TRX that has passed the minimum freeze duration.\n * Unfreezing will remove bandwidth and TRON Power.\n *\n * @param resource - is the type, must be either \"ENERGY\" or \"BANDWIDTH\"\n * @param options\n * @param callback\n */\n async unfreezeBalance(resource = \"BANDWIDTH\", options = {}, receiverAddress = undefined, callback = false) {\n if (utils.isFunction(receiverAddress)) {\n callback = receiverAddress;\n receiverAddress = undefined;\n }\n\n if (utils.isFunction(resource)) {\n callback = resource;\n resource = 'BANDWIDTH';\n }\n\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (typeof options === 'string')\n options = {privateKey: options};\n\n if (!callback)\n return this.injectPromise(this.unfreezeBalance, resource, options, receiverAddress);\n\n if (!['BANDWIDTH', 'ENERGY'].includes(resource))\n return callback('Invalid resource provided: Expected \"BANDWIDTH\" or \"ENERGY\"');\n\n options = {\n privateKey: this.tronWeb.defaultPrivateKey,\n address: this.tronWeb.defaultAddress.hex,\n ...options\n };\n\n if (!options.privateKey && !options.address)\n return callback('Function requires either a private key or address to be set');\n\n try {\n const address = options.privateKey ? this.tronWeb.address.fromPrivateKey(options.privateKey) : options.address;\n const unfreezeBalance = await this.tronWeb.transactionBuilder.unfreezeBalance(resource, address, receiverAddress);\n const signedTransaction = await this.sign(unfreezeBalance, options.privateKey || undefined);\n const result = await this.sendRawTransaction(signedTransaction);\n\n return callback(null, result);\n } catch (ex) {\n return callback(ex);\n }\n }\n\n /**\n * Modify account name\n * Note: Username is allowed to edit only once.\n *\n * @param privateKey - Account private Key\n * @param accountName - name of the account\n * @param callback\n *\n * @return modified Transaction Object\n */\n async updateAccount(accountName = false, options = {}, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (typeof options === 'string')\n options = {privateKey: options};\n\n if (!callback) {\n return this.injectPromise(this.updateAccount, accountName, options);\n }\n\n if (!utils.isString(accountName) || !accountName.length) {\n return callback('Name must be a string');\n }\n\n options = {\n privateKey: this.tronWeb.defaultPrivateKey,\n address: this.tronWeb.defaultAddress.hex,\n ...options\n };\n\n if (!options.privateKey && !options.address)\n return callback('Function requires either a private key or address to be set');\n\n try {\n const address = options.privateKey ? this.tronWeb.address.fromPrivateKey(options.privateKey) : options.address;\n const updateAccount = await this.tronWeb.transactionBuilder.updateAccount(accountName, address);\n const signedTransaction = await this.sign(updateAccount, options.privateKey || undefined);\n const result = await this.sendRawTransaction(signedTransaction);\n\n return callback(null, result);\n } catch (ex) {\n return callback(ex);\n }\n }\n\n signMessage(...args) {\n return this.sign(...args);\n }\n\n sendAsset(...args) {\n return this.sendToken(...args);\n }\n\n send(...args) {\n return this.sendTransaction(...args);\n }\n\n sendTrx(...args) {\n return this.sendTransaction(...args);\n }\n\n broadcast(...args) {\n return this.sendRawTransaction(...args);\n }\n\n signTransaction(...args) {\n return this.sign(...args);\n }\n\n /**\n * Gets a network modification proposal by ID.\n */\n getProposal(proposalID = false, callback = false) {\n if (!callback)\n return this.injectPromise(this.getProposal, proposalID);\n\n if (!utils.isInteger(proposalID) || proposalID < 0)\n return callback('Invalid proposalID provided');\n\n this.tronWeb.fullNode.request('wallet/getproposalbyid', {\n id: parseInt(proposalID),\n }, 'post').then(proposal => {\n callback(null, proposal);\n }).catch(err => callback(err));\n }\n\n /**\n * Lists all network modification proposals.\n */\n listProposals(callback = false) {\n if (!callback)\n return this.injectPromise(this.listProposals);\n\n this.tronWeb.fullNode.request('wallet/listproposals', {}, 'post').then(({proposals = []}) => {\n callback(null, proposals);\n }).catch(err => callback(err));\n }\n\n /**\n * Lists all parameters available for network modification proposals.\n */\n getChainParameters(callback = false) {\n if (!callback)\n return this.injectPromise(this.getChainParameters);\n\n this.tronWeb.fullNode.request('wallet/getchainparameters', {}, 'post').then(({chainParameter = []}) => {\n callback(null, chainParameter);\n }).catch(err => callback(err));\n }\n\n /**\n * Get the account resources\n */\n getAccountResources(address = this.tronWeb.defaultAddress.hex, callback = false) {\n if (!callback)\n return this.injectPromise(this.getAccountResources, address);\n\n if (!this.tronWeb.isAddress(address))\n return callback('Invalid address provided');\n\n this.tronWeb.fullNode.request('wallet/getaccountresource', {\n address: this.tronWeb.address.toHex(address),\n }, 'post').then(resources => {\n callback(null, resources);\n }).catch(err => callback(err));\n }\n\n /**\n * Get the exchange ID.\n */\n getExchangeByID(exchangeID = false, callback = false) {\n if (!callback)\n return this.injectPromise(this.getExchangeByID, exchangeID);\n\n if (!utils.isInteger(exchangeID) || exchangeID < 0)\n return callback('Invalid exchangeID provided');\n\n this.tronWeb.fullNode.request('wallet/getexchangebyid', {\n id: exchangeID,\n }, 'post').then(exchange => {\n callback(null, exchange);\n }).catch(err => callback(err));\n }\n\n /**\n * Lists the exchanges\n */\n listExchanges(callback = false) {\n if (!callback)\n return this.injectPromise(this.listExchanges);\n\n this.tronWeb.fullNode.request('wallet/listexchanges', {}, 'post').then(({exchanges = []}) => {\n callback(null, exchanges);\n }, 'post').catch(err => callback(err));\n }\n\n /**\n * Lists all network modification proposals.\n */\n listExchangesPaginated(limit = 10, offset = 0, callback = false) {\n if (utils.isFunction(offset)) {\n callback = offset;\n offset = 0;\n }\n if (utils.isFunction(limit)) {\n callback = limit;\n limit = 30;\n }\n if (!callback)\n return this.injectPromise(this.listExchanges);\n\n this.tronWeb.fullNode.request('wallet/listexchangespaginated', {\n limit,\n offset\n }, 'post').then(({exchanges = []}) => {\n callback(null, exchanges);\n }).catch(err => callback(err));\n }\n\n /**\n * Get info about thre node\n */\n getNodeInfo(callback = false) {\n if (!callback)\n return this.injectPromise(this.getNodeInfo);\n\n this.tronWeb.fullNode.request('wallet/getnodeinfo', {}, 'post').then(info => {\n callback(null, info);\n }, 'post').catch(err => callback(err));\n }\n\n\n getTokenListByName(tokenID = false, callback = false) {\n if (!callback)\n return this.injectPromise(this.getTokenListByName, tokenID);\n\n if (utils.isInteger(tokenID))\n tokenID = tokenID.toString()\n\n if (!utils.isString(tokenID) || !tokenID.length)\n return callback('Invalid token ID provided');\n\n this.tronWeb.fullNode.request('wallet/getassetissuelistbyname', {\n value: this.tronWeb.fromUtf8(tokenID)\n }, 'post').then(token => {\n if (Array.isArray(token.assetIssue)) {\n callback(null, token.assetIssue.map(t => this._parseToken(t)));\n } else if (!token.name)\n return callback('Token does not exist');\n\n callback(null, this._parseToken(token));\n }).catch(err => callback(err));\n }\n\n getTokenByID(tokenID = false, callback = false) {\n if (!callback)\n return this.injectPromise(this.getTokenByID, tokenID);\n\n if (utils.isInteger(tokenID))\n tokenID = tokenID.toString()\n\n if (!utils.isString(tokenID) || !tokenID.length)\n return callback('Invalid token ID provided');\n\n this.tronWeb.fullNode.request('wallet/getassetissuebyid', {\n value: tokenID\n }, 'post').then(token => {\n if (!token.name)\n return callback('Token does not exist');\n\n callback(null, this._parseToken(token));\n }).catch(err => callback(err));\n }\n\n async getReward(address, options = {}, callback = false) {\n options.confirmed = true;\n return this._getReward(address, options, callback);\n }\n\n async getUnconfirmedReward(address, options = {}, callback = false) {\n options.confirmed = false;\n return this._getReward(address, options, callback);\n }\n\n async getBrokerage(address, options = {}, callback = false) {\n options.confirmed = true;\n return this._getBrokerage(address, options, callback);\n }\n\n async getUnconfirmedBrokerage(address, options = {}, callback = false) {\n options.confirmed = false;\n return this._getBrokerage(address, options, callback);\n }\n\n async _getReward(address = this.tronWeb.defaultAddress.hex, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(address)) {\n callback = address;\n address = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(address)) {\n options = address;\n address = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this._getReward, address, options);\n\n if (this.validator.notValid([\n {\n name: 'origin',\n type: 'address',\n value: address\n }\n ], callback))\n return;\n\n const data = {\n address: toHex(address)\n };\n\n this.tronWeb[options.confirmed ? 'solidityNode' : 'fullNode'].request(`wallet${options.confirmed ? 'solidity' : ''}/getReward`, data, 'post')\n .then((result = {}) => {\n\n if (typeof result.reward === 'undefined')\n return callback('Not found.');\n\n callback(null, result.reward);\n }).catch(err => callback(err));\n }\n\n\n async _getBrokerage(address = this.tronWeb.defaultAddress.hex, options, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (utils.isFunction(address)) {\n callback = address;\n address = this.tronWeb.defaultAddress.hex;\n } else if (utils.isObject(address)) {\n options = address;\n address = this.tronWeb.defaultAddress.hex;\n }\n\n if (!callback)\n return this.injectPromise(this._getBrokerage, address, options);\n\n if (this.validator.notValid([\n {\n name: 'origin',\n type: 'address',\n value: address\n }\n ], callback))\n return;\n\n const data = {\n address: toHex(address)\n };\n\n this.tronWeb[options.confirmed ? 'solidityNode' : 'fullNode'].request(`wallet${options.confirmed ? 'solidity' : ''}/getBrokerage`, data, 'post')\n .then((result = {}) => {\n\n if (typeof result.brokerage === 'undefined')\n return callback('Not found.');\n\n callback(null, result.brokerage);\n }).catch(err => callback(err));\n }\n\n};\n","import utils from 'utils';\nimport {ADDRESS_PREFIX_REGEX} from 'utils/address';\nimport injectpromise from 'injectpromise';\n\nconst getFunctionSelector = abi => {\n return abi.name + '(' + getParamTypes(abi.inputs || []).join(',') + ')';\n}\n\nconst getParamTypes = params => {\n return params.map(({type}) => type);\n}\n\nconst decodeOutput = (abi, output) => {\n const names = abi.map(({name}) => name).filter(name => !!name);\n const types = abi.map(({type}) => type);\n\n return utils.abi.decodeParams(names, types, output);\n};\n\nexport default class Method {\n constructor(contract, abi) {\n this.tronWeb = contract.tronWeb;\n this.contract = contract;\n\n this.abi = abi;\n this.name = abi.name || (abi.name = abi.type);\n\n this.inputs = abi.inputs || [];\n this.outputs = abi.outputs || [];\n\n this.functionSelector = getFunctionSelector(abi);\n this.signature = this.tronWeb.sha3(this.functionSelector, false).slice(0, 8);\n this.injectPromise = injectpromise(this);\n\n this.defaultOptions = {\n feeLimit: 1000000000,\n callValue: 0,\n userFeePercentage: 100,\n shouldPollResponse: false // Only used for sign()\n };\n }\n\n decodeInput(data) {\n return decodeOutput(this.inputs, '0x' + data);\n }\n\n onMethod(...args) {\n const types = getParamTypes(this.inputs);\n\n args.forEach((arg, index) => {\n if (types[index] == 'address')\n args[index] = this.tronWeb.address.toHex(arg).replace(ADDRESS_PREFIX_REGEX, '0x')\n\n if (types[index] == 'address[]') {\n args[index] = args[index].map(address => {\n return this.tronWeb.address.toHex(address).replace(ADDRESS_PREFIX_REGEX, '0x')\n })\n }\n });\n\n return {\n call: (...methodArgs) => this._call(types, args, ...methodArgs),\n send: (...methodArgs) => this._send(types, args, ...methodArgs),\n watch: (...methodArgs) => this._watch(...methodArgs)\n }\n }\n\n async _call(types, args, options = {}, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (!callback)\n return this.injectPromise(this._call, types, args, options);\n\n if (types.length !== args.length)\n return callback('Invalid argument count provided');\n\n if (!this.contract.address)\n return callback('Smart contract is missing address');\n\n if (!this.contract.deployed)\n return callback('Calling smart contracts requires you to load the contract first');\n\n const {stateMutability} = this.abi;\n\n if (!['pure', 'view'].includes(stateMutability.toLowerCase()))\n return callback(`Methods with state mutability \"${stateMutability}\" must use send()`);\n\n options = {\n ...this.defaultOptions,\n from: this.tronWeb.defaultAddress.hex,\n ...options,\n };\n\n const parameters = args.map((value, index) => ({\n type: types[index],\n value\n }));\n\n this.tronWeb.transactionBuilder.triggerSmartContract(\n this.contract.address,\n this.functionSelector,\n options,\n parameters,\n options.from ? this.tronWeb.address.toHex(options.from) : false,\n (err, transaction) => {\n if (err)\n return callback(err);\n\n if (!utils.hasProperty(transaction, 'constant_result'))\n return callback('Failed to execute');\n\n try {\n\n const len = transaction.constant_result[0].length\n if (len === 0 || len % 64 === 8) {\n let msg = 'The call has been reverted or has thrown an error.'\n if (len !== 0) {\n msg += ' Error message: '\n let msg2 = ''\n let chunk = transaction.constant_result[0].substring(8)\n for (let i = 0; i < len - 8; i += 64) {\n msg2 += this.tronWeb.toUtf8(chunk.substring(i, i + 64))\n }\n msg += msg2.replace(/(\\u0000|\\u000b|\\f)+/g, ' ').replace(/ +/g, ' ').replace(/\\s+$/g, '');\n }\n return callback(msg)\n }\n\n let output = decodeOutput(this.outputs, '0x' + transaction.constant_result[0]);\n\n if (output.length === 1)\n output = output[0];\n\n return callback(null, output);\n } catch (ex) {\n return callback(ex);\n }\n });\n }\n\n async _send(types, args, options = {}, privateKey = this.tronWeb.defaultPrivateKey, callback = false) {\n if (utils.isFunction(privateKey)) {\n callback = privateKey;\n privateKey = this.tronWeb.defaultPrivateKey;\n }\n\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (!callback)\n return this.injectPromise(this._send, types, args, options, privateKey);\n\n if (types.length !== args.length)\n throw new Error('Invalid argument count provided');\n\n if (!this.contract.address)\n return callback('Smart contract is missing address');\n\n if (!this.contract.deployed)\n return callback('Calling smart contracts requires you to load the contract first');\n\n const {stateMutability} = this.abi;\n\n if (['pure', 'view'].includes(stateMutability.toLowerCase()))\n return callback(`Methods with state mutability \"${stateMutability}\" must use call()`);\n\n // If a function isn't payable, dont provide a callValue.\n if (!['payable'].includes(stateMutability.toLowerCase()))\n options.callValue = 0;\n\n options = {\n ...this.defaultOptions,\n from: this.tronWeb.defaultAddress.hex,\n ...options,\n };\n\n const parameters = args.map((value, index) => ({\n type: types[index],\n value\n }));\n\n try {\n const address = privateKey ? this.tronWeb.address.fromPrivateKey(privateKey) : this.tronWeb.defaultAddress.base58;\n const transaction = await this.tronWeb.transactionBuilder.triggerSmartContract(\n this.contract.address,\n this.functionSelector,\n options,\n parameters,\n this.tronWeb.address.toHex(address)\n );\n\n if (!transaction.result || !transaction.result.result)\n return callback('Unknown error: ' + JSON.stringify(transaction, null, 2));\n\n // If privateKey is false, this won't be signed here. We assume sign functionality will be replaced.\n const signedTransaction = await this.tronWeb.trx.sign(transaction.transaction, privateKey);\n\n if (!signedTransaction.signature) {\n if (!privateKey)\n return callback('Transaction was not signed properly');\n\n return callback('Invalid private key provided');\n }\n\n const broadcast = await this.tronWeb.trx.sendRawTransaction(signedTransaction);\n\n if (broadcast.code) {\n const err = {\n error: broadcast.code,\n message: broadcast.code\n };\n if (broadcast.message)\n err.message = this.tronWeb.toUtf8(broadcast.message);\n return callback(err)\n }\n\n if (!options.shouldPollResponse)\n return callback(null, signedTransaction.txID);\n\n const checkResult = async (index = 0) => {\n if (index === 20) {\n return callback({\n error: 'Cannot find result in solidity node',\n transaction: signedTransaction\n });\n }\n\n const output = await this.tronWeb.trx.getTransactionInfo(signedTransaction.txID);\n\n if (!Object.keys(output).length) {\n return setTimeout(() => {\n checkResult(index + 1);\n }, 3000);\n }\n\n if (output.result && output.result === 'FAILED') {\n return callback({\n error: this.tronWeb.toUtf8(output.resMessage),\n transaction: signedTransaction,\n output\n });\n }\n\n if (!utils.hasProperty(output, 'contractResult')) {\n return callback({\n error: 'Failed to execute: ' + JSON.stringify(output, null, 2),\n transaction: signedTransaction,\n output\n });\n }\n\n if (options.rawResponse)\n return callback(null, output);\n\n let decoded = decodeOutput(this.outputs, '0x' + output.contractResult[0]);\n\n if (decoded.length === 1)\n decoded = decoded[0];\n\n if (options.keepTxID) {\n return callback(null, [signedTransaction.txID, decoded]);\n }\n\n return callback(null, decoded);\n }\n\n checkResult();\n } catch (ex) {\n return callback(ex);\n }\n }\n\n async _watch(options = {}, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (!utils.isFunction(callback))\n throw new Error('Expected callback to be provided');\n\n if (!this.contract.address)\n return callback('Smart contract is missing address');\n\n if (!this.abi.type || !/event/i.test(this.abi.type))\n return callback('Invalid method type for event watching');\n\n if (!this.tronWeb.eventServer)\n return callback('No event server configured');\n\n let listener = false;\n let lastBlock = false;\n let since = Date.now() - 1000;\n\n const getEvents = async () => {\n try {\n\n const params = {\n since,\n eventName: this.name,\n sort: 'block_timestamp',\n blockNumber: 'latest',\n filters: options.filters\n }\n if (options.resourceNode) {\n if (/full/i.test(options.resourceNode))\n params.onlyUnconfirmed = true\n else\n params.onlyConfirmed = true\n }\n\n const events = await this.tronWeb.event.getEventsByContractAddress(this.contract.address, params);\n const [latestEvent] = events.sort((a, b) => b.block - a.block);\n const newEvents = events.filter((event, index) => {\n\n if (options.resourceNode && event.resourceNode &&\n options.resourceNode.toLowerCase() !== event.resourceNode.toLowerCase()) {\n return false\n }\n\n const duplicate = events.slice(0, index).some(priorEvent => (\n JSON.stringify(priorEvent) == JSON.stringify(event)\n ));\n\n if (duplicate)\n return false;\n\n if (!lastBlock)\n return true;\n\n return event.block > lastBlock;\n });\n\n if (latestEvent)\n lastBlock = latestEvent.block;\n\n return newEvents;\n } catch (ex) {\n return Promise.reject(ex);\n }\n\n };\n\n const bindListener = () => {\n if (listener)\n clearInterval(listener);\n\n listener = setInterval(() => {\n getEvents().then(events => events.forEach(event => {\n callback(null, utils.parseEvent(event, this.abi))\n })).catch(err => callback(err));\n }, 3000);\n };\n\n await getEvents();\n bindListener();\n\n return {\n start: bindListener(),\n stop: () => {\n if (!listener)\n return;\n\n clearInterval(listener);\n listener = false;\n }\n }\n }\n}\n","import TronWeb from 'index';\nimport utils from 'utils';\nimport Method from './method';\nimport injectpromise from 'injectpromise';\n\nexport default class Contract {\n constructor(tronWeb = false, abi = [], address = false) {\n if (!tronWeb || !tronWeb instanceof TronWeb)\n throw new Error('Expected instance of TronWeb');\n\n this.tronWeb = tronWeb;\n this.injectPromise = injectpromise(this);\n\n this.address = address;\n this.abi = abi;\n\n this.eventListener = false;\n this.bytecode = false;\n this.deployed = false;\n this.lastBlock = false;\n\n this.methods = {};\n this.methodInstances = {};\n this.props = [];\n\n if (this.tronWeb.isAddress(address))\n this.deployed = true;\n else this.address = false;\n\n this.loadAbi(abi);\n }\n\n async _getEvents(options = {}) {\n const events = await this.tronWeb.event.getEventsByContractAddress(this.address, options);\n const [latestEvent] = events.sort((a, b) => b.block - a.block);\n const newEvents = events.filter((event, index) => {\n\n if (options.resourceNode && event.resourceNode &&\n options.resourceNode.toLowerCase() !== event.resourceNode.toLowerCase()) {\n return false\n }\n\n const duplicate = events.slice(0, index).some(priorEvent => (\n JSON.stringify(priorEvent) == JSON.stringify(event)\n ));\n\n if (duplicate)\n return false;\n\n if (!this.lastBlock)\n return true;\n\n return event.block > this.lastBlock;\n });\n\n if (latestEvent)\n this.lastBlock = latestEvent.block;\n\n return newEvents;\n }\n\n async _startEventListener(options = {}, callback) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (this.eventListener)\n clearInterval(this.eventListener);\n\n if (!this.tronWeb.eventServer)\n throw new Error('Event server is not configured');\n\n if (!this.address)\n throw new Error('Contract is not configured with an address');\n\n this.eventCallback = callback;\n await this._getEvents(options);\n\n this.eventListener = setInterval(() => {\n this._getEvents(options).then(newEvents => newEvents.forEach(event => {\n this.eventCallback && this.eventCallback(event)\n })).catch(err => {\n console.error('Failed to get event list', err);\n });\n }, 3000);\n }\n\n _stopEventListener() {\n if (!this.eventListener)\n return;\n\n clearInterval(this.eventListener);\n this.eventListener = false;\n this.eventCallback = false;\n }\n\n hasProperty(property) {\n return this.hasOwnProperty(property) || this.__proto__.hasOwnProperty(property);\n }\n\n loadAbi(abi) {\n this.abi = abi;\n this.methods = {};\n\n this.props.forEach(prop => delete this[prop]);\n\n abi.forEach(func => {\n // Don't build a method for constructor function. That's handled through contract create.\n if (!func.type || /constructor/i.test(func.type))\n return;\n\n const method = new Method(this, func);\n const methodCall = method.onMethod.bind(method);\n\n const {\n name,\n functionSelector,\n signature\n } = method;\n\n this.methods[name] = methodCall;\n this.methods[functionSelector] = methodCall;\n this.methods[signature] = methodCall;\n\n this.methodInstances[name] = method;\n this.methodInstances[functionSelector] = method;\n this.methodInstances[signature] = method;\n\n if (!this.hasProperty(name)) {\n this[name] = methodCall;\n this.props.push(name);\n }\n\n if (!this.hasProperty(functionSelector)) {\n this[functionSelector] = methodCall;\n this.props.push(functionSelector);\n }\n\n if (!this.hasProperty(signature)) {\n this[signature] = methodCall;\n this.props.push(signature);\n }\n });\n }\n\n decodeInput(data) {\n\n const methodName = data.substring(0, 8);\n const inputData = data.substring(8);\n\n if (!this.methodInstances[methodName])\n throw new Error('Contract method ' + methodName + \" not found\");\n\n const methodInstance = this.methodInstances[methodName];\n\n return {\n name: methodInstance.name,\n params: this.methodInstances[methodName].decodeInput(inputData),\n }\n }\n\n async new(options, privateKey = this.tronWeb.defaultPrivateKey, callback = false) {\n if (utils.isFunction(privateKey)) {\n callback = privateKey;\n privateKey = this.tronWeb.defaultPrivateKey;\n }\n\n if (!callback)\n return this.injectPromise(this.new, options, privateKey);\n\n try {\n const address = this.tronWeb.address.fromPrivateKey(privateKey);\n const transaction = await this.tronWeb.transactionBuilder.createSmartContract(options, address);\n const signedTransaction = await this.tronWeb.trx.sign(transaction, privateKey);\n const contract = await this.tronWeb.trx.sendRawTransaction(signedTransaction);\n\n if (contract.code)\n return callback({\n error: contract.code,\n message: this.tronWeb.toUtf8(contract.message)\n })\n\n await utils.sleep(3000);\n return this.at(signedTransaction.contract_address, callback);\n } catch (ex) {\n return callback(ex);\n }\n }\n\n async at(contractAddress, callback = false) {\n if (!callback)\n return this.injectPromise(this.at, contractAddress);\n\n try {\n const contract = await this.tronWeb.trx.getContract(contractAddress);\n\n if (!contract.contract_address)\n return callback('Unknown error: ' + JSON.stringify(contract, null, 2));\n\n this.address = contract.contract_address;\n this.bytecode = contract.bytecode;\n this.deployed = true;\n\n this.loadAbi(contract.abi ? contract.abi.entrys : []);\n\n return callback(null, this);\n } catch (ex) {\n if (ex.toString().includes('does not exist'))\n return callback('Contract has not been deployed on the network');\n\n return callback(ex);\n }\n }\n\n events(options = {}, callback = false) {\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (!utils.isFunction(callback))\n throw new Error('Callback function expected');\n\n const self = this;\n\n return {\n start(startCallback = false) {\n if (!startCallback) {\n self._startEventListener(options, callback);\n return this;\n }\n\n self._startEventListener(options, callback).then(() => {\n startCallback();\n }).catch(err => {\n startCallback(err)\n });\n\n return this;\n },\n stop() {\n self._stopEventListener();\n }\n };\n }\n}\n","import TronWeb from 'index';\nimport utils from 'utils';\nimport semver from 'semver';\n\nexport default class Plugin {\n\n constructor(tronWeb = false, options = {}) {\n if (!tronWeb || !tronWeb instanceof TronWeb)\n throw new Error('Expected instance of TronWeb');\n this.tronWeb = tronWeb;\n this.pluginNoOverride = ['register'];\n this.disablePlugins = options.disablePlugins;\n }\n\n register(Plugin, options) {\n let pluginInterface = {\n requires: '0.0.0',\n components: {}\n }\n let result = {\n libs: [],\n plugged: [],\n skipped: []\n }\n if (this.disablePlugins) {\n result.error = 'This instance of TronWeb has plugins disabled.'\n return result;\n }\n const plugin = new Plugin(this.tronWeb)\n if (utils.isFunction(plugin.pluginInterface)) {\n pluginInterface = plugin.pluginInterface(options)\n }\n if (semver.satisfies(TronWeb.version, pluginInterface.requires)) {\n if (pluginInterface.fullClass) {\n // plug the entire class at the same level of tronWeb.trx\n let className = plugin.constructor.name\n let classInstanceName = className.substring(0, 1).toLowerCase() + className.substring(1)\n if (className !== classInstanceName) {\n TronWeb[className] = Plugin\n this.tronWeb[classInstanceName] = plugin\n result.libs.push(className)\n }\n } else {\n // plug methods into a class, like trx\n for (let component in pluginInterface.components) {\n if (!this.tronWeb.hasOwnProperty(component)) {\n continue\n }\n let methods = pluginInterface.components[component]\n let pluginNoOverride = this.tronWeb[component].pluginNoOverride || []\n for (let method in methods) {\n if (method === 'constructor' || (this.tronWeb[component][method] &&\n (pluginNoOverride.includes(method) // blacklisted methods\n || /^_/.test(method)) // private methods\n )) {\n result.skipped.push(method)\n continue\n }\n this.tronWeb[component][method] = methods[method].bind(this.tronWeb[component])\n result.plugged.push(method)\n }\n }\n }\n } else {\n throw new Error('The plugin is not compatible with this version of TronWeb')\n }\n return result\n }\n}\n\n","import TronWeb from 'index';\nimport utils from 'utils';\nimport providers from \"./providers\";\nimport querystring from \"querystring\";\nimport injectpromise from 'injectpromise';\n\nexport default class Event {\n\n constructor(tronWeb = false) {\n if (!tronWeb || !(tronWeb instanceof TronWeb))\n throw new Error('Expected instance of TronWeb');\n this.tronWeb = tronWeb;\n this.injectPromise = injectpromise(this);\n }\n\n setServer(eventServer = false, healthcheck = 'healthcheck') {\n if (!eventServer)\n return this.tronWeb.eventServer = false;\n\n if (utils.isString(eventServer))\n eventServer = new providers.HttpProvider(eventServer);\n\n if (!this.tronWeb.isValidProvider(eventServer))\n throw new Error('Invalid event server provided');\n\n this.tronWeb.eventServer = eventServer;\n this.tronWeb.eventServer.isConnected = () => this.tronWeb.eventServer.request(healthcheck).then(() => true).catch(() => false);\n }\n\n getEventsByContractAddress(contractAddress = false, options = {}, callback = false) {\n\n let {\n sinceTimestamp,\n since,\n fromTimestamp,\n eventName,\n blockNumber,\n size,\n page,\n onlyConfirmed,\n onlyUnconfirmed,\n previousLastEventFingerprint,\n previousFingerprint,\n fingerprint,\n rawResponse,\n sort,\n filters\n } = Object.assign({\n sinceTimestamp: 0,\n eventName: false,\n blockNumber: false,\n size: 20,\n page: 1\n }, options)\n\n if (!callback)\n return this.injectPromise(this.getEventsByContractAddress, contractAddress, options);\n\n fromTimestamp = fromTimestamp || sinceTimestamp || since;\n\n if (!this.tronWeb.eventServer)\n return callback('No event server configured');\n\n const routeParams = [];\n\n if (!this.tronWeb.isAddress(contractAddress))\n return callback('Invalid contract address provided');\n\n if (eventName && !contractAddress)\n return callback('Usage of event name filtering requires a contract address');\n\n if (typeof fromTimestamp !== 'undefined' && !utils.isInteger(fromTimestamp))\n return callback('Invalid fromTimestamp provided');\n\n if (!utils.isInteger(size))\n return callback('Invalid size provided');\n\n if (size > 200) {\n console.warn('Defaulting to maximum accepted size: 200');\n size = 200;\n }\n\n if (!utils.isInteger(page))\n return callback('Invalid page provided');\n\n if (blockNumber && !eventName)\n return callback('Usage of block number filtering requires an event name');\n\n if (contractAddress)\n routeParams.push(this.tronWeb.address.fromHex(contractAddress));\n\n if (eventName)\n routeParams.push(eventName);\n\n if (blockNumber)\n routeParams.push(blockNumber);\n\n const qs = {\n size,\n page\n }\n\n if (typeof filters === 'object' && Object.keys(filters).length > 0) {\n qs.filters = JSON.stringify(filters);\n }\n\n if (fromTimestamp) {\n qs.fromTimestamp = qs.since = fromTimestamp;\n }\n\n if (onlyConfirmed)\n qs.onlyConfirmed = onlyConfirmed\n\n if (onlyUnconfirmed && !onlyConfirmed)\n qs.onlyUnconfirmed = onlyUnconfirmed\n\n if (sort)\n qs.sort = sort\n\n fingerprint = fingerprint || previousFingerprint || previousLastEventFingerprint\n if (fingerprint)\n qs.fingerprint = fingerprint\n\n return this.tronWeb.eventServer.request(`event/contract/${routeParams.join('/')}?${querystring.stringify(qs)}`).then((data = false) => {\n if (!data)\n return callback('Unknown error occurred');\n\n if (!utils.isArray(data))\n return callback(data);\n\n return callback(null,\n rawResponse === true ? data : data.map(event => utils.mapEvent(event))\n );\n }).catch(err => callback((err.response && err.response.data) || err));\n }\n\n\n getEventsByTransactionID(transactionID = false, options = {}, callback = false) {\n\n if (utils.isFunction(options)) {\n callback = options;\n options = {};\n }\n\n if (!callback)\n return this.injectPromise(this.getEventsByTransactionID, transactionID, options);\n\n if (!this.tronWeb.eventServer)\n return callback('No event server configured');\n\n return this.tronWeb.eventServer.request(`event/transaction/${transactionID}`).then((data = false) => {\n if (!data)\n return callback('Unknown error occurred');\n\n if (!utils.isArray(data))\n return callback(data);\n\n return callback(null,\n options.rawResponse === true ? data : data.map(event => utils.mapEvent(event))\n );\n }).catch(err => callback((err.response && err.response.data) || err));\n }\n\n}\n\n","import providers from 'lib/providers';\nimport utils from 'utils';\nimport BigNumber from 'bignumber.js';\nimport EventEmitter from 'eventemitter3';\nimport {version} from '../package.json';\nimport semver from 'semver';\nimport injectpromise from 'injectpromise';\n\nimport TransactionBuilder from 'lib/transactionBuilder';\nimport Trx from 'lib/trx';\nimport Contract from 'lib/contract';\nimport Plugin from 'lib/plugin';\nimport Event from 'lib/event';\nimport {keccak256} from 'utils/ethersUtils';\nimport {ADDRESS_PREFIX} from 'utils/address';\n\nconst DEFAULT_VERSION = '3.5.0';\n\nexport default class TronWeb extends EventEmitter {\n static providers = providers;\n static BigNumber = BigNumber;\n static TransactionBuilder = TransactionBuilder;\n static Trx = Trx;\n static Contract = Contract;\n static Plugin = Plugin;\n static Event = Event;\n static version = version;\n static utils = utils;\n\n constructor(options = false,\n // for retro-compatibility:\n solidityNode = false, eventServer = false, privateKey = false) {\n super();\n\n let fullNode;\n if (typeof options === 'object' && (options.fullNode || options.fullHost)) {\n fullNode = options.fullNode || options.fullHost;\n solidityNode = options.solidityNode || options.fullHost;\n eventServer = options.eventServer || options.fullHost;\n privateKey = options.privateKey;\n } else {\n fullNode = options;\n }\n\n if (utils.isString(fullNode))\n fullNode = new providers.HttpProvider(fullNode);\n\n if (utils.isString(solidityNode))\n solidityNode = new providers.HttpProvider(solidityNode);\n\n if (utils.isString(eventServer))\n eventServer = new providers.HttpProvider(eventServer);\n\n this.event = new Event(this);\n this.transactionBuilder = new TransactionBuilder(this);\n this.trx = new Trx(this);\n this.plugin = new Plugin(this, options);\n this.utils = utils;\n\n this.setFullNode(fullNode);\n this.setSolidityNode(solidityNode);\n this.setEventServer(eventServer);\n\n this.providers = providers;\n this.BigNumber = BigNumber;\n\n this.defaultBlock = false;\n this.defaultPrivateKey = false;\n this.defaultAddress = {\n hex: false,\n base58: false\n };\n\n [\n 'sha3', 'toHex', 'toUtf8', 'fromUtf8',\n 'toAscii', 'fromAscii', 'toDecimal', 'fromDecimal',\n 'toSun', 'fromSun', 'toBigNumber', 'isAddress',\n 'createAccount', 'address', 'version'\n ].forEach(key => {\n this[key] = TronWeb[key];\n });\n\n if (privateKey)\n this.setPrivateKey(privateKey);\n\n this.fullnodeVersion = DEFAULT_VERSION;\n this.injectPromise = injectpromise(this);\n }\n\n async getFullnodeVersion() {\n try {\n const nodeInfo = await this.trx.getNodeInfo()\n this.fullnodeVersion = nodeInfo.configNodeInfo.codeVersion\n if (this.fullnodeVersion.split('.').length === 2) {\n this.fullnodeVersion += '.0';\n }\n } catch (err) {\n this.fullnodeVersion = DEFAULT_VERSION;\n }\n }\n\n setDefaultBlock(blockID = false) {\n if ([false, 'latest', 'earliest', 0].includes(blockID)) {\n return this.defaultBlock = blockID;\n }\n\n if (!utils.isInteger(blockID) || !blockID)\n throw new Error('Invalid block ID provided');\n\n this.defaultBlock = Math.abs(blockID);\n }\n\n setPrivateKey(privateKey) {\n try {\n this.setAddress(\n this.address.fromPrivateKey(privateKey)\n );\n } catch {\n throw new Error('Invalid private key provided');\n }\n\n this.defaultPrivateKey = privateKey;\n this.emit('privateKeyChanged', privateKey);\n }\n\n setAddress(address) {\n if (!this.isAddress(address))\n throw new Error('Invalid address provided');\n\n const hex = this.address.toHex(address);\n const base58 = this.address.fromHex(address);\n\n if (this.defaultPrivateKey && this.address.fromPrivateKey(this.defaultPrivateKey) !== base58)\n this.defaultPrivateKey = false;\n\n this.defaultAddress = {\n hex,\n base58\n };\n\n this.emit('addressChanged', {hex, base58});\n }\n\n fullnodeSatisfies(version) {\n return semver.satisfies(this.fullnodeVersion, version);\n }\n\n isValidProvider(provider) {\n return Object.values(providers).some(knownProvider => provider instanceof knownProvider);\n }\n\n setFullNode(fullNode) {\n if (utils.isString(fullNode))\n fullNode = new providers.HttpProvider(fullNode);\n\n if (!this.isValidProvider(fullNode))\n throw new Error('Invalid full node provided');\n\n this.fullNode = fullNode;\n this.fullNode.setStatusPage('wallet/getnowblock');\n\n this.getFullnodeVersion();\n }\n\n setSolidityNode(solidityNode) {\n if (utils.isString(solidityNode))\n solidityNode = new providers.HttpProvider(solidityNode);\n\n if (!this.isValidProvider(solidityNode))\n throw new Error('Invalid solidity node provided');\n\n this.solidityNode = solidityNode;\n this.solidityNode.setStatusPage('walletsolidity/getnowblock');\n }\n\n setEventServer(...params) {\n this.event.setServer(...params)\n }\n\n currentProviders() {\n return {\n fullNode: this.fullNode,\n solidityNode: this.solidityNode,\n eventServer: this.eventServer\n };\n }\n\n currentProvider() {\n return this.currentProviders();\n }\n\n\n getEventResult(...params) {\n\n if (typeof params[1] !== 'object') {\n params[1] = {\n sinceTimestamp: params[1] || 0,\n eventName: params[2] || false,\n blockNumber: params[3] || false,\n size: params[4] || 20,\n page: params[5] || 1\n }\n params.splice(2, 4)\n\n // callback:\n if (!utils.isFunction(params[2])) {\n\n if (utils.isFunction(params[1].page)) {\n params[2] = params[1].page;\n params[1].page = 1;\n } else if (utils.isFunction(params[1].size)) {\n params[2] = params[1].size;\n params[1].size = 20;\n params[1].page = 1;\n }\n }\n }\n\n return this.event.getEventsByContractAddress(...params);\n }\n\n getEventByTransactionID(...params) {\n return this.event.getEventsByTransactionID(...params)\n }\n\n contract(abi = [], address = false) {\n return new Contract(this, abi, address);\n }\n\n static get address() {\n return {\n fromHex(address) {\n if (!utils.isHex(address))\n return address;\n\n return utils.crypto.getBase58CheckAddress(\n utils.code.hexStr2byteArray(address.replace(/^0x/, ADDRESS_PREFIX))\n );\n },\n toHex(address) {\n if (utils.isHex(address))\n return address.toLowerCase().replace(/^0x/, ADDRESS_PREFIX);\n\n return utils.code.byteArray2hexStr(\n utils.crypto.decodeBase58Address(address)\n ).toLowerCase();\n },\n fromPrivateKey(privateKey) {\n try {\n return utils.crypto.pkToAddress(privateKey);\n } catch {\n return false;\n }\n }\n }\n }\n\n static sha3(string, prefix = true) {\n return (prefix ? '0x' : '') + keccak256(Buffer.from(string, 'utf-8')).toString().substring(2);\n }\n\n static toHex(val) {\n if (utils.isBoolean(val))\n return TronWeb.fromDecimal(+val);\n\n if (utils.isBigNumber(val))\n return TronWeb.fromDecimal(val);\n\n if (typeof val === 'object')\n return TronWeb.fromUtf8(JSON.stringify(val));\n\n if (utils.isString(val)) {\n if (/^(-|)0x/.test(val))\n return val;\n\n if (!isFinite(val))\n return TronWeb.fromUtf8(val);\n }\n\n let result = TronWeb.fromDecimal(val);\n if (result === '0xNaN') {\n throw new Error('The passed value is not convertible to a hex string');\n } else {\n return result;\n }\n }\n\n static toUtf8(hex) {\n if (utils.isHex(hex)) {\n hex = hex.replace(/^0x/, '');\n return Buffer.from(hex, 'hex').toString('utf8');\n } else {\n throw new Error('The passed value is not a valid hex string');\n }\n }\n\n static fromUtf8(string) {\n if (!utils.isString(string)) {\n throw new Error('The passed value is not a valid utf-8 string')\n }\n return '0x' + Buffer.from(string, 'utf8').toString('hex');\n }\n\n static toAscii(hex) {\n if (utils.isHex(hex)) {\n let str = \"\";\n let i = 0, l = hex.length;\n if (hex.substring(0, 2) === '0x') {\n i = 2;\n }\n for (; i < l; i += 2) {\n let code = parseInt(hex.substr(i, 2), 16);\n str += String.fromCharCode(code);\n }\n return str;\n } else {\n throw new Error('The passed value is not a valid hex string');\n }\n }\n\n static fromAscii(string, padding) {\n if (!utils.isString(string)) {\n throw new Error('The passed value is not a valid utf-8 string')\n }\n return '0x' + Buffer.from(string, 'ascii').toString('hex').padEnd(padding, '0');\n }\n\n\n static toDecimal(value) {\n return TronWeb.toBigNumber(value).toNumber();\n }\n\n static fromDecimal(value) {\n const number = TronWeb.toBigNumber(value);\n const result = number.toString(16);\n\n return number.isLessThan(0) ? '-0x' + result.substr(1) : '0x' + result;\n }\n\n static fromSun(sun) {\n const trx = TronWeb.toBigNumber(sun).div(1_000_000);\n return utils.isBigNumber(sun) ? trx : trx.toString(10);\n }\n\n static toSun(trx) {\n const sun = TronWeb.toBigNumber(trx).times(1_000_000);\n return utils.isBigNumber(trx) ? sun : sun.toString(10);\n }\n\n static toBigNumber(amount = 0) {\n if (utils.isBigNumber(amount))\n return amount;\n\n if (utils.isString(amount) && /^(-|)0x/.test(amount))\n return new BigNumber(amount.replace('0x', ''), 16);\n\n return new BigNumber(amount.toString(10), 10);\n }\n\n static isAddress(address = false) {\n if (!utils.isString(address))\n return false;\n\n // Convert HEX to Base58\n if (address.length === 42) {\n try {\n return TronWeb.isAddress(\n utils.crypto.getBase58CheckAddress(\n utils.code.hexStr2byteArray(address) // it throws an error if the address starts with 0x\n )\n );\n } catch (err) {\n return false;\n }\n }\n try {\n return utils.crypto.isAddressValid(address);\n } catch (err) {\n return false;\n }\n }\n\n static async createAccount() {\n const account = utils.accounts.generateAccount();\n\n return account;\n }\n\n async isConnected(callback = false) {\n if (!callback)\n return this.injectPromise(this.isConnected);\n\n return callback(null, {\n fullNode: await this.fullNode.isConnected(),\n solidityNode: await this.solidityNode.isConnected(),\n eventServer: this.eventServer && await this.eventServer.isConnected()\n });\n }\n};\n"],"sourceRoot":""}
\No newline at end of file