web3.js/example/contract.html

93 lines
2.9 KiB
HTML
Raw Normal View History

2014-11-14 13:11:47 +01:00
<!doctype>
<html>
<head>
2015-04-20 13:52:40 +02:00
<script type="text/javascript" src="../dist/web3.js"></script>
2014-11-14 13:11:47 +01:00
<script type="text/javascript">
2015-04-07 04:39:47 +02:00
var web3 = require('web3');
2015-04-20 14:38:08 +02:00
web3.setProvider(new web3.providers.HttpProvider("http://localhost:8545"));
2014-11-14 13:11:47 +01:00
2015-05-13 12:05:38 +02:00
// solidity code code
var source = "" +
"contract test {\n" +
" function multiply(uint a) constant returns(uint d) {\n" +
" return a * 7;\n" +
" }\n" +
"}\n";
var code = web3.eth.compile.solidity(source).code;
/*var code = "605280600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b60376004356041565b8060005260206000f35b6000600782029050604d565b91905056";*/
2014-11-14 13:11:47 +01:00
2015-04-20 14:38:08 +02:00
// contract description, this is autogenerated using solc CLI
var desc = [{
"constant" : true,
"inputs" : [{
"name" : "a",
"type" : "uint256"
}],
"name" : "multiply",
"outputs" : [{
"name" : "d",
"type" : "uint256"
}],
"type" : "function"
2014-11-14 13:11:47 +01:00
}];
2015-02-24 10:36:54 +01:00
var myContract;
2014-11-14 13:11:47 +01:00
function createExampleContract() {
// hide create button
document.getElementById('create').style.visibility = 'hidden';
2015-05-13 12:05:38 +02:00
document.getElementById('code').innerText = code;
2014-11-14 13:11:47 +01:00
2015-04-20 14:38:08 +02:00
// let's assume that coinbase is our account
web3.eth.defaultAccount = web3.eth.coinbase;
2015-02-24 10:36:54 +01:00
2015-05-13 17:46:49 +02:00
var watch = web3.eth.filter('latest');
2015-04-20 14:38:08 +02:00
// create contract
2015-05-13 12:05:38 +02:00
myContract = web3.eth.contract(desc).new({data: code});
2015-05-13 17:46:49 +02:00
console.log('address: ' + myContract.address);
2015-05-13 20:05:23 +02:00
document.getElementById('status').innerText = "transaction sent, waiting for confirmation";
2015-05-13 17:46:49 +02:00
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';
}
});
2014-11-14 13:11:47 +01:00
}
function callExampleContract() {
// this should be generated by ethereum
2015-01-08 15:31:46 +01:00
var param = parseInt(document.getElementById('value').value);
2014-11-14 13:11:47 +01:00
// call the contract
2015-04-20 14:38:08 +02:00
var res = myContract.multiply(param);
2015-01-27 11:53:34 +01:00
document.getElementById('result').innerText = res.toString(10);
2014-11-14 13:11:47 +01:00
}
</script>
</head>
<body>
<h1>contract</h1>
2015-05-13 12:05:38 +02:00
<div id="code"></div>
2015-05-13 17:46:49 +02:00
<div id="status"></div>
2014-11-14 13:11:47 +01:00
<div id='create'>
<button type="button" onClick="createExampleContract();">create example contract</button>
</div>
<div id='call' style='visibility: hidden;'>
<input type="number" id="value" onkeyup='callExampleContract()'></input>
</div>
<div id="result"></div>
</body>
</html>