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 464dce1..d6e11a1 100644 --- a/app/services/kredits.js +++ b/app/services/kredits.js @@ -31,37 +31,40 @@ export default Service.extend({ initEthProvider: function() { return new RSVP.Promise((resolve) => { let ethProvider; + let ethSigner; let networkId; if (typeof window.web3 !== 'undefined') { console.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 { console.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.currentUserAccounts.length > 0) { - this.getCurrentUser.then((contributorData) => { + // TODO: Cleanup (!!!) + if (this.currentUserAccounts && this.currentUserAccounts.length > 0) { + this.getCurrentUser.then(contributorData => { this.set('currentUser', contributorData); }); } diff --git a/app/utils/cps/bignumber.js b/app/utils/cps/bignumber.js index 2bf5bf7..d194685 100644 --- a/app/utils/cps/bignumber.js +++ b/app/utils/cps/bignumber.js @@ -4,7 +4,12 @@ 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 && ethers.utils.isBigNumber(value)) { + return value[converterMethod](); + } else { + return value; + } }, set (key, value) { value = ethers.utils.bigNumberify(value);