From ec3ef5ad93a8e8b7403b678b51e1151f57226734 Mon Sep 17 00:00:00 2001 From: bumi Date: Mon, 16 Apr 2018 22:40:15 +0200 Subject: [PATCH 1/3] Fix for missing web3/missing metamask when no web3 is available we do not have a signer --- app/lib/kredits/kredits.js | 3 ++- app/services/kredits.js | 19 +++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/app/lib/kredits/kredits.js b/app/lib/kredits/kredits.js index 46a893f..1463621 100644 --- a/app/lib/kredits/kredits.js +++ b/app/lib/kredits/kredits.js @@ -94,7 +94,8 @@ export default class Kredits { if (!address || !abis[contractName]) { throw new Error(`Address or ABI not found for ${contractName}`); } - let contract = new ethers.Contract(address, abis[contractName], this.signer); + let signerOrProvider = this.signer || this.provider; + let contract = new ethers.Contract(address, abis[contractName], signerOrProvider); this.contracts[name] = new contracts[contractName](contract); return this.contracts[name]; diff --git a/app/services/kredits.js b/app/services/kredits.js index 91cfa3f..d8f891d 100644 --- a/app/services/kredits.js +++ b/app/services/kredits.js @@ -35,36 +35,39 @@ export default Service.extend({ initEthProvider: function() { return new RSVP.Promise((resolve) => { let ethProvider; + let ethSigner; let networkId; if (typeof window.web3 !== 'undefined') { debug('[kredits] Using user-provided instance, e.g. from Mist browser or Metamask'); networkId = parseInt(window.web3.version.network); ethProvider = new ethers.providers.Web3Provider(window.web3.currentProvider, {chainId: networkId}); + ethSigner = ethProvider.getSigner(); ethProvider.listAccounts().then((accounts) => { this.set('currentUserAccounts', accounts); this.set('ethProvider', ethProvider); - resolve(ethProvider); + this.set('ethSigner', ethSigner); + resolve(ethProvider, ethSigner); }); } else { debug('[kredits] Creating new instance from npm module class'); let providerUrl = localStorage.getItem('config:web3ProviderUrl') || config.web3ProviderUrl; networkId = parseInt(config.contractMetadata.networkId); ethProvider = new ethers.providers.JsonRpcProvider(providerUrl, {chainId: networkId}); + ethSigner = null; // no signer as no local web3 object is available this.set('ethProvider', ethProvider); - resolve(ethProvider); + this.set('ethSigner', ethSigner); + resolve(ethProvider, ethSigner); } window.ethProvider = ethProvider; }); }, setup() { - return this.initEthProvider().then((ethProvider) => { - let signer = ethProvider.getSigner(); - return Kredits.setup(ethProvider, signer, config.ipfs).then((kredits) => { + return this.initEthProvider().then((ethProvider, ethSigner) => { + return Kredits.setup(ethProvider, ethSigner, config.ipfs).then((kredits) => { this.set('kredits', kredits); - - // TODO: Cleanup - if (this.get('currentUserAccounts').length > 0) { + // TODO: Cleanup (!!!) + if (this.get('currentUserAccounts') && this.get('currentUserAccounts').length > 0) { this.get('getCurrentUser').then((contributorData) => { this.set('currentUser', contributorData); }); -- 2.50.1 From 6eeeabda5c3ba1744484eaed4f9e62d2fe08c4aa Mon Sep 17 00:00:00 2001 From: bumi Date: Mon, 16 Apr 2018 22:42:28 +0200 Subject: [PATCH 2/3] Fox bignumber cps for empty values --- app/utils/cps/bignumber.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/utils/cps/bignumber.js b/app/utils/cps/bignumber.js index f86cab2..4fd3f55 100644 --- a/app/utils/cps/bignumber.js +++ b/app/utils/cps/bignumber.js @@ -4,7 +4,10 @@ import ethers from 'npm:ethers'; export default function(dependentKey, converterMethod) { return computed(dependentKey, { get () { - return this.get(dependentKey)[converterMethod](); + let value = this.get(dependentKey); + if (value) { + return this.get(dependentKey)[converterMethod](); + } }, set (key, value) { value = ethers.utils.bigNumberify(value); -- 2.50.1 From 7ae497a15d20840a787e9c996d40b4fc7c312e24 Mon Sep 17 00:00:00 2001 From: bumi Date: Mon, 16 Apr 2018 23:34:14 +0200 Subject: [PATCH 3/3] Better handling of undefined values in bignumber cps --- app/utils/cps/bignumber.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/utils/cps/bignumber.js b/app/utils/cps/bignumber.js index 4fd3f55..0a4f893 100644 --- a/app/utils/cps/bignumber.js +++ b/app/utils/cps/bignumber.js @@ -5,8 +5,10 @@ export default function(dependentKey, converterMethod) { return computed(dependentKey, { get () { let value = this.get(dependentKey); - if (value) { - return this.get(dependentKey)[converterMethod](); + if (value && ethers.utils.isBigNumber(value)) { + return value[converterMethod](); + } else { + return value; } }, set (key, value) { -- 2.50.1