UNPKG

@tokenz/tokens-smartcontract-sdk

Version:
93 lines (84 loc) 2.57 kB
'use strict' const web3 = window.web3; const w3 = require('web3'); import { contracts } from "./contracts/index.js"; /** * A Web3 Interface Class. * @class WEb3interface */ export class web3Interface { constructor() { if( typeof(window.ethereum) !== "undefined" && (typeof(window.web3) !== "undefined")){ this.Web3 = window.web3; this.contract = {}; this.contractName = contracts; this.w3 = new w3(); this.contractName.map(function(cN,index) { this[cN.contractName] = new this.Web3.eth.contract(cN.abi).at(cN.networks[window.ethereum.networkVersion].address); }.bind(this)); } } async getData(contract, method , args ){ return new Promise(async function (resolve, reject) { try{ let data = await this[contract][method].getData.apply(null, args) resolve(data); }catch(err){ reject(err); } }.bind(this)) } async callData(contract, method , args ){ return new Promise(async function (resolve, reject) { try{ let data = await this.getData(contract, method , args ); let abi = await this.fetchAbiBlock(contract, method); this.Web3.eth.call({ to : this[contract].address, data : data },async function (err,result) { if(err) throw err; let res = this.w3.eth.abi.decodeParameters(abi.outputs,result); resolve(res); }.bind(this)) }catch(err){ reject(err); } }.bind(this)) } fetchAbiBlock ( contract , method ){ return new Promise(function (resolve, reject) { try{ let abi = this[contract].abi; abi.forEach(function (n) { if( n.name === method ){ resolve(n); } }.bind(this)); }catch(err){ reject(err); } }.bind(this)) } sendTx( contract , method , args , value){ return new Promise(async function (resolve, reject) { try{ let currentState = this.Web3.currentProvider.publicConfigStore.getState() let data = await this.getData ( contract , method , args ); let txObj = { from : currentState.selectedAddress, to : this[contract].address, data : data, value: this.Web3.fromDecimal(value), chainId : currentState.networkVersion } this.Web3.eth.sendTransaction(txObj,function (err,data) { if (err) throw err; resolve(data) }.bind(this)) }catch(err){ reject(err); } }.bind(this)) } }