Fix for missing metamask/web3 calls #54
@@ -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
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user
I sneaked in this, which is actually not related. :(