tokenbridge/commons/message.js

47 lines
1.2 KiB
JavaScript
Raw Normal View History

2019-10-21 15:57:28 +03:00
function strip0x(input) {
return input.replace(/^0x/, '')
}
/**
* Decodes the datatype byte from the AMB message.
* First (the most significant bit) denotes if the message should be forwarded to the manual lane.
* @param dataType: number datatype of the received AMB message.
* @return {{manualLane: boolean}}
*/
const decodeAMBDataType = dataType => ({
manualLane: (dataType & 128) === 128
})
2019-10-21 15:57:28 +03:00
function parseAMBMessage(message) {
message = strip0x(message)
const messageId = `0x${message.slice(0, 64)}`
2019-10-21 15:57:28 +03:00
const sender = `0x${message.slice(64, 104)}`
const executor = `0x${message.slice(104, 144)}`
const dataType = parseInt(message.slice(156, 158), 16)
2019-10-21 15:57:28 +03:00
return {
sender,
executor,
messageId,
dataType,
decodedDataType: decodeAMBDataType(dataType)
2019-10-21 15:57:28 +03:00
}
}
const normalizeAMBMessageEvent = e => {
let msgData = e.returnValues.encodedData
if (!e.returnValues.messageId) {
// append tx hash to an old message, where message id was not used
// for old messages, e.messageId is a corresponding transactionHash
msgData = e.transactionHash + msgData.slice(2)
}
return parseAMBMessage(msgData)
}
2019-10-21 15:57:28 +03:00
module.exports = {
strip0x,
2019-10-21 15:57:28 +03:00
parseAMBMessage,
normalizeAMBMessageEvent
2019-10-21 15:57:28 +03:00
}