Use ethers.js instead of the old web3 #29

Merged
bumi merged 8 commits from ethers into master 2018-04-04 12:20:55 +00:00
4 changed files with 49 additions and 52 deletions
Showing only changes of commit 6dafc26deb - Show all commits
+1 -1
View File
@@ -20,7 +20,7 @@ export default Component.extend({
isValidAddress: function() {
// TODO: add proper address validation
return this.get('newContributor.address') !== '';
}.property('kredits.web3', 'newContributor.address'),
}.property('kredits.ethProvider', 'newContributor.address'),
isValidName: function() {
return isPresent(this.get('newContributor.name'));
+2 -2
View File
@@ -12,7 +12,7 @@ export default Ember.Controller.extend({
kredits: service(),
contractInteractionEnabled: computed.alias('kredits.web3Provided'),
contractInteractionEnabled: computed.alias('kredits.hasAccounts'),
proposalsOpen: function() {
let proposals = this.get('model.proposals')
@@ -96,7 +96,7 @@ export default Ember.Controller.extend({
this.get('model.contributors')
.findBy('id', recipientId)
.incrementProperty('kredits', amount.toNumber());
.incrementProperty('balance', amount.toNumber());
},
_handleProposalVoted(proposalId, voter, totalVotes) {
+6 -9
View File
@@ -6,16 +6,13 @@ export default Ember.Route.extend({
beforeModel(transition) {
const kredits = this.get('kredits');
if (kredits.get('web3') && kredits.get('web3Provided')) {
kredits.get('listAccounts').then((accounts) => {
if (accounts.length === 0) {
if (confirm('It looks like you have an Ethereum wallet available. Please unlock your account.')) {
transition.retry();
}
return kredits.initEthProvider().then((ethProvider) => {
if (kredits.get('accountNeedsUnlock')) {
if (confirm('It looks like you have an Ethereum wallet available. Please unlock your account.')) {
transition.retry();
}
});
}
}
});
},
model() {
+40 -40
View File
@@ -28,57 +28,57 @@ export default Service.extend({
ipfs: injectService(),
web3Instance: null,
web3Provided: false, // Web3 provided (using Mist Browser, Metamask et al.)
ethProvider: null,
currentUserAccounts: null, // default to not having an account. this is the wen web3 is loaded.
fsmanuel commented 2018-04-04 10:59:28 +00:00 (Migrated from github.com)
Review

❤️

❤️
web3: function() {
if (this.get('web3Provider')) {
return this.get('web3Provider');
}
initEthProvider: function() {
return new Ember.RSVP.Promise((resolve, reject) => {
let ethProvider;
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});
ethProvider.listAccounts().then((accounts) => {
this.set('currentUserAccounts', accounts);
this.set('ethProvider', ethProvider)
resolve(ethProvider);
});
} 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});
this.set('ethProvider', ethProvider);
resolve(ethProvider);
}
window.ethProvider = ethProvider;
});
},
let web3Provider;
if (typeof window.web3 !== 'undefined') {
debug('[kredits] Using user-provided instance, e.g. from Mist browser or Metamask');
let networkId = parseInt(window.web3.version.network);
web3Provider = new ethers.providers.Web3Provider(window.web3.currentProvider, {chainId: networkId});
this.set('web3Provided', true);
} else {
debug('[kredits] Creating new instance from npm module class');
let providerUrl = localStorage.getItem('config:web3ProviderUrl') || config.web3ProviderUrl;
let networkId = parseInt(config.contractMetadata.networkId);
web3Provider = new ethers.providers.JsonRpcProvider(providerUrl, {chainId: networkId});
}
accountNeedsUnlock: computed('currentUserAccounts', function() {
return this.get('currentUserAccounts') && Ember.isEmpty(this.get('currentUserAccounts'));
}),
this.set('web3Provider', web3Provider);
return web3Provider;
}.property('web3Provider'),
hasAccounts: computed('currentUserAccounts', function() {
return !Ember.isEmpty(this.get('currentUserAccounts'));
}),
listAccounts: function() {
return this.get('web3').listAccounts();
}.property('web3'),
currentUserAccounts: function() {
// TODO: listAccounts returns now a promise
return [];
//return ethers.listAccounts();
// return (this.get('web3Provided') && this.get('web3').eth.accounts) || [];
}.property('web3Provided', 'web3'),
registryContract: computed('web3', function() {
let networkId = this.get('web3').chainId;
let registry = new ethers.Contract(addresses['Registry'][networkId], abis['Registry'], this.get('web3'));
registryContract: computed('ethProvider', function() {
let networkId = this.get('ethProvider').chainId;
let registry = new ethers.Contract(addresses['Registry'][networkId], abis['Registry'], this.get('ethProvider'));
return registry;
}),
contributorsContract: computed('web3', function() {
contributorsContract: computed('ethProvider', function() {
return this.contractFor('Contributors');
}),
kreditsContract: computed('web3', function() {
kreditsContract: computed('ethProvider', function() {
return this.contractFor('Operator');
}),
tokenContract: computed('web3', function() {
tokenContract: computed('ethProvider', function() {
return this.contractFor('Token');
}),
@@ -86,7 +86,7 @@ export default Service.extend({
return this.get('registryContract').functions.getProxyFor(name)
.then((address) => {
debug('[kredits] get contract', name, address);
return new ethers.Contract(address, abis[name], this.get('web3').getSigner());
return new ethers.Contract(address, abis[name], this.get('ethProvider').getSigner());
});
},
@@ -229,7 +229,7 @@ export default Service.extend({
.then(profileHash => {
contributor.setProperties({
profileHash: profileHash,
kredits: 0,
balance: 0,
isCurrentUser: this.get('currentUserAccounts').includes(contributor.address)
});