Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion .env.local
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
NEXT_PUBLIC_LOGO_HEIGHT=64
NEXT_PUBLIC_MERKLE_REDEEM_CONTRACT="0xd8401646686430711D5d48407D8C0bb79616baef"

# redeem contract var is used for claiming ROBOT tokens and it is used in combination with typechain directly
# dont confuse this with later implementations for NFT claims and wearables which is implemented using eth-sdk
# and relevant configuration and contract addresses can be found here eth-sdk/eth-sdk.config.ts
NEXT_PUBLIC_MERKLE_REDEEM_CONTRACT="0x67f5C948DceAf99352f6cac71c862C1C3b60dfDF"

NEXT_PUBLIC_IPFS_NODE="cloudflare-ipfs.com"
NEXT_PUBLIC_IPFS_CLAIMS_SNAPSHOT_URL="storageapi.fleek.co/hammadj-team-bucket/robot-claim/snapshot.json"
NEXT_PUBLIC_APP_NAME="mf-dashboard"
Expand Down
9 changes: 6 additions & 3 deletions components/closet/ClaimWearables.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ import Button from "@/components/atoms/Button"
import useUserName from "@/hooks/useUserName";
import { NftClaim } from "@/hooks/useMetafactoryData";
import { Alert } from "@/components/atoms";
import { getMainnetSdk } from '@dethcrypto/eth-sdk-client';
// import { getMainnetSdk } from '@dethcrypto/eth-sdk-client';
import { getGoerliSdk } from '@dethcrypto/eth-sdk-client';

import { useSigner } from 'wagmi';


