126 lines
5.1 KiB
JavaScript
126 lines
5.1 KiB
JavaScript
const { BN, toBN } = require('web3-utils')
|
|
const { expect } = require('chai').use(require('bn-chai')(BN))
|
|
const { parseAMBMessage, strip0x, addTxHashToData } = require('../message')
|
|
const { ORACLE_GAS_PRICE_SPEEDS } = require('../constants')
|
|
|
|
describe('strip0x', () => {
|
|
it('should remove 0x from input', () => {
|
|
// Given
|
|
const input = '0x12345'
|
|
|
|
// When
|
|
const result = strip0x(input)
|
|
|
|
// Then
|
|
expect(result).to.be.equal('12345')
|
|
})
|
|
it('should not modify input if 0x is not present', () => {
|
|
// Given
|
|
const input = '12345'
|
|
|
|
// When
|
|
const result = strip0x(input)
|
|
|
|
// Then
|
|
expect(result).to.be.equal(input)
|
|
})
|
|
})
|
|
describe('addTxHashToData', () => {
|
|
it('should add txHash to encoded data at position 2', () => {
|
|
// Given
|
|
const msgSender = '0x003667154bb32e42bb9e1e6532f19d187fa0082e'
|
|
const msgExecutor = '0xf4bef13f9f4f2b203faf0c3cbbaabe1afe056955'
|
|
const msgGasLimit = '000000000000000000000000000000000000000000000000000000005b877705'
|
|
const msgDataType = '00'
|
|
const msgData = '0xb1591967aed668a4b27645ff40c444892d91bf5951b382995d4d4f6ee3a2ce03'
|
|
const encodedData = `0x${strip0x(msgSender)}${strip0x(msgExecutor)}${msgGasLimit}${msgDataType}${strip0x(msgData)}`
|
|
|
|
const transactionHash = '0xbdceda9d8c94838aca10c687da1411a07b1390e88239c0638cb9cc264219cc10'
|
|
const message = `0x${strip0x(transactionHash)}${strip0x(msgSender)}${strip0x(
|
|
msgExecutor
|
|
)}${msgGasLimit}${msgDataType}${strip0x(msgData)}`
|
|
|
|
// When
|
|
const result = addTxHashToData({ encodedData, transactionHash })
|
|
|
|
// Then
|
|
expect(result).to.be.equal(message)
|
|
})
|
|
})
|
|
describe('parseAMBMessage', () => {
|
|
it('should parse data type 00', () => {
|
|
const msgSender = '0x003667154bb32e42bb9e1e6532f19d187fa0082e'
|
|
const msgExecutor = '0xf4bef13f9f4f2b203faf0c3cbbaabe1afe056955'
|
|
const msgTxHash = '0xbdceda9d8c94838aca10c687da1411a07b1390e88239c0638cb9cc264219cc10'
|
|
const msgGasLimit = '000000000000000000000000000000000000000000000000000000005b877705'
|
|
const msgDataType = '00'
|
|
const msgData = '0xb1591967aed668a4b27645ff40c444892d91bf5951b382995d4d4f6ee3a2ce03'
|
|
const message = `0x${strip0x(msgTxHash)}${strip0x(msgSender)}${strip0x(
|
|
msgExecutor
|
|
)}${msgGasLimit}${msgDataType}${strip0x(msgData)}`
|
|
|
|
// when
|
|
const { sender, executor, txHash, gasLimit, dataType, gasPrice, gasPriceSpeed, data } = parseAMBMessage(message)
|
|
|
|
// then
|
|
expect(sender).to.be.equal(msgSender)
|
|
expect(executor).to.be.equal(msgExecutor)
|
|
expect(txHash).to.be.equal(msgTxHash)
|
|
expect(gasLimit).to.eq.BN(toBN(msgGasLimit))
|
|
expect(dataType).to.be.equal(msgDataType)
|
|
expect(gasPrice).to.be.equal(null)
|
|
expect(gasPriceSpeed).to.be.equal(null)
|
|
expect(data).to.be.equal(msgData)
|
|
})
|
|
it('should parse data type 01', () => {
|
|
const msgSender = '0x003667154bb32e42bb9e1e6532f19d187fa0082e'
|
|
const msgExecutor = '0xf4bef13f9f4f2b203faf0c3cbbaabe1afe056955'
|
|
const msgTxHash = '0xbdceda9d8c94838aca10c687da1411a07b1390e88239c0638cb9cc264219cc10'
|
|
const msgGasLimit = '000000000000000000000000000000000000000000000000000000005b877705'
|
|
const msgDataType = '01'
|
|
const msgGasPrice = '0000000000000000000000000000000000000000000000000000000165a0bc00'
|
|
const msgData = '0xb1591967aed668a4b27645ff40c444892d91bf5951b382995d4d4f6ee3a2ce03'
|
|
const message = `0x${strip0x(msgTxHash)}${strip0x(msgSender)}${strip0x(
|
|
msgExecutor
|
|
)}${msgGasLimit}${msgDataType}${msgGasPrice}${strip0x(msgData)}`
|
|
|
|
// when
|
|
const { sender, executor, txHash, gasLimit, dataType, gasPrice, gasPriceSpeed, data } = parseAMBMessage(message)
|
|
|
|
// then
|
|
expect(sender).to.be.equal(msgSender)
|
|
expect(executor).to.be.equal(msgExecutor)
|
|
expect(txHash).to.be.equal(msgTxHash)
|
|
expect(gasLimit).to.eq.BN(toBN(msgGasLimit))
|
|
expect(dataType).to.be.equal(msgDataType)
|
|
expect(gasPrice).to.eq.BN(toBN(msgGasPrice))
|
|
expect(gasPriceSpeed).to.be.equal(null)
|
|
expect(data).to.be.equal(msgData)
|
|
})
|
|
it('should parse data type 02', () => {
|
|
const msgSender = '0x003667154bb32e42bb9e1e6532f19d187fa0082e'
|
|
const msgExecutor = '0xf4bef13f9f4f2b203faf0c3cbbaabe1afe056955'
|
|
const msgTxHash = '0xbdceda9d8c94838aca10c687da1411a07b1390e88239c0638cb9cc264219cc10'
|
|
const msgGasLimit = '000000000000000000000000000000000000000000000000000000005b877705'
|
|
const msgDataType = '02'
|
|
const msgGasPriceSpeed = '0x03'
|
|
const msgData = '0xb1591967aed668a4b27645ff40c444892d91bf5951b382995d4d4f6ee3a2ce03'
|
|
const message = `0x${strip0x(msgTxHash)}${strip0x(msgSender)}${strip0x(
|
|
msgExecutor
|
|
)}${msgGasLimit}${msgDataType}${strip0x(msgGasPriceSpeed)}${strip0x(msgData)}`
|
|
|
|
// when
|
|
const { sender, executor, txHash, gasLimit, dataType, gasPrice, gasPriceSpeed, data } = parseAMBMessage(message)
|
|
|
|
// then
|
|
expect(sender).to.be.equal(msgSender)
|
|
expect(executor).to.be.equal(msgExecutor)
|
|
expect(txHash).to.be.equal(msgTxHash)
|
|
expect(gasLimit).to.eq.BN(toBN(msgGasLimit))
|
|
expect(dataType).to.be.equal(msgDataType)
|
|
expect(gasPrice).to.be.equal(null)
|
|
expect(gasPriceSpeed).to.be.equal(ORACLE_GAS_PRICE_SPEEDS.STANDARD)
|
|
expect(data).to.be.equal(msgData)
|
|
})
|
|
})
|