Merge pull request #136 from 67P/feature/ipfs-pinner

Add IPFS pinning script
This commit is contained in:
Basti 2019-07-01 13:06:45 +02:00 committed by GitHub
commit 16141ed482
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 93 additions and 0 deletions

View File

@ -14,6 +14,10 @@ class Contribution extends Record {
});
}
getData (id) {
return this.functions.getContribution(id);
}
getByContributorId (contributorId) {
return this.functions.getContributorAddressById(contributorId)
.then(address => this.getByContributorAddress(address));
@ -62,6 +66,7 @@ class Contribution extends Record {
deprecate('The function `addContribution()` is deprecated and will be removed in the next major version. Use `add()` instead');
return this.add(...arguments);
}
}
module.exports = Contribution;

View File

@ -15,6 +15,10 @@ class Contributor extends Record {
});
}
getData (id) {
return this.functions.getContributorById(id);
}
filterByAccount (search) {
return this._byAccount(search, 'filter');
}
@ -84,6 +88,7 @@ class Contributor extends Record {
});
});
}
}
module.exports = Contributor;

View File

@ -9,6 +9,18 @@ class Record extends Base {
return Promise.all(records);
});
}
pinIpfsHashes () {
return this.count.then(count => {
let promises = [...Array(count).keys()].map(i => {
let id = i + 1; // 0 => 1 - ids start with 1 and not with 0
return this.getData(id).then(data => {
return this.ipfs.pin(data);
});
});
return Promise.all(promises);
});
}
}
module.exports = Record;

32
lib/utils/ipfs-pinner.js Normal file
View File

@ -0,0 +1,32 @@
class IpfsPinner {
constructor (kredits) {
this.kredits = kredits;
}
pinAll () {
return Promise.all([
this.kredits.Contributor.pinIpfsHashes(),
this.kredits.Contribution.pinIpfsHashes(),
]);
}
monitor (callback) {
this.kredits.Contribution.on('ContributionAdded', (id) => {
this.kredits.Contribution.getData(id)
.then(data => { return this.kredits.ipfs.pin(data); })
.then(callback);
});
this.kredits.Contributor.on('ContributorAdded', (id) => {
this.kredits.Contribution.getData(id)
.then(data => { return this.kredits.ipfs.pin(data); })
.then(callback);
});
this.kredits.Contributor.on('ContributorProfileUpdated', (id) => {
this.kredits.Contributor.getData(id)
.then(data => { return this.kredits.ipfs.pin(data); })
.then(callback);
});
}
}
module.exports = IpfsPinner;

View File

@ -41,6 +41,14 @@ class IPFS {
return this._ipfsAPI.cat(ipfsHash);
}
pin (hashData) {
let ipfsHash = hashData; // default - if it is a string
if (hashData.hasOwnProperty('hashSize')) {
ipfsHash = this.encodeHash(hashData);
}
return this._ipfsAPI.pin.add(multihashes.toB58String(ipfsHash));
}
decodeHash (ipfsHash) {
let multihash = multihashes.decode(multihashes.fromB58String(ipfsHash));
return {

31
scripts/ipfs-pinner.js Normal file
View File

@ -0,0 +1,31 @@
const Kredits = require('../lib/kredits');
const IpfsPinner = require('../lib/utils/ipfs-pinner');
const network = process.env.ETH_NETWORK || 'rinkeby';
const rpcUrl = process.env.ETH_RPC_URL;
const apm = process.env.APM_DOMAIN || 'open.aragonpm.eth';
const ipfsConfig = {
host: process.env.IPFS_HOST || 'localhost',
port: process.env.IPFS_PORT || '5001',
protocol: process.env.IPFS_PROTOCOL || 'http',
};
console.log(`Using IPFS:`, ipfsConfig);
(async () => {
try {
const kredits = await Kredits.for({ network, rpcUrl }, { apm, ipfsConfig }).init();
const ipfsPinner = new IpfsPinner(kredits);
ipfsPinner.pinAll().then(pins => {
console.log('Pinned', JSON.stringify(pins, null, 2));
});
ipfsPinner.monitor((pin) => {
console.log('Pinned', JSON.stringify(pin));
});
console.log(`Subscribed to DAO: ${kredits.Kernel.contract.address}`);
} catch(e) {
console.log(e);
process.exit(1);
}
})();