2019-05-08 16:12:02 +03:00
|
|
|
require('dotenv').config()
|
|
|
|
const eventsInfo = require('./utils/events')
|
2019-09-18 22:45:13 +03:00
|
|
|
const { processedMsgNotDelivered, deliveredMsgNotProcessed } = require('./utils/message')
|
|
|
|
const { BRIDGE_MODES } = require('../commons')
|
2019-05-08 16:12:02 +03:00
|
|
|
|
|
|
|
function compareDepositsHome(foreign) {
|
|
|
|
return homeDeposit => {
|
|
|
|
return (
|
|
|
|
foreign.filter(foreignDeposit => {
|
|
|
|
return (
|
|
|
|
foreignDeposit.returnValues.transactionHash === homeDeposit.transactionHash &&
|
|
|
|
foreignDeposit.returnValues.recipient === homeDeposit.returnValues.recipient &&
|
|
|
|
foreignDeposit.returnValues.value === homeDeposit.returnValues.value
|
|
|
|
)
|
|
|
|
}).length === 0
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function compareDepositsForeign(home) {
|
|
|
|
return foreignDeposit => {
|
|
|
|
return (
|
|
|
|
home.filter(homeDeposit => {
|
|
|
|
return (
|
|
|
|
homeDeposit.transactionHash === foreignDeposit.returnValues.transactionHash &&
|
|
|
|
homeDeposit.returnValues.recipient === foreignDeposit.returnValues.recipient &&
|
|
|
|
homeDeposit.returnValues.value === foreignDeposit.returnValues.value
|
|
|
|
)
|
|
|
|
}).length === 0
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function compareTransferHome(foreign) {
|
|
|
|
return homeDeposit => {
|
|
|
|
return (
|
|
|
|
foreign.filter(foreignDeposit => {
|
|
|
|
return (
|
|
|
|
homeDeposit.returnValues.transactionHash === foreignDeposit.transactionHash &&
|
|
|
|
homeDeposit.returnValues.recipient === foreignDeposit.returnValues.from &&
|
|
|
|
homeDeposit.returnValues.value === foreignDeposit.returnValues.value
|
|
|
|
)
|
|
|
|
}).length === 0
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function compareTransferForeign(home) {
|
|
|
|
return foreignDeposit => {
|
|
|
|
return (
|
|
|
|
home.filter(homeDeposit => {
|
|
|
|
return (
|
|
|
|
foreignDeposit.transactionHash === homeDeposit.returnValues.transactionHash &&
|
|
|
|
foreignDeposit.returnValues.from === homeDeposit.returnValues.recipient &&
|
|
|
|
foreignDeposit.returnValues.value === homeDeposit.returnValues.value
|
|
|
|
)
|
|
|
|
}).length === 0
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function main() {
|
2019-09-18 22:45:13 +03:00
|
|
|
const {
|
|
|
|
homeToForeignRequests,
|
|
|
|
homeToForeignConfirmations,
|
|
|
|
foreignToHomeConfirmations,
|
|
|
|
foreignToHomeRequests,
|
|
|
|
isExternalErc20,
|
|
|
|
bridgeMode
|
|
|
|
} = await eventsInfo()
|
2019-05-08 16:12:02 +03:00
|
|
|
|
2019-09-18 22:45:13 +03:00
|
|
|
if (bridgeMode === BRIDGE_MODES.ARBITRARY_MESSAGE) {
|
|
|
|
return {
|
|
|
|
home: {
|
|
|
|
deliveredMsgNotProcessedInForeign: homeToForeignRequests.filter(
|
|
|
|
deliveredMsgNotProcessed(homeToForeignConfirmations)
|
|
|
|
),
|
|
|
|
processedMsgNotDeliveredInForeign: foreignToHomeConfirmations.filter(
|
|
|
|
processedMsgNotDelivered(foreignToHomeRequests)
|
|
|
|
)
|
|
|
|
},
|
|
|
|
foreign: {
|
|
|
|
deliveredMsgNotProcessedInHome: foreignToHomeRequests.filter(
|
|
|
|
deliveredMsgNotProcessed(foreignToHomeConfirmations)
|
|
|
|
),
|
|
|
|
processedMsgNotDeliveredInHome: homeToForeignConfirmations.filter(
|
|
|
|
processedMsgNotDelivered(homeToForeignRequests)
|
|
|
|
)
|
|
|
|
},
|
|
|
|
lastChecked: Math.floor(Date.now() / 1000)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
const onlyInHomeDeposits = homeToForeignRequests.filter(compareDepositsHome(homeToForeignConfirmations))
|
|
|
|
const onlyInForeignDeposits = homeToForeignConfirmations
|
|
|
|
.concat([])
|
|
|
|
.filter(compareDepositsForeign(homeToForeignRequests))
|
2019-05-08 16:12:02 +03:00
|
|
|
|
2019-09-18 22:45:13 +03:00
|
|
|
const onlyInHomeWithdrawals = isExternalErc20
|
|
|
|
? foreignToHomeConfirmations.filter(compareTransferHome(foreignToHomeRequests))
|
|
|
|
: foreignToHomeConfirmations.filter(compareDepositsForeign(foreignToHomeRequests))
|
|
|
|
const onlyInForeignWithdrawals = isExternalErc20
|
|
|
|
? foreignToHomeRequests.filter(compareTransferForeign(foreignToHomeConfirmations))
|
|
|
|
: foreignToHomeRequests.filter(compareDepositsHome(foreignToHomeConfirmations))
|
2019-05-08 16:12:02 +03:00
|
|
|
|
2019-09-18 22:45:13 +03:00
|
|
|
return {
|
|
|
|
onlyInHomeDeposits,
|
|
|
|
onlyInForeignDeposits,
|
|
|
|
onlyInHomeWithdrawals,
|
|
|
|
onlyInForeignWithdrawals,
|
|
|
|
lastChecked: Math.floor(Date.now() / 1000)
|
|
|
|
}
|
2019-05-08 16:12:02 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = main
|