@cryptovarna/tronbox
Version:
TronBox - Simple development framework for Tron
1 lines • 18.2 kB
JavaScript
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _typeof2=_interopRequireDefault(require("@babel/runtime/helpers/typeof"));function _createForOfIteratorHelper(o,allowArrayLike){var it=typeof Symbol!=="undefined"&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&typeof o.length==="number"){if(it)o=it;var i=0;var F=function F(){};return{s:F,n:function n(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var normalCompletion=true,didErr=false,err;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();normalCompletion=step.done;return step},e:function e(_e2){didErr=true;err=_e2},f:function f(){try{if(!normalCompletion&&it["return"]!=null)it["return"]()}finally{if(didErr)throw err}}}}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i]}return arr2}var ethJSABI=require("ethjs-abi");var TronWrap=require("../TronWrap");var _require=require("../TronWrap"),constants=_require.constants;var BigNumber=require("bignumber.js");var StatusError=require("./statuserror.js");var contract=function(module){function Provider(provider){this.provider=provider}var tronWrap;Provider.prototype.send=function(){return this.provider.send.apply(this.provider,arguments)};Provider.prototype.sendAsync=function(){return this.provider.sendAsync.apply(this.provider,arguments)};var Utils={is_object:function is_object(val){return(0,_typeof2["default"])(val)==="object"&&!Array.isArray(val)},is_big_number:function is_big_number(val){if((0,_typeof2["default"])(val)!=="object")return false;try{new BigNumber(val);return true}catch(e){return false}},decodeLogs:function decodeLogs(C,instance,logs){return logs.map(function(log){var logABI=C.events[log.topics[0]];if(!logABI){return null}var copy=Utils.merge({},log);function partialABI(fullABI,indexed){var inputs=fullABI.inputs.filter(function(i){return i.indexed===indexed});var partial={inputs:inputs,name:fullABI.name,type:fullABI.type,anonymous:fullABI.anonymous};return partial}var argTopics=logABI.anonymous?copy.topics:copy.topics.slice(1);var indexedData="0x"+argTopics.map(function(topics){return topics.slice(2)}).join("");var indexedParams=ethJSABI.decodeEvent(partialABI(logABI,true),indexedData);var notIndexedData=copy.data;var notIndexedParams=ethJSABI.decodeEvent(partialABI(logABI,false),notIndexedData);copy.event=logABI.name;copy.args=logABI.inputs.reduce(function(acc,current){var val=indexedParams[current.name];if(val===undefined){val=notIndexedParams[current.name]}acc[current.name]=val;return acc},{});Object.keys(copy.args).forEach(function(key){var val=copy.args[key];if(val.constructor.isBN){copy.args[key]=BigNumber("0x"+val.toString(16))}});delete copy.data;delete copy.topics;return copy}).filter(function(log){return log!=null})},promisifyFunction:function promisifyFunction(fn,C){return function(){var instance=this;var args=Array.prototype.slice.call(arguments);var tx_params={};var last_arg=args[args.length-1];if(Utils.is_object(last_arg)&&!Utils.is_big_number(last_arg)){tx_params=args.pop()}tx_params=Utils.merge(C.class_defaults,tx_params);return new Promise(function(accept,reject){var callback=function callback(error,result){if(error!=null){reject(error)}else{accept(result)}};args.push(tx_params,callback);fn.apply(instance.contract,args)})}},synchronizeFunction:function synchronizeFunction(fn,instance,C){var self=this;return function(){var args=Array.prototype.slice.call(arguments);var tx_params={};var last_arg=args[args.length-1];if(Utils.is_object(last_arg)&&!Utils.is_big_number(last_arg)){tx_params=args.pop()}tx_params=Utils.merge(C.class_defaults,tx_params);return new Promise(function(accept,reject){var callback=function callback(error,tx){if(error!=null){reject(error);return}var timeout;if(C.synchronization_timeout===0||C.synchronization_timeout!==undefined){timeout=C.synchronization_timeout}else{timeout=240000}var start=new Date().getTime();var make_attempt=function make_attempt(){C.web3.eth.getTransactionReceipt(tx,function(err,receipt){if(err&&!err.toString().includes("unknown transaction")){return reject(err)}if(receipt!=null){if(parseInt(receipt.status,16)===0){var statusError=new StatusError(tx_params,tx,receipt);return reject(statusError)}else{return accept({tx:tx,receipt:receipt,logs:Utils.decodeLogs(C,instance,receipt.logs)})}}if(timeout>0&&new Date().getTime()-start>timeout){return reject(new Error("Transaction "+tx+" wasn't processed in "+timeout/1000+" seconds!"))}setTimeout(make_attempt,1000)})};make_attempt()};args.push(tx_params,callback);fn.apply(self,args)})}},merge:function merge(){var merged={};var args=Array.prototype.slice.call(arguments);for(var i=0;i<args.length;i++){var object=args[i];var keys=Object.keys(object);for(var j=0;j<keys.length;j++){var key=keys[j];var value=object[key];merged[key]=value}}return merged},parallel:function parallel(arr,callback){callback=callback||function(){};if(!arr.length){return callback(null,[])}var index=0;var results=new Array(arr.length);arr.forEach(function(fn,position){fn(function(err,result){if(err){callback(err);callback=function callback(){}}else{index++;results[position]=result;if(index>=arr.length){callback(null,results)}}})})},bootstrap:function bootstrap(fn){Object.keys(fn._static_methods).forEach(function(key){fn[key]=fn._static_methods[key].bind(fn)});Object.keys(fn._properties).forEach(function(key){fn.addProp(key,fn._properties[key])});return fn},linkBytecode:function linkBytecode(bytecode,links){Object.keys(links).forEach(function(library_name){var library_address=links[library_name];var regex=new RegExp("__"+library_name+"_+","g");bytecode=bytecode.replace(regex,library_address.replace("0x","").replace("41",""))});return bytecode}};function Contract(contract){var constructor=this.constructor;this.abi=constructor.abi;if(typeof contract==="string"){this.address=contract}else{this.allEvents=contract.allEvents;this.contract=contract;this.address=contract.address}}function toCamelCase(str){return str.replace(/_([a-z])/g,function(g){return g[1].toUpperCase()})}function filterEnergyParameter(args){var deployParameters=Object.keys(constants.deployParameters);var lastArg=args[args.length-1];if((0,_typeof2["default"])(lastArg)!=="object"||Array.isArray(lastArg))return[args,{}];args.pop();var res={};for(var property in lastArg){var camelCased=toCamelCase(property);if(~deployParameters.indexOf(camelCased)){res[camelCased]=lastArg[property]}}return[args,res]}Contract._static_methods={initTronWeb:function initTronWeb(options){if(!tronWrap){tronWrap=TronWrap(options)}},setProvider:function setProvider(provider){if(!provider){throw new Error("Invalid provider passed to setProvider(); provider is "+provider)}this.currentProvider=provider},"new":function _new(){var self=this;if(!this.currentProvider){throw new Error(this.contractName+" error: Please call setProvider() first before calling new().")}var _filterEnergyParamete=filterEnergyParameter(Array.prototype.slice.call(arguments)),_filterEnergyParamete2=(0,_slicedToArray2["default"])(_filterEnergyParamete,2),args=_filterEnergyParamete2[0],params=_filterEnergyParamete2[1];if(!this.bytecode){throw new Error(this._json.contractName+" error: contract binary not set. Can't deploy new instance.")}var regex=/__[^_]+_+/g;var unlinked_libraries=self.binary.match(regex);if(unlinked_libraries!=null){unlinked_libraries=unlinked_libraries.map(function(name){return name.replace(/_/g,"")}).sort().filter(function(name,index,arr){if(index+1>=arr.length){return true}return name!==arr[index+1]}).join(", ");throw new Error(self.contractName+" contains unresolved libraries. You must deploy and link the following libraries before you can deploy a new version of "+self._json.contractName+": "+unlinked_libraries)}return new Promise(function(accept,reject){var tx_params={parameters:args};var last_arg=args[args.length-1];if(Utils.is_object(last_arg)&&!Utils.is_big_number(last_arg)){tx_params=args.pop()}var constructor=self.abi.filter(function(item){return item.type==="constructor"});if(constructor.length&&constructor[0].inputs.length!==args.length){throw new Error(self.contractName+" contract constructor expected "+constructor[0].inputs.length+" arguments, received "+args.length)}tx_params=Utils.merge(self.class_defaults,tx_params);if(!tx_params.data){tx_params.data=self.binary}tx_params.contractName=self.contractName;for(var param in params){tx_params[param]=params[param]}tx_params.abi=self.abi;tronWrap._deployContract(tx_params,_callback);function _callback(err,res){if(err){reject(err);return}accept(new self(res.address))}})},at:function at(){throw new Error("The construct contractArtifacts.at(address) is not currently supported by TronBox. It will be in the future. Stay in touch.")},call:function call(methodName){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){args[_key-1]=arguments[_key]}var self=this;var methodArgs={};var lastArg=args[args.length-1];if(!Array.isArray(lastArg)&&(0,_typeof2["default"])(lastArg)==="object"){methodArgs=args.pop()}if(!methodArgs.call_value){methodArgs.call_value=0}if(Array.isArray(args[0])){if(Array.isArray(args[0][0])){args=args[0]}else{var _iterator=_createForOfIteratorHelper(self.abi),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var item=_step.value;if(item.name===methodName){if(!/\[\]$/.test(item.inputs[0].type)){args=args[0]}}}}catch(err){_iterator.e(err)}finally{_iterator.f()}}}var option={};return new Promise(function(accept,reject){function _callback(err,res){if(err){reject(err);return}accept(res)}option=Utils.merge({address:self.address,methodName:methodName,args:args,abi:self.abi,methodArgs:methodArgs},self.defaults());tronWrap.triggerContract(option,_callback)})},deployed:function deployed(){var self=this;return new Promise(function(accept,reject){if(!self.isDeployed()){throw new Error(self.contractName+" has not been deployed to detected network")}TronWrap().trx.getContract(self.address).then(function(res){var abi=res.abi&&res.abi.entrys?res.abi.entrys:[];var _loop=function _loop(i){var item=abi[i];if(self.hasOwnProperty(item.name))return"continue";if(/(function|event)/i.test(item.type)&&item.name){var f=function f(){for(var _len2=arguments.length,args=new Array(_len2),_key2=0;_key2<_len2;_key2++){args[_key2]=arguments[_key2]}return self.call.apply(null,[item.name].concat(args))};self[item.name]=f;self[item.name].call=f}};for(var i=0;i<abi.length;i++){var _ret=_loop(i);if(_ret==="continue")continue}accept(self)})["catch"](function(err){reject(err)})})},defaults:function defaults(class_defaults){if(!this.class_defaults){this.class_defaults={}}if(!class_defaults){class_defaults={}}var self=this;Object.keys(class_defaults).forEach(function(key){var value=class_defaults[key];self.class_defaults[key]=value});return this.class_defaults},hasNetwork:function hasNetwork(network_id){return this._json.networks[network_id+""]!=null},isDeployed:function isDeployed(){if(!this.network_id){return false}if(!this._json.networks[this.network_id]){return false}return!!this.network.address},setNetwork:function setNetwork(network_id){if(!network_id)return;this.network_id=network_id+""},resetAddress:function resetAddress(){delete this.network.address},link:function link(name,address){var self=this;if(typeof name==="function"){var _contract=name;if(!_contract.isDeployed()){throw new Error("Cannot link contract without an address.")}this.link(_contract.contractName,_contract.address);Object.keys(_contract.events).forEach(function(topic){self.network.events[topic]=_contract.events[topic]});return}if((0,_typeof2["default"])(name)==="object"){var obj=name;Object.keys(obj).forEach(function(name){var a=obj[name];self.link(name,a)});return}if(!this._json.networks[this.network_id]){this._json.networks[this.network_id]={events:{},links:{}}}this.network.links[name]=address},clone:function clone(json){var self=this;json=json||{};var temp=function TruffleContract(){this.constructor=temp;return Contract.apply(this,arguments)};temp.prototype=Object.create(self.prototype);var network_id;if((0,_typeof2["default"])(json)!=="object"){network_id=json;json=self._json}json=Utils.merge({},self._json||{},json);temp._static_methods=this._static_methods;temp._properties=this._properties;temp._property_values={};temp._json=json;Utils.bootstrap(temp);temp.class_defaults=temp.prototype.defaults||{};if(network_id){temp.setNetwork(network_id)}Object.keys(json).forEach(function(key){if(key.indexOf("x-")!==0)return;temp[key]=json[key]});return temp},addProp:function addProp(key,fn){var self=this;var getter=function getter(){if(fn.get!=null){return fn.get.call(self)}return self._property_values[key]||fn.call(self)};var setter=function setter(val){if(fn.set!=null){fn.set.call(self,val);return}throw new Error(key+" property is immutable")};var definition={};definition.enumerable=false;definition.configurable=false;definition.get=getter;definition.set=setter;Object.defineProperty(this,key,definition)},toJSON:function toJSON(){return this._json}};Contract._properties={contract_name:{get:function get(){return this.contractName},set:function set(val){this.contractName=val}},contractName:{get:function get(){return this._json.contractName||"Contract"},set:function set(val){this._json.contractName=val}},abi:{get:function get(){return this._json.abi},set:function set(val){this._json.abi=val}},network:function network(){var network_id=this.network_id;if(!network_id){throw new Error(this.contractName+" has no network id set, cannot lookup artifact data. Either set the network manually using "+this.contractName+".setNetwork(), run "+this.contractName+".detectNetwork(), or use new(), at() or deployed() as a thenable which will detect the network automatically.")}if(!this._json.networks[network_id]){throw new Error(this.contractName+" has no network configuration for its current network id ("+network_id+").")}var returnVal=this._json.networks[network_id];if(!returnVal.links){returnVal.links={}}if(!returnVal.events){returnVal.events={}}return returnVal},networks:function networks(){return this._json.networks},address:{get:function get(){var address=this.network.address;if(!address){throw new Error("Cannot find deployed address: "+this.contractName+" not deployed or address not set.")}return address},set:function set(val){if(!val){throw new Error("Cannot set deployed address; malformed value: "+val)}var network_id=this.network_id;if(!network_id){throw new Error(this.contractName+" has no network id set, cannot lookup artifact data. Either set the network manually using "+this.contractName+".setNetwork(), run "+this.contractName+".detectNetwork(), or use new(), at() or deployed() as a thenable which will detect the network automatically.")}if(!this._json.networks[network_id]){this._json.networks[network_id]={events:{},links:{}}}this.network.address=val}},transactionHash:{get:function get(){var transactionHash=this.network.transactionHash;if(transactionHash===null){throw new Error("Could not find transaction hash for "+this.contractName)}return transactionHash},set:function set(val){this.network.transactionHash=val}},links:function links(){if(!this.network_id){throw new Error(this.contractName+" has no network id set, cannot lookup artifact data. Either set the network manually using "+this.contractName+".setNetwork(), run "+this.contractName+".detectNetwork(), or use new(), at() or deployed() as a thenable which will detect the network automatically.")}if(!this._json.networks[this.network_id]){return{}}return this.network.links||{}},events:function events(){return[]},binary:function binary(){return Utils.linkBytecode(this.bytecode,this.links)},deployedBinary:function deployedBinary(){return Utils.linkBytecode(this.deployedBytecode,this.links)},unlinked_binary:{get:function get(){return this.bytecode},set:function set(val){this.bytecode=val}},bytecode:{get:function get(){return this._json.bytecode},set:function set(val){this._json.bytecode=val}},deployedBytecode:{get:function get(){var code=this._json.deployedBytecode;if(code.indexOf("0x")!==0){code="0x"+code}return code},set:function set(val){var code=val;if(val.indexOf("0x")!==0){code="0x"+code}this._json.deployedBytecode=code}},sourceMap:{get:function get(){return this._json.sourceMap},set:function set(val){this._json.sourceMap=val}},deployedSourceMap:{get:function get(){return this._json.deployedSourceMap},set:function set(val){this._json.deployedSourceMap=val}},source:{get:function get(){return this._json.source},set:function set(val){this._json.source=val}},sourcePath:{get:function get(){return this._json.sourcePath},set:function set(val){this._json.sourcePath=val}},legacyAST:{get:function get(){return this._json.legacyAST},set:function set(val){this._json.legacyAST=val}},ast:{get:function get(){return this._json.ast},set:function set(val){this._json.ast=val}},compiler:{get:function get(){return this._json.compiler},set:function set(val){this._json.compiler=val}},schema_version:function schema_version(){return this.schemaVersion},schemaVersion:function schemaVersion(){return this._json.schemaVersion},updated_at:function updated_at(){return this.updatedAt},updatedAt:function updatedAt(){try{return this.network.updatedAt||this._json.updatedAt}catch(e){return this._json.updatedAt}}};Utils.bootstrap(Contract);module.exports=Contract;return Contract}(module||{});