73 lines
2.3 KiB
JavaScript
73 lines
2.3 KiB
JavaScript
const web3Utils = require('web3').utils
|
|
const { parseAMBMessage } = require('../../commons')
|
|
|
|
function deliveredMsgNotProcessed(processedList) {
|
|
return deliveredMsg => {
|
|
let msgData = deliveredMsg.returnValues.encodedData
|
|
if (!deliveredMsg.returnValues.messageId) {
|
|
// append tx hash to an old message, where message id was not used
|
|
msgData = deliveredMsg.transactionHash + msgData.slice(2)
|
|
}
|
|
const msg = parseAMBMessage(msgData)
|
|
return (
|
|
processedList.filter(processedMsg => {
|
|
return messageEqualsEvent(msg, processedMsg.returnValues)
|
|
}).length === 0
|
|
)
|
|
}
|
|
}
|
|
|
|
function processedMsgNotDelivered(deliveredList) {
|
|
return processedMsg => {
|
|
return (
|
|
deliveredList.filter(deliveredMsg => {
|
|
let msgData = deliveredMsg.returnValues.encodedData
|
|
if (!deliveredMsg.returnValues.messageId) {
|
|
// append tx hash to an old message, where message id was not used
|
|
msgData = deliveredMsg.transactionHash + msgData.slice(2)
|
|
}
|
|
const msg = parseAMBMessage(msgData)
|
|
return messageEqualsEvent(msg, processedMsg.returnValues)
|
|
}).length === 0
|
|
)
|
|
}
|
|
}
|
|
|
|
function messageEqualsEvent(parsedMsg, event) {
|
|
return (
|
|
web3Utils.toChecksumAddress(parsedMsg.sender) === event.sender &&
|
|
web3Utils.toChecksumAddress(parsedMsg.executor) === event.executor &&
|
|
parsedMsg.messageId === event.messageId // for an old messages, event.messageId is actually a transactionHash
|
|
)
|
|
}
|
|
|
|
/**
|
|
* Normalizes the different event objects to facilitate data processing
|
|
* @param {Object} event
|
|
* @returns {{
|
|
* transactionHash: string,
|
|
* blockNumber: number,
|
|
* referenceTx: string,
|
|
* recipient: string | *,
|
|
* value: *
|
|
* }}
|
|
*/
|
|
const normalizeEventInformation = event => ({
|
|
transactionHash: event.transactionHash,
|
|
blockNumber: event.blockNumber,
|
|
referenceTx: event.returnValues.transactionHash || event.transactionHash,
|
|
recipient: event.returnValues.recipient || event.returnValues.from,
|
|
value: event.returnValues.value
|
|
})
|
|
|
|
const eventWithoutReference = otherSideEvents => e =>
|
|
otherSideEvents.filter(a => a.referenceTx === e.referenceTx && a.recipient === e.recipient && a.value === e.value)
|
|
.length === 0
|
|
|
|
module.exports = {
|
|
deliveredMsgNotProcessed,
|
|
processedMsgNotDelivered,
|
|
normalizeEventInformation,
|
|
eventWithoutReference
|
|
}
|