@etherspot/contracts
Version:
Etherspot Solidity contracts
100 lines (99 loc) • 6.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const hardhat_1 = require("hardhat");
const constants_1 = require("../../extensions/constants");
const shared_1 = require("../shared");
describe('ConnextFacet', () => {
const TEST_TOKEN_ADDRESS = "0x3FFc03F05D1869f493c7dbf913E636C6280e0ff9";
let signer;
let connextFacet;
let token;
let diamond;
before(async function () {
await hardhat_1.network.provider.request({
method: 'hardhat_reset',
params: [
{
forking: {
jsonRpcUrl: constants_1.NETWORK_CONFIGS[constants_1.NetworkNames.Goerli].defaultProviderUrl,
blockNumber: 7139113,
},
},
],
});
await hardhat_1.network.provider.request({
method: 'hardhat_impersonateAccount',
params: ['0x1a258f501e1e36e0a7f7b8f3d75042ab1172a028'],
});
signer = await hardhat_1.ethers.getSigner('0x1a258f501e1e36e0a7f7b8f3d75042ab1172a028');
token = (await hardhat_1.ethers.getContractAt("IERC20", TEST_TOKEN_ADDRESS)).connect(signer);
await hardhat_1.deployments.fixture(['bridges', 'connext']);
diamond = await hardhat_1.ethers.getContract('Diamond');
connextFacet = (await hardhat_1.ethers.getContractAt('ConnextFacet', diamond.address)).connect(signer);
});
it("performs erc20 token swap", async () => {
await token.approve(diamond.address, hardhat_1.ethers.constants.MaxUint256);
const recipient = (0, shared_1.randomAddress)();
const { events } = await (0, shared_1.processTx)(connextFacet.connextTokenTransfer(TEST_TOKEN_ADDRESS, recipient, 1111, hardhat_1.ethers.utils.parseEther("100"), hardhat_1.ethers.BigNumber.from(0)));
const event = events.find(({ event }) => event === 'ConnextTokenSwap');
expect(event).toBeDefined();
expect(event.args._destination).toEqual(1111);
expect(event.args._recipient).toEqual(recipient);
expect(event.args._transferId).toBeDefined();
expect(event.args._asset).toEqual(TEST_TOKEN_ADDRESS);
expect(event.args._amount).toEqual(hardhat_1.ethers.utils.parseEther("100"));
expect(event.args._relayerFee).toEqual(hardhat_1.ethers.BigNumber.from(0));
expect(event.args._transferId).toBeDefined();
});
it("performs erc20 token swap with fee", async () => {
await token.approve(diamond.address, hardhat_1.ethers.constants.MaxUint256);
const recipient = (0, shared_1.randomAddress)();
const { events } = await (0, shared_1.processTx)(connextFacet.connextTokenTransfer(TEST_TOKEN_ADDRESS, recipient, 1111, hardhat_1.ethers.utils.parseEther("100"), hardhat_1.ethers.utils.parseEther("0.05"), {
value: hardhat_1.ethers.utils.parseEther("0.05")
}));
const event = events.find(({ event }) => event === 'ConnextTokenSwap');
expect(event).toBeDefined();
expect(event.args._destination).toEqual(1111);
expect(event.args._recipient).toEqual(recipient);
expect(event.args._transferId).toBeDefined();
expect(event.args._asset).toEqual(TEST_TOKEN_ADDRESS);
expect(event.args._amount).toEqual(hardhat_1.ethers.utils.parseEther("100"));
expect(event.args._relayerFee).toEqual(hardhat_1.ethers.utils.parseEther("0.05"));
expect(event.args._transferId).toBeDefined();
});
it("should not perform call with wrong fee", async () => {
await token.approve(diamond.address, hardhat_1.ethers.constants.MaxUint256);
const recipient = (0, shared_1.randomAddress)();
await expect(connextFacet.connextTokenTransfer(TEST_TOKEN_ADDRESS, recipient, 1111, hardhat_1.ethers.utils.parseEther("100"), hardhat_1.ethers.utils.parseEther("0.05"), {
value: hardhat_1.ethers.utils.parseEther("0.04")
})).rejects.toThrow(/value/);
});
it("performs crosschain call", async () => {
await token.approve(diamond.address, hardhat_1.ethers.constants.MaxUint256);
const callData = await token.populateTransaction.totalSupply();
const { events } = await (0, shared_1.processTx)(connextFacet.connextCall(TEST_TOKEN_ADDRESS, callData.data, 1111, TEST_TOKEN_ADDRESS, hardhat_1.ethers.utils.parseEther("0"), hardhat_1.ethers.BigNumber.from(0), signer.address, hardhat_1.ethers.constants.AddressZero, 0));
const event = events.find(({ event }) => event === 'ConnextXCall');
expect(event).toBeDefined();
expect(event.args._destination).toEqual(1111);
expect(event.args._recipient).toEqual(TEST_TOKEN_ADDRESS);
expect(event.args._transferId).toBeDefined();
expect(event.args._asset).toEqual(TEST_TOKEN_ADDRESS);
expect(event.args._amount).toEqual(hardhat_1.ethers.utils.parseEther("0"));
expect(event.args._callData).toEqual(callData.data);
});
it("performs crosschain call with fee", async () => {
const callData = await token.populateTransaction.totalSupply();
const { events } = await (0, shared_1.processTx)(connextFacet.connextCall(TEST_TOKEN_ADDRESS, callData.data, 1111, TEST_TOKEN_ADDRESS, hardhat_1.ethers.utils.parseEther("0"), hardhat_1.ethers.utils.parseEther("0.05"), signer.address, hardhat_1.ethers.constants.AddressZero, 0, {
value: hardhat_1.ethers.utils.parseEther("0.05")
}));
const event = events.find(({ event }) => event === 'ConnextXCall');
expect(event).toBeDefined();
expect(event.args._destination).toEqual(1111);
expect(event.args._recipient).toEqual(TEST_TOKEN_ADDRESS);
expect(event.args._transferId).toBeDefined();
expect(event.args._asset).toEqual(TEST_TOKEN_ADDRESS);
expect(event.args._amount).toEqual(hardhat_1.ethers.utils.parseEther("0"));
expect(event.args._callData).toEqual(callData.data);
expect(event.args._relayerFee).toEqual(hardhat_1.ethers.utils.parseEther("0.05"));
});
});