Fix for missing metamask/web3 calls #54

Closed
bumi wants to merge 4 commits from fix-with-missing-metamask into master
3 changed files with 20 additions and 11 deletions
+2 -1
View File
@@ -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];
+12 -9
View File
@@ -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);
});
}
+6 -1
View File
@@ -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;
}
},
bumi commented 2018-04-16 21:36:42 +00:00 (Migrated from github.com)
Review

I sneaked in this, which is actually not related. :(

I sneaked in this, which is actually not related. :(
set (key, value) {
value = ethers.utils.bigNumberify(value);