Updted dist files.

This commit is contained in:
Richard Moore 2017-12-30 14:05:40 -05:00
parent b38a36b2f5
commit b7fc74a99d
No known key found for this signature in database
GPG Key ID: 525F70A6FCABC295
9 changed files with 311 additions and 23 deletions

@ -247,6 +247,27 @@ function Contract(addressOrName, contractInterface, signerOrProvider) {
log.removeListener = function() { log.removeListener = function() {
provider.removeListener(eventInfo.topics, handleEvent); provider.removeListener(eventInfo.topics, handleEvent);
} }
var poller = function(func, key) {
return new Promise(function(resolve, reject) {
function poll() {
provider[func](log[key]).then(function(value) {
if (value == null) {
setTimeout(poll, 1000);
return;
}
resolve(value);
}, function(error) {
reject(error);
});
}
poll();
});
}
log.getBlock = function() { return poller('getBlock', 'blockHash'); }
log.getTransaction = function() { return poller('getTransaction', 'transactionHash'); }
log.getTransactionReceipt = function() { return poller('getTransactionReceipt', 'transactionHash'); }
log.eventSignature = eventInfo.signature; log.eventSignature = eventInfo.signature;
eventCallback.apply(log, Array.prototype.slice.call(result)); eventCallback.apply(log, Array.prototype.slice.call(result));

File diff suppressed because one or more lines are too long

@ -5005,6 +5005,14 @@ utils.defineProperty(EtherscanProvider.prototype, 'perform', function(method, pa
url += apiKey; url += apiKey;
return Provider.fetchJSON(url, null, getResult); return Provider.fetchJSON(url, null, getResult);
case 'getEtherPrice':
if (this.name !== 'homestead') { return Promise.resolve(0.0); }
url += '/api?module=stats&action=ethprice';
url += apiKey;
return Provider.fetchJSON(url, null, getResult).then(function(result) {
return parseFloat(result.ethusd);
});
default: default:
break; break;
} }
@ -5012,6 +5020,38 @@ utils.defineProperty(EtherscanProvider.prototype, 'perform', function(method, pa
return Promise.reject(new Error('not implemented - ' + method)); return Promise.reject(new Error('not implemented - ' + method));
}); });
utils.defineProperty(EtherscanProvider.prototype, 'getHistory', function(addressOrName, startBlock, endBlock) {
var url = this.baseUrl;
var apiKey = '';
if (this.apiKey) { apiKey += '&apikey=' + this.apiKey; }
if (startBlock == null) { startBlock = 0; }
if (endBlock == null) { endBlock = 99999999; }
return this.resolveName(addressOrName).then(function(address) {
url += '/api?module=account&action=txlist&address=' + address;
url += '&fromBlock=' + startBlock;
url += '&endBlock=' + endBlock;
url += '&sort=asc';
return Provider.fetchJSON(url, null, getResult).then(function(result) {
var output = [];
result.forEach(function(tx) {
['contractAddress', 'to'].forEach(function(key) {
if (tx[key] == '') { delete tx[key]; }
});
if (tx.creates == null && tx.contractAddress != null) {
tx.creates = tx.contractAddress;
}
output.push(Provider._formatters.checkTransactionResponse(tx));
});
return output;
});
});
});
module.exports = EtherscanProvider;; module.exports = EtherscanProvider;;
},{"./provider.js":24,"ethers-utils/convert.js":6,"ethers-utils/properties.js":9}],19:[function(require,module,exports){ },{"./provider.js":24,"ethers-utils/convert.js":6,"ethers-utils/properties.js":9}],19:[function(require,module,exports){
@ -5160,6 +5200,13 @@ function InfuraProvider(network, apiAccessToken) {
} }
JsonRpcProvider.inherits(InfuraProvider); JsonRpcProvider.inherits(InfuraProvider);
utils.defineProperty(InfuraProvider.prototype, '_startPending', function() {
console.log('WARNING: INFURA does not support pending filters');
});
utils.defineProperty(InfuraProvider.prototype, '_stopPending', function() {
});
module.exports = InfuraProvider; module.exports = InfuraProvider;
},{"./json-rpc-provider":22,"./provider":24,"ethers-utils/properties.js":9}],22:[function(require,module,exports){ },{"./json-rpc-provider":22,"./provider":24,"ethers-utils/properties.js":9}],22:[function(require,module,exports){
@ -5179,6 +5226,15 @@ var utils = (function() {
} }
})(); })();
// @TODO: Move this to utils
function timer(timeout) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve();
}, timeout);
});
}
function getResult(payload) { function getResult(payload) {
if (payload.error) { if (payload.error) {
var error = new Error(payload.error.message); var error = new Error(payload.error.message);
@ -5322,6 +5378,48 @@ utils.defineProperty(JsonRpcProvider.prototype, 'perform', function(method, para
return Promise.reject(new Error('not implemented - ' + method)); return Promise.reject(new Error('not implemented - ' + method));
}); });
utils.defineProperty(JsonRpcProvider.prototype, '_startPending', function() {
if (this._pendingFilter != null) { return; }
var self = this;
var pendingFilter = this.send('eth_newPendingTransactionFilter', []);
this._pendingFilter = pendingFilter;
pendingFilter.then(function(filterId) {
function poll() {
self.send('eth_getFilterChanges', [ filterId ]).then(function(hashes) {
if (self._pendingFilter != pendingFilter) { return; }
var seq = Promise.resolve();
hashes.forEach(function(hash) {
seq = seq.then(function() {
return self.getTransaction(hash).then(function(tx) {
self.emit('pending', tx);
});
});
});
return seq.then(function() {
return timer(1000);
});
}).then(function() {
if (self._pendingFilter != pendingFilter) {
self.send('eth_uninstallFilter', [ filterIf ]);
return;
}
setTimeout(function() { poll(); }, 0);
});
}
poll();
return filterId;
});
});
utils.defineProperty(JsonRpcProvider.prototype, '_stopPending', function() {
this._pendingFilter = null;
});
module.exports = JsonRpcProvider; module.exports = JsonRpcProvider;
},{"./provider.js":24,"ethers-utils/convert":6,"ethers-utils/properties":9}],23:[function(require,module,exports){ },{"./provider.js":24,"ethers-utils/convert":6,"ethers-utils/properties":9}],23:[function(require,module,exports){
@ -5586,7 +5684,6 @@ function checkTransaction(transaction) {
} }
if (!transaction.raw) { if (!transaction.raw) {
// Very loose providers (e.g. TestRPC) don't provide a signature or raw // Very loose providers (e.g. TestRPC) don't provide a signature or raw
if (transaction.v && transaction.r && transaction.s) { if (transaction.v && transaction.r && transaction.s) {
var raw = [ var raw = [
@ -6305,6 +6402,9 @@ function getEventString(object) {
if (object === 'block') { if (object === 'block') {
return 'block'; return 'block';
} else if (object === 'pending') {
return 'pending';
} else if (utils.isHexString(object)) { } else if (utils.isHexString(object)) {
if (object.length === 66) { if (object.length === 66) {
return 'tx:' + object; return 'tx:' + object;
@ -6332,6 +6432,9 @@ function parseEventString(string) {
} else if (string === 'block') { } else if (string === 'block') {
return {type: 'block'}; return {type: 'block'};
} else if (string === 'pending') {
return {type: 'pending'};
} else if (string.substring(0, 8) === 'address:') { } else if (string.substring(0, 8) === 'address:') {
return {type: 'address', address: string.substring(8)}; return {type: 'address', address: string.substring(8)};
@ -6351,10 +6454,18 @@ function parseEventString(string) {
throw new Error('invalid event string'); throw new Error('invalid event string');
} }
utils.defineProperty(Provider.prototype, '_startPending', function() {
console.log('WARNING: this provider does not support pending events');
});
utils.defineProperty(Provider.prototype, '_stopPending', function() {
});
utils.defineProperty(Provider.prototype, 'on', function(eventName, listener) { utils.defineProperty(Provider.prototype, 'on', function(eventName, listener) {
var key = getEventString(eventName); var key = getEventString(eventName);
if (!this._events[key]) { this._events[key] = []; } if (!this._events[key]) { this._events[key] = []; }
this._events[key].push({eventName: eventName, listener: listener, type: 'on'}); this._events[key].push({eventName: eventName, listener: listener, type: 'on'});
if (key === 'pending') { this._startPending(); }
this.polling = true; this.polling = true;
}); });
@ -6362,6 +6473,7 @@ utils.defineProperty(Provider.prototype, 'once', function(eventName, listener) {
var key = getEventString(eventName); var key = getEventString(eventName);
if (!this._events[key]) { this._events[key] = []; } if (!this._events[key]) { this._events[key] = []; }
this._events[key].push({eventName: eventName, listener: listener, type: 'once'}); this._events[key].push({eventName: eventName, listener: listener, type: 'once'});
if (key === 'pending') { this._startPending(); }
this.polling = true; this.polling = true;
}); });
@ -6386,7 +6498,11 @@ utils.defineProperty(Provider.prototype, 'emit', function(eventName) {
} }
} }
if (listeners.length === 0) { delete this._events[key]; } if (listeners.length === 0) {
delete this._events[key];
if (key === 'pending') { this._stopPending(); }
}
if (this.listenerCount() === 0) { this.polling = false; } if (this.listenerCount() === 0) { this.polling = false; }
}); });
@ -6431,6 +6547,10 @@ utils.defineProperty(Provider.prototype, 'removeListener', function(eventName, l
if (this.listenerCount() === 0) { this.polling = false; } if (this.listenerCount() === 0) { this.polling = false; }
}); });
utils.defineProperty(Provider, '_formatters', {
checkTransactionResponse: checkTransaction
});
module.exports = Provider; module.exports = Provider;
},{"./networks.json":23,"ethers-utils/address":3,"ethers-utils/bignumber":4,"ethers-utils/contract-address":5,"ethers-utils/convert":6,"ethers-utils/namehash":8,"ethers-utils/properties":9,"ethers-utils/rlp":10,"ethers-utils/utf8":13,"inherits":14,"xmlhttprequest":17}]},{},[20]); },{"./networks.json":23,"ethers-utils/address":3,"ethers-utils/bignumber":4,"ethers-utils/contract-address":5,"ethers-utils/convert":6,"ethers-utils/namehash":8,"ethers-utils/properties":9,"ethers-utils/rlp":10,"ethers-utils/utf8":13,"inherits":14,"xmlhttprequest":17}]},{},[20]);

