mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 10:22:23 +00:00
Repurpose fromBlock/toBlock RPC parameters, update web3.js
This commit is contained in:
parent
6d019710ef
commit
b68c3ddfef
4 changed files with 90 additions and 69 deletions
|
|
@ -22,6 +22,7 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"math/big"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
|
|
@ -475,13 +476,11 @@ func returnLogs(logs []*types.Log) []*types.Log {
|
|||
// UnmarshalJSON sets *args fields with given data.
|
||||
func (args *FilterCriteria) UnmarshalJSON(data []byte) error {
|
||||
type input struct {
|
||||
BlockHash *common.Hash `json:"blockHash"`
|
||||
FromBlock *rpc.BlockNumber `json:"fromBlock"`
|
||||
FromBlockHash *common.Hash `json:"fromBlockHash"`
|
||||
ToBlock *rpc.BlockNumber `json:"toBlock"`
|
||||
ToBlockHash *common.Hash `json:"toBlockHash"`
|
||||
Addresses interface{} `json:"address"`
|
||||
Topics []interface{} `json:"topics"`
|
||||
BlockHash *common.Hash `json:"blockHash"`
|
||||
FromBlock *string `json:"fromBlock"`
|
||||
ToBlock *string `json:"toBlock"`
|
||||
Addresses interface{} `json:"address"`
|
||||
Topics []interface{} `json:"topics"`
|
||||
}
|
||||
|
||||
var raw input
|
||||
|
|
@ -497,16 +496,20 @@ func (args *FilterCriteria) UnmarshalJSON(data []byte) error {
|
|||
args.BlockHash = raw.BlockHash
|
||||
} else {
|
||||
if raw.FromBlock != nil {
|
||||
args.FromBlock = big.NewInt(raw.FromBlock.Int64())
|
||||
}
|
||||
if raw.FromBlockHash != nil {
|
||||
args.FromBlockHash = raw.FromBlockHash
|
||||
if strings.HasPrefix(*raw.FromBlock, "0x") {
|
||||
hash := common.HexToHash(*raw.FromBlock)
|
||||
args.FromBlockHash = &hash
|
||||
} else {
|
||||
args.FromBlock.UnmarshalJSON([]byte(*raw.FromBlock))
|
||||
}
|
||||
}
|
||||
if raw.ToBlock != nil {
|
||||
args.ToBlock = big.NewInt(raw.ToBlock.Int64())
|
||||
}
|
||||
if raw.ToBlockHash != nil {
|
||||
args.ToBlockHash = raw.ToBlockHash
|
||||
if strings.HasPrefix(*raw.ToBlock, "0x") {
|
||||
hash := common.HexToHash(*raw.ToBlock)
|
||||
args.ToBlockHash = &hash
|
||||
} else {
|
||||
args.ToBlock.UnmarshalJSON([]byte(*raw.ToBlock))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -200,6 +200,10 @@ func (f *Filter) Logs(ctx context.Context) ([]*types.Log, error) {
|
|||
}
|
||||
}
|
||||
|
||||
if end.Number.Cmp(begin.Number) < 0 {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
ancestor, mainChain, err := f.findCommonAncestor(ctx, begin, end)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
@ -287,7 +291,7 @@ func (f *Filter) indexedLogs(ctx context.Context, begin, end uint64) ([]*types.L
|
|||
func (f *Filter) unindexedLogs(ctx context.Context, begin, end common.Hash) ([]*types.Log, error) {
|
||||
var logs []*types.Log
|
||||
|
||||
for begin != end {
|
||||
for {
|
||||
header, err := f.backend.HeaderByHash(ctx, end)
|
||||
if header == nil || err != nil {
|
||||
return logs, err
|
||||
|
|
@ -297,6 +301,9 @@ func (f *Filter) unindexedLogs(ctx context.Context, begin, end common.Hash) ([]*
|
|||
return logs, err
|
||||
}
|
||||
logs = append(logs, found...)
|
||||
if begin == end {
|
||||
break
|
||||
}
|
||||
end = header.ParentHash
|
||||
}
|
||||
return logs, nil
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1192,7 +1192,7 @@ module.exports = SolidityTypeInt;
|
|||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
/**
|
||||
* @file param.js
|
||||
* @author Marek Kotewicz <marek@ethdev.com>
|
||||
* @date 2015
|
||||
|
|
@ -1211,7 +1211,7 @@ var SolidityParam = function (value, offset) {
|
|||
|
||||
/**
|
||||
* This method should be used to get length of params's dynamic part
|
||||
*
|
||||
*
|
||||
* @method dynamicPartLength
|
||||
* @returns {Number} length of dynamic part (in bytes)
|
||||
*/
|
||||
|
|
@ -1239,7 +1239,7 @@ SolidityParam.prototype.withOffset = function (offset) {
|
|||
* @param {SolidityParam} result of combination
|
||||
*/
|
||||
SolidityParam.prototype.combine = function (param) {
|
||||
return new SolidityParam(this.value + param.value);
|
||||
return new SolidityParam(this.value + param.value);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -1271,8 +1271,8 @@ SolidityParam.prototype.offsetAsBytes = function () {
|
|||
*/
|
||||
SolidityParam.prototype.staticPart = function () {
|
||||
if (!this.isDynamic()) {
|
||||
return this.value;
|
||||
}
|
||||
return this.value;
|
||||
}
|
||||
return this.offsetAsBytes();
|
||||
};
|
||||
|
||||
|
|
@ -1304,7 +1304,7 @@ SolidityParam.prototype.encode = function () {
|
|||
* @returns {String}
|
||||
*/
|
||||
SolidityParam.encodeList = function (params) {
|
||||
|
||||
|
||||
// updating offsets
|
||||
var totalOffset = params.length * 32;
|
||||
var offsetParams = params.map(function (param) {
|
||||
|
|
@ -1746,13 +1746,13 @@ if (typeof XMLHttpRequest === 'undefined') {
|
|||
|
||||
/**
|
||||
* Utils
|
||||
*
|
||||
*
|
||||
* @module utils
|
||||
*/
|
||||
|
||||
/**
|
||||
* Utility functions
|
||||
*
|
||||
*
|
||||
* @class [utils] config
|
||||
* @constructor
|
||||
*/
|
||||
|
|
@ -1819,7 +1819,7 @@ module.exports = {
|
|||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
/**
|
||||
* @file sha3.js
|
||||
* @author Marek Kotewicz <marek@ethdev.com>
|
||||
* @date 2015
|
||||
|
|
@ -2739,7 +2739,7 @@ module.exports = AllSolidityEvents;
|
|||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
/**
|
||||
* @file batch.js
|
||||
* @author Marek Kotewicz <marek@ethdev.com>
|
||||
* @date 2015
|
||||
|
|
@ -2784,7 +2784,7 @@ Batch.prototype.execute = function () {
|
|||
requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result));
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = Batch;
|
||||
|
|
@ -2971,7 +2971,7 @@ var ContractFactory = function (eth, abi) {
|
|||
*/
|
||||
this.new = function () {
|
||||
/*jshint maxcomplexity: 7 */
|
||||
|
||||
|
||||
var contract = new Contract(this.eth, this.abi);
|
||||
|
||||
// parse arguments
|
||||
|
|
@ -3119,7 +3119,7 @@ module.exports = ContractFactory;
|
|||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
/**
|
||||
* @file errors.js
|
||||
* @author Marek Kotewicz <marek@ethdev.com>
|
||||
* @date 2015
|
||||
|
|
@ -3394,7 +3394,7 @@ var extend = function (web3) {
|
|||
}
|
||||
};
|
||||
|
||||
ex.formatters = formatters;
|
||||
ex.formatters = formatters;
|
||||
ex.utils = utils;
|
||||
ex.Method = Method;
|
||||
ex.Property = Property;
|
||||
|
|
@ -4425,7 +4425,7 @@ module.exports = HttpProvider;
|
|||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
/**
|
||||
* @file iban.js
|
||||
* @author Marek Kotewicz <marek@ethdev.com>
|
||||
* @date 2015
|
||||
|
|
@ -4625,7 +4625,7 @@ Iban.prototype.address = function () {
|
|||
var base36 = this._iban.substr(4);
|
||||
var asBn = new BigNumber(base36, 36);
|
||||
return padLeft(asBn.toString(16), 20);
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
};
|
||||
|
|
@ -4670,7 +4670,7 @@ var IpcProvider = function (path, net) {
|
|||
var _this = this;
|
||||
this.responseCallbacks = {};
|
||||
this.path = path;
|
||||
|
||||
|
||||
this.connection = net.connect({path: this.path});
|
||||
|
||||
this.connection.on('error', function(e){
|
||||
|
|
@ -4680,7 +4680,7 @@ var IpcProvider = function (path, net) {
|
|||
|
||||
this.connection.on('end', function(){
|
||||
_this._timeout();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// LISTEN FOR CONNECTION RESPONSES
|
||||
|
|
@ -4719,7 +4719,7 @@ Will parse the response and make an array out of it.
|
|||
IpcProvider.prototype._parseResponse = function(data) {
|
||||
var _this = this,
|
||||
returnValues = [];
|
||||
|
||||
|
||||
// DE-CHUNKER
|
||||
var dechunkedData = data
|
||||
.replace(/\}[\n\r]?\{/g,'}|--|{') // }{
|
||||
|
|
@ -4823,7 +4823,7 @@ IpcProvider.prototype.send = function (payload) {
|
|||
try {
|
||||
result = JSON.parse(data);
|
||||
} catch(e) {
|
||||
throw errors.InvalidResponse(data);
|
||||
throw errors.InvalidResponse(data);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
|
@ -4998,7 +4998,7 @@ Method.prototype.extractCallback = function (args) {
|
|||
|
||||
/**
|
||||
* Should be called to check if the number of arguments is correct
|
||||
*
|
||||
*
|
||||
* @method validateArgs
|
||||
* @param {Array} arguments
|
||||
* @throws {Error} if it is not
|
||||
|
|
@ -5011,7 +5011,7 @@ Method.prototype.validateArgs = function (args) {
|
|||
|
||||
/**
|
||||
* Should be called to format input args of method
|
||||
*
|
||||
*
|
||||
* @method formatInput
|
||||
* @param {Array}
|
||||
* @return {Array}
|
||||
|
|
@ -5065,7 +5065,7 @@ Method.prototype.attachToObject = function (obj) {
|
|||
obj[name[0]] = obj[name[0]] || {};
|
||||
obj[name[0]][name[1]] = func;
|
||||
} else {
|
||||
obj[name[0]] = func;
|
||||
obj[name[0]] = func;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -5128,8 +5128,8 @@ var DB = function (web3) {
|
|||
this._requestManager = web3._requestManager;
|
||||
|
||||
var self = this;
|
||||
|
||||
methods().forEach(function(method) {
|
||||
|
||||
methods().forEach(function(method) {
|
||||
method.attachToObject(self);
|
||||
method.setRequestManager(web3._requestManager);
|
||||
});
|
||||
|
|
@ -5431,6 +5431,12 @@ var methods = function () {
|
|||
params: 0
|
||||
});
|
||||
|
||||
var getLogs = new Method({
|
||||
name: 'getLogs',
|
||||
call: 'eth_getLogs',
|
||||
params: 1
|
||||
})
|
||||
|
||||
return [
|
||||
getBalance,
|
||||
getStorageAt,
|
||||
|
|
@ -5454,7 +5460,8 @@ var methods = function () {
|
|||
compileLLL,
|
||||
compileSerpent,
|
||||
submitWork,
|
||||
getWork
|
||||
getWork,
|
||||
getLogs
|
||||
];
|
||||
};
|
||||
|
||||
|
|
@ -5554,7 +5561,7 @@ var Net = function (web3) {
|
|||
|
||||
var self = this;
|
||||
|
||||
properties().forEach(function(p) {
|
||||
properties().forEach(function(p) {
|
||||
p.attachToObject(self);
|
||||
p.setRequestManager(web3._requestManager);
|
||||
});
|
||||
|
|
@ -6113,7 +6120,7 @@ module.exports = {
|
|||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
/**
|
||||
* @file namereg.js
|
||||
* @author Marek Kotewicz <marek@ethdev.com>
|
||||
* @date 2015
|
||||
|
|
@ -6300,7 +6307,7 @@ module.exports = Property;
|
|||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
/**
|
||||
* @file requestmanager.js
|
||||
* @author Jeffrey Wilcke <jeff@ethdev.com>
|
||||
* @author Marek Kotewicz <marek@ethdev.com>
|
||||
|
|
@ -6367,7 +6374,7 @@ RequestManager.prototype.sendAsync = function (data, callback) {
|
|||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
|
||||
if (!Jsonrpc.isValidResponse(result)) {
|
||||
return callback(errors.InvalidResponse(result));
|
||||
}
|
||||
|
|
@ -6400,7 +6407,7 @@ RequestManager.prototype.sendBatch = function (data, callback) {
|
|||
}
|
||||
|
||||
callback(err, results);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -6504,7 +6511,7 @@ RequestManager.prototype.poll = function () {
|
|||
}
|
||||
|
||||
var payload = Jsonrpc.toBatchPayload(pollsData);
|
||||
|
||||
|
||||
// map the request id to they poll id
|
||||
var pollsIdMap = {};
|
||||
payload.forEach(function(load, index){
|
||||
|
|
@ -6534,7 +6541,7 @@ RequestManager.prototype.poll = function () {
|
|||
} else
|
||||
return false;
|
||||
}).filter(function (result) {
|
||||
return !!result;
|
||||
return !!result;
|
||||
}).filter(function (result) {
|
||||
var valid = Jsonrpc.isValidResponse(result);
|
||||
if (!valid) {
|
||||
|
|
@ -6609,16 +6616,16 @@ var pollSyncing = function(self) {
|
|||
|
||||
self.callbacks.forEach(function (callback) {
|
||||
if (self.lastSyncState !== sync) {
|
||||
|
||||
|
||||
// call the callback with true first so the app can stop anything, before receiving the sync data
|
||||
if(!self.lastSyncState && utils.isObject(sync))
|
||||
callback(null, true);
|
||||
|
||||
|
||||
// call on the next CPU cycle, so the actions of the sync stop can be processes first
|
||||
setTimeout(function() {
|
||||
callback(null, sync);
|
||||
}, 0);
|
||||
|
||||
|
||||
self.lastSyncState = sync;
|
||||
}
|
||||
});
|
||||
|
|
@ -6673,7 +6680,7 @@ module.exports = IsSyncing;
|
|||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
/**
|
||||
* @file transfer.js
|
||||
* @author Marek Kotewicz <marek@ethdev.com>
|
||||
* @date 2015
|
||||
|
|
@ -6692,7 +6699,7 @@ var exchangeAbi = require('../contracts/SmartExchange.json');
|
|||
* @param {Function} callback, callback
|
||||
*/
|
||||
var transfer = function (eth, from, to, value, callback) {
|
||||
var iban = new Iban(to);
|
||||
var iban = new Iban(to);
|
||||
if (!iban.isValid()) {
|
||||
throw new Error('invalid iban address');
|
||||
}
|
||||
|
|
@ -6700,7 +6707,7 @@ var transfer = function (eth, from, to, value, callback) {
|
|||
if (iban.isDirect()) {
|
||||
return transferToAddress(eth, from, iban.address(), value, callback);
|
||||
}
|
||||
|
||||
|
||||
if (!callback) {
|
||||
var address = eth.icapNamereg().addr(iban.institution());
|
||||
return deposit(eth, from, address, value, iban.client());
|
||||
|
|
@ -6709,7 +6716,7 @@ var transfer = function (eth, from, to, value, callback) {
|
|||
eth.icapNamereg().addr(iban.institution(), function (err, address) {
|
||||
return deposit(eth, from, address, value, iban.client(), callback);
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue