2019-05-22 17:28:21 +00:00
|
|
|
var inquirer = require('inquirer');
|
|
|
|
const Web3 = require("web3");
|
2019-05-22 20:59:58 +00:00
|
|
|
const PledgeAdminUtils = require('./pledgeadmin-utils');
|
2019-05-23 18:25:26 +00:00
|
|
|
const PledgeUtils = require('./pledge-utils');
|
2019-05-22 22:16:41 +00:00
|
|
|
const TrxUtils = require('./trx-utils');
|
2019-05-22 19:21:02 +00:00
|
|
|
const Contracts = require("./contracts.js");
|
2019-05-22 17:28:21 +00:00
|
|
|
|
2019-05-22 19:21:02 +00:00
|
|
|
const web3 = new Web3();
|
2019-05-22 18:50:27 +00:00
|
|
|
|
2019-05-22 17:28:21 +00:00
|
|
|
function doAction(actionText, action) {
|
2019-05-23 12:59:41 +00:00
|
|
|
console.dir(actionText)
|
|
|
|
return new Promise(async(resolve, reject) => {
|
|
|
|
inquirer
|
|
|
|
.prompt([
|
|
|
|
{
|
|
|
|
type: 'confirm',
|
|
|
|
name: 'action',
|
|
|
|
message: 'Execute?',
|
|
|
|
}
|
2019-05-23 15:53:40 +00:00
|
|
|
]).then(async (answer) => {
|
2019-05-23 12:59:41 +00:00
|
|
|
if (answer.action === false) return resolve();
|
|
|
|
console.dir("executing...");
|
|
|
|
try {
|
2019-05-23 15:53:40 +00:00
|
|
|
await action()
|
2019-05-23 12:59:41 +00:00
|
|
|
} catch (e) {
|
|
|
|
console.dir("== error")
|
|
|
|
console.dir(e)
|
|
|
|
}
|
2019-05-23 15:53:40 +00:00
|
|
|
console.log("\n");
|
2019-05-23 12:59:41 +00:00
|
|
|
resolve()
|
|
|
|
})
|
|
|
|
});
|
2019-05-22 17:28:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
class Actions {
|
|
|
|
|
2019-05-22 19:21:02 +00:00
|
|
|
constructor(chain) {
|
2019-05-23 12:59:41 +00:00
|
|
|
this.chain = chain || "development";
|
2019-05-22 17:28:21 +00:00
|
|
|
}
|
|
|
|
|
2019-05-22 19:21:02 +00:00
|
|
|
connect(url, cb) {
|
2019-05-23 12:59:41 +00:00
|
|
|
console.dir("connecting to: " + url);
|
2019-05-22 19:21:02 +00:00
|
|
|
web3.setProvider(url);
|
2019-05-22 17:40:33 +00:00
|
|
|
|
|
|
|
setTimeout(async () => {
|
|
|
|
let accounts = await web3.eth.getAccounts();
|
2019-05-22 17:56:41 +00:00
|
|
|
console.dir("== accounts");
|
|
|
|
console.dir(accounts);
|
2019-05-22 17:40:33 +00:00
|
|
|
web3.eth.defaultAccount = accounts[0]
|
2019-05-22 17:56:41 +00:00
|
|
|
|
2019-05-22 19:21:02 +00:00
|
|
|
let contracts = new Contracts(this.chain, web3);
|
2019-05-23 12:59:41 +00:00
|
|
|
contracts.loadContracts();
|
|
|
|
this.contracts = contracts.contracts;
|
2019-05-22 17:56:41 +00:00
|
|
|
|
2019-05-22 17:40:33 +00:00
|
|
|
cb();
|
|
|
|
}, 1000);
|
2019-05-22 17:28:21 +00:00
|
|
|
}
|
|
|
|
|
2019-05-22 18:08:06 +00:00
|
|
|
web3() {
|
|
|
|
return web3;
|
|
|
|
}
|
2019-05-22 17:56:41 +00:00
|
|
|
|
2019-05-23 12:59:07 +00:00
|
|
|
async addProject(params) {
|
2019-05-22 17:40:33 +00:00
|
|
|
let text = `await LiquidPledging.methods.addProject(\"${params.name}\", \"${params.url}\", \"${params.account}\", ${params.parentProject}, ${params.commitTime}, \"${params.plugin}\").send({from: \"${web3.eth.defaultAccount}\", gas: 2000000})`
|
2019-05-23 12:59:07 +00:00
|
|
|
return doAction(text, async () => {
|
2019-05-22 22:16:41 +00:00
|
|
|
const toSend = this.contracts.LiquidPledging.methods.addProject(params.name, params.url, params.account, params.parentProject, params.commitTime, params.plugin);
|
|
|
|
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
|
|
|
|
console.dir("txHash: " + receipt.transactionHash);
|
|
|
|
const projectId = receipt.events.ProjectAdded.returnValues.idProject;
|
|
|
|
console.log("Project ID: " , projectId);
|
2019-05-22 17:28:21 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-05-22 20:03:52 +00:00
|
|
|
async listProjects() {
|
2019-05-23 12:59:41 +00:00
|
|
|
return new Promise(async (resolve, reject) => {
|
|
|
|
try {
|
|
|
|
const pledgeAdmins = await PledgeAdminUtils.getPledgeAdmins(this.contracts.LiquidPledging);
|
|
|
|
PledgeAdminUtils.printTable(pledgeAdmins.filter(x => x.adminType === PledgeAdminUtils.constants.PROJECT));
|
|
|
|
} catch(error){
|
|
|
|
console.log(error);
|
|
|
|
console.log("Couldn't obtain the list of projects: ", error.message);
|
|
|
|
}
|
|
|
|
resolve();
|
|
|
|
});
|
2019-05-22 20:03:52 +00:00
|
|
|
}
|
|
|
|
|
2019-05-23 12:59:07 +00:00
|
|
|
async viewProject(params) {
|
2019-05-22 20:27:57 +00:00
|
|
|
let text = `await LiquidPledging.methods.getPledgeAdmin(\"${params.id}\").call()`
|
2019-05-23 12:59:07 +00:00
|
|
|
return doAction(text, async () => {
|
2019-05-22 20:27:57 +00:00
|
|
|
try {
|
|
|
|
const pledgeAdmin = await this.contracts.LiquidPledging.methods.getPledgeAdmin(params.id).call();
|
2019-05-23 18:25:26 +00:00
|
|
|
pledgeAdmin.id = params.id;
|
2019-05-22 22:16:41 +00:00
|
|
|
PledgeAdminUtils.printTable([pledgeAdmin].filter(x => x.adminType === PledgeAdminUtils.constants.PROJECT));
|
2019-05-22 20:27:57 +00:00
|
|
|
} catch(error){
|
|
|
|
console.log("Couldn't obtain the project: ", error.message);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-05-23 18:55:54 +00:00
|
|
|
async withdraw(params) {
|
|
|
|
let text = `await LiquidPledging.methods.withdraw(\"${params.id}\", web3.utils.toWei(\"${params.amount}\", "ether")).send({gas: 2000000})`;
|
|
|
|
return doAction(text, async () => {
|
|
|
|
const toSend = this.contracts.LiquidPledging.methods.withdraw(params.id.toString(), web3.utils.toWei(params.amount.toString(), "ether"));
|
|
|
|
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
|
|
|
|
console.dir("txHash: " + receipt.transactionHash);
|
|
|
|
const paymentId = receipt.events.AuthorizePayment.returnValues.idPayment;
|
|
|
|
console.log("Payment ID: " , paymentId);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-05-23 18:25:26 +00:00
|
|
|
async viewPledges(params) {
|
|
|
|
return new Promise(async (resolve, reject) => {
|
|
|
|
try {
|
|
|
|
const pledges = await PledgeUtils.getPledges(this.contracts.LiquidPledging);
|
|
|
|
PledgeUtils.printTable(pledges, web3);
|
|
|
|
} catch(error){
|
|
|
|
console.log(error);
|
|
|
|
console.log("Couldn't obtain the list of pledges: ", error.message);
|
|
|
|
}
|
|
|
|
resolve();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-05-23 12:59:41 +00:00
|
|
|
async listFunders() {
|
|
|
|
return new Promise(async (resolve, reject) => {
|
|
|
|
try {
|
|
|
|
const pledgeAdmins = await PledgeAdminUtils.getPledgeAdmins(this.contracts.LiquidPledging);
|
|
|
|
PledgeAdminUtils.printTable(pledgeAdmins.filter(x => x.adminType === PledgeAdminUtils.constants.FUNDER));
|
|
|
|
} catch(error){
|
|
|
|
console.log(error);
|
|
|
|
console.log("Couldn't obtain the list of funders: ", error.message);
|
|
|
|
}
|
|
|
|
resolve();
|
|
|
|
});
|
|
|
|
}
|
2019-05-23 12:59:07 +00:00
|
|
|
|
|
|
|
async addGiver(params) {
|
2019-05-22 17:40:33 +00:00
|
|
|
let text = `await LiquidPledging.methods.addGiver(\"${params.name}\", \"${params.url}\", ${params.commitTime}, \"${params.plugin}\").send({from: \"${web3.eth.defaultAccount}\", gas: 2000000})`
|
2019-05-23 12:59:07 +00:00
|
|
|
return doAction(text, async () => {
|
2019-05-22 22:16:41 +00:00
|
|
|
const toSend = this.contracts.LiquidPledging.methods.addGiver(params.name, params.url, params.commitTime, params.plugin);
|
|
|
|
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
|
|
|
|
console.dir("txHash: " + receipt.transactionHash);
|
|
|
|
const funderId = receipt.events.GiverAdded.returnValues.idGiver;
|
|
|
|
console.log("Funder ID: " , funderId);
|
2019-05-22 17:28:21 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-05-23 12:59:07 +00:00
|
|
|
async mintToken(params) {
|
2019-05-22 17:28:21 +00:00
|
|
|
let text = `await StandardToken.methods.mint(\"${params.account}\", web3.utils.toWei(\"${params.amount}\", \"ether\")).send({gas: 2000000})`
|
2019-05-23 12:59:07 +00:00
|
|
|
return doAction(text, async () => {
|
2019-05-22 22:16:41 +00:00
|
|
|
const toSend = this.contracts.StandardToken.methods.mint(params.account, web3.utils.toWei(params.amount.toString(), "ether"));
|
|
|
|
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
|
|
|
|
console.dir("txHash: " + receipt.transactionHash);
|
2019-05-22 17:28:21 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-05-23 12:59:07 +00:00
|
|
|
async approveToken(params) {
|
2019-05-22 19:21:02 +00:00
|
|
|
let text = `await StandardToken.methods.approve(\"${this.contracts.LiquidPledging.options.address}\", web3.utils.toWei(\"${params.amount}\", \"ether\")).send({gas: 2000000})`
|
2019-05-23 12:59:07 +00:00
|
|
|
return doAction(text, async () => {
|
2019-05-22 22:16:41 +00:00
|
|
|
const toSend = this.contracts.StandardToken.methods.approve(this.contracts.LiquidPledging.options.address, web3.utils.toWei(params.amount.toString(), "ether"));
|
|
|
|
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
|
|
|
|
console.dir("txHash: " + receipt.transactionHash);
|
2019-05-22 18:08:06 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-05-23 12:59:07 +00:00
|
|
|
async donate(params) {
|
2019-05-23 18:25:26 +00:00
|
|
|
let text = `await LiquidPledging.methods.donate(${params.funderId}, ${params.projectId}, \"${params.tokenAddress}\", web3.utils.toWei(\"${params.amount}\", \"ether\")).send({gas: 2000000});`
|
2019-05-23 12:59:07 +00:00
|
|
|
return doAction(text, async () => {
|
2019-05-23 18:25:26 +00:00
|
|
|
const toSend = this.contracts.LiquidPledging.methods.donate(params.funderId, params.projectId, params.tokenAddress, web3.utils.toWei(params.amount.toString(), "ether"));
|
2019-05-22 22:16:41 +00:00
|
|
|
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
|
|
|
|
console.dir("txHash: " + receipt.transactionHash);
|
2019-05-22 18:46:27 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-05-22 17:28:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = Actions;
|