@tokenz/tokens-smartcontract-sdk
Version:
Smart Contract SDK for Tokenz STO platform
101 lines (90 loc) • 3.47 kB
JavaScript
'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;