Merge development branch
This commit is contained in:
@@ -5,6 +5,11 @@
|
||||
{
|
||||
"note": "Increased BigNumber decimal precision from 20 to 78",
|
||||
"pr": 807
|
||||
},
|
||||
{
|
||||
"note":
|
||||
"Store different ABIs for events with same function signature and different amount of indexed arguments",
|
||||
"pr": 933
|
||||
}
|
||||
],
|
||||
"timestamp": 1534210131
|
||||
|
@@ -20,7 +20,7 @@ import { BigNumber } from './configured_bignumber';
|
||||
* signature from the ABI and attempts to decode the logs using it.
|
||||
*/
|
||||
export class AbiDecoder {
|
||||
private readonly _methodIds: { [signatureHash: string]: EventAbi } = {};
|
||||
private readonly _methodIds: { [signatureHash: string]: { [numIndexedArgs: number]: EventAbi } } = {};
|
||||
/**
|
||||
* Instantiate an AbiDecoder
|
||||
* @param abiArrays An array of contract ABI's
|
||||
@@ -36,10 +36,11 @@ export class AbiDecoder {
|
||||
*/
|
||||
public tryToDecodeLogOrNoop<ArgsType extends DecodedLogArgs>(log: LogEntry): LogWithDecodedArgs<ArgsType> | RawLog {
|
||||
const methodId = log.topics[0];
|
||||
const event = this._methodIds[methodId];
|
||||
if (_.isUndefined(event)) {
|
||||
const numIndexedArgs = log.topics.length - 1;
|
||||
if (_.isUndefined(this._methodIds[methodId]) || _.isUndefined(this._methodIds[methodId][numIndexedArgs])) {
|
||||
return log;
|
||||
}
|
||||
const event = this._methodIds[methodId][numIndexedArgs];
|
||||
const ethersInterface = new ethers.Interface([event]);
|
||||
const decodedParams: DecodedLogArgs = {};
|
||||
let topicsIndex = 1;
|
||||
@@ -58,7 +59,6 @@ export class AbiDecoder {
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
|
||||
let didFailToDecode = false;
|
||||
_.forEach(event.inputs, (param: EventParameter, i: number) => {
|
||||
// Indexed parameters are stored in topics. Non-indexed ones in decodedData
|
||||
@@ -100,7 +100,11 @@ export class AbiDecoder {
|
||||
_.map(abiArray, (abi: AbiDefinition) => {
|
||||
if (abi.type === AbiType.Event) {
|
||||
const topic = ethersInterface.events[abi.name].topics[0];
|
||||
this._methodIds[topic] = abi;
|
||||
const numIndexedArgs = _.reduce(abi.inputs, (sum, input) => (input.indexed ? sum + 1 : sum), 0);
|
||||
this._methodIds[topic] = {
|
||||
...this._methodIds[topic],
|
||||
[numIndexedArgs]: abi,
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@@ -8,4 +8,4 @@ export { logUtils } from './log_utils';
|
||||
export { abiUtils } from './abi_utils';
|
||||
export { NULL_BYTES } from './constants';
|
||||
export { errorUtils } from './error_utils';
|
||||
export { fetchAsync } from './fetchAsync';
|
||||
export { fetchAsync } from './fetch_async';
|
||||
|
Reference in New Issue
Block a user