import { Component, OnInit, ViewEncapsulation, AfterViewInit } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { Helpers } from '../../../../../helpers'; import { ScriptLoaderService } from '../../../../../_services/script-loader.service'; import Web3 from 'web3'; import { DetailsService } from '../../details.service'; import { GlobalsComponent } from '../../globals/globals.component'; import { ToastrService } from 'ngx-toastr'; declare var $: any; @Component({ selector: '.m-grid__item.m-grid__item--fluid.m-wrapper', templateUrl: './transfer-assets.component.html', encapsulation: ViewEncapsulation.None }) export class TrasferAssetsComponent implements OnInit, AfterViewInit { constructor( private _script: ScriptLoaderService, private toastr: ToastrService, private detailService: DetailsService, private globals: GlobalsComponent, private router: Router ) {} public userObj; public authMember; public web3; public metamaskLogin = true; public canCreateProposal = {}; public reason = {}; public tokensToLock = {}; public memberAddress; public tokenName; public loading = true; ngOnInit() { this.detailService.setTitle('Transfer Assets'); let user = localStorage.getItem('currentUser'); this.userObj = JSON.parse(user); this.authMember = this.userObj.authorized; this.web3 = new Web3(window['web3'].currentProvider); this.web3.eth.defaultAccount = this.web3.eth.coinbase; if (this.web3.eth.accounts[0] == undefined) { this.metamaskLogin = false; this.memberAddress = '0x0000000000000000000000000000000000000000'; } else this.memberAddress = this.web3.eth.accounts[0]; this.indexInitiate(); } indexInitiate() { var urlPath = window.location.href; var index = urlPath.lastIndexOf('/'); var urlCompanyName = urlPath.substring(index + 1, urlPath.length); if (this.userObj.companyName != urlCompanyName) { var data = { masterAddress: '', userName: this.userObj.userName, companyName: urlCompanyName, GBMasterAddress: this.userObj.GBMasterAddress, allAbis: this.userObj.allAbis, email: this.userObj.email, token: 'token', authorized: true }; localStorage.setItem('currentUser', JSON.stringify(data)); let user1 = localStorage.getItem('currentUser'); this.userObj = JSON.parse(user1); import('../../globals/globals.component').then(module => { module.generator(); }); GlobalsComponent.gbmaster.getdAppDetails( this.userObj.companyName, function(error, result) { this.companyMasterAddress = result[1]; this.userObj.masterAddress = this.companyMasterAddress; var version; var mrAbi = this.userObj.allAbis[2]; GlobalsComponent.gbmaster.isMemberAuthorized( this.userObj.companyName, this.web3.eth.accounts[0], function(errorMR1, resultMR1) { var authorized = false; if (resultMR1.authorized) { authorized = true; } this.userObj.authorized = authorized; this.authMember = this.userObj.authorized; var timeoutVar1 = setInterval( function() { let user = localStorage.getItem('currentUser'); this.userObj = JSON.parse(user); if (this.userObj.companyName in GlobalsComponent.governance) { user = localStorage.getItem('currentUser'); this.userObj = JSON.parse(user); var data = { masterAddress: this.companyMasterAddress, userName: this.userObj.userName, companyName: urlCompanyName, GBMasterAddress: this.userObj.GBMasterAddress, allAbis: this.userObj.allAbis, email: this.userObj.email, token: 'token', authorized: authorized }; localStorage.setItem('currentUser', JSON.stringify(data)); user = localStorage.getItem('currentUser'); this.userObj = JSON.parse(user); this.getData(); clearInterval(timeoutVar1); } }.bind(this), 500 ); }.bind(this) ); }.bind(this) ); } else { import('../../globals/globals.component').then(module => { module.generator(); }); var timeoutVar1 = setInterval( function() { if (this.userObj.companyName in GlobalsComponent.governance) { this.getData(); clearInterval(timeoutVar1); } }.bind(this), 500 ); } } public tokenInfo = []; public errorFetchTokens = false; getData() { GlobalsComponent.gbmaster.getdAppContractAddresses( this.userObj.companyName, function(errAddress, resAddress) { var poolAddress = resAddress['Pool']; GlobalsComponent.gbmaster.getBalance( poolAddress, function(errorETHBal, resETHBal) { this.tokenInfo.push({ name: 'Ethereum', balance: (resETHBal / 1e18).toFixed(5), symbol: 'ETH' }); // this.selectedTokenData=this.tokenInfo[this.tokenInfo.length-1]; }.bind(this) ); GlobalsComponent.gbmaster.getGBTBalance_user( poolAddress, function(gbtAddress, resGBTBal) { this.tokenAddress['GBT'] = gbtAddress; this.tokenInfo.push({ name: 'Govblocks', balance: (resGBTBal / 1e18).toFixed(2), symbol: 'GBT' }); }.bind(this) ); GlobalsComponent.gbmaster.getdAppTokenName( this.userObj.companyName, function(dAppTknAddress, resTknName) { GlobalsComponent.gbmaster.getBalance_user( poolAddress, this.userObj.companyName, function(dAppTknAddress, resdAppBal) { this.tokenAddress[resTknName] = dAppTknAddress; this.tokenInfo.push({ name: 'dAppToken', balance: (resdAppBal / 1e18).toFixed(2), symbol: resTknName }); this.loading = false; try { document.getElementById('radioETH').click(); } catch (err) { setTimeout(() => { document.getElementById('radioETH').click(); }, 500); } }.bind(this) ); }.bind(this) ); }.bind(this) ); GlobalsComponent.governance[this.userObj.companyName].canCreateProposal( this.memberAddress, 9, function(reason, resCanCreate) { this.canCreateProposal['ETH'] = resCanCreate; this.reason['ETH'] = reason[0]; this.tokensToLock['ETH'] = reason[1]; }.bind(this) ); GlobalsComponent.governance[this.userObj.companyName].canCreateProposal( this.memberAddress, 10, function(reason, resCanCreate) { this.canCreateProposal['TOKEN'] = resCanCreate; this.reason['TOKEN'] = reason[0]; this.tokensToLock['TOKEN'] = reason[1]; }.bind(this) ); // var XMLHttp = new XMLHttpRequest(); // XMLHttp.open("GET", "http://api.ethplorer.io/getAddressInfo/"+"0x32Be343B94f860124dC4fEe278FDCBD38C102D88"+"?apiKey=freekey", false); // try{ // XMLHttp.onload = () => { // var apiData = JSON.parse(XMLHttp.responseText); // if(apiData.error){ // this.errorFetchTokens=true; // } // else{ // console.log(apiData); // this.tokenInfo.push({name:"ETHEREUM",balance:apiData.ETH.balance.toFixed(5),symbol:"ETH"}); // if(apiData.tokens !=undefined){ // for(let i=0;i1e+5)?apiData.tokens[i].balance.toExponential(2):apiData.tokens[i].balance; // this.tokenInfo.push({name:apiData.tokens[i].tokenInfo.name,balance:balance,symbol:apiData.tokens[i].tokenInfo.symbol}); // } // } // this.loading=false; // } // }; // XMLHttp.send(null); // } // catch(err){ // console.log(err); // } } public selectedTokenData = null; selectedToken(i) { this.selectedTokenData = this.tokenInfo[i]; console.log(this.selectedTokenData); } public loaderTransferAssets = false; public reasonTransferAssets; public recipientAddress; public amount; public tokenAddress = {}; transferAssets() { var tokenName = this.selectedTokenData.symbol == 'ETH' ? 'ETH' : 'TOKEN'; var categoryId = this.selectedTokenData.symbol == 'ETH' ? 9 : 10; if (this.amount <= this.selectedTokenData.balance) { this.loaderTransferAssets = true; // this.amount*=1e+18; if (this.canCreateProposal[tokenName]) { var proposalData = [ { title: 'Transfer Assets', shortDescription: 'Transfer ' + this.selectedTokenData.symbol + ' to ' + this.recipientAddress, description: this.reasonTransferAssets } ]; var optionData; if (tokenName == 'ETH') { optionData = { paramValues: [this.recipientAddress, this.amount * 1e18], apiParamValues: [] }; } else { optionData = { paramValues: [ this.tokenAddress[this.selectedTokenData.symbol], this.recipientAddress, this.amount * 1e18 ], apiParamValues: [] }; } var data = { proposalData: proposalData, optionData: optionData, cId: categoryId, votingType: 0 }; GlobalsComponent.governance[ this.userObj.companyName ].createProposalwithOption( data, function(error, result) { if (!error) { this.timeout(result); } else { this.loaderTransferAssets = false; this.toastr.error('Error in creating proposal'); } }.bind(this) ); } else { this.loaderTransferAssets = false; if (this.reason[tokenName] == 'Not Allowed') this.toastr.warning( 'You are not authorized to create proposal under this category' ); else if (this.reason[tokenName] == 'Less Tokens') this.toastr.warning( 'Lock ' + this.tokensToLock[tokenName] + ' token(s) to create a proposal under this category' ); } } else { this.toastr.warning('Less Token balance'); } } timeout(hash) { setTimeout(() => { var boundFunction = this.web3.eth.getTransactionReceipt( hash, function(error, result) { if (result != null) { setTimeout(() => { var proposalId = result.logs[0].topics[2]; proposalId = this.web3.toDecimal(proposalId); this.toastr.success('Proposal created Succesfully!'); this.loaderTransferAssets = false; this.router.navigate([ '/components/proposals/' + this.userObj.companyName + '/' + proposalId ]); }, 4000); } else this.timeout(hash); }.bind(this) ); }, 1000); } ngAfterViewInit() {} }