Using decodeLogs should parse logs correctly, see here an example
Throws with an error like this if there’s a bytes field in the log:
Error: data out-of-bounds (length=36, offset=64, code=BUFFER_OVERRUN, version=abi/5.0.0-beta.153)
at Logger.makeError (node_modules/@ethersproject/logger/lib/index.js:178:21)
at Logger.throwError (node_modules/@ethersproject/logger/lib/index.js:187:20)
at Reader._peekBytes (node_modules/@ethersproject/abi/lib/coders/abstract-coder.js:135:20)
at Reader.readBytes (node_modules/@ethersproject/abi/lib/coders/abstract-coder.js:146:26)
at BytesCoder.DynamicBytesCoder.decode (node_modules/@ethersproject/abi/lib/coders/bytes.js:30:23)
at BytesCoder.decode (node_modules/@ethersproject/abi/lib/coders/bytes.js:41:81)
at node_modules/@ethersproject/abi/lib/coders/array.js:77:31
at Array.forEach (<anonymous>)
at Object.unpack (node_modules/@ethersproject/abi/lib/coders/array.js:71:12)
at TupleCoder.decode (node_modules/@ethersproject/abi/lib/coders/tuple.js:39:49)
at AbiCoder.decode (node_modules/@ethersproject/abi/lib/abi-coder.js:93:22)
at ABICoder.decodeParameters (node_modules/web3-eth-abi/src/index.js:322:30)
at ABICoder.decodeLog (node_modules/web3-eth-abi/src/index.js:376:52)
at eventLogs.map.log (node_modules/@aragon/contract-helpers-test/events.js:18:20)
at Array.map (<anonymous>)
at decodeEvents (node_modules/@aragon/contract-helpers-test/events.js:16:20)
at getDeepEventLogs (test/lock_and_call.js:9:10)
at getDeepEventArgument (test/lock_and_call.js:12:16)
at checkCallbackLog (test/lock_and_call.js:50:18)
at Context.it (test/lock_and_call.js:59:7)
at process._tickCallback (internal/process/next_tick.js:68:7)
Call that function mentioned above with a log like this one:
event LogLockCallback(uint256 amount, uint256 allowance, bytes data);
Copied above.
npm: 6.13.4
Node: v10.15.0
web3: 1.2.8
OS: PureOS 9.0
Related issue: https://github.com/aragon/contract-helpers/pull/32
Hey @bingen thanks for reporting, I will take a closer look this afternoon to see if we have tests for decoding logs with bytes data and if it’s working properly.
Meanwhile, could you share what the raw data is for the bytes field in your example above? It seems the ethers abi package is erroring out on “data out-of-bounds”.
Yes, it was:
Thanks!
hey @bingen, it does look like we have tests for decodeLog that include bytes examples and they are passing ok: https://github.com/ethereum/web3.js/blob/1.x/test/eth.abi.decodeLog.js
When I try to add a test with your example data:
{
params: [[{
type: 'bytes',
name: 'data'
}], '0x00000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000040cbd8c2f'],
result: {
'data': '0x00000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000040cbd8c2f',
"__length__": 1
}
}
I get:
1) decodeLog
should convert correctly:
data: overflow (fault="overflow", operation="toNumber", value="2213609288845146193920", code=NUMERIC_FAULT, version=bignumber/5.0.0-beta.138)
Hm, but that data is for the whole log, which has 2 uints and 1 bytes fields, so it’s:
uint -> 0000000000000000000000000000000000000000000000000000000000000028
uint -> 0000000000000000000000000000000000000000000000000000000000000078
bytes -> 000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000040cbd8c2f
@bingen ah ok thanks that makes more sense. Ok I can reproduce the same error now with data out-of-bounds for the bytes data. Do you know what your bytes data is supposed to represent or convert to?
It’s supposed to be a function signature: https://github.com/aragon/staking/blob/master/test/lock_and_call.js#L27
@bingen great thanks, ok looks like there may be some issue in the transport of the event because the function signature for receiveLock(uint256,uint256,bytes) is 0xabe985cb which doesn't seem to line up with the bytes data above, I am seeing it encode as:
{
params: ['bytes', '0xabe985cb'],
result: '0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004abe985cb00000000000000000000000000000000000000000000000000000000'
}
It could be an encoding/decoding issue in the middle, will have to keep digging deeper on this one. We upgraded our abi coder dependency in 1.2.8 from ethers v4 to v5 so we are especially sensitive to any issues.
Oh, yes, sorry, that’s because I changed its name, it used to be lockCallback(uint256,uint256,bytes)
:grimacing:
@bingen It's possible this is a compatibility issue with Truffle which remains on Web3 1.2.1 (and Ethers V4).
In your example No this is fine.CALLBACK_DATA is passed to a truffle-contract method (and encoded there) but decoded using 1.2.8 in the test helpers.
@bingen
Have tried to make a reproduction case for this using code from aragon contract-helpers, Truffle and Web3 1.2.8 and was not able to trigger the error.
Could you look at https://github.com/cgewecke/web3-issue-3544 and see if it models the bug correctly?
One notable difference from what's reported here is that when I have a solidity event like
event lockCallback(uint256 amount, uint256 allowance, bytes data);
...and inspect the receipt from a transaction that fires it, the raw log data looks like this:
0x0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000004abe985cb00000000000000000000000000000000000000000000000000000000
It's right padded. Is it possible your data was getting mangled somewhere after you got the receipt?
@bingen Apologies, did you have a chance to look at this again? We'd really like to fix this ASAP if it's happening but at the moment are having difficulty reproducing it from a real example.
Hey, sorry, I didn’t have time to look at this, I’ll try tomorrow.
Hm, this is weird, I tired a fresh clone of the repo using this new branch where I just upgrade to web3 1.2.8 and it worked:
git clone [email protected]:aragon/staking.git
cd staking
git checkout web3_issue
npm i
npm t test/lock_and_call.js
Besides, your example above looks good to me.
Maybe it’s some other package that I had in my local node_modules that was causing the issue, so I guess we can close this issue.
Sorry for the distraction!
Sweet! Thanks @bingen.
Hey, sorry to bother with this again, but there was a problem in the branch I linked above: @aragon/contract-helpers-test was still using 1.2.5:
$ npm ls web3-utils
@aragon/[email protected] /tmp/staking
├─┬ @aragon/[email protected] invalid
│ └── [email protected] extraneous
├─┬ [email protected]
│ └── [email protected] deduped
└── [email protected]
I have fixed it, so it’s all 1.2.8 now:
$ npm ls web3-utils
@aragon/[email protected] /tmp/staking
├─┬ @aragon/[email protected]
│ └── [email protected] deduped
├─┬ [email protected]
│ └── [email protected] deduped
└── [email protected]
And I see those errors again. You should see them too if you follow the steps mentioned above:
git clone [email protected]:aragon/staking.git
cd staking
git checkout web3_issue
npm i
npm t test/lock_and_call.js
The errors are:
1) Contract: Staking app, Locking and calling
allows lock manager and locks
and calls lock manager, with just the signature:
Error: data out-of-bounds (length=36, offset=64, code=BUFFER_OVERRUN, version=abi/5.0.0-beta.153)
at Logger.makeError (node_modules/@ethersproject/logger/lib/index.js:178:21)
at Logger.throwError (node_modules/@ethersproject/logger/lib/index.js:187:20)
at Reader._peekBytes (node_modules/@ethersproject/abi/lib/coders/abstract-coder.js:135:20)
at Reader.readBytes (node_modules/@ethersproject/abi/lib/coders/abstract-coder.js:146:26)
at BytesCoder.DynamicBytesCoder.decode (node_modules/@ethersproject/abi/lib/coders/bytes.js:30:23)
at BytesCoder.decode (node_modules/@ethersproject/abi/lib/coders/bytes.js:41:81)
at node_modules/@ethersproject/abi/lib/coders/array.js:77:31
at Array.forEach (<anonymous>)
at Object.unpack (node_modules/@ethersproject/abi/lib/coders/array.js:71:12)
at TupleCoder.decode (node_modules/@ethersproject/abi/lib/coders/tuple.js:39:49)
at AbiCoder.decode (node_modules/@ethersproject/abi/lib/abi-coder.js:93:22)
at ABICoder.decodeParameters (node_modules/web3-eth-abi/src/index.js:322:30)
at ABICoder.decodeLog (node_modules/web3-eth-abi/src/index.js:376:52)
at eventLogs.map.log (node_modules/@aragon/contract-helpers-test/events.js:18:20)
at Array.map (<anonymous>)
at decodeEvents (node_modules/@aragon/contract-helpers-test/events.js:16:20)
at getDeepEventLogs (test/lock_and_call.js:9:10)
at getDeepEventArgument (test/lock_and_call.js:12:16)
at checkCallbackLog (test/lock_and_call.js:50:18)
at Context.it (test/lock_and_call.js:59:7)
at process._tickCallback (internal/process/next_tick.js:68:7)
2) Contract: Staking app, Locking and calling
allows lock manager and locks
and calls lock manager, with added data:
Error: data out-of-bounds (length=68, offset=96, code=BUFFER_OVERRUN, version=abi/5.0.0-beta.153)
at Logger.makeError (node_modules/@ethersproject/logger/lib/index.js:178:21)
at Logger.throwError (node_modules/@ethersproject/logger/lib/index.js:187:20)
at Reader._peekBytes (node_modules/@ethersproject/abi/lib/coders/abstract-coder.js:135:20)
at Reader.readBytes (node_modules/@ethersproject/abi/lib/coders/abstract-coder.js:146:26)
at BytesCoder.DynamicBytesCoder.decode (node_modules/@ethersproject/abi/lib/coders/bytes.js:30:23)
at BytesCoder.decode (node_modules/@ethersproject/abi/lib/coders/bytes.js:41:81)
at node_modules/@ethersproject/abi/lib/coders/array.js:77:31
at Array.forEach (<anonymous>)
at Object.unpack (node_modules/@ethersproject/abi/lib/coders/array.js:71:12)
at TupleCoder.decode (node_modules/@ethersproject/abi/lib/coders/tuple.js:39:49)
at AbiCoder.decode (node_modules/@ethersproject/abi/lib/abi-coder.js:93:22)
at ABICoder.decodeParameters (node_modules/web3-eth-abi/src/index.js:322:30)
at ABICoder.decodeLog (node_modules/web3-eth-abi/src/index.js:376:52)
at eventLogs.map.log (node_modules/@aragon/contract-helpers-test/events.js:18:20)
at Array.map (<anonymous>)
at decodeEvents (node_modules/@aragon/contract-helpers-test/events.js:16:20)
at getDeepEventLogs (test/lock_and_call.js:9:10)
at getDeepEventArgument (test/lock_and_call.js:12:16)
at checkCallbackLog (test/lock_and_call.js:50:18)
at Context.it (test/lock_and_call.js:65:7)
at process._tickCallback (internal/process/next_tick.js:68:7)
3) Contract: Staking app, Locking and calling
allows lock manager without locking
and calls lock manager, with just the signature:
Error: data out-of-bounds (length=36, offset=64, code=BUFFER_OVERRUN, version=abi/5.0.0-beta.153)
at Logger.makeError (node_modules/@ethersproject/logger/lib/index.js:178:21)
at Logger.throwError (node_modules/@ethersproject/logger/lib/index.js:187:20)
at Reader._peekBytes (node_modules/@ethersproject/abi/lib/coders/abstract-coder.js:135:20)
at Reader.readBytes (node_modules/@ethersproject/abi/lib/coders/abstract-coder.js:146:26)
at BytesCoder.DynamicBytesCoder.decode (node_modules/@ethersproject/abi/lib/coders/bytes.js:30:23)
at BytesCoder.decode (node_modules/@ethersproject/abi/lib/coders/bytes.js:41:81)
at node_modules/@ethersproject/abi/lib/coders/array.js:77:31
at Array.forEach (<anonymous>)
at Object.unpack (node_modules/@ethersproject/abi/lib/coders/array.js:71:12)
at TupleCoder.decode (node_modules/@ethersproject/abi/lib/coders/tuple.js:39:49)
at AbiCoder.decode (node_modules/@ethersproject/abi/lib/abi-coder.js:93:22)
at ABICoder.decodeParameters (node_modules/web3-eth-abi/src/index.js:322:30)
at ABICoder.decodeLog (node_modules/web3-eth-abi/src/index.js:376:52)
at eventLogs.map.log (node_modules/@aragon/contract-helpers-test/events.js:18:20)
at Array.map (<anonymous>)
at decodeEvents (node_modules/@aragon/contract-helpers-test/events.js:16:20)
at getDeepEventLogs (test/lock_and_call.js:9:10)
at getDeepEventArgument (test/lock_and_call.js:12:16)
at checkCallbackLog (test/lock_and_call.js:50:18)
at Context.it (test/lock_and_call.js:87:7)
at process._tickCallback (internal/process/next_tick.js:68:7)
4) Contract: Staking app, Locking and calling
allows lock manager without locking
and calls lock manager, with added data:
Error: data out-of-bounds (length=68, offset=96, code=BUFFER_OVERRUN, version=abi/5.0.0-beta.153)
at Logger.makeError (node_modules/@ethersproject/logger/lib/index.js:178:21)
at Logger.throwError (node_modules/@ethersproject/logger/lib/index.js:187:20)
at Reader._peekBytes (node_modules/@ethersproject/abi/lib/coders/abstract-coder.js:135:20)
at Reader.readBytes (node_modules/@ethersproject/abi/lib/coders/abstract-coder.js:146:26)
at BytesCoder.DynamicBytesCoder.decode (node_modules/@ethersproject/abi/lib/coders/bytes.js:30:23)
at BytesCoder.decode (node_modules/@ethersproject/abi/lib/coders/bytes.js:41:81)
at node_modules/@ethersproject/abi/lib/coders/array.js:77:31
at Array.forEach (<anonymous>)
at Object.unpack (node_modules/@ethersproject/abi/lib/coders/array.js:71:12)
at TupleCoder.decode (node_modules/@ethersproject/abi/lib/coders/tuple.js:39:49)
at AbiCoder.decode (node_modules/@ethersproject/abi/lib/abi-coder.js:93:22)
at ABICoder.decodeParameters (node_modules/web3-eth-abi/src/index.js:322:30)
at ABICoder.decodeLog (node_modules/web3-eth-abi/src/index.js:376:52)
at eventLogs.map.log (node_modules/@aragon/contract-helpers-test/events.js:18:20)
at Array.map (<anonymous>)
at decodeEvents (node_modules/@aragon/contract-helpers-test/events.js:16:20)
at getDeepEventLogs (test/lock_and_call.js:9:10)
at getDeepEventArgument (test/lock_and_call.js:12:16)
at checkCallbackLog (test/lock_and_call.js:50:18)
at Context.it (test/lock_and_call.js:93:7)
at process._tickCallback (internal/process/next_tick.js:68:7)
I’m going to try to see if I can provide any more info about it.
PS: I don’t see the option to reopen the issue, maybe you can do it if you think it’s a web3.js problem.
I see some difference between the logged data in your test and what I get adding the same console.log’s:
Let’s break it down:
0000000000000000000000000000000000000000000000000000000000000005
0000000000000000000000000000000000000000000000000000000000000005
0000000000000000000000000000000000000000000000000000000000000060
0000000000000000000000000000000000000000000000000000000000000004
abe985cb00000000000000000000000000000000000000000000000000000000
vs
0000000000000000000000000000000000000000000000000000000000000028
0000000000000000000000000000000000000000000000000000000000000078
0000000000000000000000000000000000000000000000000000000000000060
0000000000000000000000000000000000000000000000000000000000000004
abe985cb
So it seems the problem is I’m missing those trailing zeroes, and hence the buffer overrun.
@bingen Was able to trigger the error in the minimal reproduction at https://github.com/cgewecke/web3-issue-3544 with this commit by
public to external.It's not reproducible in solc 0.5.x and the underlying issue was documented here: https://github.com/ethereum/solidity/issues/3493.
So...on one hand the Ethers ABICoder upgrade has broken what used to work, on the other hand this discrepancy in the way solc encodes based on function visibility is weird.
What is your view of this?
Oops, yes, what a bug. I wonder why it was working with previous versions if the logs were coming different. Do you know how that difference was being handled?
On our side, we can keep on pinning v1.2.5, but I guess it would be useful to document it somewhere, as I expect this may hit some other projects still using solc 0.4.x
Thanks for the update!
Hi! I'm having the same issue when trying to decode uniswap 2 pair contracts swap logs (solidity 0.5.16)
with web3.eth.abi.decodeLog on 1.2.8 or 1.2.9 I get the error:
UnhandledPromiseRejectionWarning: null: value out of range (argument="value", value=20, code=INVALID_ARGUMENT, version=bytes/5.0.0-beta.138)
This is working fine on version 1.2.7
Data field:
0x00000000000000000000000000000000000000000000003635c9adc5dea00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d437ab7505b8492
Full Error Log:
(node:16552) UnhandledPromiseRejectionWarning: null: value out of range (argument="value", value=20, code=INVALID_ARGUMENT, version=bytes/5.0.0-beta.138)
at Logger.makeError (C:\dev\logs\node_modules\@ethersproject\logger\lib\index.js:178:21)
at Logger.throwError (C:\dev\logs\node_modules\@ethersproject\logger\lib\index.js:187:20)
at Logger.throwArgumentError (C:\dev\logs\node_modules\@ethersproject\logger\lib\index.js:190:21)
at Object.hexZeroPad (C:\dev\logs\node_modules\@ethersproject\bytes\lib\index.js:263:16)
at AddressCoder.decode (C:\dev\logs\node_modules\web3-eth-abi\node_modules\@ethersproject\abi\lib\coders\address.js:34:45)
at C:\dev\logs\node_modules\web3-eth-abi\node_modules\@ethersproject\abi\lib\coders\array.js:93:31
at Array.forEach (<anonymous>)
at Object.unpack (C:\dev\logs\node_modules\web3-eth-abi\node_modules\@ethersproject\abi\lib\coders\array.js:71:12)
at TupleCoder.decode (C:\dev\logs\node_modules\web3-eth-abi\node_modules\@ethersproject\abi\lib\coders\tuple.js:39:49)
at AbiCoder.decode (C:\dev\logs\node_modules\web3-eth-abi\node_modules\@ethersproject\abi\lib\abi-coder.js:93:22)
at ABICoder.decodeParameters (C:\dev\logs\node_modules\web3-eth-abi\src\index.js:341:30)
at ABICoder.decodeParameter (C:\dev\logs\node_modules\web3-eth-abi\src\index.js:319:17)
at C:\dev\logs\node_modules\web3-eth-abi\src\index.js:386:25
at Array.forEach (<anonymous>)
at ABICoder.decodeLog (C:\dev\logs\node_modules\web3-eth-abi\src\index.js:382:12)
at txlogs (C:\dev\logs\tests.js:681:36)
(node:16552) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:16552) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
@geomad Thanks for reporting.
Could you provide more specific info about:
Are you using this?
Event signatures in the etherscan contract referenced above:
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
Solidity version is 0.5.16
@cgewecke Exactly. I'm trying to decode the Swap event Log above.
@geomad
Was unable to reproduce your error while interacting with the deployed Uniswap contracts. For example, decoding the Swap event for mainnet tx:
"0x4f19e76573f363956e9e356fdce0b65b6610f6c6663f22b1c21171f05363698c"
const abi = [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount0In",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount1In",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount0Out",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount1Out",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
}
];
const tx = "0x4f19e76573f363956e9e356fdce0b65b6610f6c6663f22b1c21171f05363698c";
const web3 = new Web3('https://mainnet.infura.io/v3/<INFURA_ID>');
const receipt = await web3.eth.getTransactionReceipt(tx);
const result = web3.eth.abi.decodeLog(
abi,
receipt.logs[4].data,
receipt.logs[4].topics.slice(1)
);
> Result {
'0': '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a',
'1': '0',
'2': '1040000000000000000',
'3': '801266216497835763803',
'4': '0',
'5': '0xaaa2e80AB7D7b3C216af30Fc8165E7823e74cc62',
__length__: 6,
sender: '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a',
amount0In: '0',
amount1In: '1040000000000000000',
amount0Out: '801266216497835763803',
amount1Out: '0',
to: '0xaaa2e80AB7D7b3C216af30Fc8165E7823e74cc62'
}
Does this model your case correctly?
@cgewecke this example works for me aswell. It seems like .slice(1) on the topics array did the trick and solved my issue aswell. While versions before 1.2.8 worked without slicing it, newer don't, so code that is written this way needs to be updated! Thanks for helping me resolving the issue!
So...on one hand the Ethers ABICoder upgrade has broken what used to work, on the other hand this discrepancy in the way solc encodes based on function visibility is weird.
What is your view of this?
To be clear: the old Ethers v4 ABICoder did not have this problem, since it was the one used in <[email protected]?
I'd love @ricmoo's opinion on this as well, but since it's a somewhat prevalent solidity bug (lots of contracts were compiled with 0.4, especially older proxies), it is one of these weird edge cases to factor in when building and testing an ABI encoder.
To be clear: the old Ethers v4 ABICoder did not have this problem, since it was the one used in <[email protected]?
@sohkai Yes, that's correct. Web3 switched to @ethersproject/abi@^5.0.0-beta.153 in 1.2.8
The old coder didn’t have a problem with it because of a bug. :p
For context, that was a very old version of the ABI coder, which was fixed and that fix got brought along into v5. :)
If that fix had been around sooner, the bug would have hopefully been caught before any contract went to production. Alas, my bad. :(
The new error recovery API also cannot handle this, since it is a buffer overrun and not just a data type issue.
One solution would be to sanitize the data before feeding it to the abi coder, but this could also break the revert reason, which is also important.
Can we get an idea of how many contracts and their popularity are impacted? There isn’t really a good/clean/obvious fix, since it is literally wrong data being emitted from the contract.
One solution would be to sanitize the data before feeding it to the abi coder, but this could also break the revert reason, which is also important.
Lacking context, but would it be naive to only do this sanitization when decoding logs (since I believe the bug may only be apparent there)?
Can we get an idea of how many contracts and their popularity are impacted? There isn’t really a good/clean/obvious fix, since it is literally wrong data being emitted from the contract.
I haven't done the homework (not sure if there's a good automated way of detecting this), but not being able to handle historic event data is my main concern.
If I'm correct, it looks like the bug is present only in these conditions:
external functionsexternal functions log an event with non-indexed data from calldata (that must be a dynamic length data type, e.g. string or bytes? For example, this old OpenZeppelin contract should not be affected?)bytes or strings and logged directly from calldataWhile we (Aragon) are likely in the minority as our users still use 0.4.24 contracts and we haven't migrated them to 0.5+, this problem would still exist when we fetch old event data from contracts that were affected.
Update: discussion about this is proceeding at ethers 891.
For the moment it doesn't look like there's a simple fix (e.g: right padding) we can make here that works for events with more than one dynamically sized data type.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 7 days if no further activity occurs. Thank you for your contributions
I've added support in ethers 5.0.12 for supporting legacy Solidity 0.4 external event data. I believe web3 depends on the abi package directly, in which case web3 should upgrade to @ethersproject/abi version 5.0.4.
For more details, please see https://github.com/ethers-io/ethers.js/issues/891.
Most helpful comment
I've added support in ethers 5.0.12 for supporting legacy Solidity 0.4 external event data. I believe web3 depends on the abi package directly, in which case web3 should upgrade to
@ethersproject/abiversion5.0.4.For more details, please see https://github.com/ethers-io/ethers.js/issues/891.