mirror of https://github.com/ethereum/go-ethereum
commit
94e0e5ab7d
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,67 @@ |
|||||||
|
<!doctype> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<script type="text/javascript" src="js/bignumber.js/bignumber.min.js"></script> |
||||||
|
<script type="text/javascript" src="../dist/ethereum.js"></script> |
||||||
|
<script type="text/javascript"> |
||||||
|
var web3 = require('web3'); |
||||||
|
web3.setProvider(new web3.providers.HttpSyncProvider('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() { |
||||||
|
web3.eth.watch(contract).changed(function (res) { |
||||||
|
|
||||||
|
}); |
||||||
|
}; |
||||||
|
|
||||||
|
function test2() { |
||||||
|
web3.eth.watch(contract.Event).changed(function (res) { |
||||||
|
|
||||||
|
}); |
||||||
|
}; |
||||||
|
|
||||||
|
function test3() { |
||||||
|
contract.Event().changed(function (res) { |
||||||
|
|
||||||
|
}); |
||||||
|
}; |
||||||
|
|
||||||
|
// not valid |
||||||
|
// function test4() { |
||||||
|
// 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> |
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,35 @@ |
|||||||
|
/* |
||||||
|
This file is part of ethereum.js. |
||||||
|
|
||||||
|
ethereum.js is free software: you can redistribute it and/or modify |
||||||
|
it under the terms of the GNU Lesser General Public License as published by |
||||||
|
the Free Software Foundation, either version 3 of the License, or |
||||||
|
(at your option) any later version. |
||||||
|
|
||||||
|
ethereum.js is distributed in the hope that it will be useful, |
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
GNU Lesser General Public License for more details. |
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License |
||||||
|
along with ethereum.js. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/ |
||||||
|
/** @file event.js |
||||||
|
* @authors: |
||||||
|
* Marek Kotewicz <marek@ethdev.com> |
||||||
|
* @date 2014 |
||||||
|
*/ |
||||||
|
|
||||||
|
var implementationOfEvent = function (address, signature) { |
||||||
|
|
||||||
|
return function (options) { |
||||||
|
var o = options || {}; |
||||||
|
o.address = o.address || address; |
||||||
|
o.topics = o.topics || []; |
||||||
|
o.topics.push(signature); |
||||||
|
return o; |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
module.exports = implementationOfEvent; |
||||||
|
|
@ -0,0 +1,49 @@ |
|||||||
|
var assert = require('assert'); |
||||||
|
var abi = require('../lib/abi.js'); |
||||||
|
|
||||||
|
describe('abi', function() { |
||||||
|
it('should filter functions and events from input array properly', function () { |
||||||
|
|
||||||
|
// given
|
||||||
|
var description = [{ |
||||||
|
"name": "test", |
||||||
|
"type": "function", |
||||||
|
"inputs": [{ |
||||||
|
"name": "a", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
], |
||||||
|
"outputs": [ |
||||||
|
{ |
||||||
|
"name": "d", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
], |
||||||
|
}, { |
||||||
|
"name": "test2", |
||||||
|
"type": "event", |
||||||
|
"inputs": [{ |
||||||
|
"name": "a", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
], |
||||||
|
"outputs": [ |
||||||
|
{ |
||||||
|
"name": "d", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
] |
||||||
|
}]; |
||||||
|
|
||||||
|
// when
|
||||||
|
var events = abi.filterEvents(description); |
||||||
|
var functions = abi.filterFunctions(description); |
||||||
|
|
||||||
|
// then
|
||||||
|
assert.equal(events.length, 1); |
||||||
|
assert.equal(events[0].name, 'test2'); |
||||||
|
assert.equal(functions.length, 1); |
||||||
|
assert.equal(functions[0].name, 'test'); |
||||||
|
|
||||||
|
}); |
||||||
|
}); |
@ -0,0 +1,201 @@ |
|||||||
|
var assert = require('assert'); |
||||||
|
var contract = require('../lib/contract.js'); |
||||||
|
|
||||||
|
describe('contract', function() { |
||||||
|
it('should create simple contract with one method from abi with explicit type name', function () { |
||||||
|
|
||||||
|
// given
|
||||||
|
var description = [{ |
||||||
|
"name": "test(uint256)", |
||||||
|
"type": "function", |
||||||
|
"inputs": [{ |
||||||
|
"name": "a", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
], |
||||||
|
"outputs": [ |
||||||
|
{ |
||||||
|
"name": "d", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
] |
||||||
|
}]; |
||||||
|
|
||||||
|
// when
|
||||||
|
var con = contract(null, description); |
||||||
|
|
||||||
|
// then
|
||||||
|
assert.equal('function', typeof con.test);
|
||||||
|
assert.equal('function', typeof con.test['uint256']); |
||||||
|
}); |
||||||
|
|
||||||
|
it('should create simple contract with one method from abi with implicit type name', function () { |
||||||
|
|
||||||
|
// given
|
||||||
|
var description = [{ |
||||||
|
"name": "test", |
||||||
|
"type": "function", |
||||||
|
"inputs": [{ |
||||||
|
"name": "a", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
], |
||||||
|
"outputs": [ |
||||||
|
{ |
||||||
|
"name": "d", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
] |
||||||
|
}]; |
||||||
|
|
||||||
|
// when
|
||||||
|
var con = contract(null, description); |
||||||
|
|
||||||
|
// then
|
||||||
|
assert.equal('function', typeof con.test);
|
||||||
|
assert.equal('function', typeof con.test['uint256']); |
||||||
|
});
|
||||||
|
|
||||||
|
it('should create contract with multiple methods', function () { |
||||||
|
|
||||||
|
// given
|
||||||
|
var description = [{ |
||||||
|
"name": "test", |
||||||
|
"type": "function", |
||||||
|
"inputs": [{ |
||||||
|
"name": "a", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
], |
||||||
|
"outputs": [ |
||||||
|
{ |
||||||
|
"name": "d", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
], |
||||||
|
}, { |
||||||
|
"name": "test2", |
||||||
|
"type": "function", |
||||||
|
"inputs": [{ |
||||||
|
"name": "a", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
], |
||||||
|
"outputs": [ |
||||||
|
{ |
||||||
|
"name": "d", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
] |
||||||
|
}]; |
||||||
|
|
||||||
|
// when
|
||||||
|
var con = contract(null, description); |
||||||
|
|
||||||
|
// then
|
||||||
|
assert.equal('function', typeof con.test);
|
||||||
|
assert.equal('function', typeof con.test['uint256']); |
||||||
|
assert.equal('function', typeof con.test2);
|
||||||
|
assert.equal('function', typeof con.test2['uint256']); |
||||||
|
}); |
||||||
|
|
||||||
|
it('should create contract with overloaded methods', function () { |
||||||
|
|
||||||
|
// given
|
||||||
|
var description = [{ |
||||||
|
"name": "test", |
||||||
|
"type": "function", |
||||||
|
"inputs": [{ |
||||||
|
"name": "a", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
], |
||||||
|
"outputs": [ |
||||||
|
{ |
||||||
|
"name": "d", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
], |
||||||
|
}, { |
||||||
|
"name": "test", |
||||||
|
"type": "function", |
||||||
|
"inputs": [{ |
||||||
|
"name": "a", |
||||||
|
"type": "string" |
||||||
|
} |
||||||
|
], |
||||||
|
"outputs": [ |
||||||
|
{ |
||||||
|
"name": "d", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
] |
||||||
|
}]; |
||||||
|
|
||||||
|
// when
|
||||||
|
var con = contract(null, description); |
||||||
|
|
||||||
|
// then
|
||||||
|
assert.equal('function', typeof con.test);
|
||||||
|
assert.equal('function', typeof con.test['uint256']); |
||||||
|
assert.equal('function', typeof con.test['string']);
|
||||||
|
}); |
||||||
|
|
||||||
|
it('should create contract with no methods', function () { |
||||||
|
|
||||||
|
// given
|
||||||
|
var description = [{ |
||||||
|
"name": "test(uint256)", |
||||||
|
"inputs": [{ |
||||||
|
"name": "a", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
], |
||||||
|
"outputs": [ |
||||||
|
{ |
||||||
|
"name": "d", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
] |
||||||
|
}]; |
||||||
|
|
||||||
|
|
||||||
|
// when
|
||||||
|
var con = contract(null, description); |
||||||
|
|
||||||
|
// then
|
||||||
|
assert.equal('undefined', typeof con.test);
|
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
it('should create contract with one event', function () { |
||||||
|
|
||||||
|
// given
|
||||||
|
var description = [{ |
||||||
|
"name": "test", |
||||||
|
"type": "event", |
||||||
|
"inputs": [{ |
||||||
|
"name": "a", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
], |
||||||
|
"outputs": [ |
||||||
|
{ |
||||||
|
"name": "d", |
||||||
|
"type": "uint256" |
||||||
|
} |
||||||
|
] |
||||||
|
}]; |
||||||
|
|
||||||
|
|
||||||
|
// when
|
||||||
|
var con = contract(null, description); |
||||||
|
|
||||||
|
// then
|
||||||
|
assert.equal('function', typeof con.test);
|
||||||
|
assert.equal('function', typeof con.test['uint256']);
|
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
}); |
||||||
|
|
@ -0,0 +1,22 @@ |
|||||||
|
var assert = require('assert'); |
||||||
|
var event = require('../lib/event.js'); |
||||||
|
|
||||||
|
describe('event', function () { |
||||||
|
it('should create filter input object from given', function () { |
||||||
|
|
||||||
|
// given
|
||||||
|
var address = '0x012345';
|
||||||
|
var signature = '0x987654'; |
||||||
|
|
||||||
|
// when
|
||||||
|
var impl = event(address, signature); |
||||||
|
var result = impl(); |
||||||
|
|
||||||
|
// then
|
||||||
|
assert.equal(result.address, address);
|
||||||
|
assert.equal(result.topics.length, 1); |
||||||
|
assert.equal(result.topics[0], signature); |
||||||
|
|
||||||
|
}); |
||||||
|
}); |
||||||
|
|
Loading…
Reference in new issue