web3.js/example/event_inc.html

90 lines
3.0 KiB
HTML
Raw Normal View History

2015-02-02 02:52:56 -08:00
<!doctype>
<html>
<head>
2015-04-06 19:39:47 -07:00
<script type="text/javascript" src="../dist/web3.js"></script>
2015-02-02 02:52:56 -08:00
<script type="text/javascript">
2015-04-06 19:39:47 -07:00
var web3 = require('web3');
2015-04-20 04:52:40 -07:00
web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'));
2015-02-02 02:52:56 -08:00
2015-05-13 03:05:38 -07:00
var source = "" +
"contract Contract { " +
" event Incremented(bool indexed odd, uint x); " +
" function Contract() { " +
2015-05-13 11:05:23 -07:00
" x = 70; " +
2015-05-13 03:05:38 -07:00
" } " +
" function inc() { " +
" ++x; " +
" Incremented(x % 2 == 1, x); " +
" } " +
" uint x; " +
"}";
2015-02-02 02:52:56 -08:00
2015-05-21 03:02:15 -07:00
var compiled = web3.eth.compile.solidity(source);
var code = compiled.Contract.code;
var abi = compiled.Contract.info.abiDefinition;
2015-02-02 02:52:56 -08:00
var address;
var contract;
2015-04-20 04:52:40 -07:00
var update = function (err, x) {
2015-04-28 08:01:37 -07:00
document.getElementById('result').textContent = JSON.stringify(x, null, 2);
2015-02-02 02:52:56 -08:00
};
var createContract = function () {
2015-04-20 04:52:40 -07:00
// let's assume that we have a private key to coinbase ;)
web3.eth.defaultAccount = web3.eth.coinbase;
2015-05-13 11:05:23 -07:00
var watch = web3.eth.filter('latest');
2015-05-21 03:02:15 -07:00
contract = web3.eth.contract(abi).new({data: code});
2015-05-13 11:05:23 -07:00
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';
}
});
2015-04-20 04:52:40 -07:00
contract.Incremented({odd: true}).watch(update);
2015-02-02 02:52:56 -08:00
};
2015-05-13 11:05:23 -07:00
var counter = 0;
2015-02-02 02:52:56 -08:00
var callContract = function () {
2015-05-13 11:05:23 -07:00
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();
2015-02-02 02:52:56 -08:00
};
</script>
</head>
<body>
2015-05-13 11:05:23 -07:00
<div id="status"></div>
2015-02-02 02:52:56 -08:00
<div>
2015-05-13 11:05:23 -07:00
<button id="create" type="button" onClick="createContract();">create contract</button>
2015-02-02 02:52:56 -08:00
</div>
<div>
2015-05-13 11:05:23 -07:00
<button id="call" style="visibility: hidden;" type="button" onClick="callContract();">test1</button>
2015-02-02 02:52:56 -08:00
</div>
2015-05-13 11:05:23 -07:00
<div id='count'></div>
2015-02-02 02:52:56 -08:00
<div id="result">
</div>
</body>
</html>