diff --git a/config/seeds.js b/config/seeds.js index 0d519b7..6547537 100644 --- a/config/seeds.js +++ b/config/seeds.js @@ -1,16 +1,18 @@ const contractCalls = [ ['Contributor', 'add', [{ account: '0x7e8f313c56f809188313aa274fa67ee58c31515d', name: 'bumi', kind: 'person', url: '', github_username: 'bumi', github_uid: 318, wiki_username: 'bumi' }, { gasLimit: 200000 }]], ['Contributor', 'add', [{ account: '0x49575f3DD9a0d60aE661BC992f72D837A77f05Bc', name: 'raucao', kind: 'person', url: '', github_username: 'skddc', github_uid: 842, wiki_username: 'raucau' }, { gasLimit: 200000 }]], - ['Proposal', 'addProposal', [{ contributorId: 1, amount: 500, kind: 'code', description: '[67P/kredits-contracts] Ran the seeds', url: '' }, { gasLimit: 350000 }]], - ['Proposal', 'addProposal', [{ contributorId: 2, amount: 500, kind: 'code', description: '[67P/kredits-contracts] Ran the seeds', url: '' }, { gasLimit: 350000 }]], - ['Proposal', 'addProposal', [{ contributorId: 2, amount: 500, kind: 'code', description: '[67P/kredits-contracts] Hacked on kredits', url: '' }, { gasLimit: 350000 }]], + ['Proposal', 'addProposal', [{ contributorId: 1, contributorIpfsHash: 'QmWKCYGr2rSf6abUPaTYqf98urvoZxGrb7dbspFZA6oyVF', date: '2019-04-09', amount: 500, kind: 'dev', description: '[67P/kredits-contracts] Ran the seeds', url: '' }, { gasLimit: 350000 }]], + ['Proposal', 'addProposal', [{ contributorId: 2, contributorIpfsHash: 'QmcHzEeAM26HV2zHTf5HnZrCtCtGdEccL5kUtDakAB7ozB', date: '2019-04-10', amount: 500, kind: 'dev', description: '[67P/kredits-contracts] Ran the seeds', url: '' }, { gasLimit: 350000 }]], + ['Proposal', 'addProposal', [{ contributorId: 2, contributorIpfsHash: 'QmcHzEeAM26HV2zHTf5HnZrCtCtGdEccL5kUtDakAB7ozB', date: '2019-04-11', amount: 500, kind: 'dev', description: '[67P/kredits-contracts] Hacked on kredits', url: '' }, { gasLimit: 350000 }]], ['Proposal', 'vote', [1, { gasLimit: 550000 }]], ['Contribution', 'addContribution', [{ contributorId: 1, contributorIpfsHash: 'QmWKCYGr2rSf6abUPaTYqf98urvoZxGrb7dbspFZA6oyVF', date: '2019-04-11', amount: 5000, kind: 'dev', description: '[67P/kredits-contracts] Introduce contribution token', url: '' }, { gasLimit: 350000 }]], ['Contribution', 'addContribution', [{ contributorId: 2, contributorIpfsHash: 'QmcHzEeAM26HV2zHTf5HnZrCtCtGdEccL5kUtDakAB7ozB', date: '2019-04-11', amount: 1500, kind: 'dev', description: '[67P/kredits-web] Reviewed stuff', url: '' }, { gasLimit: 350000 }]], ['Contribution', 'claim', [1, { gasLimit: 300000 }]] ]; + const funds = [ '0x7e8f313c56f809188313aa274fa67ee58c31515d', '0xa502eb4021f3b9ab62f75b57a94e1cfbf81fd827' ]; + module.exports = { contractCalls, funds }; diff --git a/lib/contracts/proposal.js b/lib/contracts/proposal.js index 896b72f..5266144 100644 --- a/lib/contracts/proposal.js +++ b/lib/contracts/proposal.js @@ -25,12 +25,16 @@ class Proposal extends Base { }); } - addProposal(proposalAttr, callOptions = {}) { - let json = ContributionSerializer.serialize(proposalAttr); - // TODO: validate against schema + async addProposal(proposalAttr, callOptions = {}) { + const contribution = new ContributionSerializer(proposalAttr); + + try { await contribution.validate(); } + catch (error) { return Promise.reject(error); } + + const jsonStr = contribution.serialize(); return this.ipfs - .add(json) + .add(jsonStr) .then((ipfsHashAttr) => { let proposal = [ proposalAttr.contributorId, diff --git a/scripts/add-proposal.js b/scripts/add-proposal.js index 935b461..c99fecf 100644 --- a/scripts/add-proposal.js +++ b/scripts/add-proposal.js @@ -1,4 +1,5 @@ const promptly = require('promptly'); +const { inspect } = require('util'); const initKredits = require('./helpers/init_kredits.js'); @@ -25,23 +26,31 @@ module.exports = async function(callback) { } console.log(`Creating a proposal for contributor ID #${contributorId} account: ${contributorAccount}`); + [ dateNow, timeNow ] = (new Date()).toISOString().split('T'); + let contributionAttributes = { contributorId, + date: dateNow, + time: timeNow, amount: await promptly.prompt('Amount: '), description: await promptly.prompt('Description: '), kind: await promptly.prompt('Kind: ', { default: 'dev' }), url: await promptly.prompt('URL: ', { default: '' }) } + const contributorData = await kredits.Contributor.getById(contributorId); + contributionAttributes.contributorIpfsHash = contributorData.ipfsHash; + console.log("\nAdding proposal:"); console.log(contributionAttributes); - kredits.Proposal.addProposal(contributionAttributes, { gasLimit: 300000 }).then((result) => { - console.log("\n\nResult:"); - console.log(result); - callback(); - }).catch((error) => { - console.log('Failed to create proposal'); - callback(error); - }); + kredits.Proposal.addProposal(contributionAttributes, { gasLimit: 300000 }) + .then((result) => { + console.log("\n\nResult:"); + console.log(result); + callback(); + }).catch((error) => { + console.log('Failed to create proposal'); + callback(inspect(error)); + }); }