Expand All @@ -21,7 +23,8 @@ const ClaimWearables: React.FC<{nftClaims: NftClaim[]}> = ({ nftClaims }) => {
};
const executeClaim = async () => {
if(signer) {
const { ethereum } = getMainnetSdk(signer);
// eslint-disable-next-line camelcase
const { nft_giveaway } = getGoerliSdk(signer);
const claims = nftClaims.map((nftClaim: NftClaim) => ({
to: nftClaim.claim_json.to,
erc1155: nftClaim.claim_json.erc1155,
Expand All @@ -32,7 +35,7 @@ const ClaimWearables: React.FC<{nftClaims: NftClaim[]}> = ({ nftClaims }) => {
const merkleRootHashes = nftClaims.map((nftClaim: NftClaim) => nftClaim.merkle_root_hash)
const merkleProofs = nftClaims.map((nftClaim: NftClaim) => nftClaim.claim_json.proof)

ethereum.nft_giveaway.claimMultipleTokensFromMultipleMerkleTree(
nft_giveaway.claimMultipleTokensFromMultipleMerkleTree(
merkleRootHashes,
claims,
merkleProofs
Expand Down
9 changes: 6 additions & 3 deletions components/closet/WearableDetail/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import { Canvas } from '@react-three/fiber';
import { OrbitControls, Stage } from '@react-three/drei';
import useUserName from "@/hooks/useUserName";
import useNftMetadata from "@/hooks/useNftMetadata";
import { getMainnetSdk } from '@dethcrypto/eth-sdk-client';
// import { getMainnetSdk } from '@dethcrypto/eth-sdk-client';
import { getGoerliSdk } from '@dethcrypto/eth-sdk-client';
import { useProvider, useAccount } from 'wagmi';
import { Loading } from "@/components/atoms";
import { useRouter } from "next/router";
Expand All @@ -28,8 +29,10 @@ const Index: NextPage = () => {
useEffect(() => {
const fetch = async () => {
if(provider && account?.address && id) {
const { ethereum } = getMainnetSdk(provider);
const nftBalances = await ethereum.nft_wearables.balanceOfBatch([account.address], [Number(id)]);
// const { ethereum } = getMainnetSdk(provider);
// eslint-disable-next-line camelcase
const { nft_wearables } = getGoerliSdk(provider);
const nftBalances = await nft_wearables.balanceOfBatch([account.address], [Number(id)]);
setBalance(ethers.utils.formatUnits(nftBalances[0], 0))
};
}
Expand Down
14 changes: 8 additions & 6 deletions components/closet/index.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
/* eslint-disable camelcase */
/* eslint-disable prettier/prettier */
import Cookies from "js-cookie";
import { useState, useEffect } from "react";
import { VStack, HStack, Text } from "@chakra-ui/react";
import type { NextPage } from "next";
import { useAccount, useProvider } from 'wagmi';
import { getMainnetSdk } from '@dethcrypto/eth-sdk-client';
import { getGoerliSdk } from '@dethcrypto/eth-sdk-client';
// import { getMainnetSdk } from '@dethcrypto/eth-sdk-client';
import { ethers } from "ethers";
import { Loading } from "@/components/atoms";
import useNftMetadata, { NftItem } from "@/hooks/useNftMetadata";
Expand All @@ -30,8 +32,8 @@ const Wearables: NextPage = () => {

useEffect(() => {
const findClaimableClaims = async (currentProvider: ethers.providers.Provider, address: string, rootHashes: string[], allNftClaims: NftClaim[]) => {
const { ethereum } = getMainnetSdk(provider);
const claimedStatuses = await ethereum.nft_giveaway.getClaimedStatus(address, rootHashes);
const { nft_giveaway } = getGoerliSdk(provider);
const claimedStatuses = await nft_giveaway.getClaimedStatus(address, rootHashes);
const currentUnclaimedNftClaims = claimedStatuses.reduce(
(sum: NftClaim[], currentValue: boolean, currentIndex: number) => {
if(currentValue === true) return sum;
Expand Down Expand Up @@ -59,7 +61,7 @@ const Wearables: NextPage = () => {

useEffect(() => {
if (authBearer && account?.address) {
fetchNftClaims(authBearer);
fetchNftClaims(authBearer, account?.address);
}
}, [account?.address, authBearer, fetchNftClaims]);

Expand All @@ -68,9 +70,9 @@ const Wearables: NextPage = () => {
const nftIds = getNftIds();

if(provider && account?.address && nftIds.length > 0 && nfts) {
const { ethereum } = getMainnetSdk(provider);
const { nft_wearables } = getGoerliSdk(provider);
const addressess = Array(nftIds.length).fill(account?.address)
const nftBalances = await ethereum.nft_wearables.balanceOfBatch(addressess, nftIds);
const nftBalances = await nft_wearables.balanceOfBatch(addressess, nftIds);
const parsedBalances = nftBalances.map((balance: ethers.BigNumberish) => ethers.utils.formatUnits(balance, 0))

// reduce to nft items only with existing balance
Expand Down
2 changes: 1 addition & 1 deletion components/profile/InvalidChain.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const Profile: NextPage = () => {
toast({
id: selectEthToastId,
title: `Please select ${
process.env.NEXT_PUBLIC_CHAIN_ID === "4" ? "Rinkeby" : "Ethereum mainnet"
process.env.NEXT_PUBLIC_CHAIN_ID === "5" ? "GOERLI" : "Ethereum mainnet"
} network`,
status: "error",
isClosable: true,
Expand Down
1 change: 1 addition & 0 deletions eth-sdk/abis/goerli/nft_giveaway.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"components":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"address","name":"contractAddress","type":"address"}],"indexed":false,"internalType":"struct ClaimERC1155ERC721ERC20.ERC1155Claim[]","name":"erc1155","type":"tuple[]"},{"components":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"address","name":"contractAddress","type":"address"}],"indexed":false,"internalType":"struct ClaimERC1155ERC721ERC20.ERC721Claim[]","name":"erc721","type":"tuple[]"},{"components":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address[]","name":"contractAddresses","type":"address[]"}],"indexed":false,"internalType":"struct ClaimERC1155ERC721ERC20.ERC20Claim","name":"erc20","type":"tuple"},{"indexed":false,"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"ClaimedMultipleTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"expiryTime","type":"uint256"}],"name":"NewGiveaway","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"expiryTime","type":"uint256"}],"name":"addNewGiveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"components":[{"internalType":"address","name":"to","type":"address"},{"components":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"address","name":"contractAddress","type":"address"}],"internalType":"struct ClaimERC1155ERC721ERC20.ERC1155Claim[]","name":"erc1155","type":"tuple[]"},{"components":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"address","name":"contractAddress","type":"address"}],"internalType":"struct ClaimERC1155ERC721ERC20.ERC721Claim[]","name":"erc721","type":"tuple[]"},{"components":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address[]","name":"contractAddresses","type":"address[]"}],"internalType":"struct ClaimERC1155ERC721ERC20.ERC20Claim","name":"erc20","type":"tuple"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"internalType":"struct ClaimERC1155ERC721ERC20.Claim","name":"claim","type":"tuple"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"claimMultipleTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"rootHashes","type":"bytes32[]"},{"components":[{"internalType":"address","name":"to","type":"address"},{"components":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"address","name":"contractAddress","type":"address"}],"internalType":"struct ClaimERC1155ERC721ERC20.ERC1155Claim[]","name":"erc1155","type":"tuple[]"},{"components":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"address","name":"contractAddress","type":"address"}],"internalType":"struct ClaimERC1155ERC721ERC20.ERC721Claim[]","name":"erc721","type":"tuple[]"},{"components":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address[]","name":"contractAddresses","type":"address[]"}],"internalType":"struct ClaimERC1155ERC721ERC20.ERC20Claim","name":"erc20","type":"tuple"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"internalType":"struct ClaimERC1155ERC721ERC20.Claim[]","name":"claims","type":"tuple[]"},{"internalType":"bytes32[][]","name":"proofs","type":"bytes32[][]"}],"name":"claimMultipleTokensFromMultipleMerkleTree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes32[]","name":"rootHashes","type":"bytes32[]"}],"name":"getClaimedStatus","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"leaves","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Loading