<!doctype> <html> <head> <script type="text/javascript" src="../dist/web3.js"></script> <script type="text/javascript"> var web3 = require('web3'); web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); var source = "" + "contract Contract { " + " event Incremented(bool indexed odd, uint x); " + " function Contract() { " + " x = 70; " + " } " + " function inc() { " + " ++x; " + " Incremented(x % 2 == 1, x); " + " } " + " uint x; " + "}"; var code = web3.eth.compile.solidity(source).code; /*var code = "5b60456000600050819055505b608c8060196000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063371303c014602e57005b6034603a565b60006000f35b6000600081815054600101919050819055506001600260006000505406147f6e61ef44ac2747ff8b84d353a908eb8bd5c3fb118334d57698c5cfc7041196ad600060006000505481526020016000a25b56";*/ var desc = [{ "constant" : false, "inputs" : [], "name" : "inc", "outputs" : [], "type" : "function" }, { "anonymous" : false, "inputs" : [{ "indexed" : true, "name" : "odd", "type" : "bool" }, { "indexed" : false, "name" : "x", "type" : "uint256" }], "name" : "Incremented", "type" : "event" }]; var address; var contract; var update = function (err, x) { document.getElementById('result').textContent = JSON.stringify(x, null, 2); }; var createContract = function () { // let's assume that we have a private key to coinbase ;) web3.eth.defaultAccount = web3.eth.coinbase; var watch = web3.eth.filter('latest'); contract = web3.eth.contract(desc).new({data: code}); console.log('address: ' + contract.address); document.getElementById('create').style.visibility = 'hidden'; document.getElementById('status').innerText = "transaction sent, waiting for confirmation"; watch.watch(function (err, hash) { var block = web3.eth.getBlock(hash, true); var contractMined = block.transactions.reduce(function (mined, th) { // TODO: compiled code do not have 0x prefix return mined || (th.from === web3.eth.defaultAccount && th.input.indexOf(code) !== -1); }, false); if (contractMined) { document.getElementById('status').innerText = 'Mined!'; document.getElementById('call').style.visibility = 'visible'; } }); contract.Incremented({odd: true}).watch(update); }; var counter = 0; var callContract = function () { counter++; var all = 70 + counter; document.getElementById('count').innerText = 'Transaction sent ' + counter + ' times. ' + 'Expected x value is: ' + (all - (all % 2 ? 0 : 1)) + ' ' + 'Waiting for the blocks to be mined...'; contract.inc(); }; </script> </head> <body> <div id="status"></div> <div> <button id="create" type="button" onClick="createContract();">create contract</button> </div> <div> <button id="call" style="visibility: hidden;" type="button" onClick="callContract();">test1</button> </div> <div id='count'></div> <div id="result"> </div> </body> </html>