File diff suppressed because one or more lines are too long

@ -11291,13 +11291,16 @@ utils.defineProperty(Wallet, 'verifyMessage', function(message, signature) {
signature = utils.hexlify(signature); signature = utils.hexlify(signature);
if (signature.length != 132) { throw new Error('invalid signature'); } if (signature.length != 132) { throw new Error('invalid signature'); }
var digest = getHash(message); var digest = getHash(message);
var recoveryParam = parseInt(signature.substring(130), 16) - 27;
var recoveryParam = parseInt(signature.substring(130), 16);
if (recoveryParam >= 27) { recoveryParam -= 27; }
if (recoveryParam < 0) { throw new Error('invalid signature'); } if (recoveryParam < 0) { throw new Error('invalid signature'); }
return SigningKey.recover( return SigningKey.recover(
digest, digest,
signature.substring(0, 66), signature.substring(0, 66),
'0x' + signature.substring(66, 130), '0x' + signature.substring(66, 130),
parseInt(signature.substring(130), 16) - 27 recoveryParam
); );
}); });

File diff suppressed because one or more lines are too long

152
dist/ethers.js vendored

@ -6854,6 +6854,27 @@ function Contract(addressOrName, contractInterface, signerOrProvider) {
log.removeListener = function() { log.removeListener = function() {
provider.removeListener(eventInfo.topics, handleEvent); provider.removeListener(eventInfo.topics, handleEvent);
} }
var poller = function(func, key) {
return new Promise(function(resolve, reject) {
function poll() {
provider[func](log[key]).then(function(value) {
if (value == null) {
setTimeout(poll, 1000);
return;
}
resolve(value);
}, function(error) {
reject(error);
});
}
poll();
});
}
log.getBlock = function() { return poller('getBlock', 'blockHash'); }
log.getTransaction = function() { return poller('getTransaction', 'transactionHash'); }
log.getTransactionReceipt = function() { return poller('getTransactionReceipt', 'transactionHash'); }
log.eventSignature = eventInfo.signature; log.eventSignature = eventInfo.signature;
eventCallback.apply(log, Array.prototype.slice.call(result)); eventCallback.apply(log, Array.prototype.slice.call(result));
@ -7979,6 +8000,14 @@ utils.defineProperty(EtherscanProvider.prototype, 'perform', function(method, pa
url += apiKey; url += apiKey;
return Provider.fetchJSON(url, null, getResult); return Provider.fetchJSON(url, null, getResult);
case 'getEtherPrice':
if (this.name !== 'homestead') { return Promise.resolve(0.0); }
url += '/api?module=stats&action=ethprice';
url += apiKey;
return Provider.fetchJSON(url, null, getResult).then(function(result) {
return parseFloat(result.ethusd);
});
default: default:
break; break;
} }
@ -7986,6 +8015,38 @@ utils.defineProperty(EtherscanProvider.prototype, 'perform', function(method, pa
return Promise.reject(new Error('not implemented - ' + method)); return Promise.reject(new Error('not implemented - ' + method));
}); });
utils.defineProperty(EtherscanProvider.prototype, 'getHistory', function(addressOrName, startBlock, endBlock) {
var url = this.baseUrl;
var apiKey = '';
if (this.apiKey) { apiKey += '&apikey=' + this.apiKey; }
if (startBlock == null) { startBlock = 0; }
if (endBlock == null) { endBlock = 99999999; }
return this.resolveName(addressOrName).then(function(address) {
url += '/api?module=account&action=txlist&address=' + address;
url += '&fromBlock=' + startBlock;
url += '&endBlock=' + endBlock;
url += '&sort=asc';
return Provider.fetchJSON(url, null, getResult).then(function(result) {
var output = [];
result.forEach(function(tx) {
['contractAddress', 'to'].forEach(function(key) {
if (tx[key] == '') { delete tx[key]; }
});
if (tx.creates == null && tx.contractAddress != null) {
tx.creates = tx.contractAddress;
}
output.push(Provider._formatters.checkTransactionResponse(tx));
});
return output;
});
});
});
module.exports = EtherscanProvider;; module.exports = EtherscanProvider;;
},{"./provider.js":32,"ethers-utils/convert.js":37,"ethers-utils/properties.js":44}],26:[function(require,module,exports){ },{"./provider.js":32,"ethers-utils/convert.js":37,"ethers-utils/properties.js":44}],26:[function(require,module,exports){
@ -8134,6 +8195,13 @@ function InfuraProvider(network, apiAccessToken) {
} }
JsonRpcProvider.inherits(InfuraProvider); JsonRpcProvider.inherits(InfuraProvider);
utils.defineProperty(InfuraProvider.prototype, '_startPending', function() {
console.log('WARNING: INFURA does not support pending filters');
});
utils.defineProperty(InfuraProvider.prototype, '_stopPending', function() {
});
module.exports = InfuraProvider; module.exports = InfuraProvider;
},{"./json-rpc-provider":29,"./provider":32,"ethers-utils/properties.js":44}],29:[function(require,module,exports){ },{"./json-rpc-provider":29,"./provider":32,"ethers-utils/properties.js":44}],29:[function(require,module,exports){
@ -8153,6 +8221,15 @@ var utils = (function() {
} }
})(); })();
// @TODO: Move this to utils
function timer(timeout) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve();
}, timeout);
});
}
function getResult(payload) { function getResult(payload) {
if (payload.error) { if (payload.error) {
var error = new Error(payload.error.message); var error = new Error(payload.error.message);
@ -8296,6 +8373,48 @@ utils.defineProperty(JsonRpcProvider.prototype, 'perform', function(method, para
return Promise.reject(new Error('not implemented - ' + method)); return Promise.reject(new Error('not implemented - ' + method));
}); });
utils.defineProperty(JsonRpcProvider.prototype, '_startPending', function() {
if (this._pendingFilter != null) { return; }
var self = this;
var pendingFilter = this.send('eth_newPendingTransactionFilter', []);
this._pendingFilter = pendingFilter;
pendingFilter.then(function(filterId) {
function poll() {
self.send('eth_getFilterChanges', [ filterId ]).then(function(hashes) {
if (self._pendingFilter != pendingFilter) { return; }
var seq = Promise.resolve();
hashes.forEach(function(hash) {
seq = seq.then(function() {
return self.getTransaction(hash).then(function(tx) {
self.emit('pending', tx);
});
});
});
return seq.then(function() {
return timer(1000);
});
}).then(function() {
if (self._pendingFilter != pendingFilter) {
self.send('eth_uninstallFilter', [ filterIf ]);
return;
}
setTimeout(function() { poll(); }, 0);
});
}
poll();
return filterId;
});
});
utils.defineProperty(JsonRpcProvider.prototype, '_stopPending', function() {
this._pendingFilter = null;
});
module.exports = JsonRpcProvider; module.exports = JsonRpcProvider;
},{"./provider.js":32,"ethers-utils/convert":37,"ethers-utils/properties":44}],30:[function(require,module,exports){ },{"./provider.js":32,"ethers-utils/convert":37,"ethers-utils/properties":44}],30:[function(require,module,exports){
@ -8585,7 +8704,6 @@ function checkTransaction(transaction) {
} }
if (!transaction.raw) { if (!transaction.raw) {
// Very loose providers (e.g. TestRPC) don't provide a signature or raw // Very loose providers (e.g. TestRPC) don't provide a signature or raw
if (transaction.v && transaction.r && transaction.s) { if (transaction.v && transaction.r && transaction.s) {
var raw = [ var raw = [
@ -9304,6 +9422,9 @@ function getEventString(object) {
if (object === 'block') { if (object === 'block') {
return 'block'; return 'block';
} else if (object === 'pending') {
return 'pending';
} else if (utils.isHexString(object)) { } else if (utils.isHexString(object)) {
if (object.length === 66) { if (object.length === 66) {
return 'tx:' + object; return 'tx:' + object;
@ -9331,6 +9452,9 @@ function parseEventString(string) {
} else if (string === 'block') { } else if (string === 'block') {
return {type: 'block'}; return {type: 'block'};
} else if (string === 'pending') {
return {type: 'pending'};
} else if (string.substring(0, 8) === 'address:') { } else if (string.substring(0, 8) === 'address:') {
return {type: 'address', address: string.substring(8)}; return {type: 'address', address: string.substring(8)};
@ -9350,10 +9474,18 @@ function parseEventString(string) {
throw new Error('invalid event string'); throw new Error('invalid event string');
} }
utils.defineProperty(Provider.prototype, '_startPending', function() {
console.log('WARNING: this provider does not support pending events');
});
utils.defineProperty(Provider.prototype, '_stopPending', function() {
});
utils.defineProperty(Provider.prototype, 'on', function(eventName, listener) { utils.defineProperty(Provider.prototype, 'on', function(eventName, listener) {
var key = getEventString(eventName); var key = getEventString(eventName);
if (!this._events[key]) { this._events[key] = []; } if (!this._events[key]) { this._events[key] = []; }
this._events[key].push({eventName: eventName, listener: listener, type: 'on'}); this._events[key].push({eventName: eventName, listener: listener, type: 'on'});
if (key === 'pending') { this._startPending(); }
this.polling = true; this.polling = true;
}); });
@ -9361,6 +9493,7 @@ utils.defineProperty(Provider.prototype, 'once', function(eventName, listener) {
var key = getEventString(eventName); var key = getEventString(eventName);
if (!this._events[key]) { this._events[key] = []; } if (!this._events[key]) { this._events[key] = []; }
this._events[key].push({eventName: eventName, listener: listener, type: 'once'}); this._events[key].push({eventName: eventName, listener: listener, type: 'once'});
if (key === 'pending') { this._startPending(); }
this.polling = true; this.polling = true;
}); });
@ -9385,7 +9518,11 @@ utils.defineProperty(Provider.prototype, 'emit', function(eventName) {
} }
} }
if (listeners.length === 0) { delete this._events[key]; } if (listeners.length === 0) {
delete this._events[key];
if (key === 'pending') { this._stopPending(); }
}
if (this.listenerCount() === 0) { this.polling = false; } if (this.listenerCount() === 0) { this.polling = false; }
}); });
@ -9430,6 +9567,10 @@ utils.defineProperty(Provider.prototype, 'removeListener', function(eventName, l
if (this.listenerCount() === 0) { this.polling = false; } if (this.listenerCount() === 0) { this.polling = false; }
}); });
utils.defineProperty(Provider, '_formatters', {
checkTransactionResponse: checkTransaction
});
module.exports = Provider; module.exports = Provider;
},{"./networks.json":30,"ethers-utils/address":33,"ethers-utils/bignumber":34,"ethers-utils/contract-address":36,"ethers-utils/convert":37,"ethers-utils/namehash":42,"ethers-utils/properties":44,"ethers-utils/rlp":45,"ethers-utils/utf8":51,"inherits":31,"xmlhttprequest":24}],33:[function(require,module,exports){ },{"./networks.json":30,"ethers-utils/address":33,"ethers-utils/bignumber":34,"ethers-utils/contract-address":36,"ethers-utils/convert":37,"ethers-utils/namehash":42,"ethers-utils/properties":44,"ethers-utils/rlp":45,"ethers-utils/utf8":51,"inherits":31,"xmlhttprequest":24}],33:[function(require,module,exports){
@ -11712,13 +11853,16 @@ utils.defineProperty(Wallet, 'verifyMessage', function(message, signature) {
signature = utils.hexlify(signature); signature = utils.hexlify(signature);
if (signature.length != 132) { throw new Error('invalid signature'); } if (signature.length != 132) { throw new Error('invalid signature'); }
var digest = getHash(message); var digest = getHash(message);
var recoveryParam = parseInt(signature.substring(130), 16) - 27;
var recoveryParam = parseInt(signature.substring(130), 16);
if (recoveryParam >= 27) { recoveryParam -= 27; }
if (recoveryParam < 0) { throw new Error('invalid signature'); } if (recoveryParam < 0) { throw new Error('invalid signature'); }
return SigningKey.recover( return SigningKey.recover(
digest, digest,
signature.substring(0, 66), signature.substring(0, 66),
'0x' + signature.substring(66, 130), '0x' + signature.substring(66, 130),
parseInt(signature.substring(130), 16) - 27 recoveryParam
); );
}); });

6
dist/ethers.min.js vendored

File diff suppressed because one or more lines are too long

@ -10,10 +10,10 @@
"version": "grunt dist" "version": "grunt dist"
}, },
"dependencies": { "dependencies": {
"ethers-contracts": "2.1.8", "ethers-contracts": "2.1.9",
"ethers-providers": "2.1.14", "ethers-providers": "2.1.15",
"ethers-utils": "2.1.8", "ethers-utils": "2.1.8",
"ethers-wallet": "2.1.6" "ethers-wallet": "2.1.7"
}, },
"devDependencies": { "devDependencies": {
"grunt": "^0.4.5", "grunt": "^0.4.5",