47 lines
1.2 KiB
JavaScript
47 lines
1.2 KiB
JavaScript
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
|
|
})
|
|
|
|
function parseAMBMessage(message) {
|
|
message = strip0x(message)
|
|
|
|
const messageId = `0x${message.slice(0, 64)}`
|
|
const sender = `0x${message.slice(64, 104)}`
|
|
const executor = `0x${message.slice(104, 144)}`
|
|
const dataType = parseInt(message.slice(156, 158), 16)
|
|
|
|
return {
|
|
sender,
|
|
executor,
|
|
messageId,
|
|
dataType,
|
|
decodedDataType: decodeAMBDataType(dataType)
|
|
}
|
|
}
|
|
|
|
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)
|
|
}
|
|
|
|
module.exports = {
|
|
strip0x,
|
|
parseAMBMessage,
|
|
normalizeAMBMessageEvent
|
|
}
|