diff --git a/ballot/abi.js b/ballot/abi.js index 9a154d291fad3381ee3df577c861cdb96fd3d212..913f54e513c749996fae3ef2f1ca3c6ae38ca561 100644 --- a/ballot/abi.js +++ b/ballot/abi.js @@ -292,55 +292,62 @@ var abiBallot = [ // $ solc --abi src/Ballot.sol | tail -1 | jq var abiNew = [ - { - "constant": false, - "inputs": [ - { - "name": "title", - "type": "string" - }, - { - "name": "voteStarts", - "type": "uint256" - }, - { - "name": "voteBefore", - "type": "uint256" - }, - { - "name": "percentOfRegisteredVotersReqToBeValid", - "type": "uint256" - }, - { - "name": "percentOfVotesCastToWin", - "type": "uint256" - }, - { - "name": "countNonvotesAsBlanks", - "type": "bool" - }, - { - "name": "maxVotesPerVoter", - "type": "uint256" - }, - { - "name": "maxVotesPerProposal", - "type": "uint256" - }, - { - "name": "proposalNames", - "type": "bytes32[]" - } - ], - "name": "newBallot", - "outputs": [ - { - "name": "newaddr", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } + { + "constant": false, + "inputs": [ + { + "name": "title", + "type": "string" + }, + { + "name": "voteStarts", + "type": "uint256" + }, + { + "name": "voteBefore", + "type": "uint256" + }, + { + "name": "percentOfRegisteredVotersReqToBeValid", + "type": "uint256" + }, + { + "name": "percentOfVotesCastToWin", + "type": "uint256" + }, + { + "name": "countNonvotesAsBlanks", + "type": "bool" + }, + { + "name": "maxVotesPerVoter", + "type": "uint256" + }, + { + "name": "maxVotesPerProposal", + "type": "uint256" + }, + { + "name": "proposalNames", + "type": "bytes32[]" + } + ], + "name": "newBallot", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "contrato", + "type": "address" + } + ], + "name": "contratocreado", + "type": "event" + } ]; diff --git a/ballot/votar1.js b/ballot/votar1.js index 8c12afaefd22d1d7955f7c846d43240597a76c02..ba4183681d8e605017f306a5fe91ecf6aa02326e 100644 --- a/ballot/votar1.js +++ b/ballot/votar1.js @@ -2,8 +2,10 @@ var hasplugin = 0; var mainaddr = { '5445': '0xe5bf7c3e8aa529e42fbd99428137b68db75d85f9', - '47525974938': '0xe3e08934b6fa0b68972c08e0f545cee31ed039c6' + '47525974938': '0xe3e08934b6fa0b68972c08e0f545cee31ed039c6', + '5777': '0xC4d36AaA89b75357bd68f2E526f27B277Bd43c23' }; +var event; window.addEventListener('load', init1 ); @@ -23,6 +25,14 @@ async function init2( err, web3 ) hasplugin = 1; window.web3 = web3; console.log( 'window.web3.version.api is ' + window.web3.version.api ); + + web3.eth.getAccounts(function (error, accounts) { + if (error) return console.error(error) + console.log("Accounts: " + accounts); + window.web3.eth.defaultAccount = accounts[0]; + + }); + status_start(); show_section('startdiv'); update_create_new_ballot(); @@ -64,8 +74,12 @@ async function nueva_votacion() // We get this from status.js var netid = netinfo['number']; // - if ( mainaddr[netid] == undefined ) + if ( mainaddr[netid] == undefined ){ + console.log(netinfo); + alert("netid undefined"); return; + } + var f = document.forms['form_create_new_ballot']; var arguments = []; // @@ -97,7 +111,7 @@ async function nueva_votacion() var p; for ( var i = 1; p = f['proposal'+i]; i++ ) if ( p.value != '' ) - proposals.push( p.value ); + proposals.push( web3.fromAscii(p.value) ); popup( 'Trying to access your account.' ); setTimeout( nueva_votacion2, 1000, netid, arguments, proposals ); } @@ -113,13 +127,23 @@ async function nueva_votacion2( netid, arguments, proposals ) if ( api_version() == 0 ) { console.log( contract ); + console.log(arguments,proposals); try { - contract.newBallot( + //var thatnewcontractaddress = + event = contract.contratocreado(); + event.watch(function(error, result){ + if (!error){ + console.log(result); + popup(result.args.contrato); // the contract address + } + }); + contract.newBallot.sendTransaction( arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], proposals, { gas: 2111000 }, contract_created ); + //console.log( thatnewcontractaddress); } catch (error) { @@ -128,19 +152,19 @@ async function nueva_votacion2( netid, arguments, proposals ) } } } - async function contract_created(err,rcpt) { popup( err ); // the actual error, or undefined - console.log( rcpt ); + //console.log(web3.eth.getTransactionReceipt(rcpt)); + web3.eth.getTransactionReceipt(rcpt); if ( !rcpt ) return; if( !rcpt.address ) // The hash of the transaction, which deploys the contract - console.log( rcpt.transactionHash ); + console.log( "Transaction hash: ", rcpt.transactionHash ); // check address on the second call (contract deployed) else - console.log( rcpt.address ); // the contract address + console.log( "Transaction address: ", rcpt.address ); // the contract address //ver_votacion( newaddr ); } @@ -175,14 +199,17 @@ async function ver_votacion2( addr, code ) } var keccak3 = window.web3.sha3( code, {'encoding':'hex'} ); console.log( keccak3 ); - if ( keccak3 != '0xabcd' ) + //if ( keccak3 != '0xabcd' ) + if ( keccak3 != '0xca753fe72f9141d87c626c29a766381187dbf6fd350319cd6ba8c62b00040154' ) { popup( 'There is no recognised Ballot contract at that address.' ); return; } var contract = setup_existing_contract( abiBallot, addr ); - if ( !contract ) + if ( !contract ){ return; + } + //var detailpromises; // make sure we have just a single verdiv //var verdiv; diff --git a/solidity/Ballot.sol b/solidity/Ballot.sol index 4323d3be3e6bffb19f40a094376e03b313b87ab8..f6f83674c1304a5f7d3b2c7b3534c0c6d8a1f562 100644 --- a/solidity/Ballot.sol +++ b/solidity/Ballot.sol @@ -2,7 +2,7 @@ // vim:syntax:filetype=javascript:ai:sm // vim:expandtab:backspace=indent,eol,start:softtabstop=4 -pragma solidity >= 0.5.2; +pragma solidity >= 0.5.1; /// @title A single ballot contract which allows certain /// @title accounts to vote (one single vote). @@ -176,6 +176,7 @@ contract Ballot contract NewBallot { + event contratocreado(address contrato); function newBallot( string memory title, uint voteStarts, @@ -188,11 +189,10 @@ contract NewBallot bytes32[] memory proposalNames ) public - returns (Ballot newaddr) { // Create a new ballot contract. Returns the new contract's address. // tx.origin will be ballotChairman ("owner") of that contract. - return new Ballot( + address ballot = address(new Ballot( title, voteStarts, voteBefore, @@ -202,6 +202,7 @@ contract NewBallot maxVotesPerVoter, maxVotesPerProposal, proposalNames - ); + )); + emit contratocreado(ballot); } }