Skip to content

Commit

Permalink
renames
Browse files Browse the repository at this point in the history
  • Loading branch information
andresaiello committed May 9, 2024
1 parent 3888ee9 commit b6cf391
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 34 deletions.
18 changes: 9 additions & 9 deletions packages/zevm-app-contracts/contracts/xp-nft/xpNFT.sol
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ contract ZetaXP is ERC721URIStorage, Ownable {
uint256 count;
}

struct Data {
struct TokenData {
uint256 xpTotal;
uint256 level;
uint256 testnetCampaignParticipant;
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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) {
Expand All @@ -128,25 +128,25 @@ 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
) internal {
_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];
}
}

// External mint function
function mintNFT(
address to,
uint256 tokenId,
Data memory data_,
TokenData memory data_,
uint256[] calldata taskIds,
Task[] calldata taskValues,
Signature calldata signature
Expand All @@ -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
Expand Down
7 changes: 3 additions & 4 deletions packages/zevm-app-contracts/test/xp-nft/test.helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export interface Task {
count: number;
}

export interface Data {
export interface TokenData {
enrollDate: number;
generation: number;
level: number;
Expand All @@ -16,7 +16,7 @@ export interface Data {
}

export interface NFT {
data: Data;
data: TokenData;
tasks: Task[];
tasksId: number[];
to: string;
Expand All @@ -27,7 +27,7 @@ export const getSignature = async (
signer: SignerWithAddress,
to: string,
tokenId: number,
data: Data,
data: TokenData,
tasksId: number[],
tasks: Task[]
) => {
Expand All @@ -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"],
Expand Down
41 changes: 20 additions & 21 deletions packages/zevm-app-contracts/test/xp-nft/xp-nft.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand All @@ -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);
Expand All @@ -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);
}
Expand All @@ -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: {
Expand All @@ -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,
Expand All @@ -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");
});
Expand Down

0 comments on commit b6cf391

Please sign in to comment.