Skip to content
Snippets Groups Projects
Commit afb65879 authored by Robert Martin-Legene's avatar Robert Martin-Legene
Browse files

Nicer objects in MasterDistiller

parent 2f1010e2
No related branches found
No related tags found
No related merge requests found
......@@ -2,7 +2,7 @@
"use strict"
const BigInteger = require('big-integer');
const BigNumber = require('bignumber.js');
const Libbfa = require( process.env.BFAHOME + '/bin/libbfa.js');
const rl = require('readline').createInterface(
{ input: process.stdin, output: process.stdout }
......@@ -10,55 +10,32 @@ const rl = require('readline').createInterface(
var web3;
var Distillery;
var bfa;
var notation = [ 15 ];
var notation = { "potency": 15 };
function init()
{
notation.push( Math.pow(10, notation[0]) );
switch ( notation[0] ) {
case 6:
notation.push( "Mwei" );
break;
case 9:
notation.push( "Gwei" );
break;
case 12:
notation.push( "micro" );
break;
case 15:
notation.push( "finney" );
break;
case 18:
notation.push( "ether" );
break;
case 21:
notation.push( "kether" );
break;
case 24:
notation.push( "grand" );
break;
case 27:
notation.push( "mether" );
break;
case 30:
notation.push( "gether" );
break;
case 33:
notation.push( "tether" );
break;
default:
notation = [ 15, Math.pow(10, 15), "finney" ];
}
var table = [
6, 'Mwei',
9, 'Gwei',
12, 'micro',
15, 'finney',
18, 'ether',
21, 'kether',
24, 'grand',
27, 'mether',
30, 'gether',
33, 'tether'
];
for (var i = 0; table[i]; i+=2)
if ( table[i] == notation.potency )
notation.name = table[i+1]
if ( undefined == notation.name )
notation = { 'potency': 15, 'name': 'finney' };
notation.num = BigNumber( 10 ).pow( notation.potency );
bfa = new Libbfa();
web3 = bfa.newweb3();
Distillery = bfa.contract( web3, 'Distillery' );
web3.eth.getBalance( Distillery.contractaddress ).then(
function receivedOwnBalance(val) {
Distillery.contractbalance = val;
getlist();
},
function err(x){ bfa.fatal("Can't do that: "+x);process.exit(1); }
);
requestBalances();
}
function palletSort(a,b)
......@@ -72,8 +49,8 @@ function palletSort(a,b)
}
if ( a == undefined )
return 1;
var strA = a[0].toLowerCase();
var strB = b[0].toLowerCase();
var strA = a.addr.toLowerCase();
var strB = b.addr.toLowerCase();
if ( strA < strB )
return -1;
if ( strA > strB )
......@@ -81,44 +58,23 @@ function palletSort(a,b)
return 0;
}
function requestBalances( count )
async function requestBalances()
{
var pallet = new Array;
var proms = new Array;
var distbal = await web3.eth.getBalance(Distillery.contractaddress);
var count = await Distillery.methods.numberOfBeneficiaries().call();
var pallet = new Array;
var i;
Distillery.contractbalance = new BigNumber( distbal );
// Fetch addresses from the list in the contract.
for ( i=0; i<count; i++ )
{
proms.push(
Distillery.methods.atPosition(i).call( {} )
.then(
function(res) { pallet.push(res); },
function(err) { bfa.fatal("Fetching position data failed: "+err) }
)
);
var addressandsetting = await Distillery.methods.atPosition(i).call();
var addr = addressandsetting[0];
var setting = addressandsetting[1];
var bal = await web3.eth.getBalance( addr );
pallet.push( { "addr": addr, "setting": new BigNumber(setting), "balance": new BigNumber(bal) } );
}
Promise.all( proms ).then(
function(x) {
// The Well has now been filled out
// so we will ask for the balances of the found accounts
var p2 = new Array();
for ( i=0; i<count; i++ )
{
var cb = setBal.bind(null,pallet,i);
p2.push( web3.eth.getBalance( pallet[i][0] ).then(cb) );
}
Promise.all( p2 ).then(
function allbalances(a) { displayBalances(pallet) },
function(err) { bfa.fatal("Getting balances failed: "+err) }
);
},
function(err) { bfa.fatal("Getting account list failed: "+err) }
);
}
function setBal( arr, idx, val )
{
arr[idx][2]=val;
displayBalances(pallet);
}
function editAccount( entry, pallet )
......@@ -134,7 +90,7 @@ function editAccount( entry, pallet )
var n = pallet.length;
while ( i < n )
{
if (String(pallet[i][0]).toLowerCase() == String(entry).toLowerCase() )
if (String(pallet[i].addr).toLowerCase() == String(entry).toLowerCase() )
entry = i;
i++;
}
......@@ -148,27 +104,30 @@ function editAccount( entry, pallet )
else
if ( bfa.isNumeric(entry) && entry < pallet.length )
{
acct = pallet[entry][0];
value = pallet[entry][1];
acct = pallet[entry].addr;
value = pallet[entry].setting;
}
else
if ( entry == "x" )
{
var rcpt;
// trigger distribution
Distillery.methods.distribute().send( {"from": bfa.account, "gas": 4000000 } )
.then(
function distOK(x) {
console.log(
"Distribute returned succesfully in block# "
+ x.blockNumber
+ " using "
+ x.gasUsed
+ " gas."
);
getlist();
},
function distFail(x) {
bfa.fatal( "Distribute returned errors: " + x );
Distillery.methods.distribute().send( {"from": bfa.account, "gas": 4000000, gasPrice: 1000000000 } )
.on( 'error', (x) => { bfa.fatal( "Distribute returned errors: " + x ) } )
.on( 'confirmation', (n,x) =>
{
if ( undefined == rcpt )
{
rcpt = x;
console.log(
"Distribute returned succesfully in block# "
+ rcpt.blockNumber
+ " using "
+ rcpt.gasUsed
+ " gas."
);
requestBalances();
}
}
);
return;
......@@ -185,7 +144,7 @@ function editAccount( entry, pallet )
}
rl.question(
"Adjust the "
+ notation[2]
+ notation.name
+ " fill value of "
+ acct
+ " (setting to 0 is the same as deleting)\n"
......@@ -193,23 +152,28 @@ function editAccount( entry, pallet )
(answer) => {
if ( bfa.isNumeric(answer) )
{
var bi = BigInteger( answer ).multiply( notation[1] );
var bi = BigNumber( answer ).multipliedBy( notation.num );
console.log("Sending update to the SC...");
var rcpt;
Distillery.methods.setEtherAllowance(acct,web3.utils.toHex(bi))
.send( {"from": bfa.account } )
.then(
function(a){
console.log("Update accepted.")
getlist();
},
function(b){
.send( {"from": bfa.account, gasPrice: 1000000000, gas: 100000 } )
.on( 'error', (err) => {
bfa.fatal(
"\nMaybe you are not authorized:\n"
+b
+err
+"\n\n\nI think you should leave now.\n"
);
}
)
.on( 'confirmation', (n,x) => {
if ( undefined == rcpt )
{
rcpt = x;
console.log("Update accepted.")
requestBalances();
}
}
);
}
else
bfa.fatal( "I have no idea what to do with \""+answer+"\"." );
......@@ -227,15 +191,15 @@ function displayBalances( pallet )
"The contract's account ("
+ Distillery.contractaddress
+ ") has "
+ Math.floor(Distillery.contractbalance/notation[1]).toFixed(0)
+ Distillery.contractbalance.div( notation.num ).toFixed()
+ " "
+ notation[2]
+ notation.name
+ ".\n"
);
var longest = 1;
for ( i=0; i<n; i++ )
{
var len = (pallet[i][1]/notation[1]).toFixed(notation[0]).length;
var len = pallet[i].setting.div(notation.num).toFixed(notation.potency).length;
if ( len > longest )
longest = len;
}
......@@ -246,19 +210,19 @@ function displayBalances( pallet )
console.log( i+": <undef>" );
else
{
var numstr = (pallet[i][1]/notation[1]).toFixed(notation[0]);
var numstr = pallet[i].setting.div(notation.num).toFixed(notation.potency);
while ( numstr.length < longest )
numstr = " "+numstr;
console.log(
i
+ ": "
+ pallet[i][0]
+ pallet[i].addr
+ " fills to "
+ numstr
+ " "
+ notation[2]
+ notation.name
+ " (has "
+ Number(pallet[i][2]/notation[1]).toFixed(notation[0])
+ pallet[i].balance.div(notation.num).toFixed(notation.potency)
+ ")."
);
}
......@@ -278,14 +242,4 @@ function displayBalances( pallet )
)
}
function getlist()
{
Distillery.methods.numberOfBeneficiaries()
.call()
.then(
requestBalances,
function beneficiaryFail(x){bfa.fatal(x)}
);
}
init();
......@@ -88,9 +88,14 @@
}
},
"big-integer": {
"version": "1.6.43",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.43.tgz",
"integrity": "sha512-9dULc9jsKmXl0Aeunug8wbF+58n+hQoFjqClN7WeZwGLh0XJUWyJJ9Ee+Ep+Ql/J9fRsTVaeThp8MhiCCrY0Jg=="
"version": "1.6.44",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.44.tgz",
"integrity": "sha512-7MzElZPTyJ2fNvBkPxtFQ2fWIkVmuzw41+BZHSzpEq3ymB2MfeKp1+yXl/tS75xCx+WnyV+yb0kp+K1C3UNwmQ=="
},
"bignumber.js": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
"integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
},
"bindings": {
"version": "1.5.0",
......
......@@ -3,7 +3,8 @@
"version": "1.0.0",
"description": "Blockchain Federal Argentina",
"dependencies": {
"big-integer": "^1.6.43",
"big-integer": "^1.6.44",
"bignumber.js": "^9.0.0",
"request": "^2.88.0",
"require": "^2.4.20",
"web3": "^1.0.0-beta.55",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment