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

Merge branch 'distillery' into 'master'

Distillery

See merge request !1
parents fd5b8c3e 2bfbe2c7
No related branches found
No related tags found
1 merge request!1Distillery
...@@ -2,5 +2,6 @@ ...@@ -2,5 +2,6 @@
*/status */status
cache cache
*/cache */cache
network/node network*/node
network/bootnode network*/bootnode
network*/contracts/*
#!/usr/bin/node #!/usr/bin/node
"use strict"
const Libbfa = require( process.env.BFAHOME + '/bin/libbfa.js'); const Libbfa = require( process.env.BFAHOME + '/bin/libbfa.js');
const rl = require('readline').createInterface( const rl = require('readline').createInterface(
{ input: process.stdin, output: process.stdout } { input: process.stdin, output: process.stdout }
...@@ -11,7 +13,7 @@ var notation = [ 6 ]; ...@@ -11,7 +13,7 @@ var notation = [ 6 ];
function init() function init()
{ {
notation.push( 10**notation[0] ); notation.push( Math.pow(10, notation[0]) );
switch ( notation[0] ) { switch ( notation[0] ) {
case 6: case 6:
notation.push( "Mwei" ); notation.push( "Mwei" );
...@@ -20,11 +22,13 @@ function init() ...@@ -20,11 +22,13 @@ function init()
notation.push( "Gwei" ); notation.push( "Gwei" );
break; break;
default: default:
notation = [ 6, 10**6, "Mwei" ]; notation = [ 6, Math.pow(10, 6), "Mwei" ];
} }
bfa = new Libbfa(); bfa = new Libbfa();
web3 = bfa.newweb3(); web3 = bfa.newweb3();
Distillery = bfa.contract( web3, 'Distillery' ); Distillery = bfa.contract( web3, 'Distillery' );
if ( undefined == Distillery )
fatal('Can not initialise Distillery contact.');
web3.eth.getBalance( Distillery.contractaddress ).then( web3.eth.getBalance( Distillery.contractaddress ).then(
function receivedOwnBalance(val) { function receivedOwnBalance(val) {
Distillery.contractbalance = val; Distillery.contractbalance = val;
...@@ -128,7 +132,7 @@ function editAccount( entry, pallet ) ...@@ -128,7 +132,7 @@ function editAccount( entry, pallet )
if ( entry == "x" ) if ( entry == "x" )
{ {
// trigger distribution // trigger distribution
Distillery.methods.distribute().send( {"from": bfa.account, "gas": 1000000 } ) Distillery.methods.distribute().send( {"from": bfa.account, "gas": 4000000 } )
.then( .then(
function distOK(x) { function distOK(x) {
console.log( console.log(
...@@ -155,7 +159,15 @@ function editAccount( entry, pallet ) ...@@ -155,7 +159,15 @@ function editAccount( entry, pallet )
return; return;
} }
else else
if ( entry == "" )
{
// Do nothing, basically just update the display
return;
}
else
{
bfa.fatal("I don't know what to do with \""+entry+"\"." ); bfa.fatal("I don't know what to do with \""+entry+"\"." );
}
rl.question( rl.question(
"Adjust the " "Adjust the "
+ notation[2] + notation[2]
......
// 20180724 Robert Martin-Legene <robert@nic.ar> // 20180724 Robert Martin-Legene <robert@nic.ar>
"use strict"
module.exports = class Libbfa module.exports = class Libbfa
{ {
constructor() { constructor() {
this.fs = require('fs'); this.fs = require('fs');
this.Web3 = require('web3'); this.Web3 = require('web3');
// //
// BFAHOME // BFAHOME
if ( undefined == process.env.BFAHOME ) if ( undefined == process.env.BFAHOME )
fatal( "$BFAHOME not set. Did you source bfa/bin/env ?" ); fatal( "$BFAHOME not set. Did you source bfa/bin/env ?" );
// BFANETWORKID // BFANETWORKID
this.home = process.env.BFAHOME;
if ( undefined == process.env.BFANETWORKID ) if ( undefined == process.env.BFANETWORKID )
process.env.BFANETWORKID= 47525974938; process.env.BFANETWORKID = 47525974938;
this.networkid = process.env.BFANETWORKID;
// BFANETWORKDIR // BFANETWORKDIR
if ( undefined == process.env.BFANETWORKDIR ) if ( undefined == process.env.BFANETWORKDIR )
process.env.BFANETWORKDIR = process.env.BFAHOME + '/network'; process.env.BFANETWORKDIR = process.env.BFAHOME + '/network';
this.networkdir = process.env.BFANETWORKDIR;
// BFANODEDIR // BFANODEDIR
if ( undefined == process.env.BFANODEDIR ) if ( undefined == process.env.BFANODEDIR )
process.env.BFANODEDIR = this.networkdir + "/node"; process.env.BFANODEDIR = this.networkdir + "/node";
this.nodedir = process.env.BFANODEDIR;
// ACCOUNT // ACCOUNT
if ( undefined == process.env.BFAACCOUNT ) if ( undefined == process.env.BFAACCOUNT )
{ {
var files = new Array(); var files = new Array();
this.fs.readdirSync( process.env.BFANODEDIR + '/keystore' ).forEach( function(filename) { if ( this.fs.existsSync( process.env.BFANODEDIR + '/keystore' ) )
if ( filename.includes('--') ) {
files.push( filename ); this.fs.readdirSync( process.env.BFANODEDIR + '/keystore' ).forEach( function(filename) {
}); if ( filename.includes('--') )
files.push( filename );
});
}
// found none? // found none?
if ( files.length == 0 ) if ( files.length > 0 )
fatal( "Found no accounts in your keystore." ); {
files.sort(); files.sort();
process.env.BFAACCOUNT = '0x' + files[0].replace( /^.*--/, '' ); process.env.BFAACCOUNT = '0x' + files[0].replace( /^.*--/, '' );
}
} }
// //
this.home = process.env.BFAHOME; this.netport = Number.parseInt( this.setfromfile( this.nodedir+'/netport', 30303 ));
this.networkid = process.env.BFANETWORKID; this.rpcport = Number.parseInt( this.setfromfile( this.nodedir+'/rpcport', 8545 ));
this.networkdir = process.env.BFANETWORKDIR; this.account = process.env.BFAACCOUNT;
this.nodedir = process.env.BFANODEDIR;
this.netport = Number.parseInt( this.setfromfile( this.nodedir+'/netport', 30303 );
this.rpcport = Number.parseInt( this.setfromfile( this.nodedir+'/rpcport', 8545 );
this.account = process.env.BFAACCOUNT;
} }
contract(w3, name) contract(w3, name)
{ {
this._networkdir(); var contractdir = [ this.networkdir, 'contracts', name ].join('/');
var contractdir = [ this.networkdir, 'contracts', name ].join('/'); if ( ! this.fs.existsSync( contractdir ) )
var contractaddress = this.fs.realpathSync( contractdir ).replace(/^.*\//, ''); return;
var contractaddress = this.fs.realpathSync( contractdir ).replace(/^.*\//, '');
if ( undefined == contractaddress ) if ( undefined == contractaddress )
return; return;
var abi = JSON.parse( var abistr = this.fs.readFileSync( contractdir + '/abi' ).toString();
this.fs.readFileSync( contractdir + '/abi' ).toString() if ( undefined == abistr )
); return;
var abi = JSON.parse( abistr );
if ( undefined == abi ) if ( undefined == abi )
return; return;
var c = new w3.eth.Contract( abi, contractaddress ); var c = new w3.eth.Contract( abi, contractaddress );
c.abi = abi; c.abi = abi;
c.contractaddress = contractaddress; c.contractaddress = contractaddress;
return c; return c;
} }
...@@ -68,9 +76,8 @@ module.exports = class Libbfa ...@@ -68,9 +76,8 @@ module.exports = class Libbfa
newweb3() newweb3()
{ {
this._nodedir(); var provider = 'http://127.0.0.1:' + this.rpcport;
var provider = 'http://127.0.0.1:' + this.rpcport; var w3 = new this.Web3( provider );
var w3 = new this.Web3( provider );
w3.eth.extend({ w3.eth.extend({
//property: 'bfaclique', //property: 'bfaclique',
methods: [{ methods: [{
...@@ -79,6 +86,9 @@ module.exports = class Libbfa ...@@ -79,6 +86,9 @@ module.exports = class Libbfa
params: 0 params: 0
}] }]
}); });
if ( undefined != process.env.BFAACCOUNT ) {
w3.eth.defaultAccount = this.account;
}
return w3; return w3;
} }
isNumeric(n) { isNumeric(n) {
...@@ -91,7 +101,7 @@ module.exports = class Libbfa ...@@ -91,7 +101,7 @@ module.exports = class Libbfa
setfromfile( filename, defval ) setfromfile( filename, defval )
{ {
if ( this.fs.statSync( filename ).isFile() ) if ( this.fs.existsSync( filename ) )
return this.fs.readFileSync( filename ); return this.fs.readFileSync( filename );
return defval; return defval;
} }
......
...@@ -13,16 +13,16 @@ contract Sealers { ...@@ -13,16 +13,16 @@ contract Sealers {
struct Proposal { struct Proposal {
address victim; // Whom are we voting about. address victim; // Whom are we voting about.
uint votestart; // In which block did this vote begin? uint votestart; // In which block did this vote begin?
bool promotion; // true=promotion, false=demotion bool promotion; // true=promotion, false=demotion
address[] voters; // List of voters. address[] voters; // List of voters.
} }
address[] public sealers; address[] private sealers;
Proposal[] public sealerproposals; Proposal[] private sealerproposals;
event voteCast( address voter, address victim, bool promotionOrDemotion ); event voteCast( address voter, address victim, bool promotionOrDemotion );
event adminChange( address admin, bool promotionOrDemotion ); event adminChange( address admin, bool promotionOrDemotion );
constructor() public constructor() public
{ {
sealers.push( msg.sender ); sealers.push( msg.sender );
} }
...@@ -47,11 +47,6 @@ contract Sealers { ...@@ -47,11 +47,6 @@ contract Sealers {
return ( _findAddressInList( sealers, subject ) > 0 ); return ( _findAddressInList( sealers, subject ) > 0 );
} }
function requireSealer( address subject ) public view
{
require( isSealer(subject), "Not sealer" );
}
// Returns an index to the position of the needle inside haystack. // Returns an index to the position of the needle inside haystack.
// Beware that: // Beware that:
// 0 = not found. // 0 = not found.
...@@ -197,12 +192,13 @@ contract Sealers { ...@@ -197,12 +192,13 @@ contract Sealers {
// Is already Sealer and want to promote him? // Is already Sealer and want to promote him?
// Can't promote someone who is already a sealer. // Can't promote someone who is already a sealer.
if ( isSealer(victim) && promotion ) bool victimSealer = isSealer( victim );
if ( victimSealer && promotion )
return false; return false;
// Is not Sealer and want to demote him? // Is not Sealer and want to demote him?
// Can't demote someone who is not a sealer. // Can't demote someone who is not a sealer.
if ( !isSealer(victim) && !promotion ) if ( !victimSealer && !promotion )
return false; return false;
// See if the voter is already in the list of voters for this [victim,promotion] tuple // See if the voter is already in the list of voters for this [victim,promotion] tuple
......
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