const ClaimToken = artifacts.require("ClaimToken"); const FT = artifacts.require("FT"); const { BN, constants, expectEvent, expectRevert, } = require("@openzeppelin/test-helpers"); contract("ClaimToken", (accounts) => { let tokenClaimer; let usdt; const owner = accounts[0]; const user = accounts[1]; const executor = accounts[2]; beforeEach(async () => { usdt = await FT.new("USDT", "USDT", 0); tokenClaimer = await ClaimToken.new(); await tokenClaimer.updateTokenSupport(usdt.address, true); await tokenClaimer.updateVerifier(executor); await tokenClaimer.updatePaymentAddress(owner); }); it("should cliam token", async () => { await usdt.mint(owner, web3.utils.toWei("1000")); await usdt.approve(tokenClaimer.address, web3.utils.toWei("1000"), { from: owner }); const balanceOfOwner = await usdt.balanceOf(owner); console.log('balanceOfOwner: ', balanceOfOwner.toString()) const allowance = await usdt.allowance(owner, tokenClaimer.address); console.log('allowance: ', allowance.toString()) const token = usdt.address; const amount = web3.utils.toWei("100"); console.log(amount) const chainId = await web3.eth.getChainId(); console.log(chainId) const address = tokenClaimer.address; const startTime = Date.now() / 1000 | 0; const saltNonce = (Math.random() * 1000) | 0; let signStr = web3.utils.soliditySha3.apply(this, [user, token, address, chainId, amount, startTime, saltNonce]); let signature = await web3.eth.sign(signStr, executor); signature = signature.replace(/00$/, "1b").replace(/01$/, "1c"); const receipt = await tokenClaimer.claim( token, amount, startTime, saltNonce, signature, { from: user } ); const balanceOfUser = await usdt.balanceOf(user); assert.equal(balanceOfUser, amount, "Incorrect user balance"); }); });