Skip to content

Commit

Permalink
add approve spender in setup
Browse files Browse the repository at this point in the history
  • Loading branch information
jacqueline-57b committed Dec 9, 2024
1 parent 1d26b88 commit f7066f8
Show file tree
Hide file tree
Showing 2 changed files with 121 additions and 4 deletions.
19 changes: 15 additions & 4 deletions test/hardhat/e2e/setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import hre from "hardhat";
import { network } from "hardhat";
import { GroupingModule, IPAssetRegistry, LicenseRegistry, LicenseToken, LicensingModule, PILicenseTemplate, RoyaltyPolicyLAP, MockERC20, RoyaltyPolicyLRP, AccessController } from "./constants";
import { GroupingModule, IPAssetRegistry, LicenseRegistry, LicenseToken, LicensingModule, PILicenseTemplate, RoyaltyPolicyLAP, MockERC20, RoyaltyPolicyLRP, AccessController, RoyaltyModule } from "./constants";
import { terms } from "./licenseTermsTemplate";
import { approveSpender, checkAndApproveSpender, getAllowance, mintAmount } from "./utils/erc20Helper";
import { check } from "prettier";

before(async function () {
console.log(`================= Load Contract =================`);
Expand All @@ -24,7 +26,7 @@ before(async function () {
console.log("chainId: ", this.chainId);

console.log(`================= Register non-commercial PIL license terms =================`);
await this.licenseTemplate.registerLicenseTerms(terms);
await this.licenseTemplate.registerLicenseTerms(terms).then((tx : any) => tx.wait());
this.nonCommericialLicenseId = await this.licenseTemplate.getLicenseTermsId(terms);
console.log("Non-commercial licenseTermsId: ", this.nonCommericialLicenseId);

Expand All @@ -34,7 +36,7 @@ before(async function () {
testTerms.defaultMintingFee = 30;
testTerms.commercialUse = true;
testTerms.currency = MockERC20;
await this.licenseTemplate.registerLicenseTerms(testTerms);
await this.licenseTemplate.registerLicenseTerms(testTerms).then((tx : any) => tx.wait());
this.commericialUseLicenseId = await this.licenseTemplate.getLicenseTermsId(testTerms);
console.log("Commercial-use licenseTermsId: ", this.commericialUseLicenseId);

Expand All @@ -45,7 +47,16 @@ before(async function () {
testTerms.commercialUse = true;
testTerms.commercialRevShare = 100;
testTerms.currency = MockERC20;
await this.licenseTemplate.registerLicenseTerms(testTerms);
await this.licenseTemplate.registerLicenseTerms(testTerms).then((tx : any) => tx.wait());
this.commericialRemixLicenseId = await this.licenseTemplate.getLicenseTermsId(testTerms);
console.log("Commercial-remix licenseTermsId: ", this.commericialRemixLicenseId);

console.log(`================= ERC20 approve spender =================`);
const amountToCheck = BigInt(2057 * 10 ** 18);
await checkAndApproveSpender(this.owner, RoyaltyPolicyLAP, amountToCheck);
await checkAndApproveSpender(this.owner, RoyaltyPolicyLRP, amountToCheck);
await checkAndApproveSpender(this.owner, RoyaltyModule, amountToCheck);
await checkAndApproveSpender(this.user1, RoyaltyPolicyLAP, amountToCheck);
await checkAndApproveSpender(this.user1, RoyaltyPolicyLRP, amountToCheck);
await checkAndApproveSpender(this.user1, RoyaltyModule, amountToCheck);
});
106 changes: 106 additions & 0 deletions test/hardhat/e2e/utils/erc20Helper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
// mockERC20 - mint, approveSpender, Allowance

import hre from "hardhat"
import { MockERC20 } from "../constants";
import { ethers } from "ethers";

// mockERC20 - approveSpender
export async function approveSpender(spender: string, amount: bigint, singer: ethers.Wallet):Promise<string> {
const contractAbi = [
{
type: "function",
inputs: [
{ name: "spender", internalType: "address", type: "address" },
{ name: "amount", internalType: "uint256", type: "uint256" },
],
name: "approve",
outputs: [{ name: "", internalType: "bool", type: "bool" }],
stateMutability: "nonpayable",
}
];

const contract = new hre.ethers.Contract(MockERC20, contractAbi, singer);

// approveSpender
try {
const tx = await contract.approve(
spender,
amount
);
await tx.wait();
console.log("hash", tx.hash);
console.log("approveSpender done");
return tx.hash;
} catch (error) {
console.error("Error approveSpender:", error);
throw error;
};
};

// mockERC20 - mint
export async function mintAmount(toAddress: string, amount: bigint, singer: ethers.Wallet):Promise<string> {
const contractAbi = [
{
type: "function",
inputs: [
{ name: "to", internalType: "address", type: "address" },
{ name: "amount", internalType: "uint256", type: "uint256" },
],
name: "mint",
outputs: [{ name: "", internalType: "bool", type: "bool" }],
stateMutability: "nonpayable",
}
];

const contract = new hre.ethers.Contract(MockERC20, contractAbi, singer);

// mintAmount
try {
const tx = await contract.mint(
toAddress,
amount
);
await tx.wait();
console.log("hash", tx.hash);
return tx.hash;
} catch (error) {
console.error("Error mintAmount:", error);
throw error;
};
};

// mockERC20 - Allowance
export async function getAllowance(owner: string, spender: string, singer: ethers.Wallet):Promise<bigint> {
const contractAbi = [
{
type: "function",
inputs: [
{ name: "owner", internalType: "address", type: "address" },
{ name: "spender", internalType: "address", type: "address" },
],
name: "allowance",
outputs: [{ name: "", internalType: "uint256", type: "uint256" }],
stateMutability: "view",
}
];

const contract = new hre.ethers.Contract(MockERC20, contractAbi, singer);

// getAllowance
try {
const tx = await contract.allowance(owner, spender);
console.log("Allowance", tx);
return tx;
} catch (error) {
console.error("Error getAllowance:", error);
throw error;
};
};

export async function checkAndApproveSpender(owner: any, spender: any, amount: bigint) {
const currentAllowance = await getAllowance(owner.address, spender, owner);
if (currentAllowance < amount) {
await mintAmount(owner.address, amount, owner);
await approveSpender(spender, amount, owner);
}
};

0 comments on commit f7066f8

Please sign in to comment.