Merge branch 'master' into abi_refactor

Conflicts:
	dist/web3-light.js.map
	dist/web3-light.min.js
	dist/web3.js.map
	dist/web3.min.js
This commit is contained in:
Marek Kotewicz 2015-04-20 15:12:54 +02:00
commit e80ff10f52
15 changed files with 149 additions and 288 deletions

31
dist/web3-light.js vendored
View File

@ -928,7 +928,8 @@ module.exports = {
ETH_UNITS: ETH_UNITS, ETH_UNITS: ETH_UNITS,
ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN }, ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN },
ETH_POLLING_TIMEOUT: 1000, ETH_POLLING_TIMEOUT: 1000,
ETH_DEFAULTBLOCK: 'latest' defaultBlock: 'latest',
defaultAccount: undefined
}; };
@ -1533,6 +1534,8 @@ web3.setProvider = function (provider) {
}; };
web3.reset = function () { web3.reset = function () {
RequestManager.getInstance().reset(); RequestManager.getInstance().reset();
c.defaultBlock = 'latest';
c.defaultAccount = undefined;
}; };
web3.toHex = utils.toHex; web3.toHex = utils.toHex;
web3.toAscii = utils.toAscii; web3.toAscii = utils.toAscii;
@ -1547,14 +1550,23 @@ web3.isAddress = utils.isAddress;
// ADD defaultblock // ADD defaultblock
Object.defineProperty(web3.eth, 'defaultBlock', { Object.defineProperty(web3.eth, 'defaultBlock', {
get: function () { get: function () {
return c.ETH_DEFAULTBLOCK; return c.defaultBlock;
}, },
set: function (val) { set: function (val) {
c.ETH_DEFAULTBLOCK = val; c.defaultBlock = val;
return c.ETH_DEFAULTBLOCK; return val;
} }
}); });
Object.defineProperty(web3.eth, 'defaultAccount', {
get: function () {
return c.defaultAccount;
},
set: function (val) {
c.defaultAccount = val;
return val;
}
});
/// setups all api methods /// setups all api methods
setupMethods(web3, web3Methods); setupMethods(web3, web3Methods);
@ -1755,12 +1767,13 @@ function Contract(abi, options) {
var address = ''; var address = '';
if (utils.isAddress(options)) { if (utils.isAddress(options)) {
address = options; address = options;
} else { // is a source code! } else { // is an object!
// TODO, parse the rest of the args // TODO, parse the rest of the args
var code = options; options = options || {};
var args = Array.prototype.slice.call(arguments, 2); var args = Array.prototype.slice.call(arguments, 2);
var bytes = solAbi.formatConstructorParams(abi, args); var bytes = solAbi.formatConstructorParams(abi, args);
address = web3.eth.sendTransaction({data: code + bytes}); options.data += bytes;
address = web3.eth.sendTransaction(options);
} }
var result = {}; var result = {};
@ -2451,7 +2464,7 @@ var isPredefinedBlockNumber = function (blockNumber) {
var inputDefaultBlockNumberFormatter = function (blockNumber) { var inputDefaultBlockNumberFormatter = function (blockNumber) {
if (blockNumber === undefined) { if (blockNumber === undefined) {
return config.ETH_DEFAULTBLOCK; return config.defaultBlock;
} }
return inputBlockNumberFormatter(blockNumber); return inputBlockNumberFormatter(blockNumber);
}; };
@ -2474,6 +2487,8 @@ var inputBlockNumberFormatter = function (blockNumber) {
*/ */
var inputTransactionFormatter = function (options){ var inputTransactionFormatter = function (options){
options.from = options.from || config.defaultAccount;
// make code -> data // make code -> data
if (options.code) { if (options.code) {
options.data = options.code; options.data = options.code;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

31
dist/web3.js vendored
View File

@ -928,7 +928,8 @@ module.exports = {
ETH_UNITS: ETH_UNITS, ETH_UNITS: ETH_UNITS,
ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN }, ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN },
ETH_POLLING_TIMEOUT: 1000, ETH_POLLING_TIMEOUT: 1000,
ETH_DEFAULTBLOCK: 'latest' defaultBlock: 'latest',
defaultAccount: undefined
}; };
@ -1533,6 +1534,8 @@ web3.setProvider = function (provider) {
}; };
web3.reset = function () { web3.reset = function () {
RequestManager.getInstance().reset(); RequestManager.getInstance().reset();
c.defaultBlock = 'latest';
c.defaultAccount = undefined;
}; };
web3.toHex = utils.toHex; web3.toHex = utils.toHex;
web3.toAscii = utils.toAscii; web3.toAscii = utils.toAscii;
@ -1547,14 +1550,23 @@ web3.isAddress = utils.isAddress;
// ADD defaultblock // ADD defaultblock
Object.defineProperty(web3.eth, 'defaultBlock', { Object.defineProperty(web3.eth, 'defaultBlock', {
get: function () { get: function () {
return c.ETH_DEFAULTBLOCK; return c.defaultBlock;
}, },
set: function (val) { set: function (val) {
c.ETH_DEFAULTBLOCK = val; c.defaultBlock = val;
return c.ETH_DEFAULTBLOCK; return val;
} }
}); });
Object.defineProperty(web3.eth, 'defaultAccount', {
get: function () {
return c.defaultAccount;
},
set: function (val) {
c.defaultAccount = val;
return val;
}
});
/// setups all api methods /// setups all api methods
setupMethods(web3, web3Methods); setupMethods(web3, web3Methods);
@ -1755,12 +1767,13 @@ function Contract(abi, options) {
var address = ''; var address = '';
if (utils.isAddress(options)) { if (utils.isAddress(options)) {
address = options; address = options;
} else { // is a source code! } else { // is an object!
// TODO, parse the rest of the args // TODO, parse the rest of the args
var code = options; options = options || {};
var args = Array.prototype.slice.call(arguments, 2); var args = Array.prototype.slice.call(arguments, 2);
var bytes = solAbi.formatConstructorParams(abi, args); var bytes = solAbi.formatConstructorParams(abi, args);
address = web3.eth.sendTransaction({data: code + bytes}); options.data += bytes;
address = web3.eth.sendTransaction(options);
} }
var result = {}; var result = {};
@ -2451,7 +2464,7 @@ var isPredefinedBlockNumber = function (blockNumber) {
var inputDefaultBlockNumberFormatter = function (blockNumber) { var inputDefaultBlockNumberFormatter = function (blockNumber) {
if (blockNumber === undefined) { if (blockNumber === undefined) {
return config.ETH_DEFAULTBLOCK; return config.defaultBlock;
} }
return inputBlockNumberFormatter(blockNumber); return inputBlockNumberFormatter(blockNumber);
}; };
@ -2474,6 +2487,8 @@ var inputBlockNumberFormatter = function (blockNumber) {
*/ */
var inputTransactionFormatter = function (options){ var inputTransactionFormatter = function (options){
options.from = options.from || config.defaultAccount;
// make code -> data // make code -> data
if (options.code) { if (options.code) {
options.data = options.code; options.data = options.code;

10
dist/web3.js.map vendored

File diff suppressed because one or more lines are too long

4
dist/web3.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -2,36 +2,34 @@
<html> <html>
<head> <head>
<script type="text/javascript" src="../dist/web3"></script> <script type="text/javascript" src="../dist/web3.js"></script>
<script type="text/javascript"> <script type="text/javascript">
var web3 = require('web3'); var web3 = require('web3');
web3.setProvider(new web3.providers.HttpProvider()); web3.setProvider(new web3.providers.HttpProvider("http://localhost:8545"));
// solidity source code // solidity source code
var source = "" + /*var source = "" +*/
"contract test {\n" + /*"contract test {\n" +*/
" function multiply(uint a) returns(uint d) {\n" + /*" function multiply(uint a) constant returns(uint d) {\n" +*/
" return a * 7;\n" + /*" return a * 7;\n" +*/
" }\n" + /*" }\n" +*/
"}\n"; /*"}\n";*/
var source = "605280600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b60376004356041565b8060005260206000f35b6000600782029050604d565b91905056";
// contract description, this will be autogenerated somehow // contract description, this is autogenerated using solc CLI
var desc = [{ var desc = [{
"name": "multiply(uint256)", "constant" : true,
"type": "function", "inputs" : [{
"inputs": [
{
"name" : "a", "name" : "a",
"type" : "uint256" "type" : "uint256"
} }],
], "name" : "multiply",
"outputs": [ "outputs" : [{
{
"name" : "d", "name" : "d",
"type" : "uint256" "type" : "uint256"
} }],
] "type" : "function"
}]; }];
var myContract; var myContract;
@ -41,11 +39,12 @@
document.getElementById('create').style.visibility = 'hidden'; document.getElementById('create').style.visibility = 'hidden';
document.getElementById('source').innerText = source; document.getElementById('source').innerText = source;
// create contract // let's assume that coinbase is our account
var address = web3.eth.sendTransaction({data: web3.eth.compile.solidity(source)}), web3.eth.defaultAccount = web3.eth.coinbase;
Contract = web3.eth.contract(desc);
myContract = new Contract(address); // create contract
var Contract = web3.eth.contract(desc);
myContract = new Contract({data: source});
document.getElementById('call').style.visibility = 'visible'; document.getElementById('call').style.visibility = 'visible';
} }
@ -54,7 +53,7 @@
var param = parseInt(document.getElementById('value').value); var param = parseInt(document.getElementById('value').value);
// call the contract // call the contract
var res = myContract.call().multiply(param); var res = myContract.multiply(param);
document.getElementById('result').innerText = res.toString(10); document.getElementById('result').innerText = res.toString(10);
} }

View File

@ -1,77 +0,0 @@
<!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());
// solidity source code
var source = "" +
"contract test {\n" +
" function multiply(uint[] a) returns(uint d) {\n" +
" return a[0] + a[1];\n" +
" }\n" +
"}\n";
// contract description, this will be autogenerated somehow
var desc = [{
"name": "multiply(uint256[])",
"type": "function",
"inputs": [
{
"name": "a",
"type": "uint256[]"
}
],
"outputs": [
{
"name": "d",
"type": "uint256"
}
]
}];
var myContract;
function createExampleContract() {
// hide create button
document.getElementById('create').style.visibility = 'hidden';
document.getElementById('source').innerText = source;
// create contract
var address = web3.eth.sendTransaction({data: web3.eth.compile.solidity(source)}),
Contract = web3.eth.contract(desc);
myContract = new Contract(address);
document.getElementById('call').style.visibility = 'visible';
}
function callExampleContract() {
// this should be generated by ethereum
var param = parseInt(document.getElementById('value').value);
var param2 = parseInt(document.getElementById('value2').value);
// call the contract
var res = myContract.call().multiply([param, param2]);
document.getElementById('result').innerText = res.toString(10);
}
</script>
</head>
<body>
<h1>contract</h1>
<div id="source"></div>
<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>
<input type="number" id="value2" onkeyup='callExampleContract()'></input>
</div>
<div id="result"></div>
</body>
</html>

View File

@ -1,119 +0,0 @@
<!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:8080'));
var desc = [{
"type":"event",
"inputs": [{"name":"a","type":"uint256","indexed":true},{"name":"b","type":"hash256","indexed":false}],
"name":"Event"
}, {
"type":"event",
"inputs": [{"name":"a","type":"uint256","indexed":true},{"name":"b","type":"hash256","indexed":false}],
"name":"Event2"
}, {
"type":"function",
"inputs": [{"name":"a","type":"uint256"}],
"name":"foo",
"outputs": []
}];
var address = '0x01';
var contract = web3.eth.contract(address, desc);
function test1() {
// "{"topic":["0x83c9849c","0xc4d76332"],"address":"0x01"}"
web3.eth.watch(contract).changed(function (res) {
});
};
function test2() {
// "{"topic":["0x83c9849c"],"address":"0x01"}"
web3.eth.watch(contract.Event).changed(function (res) {
});
};
function test3() {
// "{"topic":["0x83c9849c"],"address":"0x01"}"
contract.Event().changed(function (res) {
});
};
function test4() {
// "{"topic":["0x83c9849c","0000000000000000000000000000000000000000000000000000000000000045"],"address":"0x01"}"
contract.Event({a: 69}).changed(function (res) {
});
};
function test5() {
// "{"topic":["0x83c9849c",["0000000000000000000000000000000000000000000000000000000000000045","000000000000000000000000000000000000000000000000000000000000002a"]],"address":"0x01"}"
contract.Event({a: [69, 42]}).changed(function (res) {
});
};
function test6() {
// "{"topic":["0x83c9849c","000000000000000000000000000000000000000000000000000000000000001e"],"max":100,"address":"0x01"}"
contract.Event({a: 30}, {max: 100}).changed(function (res) {
});
};
function test7() {
// "{"topic":["0x83c9849c","000000000000000000000000000000000000000000000000000000000000001e"],"address":"0x01"}"
web3.eth.watch(contract.Event, {a: 30}).changed(function (res) {
});
};
function test8() {
// "{"topic":["0x83c9849c","000000000000000000000000000000000000000000000000000000000000001e"],"max":100,"address":"0x01"}"
web3.eth.watch(contract.Event, {a: 30}, {max: 100}).changed(function (res) {
});
};
// not valid
// function testX() {
// web3.eth.watch([contract.Event, contract.Event2]).changed(function (res) {
// });
// };
</script>
</head>
<body>
<div>
<button type="button" onClick="test1();">test1</button>
</div>
<div>
<button type="button" onClick="test2();">test2</button>
</div>
<div>
<button type="button" onClick="test3();">test3</button>
</div>
<div>
<button type="button" onClick="test4();">test4</button>
</div>
<div>
<button type="button" onClick="test5();">test5</button>
</div>
<div>
<button type="button" onClick="test6();">test6</button>
</div>
<div>
<button type="button" onClick="test7();">test7</button>
</div>
<div>
<button type="button" onClick="test8();">test8</button>
</div>
</body>
</html>

View File

@ -4,48 +4,61 @@
<script type="text/javascript" src="../dist/web3.js"></script> <script type="text/javascript" src="../dist/web3.js"></script>
<script type="text/javascript"> <script type="text/javascript">
var web3 = require('web3'); var web3 = require('web3');
web3.setProvider(new web3.providers.HttpProvider('http://localhost:8080')); web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'));
var source = "" + /*var source = "" + */
"contract Contract { " + /*"contract Contract { " +*/
" event Incremented(bool indexed odd, uint x); " + /*" event Incremented(bool indexed odd, uint x); " +*/
" function Contract() { " + /*" function Contract() { " +*/
" x = 69; " + /*" x = 69; " +*/
" } " + /*" } " +*/
" function inc() { " + /*" function inc() { " +*/
" ++x; " + /*" ++x; " +*/
" Incremented(x % 2 == 1, x); " + /*" Incremented(x % 2 == 1, x); " +*/
" } " + /*" } " +*/
" uint x; " + /*" uint x; " +*/
"}"; /*"}";*/
var source = "5b60456000600050819055505b608c8060196000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063371303c014602e57005b6034603a565b60006000f35b6000600081815054600101919050819055506001600260006000505406147f6e61ef44ac2747ff8b84d353a908eb8bd5c3fb118334d57698c5cfc7041196ad600060006000505481526020016000a25b56";
var desc = [{ var desc = [{
"type":"event", "constant" : false,
"name":"Incremented",
"inputs": [{"name":"odd","type":"bool","indexed":true},{"name":"x","type":"uint","indexed":false}],
}, {
"type":"function",
"name":"inc",
"inputs" : [], "inputs" : [],
"outputs": [] "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 address;
var contract; var contract;
var update = function (x) { var update = function (err, x) {
document.getElementById('result').innerText = JSON.stringify(x); document.getElementById('result').innerText = JSON.stringify(x);
}; };
var createContract = function () { var createContract = function () {
address = web3.eth.sendTransaction({data: web3.eth.compile.solidity(source)}); // let's assume that we have a private key to coinbase ;)
contract = web3.eth.contract(address, desc); web3.eth.defaultAccount = web3.eth.coinbase;
contract.Incremented({odd: true}).changed(update); var Contract = web3.eth.contract(desc);
contract = new Contract({data: source});
contract.Incremented({odd: true}).watch(update);
}; };
var callContract = function () { var callContract = function () {
contract.call().inc(); contract.inc();
}; };

View File

@ -64,6 +64,7 @@ module.exports = {
ETH_UNITS: ETH_UNITS, ETH_UNITS: ETH_UNITS,
ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN }, ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN },
ETH_POLLING_TIMEOUT: 1000, ETH_POLLING_TIMEOUT: 1000,
ETH_DEFAULTBLOCK: 'latest' defaultBlock: 'latest',
defaultAccount: undefined
}; };

View File

@ -117,6 +117,8 @@ web3.setProvider = function (provider) {
}; };
web3.reset = function () { web3.reset = function () {
RequestManager.getInstance().reset(); RequestManager.getInstance().reset();
c.defaultBlock = 'latest';
c.defaultAccount = undefined;
}; };
web3.toHex = utils.toHex; web3.toHex = utils.toHex;
web3.toAscii = utils.toAscii; web3.toAscii = utils.toAscii;
@ -131,14 +133,23 @@ web3.isAddress = utils.isAddress;
// ADD defaultblock // ADD defaultblock
Object.defineProperty(web3.eth, 'defaultBlock', { Object.defineProperty(web3.eth, 'defaultBlock', {
get: function () { get: function () {
return c.ETH_DEFAULTBLOCK; return c.defaultBlock;
}, },
set: function (val) { set: function (val) {
c.ETH_DEFAULTBLOCK = val; c.defaultBlock = val;
return c.ETH_DEFAULTBLOCK; return val;
} }
}); });
Object.defineProperty(web3.eth, 'defaultAccount', {
get: function () {
return c.defaultAccount;
},
set: function (val) {
c.defaultAccount = val;
return val;
}
});
/// setups all api methods /// setups all api methods
setupMethods(web3, web3Methods); setupMethods(web3, web3Methods);

View File

@ -183,12 +183,13 @@ function Contract(abi, options) {
var address = ''; var address = '';
if (utils.isAddress(options)) { if (utils.isAddress(options)) {
address = options; address = options;
} else { // is a source code! } else { // is an object!
// TODO, parse the rest of the args // TODO, parse the rest of the args
var code = options; options = options || {};
var args = Array.prototype.slice.call(arguments, 2); var args = Array.prototype.slice.call(arguments, 2);
var bytes = solAbi.formatConstructorParams(abi, args); var bytes = solAbi.formatConstructorParams(abi, args);
address = web3.eth.sendTransaction({data: code + bytes}); options.data += bytes;
address = web3.eth.sendTransaction(options);
} }
var result = {}; var result = {};

View File

@ -41,7 +41,7 @@ var isPredefinedBlockNumber = function (blockNumber) {
var inputDefaultBlockNumberFormatter = function (blockNumber) { var inputDefaultBlockNumberFormatter = function (blockNumber) {
if (blockNumber === undefined) { if (blockNumber === undefined) {
return config.ETH_DEFAULTBLOCK; return config.defaultBlock;
} }
return inputBlockNumberFormatter(blockNumber); return inputBlockNumberFormatter(blockNumber);
}; };
@ -64,6 +64,8 @@ var inputBlockNumberFormatter = function (blockNumber) {
*/ */
var inputTransactionFormatter = function (options){ var inputTransactionFormatter = function (options){
options.from = options.from || config.defaultAccount;
// make code -> data // make code -> data
if (options.code) { if (options.code) {
options.data = options.code; options.data = options.code;

View File

@ -234,7 +234,7 @@ describe('web3.eth.contract', function() {
}); });
var Con = contract(description); var Con = contract(description);
var myCon = new Con(code, 2); var myCon = new Con({data: code}, 2);
}); });
}); });