This allows to provide options like gas price/limit settings for the state changing contract calls. These options are simply passed to the ethers contract instance. We need to provide the gas limit when using the jsonrpc provider. (ganache failed with revert if not enought gas was provider)
58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
const ethers = require('ethers');
|
|
const RSVP = require('rsvp');
|
|
|
|
const ContributorSerializer = require('../serializers/contributor');
|
|
const Base = require('./base');
|
|
|
|
class Contributor extends Base {
|
|
all() {
|
|
return this.functions.contributorsCount()
|
|
.then((count) => {
|
|
count = count.toNumber();
|
|
let contributors = [];
|
|
|
|
for (let id = 1; id <= count; id++) {
|
|
contributors.push(this.getById(id));
|
|
}
|
|
|
|
return RSVP.all(contributors);
|
|
});
|
|
}
|
|
|
|
getById(id) {
|
|
id = ethers.utils.bigNumberify(id);
|
|
|
|
return this.functions.getContributorById(id)
|
|
.then((data) => {
|
|
// TODO: remove when naming updated on the contract
|
|
data.hashDigest = data.ipfsHash;
|
|
return data;
|
|
})
|
|
// Fetch IPFS data if available
|
|
.then((data) => {
|
|
return this.ipfs.catAndMerge(data, ContributorSerializer.deserialize);
|
|
});
|
|
}
|
|
|
|
add(contributorAttr, callOptions = {}) {
|
|
let json = ContributorSerializer.serialize(contributorAttr);
|
|
// TODO: validate against schema
|
|
|
|
return this.ipfs
|
|
.add(json)
|
|
.then((ipfsHashAttr) => {
|
|
let contributor = [
|
|
contributorAttr.account,
|
|
ipfsHashAttr.hashDigest,
|
|
ipfsHashAttr.hashFunction,
|
|
ipfsHashAttr.hashSize,
|
|
contributorAttr.isCore,
|
|
];
|
|
|
|
return this.functions.addContributor(...contributor, callOptions);
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = Contributor;
|