@tokenz/tokens-smartcontract-sdk
Version:
Smart Contract SDK for Tokenz STO platform
93 lines (84 loc) • 2.57 kB
JavaScript
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))
}
}