mirror of
https://github.com/status-im/web3.js.git
synced 2025-02-23 11:38:12 +00:00
Merge branch 'develop' into allevents
Conflicts: dist/web3-light.js dist/web3-light.min.js dist/web3.js dist/web3.js.map dist/web3.min.js test/contract.js
This commit is contained in:
commit
7aca17e071
7569
dist/web3-light.js
vendored
7569
dist/web3-light.js
vendored
File diff suppressed because it is too large
Load Diff
7
dist/web3-light.min.js
vendored
7
dist/web3-light.min.js
vendored
File diff suppressed because one or more lines are too long
7571
dist/web3.js
vendored
7571
dist/web3.js
vendored
File diff suppressed because it is too large
Load Diff
87
dist/web3.js.map
vendored
87
dist/web3.js.map
vendored
File diff suppressed because one or more lines are too long
9
dist/web3.min.js
vendored
9
dist/web3.min.js
vendored
File diff suppressed because one or more lines are too long
@ -1,9 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
// go env doesn't have and need XMLHttpRequest
|
||||
if (typeof XMLHttpRequest === 'undefined') {
|
||||
exports.XMLHttpRequest = {};
|
||||
} else {
|
||||
exports.XMLHttpRequest = XMLHttpRequest; // jshint ignore:line
|
||||
}
|
||||
|
16
lib/web3.js
16
lib/web3.js
@ -86,22 +86,14 @@ web3.version.api = version.version;
|
||||
web3.eth = {};
|
||||
|
||||
/*jshint maxparams:4 */
|
||||
web3.eth.filter = function (fil, eventParams, options, formatter) {
|
||||
|
||||
// if its event, treat it differently
|
||||
// TODO: simplify and remove
|
||||
if (fil._isEvent) {
|
||||
return fil(eventParams, options);
|
||||
}
|
||||
|
||||
// output logs works for blockFilter and pendingTransaction filters?
|
||||
return new Filter(fil, watches.eth(), formatter || formatters.outputLogFormatter);
|
||||
web3.eth.filter = function (fil, callback) {
|
||||
return new Filter(fil, watches.eth(), formatters.outputLogFormatter, callback);
|
||||
};
|
||||
/*jshint maxparams:3 */
|
||||
|
||||
web3.shh = {};
|
||||
web3.shh.filter = function (fil) {
|
||||
return new Filter(fil, watches.shh(), formatters.outputPostFormatter);
|
||||
web3.shh.filter = function (fil, callback) {
|
||||
return new Filter(fil, watches.shh(), formatters.outputPostFormatter, callback);
|
||||
};
|
||||
web3.net = {};
|
||||
web3.db = {};
|
||||
|
@ -20,11 +20,12 @@
|
||||
* @date 2014
|
||||
*/
|
||||
|
||||
var web3 = require('../web3');
|
||||
var sha3 = require('../utils/sha3');
|
||||
var SolidityEvent = require('./event');
|
||||
var formatters = require('./formatters');
|
||||
var utils = require('../utils/utils');
|
||||
var Filter = require('./filter');
|
||||
var watches = require('./watches');
|
||||
|
||||
var AllSolidityEvents = function (json, address) {
|
||||
this._json = json;
|
||||
@ -65,10 +66,10 @@ AllSolidityEvents.prototype.decode = function (data) {
|
||||
return event.decode(data);
|
||||
};
|
||||
|
||||
AllSolidityEvents.prototype.execute = function (options) {
|
||||
AllSolidityEvents.prototype.execute = function (options, callback) {
|
||||
var o = this.encode(options);
|
||||
var formatter = this.decode.bind(this);
|
||||
return web3.eth.filter(o, undefined, undefined, formatter);
|
||||
return new Filter(o, watches.eth(), formatter, callback);
|
||||
};
|
||||
|
||||
AllSolidityEvents.prototype.attachToContract = function (contract) {
|
||||
|
@ -22,9 +22,10 @@
|
||||
|
||||
var utils = require('../utils/utils');
|
||||
var coder = require('../solidity/coder');
|
||||
var web3 = require('../web3');
|
||||
var formatters = require('./formatters');
|
||||
var sha3 = require('../utils/sha3');
|
||||
var Filter = require('./filter');
|
||||
var watches = require('./watches');
|
||||
|
||||
/**
|
||||
* This prototype should be used to create event filters
|
||||
@ -170,10 +171,16 @@ SolidityEvent.prototype.decode = function (data) {
|
||||
* @param {Object} options
|
||||
* @return {Object} filter object
|
||||
*/
|
||||
SolidityEvent.prototype.execute = function (indexed, options) {
|
||||
SolidityEvent.prototype.execute = function (indexed, options, callback) {
|
||||
|
||||
if (utils.isFunction(arguments[arguments.length - 1])) {
|
||||
callback = arguments[arguments.length - 1];
|
||||
options = null;
|
||||
}
|
||||
|
||||
var o = this.encode(indexed, options);
|
||||
var formatter = this.decode.bind(this);
|
||||
return web3.eth.filter(o, undefined, undefined, formatter);
|
||||
return new Filter(o, watches.eth(), formatter, callback);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -127,7 +127,7 @@ var pollFilter = function(self) {
|
||||
|
||||
};
|
||||
|
||||
var Filter = function (options, methods, formatter) {
|
||||
var Filter = function (options, methods, formatter, callback) {
|
||||
var self = this;
|
||||
var implementation = {};
|
||||
methods.forEach(function (method) {
|
||||
@ -140,18 +140,25 @@ var Filter = function (options, methods, formatter) {
|
||||
this.formatter = formatter;
|
||||
this.implementation.newFilter(this.options, function(error, id){
|
||||
if(error) {
|
||||
self.callbacks.forEach(function(callback){
|
||||
callback(error);
|
||||
self.callbacks.forEach(function(cb){
|
||||
cb(error);
|
||||
});
|
||||
} else {
|
||||
self.filterId = id;
|
||||
// get filter logs at start
|
||||
self.callbacks.forEach(function(callback){
|
||||
getLogsAtStart(self, callback);
|
||||
self.callbacks.forEach(function(cb){
|
||||
getLogsAtStart(self, cb);
|
||||
});
|
||||
pollFilter(self);
|
||||
|
||||
|
||||
// start to watch immediately
|
||||
if(callback) {
|
||||
return self.watch(callback);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
Filter.prototype.watch = function (callback) {
|
||||
|
@ -13,7 +13,6 @@
|
||||
"xmlhttprequest": "*"
|
||||
},
|
||||
"browser": {
|
||||
"xmlhttprequest": "./lib/utils/browser-xhr.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"bower": ">=1.3.0",
|
||||
|
@ -127,6 +127,74 @@ 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();
|
||||
|
@ -63,6 +63,8 @@ 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 {
|
||||
@ -72,6 +74,44 @@ var testPolling = function (tests) {
|
||||
|
||||
});
|
||||
});
|
||||
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 {
|
||||
assert.equal(result, test.secondResult[0]);
|
||||
}
|
||||
done();
|
||||
|
||||
});
|
||||
|
||||
// when
|
||||
var filter = web3[test.protocol].filter.apply(null, test.args);
|
||||
provider.injectBatchResults([test.secondResult]);
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user