Skip to content

Commit

Permalink
Add toBytesX helper functions
Browse files Browse the repository at this point in the history
  • Loading branch information
shark0der committed Jan 6, 2023
1 parent c2bacb8 commit ac9e95a
Show file tree
Hide file tree
Showing 11 changed files with 66 additions and 70 deletions.
13 changes: 12 additions & 1 deletion lib/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,16 @@ const readline = require('readline');
const { BN, toBN } = require('web3').utils;
const { BigNumber } = require('ethers');

const toBytes = (string, size = 32) => {
assert(string.length <= size, `String is too long to fit in ${size} bytes`);
return '0x' + Buffer.from(string.padEnd(size, '\0')).toString('hex');
};

const toBytes2 = s => toBytes(s, 2);
const toBytes4 = s => toBytes(s, 4);
const toBytes8 = s => toBytes(s, 8);

const hex = string => '0x' + Buffer.from(string).toString('hex');
const toBytes8 = s => '0x' + Buffer.from(s).toString('hex').padEnd(16, '0');
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));

const filterArgsKeys = args => {
Expand Down Expand Up @@ -77,6 +85,9 @@ module.exports = {
bnEqual,
filterArgsKeys,
hex,
toBytes,
toBytes2,
toBytes4,
toBytes8,
sleep,
to,
Expand Down
6 changes: 3 additions & 3 deletions test/unit/Pool/addAsset.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const { ethers } = require('hardhat');
const { expect } = require('chai');
const { AddressZero, WeiPerEther } = ethers.constants;
const { parseEther } = ethers.utils;
const { hex } = require('../utils').helpers;
const { toBytes8 } = require('../utils').helpers;

describe('addAsset', function () {
it('reverts when not called by goverance', async function () {
Expand Down Expand Up @@ -92,7 +92,7 @@ describe('addAsset', function () {
[18, 18, 18],
);

await pool.connect(governance).updateAddressParameters(hex('PRC_FEED'), priceFeedOracle.address);
await pool.connect(governance).updateAddressParameters(toBytes8('PRC_FEED'), priceFeedOracle.address);

await pool.connect(governance).addAsset(token.address, 18, '1', '2', '3', true);
await token.mint(pool.address, parseEther('100'));
Expand Down Expand Up @@ -125,7 +125,7 @@ describe('addAsset', function () {
[18, 18, 18, 18],
);

await pool.connect(governance).updateAddressParameters(hex('PRC_FEED'), priceFeedOracle.address);
await pool.connect(governance).updateAddressParameters(toBytes8('PRC_FEED'), priceFeedOracle.address);

// Cover asset
{
Expand Down
37 changes: 15 additions & 22 deletions test/unit/Pool/getPoolValueInEth.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
const { ethers } = require('hardhat');
const { expect } = require('chai');
const { hex } = require('../utils').helpers;

const { toBytes8 } = require('../utils').helpers;

const { BigNumber } = ethers;
const { parseEther } = ethers.utils;

describe('getPoolValueInEth', function () {
it('gets total value of ETH and DAI assets in the pool', async function () {
const { pool, mcr, chainlinkDAI, dai } = this;
const {
nonMembers: [nonMember],
} = this.accounts;
const [nonMember] = this.accounts.nonMembers;

const initialAssetValue = BigNumber.from('210959924071154460525457');
const mcrEth = BigNumber.from('162424730681679380000000');
const ethToDaiRate = BigNumber.from((394.59 * 1e18).toString());
const daiToEthRate = BigNumber.from(10).pow(BigNumber.from(36)).div(ethToDaiRate);
const ethToDaiRate = parseEther('394.59');
const daiToEthRate = BigNumber.from(10).pow(36).div(ethToDaiRate);
await chainlinkDAI.setLatestAnswer(daiToEthRate);

await mcr.setMCR(mcrEth);
Expand All @@ -30,42 +30,35 @@ describe('getPoolValueInEth', function () {

it('shouldnt fail when sent an EOA address', async function () {
const { pool, dai, stETH, chainlinkDAI, chainlinkSteth } = this;
const {
governanceContracts: [governance],
} = this.accounts;
const [governance] = this.accounts.governanceContracts;

const [ERC20Mock, ChainlinkAggregatorMock, PriceFeedOracle] = await Promise.all([
ethers.getContractFactory('ERC20Mock'),
ethers.getContractFactory('ChainlinkAggregatorMock'),
ethers.getContractFactory('PriceFeedOracle'),
]);
const ERC20Mock = await ethers.getContractFactory('ERC20Mock');
const ChainlinkAggregatorMock = await ethers.getContractFactory('ChainlinkAggregatorMock');
const PriceFeedOracle = await ethers.getContractFactory('PriceFeedOracle');

const otherToken = await ERC20Mock.deploy();
const chainlinkNewAsset = await ChainlinkAggregatorMock.deploy();
await chainlinkNewAsset.setLatestAnswer(BigNumber.from((1e18).toString()));
await chainlinkNewAsset.setLatestAnswer(parseEther('1'));

const priceFeedOracle = await PriceFeedOracle.deploy(
[dai.address, stETH.address, otherToken.address],
[chainlinkDAI.address, chainlinkSteth.address, chainlinkNewAsset.address],
[18, 18, 18],
);

await pool.connect(governance).updateAddressParameters(hex('PRC_FEED'), priceFeedOracle.address);

await pool.connect(governance).updateAddressParameters(toBytes8('PRC_FEED'), priceFeedOracle.address);
await pool.connect(governance).addAsset(otherToken.address, 18, parseEther('10'), parseEther('100'), 1000, false);
await pool.getPoolValueInEth();
});

it('includes swapValue in the calculation', async function () {
const { pool } = this;
const {
defaultSender,
governanceContracts: [governance],
} = this.accounts;
const [governance] = this.accounts.governanceContracts;
const { defaultSender } = this.accounts;

const oldPoolValue = await pool.getPoolValueInEth();

await pool.connect(governance).updateAddressParameters(hex('SWP_OP'.padEnd(8, '\0')), defaultSender.address);
await pool.connect(governance).updateAddressParameters(toBytes8('SWP_OP'), defaultSender.address);
await pool.setSwapValue(parseEther('1'));

const swapValue = await pool.swapValue();
Expand Down
7 changes: 3 additions & 4 deletions test/unit/Pool/removeAsset.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
const { ethers } = require('hardhat');
const { expect } = require('chai');
const { hex } = require('../utils').helpers;
const { BigNumber } = ethers;
const { toBytes8 } = require('../utils').helpers;
const { parseEther } = ethers.utils;

const ETH = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';
Expand Down Expand Up @@ -46,15 +45,15 @@ describe('removeAsset', function () {
const investmentToken = await ERC20Mock.deploy();

const chainlinkNewAsset = await ChainlinkAggregatorMock.deploy();
await chainlinkNewAsset.setLatestAnswer(BigNumber.from((1e18).toString()));
await chainlinkNewAsset.setLatestAnswer(parseEther('1'));

const priceFeedOracle = await PriceFeedOracle.deploy(
[dai.address, stETH.address, coverToken.address, investmentToken.address],
[chainlinkDAI.address, chainlinkSteth.address, chainlinkNewAsset.address, chainlinkNewAsset.address],
[18, 18, 18, 18],
);

await pool.connect(governance).updateAddressParameters(hex('PRC_FEED'), priceFeedOracle.address);
await pool.connect(governance).updateAddressParameters(toBytes8('PRC_FEED'), priceFeedOracle.address);

{
// add token as cover asset
Expand Down
6 changes: 3 additions & 3 deletions test/unit/Pool/setSwapDetailsLastSwapTime.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const { ethers } = require('hardhat');
const { BigNumber } = ethers;
const { parseEther } = ethers.utils;

const { hex } = require('../utils').helpers;
const { toBytes8 } = require('../utils').helpers;

describe('setSwapDetailsLastSwapTime', function () {
before(async function () {
Expand All @@ -27,7 +27,7 @@ describe('setSwapDetailsLastSwapTime', function () {
[18, 18, 18],
);

await pool.connect(governance).updateAddressParameters(hex('PRC_FEED'), priceFeedOracle.address);
await pool.connect(governance).updateAddressParameters(toBytes8('PRC_FEED'), priceFeedOracle.address);

this.otherToken = otherToken;
});
Expand All @@ -45,7 +45,7 @@ describe('setSwapDetailsLastSwapTime', function () {

const lastSwapTime = 11512651;

await pool.connect(governance).updateAddressParameters(hex('SWP_OP'.padEnd(8, '\0')), member.address);
await pool.connect(governance).updateAddressParameters(toBytes8('SWP_OP'), member.address);

await pool.connect(member).setSwapDetailsLastSwapTime(otherToken.address, lastSwapTime);

Expand Down
6 changes: 3 additions & 3 deletions test/unit/Pool/setSwapValue.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const { ethers } = require('hardhat');
const { expect } = require('chai');
const { BigNumber } = ethers;
const { hex } = require('../utils').helpers;
const { toBytes8 } = require('../utils').helpers;

describe('setSwapValue', function () {
it('is only callabe by swap operator', async function () {
Expand All @@ -15,7 +15,7 @@ describe('setSwapValue', function () {
await expect(pool.setSwapValue(BigNumber.from('123'))).to.be.revertedWith('Pool: Not swapOperator');

// Set swap operator
await pool.connect(governance).updateAddressParameters(hex('SWP_OP'.padEnd(8, '\0')), swapOperator.address);
await pool.connect(governance).updateAddressParameters(toBytes8('SWP_OP'), swapOperator.address);

// Call should succeed
await pool.connect(swapOperator).setSwapValue(BigNumber.from('123'));
Expand All @@ -30,7 +30,7 @@ describe('setSwapValue', function () {

expect(await pool.swapValue()).to.eq(0);
// Set swap operator and set swap value
await pool.connect(governance).updateAddressParameters(hex('SWP_OP'.padEnd(8, '\0')), swapOperator.address);
await pool.connect(governance).updateAddressParameters(toBytes8('SWP_OP'), swapOperator.address);
await pool.connect(swapOperator).setSwapValue(123);

expect(await pool.swapValue()).to.eq(123);
Expand Down
12 changes: 6 additions & 6 deletions test/unit/Pool/setup.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const { WeiPerEther } = ethers.constants;

const { Role } = require('../utils').constants;
const { getAccounts } = require('../../utils/accounts');
const { hex } = require('../utils').helpers;
const { toBytes2 } = require('../utils').helpers;

async function setup() {
// rewrite above artifact imports using ethers.js
Expand Down Expand Up @@ -54,7 +54,7 @@ async function setup() {
stETH.address,
);

await master.setLatestAddress(hex('P1'), pool.address);
await master.setLatestAddress(toBytes2('P1'), pool.address);

const token = await TokenMock.deploy();
const mcr = await MCR.deploy();
Expand All @@ -63,10 +63,10 @@ async function setup() {

// set contract addresses
await master.setTokenAddress(token.address);
await master.setLatestAddress(hex('P1'), pool.address);
await master.setLatestAddress(hex('MC'), mcr.address);
await master.setLatestAddress(hex('TC'), tokenController.address);
await master.setLatestAddress(hex('MR'), memberRoles.address);
await master.setLatestAddress(toBytes2('P1'), pool.address);
await master.setLatestAddress(toBytes2('MC'), mcr.address);
await master.setLatestAddress(toBytes2('TC'), tokenController.address);
await master.setLatestAddress(toBytes2('MR'), memberRoles.address);

const contractsToUpdate = [mcr, pool, tokenController];

Expand Down
4 changes: 2 additions & 2 deletions test/unit/Pool/transferAsset.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const { ethers } = require('hardhat');
const { expect } = require('chai');
const { BigNumber } = ethers;
const { parseEther } = ethers.utils;
const { hex } = require('../utils').helpers;
const { toBytes8 } = require('../utils').helpers;

describe('transferAsset', function () {
before(async function () {
Expand All @@ -25,7 +25,7 @@ describe('transferAsset', function () {
[18, 18, 18],
);

await pool.connect(governance).updateAddressParameters(hex('PRC_FEED'.padEnd(8, '\0')), priceFeedOracle.address);
await pool.connect(governance).updateAddressParameters(toBytes8('PRC_FEED'), priceFeedOracle.address);

this.otherToken = otherToken;
});
Expand Down
6 changes: 3 additions & 3 deletions test/unit/Pool/transferAssetToSwapOperator.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const { expect } = require('chai');
const { ethers } = require('hardhat');
const { BigNumber } = ethers;
const { parseEther } = ethers.utils;
const { hex } = require('../utils').helpers;
const { toBytes8 } = require('../utils').helpers;

describe('transferAssetToSwapOperator', function () {
before(async function () {
Expand All @@ -29,7 +29,7 @@ describe('transferAssetToSwapOperator', function () {
[18, 18, 18],
);

await pool.connect(governance).updateAddressParameters(hex('PRC_FEED'.padEnd(8, '\0')), priceFeedOracle.address);
await pool.connect(governance).updateAddressParameters(toBytes8('PRC_FEED'), priceFeedOracle.address);

this.otherToken = otherToken;
});
Expand All @@ -48,7 +48,7 @@ describe('transferAssetToSwapOperator', function () {
const amountToTransfer = tokenAmount.div(2);

const tempSwapOperator = arbitraryCaller;
await pool.connect(governance).updateAddressParameters(hex('SWP_OP'.padEnd(8, '\0')), tempSwapOperator.address);
await pool.connect(governance).updateAddressParameters(toBytes8('SWP_OP'), tempSwapOperator.address);

await pool.connect(tempSwapOperator).transferAssetToSwapOperator(otherToken.address, amountToTransfer);
const destinationBalance = await otherToken.balanceOf(tempSwapOperator.address);
Expand Down
11 changes: 4 additions & 7 deletions test/unit/Pool/updateParameters.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const { expect } = require('chai');
const { ethers } = require('hardhat');
const { hex } = require('../utils').helpers;

const { toBytes8 } = require('../utils').helpers;
const { PoolUintParamType, PoolAddressParamType } = require('../utils').constants;

describe('updateUintParameters', function () {
Expand Down Expand Up @@ -53,9 +54,7 @@ describe('updateAddressParameters', function () {
const priceFeedOracle = await PriceFeedOracle.deploy([dai.address], [chainlinkDAI.address], [18]);

await expect(
pool
.connect(governanceContract)
.updateAddressParameters(hex('PRC_FEED'.padEnd(8, '\0')), priceFeedOracle.address),
pool.connect(governanceContract).updateAddressParameters(toBytes8('PRC_FEED'), priceFeedOracle.address),
).to.be.revertedWith('Pool: Oracle lacks asset');
});

Expand All @@ -69,9 +68,7 @@ describe('updateAddressParameters', function () {
const priceFeedOracle = await PriceFeedOracle.deploy([stETH.address], [chainlinkSteth.address], [18]);

await expect(
pool
.connect(governanceContract)
.updateAddressParameters(hex('PRC_FEED'.padEnd(8, '\0')), priceFeedOracle.address),
pool.connect(governanceContract).updateAddressParameters(toBytes8('PRC_FEED'), priceFeedOracle.address),
).to.be.revertedWith('Pool: Oracle lacks asset');
});

Expand Down

0 comments on commit ac9e95a

Please sign in to comment.