-
Notifications
You must be signed in to change notification settings - Fork 4.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
example contract using array, fixed #185
- Loading branch information
Showing
1 changed file
with
83 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
<!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")); | ||
|
||
// solidity code code | ||
var source = "" + | ||
"contract test {\n" + | ||
" function take(uint[] a, uint b) constant returns(uint d) {\n" + | ||
" return a[b];\n" + | ||
" }\n" + | ||
"}\n"; | ||
|
||
var compiled = web3.eth.compile.solidity(source); | ||
var code = compiled.test.code; | ||
// contract json abi, this is autogenerated using solc CLI | ||
var abi = compiled.test.info.abiDefinition; | ||
|
||
var myContract; | ||
|
||
function createExampleContract() { | ||
// hide create button | ||
document.getElementById('create').style.visibility = 'hidden'; | ||
document.getElementById('code').innerText = code; | ||
|
||
// let's assume that coinbase is our account | ||
web3.eth.defaultAccount = web3.eth.coinbase; | ||
|
||
var watch = web3.eth.filter('latest'); | ||
|
||
// create contract | ||
myContract = web3.eth.contract(abi).new({data: code}); | ||
console.log('address: ' + myContract.address); | ||
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'; | ||
} | ||
}); | ||
|
||
} | ||
|
||
function callExampleContract() { | ||
// this should be generated by ethereum | ||
var param = parseInt(document.getElementById('value').value); | ||
|
||
// call the contract | ||
var res = myContract.take([0,6,5,2,1,5,6], param); | ||
document.getElementById('result').innerText = res.toString(10); | ||
} | ||
|
||
</script> | ||
</head> | ||
<body> | ||
<h1>contract</h1> | ||
<div id="code"></div> | ||
<div id="status"></div> | ||
<div id='create'> | ||
<button type="button" onClick="createExampleContract();">create example contract</button> | ||
</div> | ||
<div id='call' style='visibility: hidden;'> | ||
<div>var array = [0,6,5,2,1,5,6];</div> | ||
<div>var x = array[ | ||
<input type="number" id="value" onkeyup='callExampleContract()'></input> | ||
]; | ||
</div> | ||
</div> | ||
<div id="result"></div> | ||
</body> | ||
</html> | ||
|