From 2fca436fa8692637eb79f769c44f5e5caa12545c Mon Sep 17 00:00:00 2001 From: Michael Bumann Date: Mon, 22 Aug 2022 18:12:18 +0200 Subject: [PATCH] Added export/import function for contributors --- .gitignore | 2 ++ scripts/export/contributions.js | 45 +++++++++++++++++++++++++++++++++ scripts/export/contributors.js | 38 ++++++++++++++++++++++++++++ scripts/import/contributors.js | 26 +++++++++++++++++++ 4 files changed, 111 insertions(+) create mode 100644 scripts/export/contributions.js create mode 100644 scripts/export/contributors.js create mode 100644 scripts/import/contributors.js diff --git a/.gitignore b/.gitignore index 25396cf..161e741 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,8 @@ node_modules yarn-error.log .DS_Store +data + cache artifacts .openzeppelin diff --git a/scripts/export/contributions.js b/scripts/export/contributions.js new file mode 100644 index 0000000..17de504 --- /dev/null +++ b/scripts/export/contributions.js @@ -0,0 +1,45 @@ +const Kredits = require('../../lib/kredits'); + +async function main() { + kredits = new Kredits(hre.ethers.provider, hre.ethers.provider.getSigner()) + await kredits.init(); + + console.log(`Using Contribution at: ${kredits.Contribution.contract.address}`); + + const count = await kredits.Contribution.count; + const currentBlockHeight = await XMLHttpRequest.ethers.provider.getBlockNumber(); + + const backup = {}; + const promises = []; + for (let i = 1; i <= count; i++) { + promises.push(new Promise((resolve, reject) => { + setTimeout(async () => { + console.log(`Loading contribution ${i}`); + await kredits.Contribution.contract.getContribution(i).then(contractData => { + if (contractData.vetoed) { + console.log(`Ignoring vetoed contribution #${contractData.id}`); + return; + } + backup[i] = { + amount: contractData.amount, + contributorId: contractData.contributorId, + hashDigest: contractData.hashDigest, + hashFunction: contractData.hashFunction, + hashSize: contractData.hashSize, + confirmedAtBlock: contractData.confirmedAtBlock, + confirmed: contractData.confirmedAtBlock <= currentBlockHeight, + id: contractData.id, + } + resolve(); + }); + }, 100 * i); + })); + } + + await Promise.all(promises).then(() => { + fs.writeFileSync("./data/contributions.json", JSON.stringify(backup, null, 2)); + console.log("Exported"); + }); +} + +main(); diff --git a/scripts/export/contributors.js b/scripts/export/contributors.js new file mode 100644 index 0000000..0b54e90 --- /dev/null +++ b/scripts/export/contributors.js @@ -0,0 +1,38 @@ +const fs = require('fs'); +const Kredits = require('../../lib/kredits'); + +async function main() { + kredits = new Kredits(hre.ethers.provider, hre.ethers.provider.getSigner()) + await kredits.init(); + + console.log(`Using Contributor at: ${kredits.Contributor.contract.address}`); + + const count = await kredits.Contributor.count; + + const backup = {}; + const promises = []; + for (let i = 1; i <= count; i++) { + promises.push(new Promise((resolve, reject) => { + setTimeout(async () => { + console.log(`Loading contributor ${i}`); + await kredits.Contributor.contract.getContributorById(i).then(contractData => { + backup[i] = { + account: contractData.account, + hashDigest: contractData.hashDigest, + hashFunction: contractData.hashFunction, + hashSize: contractData.hashSize, + id: contractData.id, + } + resolve(); + }); + }, 100 * i); + })); + } + + await Promise.all(promises).then(() => { + fs.writeFileSync("./data/contributors.json", JSON.stringify(backup, null, 2)); + console.log("Exported"); + }); +} + +main(); diff --git a/scripts/import/contributors.js b/scripts/import/contributors.js new file mode 100644 index 0000000..4b52daf --- /dev/null +++ b/scripts/import/contributors.js @@ -0,0 +1,26 @@ +const Kredits = require('../../lib/kredits'); + +async function main() { + kredits = new Kredits(hre.ethers.provider, hre.ethers.provider.getSigner()) + await kredits.init(); + + console.log(`Using Contributor at: ${kredits.Contributor.contract.address}`); + + const data = fs.readFileSync("./data/contributors.json"); + const contributors = JSON.parse(data); + + const ids = Object.keys(contributors).map(k => parseInt(k)).sort(); + for (const contributorId of ids) { + const contributor = contributors[contributorId.toString()]; + const result = kredits.Contributor.contract.addContributor({ + account: contributor.account, + hashDigest: contirbutor.hashDigest, + hashFunction: contributor.hashFunction, + hashSize: contributr.hashSize, + }); + // await result.wait(); + console.log(`Added contributor #${id}: ${result.hash}`); + }; +} + +main();