Commit 9442d059 authored by elenadimitrova's avatar elenadimitrova Committed by Kelvin Fichter

Fix the watcher encoding/decoding of the message hash

parent beb6c977
...@@ -72,17 +72,39 @@ export class Watcher { ...@@ -72,17 +72,39 @@ export class Watcher {
} }
const msgHashes = [] const msgHashes = []
const sentMessageEventId = ethers.utils.id('SentMessage(address,address,bytes,uint256,uint256)')
const l2CrossDomainMessengerRelayAbi = [
'function relayMessage(address _target,address _sender,bytes memory _message,uint256 _messageNonce)',
]
const l2CrossDomainMessengerRelayinterface = new ethers.utils.Interface(
l2CrossDomainMessengerRelayAbi
)
for (const log of receipt.logs) { for (const log of receipt.logs) {
if ( if (
log.address === layer.messengerAddress && log.address === layer.messengerAddress &&
log.topics[0] === log.topics[0] ===
ethers.utils.id('SentMessage(address,address,bytes,uint256,uint256)') sentMessageEventId
) { ) {
const [, , message, ,] = ethers.utils.defaultAbiCoder.decode( const [sender, message, messageNonce] =
['address', 'address', 'bytes', 'uint256', 'uint256'], ethers.utils.defaultAbiCoder.decode(
log.data ['address', 'bytes', 'uint256'],
log.data
)
const [target] = ethers.utils.defaultAbiCoder.decode(
['address'],
log.topics[1]
)
const encodedMessage =
l2CrossDomainMessengerRelayinterface.encodeFunctionData(
'relayMessage',
[target, sender, message, messageNonce]
)
msgHashes.push(
ethers.utils.solidityKeccak256(['bytes'], [encodedMessage])
) )
msgHashes.push(ethers.utils.solidityKeccak256(['bytes'], [message]))
} }
} }
return msgHashes return msgHashes
...@@ -121,7 +143,9 @@ export class Watcher { ...@@ -121,7 +143,9 @@ export class Watcher {
const successLogs = await layer.provider.getLogs(successFilter) const successLogs = await layer.provider.getLogs(successFilter)
const failureLogs = await layer.provider.getLogs(failureFilter) const failureLogs = await layer.provider.getLogs(failureFilter)
const logs = successLogs.concat(failureLogs) const logs = successLogs.concat(failureLogs)
matches = logs.filter((log: ethers.providers.Log) => log.data === msgHash) matches = logs.filter(
(log: ethers.providers.Log) => log.topics[1] === msgHash
)
// exit loop after first iteration if not polling // exit loop after first iteration if not polling
if (!pollForPending) { if (!pollForPending) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment