diff --git a/packages/zevm-app-contracts/contracts/xp-nft/xpNFT.sol b/packages/zevm-app-contracts/contracts/xp-nft/xpNFT.sol index 7763faf8..678be0b8 100644 --- a/packages/zevm-app-contracts/contracts/xp-nft/xpNFT.sol +++ b/packages/zevm-app-contracts/contracts/xp-nft/xpNFT.sol @@ -17,7 +17,7 @@ contract ZetaXP is ERC721URIStorage, Ownable { uint256 count; } - struct Data { + struct TokenData { uint256 xpTotal; uint256 level; uint256 testnetCampaignParticipant; @@ -26,7 +26,7 @@ contract ZetaXP is ERC721URIStorage, Ownable { uint256 generation; } - mapping(uint256 => Data) public tokenData; + mapping(uint256 => TokenData) public tokenData; mapping(uint256 => mapping(uint256 => Task)) public tasksByTokenId; // Base URL for NFT images @@ -86,7 +86,7 @@ contract ZetaXP is ERC721URIStorage, Ownable { function _verify( address to, uint256 tokenId, - Data memory data_, + TokenData memory data_, uint256[] calldata taskIds, Task[] calldata taskValues, Signature calldata signature @@ -103,7 +103,7 @@ contract ZetaXP is ERC721URIStorage, Ownable { function _calculateHash( address to, uint256 tokenId, - Data memory data_, + TokenData memory data_, uint256[] memory taskIds, Task[] memory taskValues ) private pure returns (bytes32) { @@ -128,7 +128,7 @@ contract ZetaXP is ERC721URIStorage, Ownable { function _updateNFT( address to, uint256 tokenId, - Data memory data_, + TokenData memory data_, uint256[] calldata taskIds, Task[] calldata taskValues, Signature calldata signature @@ -136,9 +136,9 @@ contract ZetaXP is ERC721URIStorage, Ownable { _verify(to, tokenId, data_, taskIds, taskValues, signature); if (taskIds.length != taskValues.length) revert LengthMismatch(); - data[tokenId] = data_; + tokenData[tokenId] = data_; for (uint256 i = 0; i < taskIds.length; i++) { - tasks[tokenId][taskIds[i]] = taskValues[i]; + tasksByTokenId[tokenId][taskIds[i]] = taskValues[i]; } } @@ -146,7 +146,7 @@ contract ZetaXP is ERC721URIStorage, Ownable { function mintNFT( address to, uint256 tokenId, - Data memory data_, + TokenData memory data_, uint256[] calldata taskIds, Task[] calldata taskValues, Signature calldata signature @@ -162,7 +162,7 @@ contract ZetaXP is ERC721URIStorage, Ownable { // External mint function function updateNFT( uint256 tokenId, - Data memory data_, + TokenData memory data_, uint256[] calldata taskIds, Task[] calldata taskValues, Signature calldata signature diff --git a/packages/zevm-app-contracts/test/xp-nft/test.helpers.ts b/packages/zevm-app-contracts/test/xp-nft/test.helpers.ts index c3e98794..03a5ae1b 100644 --- a/packages/zevm-app-contracts/test/xp-nft/test.helpers.ts +++ b/packages/zevm-app-contracts/test/xp-nft/test.helpers.ts @@ -6,7 +6,7 @@ export interface Task { count: number; } -export interface Data { +export interface TokenData { enrollDate: number; generation: number; level: number; @@ -16,7 +16,7 @@ export interface Data { } export interface NFT { - data: Data; + data: TokenData; tasks: Task[]; tasksId: number[]; to: string; @@ -27,7 +27,7 @@ export const getSignature = async ( signer: SignerWithAddress, to: string, tokenId: number, - data: Data, + data: TokenData, tasksId: number[], tasks: Task[] ) => { @@ -45,7 +45,6 @@ export const getSignature = async ( ] ); - let combinedPayload = payload; for (let i = 0; i < tasksId.length; i++) { payload = ethers.utils.defaultAbiCoder.encode( ["bytes", "uint256", "bool", "uint256"], diff --git a/packages/zevm-app-contracts/test/xp-nft/xp-nft.ts b/packages/zevm-app-contracts/test/xp-nft/xp-nft.ts index ba825ae4..6db3b3a8 100644 --- a/packages/zevm-app-contracts/test/xp-nft/xp-nft.ts +++ b/packages/zevm-app-contracts/test/xp-nft/xp-nft.ts @@ -8,15 +8,15 @@ import { ZetaXP } from "../../typechain-types"; import { getSignature, NFT } from "./test.helpers"; describe("XP NFT Contract test", () => { - let zetaXP: ZetaXP, inviter: SignerWithAddress, invitee: SignerWithAddress, addrs: SignerWithAddress[]; + let zetaXP: ZetaXP, signer: SignerWithAddress, user: SignerWithAddress, addrs: SignerWithAddress[]; let sampleNFT: NFT; beforeEach(async () => { - [inviter, invitee, ...addrs] = await ethers.getSigners(); + [signer, user, ...addrs] = await ethers.getSigners(); const zetaXPFactory = await ethers.getContractFactory("ZetaXP"); //@ts-ignore - zetaXP = await zetaXPFactory.deploy("ZETA NFT", "ZNFT", "https://api.zetachain.io/nft/", inviter.address); + zetaXP = await zetaXPFactory.deploy("ZETA NFT", "ZNFT", "https://api.zetachain.io/nft/", signer.address); sampleNFT = { data: { @@ -38,17 +38,16 @@ describe("XP NFT Contract test", () => { }, ], tasksId: [2, 3], - to: invitee.address, + to: user.address, tokenId: 1, }; }); - const validateNFT = async (nft: NFT) => { const owner = await zetaXP.ownerOf(nft.tokenId); await expect(owner).to.be.eq(nft.to); - const nftData = await zetaXP.data(nft.tokenId); + const nftData = await zetaXP.tokenData(nft.tokenId); await expect(nftData.xpTotal).to.be.eq(nft.data.xpTotal); await expect(nftData.level).to.be.eq(nft.data.level); await expect(nftData.testnetCampaignParticipant).to.be.eq(nft.data.testnetCampaignParticipant); @@ -58,7 +57,7 @@ describe("XP NFT Contract test", () => { for (let i = 0; i < nft.tasksId.length; i++) { const sampleTask = nft.tasks[i]; - const task = await zetaXP.tasks(nft.tokenId, nft.tasksId[i]); + const task = await zetaXP.tasksByTokenId(nft.tokenId, nft.tasksId[i]); await expect(task.completed).to.be.eq(sampleTask.completed); await expect(task.count).to.be.eq(sampleTask.count); } @@ -69,27 +68,27 @@ describe("XP NFT Contract test", () => { describe("NFT test", () => { it("Should mint an NFT", async () => { - const sig = await getSignature(inviter, invitee.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks); - await zetaXP.mintNFT(invitee.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks, sig); + const sig = await getSignature(signer, user.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks); + await zetaXP.mintNFT(user.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks, sig); await validateNFT(sampleNFT); }); it("Should emit event on minting", async () => { - const sig = await getSignature(inviter, invitee.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks); - const tx = zetaXP.mintNFT(invitee.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks, sig); - await expect(tx).to.emit(zetaXP, "NewNFTMinted").withArgs(invitee.address, 1); + const sig = await getSignature(signer, user.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks); + const tx = zetaXP.mintNFT(user.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks, sig); + await expect(tx).to.emit(zetaXP, "NewNFTMinted").withArgs(user.address, 1); }); it("Should revert if signature it's not correct", async () => { - const sig = await getSignature(addrs[0], invitee.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks); - const tx = zetaXP.mintNFT(invitee.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks, sig); + const sig = await getSignature(addrs[0], user.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks); + const tx = zetaXP.mintNFT(user.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks, sig); await expect(tx).to.be.revertedWith("InvalidSigner"); }); it("Should update NFT", async () => { - const sig = await getSignature(inviter, invitee.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks); - await zetaXP.mintNFT(invitee.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks, sig); + const sig = await getSignature(signer, user.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks); + await zetaXP.mintNFT(user.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks, sig); const updatedSampleNFT = { data: { @@ -111,13 +110,13 @@ describe("XP NFT Contract test", () => { }, ], tasksId: [2, 3], - to: invitee.address, + to: user.address, tokenId: 1, }; const updatedSig = await getSignature( - inviter, - invitee.address, + signer, + user.address, 1, updatedSampleNFT.data, updatedSampleNFT.tasksId, @@ -134,8 +133,8 @@ describe("XP NFT Contract test", () => { const url = await zetaXP.baseTokenURI(); await expect(url).to.be.eq("https://api.zetachain.io/nft/v2/"); - const sig = await getSignature(inviter, invitee.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks); - await zetaXP.mintNFT(invitee.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks, sig); + const sig = await getSignature(signer, user.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks); + await zetaXP.mintNFT(user.address, 1, sampleNFT.data, sampleNFT.tasksId, sampleNFT.tasks, sig); const tokenURI = await zetaXP.tokenURI(1); await expect(tokenURI).to.be.eq("https://api.zetachain.io/nft/v2/1"); });