140 lines
3.7 KiB
TypeScript
140 lines
3.7 KiB
TypeScript
|
import { BigNumber } from "ethers";
|
||
|
import { expect } from "chai";
|
||
|
import { ethers } from "hardhat";
|
||
|
import { ERC3525Example } from "../typechain";
|
||
|
import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
|
||
|
|
||
|
const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
|
||
|
const ZERO_TOKEN_ID = 0;
|
||
|
|
||
|
let owner: SignerWithAddress,
|
||
|
approval: SignerWithAddress,
|
||
|
to: SignerWithAddress;
|
||
|
let token: ERC3525Example;
|
||
|
let snapshotId: any;
|
||
|
const fromTokenId = 35251;
|
||
|
const toTokenId = 35252;
|
||
|
const fromValue = 10000000000;
|
||
|
const approveValue = 5000000000;
|
||
|
const transferValue = 3000000000;
|
||
|
const slotDetails = {
|
||
|
name: "Test Slot",
|
||
|
description: "Test Slot Description",
|
||
|
image: "https://example.com/slot/test_slot.png",
|
||
|
underlying: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
|
||
|
vestingType: 1,
|
||
|
maturity: 1658989800,
|
||
|
term: 2592000,
|
||
|
value: fromValue,
|
||
|
};
|
||
|
|
||
|
describe("ERC3525", function () {
|
||
|
before(async () => {
|
||
|
const signers = await ethers.getSigners();
|
||
|
owner = signers[0];
|
||
|
approval = signers[1];
|
||
|
to = signers[2];
|
||
|
const ERC3525Factory = await ethers.getContractFactory("ERC3525Example");
|
||
|
token = (await ERC3525Factory.deploy(
|
||
|
"TST",
|
||
|
"Test 3525",
|
||
|
18
|
||
|
)) as ERC3525Example;
|
||
|
await token.deployed();
|
||
|
|
||
|
await token.mint(
|
||
|
slotDetails.name,
|
||
|
slotDetails.description,
|
||
|
slotDetails.image,
|
||
|
fromTokenId,
|
||
|
slotDetails.underlying,
|
||
|
slotDetails.vestingType,
|
||
|
slotDetails.maturity,
|
||
|
slotDetails.term,
|
||
|
slotDetails.value
|
||
|
);
|
||
|
|
||
|
await token.mint(
|
||
|
slotDetails.name,
|
||
|
slotDetails.description,
|
||
|
slotDetails.image,
|
||
|
toTokenId,
|
||
|
slotDetails.underlying,
|
||
|
slotDetails.vestingType,
|
||
|
slotDetails.maturity,
|
||
|
slotDetails.term,
|
||
|
0
|
||
|
);
|
||
|
});
|
||
|
|
||
|
beforeEach(async function () {
|
||
|
snapshotId = await ethers.provider.send("evm_snapshot", []);
|
||
|
});
|
||
|
|
||
|
afterEach(async function () {
|
||
|
await ethers.provider.send("evm_revert", [snapshotId]);
|
||
|
});
|
||
|
|
||
|
describe("ERC3525 Example", function () {
|
||
|
it("approve value should be success", async () => {
|
||
|
await token["approve(uint256,address,uint256)"](
|
||
|
fromTokenId,
|
||
|
approval.address,
|
||
|
approveValue
|
||
|
);
|
||
|
|
||
|
expect(await token.allowance(fromTokenId, approval.address)).to.eq(
|
||
|
approveValue
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("transfer value to id should be success", async () => {
|
||
|
expect(
|
||
|
await token["transferFrom(uint256,uint256,uint256)"](
|
||
|
fromTokenId,
|
||
|
toTokenId,
|
||
|
transferValue
|
||
|
)
|
||
|
);
|
||
|
expect(await token["balanceOf(uint256)"](fromTokenId)).to.eq(
|
||
|
fromValue - transferValue
|
||
|
);
|
||
|
expect(await token["balanceOf(uint256)"](toTokenId)).to.eq(transferValue);
|
||
|
});
|
||
|
|
||
|
it("transfer value to address should be success", async () => {
|
||
|
expect(
|
||
|
await token["transferFrom(uint256,address,uint256)"](
|
||
|
fromTokenId,
|
||
|
to.address,
|
||
|
transferValue
|
||
|
)
|
||
|
);
|
||
|
expect(await token["balanceOf(uint256)"](fromTokenId)).to.eq(
|
||
|
fromValue - transferValue
|
||
|
);
|
||
|
const newTokenId = 1000000000 + fromTokenId;
|
||
|
expect(await token["balanceOf(uint256)"](newTokenId)).to.eq(
|
||
|
transferValue
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("approved value should be correct after transfer value to id", async () => {
|
||
|
await token["approve(uint256,address,uint256)"](
|
||
|
fromTokenId,
|
||
|
approval.address,
|
||
|
approveValue
|
||
|
);
|
||
|
const approvalToken = token.connect(approval);
|
||
|
await approvalToken["transferFrom(uint256,uint256,uint256)"](
|
||
|
fromTokenId,
|
||
|
toTokenId,
|
||
|
transferValue
|
||
|
);
|
||
|
expect(await token.allowance(fromTokenId, approval.address)).to.eq(
|
||
|
approveValue - transferValue
|
||
|
);
|
||
|
});
|
||
|
});
|
||
|
});
|