// import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; // import { expect } from "chai"; // import { ethers, network } from "hardhat"; // import { P2PixErrors } from "./utils/errors"; // import { MockToken, P2PIX } from "../src/types"; // describe("P2PIX deposit test", () => { // let owner: SignerWithAddress; // let wallet2: SignerWithAddress; // let wallet3: SignerWithAddress; // // let wallet4: SignerWithAddress; // let p2pix: P2PIX; // Contract instance // let erc20: MockToken; // Token instance // let lockID: string; // it("Will deploy contracts", async () => { // [owner, wallet2, wallet3 /* , wallet4 */] = // await ethers.getSigners(); // const ERC20Factory = await ethers.getContractFactory( // "MockToken", // ); // erc20 = await ERC20Factory.deploy( // ethers.utils.parseEther("20000000"), // ); // await erc20.deployed(); // // Check initial balance // expect(await erc20.balanceOf(owner.address)).to.equal( // ethers.utils.parseEther("20000000"), // ); // const P2PIX = await ethers.getContractFactory("P2PIX"); // p2pix = await P2PIX.deploy(3, [ // owner.address, // wallet2.address, // ]); // await p2pix.deployed(); // const ownerKey = await p2pix._castAddrToKey(owner.address); // const wallet2key = await p2pix._castAddrToKey(wallet2.address); // const wallet3key = await p2pix._castAddrToKey(wallet3.address); // // Verify values at deployment // expect( // await p2pix.validBacenSigners(ownerKey), // ).to.equal(true); // expect( // await p2pix.validBacenSigners(wallet2key), // ).to.equal(true); // expect( // await p2pix.validBacenSigners(wallet3key), // ).to.equal(false); // }); // it("Should allow create a deposit", async () => { // let transaction = await erc20.approve( // p2pix.address, // ethers.utils.parseEther("1000"), // ); // await expect(transaction) // .to.emit(erc20, "Approval") // .withArgs( // owner.address, // p2pix.address, // ethers.utils.parseEther("1000"), // ); // transaction = await p2pix.deposit( // erc20.address, // ethers.utils.parseEther("1000"), // "SELLER PIX KEY", // // { value: ethers.utils.parseEther("0.1") }, // ); // await expect(transaction) // .to.emit(p2pix, "DepositAdded") // .withArgs( // owner.address, // 0, // erc20.address, // // ethers.utils.parseEther("0.1"), // ethers.utils.parseEther("1000"), // ); // console.log( // "GAS USED:", // (await transaction.wait()).cumulativeGasUsed.toString(), // ); // }); // it("Should allow create a new lock", async () => { // const transaction = await p2pix // .connect(wallet3) // .lock( // 0, // wallet3.address, // ethers.constants.AddressZero, // "0", // ethers.utils.parseEther("100"), // [], // ); // lockID = ethers.utils.solidityKeccak256( // ["uint256", "uint256", "address"], // [0, ethers.utils.parseEther("100"), wallet3.address], // ); // await expect(transaction) // .to.emit(p2pix, "LockAdded") // .withArgs( // wallet3.address, // lockID, // 0, // ethers.utils.parseEther("100"), // ); // console.log( // "GAS USED:", // (await transaction.wait()).cumulativeGasUsed.toString(), // ); // }); // it("Should release the locked amount to the buyer", async () => { // const endtoendID = "123"; // const messageToSign = ethers.utils.solidityKeccak256( // ["string", "uint256", "uint256"], // [ // "SELLER PIX KEY", // ethers.utils.parseEther("100"), // endtoendID, // ], // ); // // Note: messageToSign is a string, that is 66-bytes long, to sign the // // binary value, we must convert it to the 32 byte Array that // // the string represents // // // // i.e. // // // 66-byte string // // "0x592fa743889fc7f92ac2a37bb1f5ba1daf2a5c84741ca0e0061d243a2e6707ba" // // ... vs ... // // // 32 entry Uint8Array // // [ 89, 47, 167, 67, 136, 159, ... 103, 7, 186] // const messageHashBytes = // ethers.utils.arrayify(messageToSign); // // Sign the string message // const flatSig = await owner.signMessage(messageHashBytes); // // For Solidity, we need the expanded-format of a signature // const sig = ethers.utils.splitSignature(flatSig); // const transaction = await p2pix // .connect(wallet3) // .release(lockID, endtoendID, sig.r, sig.s, sig.v); // await expect(transaction) // .to.emit(p2pix, "LockReleased") // .withArgs(wallet3.address, lockID); // console.log( // "GAS USED:", // (await transaction.wait()).cumulativeGasUsed.toString(), // ); // expect(await erc20.balanceOf(wallet3.address)).to.equal( // ethers.utils.parseEther("100"), // ); // }); // it("Should allow recreate same lock", async () => { // const transaction = await p2pix // .connect(wallet3) // .lock( // 0, // wallet3.address, // ethers.constants.AddressZero, // "0", // ethers.utils.parseEther("100"), // [], // ); // lockID = ethers.utils.solidityKeccak256( // ["uint256", "uint256", "address"], // [0, ethers.utils.parseEther("100"), wallet3.address], // ); // await expect(transaction) // .to.emit(p2pix, "LockAdded") // .withArgs( // wallet3.address, // lockID, // 0, // ethers.utils.parseEther("100"), // ); // }); // it("Should prevent create again same lock", async () => { // await expect( // p2pix // .connect(wallet3) // .lock( // 0, // wallet3.address, // ethers.constants.AddressZero, // "0", // ethers.utils.parseEther("100"), // [], // ), // ).to.be.revertedWithCustomError(p2pix, P2PixErrors.NotExpired); // }); // it("Should release the locked amount to the buyer", async () => { // const endtoendID = "124"; // const messageToSign = ethers.utils.solidityKeccak256( // ["string", "uint256", "uint256"], // [ // "SELLER PIX KEY", // ethers.utils.parseEther("100"), // endtoendID, // ], // ); // const messageHashBytes = // ethers.utils.arrayify(messageToSign); // const flatSig = await owner.signMessage(messageHashBytes); // const sig = ethers.utils.splitSignature(flatSig); // await p2pix // .connect(wallet3) // .release(lockID, endtoendID, sig.r, sig.s, sig.v); // expect(await erc20.balanceOf(wallet3.address)).to.equal( // ethers.utils.parseEther("200"), // ); // }); // it("Should prevent release again the lock", async () => { // const endtoendID = "125"; // const messageToSign = ethers.utils.solidityKeccak256( // ["string", "uint256", "uint256"], // [ // "SELLER PIX KEY", // ethers.utils.parseEther("100"), // endtoendID, // ], // ); // const messageHashBytes = // ethers.utils.arrayify(messageToSign); // const flatSig = await owner.signMessage(messageHashBytes); // const sig = ethers.utils.splitSignature(flatSig); // await expect( // p2pix // .connect(wallet3) // .release(lockID, endtoendID, sig.r, sig.s, sig.v), // ).to.be.revertedWithCustomError(p2pix, P2PixErrors.AlreadyReleased); // }); // it("Should prevent create a 900 lock", async () => { // await expect( // p2pix // .connect(wallet3) // .lock( // 0, // wallet3.address, // ethers.constants.AddressZero, // "0", // ethers.utils.parseEther("900"), // [], // ), // ).to.be.revertedWithCustomError( // p2pix, P2PixErrors.NotEnoughTokens); // }); // it("Should allow recreate same lock again", async () => { // const transaction = await p2pix // .connect(wallet3) // .lock( // 0, // wallet3.address, // ethers.constants.AddressZero, // "0", // ethers.utils.parseEther("100"), // [], // ); // lockID = ethers.utils.solidityKeccak256( // ["uint256", "uint256", "address"], // [0, ethers.utils.parseEther("100"), wallet3.address], // ); // await expect(transaction) // .to.emit(p2pix, "LockAdded") // .withArgs( // wallet3.address, // lockID, // 0, // ethers.utils.parseEther("100"), // ); // }); // it("Should allow unlock expired lock", async () => { // await expect( // p2pix.unlockExpired([lockID]), // ).to.be.revertedWithCustomError( // p2pix, P2PixErrors.NotExpired); // await network.provider.send("evm_mine"); // await network.provider.send("evm_mine"); // await network.provider.send("evm_mine"); // const transaction = await p2pix.unlockExpired([lockID]); // await expect(transaction) // .to.emit(p2pix, "LockReturned") // .withArgs(wallet3.address, lockID); // }); // it("Should prevent unlock again", async () => { // await expect( // p2pix.unlockExpired([lockID]), // ).to.be.revertedWithCustomError( // p2pix, P2PixErrors.NotExpired); // }); // });