erc20-wallet
Version:
Paquete para wallets erc20
2 lines • 11.8 kB
JavaScript
;/* eslint-disable no-async-promise-executor *//* eslint-disable no-unused-vars *//* eslint-disable no-undef */var lightwallet=require('eth-lightwallet');var Web3=require('web3');var EthTx=require('ethereumjs-tx');var HookedWeb3Provider=require('hooked-web3-provider');var api=require('etherscan-api');var txutils=lightwallet.txutils;var signing=lightwallet.signing;var encryption=lightwallet.encryption;module.exports={web3:new Web3,EthTx:EthTx,etherscan:null,password:null,keystore:null,keystoreJson:null,provider:'https://ropsten.infura.io/',minABI:[{constant:!0,inputs:[{name:'_owner',type:'address'}],name:'balanceOf',outputs:[{name:'balance',type:'uint256'}],type:'function'},{constant:!0,inputs:[],name:'decimals',outputs:[{name:'',type:'uint8'}],type:'function'},{constant:!0,inputs:[],name:'name',outputs:[{name:'',type:'string'}],type:'function'},{constant:!0,inputs:[],name:'symbol',outputs:[{name:'',type:'string'}],type:'function'},{constant:!1,inputs:[{name:'_to',type:'address'},{name:'_value',type:'uint256'}],name:'transfer',outputs:[{name:'',type:'bool'}],type:'function'}],tokenAddr:null,tokenDecimals:18,tokenSymbol:'',tokenName:'',numAddr:1,address:[],mySeed:'',seed:'',hdPathString:'m/44\'/60\'/0\'/0',//Red Ethereum,
percentageGas:5,apikeyEtherScan:'YourApiKey',networkEtherScan:'ropsten',timeoutScan:3000,setWeb3Provider:async function setWeb3Provider(){var web3Provider=await new HookedWeb3Provider({host:this.provider,transaction_signer:this.keystore});await this.web3.setProvider(web3Provider)},getBalanceAddress:async function getBalanceAddress(addr){var _this=this;return new Promise(async function(resolve,reject){await _this.setWeb3Provider();try{try{await _this.web3.eth.getBalance(addr,async function(err,result){if(err){reject(err)}else{try{var ether=(await _this.web3.fromWei(result,'ether'))*1;resolve(ether)}catch(e){reject(e.message)}}})}catch(e){reject(e.message)}}catch(e){reject(e.message)}}).then(function(data){return data})},getTokensAmountBalance:async function getTokensAmountBalance(contract,addr){var _this2=this;return new Promise(async function(resolve,reject){await contract.balanceOf(addr,async function(error,balance){if(!error){resolve(balance/10**_this2.tokenDecimals)}else{reject(error)}})}).then(function(data){return data})},getTokenAddress:async function getTokenAddress(addr){var _this3=this;return new Promise(async function(resolve,reject){await _this3.setWeb3Provider();try{(async function(){try{var contract=await _this3.web3.eth.contract(_this3.minABI).at(_this3.tokenAddr);var saldo=await _this3.getTokensAmountBalance(contract,addr);resolve(saldo)}catch(e){reject(e.message)}})()}catch(e){reject(e.message)}})},randomIntFromInterval:async function randomIntFromInterval(min,max){return Math.floor(Math.random()*(max-min+1)+min)},createSeed:async function createSeed(){var _this4=this;return new Promise(async function(resolve,reject){try{resolve((await lightwallet.keystore.generateRandomSeed(_this4.mySeed)))}catch(e){reject('Enter a valid word for the seed')}})},createdStored:async function createdStored(){var _this5=this;return new Promise(async function(resolve,reject){try{await lightwallet.keystore.createVault({password:_this5.password,seedPhrase:_this5.seed,hdPathString:_this5.hdPathString},async function(err,ks){if(!err){await ks.keyFromPassword(_this5.password,async function(err,pwDerivedKey){if(!err){await ks.generateNewAddress(pwDerivedKey,_this5.numAddr);resolve(ks)}else{reject(err.message)}})}else{reject(err.message)}})}catch(e){reject('An error occurred while creating the keystore')}})},generateAddress:async function generateAddress(){var _this6=this;return new Promise(async function(resolve,reject){try{var addrs=await _this6.keystore.getAddresses();var addrsess=[];addrs.forEach(function(e){addrsess.push({address:e})});resolve(addrsess)}catch(e){reject('There was an error creating the addresses')}})},encodeJson:async function encodeJson(){var _this7=this;return new Promise(async function(resolve,reject){try{resolve(JSON.stringify((await _this7.keystore.serialize())))}catch(e){reject('An error occurred while creating the JSON')}})},decodeJson:async function decodeJson(){var _this8=this;return new Promise(async function(resolve,reject){try{resolve((await lightwallet.keystore.deserialize(_this8.keystoreJson)))}catch(e){reject('There was an error decoding the JSON')}})},getDataToken:async function getDataToken(){var _this9=this;return new Promise(async function(resolve,reject){await _this9.setWeb3Provider();var contract=await _this9.web3.eth.contract(_this9.minABI).at(_this9.tokenAddr);var response={decimals:null,symbol:null,name:null};await contract.decimals(async function(error,data){if(!error){response.decimals=data*1;await contract.symbol(async function(error,data){if(!error){response.symbol=data;await contract.name(async function(error,data){if(!error){response.name=data;resolve(response)}else{reject('There was an error getting the name')}})}else{reject('There was an error getting the symbol')}})}else{reject('There was an error getting the decimals')}})})},getBalance:async function getBalance(){var _this10=this;return new Promise(async function(resolve,reject){await _this10.setWeb3Provider();for(var k in _this10.address){_this10.address[k].eth=(await _this10.web3.fromWei((await _this10.web3.eth.getBalance(_this10.address[k].address)),'ether'))*1}resolve(_this10.address)}).then(function(data){return data})},getTokensBalance:async function getTokensBalance(contract,addr){var _this11=this;return new Promise(async function(resolve,reject){await contract.balanceOf(addr,async function(error,balance){if(!error){resolve(balance/10**_this11.tokenDecimals)}else{reject(error)}})}).then(function(data){return data})},getTokens:async function getTokens(){var _this12=this;return new Promise(async function(resolve,reject){(async function(){await _this12.setWeb3Provider();var contract=await _this12.web3.eth.contract(_this12.minABI).at(_this12.tokenAddr);for(var k in _this12.address){_this12.address[k].token=await _this12.getTokensBalance(contract,_this12.address[k].address)}resolve(_this12.address)})()})},getTransactionCount:async function getTransactionCount(from){var _this13=this;return new Promise(async function(resolve,reject){await _this13.web3.eth.getTransactionCount(from,async function(err,response){if(!err){resolve(response)}else{reject(err)}})})},calculateGasLimitEth:async function calculateGasLimitEth(from,to,value){var _this14=this;return new Promise(async function(resolve,reject){await _this14.setWeb3Provider();value=value*1.0e18;await _this14.getTransactionCount(from).then(async function(response){var txOptions={to:to,value:await _this14.web3.toHex(value),nonce:await _this14.web3.toHex(response),data:''};var Result={gasLimit:null,gasPrice:null};Result.gasLimit=await _this14.web3.eth.estimateGas(txOptions);await _this14.web3.eth.getGasPrice(async function(error,result){if(!error){Result.gasPrice=result*1;Result.gasPrice+=Result.gasPrice*_this14.percentageGas/100*1;Result.gasPrice=Math.round(Result.gasPrice);resolve(Result)}else{reject('An error occurred while calculating the gas')}})}).catch(function(error){reject(error)})})},calculateGasLimitToken:async function calculateGasLimitToken(from,to,value){var _this15=this;return new Promise(async function(resolve,reject){await _this15.setWeb3Provider();var contract=await _this15.web3.eth.contract(_this15.minABI).at(_this15.tokenAddr);value=value*10**_this15.tokenDecimals*1;var Result={gasLimit:null,gasPrice:null};Result.gasLimit=await contract.transfer.estimateGas(to,value,{from:from});await _this15.web3.eth.getGasPrice(async function(error,result){if(!error){Result.gasPrice=result*1;Result.gasPrice+=Result.gasPrice*_this15.percentageGas/100*1;Result.gasLimit+=Result.gasLimit*_this15.percentageGas/100*1;Result.gasPrice=Math.round(Result.gasPrice);Result.gasLimit=Math.round(Result.gasLimit);resolve(Result)}else{reject('An error occurred while calculating the gas')}})})},sendETH:async function sendETH(password,from,to,value,gasPrice,gasLimit){var _this16=this;return new Promise(async function(resolve,reject){try{await _this16.keystore.keyFromPassword(password,async function(err,pwDerivedKey){if(!err){await _this16.setWeb3Provider();value=value*1.0e18;await _this16.getTransactionCount(from).then(async function(response){var txOptions={to:to,gasLimit:await _this16.web3.toHex(gasLimit),gasPrice:await _this16.web3.toHex(gasPrice),value:await _this16.web3.toHex(value),nonce:response,data:''};var contractData=await txutils.createContractTx(from,txOptions);try{var signedTx='0x'+(await signing.signTx(_this16.keystore,pwDerivedKey,contractData.tx,from));await _this16.web3.eth.sendRawTransaction(signedTx,async function(err,result){if(!err){resolve(result)}else{reject(err.message)}})}catch(e){reject(e.message)}}).catch(function(error){reject(error)})}else{reject('There was an error sending ethereum')}})}catch(e){reject(e.message)}})},sendTokens:async function sendTokens(password,from,to,value,gasPrice,gasLimit){var _this17=this;return new Promise(async function(resolve,reject){try{await _this17.keystore.keyFromPassword(password,async function(err,pwDerivedKey){if(!err){await _this17.setWeb3Provider();var contract=await _this17.web3.eth.contract(_this17.minABI).at(_this17.tokenAddr);value=value*10**_this17.tokenDecimals*1;await _this17.getTransactionCount(from).then(async function(response){var txOptions={to:_this17.tokenAddr,gasLimit:await _this17.web3.toHex(gasLimit),gasPrice:await _this17.web3.toHex(gasPrice),value:await _this17.web3.toHex(0),nonce:response,data:await contract.transfer.getData(to,value,{from:from})};var contractData=await txutils.createContractTx(from,txOptions);try{var signedTx='0x'+(await signing.signTx(_this17.keystore,pwDerivedKey,contractData.tx,from));await _this17.web3.eth.sendRawTransaction(signedTx,async function(err,result){if(!err){resolve(result)}else{reject(err.message)}})}catch(e){reject(e.message)}}).catch(function(error){reject(error)})}else{reject('There was an error sending tokens')}})}catch(e){reject(e.message)}})},initEtherScan:async function initEtherScan(){this.etherscan=await api.init(this.apikeyEtherScan,this.networkEtherScan,this.timeoutScan)},getTxtEth:async function getTxtEth(addr){var _this18=this;return new Promise(async function(resolve,reject){await _this18.initEtherScan();try{await _this18.etherscan.account.txlist(addr,1,'latest',1000,'asc').then(function(response){var txs=[];for(var k in response.result){var d=response.result[k];if(d.to==_this18.tokenAddr){continue}var type='';if(d.from==addr){type='Sent'}else{type='Received'}var data={type:type,blockNumber:d.blockNumber,timeStamp:d.timeStamp,hash:d.hash,nonce:parseFloat(d.nonce),from:d.from,to:d.to,value:d.value*1/1.0e18,gas:parseFloat(d.gas),gasPrice:d.gasPrice*1/1.0e18,isError:parseFloat(d.isError),confirmations:parseFloat(d.confirmations)};txs.push(data)}txs.reverse();resolve(txs)}).catch(function(e){reject(e)})}catch(e){reject(e.message)}})},getTxtTokens:async function getTxtTokens(addr){var _this19=this;return new Promise(async function(resolve,reject){await _this19.initEtherScan();try{await _this19.etherscan.account.tokentx(addr,_this19.tokenAddr,1,'latest','asc').then(function(response){var txs=[];for(var k in response.result){var d=response.result[k];var type='';if(d.from==addr){type='Sent'}else{type='Received'}var data={type:type,blockNumber:d.blockNumber,timeStamp:d.timeStamp,hash:d.hash,nonce:parseFloat(d.nonce),from:d.from,to:d.to,value:d.value*1/10**d.tokenDecimal,gas:parseFloat(d.gas),gasPrice:d.gasPrice*1/1.0e18,isError:0,confirmations:parseFloat(d.confirmations)};txs.push(data)}txs.reverse();resolve(txs)}).catch(function(e){reject(e.message)})}catch(e){reject(e.message)}})}};