123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- const { MockProvider } = require("@ethereum-waffle/provider")
- const { expect } = require("chai")
- const { ethers } = require("hardhat")
- const { getApprovalDigest, getAddr } = require("./util/helpers")
- const { ecsign } = require("ethereumjs-util")
- const { deployNew } = require("./util/helpers")
- const { ZERO_ADDRESS } = require("./util/constants")
- const { BigNumber } = require("ethers")
- describe("LPTokenERC20:", function () {
- let lzEndpoint, initialSupply, owner, alice, bob, stargateTokenOwner, stargateTokenSpender, lpTokenErc20, chainId
- before(async function () {
- ;({ owner, bob, alice } = await getAddr(ethers))
- chainId = 1
- initialSupply = ethers.utils.parseEther("1000000000")
- })
- beforeEach(async function () {
- lzEndpoint = await deployNew("LZEndpointMock", [chainId])
- lpTokenErc20 = await deployNew("LPTokenERC20", ["X", "X*LP"])
- stargateTokenOwner = await deployNew("StargateToken", ["Stargate", "STG", lzEndpoint.address, chainId, initialSupply])
- stargateTokenSpender = await deployNew("StargateToken", ["Stargate", "STGLFG", lzEndpoint.address, chainId, initialSupply])
- })
- it("approve() - emit event / set", async function () {
- const amount = ethers.utils.parseEther("100")
- await expect(lpTokenErc20.approve(stargateTokenSpender.address, amount)).to.emit(lpTokenErc20, "Approval")
- })
- it("increaseApproval()", async function () {
- const amount = 3664
- expect(await lpTokenErc20.allowance(owner.address, alice.address)).to.equal(0)
- await lpTokenErc20.increaseAllowance(alice.address, amount)
- expect(await lpTokenErc20.allowance(owner.address, alice.address)).to.equal(3664)
- })
- it("decreaseApproval()", async function () {
- const amount = 3664
- expect(await lpTokenErc20.allowance(owner.address, alice.address)).to.equal(0)
- await lpTokenErc20.increaseAllowance(alice.address, amount)
- expect(await lpTokenErc20.allowance(owner.address, alice.address)).to.equal(3664)
- await lpTokenErc20.decreaseAllowance(alice.address, amount / 2)
- expect(await lpTokenErc20.allowance(owner.address, alice.address)).to.equal(amount / 2)
- })
- it("permit() - reverts if deadline is before block timestamp", async function () {
- await expect(
- lpTokenErc20.permit(
- ZERO_ADDRESS,
- ZERO_ADDRESS,
- 0,
- 1,
- 1,
- "0x0000000000000000000000000000000000000000000000000000000000000000",
- "0x0000000000000000000000000000000000000000000000000000000000000000"
- )
- ).to.revertedWith("Bridge: EXPIRED")
- })
- it("permit()", async function () {
- const TEST_AMOUNT = ethers.utils.parseEther("10")
- const provider = new MockProvider({
- ganacheOptions: {
- hardfork: "istanbul",
- mnemonic: "horn horn horn horn horn horn horn horn horn horn horn horn",
- gasLimit: 9999999,
- },
- })
- const [wallet, other] = provider.getWallets()
- const nonce = await lpTokenErc20.nonces(wallet.address)
- const deadline = ethers.constants.MaxUint256
- const digest = await getApprovalDigest(
- lpTokenErc20,
- { owner: wallet.address, spender: other.address, value: TEST_AMOUNT },
- nonce,
- deadline
- )
- const { v, r, s } = ecsign(Buffer.from(digest.slice(2), "hex"), Buffer.from(wallet.privateKey.slice(2), "hex"))
- await expect(
- lpTokenErc20.permit(wallet.address, other.address, TEST_AMOUNT, deadline, v, ethers.utils.hexlify(r), ethers.utils.hexlify(s))
- )
- .to.emit(lpTokenErc20, "Approval")
- .withArgs(wallet.address, other.address, TEST_AMOUNT)
- expect(await lpTokenErc20.allowance(wallet.address, other.address)).to.eq(TEST_AMOUNT)
- expect(await lpTokenErc20.nonces(wallet.address)).to.eq(BigNumber.from(1))
- })
- it("permit() - reverts with invalid signature", async function () {
- const TEST_AMOUNT = ethers.utils.parseEther("10")
- const provider = new MockProvider({
- ganacheOptions: {
- hardfork: "istanbul",
- mnemonic: "horn horn horn horn horn horn horn horn horn horn horn horn",
- gasLimit: 9999999,
- },
- })
- const [wallet, other] = provider.getWallets()
- const nonce = await lpTokenErc20.nonces(wallet.address)
- const deadline = ethers.constants.MaxUint256
- const digest = await getApprovalDigest(
- lpTokenErc20,
- { owner: wallet.address, spender: other.address, value: TEST_AMOUNT },
- nonce,
- deadline
- )
- const { v, r, s } = ecsign(Buffer.from(digest.slice(2), "hex"), Buffer.from(wallet.privateKey.slice(2), "hex"))
- // pass the wrong "owner" into permit()
- await expect(
- lpTokenErc20.permit(bob.address, other.address, TEST_AMOUNT, deadline, v, ethers.utils.hexlify(r), ethers.utils.hexlify(s))
- ).to.revertedWith("Bridge: INVALID_SIGNATURE")
- })
- })
|