From 71c6cc7cb1a4215bfd5623976b8df6ea6638abbd Mon Sep 17 00:00:00 2001 From: idirall22 Date: Thu, 27 Oct 2022 18:56:51 +0100 Subject: [PATCH 1/2] - Add referral to submit function - update tests --- contracts/StMATIC.sol | 7 +- contracts/interfaces/IStMATIC.sol | 2 +- test/stmatic-test.ts | 111 ++++++++++++++++-------------- 3 files changed, 63 insertions(+), 57 deletions(-) diff --git a/contracts/StMATIC.sol b/contracts/StMATIC.sol index 77b7d52f..9e5a0220 100644 --- a/contracts/StMATIC.sol +++ b/contracts/StMATIC.sol @@ -21,7 +21,7 @@ contract StMATIC is AccessControlUpgradeable, PausableUpgradeable { - event SubmitEvent(address indexed _from, uint256 indexed _amount); + event SubmitEvent(address indexed _from, uint256 indexed _amount, address indexed _referral); event RequestWithdrawEvent(address indexed _from, uint256 indexed _amount); event DistributeRewardsEvent(uint256 indexed _amount); event WithdrawTotalDelegatedEvent( @@ -114,9 +114,10 @@ contract StMATIC is * @dev Send funds to StMATIC contract and mints StMATIC to msg.sender * @notice Requires that msg.sender has approved _amount of MATIC to this contract * @param _amount - Amount of MATIC sent from msg.sender to this contract + * @param _referral - Referral address. * @return Amount of StMATIC shares generated */ - function submit(uint256 _amount) + function submit(uint256 _amount, address _referral) external override whenNotPaused @@ -151,7 +152,7 @@ contract StMATIC is abi.encode(totalShares + amountToMint, totalPooledMatic + _amount) ); - emit SubmitEvent(msg.sender, _amount); + emit SubmitEvent(msg.sender, _amount, _referral); return amountToMint; } diff --git a/contracts/interfaces/IStMATIC.sol b/contracts/interfaces/IStMATIC.sol index 094d9576..d2c1c02d 100644 --- a/contracts/interfaces/IStMATIC.sol +++ b/contracts/interfaces/IStMATIC.sol @@ -97,7 +97,7 @@ interface IStMATIC is IERC20Upgradeable { uint256 _submitThreshold ) external; - function submit(uint256 _amount) external returns (uint256); + function submit(uint256 _amount, address _referral) external returns (uint256); function requestWithdraw(uint256 _amount) external; diff --git a/test/stmatic-test.ts b/test/stmatic-test.ts index 95c01d80..51f4c950 100644 --- a/test/stmatic-test.ts +++ b/test/stmatic-test.ts @@ -34,7 +34,8 @@ describe("Starting to test StMATIC contract", () => { let submit: ( signer: SignerWithAddress, - amount: BigNumberish + amount: BigNumberish, + referral: string ) => Promise; let requestWithdraw: ( @@ -76,12 +77,12 @@ describe("Starting to test StMATIC contract", () => { await signerERC.mint(amount); }; - submit = async (signer, amount) => { + submit = async (signer, amount, referral) => { const signerERC20 = mockERC20.connect(signer); await signerERC20.approve(stMATIC.address, amount); const signerStMATIC = stMATIC.connect(signer); - await signerStMATIC.submit(amount); + await signerStMATIC.submit(amount, referral); }; requestWithdraw = async (signer, amount) => { @@ -242,7 +243,10 @@ describe("Starting to test StMATIC contract", () => { it("Should submit successfully", async () => { const amount = ethers.utils.parseEther("1"); await mint(testers[0], amount); - await submit(testers[0], amount); + await mockERC20.connect(testers[0]).approve(stMATIC.address, amount); + expect(await stMATIC.connect(testers[0]).submit(amount, testers[2].address)) + .emit(stMATIC, "SubmitEvent") + .withArgs(testers[0].address, amount, testers[2].address); const testerBalance = await stMATIC.balanceOf(testers[0].address); expect(testerBalance.eq(amount)).to.be.true; @@ -252,9 +256,9 @@ describe("Starting to test StMATIC contract", () => { const sumbitThreshold = ethers.utils.parseEther("1"); await stMATIC.setSubmitThreshold(sumbitThreshold); await mint(testers[0], sumbitThreshold.add(1)); - await submit(testers[0], sumbitThreshold); + await submit(testers[0], sumbitThreshold, testers[2].address); - await expect(submit(testers[0], 1)).to.be.revertedWith( + await expect(submit(testers[0], 1, testers[2].address)).to.be.revertedWith( "Submit threshold reached" ); }); @@ -264,8 +268,8 @@ describe("Starting to test StMATIC contract", () => { await stMATIC.setSubmitThreshold(sumbitThreshold); await mint(testers[0], sumbitThreshold.add(1)); await stMATIC.flipSubmitHandler(); - await submit(testers[0], sumbitThreshold); - await submit(testers[0], 1); + await submit(testers[0], sumbitThreshold, testers[2].address); + await submit(testers[0], 1, testers[2].address); const testerBalance = await stMATIC.balanceOf(testers[0].address); expect(testerBalance.eq(sumbitThreshold.add(1))).to.be.true; @@ -276,9 +280,9 @@ describe("Starting to test StMATIC contract", () => { await stMATIC.setSubmitThreshold(sumbitThreshold); await mint(testers[0], sumbitThreshold.add(1)); await stMATIC.flipSubmitHandler(); - await submit(testers[0], sumbitThreshold); + await submit(testers[0], sumbitThreshold, testers[2].address); await stMATIC.setSubmitThreshold(sumbitThreshold.add(1)); - await submit(testers[0], 1); + await submit(testers[0], 1, testers[2].address); const testerBalance = await stMATIC.balanceOf(testers[0].address); expect(testerBalance.eq(sumbitThreshold.add(1))).to.be.true; @@ -287,7 +291,7 @@ describe("Starting to test StMATIC contract", () => { it("Should submit successfully when validator was removed", async () => { const amount = ethers.utils.parseEther("100"); await mint(testers[0], amount); - await submit(testers[0], amount); + await submit(testers[0], amount, testers[2].address); await mint(testers[0], amount); await addOperator( @@ -304,7 +308,7 @@ describe("Starting to test StMATIC contract", () => { await stopOperator(1); await mint(testers[1], amount); - await submit(testers[1], amount); + await submit(testers[1], amount, testers[2].address); testerBalance = await stMATIC.balanceOf(testers[1].address); expect(testerBalance.eq(amount)).to.be.true; }); @@ -312,7 +316,7 @@ describe("Starting to test StMATIC contract", () => { it("Should request withdraw from the contract successfully", async () => { const amount = ethers.utils.parseEther("1"); await mint(testers[0], amount); - await submit(testers[0], amount); + await submit(testers[0], amount, testers[2].address); await requestWithdraw(testers[0], amount); const owned = await poLidoNFT.getOwnedTokens(testers[0].address); expect(owned).length(1); @@ -329,7 +333,7 @@ describe("Starting to test StMATIC contract", () => { ); await stakeOperator(1, testers[0], "10"); await mint(testers[0], amount2Submit); - await submit(testers[0], amount2Submit); + await submit(testers[0], amount2Submit, testers[2].address); await requestWithdraw(testers[0], ethers.utils.parseEther("0.005")); const balance = await poLidoNFT.balanceOf(testers[0].address); @@ -353,20 +357,20 @@ describe("Starting to test StMATIC contract", () => { // user1 submit 100 ether (totalMatic = 100) await mint(testers[0], amount2Submit); - await submit(testers[0], amount2Submit); + await submit(testers[0], amount2Submit, testers[2].address); // delegate 100 ether await stMATIC.delegate(); // user1 submit 100 tokens: revert submit threshold = 190 - await expect(stMATIC.submit(amount2Submit), "submit 100 ether").revertedWith("Submit threshold reached"); + await expect(stMATIC.submit(amount2Submit, testers[2].address), "submit 100 ether").revertedWith("Submit threshold reached"); // user1 submit 90 tokens (totalMatic = 190) await mint(testers[0], amount2Submit); - await submit(testers[0], amount.sub(amount2Submit)); + await submit(testers[0], amount.sub(amount2Submit), testers[2].address); // user1 submit 100 tokens : revert submit threshold = 190 - await expect(stMATIC.submit(amount2Submit), "submit 100 ether").revertedWith("Submit threshold reached"); + await expect(stMATIC.submit(amount2Submit, testers[2].address), "submit 100 ether").revertedWith("Submit threshold reached"); }); it("Should withdraw from EJECTED operators", async function () { @@ -381,7 +385,7 @@ describe("Starting to test StMATIC contract", () => { await stakeOperator(1, testers[0], "10"); await mint(testers[0], amount2Submit); - await submit(testers[0], amount2Submit); + await submit(testers[0], amount2Submit, testers[2].address); await stMATIC.delegate(); await mockStakeManager.unstake(1); @@ -404,7 +408,7 @@ describe("Starting to test StMATIC contract", () => { await stakeOperator(1, testers[0], "200"); await mint(testers[0], amount2Submit); - await submit(testers[0], amount2Submit); + await submit(testers[0], amount2Submit, testers[2].address); await stMATIC.delegate(); await mockStakeManager.slash(1); @@ -430,7 +434,7 @@ describe("Starting to test StMATIC contract", () => { const submitAmountWei = ethers.utils.parseEther(submitAmounts[i]); await mint(testers[i], submitAmountWei); - await submit(testers[i], submitAmountWei); + await submit(testers[i], submitAmountWei, testers[2].address); } await mockStakeManager.setEpoch(1); @@ -474,7 +478,7 @@ describe("Starting to test StMATIC contract", () => { ); await stakeOperator(1, testers[0], "100"); await mint(testers[0], submitAmount); - await submit(testers[0], submitAmount); + await submit(testers[0], submitAmount, testers[2].address); await stMATIC.delegate(); const balanceBefore = await mockERC20.balanceOf(testers[0].address); await requestWithdraw(testers[0], withdrawAmount); @@ -506,12 +510,12 @@ describe("Starting to test StMATIC contract", () => { const balanceBefore = await stMATIC.balanceOf(testers[0].address); await mint(testers[0], initialSubmitAmount); - await submit(testers[0], initialSubmitAmount); + await submit(testers[0], initialSubmitAmount, testers[2].address); await stMATIC.delegate(); const finalSubmitAmount = ethers.utils.parseEther("100"); await mint(testers[0], finalSubmitAmount); - await submit(testers[0], finalSubmitAmount); + await submit(testers[0], finalSubmitAmount, testers[2].address); await stMATIC.delegate(); const balanceAfter = await stMATIC.balanceOf(testers[0].address); @@ -529,7 +533,7 @@ describe("Starting to test StMATIC contract", () => { ); await stakeOperator(1, testers[0], "100"); await mint(testers[0], submitAmount); - await submit(testers[0], submitAmount); + await submit(testers[0], submitAmount, testers[2].address); await stMATIC.delegate(); const balanceBefore = await stMATIC.getTotalStakeAcrossAllValidators(); @@ -563,13 +567,13 @@ describe("Starting to test StMATIC contract", () => { await stakeOperator(1, testers[0], "100"); await mint(testers[0], submitAmount); - await submit(testers[0], submitAmount); + await submit(testers[0], submitAmount, testers[2].address); await stMATIC.delegate(); const minValidatorBalanceBefore = await stMATIC.getMinValidatorBalance(); await mint(testers[0], submitAmount.mul(2)); - await submit(testers[0], submitAmount); + await submit(testers[0], submitAmount, testers[2].address); await stMATIC.delegate(); const minValidatorBalanceAfter = await stMATIC.getMinValidatorBalance(); @@ -605,7 +609,7 @@ describe("Starting to test StMATIC contract", () => { const submitAmountWei = ethers.utils.parseEther(submitAmounts[i]); await mint(testers[i], submitAmountWei); - await submit(testers[i], submitAmountWei); + await submit(testers[i], submitAmountWei, testers[2].address); } await stMATIC.delegate(); @@ -674,7 +678,7 @@ describe("Starting to test StMATIC contract", () => { const submitAmountWei = ethers.utils.parseEther(submitAmounts[i]); await mint(testers[i], submitAmountWei); - await submit(testers[i], submitAmountWei); + await submit(testers[i], submitAmountWei, testers[2].address); } await stMATIC.delegate(); @@ -747,7 +751,7 @@ describe("Starting to test StMATIC contract", () => { const submitAmountWei = ethers.utils.parseEther(submitAmounts[i]); await mint(testers[i], submitAmountWei); - await submit(testers[i], submitAmountWei); + await submit(testers[i], submitAmountWei, testers[2].address); } await stMATIC.delegate(); @@ -791,7 +795,7 @@ describe("Starting to test StMATIC contract", () => { for (let i = 0; i < testersAmount; i++) { await mint(testers[i], submitAmount); - await submit(testers[i], submitAmount); + await submit(testers[i], submitAmount, testers[2].address); } await stMATIC.delegate(); @@ -836,7 +840,7 @@ describe("Starting to test StMATIC contract", () => { const submitAmountWei = ethers.utils.parseEther(submitAmounts[i]); await mint(testers[i], submitAmountWei); - await submit(testers[i], submitAmountWei); + await submit(testers[i], submitAmountWei, testers[2].address); } await stMATIC.delegate(); @@ -902,7 +906,7 @@ describe("Starting to test StMATIC contract", () => { const submitAmountWei = ethers.utils.parseEther(submitAmounts[i]); await mint(testers[i], submitAmountWei); - await submit(testers[i], submitAmountWei); + await submit(testers[i], submitAmountWei, testers[2].address); } await stMATIC.delegate(); @@ -1035,7 +1039,8 @@ describe("Starting to test StMATIC contract", () => { ); await submit( testers[i], - ethers.utils.parseEther(amountSubmittedPerUser.toString()) + ethers.utils.parseEther(amountSubmittedPerUser.toString()), + testers[2].address ); // transfer some tokens to the validatorShare contracts to mimic rewards. @@ -1120,7 +1125,7 @@ describe("Starting to test StMATIC contract", () => { const validatorShareRewards = [1000, 10]; for (let i = 1; i <= numOperators; i++) { await mint(testers[i], ethers.utils.parseEther("10")); - await submit(testers[i], ethers.utils.parseEther(String(10))); + await submit(testers[i], ethers.utils.parseEther(String(10)), testers[2].address); // transfer some tokens to the validatorShare contracts to mimic rewards. const rewardAmount = validatorShareRewards[i - 1]; @@ -1170,7 +1175,7 @@ describe("Starting to test StMATIC contract", () => { for (let i = 1; i <= numOperators; i++) { await mint(testers[i], ethers.utils.parseEther("10")); - await submit(testers[i], ethers.utils.parseEther(String(10))); + await submit(testers[i], ethers.utils.parseEther(String(10)), testers[2].address); // transfer some tokens to the validatorShare contracts to mimic rewards. await mint(deployer, ethers.utils.parseEther("1")); @@ -1239,7 +1244,7 @@ describe("Starting to test StMATIC contract", () => { for (let i = 1; i <= 3; i++) { await mint(testers[i], ethers.utils.parseEther("10")); - await submit(testers[i], ethers.utils.parseEther("10")); + await submit(testers[i], ethers.utils.parseEther("10"), testers[2].address); } await stMATIC.delegate(); } @@ -1329,7 +1334,7 @@ describe("Starting to test StMATIC contract", () => { const numOfUsers = 3; for (let i = 1; i <= numOfUsers; i++) { await mint(testers[i], ethers.utils.parseEther("100")); - await submit(testers[i], ethers.utils.parseEther("100")); + await submit(testers[i], ethers.utils.parseEther("100"), testers[2].address); } // delegate @@ -1385,7 +1390,7 @@ describe("Starting to test StMATIC contract", () => { const numOfUsers = 3; for (let i = 1; i <= numOfUsers; i++) { await mint(testers[i], ethers.utils.parseEther("100")); - await submit(testers[i], ethers.utils.parseEther("100")); + await submit(testers[i], ethers.utils.parseEther("100"), testers[2].address); } // delegate @@ -1420,7 +1425,7 @@ describe("Starting to test StMATIC contract", () => { } const submitAmount = toEth("300"); await mint(testers[0], submitAmount); - await submit(testers[0], submitAmount); + await submit(testers[0], submitAmount, testers[2].address); await stMATIC.delegate(); await requestWithdraw(testers[0], toEth("30")); expect(await stMATIC.getMaticFromTokenId(1)).eq(toEth("30")); @@ -1442,7 +1447,7 @@ describe("Starting to test StMATIC contract", () => { const requestAmount = toEth("50"); await mint(testers[0], submitAmount); - await submit(testers[0], submitAmount); + await submit(testers[0], submitAmount, testers[2].address); await stMATIC.delegate(); await requestWithdraw(testers[0], requestAmount); expect(await stMATIC.getMaticFromTokenId(1)).eq(requestAmount); @@ -1463,7 +1468,7 @@ describe("Starting to test StMATIC contract", () => { const submitAmount = toEth("300"); await mint(testers[0], submitAmount); - await submit(testers[0], submitAmount); + await submit(testers[0], submitAmount, testers[2].address); await requestWithdraw(testers[0], submitAmount); expect(await stMATIC.getTotalPooledMatic(), "getTotalPooledMatic").eq(0); @@ -1486,7 +1491,7 @@ describe("Starting to test StMATIC contract", () => { const amountToDelegate = toEth("300"); await mint(testers[0], amountToDelegate); - await submit(testers[0], amountToDelegate); + await submit(testers[0], amountToDelegate, testers[2].address); await stMATIC.delegate(); expect(await stMATIC.getTotalPooledMatic()).eq(amountToDelegate); @@ -1536,7 +1541,7 @@ describe("Starting to test StMATIC contract", () => { const amountToDelegate = toEth("300"); await mint(testers[0], amountToDelegate); - await submit(testers[0], amountToDelegate); + await submit(testers[0], amountToDelegate, testers[2].address); await stMATIC.delegate(); expect(await stMATIC.getTotalPooledMatic()).eq(amountToDelegate); @@ -1632,7 +1637,7 @@ describe("Starting to test StMATIC contract", () => { const amountToDelegate = toEth("300"); await mint(testers[0], amountToDelegate); - await submit(testers[0], amountToDelegate); + await submit(testers[0], amountToDelegate, testers[2].address); await stMATIC.delegate(); expect(await stMATIC.getTotalPooledMatic()).eq(amountToDelegate); @@ -1730,7 +1735,7 @@ describe("Starting to test StMATIC contract", () => { for (let i = 1; i <= 10; i++) { await mint(testers[i], toEth("10")); - await submit(testers[i], toEth("10")); + await submit(testers[i], toEth("10"), testers[2].address); } await stMATIC.delegate(); @@ -1759,7 +1764,7 @@ describe("Starting to test StMATIC contract", () => { for (let i = 1; i <= 10; i++) { await mint(testers[i], toEth("10")); - await submit(testers[i], toEth("10")); + await submit(testers[i], toEth("10"), testers[2].address); } await stopOperator(1); @@ -1794,7 +1799,7 @@ describe("Starting to test StMATIC contract", () => { const amountSubmit = toEth("100"); await mint(testers[0], amountSubmit); - await submit(testers[0], amountSubmit); + await submit(testers[0], amountSubmit, testers[2].address); await stMATIC.delegate(); await stopOperator(1); @@ -1826,7 +1831,7 @@ describe("Starting to test StMATIC contract", () => { const amountSubmit = toEth("100"); await mint(testers[0], amountSubmit); - await submit(testers[0], amountSubmit); + await submit(testers[0], amountSubmit, testers[2].address); await stMATIC.delegate(); await stopOperator(1); @@ -1839,7 +1844,7 @@ describe("Starting to test StMATIC contract", () => { it("Should get total pooled matic after submit", async () => { const amountSubmit = toEth("100"); await mint(testers[0], amountSubmit); - await submit(testers[0], amountSubmit); + await submit(testers[0], amountSubmit, testers[2].address); expect(await stMATIC.getTotalPooledMatic()).eq(amountSubmit); }); @@ -1856,7 +1861,7 @@ describe("Starting to test StMATIC contract", () => { } const amountSubmit = toEth("100"); await mint(testers[0], amountSubmit); - await submit(testers[0], amountSubmit); + await submit(testers[0], amountSubmit, testers[2].address); await stMATIC.delegate(); expect(await stMATIC.getTotalPooledMatic()).eq(amountSubmit); }); @@ -1875,7 +1880,7 @@ describe("Starting to test StMATIC contract", () => { const amountSubmit = toEth("100"); await mint(testers[0], amountSubmit); - await submit(testers[0], amountSubmit); + await submit(testers[0], amountSubmit, testers[2].address); await stMATIC.delegate(); await stopOperator(1); expect(await stMATIC.getTotalPooledMatic()).eq(amountSubmit); @@ -1895,7 +1900,7 @@ describe("Starting to test StMATIC contract", () => { const amountSubmit = toEth("100"); await mint(testers[0], amountSubmit); - await submit(testers[0], amountSubmit); + await submit(testers[0], amountSubmit, testers[2].address); await stMATIC.delegate(); await stopOperator(1); From df62a42f2bcd4aa51b479b9fded569a4a844bf50 Mon Sep 17 00:00:00 2001 From: idirall22 Date: Mon, 31 Oct 2022 10:17:36 +0100 Subject: [PATCH 2/2] - Add referal to requestWithdraw - Update tests --- contracts/StMATIC.sol | 7 ++--- contracts/interfaces/IStMATIC.sol | 2 +- test/stmatic-test.ts | 44 +++++++++++++++++-------------- 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/contracts/StMATIC.sol b/contracts/StMATIC.sol index 9e5a0220..71210c55 100644 --- a/contracts/StMATIC.sol +++ b/contracts/StMATIC.sol @@ -22,7 +22,7 @@ contract StMATIC is PausableUpgradeable { event SubmitEvent(address indexed _from, uint256 indexed _amount, address indexed _referral); - event RequestWithdrawEvent(address indexed _from, uint256 indexed _amount); + event RequestWithdrawEvent(address indexed _from, uint256 indexed _amount, address indexed _partner); event DistributeRewardsEvent(uint256 indexed _amount); event WithdrawTotalDelegatedEvent( address indexed _from, @@ -160,8 +160,9 @@ contract StMATIC is /** * @dev Stores users request to withdraw into a RequestWithdraw struct * @param _amount - Amount of StMATIC that is requested to withdraw + * @param _referral - referral address. */ - function requestWithdraw(uint256 _amount) external override whenNotPaused { + function requestWithdraw(uint256 _amount, address _referral) external override whenNotPaused { require(_amount > 0, "Invalid amount"); Operator.OperatorInfo[] memory operatorInfos = nodeOperatorRegistry @@ -266,7 +267,7 @@ contract StMATIC is ) ); - emit RequestWithdrawEvent(msg.sender, _amount); + emit RequestWithdrawEvent(msg.sender, _amount, _referral); } /** diff --git a/contracts/interfaces/IStMATIC.sol b/contracts/interfaces/IStMATIC.sol index d2c1c02d..687bf105 100644 --- a/contracts/interfaces/IStMATIC.sol +++ b/contracts/interfaces/IStMATIC.sol @@ -99,7 +99,7 @@ interface IStMATIC is IERC20Upgradeable { function submit(uint256 _amount, address _referral) external returns (uint256); - function requestWithdraw(uint256 _amount) external; + function requestWithdraw(uint256 _amount, address _referral) external; function delegate() external; diff --git a/test/stmatic-test.ts b/test/stmatic-test.ts index 51f4c950..3dd5f881 100644 --- a/test/stmatic-test.ts +++ b/test/stmatic-test.ts @@ -40,7 +40,8 @@ describe("Starting to test StMATIC contract", () => { let requestWithdraw: ( signer: SignerWithAddress, - amount: BigNumberish + amount: BigNumberish, + partner: string ) => Promise; let claimTokens: ( @@ -85,10 +86,10 @@ describe("Starting to test StMATIC contract", () => { await signerStMATIC.submit(amount, referral); }; - requestWithdraw = async (signer, amount) => { + requestWithdraw = async (signer, amount, partner) => { const signerStMATIC = stMATIC.connect(signer); await signerStMATIC.approve(stMATIC.address, amount); - await signerStMATIC.requestWithdraw(amount); + await signerStMATIC.requestWithdraw(amount, partner); }; claimTokens = async (signer, tokenId) => { @@ -317,7 +318,9 @@ describe("Starting to test StMATIC contract", () => { const amount = ethers.utils.parseEther("1"); await mint(testers[0], amount); await submit(testers[0], amount, testers[2].address); - await requestWithdraw(testers[0], amount); + expect(await stMATIC.connect(testers[0]).requestWithdraw(amount, testers[3].address)) + .emit(stMATIC, "RequestWithdrawEvent") + .withArgs(testers[0].address, amount, testers[3].address); const owned = await poLidoNFT.getOwnedTokens(testers[0].address); expect(owned).length(1); }); @@ -334,7 +337,7 @@ describe("Starting to test StMATIC contract", () => { await stakeOperator(1, testers[0], "10"); await mint(testers[0], amount2Submit); await submit(testers[0], amount2Submit, testers[2].address); - await requestWithdraw(testers[0], ethers.utils.parseEther("0.005")); + await requestWithdraw(testers[0], ethers.utils.parseEther("0.005"), testers[3].address); const balance = await poLidoNFT.balanceOf(testers[0].address); expect(balance.eq(1)).to.be.true; @@ -389,7 +392,7 @@ describe("Starting to test StMATIC contract", () => { await stMATIC.delegate(); await mockStakeManager.unstake(1); - await requestWithdraw(testers[0], ethers.utils.parseEther("0.005")); + await requestWithdraw(testers[0], ethers.utils.parseEther("0.005"), testers[3].address); const tokens = await poLidoNFT.getOwnedTokens(testers[0].address); const RequestWithdraw = await stMATIC.token2WithdrawRequest(tokens[0]); @@ -412,7 +415,7 @@ describe("Starting to test StMATIC contract", () => { await stMATIC.delegate(); await mockStakeManager.slash(1); - await requestWithdraw(testers[0], ethers.utils.parseEther("0.005")); + await requestWithdraw(testers[0], ethers.utils.parseEther("0.005"), testers[3].address); const tokens = await poLidoNFT.getOwnedTokens(testers[0].address); const RequestWithdraw = await stMATIC.token2WithdrawRequest(tokens[0]); @@ -448,7 +451,7 @@ describe("Starting to test StMATIC contract", () => { ); const withdrawAmountWei = ethers.utils.parseEther(withdrawAmounts[i]); - await requestWithdraw(testers[i], withdrawAmountWei); + await requestWithdraw(testers[i], withdrawAmountWei, testers[3].address); ownedTokens.push(await poLidoNFT.getOwnedTokens(testers[i].address)); } @@ -458,7 +461,8 @@ describe("Starting to test StMATIC contract", () => { await mockStakeManager.setEpoch(withdrawalDelay.add(currentEpoch)); for (let i = 0; i < delegatorsAmount; i++) { - await claimTokens(testers[i], ownedTokens[i][0]); + expect(await stMATIC.connect(testers[i]).claimTokens(ownedTokens[i][0])) + .emit(stMATIC, "ClaimTokensEvent"); const balanceAfter = await mockERC20.balanceOf(testers[i].address); expect(balanceAfter.eq(ethers.utils.parseEther(withdrawAmounts[i]))).to.be @@ -481,7 +485,7 @@ describe("Starting to test StMATIC contract", () => { await submit(testers[0], submitAmount, testers[2].address); await stMATIC.delegate(); const balanceBefore = await mockERC20.balanceOf(testers[0].address); - await requestWithdraw(testers[0], withdrawAmount); + await requestWithdraw(testers[0], withdrawAmount, testers[3].address); const withdrawalDelay = await mockStakeManager.withdrawalDelay(); const currentEpoch = await mockStakeManager.epoch(); @@ -631,7 +635,7 @@ describe("Starting to test StMATIC contract", () => { withdrawAmounts.push(withdrawAmount); const withdrawAmountWei = withdrawAmounts[i]; - await requestWithdraw(testers[i], withdrawAmountWei); + await requestWithdraw(testers[i], withdrawAmountWei, testers[3].address); ownedTokens.push(await poLidoNFT.getOwnedTokens(testers[i].address)); } @@ -691,7 +695,7 @@ describe("Starting to test StMATIC contract", () => { ).toFixed(3) ); const withdrawAmountWei = ethers.utils.parseEther(withdrawAmounts[i]); - await requestWithdraw(testers[i], withdrawAmountWei); + await requestWithdraw(testers[i], withdrawAmountWei, testers[3].address); ownedTokens.push(await poLidoNFT.getOwnedTokens(testers[i].address)); } @@ -857,7 +861,7 @@ describe("Starting to test StMATIC contract", () => { ).toFixed(3) ); const withdrawAmountWei = ethers.utils.parseEther(withdrawAmounts[i]); - await requestWithdraw(testers[i], withdrawAmountWei); + await requestWithdraw(testers[i], withdrawAmountWei, testers[3].address); ownedTokens.push(await poLidoNFT.getOwnedTokens(testers[i].address)); } @@ -919,7 +923,7 @@ describe("Starting to test StMATIC contract", () => { ).toFixed(3) ); const withdrawAmountWei = ethers.utils.parseEther(withdrawAmounts[i]); - await requestWithdraw(testers[i], withdrawAmountWei); + await requestWithdraw(testers[i], withdrawAmountWei, testers[3].address); ownedTokens.push(await poLidoNFT.getOwnedTokens(testers[i].address)); } @@ -1427,7 +1431,7 @@ describe("Starting to test StMATIC contract", () => { await mint(testers[0], submitAmount); await submit(testers[0], submitAmount, testers[2].address); await stMATIC.delegate(); - await requestWithdraw(testers[0], toEth("30")); + await requestWithdraw(testers[0], toEth("30"), testers[3].address); expect(await stMATIC.getMaticFromTokenId(1)).eq(toEth("30")); }); @@ -1449,7 +1453,7 @@ describe("Starting to test StMATIC contract", () => { await mint(testers[0], submitAmount); await submit(testers[0], submitAmount, testers[2].address); await stMATIC.delegate(); - await requestWithdraw(testers[0], requestAmount); + await requestWithdraw(testers[0], requestAmount, testers[3].address); expect(await stMATIC.getMaticFromTokenId(1)).eq(requestAmount); }); @@ -1469,7 +1473,7 @@ describe("Starting to test StMATIC contract", () => { await mint(testers[0], submitAmount); await submit(testers[0], submitAmount, testers[2].address); - await requestWithdraw(testers[0], submitAmount); + await requestWithdraw(testers[0], submitAmount, testers[3].address); expect(await stMATIC.getTotalPooledMatic(), "getTotalPooledMatic").eq(0); expect(await stMATIC.getMaticFromTokenId(1), "getMaticFromTokenId").eq(submitAmount); @@ -1808,9 +1812,9 @@ describe("Starting to test StMATIC contract", () => { await mockStakeManager.setEpoch(withdrawalDelay.add(currentEpoch)); await stMATIC.claimTotalDelegated2StMatic(0); - expect(await stMATIC.connect(testers[0]).requestWithdraw(amountSubmit)) + expect(await stMATIC.connect(testers[0]).requestWithdraw(amountSubmit, testers[3].address)) .emit(stMATIC, "RequestWithdrawEvent") - .withArgs(testers[0].address, amountSubmit); + .withArgs(testers[0].address, amountSubmit, testers[3].address); const req = await stMATIC.token2WithdrawRequest(1); expect(req.validatorAddress).eq(ethers.constants.AddressZero); @@ -1835,7 +1839,7 @@ describe("Starting to test StMATIC contract", () => { await stMATIC.delegate(); await stopOperator(1); - await expect(stMATIC.connect(testers[0]).requestWithdraw(amountSubmit)) + await expect(stMATIC.connect(testers[0]).requestWithdraw(amountSubmit, testers[3].address)) .revertedWith("Too much to withdraw"); }); });