UNPKG

@tokenz/tokens-smartcontract-sdk

Version:
101 lines (90 loc) 3.47 kB
'use strict' const web3 = window.web3; const w3 = require('web3'); const fixedContract = [ "macContract" , "ruleEngine" , "kycRegis" , "STOFactory" , "STOIssuance" , "STODivFactory" ]; const contracts = require('./contracts/index'); /** * A Web3 Interface Class. * @class WEb3interface */ class Core { constructor(contractName , address ) { if( typeof(window.ethereum) !== "undefined" && (typeof(window.web3) !== "undefined")){ this.Web3 = window.web3; this.contract = {}; this.contractName = contractName; this.contracts = contracts; this.w3 = new w3(); if( fixedContract.indexOf(contractName) !== -1){ this.contractObject = new this.Web3.eth.contract(this.contracts[contractName].abi).at(this.contracts[contractName].networks[window.ethereum.networkVersion].address); }else{ this.contractObject = new this.Web3.eth.contract(this.contracts[contractName].abi).at(address); } } } async getData( method , args ){ return new Promise(async function (resolve, reject) { try{ console.log(this.contractObject[method] , this , this.contractObject[method]) let data = await this.contractObject[method].getData.apply(null, args) resolve(data); }catch(err){ reject(err); } }.bind(this)) } async callData( method , args ){ return new Promise(async function ( resolve , reject ) { try{ let data = await this.getData( method , args ); let abi = await this.fetchAbiBlock( method ); this.Web3.eth.call({ to : this.contractObject.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 ( method ){ return new Promise(function (resolve, reject) { try{ let abi = this.contractObject.abi; abi.forEach(function (n) { if( n.name === method ){ resolve(n); } }.bind(this)); }catch(err){ reject(err); } }.bind(this)) } sendTx( method , args , value ){ return new Promise(async function (resolve, reject) { try{ let currentState = this.Web3.currentProvider.publicConfigStore.getState() let data = await this.getData ( method , args ); let txObj = { from : currentState.selectedAddress, to : this.contractObject.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)) } } module.exports = Core;