aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Kotewicz <marek.kotewicz@gmail.com>2015-07-01 20:36:10 +0800
committerMarek Kotewicz <marek.kotewicz@gmail.com>2015-07-01 20:36:10 +0800
commit72dc1c76fdf0cd8f0e97dab21f50e85003b43f78 (patch)
treef242d984cb286aace954773bf1d76251d32862f4
parent9470fa2d4cd00c795e3bf3b5811e30fa29522e4c (diff)
downloaddexon-solidity-72dc1c76fdf0cd8f0e97dab21f50e85003b43f78.tar.gz
dexon-solidity-72dc1c76fdf0cd8f0e97dab21f50e85003b43f78.tar.zst
dexon-solidity-72dc1c76fdf0cd8f0e97dab21f50e85003b43f78.zip
Squashed 'libjsqrc/ethereumjs/' changes from 2a0b46a..d5d2115
d5d2115 example contract using array, fixed #185 21ed235 removed connection keep-alive c44fe01 version 0.7.1 d9b785e fixed #248 490dde5 fixed encoding/decoding strings, #249 b3f5d09 fixed long bytes dynamic decoding/encoding, #249 d097821 small filter improvement d59b1cd removed xhr from browser 42b6e9d version 0.7.0 fe6defd gulp 44dcd24 set connection keepalive 2b17c0f gulpfile changes 4a46c73 Merge pull request #228 from ethereum/strings 93c8006 tests for encoding and decoding prematurely terminated strings and strings containing internal zeros 7dd44e7 Merge branch 'strings' of https://github.com/ethereum/ethereum.js into strings 390a9ff Merge branch 'develop' into strings bcd9cfb updated deps, removed unused karma ef15fc1 Merge pull request #244 from ethereum/allevents 6f74d57 Merge branch 'develop' into allevents 7aca17e Merge branch 'develop' into allevents c5ee34d fix for optional event parameters 8170a0a Merge pull request #245 from ethereum/filterInstantWatch 76a094c fixed all issues noted by marek d78b512 add possible callback to filters e1b17a9 re-build develop af9c027 all events filter b270616 version 0.6.1 c47d6a8 gulp 7cf7cf3 map file 6da1d3e gulp 450042e Update eth.js 3951286 Added sendRawTransaction 323b529 merged develop 16ffdf6 merged master ecf0a2c changed | to Math.floor d2b5ba2 Merge pull request #239 from ethereum/mistFixes 9e6bf9d removed browser XHR 9061116 fixed build issues in formatInputDynamicBytes 0e3b29c fixed coverage issue d51e9a2 merged latest develop f0247aa made meteor package available on the server side as well e97c5f5 fixed and tested meteor package init 3e49f56 add currentProvidor and mist fixes bd6d9ba merged develop 7b730b1 Merge branch 'strings' of github.com:ethereum/web3.js into strings cc533d9 fixed bytes wrong encoding 8c6f976 Merge branch 'develop' into strings 7c970e3 add bytes32 test with leading 0 9c7f7bb re-add .map files 189484f add extra int tests 73cc711 Merge branch 'develop' into strings fa3239f abi string type, fixes #216, #218, #219 git-subtree-dir: libjsqrc/ethereumjs git-subtree-split: d5d2115bf9ad07a736a189e1022b7d3a549e4006
-rw-r--r--batch.js25
-rw-r--r--coder.decodeParam.js98
-rw-r--r--coder.encodeParam.js87
-rw-r--r--contract.js141
-rw-r--r--polling.js40
-rw-r--r--utils.toHex.js1
-rw-r--r--web3.eth.filter.methods.js8
7 files changed, 368 insertions, 32 deletions
diff --git a/batch.js b/batch.js
index f368a5d7..5a06f0e7 100644
--- a/batch.js
+++ b/batch.js
@@ -28,6 +28,16 @@ describe('lib/web3/batch', function () {
done();
};
+ provider.injectValidation(function (payload) {
+ var first = payload[0];
+ var second = payload[1];
+
+ assert.equal(first.method, 'eth_getBalance');
+ assert.deepEqual(first.params, ['0x0000000000000000000000000000000000000000', 'latest']);
+ assert.equal(second.method, 'eth_getBalance');
+ assert.deepEqual(second.params, ['0x0000000000000000000000000000000000000005', 'latest']);
+ });
+
var batch = web3.createBatch();
batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback));
batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000005', 'latest', callback2));
@@ -55,7 +65,7 @@ describe('lib/web3/batch', function () {
}];
- var address = '0x0000000000000000000000000000000000000000';
+ var address = '0x1000000000000000000000000000000000000001';
var result = '0x126';
var result2 = '0x0000000000000000000000000000000000000000000000000000000000000123';
@@ -71,6 +81,19 @@ describe('lib/web3/batch', function () {
done();
};
+ provider.injectValidation(function (payload) {
+ var first = payload[0];
+ var second = payload[1];
+
+ assert.equal(first.method, 'eth_getBalance');
+ assert.deepEqual(first.params, ['0x0000000000000000000000000000000000000000', 'latest']);
+ assert.equal(second.method, 'eth_call');
+ assert.deepEqual(second.params, [{
+ 'to': '0x1000000000000000000000000000000000000001',
+ 'data': '0xe3d670d70000000000000000000000001000000000000000000000000000000000000001'
+ }]);
+ });
+
var batch = web3.createBatch();
batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback));
batch.add(web3.eth.contract(abi).at(address).balance.request(address, callback2));
diff --git a/coder.decodeParam.js b/coder.decodeParam.js
index 959e96cf..5555b780 100644
--- a/coder.decodeParam.js
+++ b/coder.decodeParam.js
@@ -20,10 +20,53 @@ describe('lib/solidity/coder', function () {
test({ type: 'int256', expected: new bn(1), value: '0000000000000000000000000000000000000000000000000000000000000001'});
test({ type: 'int256', expected: new bn(16), value: '0000000000000000000000000000000000000000000000000000000000000010'});
test({ type: 'int256', expected: new bn(-1), value: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'});
- test({ type: 'bytes32', expected: 'gavofyork', value: '6761766f66796f726b0000000000000000000000000000000000000000000000'});
- test({ type: 'bytes', expected: 'gavofyork', value: '0000000000000000000000000000000000000000000000000000000000000020' +
+ test({ type: 'int8', expected: new bn(16), value: '0000000000000000000000000000000000000000000000000000000000000010'});
+ test({ type: 'int32', expected: new bn(16), value: '0000000000000000000000000000000000000000000000000000000000000010'});
+ test({ type: 'int64', expected: new bn(16), value: '0000000000000000000000000000000000000000000000000000000000000010'});
+ test({ type: 'int128', expected: new bn(16), value: '0000000000000000000000000000000000000000000000000000000000000010'});
+ test({ type: 'bytes32', expected: '0x6761766f66796f726b0000000000000000000000000000000000000000000000',
+ value: '6761766f66796f726b0000000000000000000000000000000000000000000000'});
+ test({ type: 'bytes', expected: '0x6761766f66796f726b',
+ value: '0000000000000000000000000000000000000000000000000000000000000020' +
+ '0000000000000000000000000000000000000000000000000000000000000009' +
+ '6761766f66796f726b0000000000000000000000000000000000000000000000'});
+ test({ type: 'bytes32', expected: '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b',
+ value: '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'});
+ test({ type: 'bytes', expected: '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b',
+ value: '0000000000000000000000000000000000000000000000000000000000000020' +
+ '0000000000000000000000000000000000000000000000000000000000000020' +
+ '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'});
+ test({ type: 'bytes', expected: '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b',
+ value: '0000000000000000000000000000000000000000000000000000000000000020' +
+ '0000000000000000000000000000000000000000000000000000000000000040' +
+ '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'});
+ test({ type: 'bytes', expected: '0x131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b',
+ value: '0000000000000000000000000000000000000000000000000000000000000020' +
+ '0000000000000000000000000000000000000000000000000000000000000060' +
+ '131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'});
+ test({ type: 'string', expected: 'gavofyork', value: '0000000000000000000000000000000000000000000000000000000000000020' +
'0000000000000000000000000000000000000000000000000000000000000009' +
'6761766f66796f726b0000000000000000000000000000000000000000000000'});
+ test({ type: 'string', expected: '\xc3\xa4\x00\x00\xc3\xa4',
+ value: '0000000000000000000000000000000000000000000000000000000000000020' +
+ '0000000000000000000000000000000000000000000000000000000000000006' +
+ 'c3a40000c3a40000000000000000000000000000000000000000000000000000'});
+ test({ type: 'string', expected: '\xc3',
+ value: '0000000000000000000000000000000000000000000000000000000000000020' +
+ '0000000000000000000000000000000000000000000000000000000000000001' +
+ 'c300000000000000000000000000000000000000000000000000000000000000'});
+ test({ type: 'bytes', expected: '0xc3a40000c3a4',
+ value: '0000000000000000000000000000000000000000000000000000000000000020' +
+ '0000000000000000000000000000000000000000000000000000000000000006' +
+ 'c3a40000c3a40000000000000000000000000000000000000000000000000000'});
+ test({ type: 'bytes32', expected: '0xc3a40000c3a40000000000000000000000000000000000000000000000000000',
+ value: 'c3a40000c3a40000000000000000000000000000000000000000000000000000'});
test({ type: 'int[]', expected: [], value: '0000000000000000000000000000000000000000000000000000000000000020' +
'0000000000000000000000000000000000000000000000000000000000000000'});
test({ type: 'int[]', expected: [new bn(3)], value: '0000000000000000000000000000000000000000000000000000000000000020' +
@@ -49,6 +92,11 @@ describe('lib/solidity/coder', function () {
test({ type: 'ureal', expected: new bn(8.5), value: '0000000000000000000000000000000880000000000000000000000000000000'});
test({ type: 'address', expected: '0x407d73d8a49eeb85d32cf465507dd71d507100c1',
value: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1'});
+ test({ type: 'string', expected: 'welcome to ethereum. welcome to ethereum. welcome to ethereum.',
+ value: '0000000000000000000000000000000000000000000000000000000000000020' +
+ '000000000000000000000000000000000000000000000000000000000000003e' +
+ '77656c636f6d6520746f20657468657265756d2e2077656c636f6d6520746f20' +
+ '657468657265756d2e2077656c636f6d6520746f20657468657265756d2e0000'});
});
});
@@ -62,26 +110,44 @@ describe('lib/solidity/coder', function () {
test({ types: ['int'], expected: [new bn(1)], values: '0000000000000000000000000000000000000000000000000000000000000001'});
- test({ types: ['bytes32', 'int'], expected: ['gavofyork', new bn(5)],
+ test({ types: ['bytes32', 'int'], expected: ['0x6761766f66796f726b0000000000000000000000000000000000000000000000', new bn(5)],
values: '6761766f66796f726b0000000000000000000000000000000000000000000000' +
'0000000000000000000000000000000000000000000000000000000000000005'});
- test({ types: ['int', 'bytes32'], expected: [new bn(5), 'gavofyork'],
+ test({ types: ['int', 'bytes32'], expected: [new bn(5), '0x6761766f66796f726b0000000000000000000000000000000000000000000000'],
values: '0000000000000000000000000000000000000000000000000000000000000005' +
'6761766f66796f726b0000000000000000000000000000000000000000000000'});
- test({ types: ['int', 'bytes', 'int', 'int', 'int', 'int[]'], expected: [new bn(1), 'gavofyork', new bn(2), new bn(3), new bn(4),
+ test({ types: ['int', 'string', 'int', 'int', 'int', 'int[]'], expected: [new bn(1), 'gavofyork', new bn(2), new bn(3), new bn(4),
[new bn(5), new bn(6), new bn(7)]],
values: '0000000000000000000000000000000000000000000000000000000000000001' +
- '00000000000000000000000000000000000000000000000000000000000000c0' +
- '0000000000000000000000000000000000000000000000000000000000000002' +
- '0000000000000000000000000000000000000000000000000000000000000003' +
- '0000000000000000000000000000000000000000000000000000000000000004' +
- '0000000000000000000000000000000000000000000000000000000000000100' +
- '0000000000000000000000000000000000000000000000000000000000000009' +
- '6761766f66796f726b0000000000000000000000000000000000000000000000' +
- '0000000000000000000000000000000000000000000000000000000000000003' +
- '0000000000000000000000000000000000000000000000000000000000000005' +
- '0000000000000000000000000000000000000000000000000000000000000006' +
- '0000000000000000000000000000000000000000000000000000000000000007'});
+ '00000000000000000000000000000000000000000000000000000000000000c0' +
+ '0000000000000000000000000000000000000000000000000000000000000002' +
+ '0000000000000000000000000000000000000000000000000000000000000003' +
+ '0000000000000000000000000000000000000000000000000000000000000004' +
+ '0000000000000000000000000000000000000000000000000000000000000100' +
+ '0000000000000000000000000000000000000000000000000000000000000009' +
+ '6761766f66796f726b0000000000000000000000000000000000000000000000' +
+ '0000000000000000000000000000000000000000000000000000000000000003' +
+ '0000000000000000000000000000000000000000000000000000000000000005' +
+ '0000000000000000000000000000000000000000000000000000000000000006' +
+ '0000000000000000000000000000000000000000000000000000000000000007'});
+ test({ types: ['int', 'bytes', 'int', 'bytes'], expected: [
+ new bn(5),
+ '0x131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b',
+ new bn(3),
+ '0x331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '431a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b',
+ ],
+ values: '0000000000000000000000000000000000000000000000000000000000000005' +
+ '0000000000000000000000000000000000000000000000000000000000000080' +
+ '0000000000000000000000000000000000000000000000000000000000000003' +
+ '00000000000000000000000000000000000000000000000000000000000000e0' +
+ '0000000000000000000000000000000000000000000000000000000000000040' +
+ '131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '0000000000000000000000000000000000000000000000000000000000000040' +
+ '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '431a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'});
});
});
diff --git a/coder.encodeParam.js b/coder.encodeParam.js
index 55ff657c..71ae7804 100644
--- a/coder.encodeParam.js
+++ b/coder.encodeParam.js
@@ -20,10 +20,37 @@ describe('lib/solidity/coder', function () {
test({ type: 'int256', value: 1, expected: '0000000000000000000000000000000000000000000000000000000000000001'});
test({ type: 'int256', value: 16, expected: '0000000000000000000000000000000000000000000000000000000000000010'});
test({ type: 'int256', value: -1, expected: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'});
- test({ type: 'bytes32', value: 'gavofyork', expected: '6761766f66796f726b0000000000000000000000000000000000000000000000'});
- test({ type: 'bytes', value: 'gavofyork', expected: '0000000000000000000000000000000000000000000000000000000000000020' +
+ test({ type: 'bytes32', value: '0x6761766f66796f726b',
+ expected: '6761766f66796f726b0000000000000000000000000000000000000000000000'});
+ test({ type: 'bytes32', value: '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b',
+ expected: '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'});
+ test({ type: 'bytes32', value: '0x02838654a83c213dae3698391eabbd54a5b6e1fb3452bc7fa4ea0dd5c8ce7e29',
+ expected: '02838654a83c213dae3698391eabbd54a5b6e1fb3452bc7fa4ea0dd5c8ce7e29'});
+ test({ type: 'bytes', value: '0x6761766f66796f726b',
+ expected: '0000000000000000000000000000000000000000000000000000000000000020' +
'0000000000000000000000000000000000000000000000000000000000000009' +
'6761766f66796f726b0000000000000000000000000000000000000000000000'});
+ test({ type: 'bytes', value: '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b',
+ expected: '0000000000000000000000000000000000000000000000000000000000000020' +
+ '0000000000000000000000000000000000000000000000000000000000000020' +
+ '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'});
+ test({ type: 'string', value: 'gavofyork', expected: '0000000000000000000000000000000000000000000000000000000000000020' +
+ '0000000000000000000000000000000000000000000000000000000000000009' +
+ '6761766f66796f726b0000000000000000000000000000000000000000000000'});
+ test({ type: 'bytes', value: '0xc3a40000c3a4',
+ expected: '0000000000000000000000000000000000000000000000000000000000000020' +
+ '0000000000000000000000000000000000000000000000000000000000000006' +
+ 'c3a40000c3a40000000000000000000000000000000000000000000000000000'});
+ test({ type: 'bytes32', value: '0xc3a40000c3a4',
+ expected: 'c3a40000c3a40000000000000000000000000000000000000000000000000000'});
+ test({ type: 'string', value: '\xc3\xa4\x00\x00\xc3\xa4',
+ expected: '0000000000000000000000000000000000000000000000000000000000000020' +
+ '0000000000000000000000000000000000000000000000000000000000000006' +
+ 'c3a40000c3a40000000000000000000000000000000000000000000000000000'});
+ test({ type: 'string', value: '\xc3',
+ expected: '0000000000000000000000000000000000000000000000000000000000000020' +
+ '0000000000000000000000000000000000000000000000000000000000000001' +
+ 'c300000000000000000000000000000000000000000000000000000000000000'});
test({ type: 'int[]', value: [], expected: '0000000000000000000000000000000000000000000000000000000000000020' +
'0000000000000000000000000000000000000000000000000000000000000000'});
test({ type: 'int[]', value: [3], expected: '0000000000000000000000000000000000000000000000000000000000000020' +
@@ -48,6 +75,25 @@ describe('lib/solidity/coder', function () {
test({ type: 'ureal', value: 1, expected: '0000000000000000000000000000000100000000000000000000000000000000'});
test({ type: 'ureal', value: 2.125, expected: '0000000000000000000000000000000220000000000000000000000000000000'});
test({ type: 'ureal', value: 8.5, expected: '0000000000000000000000000000000880000000000000000000000000000000'});
+ test({ type: 'bytes', value: '0x131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b',
+ expected: '0000000000000000000000000000000000000000000000000000000000000020' +
+ '0000000000000000000000000000000000000000000000000000000000000040' +
+ '131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'});
+ test({ type: 'bytes', value: '0x131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b',
+ expected: '0000000000000000000000000000000000000000000000000000000000000020' +
+ '0000000000000000000000000000000000000000000000000000000000000060' +
+ '131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'});
+ test({ type: 'string', value: 'welcome to ethereum. welcome to ethereum. welcome to ethereum.',
+ expected: '0000000000000000000000000000000000000000000000000000000000000020' +
+ '000000000000000000000000000000000000000000000000000000000000003e' +
+ '77656c636f6d6520746f20657468657265756d2e2077656c636f6d6520746f20' +
+ '657468657265756d2e2077656c636f6d6520746f20657468657265756d2e0000'});
});
});
@@ -67,8 +113,9 @@ describe('lib/solidity/coder', function () {
test({ types: ['int256'], values: [1], expected: '0000000000000000000000000000000000000000000000000000000000000001'});
test({ types: ['int256'], values: [16], expected: '0000000000000000000000000000000000000000000000000000000000000010'});
test({ types: ['int256'], values: [-1], expected: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'});
- test({ types: ['bytes32'], values: ['gavofyork'], expected: '6761766f66796f726b0000000000000000000000000000000000000000000000'});
- test({ types: ['bytes'], values: ['gavofyork'], expected: '0000000000000000000000000000000000000000000000000000000000000020' +
+ test({ types: ['bytes32'], values: ['0x6761766f66796f726b'],
+ expected: '6761766f66796f726b0000000000000000000000000000000000000000000000'});
+ test({ types: ['string'], values: ['gavofyork'], expected: '0000000000000000000000000000000000000000000000000000000000000020' +
'0000000000000000000000000000000000000000000000000000000000000009' +
'6761766f66796f726b0000000000000000000000000000000000000000000000'});
test({ types: ['int[]'], values: [[3]], expected: '0000000000000000000000000000000000000000000000000000000000000020' +
@@ -91,18 +138,18 @@ describe('lib/solidity/coder', function () {
'0000000000000000000000000000000000000000000000000000000000000002' +
'0000000000000000000000000000000000000000000000000000000000000003' +
'0000000000000000000000000000000000000000000000000000000000000004'});
- test({ types: ['bytes32', 'int'], values: ['gavofyork', 5],
+ test({ types: ['bytes32', 'int'], values: ['0x6761766f66796f726b', 5],
expected: '6761766f66796f726b0000000000000000000000000000000000000000000000' +
'0000000000000000000000000000000000000000000000000000000000000005'});
- test({ types: ['int', 'bytes32'], values: [5, 'gavofyork'],
+ test({ types: ['int', 'bytes32'], values: [5, '0x6761766f66796f726b'],
expected: '0000000000000000000000000000000000000000000000000000000000000005' +
'6761766f66796f726b0000000000000000000000000000000000000000000000'});
- test({ types: ['bytes', 'int'], values: ['gavofyork', 5],
+ test({ types: ['string', 'int'], values: ['gavofyork', 5],
expected: '0000000000000000000000000000000000000000000000000000000000000040' +
'0000000000000000000000000000000000000000000000000000000000000005' +
'0000000000000000000000000000000000000000000000000000000000000009' +
'6761766f66796f726b0000000000000000000000000000000000000000000000'});
- test({ types: ['bytes', 'bool', 'int[]'], values: ['gavofyork', true, [1, 2, 3]],
+ test({ types: ['string', 'bool', 'int[]'], values: ['gavofyork', true, [1, 2, 3]],
expected: '0000000000000000000000000000000000000000000000000000000000000060' +
'0000000000000000000000000000000000000000000000000000000000000001' +
'00000000000000000000000000000000000000000000000000000000000000a0' +
@@ -112,7 +159,7 @@ describe('lib/solidity/coder', function () {
'0000000000000000000000000000000000000000000000000000000000000001' +
'0000000000000000000000000000000000000000000000000000000000000002' +
'0000000000000000000000000000000000000000000000000000000000000003'});
- test({ types: ['bytes', 'int[]'], values: ['gavofyork', [1, 2, 3]],
+ test({ types: ['string', 'int[]'], values: ['gavofyork', [1, 2, 3]],
expected: '0000000000000000000000000000000000000000000000000000000000000040' +
'0000000000000000000000000000000000000000000000000000000000000080' +
'0000000000000000000000000000000000000000000000000000000000000009' +
@@ -121,12 +168,12 @@ describe('lib/solidity/coder', function () {
'0000000000000000000000000000000000000000000000000000000000000001' +
'0000000000000000000000000000000000000000000000000000000000000002' +
'0000000000000000000000000000000000000000000000000000000000000003'});
- test({ types: ['int', 'bytes'], values: [5, 'gavofyork'],
+ test({ types: ['int', 'string'], values: [5, 'gavofyork'],
expected: '0000000000000000000000000000000000000000000000000000000000000005' +
'0000000000000000000000000000000000000000000000000000000000000040' +
'0000000000000000000000000000000000000000000000000000000000000009' +
'6761766f66796f726b0000000000000000000000000000000000000000000000'});
- test({ types: ['int', 'bytes', 'int', 'int', 'int', 'int[]'], values: [1, 'gavofyork', 2, 3, 4, [5, 6, 7]],
+ test({ types: ['int', 'string', 'int', 'int', 'int', 'int[]'], values: [1, 'gavofyork', 2, 3, 4, [5, 6, 7]],
expected: '0000000000000000000000000000000000000000000000000000000000000001' +
'00000000000000000000000000000000000000000000000000000000000000c0' +
'0000000000000000000000000000000000000000000000000000000000000002' +
@@ -139,6 +186,24 @@ describe('lib/solidity/coder', function () {
'0000000000000000000000000000000000000000000000000000000000000005' +
'0000000000000000000000000000000000000000000000000000000000000006' +
'0000000000000000000000000000000000000000000000000000000000000007'});
+ test({ types: ['int', 'bytes', 'int', 'bytes'], values: [
+ 5,
+ '0x131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b',
+ 3,
+ '0x331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '431a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b',
+ ],
+ expected: '0000000000000000000000000000000000000000000000000000000000000005' +
+ '0000000000000000000000000000000000000000000000000000000000000080' +
+ '0000000000000000000000000000000000000000000000000000000000000003' +
+ '00000000000000000000000000000000000000000000000000000000000000e0' +
+ '0000000000000000000000000000000000000000000000000000000000000040' +
+ '131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '0000000000000000000000000000000000000000000000000000000000000040' +
+ '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' +
+ '431a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'});
});
});
diff --git a/contract.js b/contract.js
index 2632575f..71ac2070 100644
--- a/contract.js
+++ b/contract.js
@@ -127,6 +127,147 @@ describe('web3.eth.contract', function () {
});
});
+ it('should create event filter and watch immediately', function (done) {
+ var provider = new FakeHttpProvider();
+ web3.setProvider(provider);
+ web3.reset(); // reset different polls
+ var signature = 'Changed(address,uint256,uint256,uint256)';
+ var step = 0;
+ provider.injectValidation(function (payload) {
+ if (step === 0) {
+ step = 1;
+ provider.injectResult('0x3');
+ assert.equal(payload.jsonrpc, '2.0');
+ assert.equal(payload.method, 'eth_newFilter');
+ assert.deepEqual(payload.params[0], {
+ topics: [
+ '0x' + sha3(signature),
+ '0x0000000000000000000000001234567890123456789012345678901234567890',
+ null
+ ],
+ address: '0x1234567890123456789012345678901234567890'
+ });
+ } else if (step === 1) {
+ step = 2;
+ provider.injectResult([{
+ address: address,
+ topics: [
+ '0x' + sha3(signature),
+ '0x0000000000000000000000001234567890123456789012345678901234567890',
+ '0x0000000000000000000000000000000000000000000000000000000000000001'
+ ],
+ number: 2,
+ data: '0x0000000000000000000000000000000000000000000000000000000000000001' +
+ '0000000000000000000000000000000000000000000000000000000000000008'
+ }]);
+ assert.equal(payload.jsonrpc, '2.0');
+ assert.equal(payload.method, 'eth_getFilterLogs');
+ } else if (step === 2 && utils.isArray(payload)) {
+ provider.injectBatchResults([[{
+ address: address,
+ topics: [
+ '0x' + sha3(signature),
+ '0x0000000000000000000000001234567890123456789012345678901234567890',
+ '0x0000000000000000000000000000000000000000000000000000000000000001'
+ ],
+ number: 2,
+ data: '0x0000000000000000000000000000000000000000000000000000000000000001' +
+ '0000000000000000000000000000000000000000000000000000000000000008'
+ }]]);
+ var r = payload.filter(function (p) {
+ return p.jsonrpc === '2.0' && p.method === 'eth_getFilterChanges' && p.params[0] === '0x3';
+ });
+ assert.equal(r.length > 0, true);
+ }
+ });
+
+ var contract = web3.eth.contract(desc).at(address);
+
+ var res = 0;
+ var event = contract.Changed({from: address}, function(err, result) {
+ assert.equal(result.args.from, address);
+ assert.equal(result.args.amount, 1);
+ assert.equal(result.args.t1, 1);
+ assert.equal(result.args.t2, 8);
+ res++;
+ if (res === 2) {
+ done();
+ }
+ });
+ });
+
+ it('should create all event filter', function (done) {
+ var provider = new FakeHttpProvider();
+ web3.setProvider(provider);
+ web3.reset(); // reset different polls
+ var signature = 'Changed(address,uint256,uint256,uint256)';
+ var step = 0;
+ provider.injectValidation(function (payload) {
+ if (step === 0) {
+ step = 1;
+ provider.injectResult('0x3');
+ assert.equal(payload.jsonrpc, '2.0');
+ assert.equal(payload.method, 'eth_newFilter');
+ assert.deepEqual(payload.params[0], {
+ topics: [
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ address: '0x1234567890123456789012345678901234567890'
+ });
+ } else if (step === 1) {
+ step = 2;
+ provider.injectResult([{
+ address: address,
+ topics: [
+ '0x' + sha3(signature),
+ '0x0000000000000000000000001234567890123456789012345678901234567890',
+ '0x0000000000000000000000000000000000000000000000000000000000000001'
+ ],
+ number: 2,
+ data: '0x0000000000000000000000000000000000000000000000000000000000000001' +
+ '0000000000000000000000000000000000000000000000000000000000000008'
+ }]);
+ assert.equal(payload.jsonrpc, '2.0');
+ assert.equal(payload.method, 'eth_getFilterLogs');
+ } else if (step === 2 && utils.isArray(payload)) {
+ provider.injectBatchResults([[{
+ address: address,
+ topics: [
+ '0x' + sha3(signature),
+ '0x0000000000000000000000001234567890123456789012345678901234567890',
+ '0x0000000000000000000000000000000000000000000000000000000000000001'
+ ],
+ number: 2,
+ data: '0x0000000000000000000000000000000000000000000000000000000000000001' +
+ '0000000000000000000000000000000000000000000000000000000000000008'
+ }]]);
+ var r = payload.filter(function (p) {
+ return p.jsonrpc === '2.0' && p.method === 'eth_getFilterChanges' && p.params[0] === '0x3';
+ });
+ assert.equal(r.length > 0, true);
+ }
+ });
+
+ var contract = web3.eth.contract(desc).at(address);
+
+ var res = 0;
+ var event = contract.allEvents();
+ event.watch(function(err, result) {
+ assert.equal(result.args.from, address);
+ assert.equal(result.args.amount, 1);
+ assert.equal(result.args.t1, 1);
+ assert.equal(result.args.t2, 8);
+ res++;
+ if (res === 2) {
+ done();
+ }
+ });
+ });
+
it('should call constant function', function () {
var provider = new FakeHttpProvider();
web3.setProvider(provider);
diff --git a/polling.js b/polling.js
index 8bd2b041..88cfee4c 100644
--- a/polling.js
+++ b/polling.js
@@ -63,6 +63,42 @@ var testPolling = function (tests) {
var filter = web3[test.protocol].filter.apply(null, test.args);
provider.injectBatchResults([test.secondResult]);
filter.watch(function (err, result) {
+ console.log(err, result);
+
+ if (test.err) {
+ // todo
+ } else {
+ assert.equal(result, test.secondResult[0]);
+ }
+ done();
+
+ });
+ });
+ it('should create && successfully poll filter when passed as callback', function (done) {
+
+ // given
+ var provider = new FakeHttpProvider();
+ web3.setProvider(provider);
+ web3.reset();
+ provider.injectResult(test.firstResult);
+ var step = 0;
+ provider.injectValidation(function (payload) {
+ if (step === 0) {
+ step = 1;
+ assert.equal(payload.jsonrpc, '2.0');
+ assert.equal(payload.method, test.firstPayload.method);
+ assert.deepEqual(payload.params, test.firstPayload.params);
+ } else if (step === 1 && utils.isArray(payload)) {
+ var r = payload.filter(function (p) {
+ return p.jsonrpc === '2.0' && p.method === test.secondPayload.method && p.params[0] === test.firstResult;
+ });
+ assert.equal(r.length > 0, true);
+ }
+
+ });
+
+ // add callback
+ test.args.push(function (err, result) {
if (test.err) {
// todo
} else {
@@ -71,6 +107,10 @@ var testPolling = function (tests) {
done();
});
+
+ // when
+ var filter = web3[test.protocol].filter.apply(null, test.args);
+ provider.injectBatchResults([test.secondResult]);
});
});
});
diff --git a/utils.toHex.js b/utils.toHex.js
index 0a328e34..fdf88cd3 100644
--- a/utils.toHex.js
+++ b/utils.toHex.js
@@ -14,6 +14,7 @@ var tests = [
{ value: '-0x1', expected: '-0x1'},
{ value: '-15', expected: '-0xf'},
{ value: '-0xf', expected: '-0xf'},
+ { value: '0x657468657265756d', expected: '0x657468657265756d'},
{ value: '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd'},
{ value: '-0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '-0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'},
{ value: '-0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '-0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd'},
diff --git a/web3.eth.filter.methods.js b/web3.eth.filter.methods.js
index f40f3d0a..c15d720e 100644
--- a/web3.eth.filter.methods.js
+++ b/web3.eth.filter.methods.js
@@ -14,10 +14,10 @@ var implementation = {
describe('web3.eth.filter', function () {
describe('methods', function () {
- //var f = filter({}, implementation);
+ // var f = filter({}, implementation);
- //u.methodExists(f, 'watch');
- //u.methodExists(f, 'stopWatching');
- //u.methodExists(f, 'get');
+ // u.methodExists(f, 'watch');
+ // u.methodExists(f, 'stopWatching');
+ // u.methodExists(f, 'get');
});
});