Improve helper scripts #41

Merged
bumi merged 7 commits from feature/improve-scripts into master 2018-04-29 07:43:23 +00:00
Showing only changes of commit bd2af6ed72 - Show all commits

View File

@ -7,30 +7,43 @@ const Kredits = require('../lib/kredits');
module.exports = function(callback) {
const Registry = artifacts.require('./Registry.sol');
Registry.deployed().then(async (registry) => {
let contractName = await promptly.prompt('Contract Name: ');
let method = await promptly.prompt('Function: ');
let argumentInput = await promptly.prompt('Arguments (comma separated): ', { default: '' });
let args = [];
if (argumentInput !== '') {
args = argumentInput.split(',').map(a => a.trim());
}
const networkId = parseInt(web3.version.network);
const provider = new ethers.providers.Web3Provider(
web3.currentProvider, { chainId: networkId }
);
const kredits = await Kredits.setup(provider, provider.getSigner());
const contract = kredits[contractName].contract;
console.log(`Using ${contractName} at ${contract.address}`);
console.log(`Calling ${method} with ${JSON.stringify(args)}`);
let contractName = await promptly.prompt('Contract Name: ');
const contractWrapper = kredits[contractName];
if (!contract[method]) {
let method;
method = await promptly.prompt('Function (? for available functions): ');
while (method === '?') {
console.log(`Contract functions: ${JSON.stringify(Object.keys(contractWrapper.functions))}`);
console.log(`\nWrapper functions: ${JSON.stringify(Object.getOwnPropertyNames(Object.getPrototypeOf(contractWrapper)))}`);
console.log("\n");
method = await promptly.prompt('Function: ');
}
if (!contractWrapper[method] && !contractWrapper.functions[method]) {
fsmanuel commented 2018-04-25 21:31:18 +00:00 (Migrated from github.com)
Review

So good that we went with upper case contract names and the properties instead of the functions!
But it will breaks on Contributor, wouldn’t it? I think we should rename that contract next and align the module code to it. Will make the future much brighter!

So good that we went with upper case contract names and the properties instead of the functions! But it will breaks on `Contributor`, wouldn’t it? I think we should rename that contract next and align the module code to it. Will make the future much brighter!
bumi commented 2018-04-26 00:34:37 +00:00 (Migrated from github.com)
Review

yes, agree on renaming it! and maybe adding an alias for Contributor <=> Contributors

yes, agree on renaming it! and maybe adding an alias for Contributor <=> Contributors
fsmanuel commented 2018-04-26 10:43:41 +00:00 (Migrated from github.com)
Review

I opened #44 for the alias

I opened #44 for the alias
callback(new Error(`Method ${method} is not defined on ${contractName}`));
return;
}
let argumentInput = await promptly.prompt('Arguments (comma separated): ', { default: '' });
let args = [];
fsmanuel commented 2018-04-25 21:32:13 +00:00 (Migrated from github.com)
Review

👀 nice!

👀 nice!
if (argumentInput !== '') {
args = argumentInput.split(',').map(a => a.trim());
}
console.log(`Using ${contractName} at ${contractWrapper.contract.address}`);
console.log(`Calling ${method} with ${JSON.stringify(args)}`);
contract[method](...args).then((result) => {
let func;
if (contractWrapper[method]) {
func = contractWrapper[method];
} else {
func = contractWrapper.functions[method];
}
func.apply(contractWrapper, args).then((result) => {
console.log("\nResult:");
fsmanuel commented 2018-04-25 21:38:20 +00:00 (Migrated from github.com)
Review

Haha master of es6. I think you don’t need the if and the initial args
let args = argumentInput.split(',') should return an empty array.

Haha master of es6. I think you don’t need the if and the initial `args` `let args = argumentInput.split(',')` should return an empty array.
bumi commented 2018-04-26 00:29:37 +00:00 (Migrated from github.com)
Review

oh yeah, true.

oh yeah, true.
bumi commented 2018-04-26 00:33:31 +00:00 (Migrated from github.com)
Review

ah noo. it returns an array with an empty string, that was the reason for the if. or what am I missing?

ah noo. it returns an array with an empty string, that was the reason for the if. or what am I missing?
fsmanuel commented 2018-04-26 10:35:51 +00:00 (Migrated from github.com)
Review

Ah ok.

Ah ok.
raucao commented 2018-04-26 10:40:37 +00:00 (Migrated from github.com)
Review

But if input is already not an empty string, wouldn't it return an array with one argument string?

But if input is already not an empty string, wouldn't it return an array with one argument string?
bumi commented 2018-04-26 11:22:18 +00:00 (Migrated from github.com)
Review

https://jsbin.com/qarikabane/edit?js,console

it would return [""] but if no arguments are given I need [].

https://jsbin.com/qarikabane/edit?js,console it would return `[""]` but if no arguments are given I need `[]`.
raucao commented 2018-04-26 11:36:42 +00:00 (Migrated from github.com)
Review

I was actually asking about the trim inside, but no idea why. It's for removing whitespace, so that's still needed.

I was actually asking about the `trim` inside, but no idea why. It's for removing whitespace, so that's still needed.
bumi commented 2018-04-26 21:19:06 +00:00 (Migrated from github.com)
Review

yep, trim() for potential whitespace as for example in "first, second"

yep, trim() for potential whitespace as for example in `"first, second"`
console.log(result);
@ -38,7 +51,7 @@ module.exports = function(callback) {
console.log(`defined variables: result, ${contractName}, kredis`);
let r = REPL.start();
r.context.result = result;
r.context[contractName] = contract;
r.context[contractName] = contractWrapper;
r.context.kredits = kredits;
r.on('exit', () => {