commit
61b356079b
103
src/actions.js
103
src/actions.js
|
@ -8,33 +8,36 @@ const web3 = new Web3();
|
||||||
|
|
||||||
function doAction(actionText, action) {
|
function doAction(actionText, action) {
|
||||||
console.dir(actionText)
|
console.dir(actionText)
|
||||||
const confirmation = inquirer
|
return new Promise(async(resolve, reject) => {
|
||||||
.prompt([
|
inquirer
|
||||||
{
|
.prompt([
|
||||||
type: 'confirm',
|
{
|
||||||
name: 'action',
|
type: 'confirm',
|
||||||
message: 'Execute?',
|
name: 'action',
|
||||||
}
|
message: 'Execute?',
|
||||||
]).then((answer) => {
|
}
|
||||||
if (answer.action === false) return;
|
]).then((answer) => {
|
||||||
console.dir("executing...");
|
if (answer.action === false) return resolve();
|
||||||
try {
|
console.dir("executing...");
|
||||||
action()
|
try {
|
||||||
} catch (e) {
|
action()
|
||||||
console.dir("== error")
|
} catch (e) {
|
||||||
console.dir(e)
|
console.dir("== error")
|
||||||
}
|
console.dir(e)
|
||||||
})
|
}
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
class Actions {
|
class Actions {
|
||||||
|
|
||||||
constructor(chain) {
|
constructor(chain) {
|
||||||
this.chain = chain || "development";
|
this.chain = chain || "development";
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(url, cb) {
|
connect(url, cb) {
|
||||||
console.dir("connecting to: " + url);
|
console.dir("connecting to: " + url);
|
||||||
web3.setProvider(url);
|
web3.setProvider(url);
|
||||||
|
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
|
@ -44,8 +47,8 @@ class Actions {
|
||||||
web3.eth.defaultAccount = accounts[0]
|
web3.eth.defaultAccount = accounts[0]
|
||||||
|
|
||||||
let contracts = new Contracts(this.chain, web3);
|
let contracts = new Contracts(this.chain, web3);
|
||||||
contracts.loadContracts();
|
contracts.loadContracts();
|
||||||
this.contracts = contracts.contracts;
|
this.contracts = contracts.contracts;
|
||||||
|
|
||||||
cb();
|
cb();
|
||||||
}, 1000);
|
}, 1000);
|
||||||
|
@ -55,9 +58,9 @@ class Actions {
|
||||||
return web3;
|
return web3;
|
||||||
}
|
}
|
||||||
|
|
||||||
addProject(params) {
|
async addProject(params) {
|
||||||
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})`
|
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})`
|
||||||
doAction(text, async () => {
|
return doAction(text, async () => {
|
||||||
const toSend = this.contracts.LiquidPledging.methods.addProject(params.name, params.url, params.account, params.parentProject, params.commitTime, params.plugin);
|
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);
|
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
|
||||||
console.dir("txHash: " + receipt.transactionHash);
|
console.dir("txHash: " + receipt.transactionHash);
|
||||||
|
@ -67,18 +70,21 @@ class Actions {
|
||||||
}
|
}
|
||||||
|
|
||||||
async listProjects() {
|
async listProjects() {
|
||||||
try {
|
return new Promise(async (resolve, reject) => {
|
||||||
const pledgeAdmins = await PledgeAdminUtils.getPledgeAdmins(this.contracts.LiquidPledging);
|
try {
|
||||||
PledgeAdminUtils.printTable(pledgeAdmins.filter(x => x.adminType === PledgeAdminUtils.constants.PROJECT));
|
const pledgeAdmins = await PledgeAdminUtils.getPledgeAdmins(this.contracts.LiquidPledging);
|
||||||
} catch(error){
|
PledgeAdminUtils.printTable(pledgeAdmins.filter(x => x.adminType === PledgeAdminUtils.constants.PROJECT));
|
||||||
console.log(error);
|
} catch(error){
|
||||||
console.log("Couldn't obtain the list of projects: ", error.message);
|
console.log(error);
|
||||||
}
|
console.log("Couldn't obtain the list of projects: ", error.message);
|
||||||
|
}
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
viewProject(params) {
|
async viewProject(params) {
|
||||||
let text = `await LiquidPledging.methods.getPledgeAdmin(\"${params.id}\").call()`
|
let text = `await LiquidPledging.methods.getPledgeAdmin(\"${params.id}\").call()`
|
||||||
doAction(text, async () => {
|
return doAction(text, async () => {
|
||||||
try {
|
try {
|
||||||
const pledgeAdmin = await this.contracts.LiquidPledging.methods.getPledgeAdmin(params.id).call();
|
const pledgeAdmin = await this.contracts.LiquidPledging.methods.getPledgeAdmin(params.id).call();
|
||||||
PledgeAdminUtils.printTable([pledgeAdmin].filter(x => x.adminType === PledgeAdminUtils.constants.PROJECT));
|
PledgeAdminUtils.printTable([pledgeAdmin].filter(x => x.adminType === PledgeAdminUtils.constants.PROJECT));
|
||||||
|
@ -89,18 +95,21 @@ class Actions {
|
||||||
}
|
}
|
||||||
|
|
||||||
async listFunders() {
|
async listFunders() {
|
||||||
try {
|
return new Promise(async (resolve, reject) => {
|
||||||
const pledgeAdmins = await PledgeAdminUtils.getPledgeAdmins(this.contracts.LiquidPledging);
|
try {
|
||||||
PledgeAdminUtils.printTable(pledgeAdmins.filter(x => x.adminType === PledgeAdminUtils.constants.FUNDER));
|
const pledgeAdmins = await PledgeAdminUtils.getPledgeAdmins(this.contracts.LiquidPledging);
|
||||||
} catch(error){
|
PledgeAdminUtils.printTable(pledgeAdmins.filter(x => x.adminType === PledgeAdminUtils.constants.FUNDER));
|
||||||
console.log(error);
|
} catch(error){
|
||||||
console.log("Couldn't obtain the list of funders: ", error.message);
|
console.log(error);
|
||||||
}
|
console.log("Couldn't obtain the list of funders: ", error.message);
|
||||||
|
}
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
addGiver(params) {
|
async addGiver(params) {
|
||||||
let text = `await LiquidPledging.methods.addGiver(\"${params.name}\", \"${params.url}\", ${params.commitTime}, \"${params.plugin}\").send({from: \"${web3.eth.defaultAccount}\", gas: 2000000})`
|
let text = `await LiquidPledging.methods.addGiver(\"${params.name}\", \"${params.url}\", ${params.commitTime}, \"${params.plugin}\").send({from: \"${web3.eth.defaultAccount}\", gas: 2000000})`
|
||||||
doAction(text, async () => {
|
return doAction(text, async () => {
|
||||||
const toSend = this.contracts.LiquidPledging.methods.addGiver(params.name, params.url, params.commitTime, params.plugin);
|
const toSend = this.contracts.LiquidPledging.methods.addGiver(params.name, params.url, params.commitTime, params.plugin);
|
||||||
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
|
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
|
||||||
console.dir("txHash: " + receipt.transactionHash);
|
console.dir("txHash: " + receipt.transactionHash);
|
||||||
|
@ -109,27 +118,27 @@ class Actions {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
mintToken(params) {
|
async mintToken(params) {
|
||||||
let text = `await StandardToken.methods.mint(\"${params.account}\", web3.utils.toWei(\"${params.amount}\", \"ether\")).send({gas: 2000000})`
|
let text = `await StandardToken.methods.mint(\"${params.account}\", web3.utils.toWei(\"${params.amount}\", \"ether\")).send({gas: 2000000})`
|
||||||
doAction(text, async () => {
|
return doAction(text, async () => {
|
||||||
const toSend = this.contracts.StandardToken.methods.mint(params.account, web3.utils.toWei(params.amount.toString(), "ether"));
|
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);
|
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
|
||||||
console.dir("txHash: " + receipt.transactionHash);
|
console.dir("txHash: " + receipt.transactionHash);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
approveToken(params) {
|
async approveToken(params) {
|
||||||
let text = `await StandardToken.methods.approve(\"${this.contracts.LiquidPledging.options.address}\", web3.utils.toWei(\"${params.amount}\", \"ether\")).send({gas: 2000000})`
|
let text = `await StandardToken.methods.approve(\"${this.contracts.LiquidPledging.options.address}\", web3.utils.toWei(\"${params.amount}\", \"ether\")).send({gas: 2000000})`
|
||||||
doAction(text, async () => {
|
return doAction(text, async () => {
|
||||||
const toSend = this.contracts.StandardToken.methods.approve(this.contracts.LiquidPledging.options.address, web3.utils.toWei(params.amount.toString(), "ether"));
|
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);
|
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
|
||||||
console.dir("txHash: " + receipt.transactionHash);
|
console.dir("txHash: " + receipt.transactionHash);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
donate(params) {
|
async donate(params) {
|
||||||
let text = `await LiquidPledging.methods.donate(${params.funderId}, ${params.projectId}, \"${this.contracts.LiquidPledging.options.address}\", web3.utils.toWei(\"${params.amount}\", \"ether\")).send({gas: 2000000});`
|
let text = `await LiquidPledging.methods.donate(${params.funderId}, ${params.projectId}, \"${this.contracts.LiquidPledging.options.address}\", web3.utils.toWei(\"${params.amount}\", \"ether\")).send({gas: 2000000});`
|
||||||
doAction(text, async () => {
|
return doAction(text, async () => {
|
||||||
const toSend = this.contracts.LiquidPledging.methods.donate(params.funderId, params.projectId, this.contracts.LiquidPledging.options.address, web3.utils.toWei(params.amount.toString(), "ether"));
|
const toSend = this.contracts.LiquidPledging.methods.donate(params.funderId, params.projectId, this.contracts.LiquidPledging.options.address, web3.utils.toWei(params.amount.toString(), "ether"));
|
||||||
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
|
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
|
||||||
console.dir("txHash: " + receipt.transactionHash);
|
console.dir("txHash: " + receipt.transactionHash);
|
||||||
|
|
91
src/cmd.js
91
src/cmd.js
|
@ -1,49 +1,58 @@
|
||||||
var inquirer = require('inquirer');
|
var inquirer = require('inquirer');
|
||||||
const menus = require('./menus.js');
|
const menus = require('./menus.js');
|
||||||
|
|
||||||
|
function mainMenu(actions) {
|
||||||
|
return new Promise(async (resolve, reject) => {
|
||||||
|
let action = (await menus.main()).action
|
||||||
|
let subAction
|
||||||
|
|
||||||
|
if (action === 'Projects') {
|
||||||
|
subAction = (await menus.projects()).action
|
||||||
|
|
||||||
|
if (subAction === 'List Projects') {
|
||||||
|
await actions.listProjects();
|
||||||
|
} if (subAction === 'Create Project') {
|
||||||
|
let params = (await menus.createProject(actions.web3().eth.defaultAccount))
|
||||||
|
await actions.addProject(params);
|
||||||
|
} if (subAction === 'View Project') {
|
||||||
|
let params = (await menus.viewProject())
|
||||||
|
await actions.viewProject(params);
|
||||||
|
} if (subAction === 'Donate to Project') {
|
||||||
|
let params = (await menus.donate())
|
||||||
|
await actions.donate(params);
|
||||||
|
}
|
||||||
|
} else if (action === 'Funders') {
|
||||||
|
subAction = (await menus.funders()).action
|
||||||
|
|
||||||
|
if (subAction === 'List Funders') {
|
||||||
|
await actions.listFunders();
|
||||||
|
} if (subAction === 'Create Funder') {
|
||||||
|
let params = (await menus.createFunder())
|
||||||
|
await actions.addGiver(params);
|
||||||
|
}
|
||||||
|
} else if (action === 'Tokens') {
|
||||||
|
subAction = (await menus.tokens()).action
|
||||||
|
|
||||||
|
if (subAction === 'Mint') {
|
||||||
|
let params = (await menus.mintToken())
|
||||||
|
await actions.mintToken(params);
|
||||||
|
} if (subAction === 'Approve') {
|
||||||
|
let params = (await menus.approveToken())
|
||||||
|
await actions.approveToken(params);
|
||||||
|
}
|
||||||
|
} else if (action === 'Exit') {
|
||||||
|
process.exit()
|
||||||
|
} else {
|
||||||
|
console.dir("unknown action: " + action)
|
||||||
|
}
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
async function app(actions) {
|
async function app(actions) {
|
||||||
console.dir("### Liquid Funding Console")
|
console.dir("### Liquid Funding Console")
|
||||||
let action = (await menus.main()).action
|
while (true) {
|
||||||
let subAction
|
await mainMenu(actions);
|
||||||
|
|
||||||
if (action === 'Projects') {
|
|
||||||
subAction = (await menus.projects()).action
|
|
||||||
|
|
||||||
if (subAction === 'List Projects') {
|
|
||||||
actions.listProjects();
|
|
||||||
} if (subAction === 'Create Project') {
|
|
||||||
let params = (await menus.createProject(actions.web3().eth.defaultAccount))
|
|
||||||
actions.addProject(params);
|
|
||||||
} if (subAction === 'View Project') {
|
|
||||||
let params = (await menus.viewProject())
|
|
||||||
actions.viewProject(params);
|
|
||||||
} if (subAction === 'Donate to Project') {
|
|
||||||
let params = (await menus.donate())
|
|
||||||
actions.donate(params);
|
|
||||||
}
|
|
||||||
} else if (action === 'Funders') {
|
|
||||||
subAction = (await menus.funders()).action
|
|
||||||
|
|
||||||
if (subAction === 'List Funders') {
|
|
||||||
actions.listFunders();
|
|
||||||
} if (subAction === 'Create Funder') {
|
|
||||||
let params = (await menus.createFunder())
|
|
||||||
actions.addGiver(params);
|
|
||||||
}
|
|
||||||
} else if (action === 'Tokens') {
|
|
||||||
subAction = (await menus.tokens()).action
|
|
||||||
|
|
||||||
if (subAction === 'Mint') {
|
|
||||||
let params = (await menus.mintToken())
|
|
||||||
actions.mintToken(params);
|
|
||||||
} if (subAction === 'Approve') {
|
|
||||||
let params = (await menus.approveToken())
|
|
||||||
actions.approveToken(params);
|
|
||||||
}
|
|
||||||
} else if (action === 'Exit') {
|
|
||||||
process.exit()
|
|
||||||
} else {
|
|
||||||
console.dir("unknown action: " + action)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
16
src/menus.js
16
src/menus.js
|
@ -33,8 +33,8 @@ const menus = {
|
||||||
'Create Project',
|
'Create Project',
|
||||||
'View Project',
|
'View Project',
|
||||||
'Donate to Project',
|
'Donate to Project',
|
||||||
// new inquirer.Separator(),
|
new inquirer.Separator(),
|
||||||
// 'Back',
|
'Back',
|
||||||
// new inquirer.Separator(),
|
// new inquirer.Separator(),
|
||||||
// 'Exit'
|
// 'Exit'
|
||||||
]
|
]
|
||||||
|
@ -52,8 +52,8 @@ const menus = {
|
||||||
choices: [
|
choices: [
|
||||||
'List Funders',
|
'List Funders',
|
||||||
'Create Funder',
|
'Create Funder',
|
||||||
// new inquirer.Separator(),
|
new inquirer.Separator(),
|
||||||
// 'Back',
|
'Back',
|
||||||
// new inquirer.Separator(),
|
// new inquirer.Separator(),
|
||||||
// 'Exit'
|
// 'Exit'
|
||||||
]
|
]
|
||||||
|
@ -71,8 +71,8 @@ const menus = {
|
||||||
choices: [
|
choices: [
|
||||||
'Mint',
|
'Mint',
|
||||||
'Approve',
|
'Approve',
|
||||||
// new inquirer.Separator(),
|
new inquirer.Separator(),
|
||||||
// 'Back',
|
'Back',
|
||||||
// new inquirer.Separator(),
|
// new inquirer.Separator(),
|
||||||
// 'Exit'
|
// 'Exit'
|
||||||
]
|
]
|
||||||
|
@ -89,8 +89,8 @@ const menus = {
|
||||||
message: 'Project> ' + id,
|
message: 'Project> ' + id,
|
||||||
choices: [
|
choices: [
|
||||||
'Donate/Pledge',
|
'Donate/Pledge',
|
||||||
// new inquirer.Separator(),
|
new inquirer.Separator(),
|
||||||
// 'Back',
|
'Back',
|
||||||
// new inquirer.Separator(),
|
// new inquirer.Separator(),
|
||||||
// 'Exit'
|
// 'Exit'
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in New Issue