Skip to content

Commit

Permalink
Merge pull request #141 from NetSepio/solana-mint
Browse files Browse the repository at this point in the history
add : solana mint
  • Loading branch information
Rushikeshnimkar authored Sep 25, 2024
2 parents 01caae1 + 47b4755 commit 333f624
Show file tree
Hide file tree
Showing 8 changed files with 2,363 additions and 613 deletions.
9 changes: 9 additions & 0 deletions components/Login/solana.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,15 @@ export const useSolWallet = (setshowsignbutton) => {
const OnSignMessageSol = async () => {
if (sendable) {
try {
const checktoken = Cookies.get("erebrus_token");
const checkwallet = Cookies.get("erebrus_wallet");
const checkuserId = Cookies.get("erebrus_userid");

if (checktoken && checkwallet && checkuserId) {
// All cookies are set, no need to sign message
console.log("User already authenticated");
return;
}
const wallet = getPhantomWallet();
const REACT_APP_GATEWAY_URL = process.env.NEXT_PUBLIC_GATEWAY_URL;

Expand Down
5 changes: 4 additions & 1 deletion components/NftDataContainer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ interface MyReviewContainerProps {
metaDataArray: any[];
MyReviews?: boolean;
selectCollection: any;
chainSymbol:string;
}

const NftdataContainer: React.FC<MyReviewContainerProps> = ({
metaDataArray,
MyReviews = false,
selectCollection,
chainSymbol,
}) => {
const handleReviewDeleted = () => {
window.location.reload();
Expand Down Expand Up @@ -73,10 +75,11 @@ const NftdataContainer: React.FC<MyReviewContainerProps> = ({
)
}
>
<NftdataCard
<NftdataCard
metaData={metaData}
MyReviews={MyReviews}
onReviewDeleted={handleReviewDeleted}
chainSymbol={chainSymbol} // Pass the chainSymbol prop here
/>
</div>
))}
Expand Down
104 changes: 57 additions & 47 deletions components/NftdataCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ interface ReviewCardProps {
MyReviews?: boolean;
// review?: ReviewCreated;
onReviewDeleted?: () => void;
chainSymbol?: string;
}

const background = {
Expand Down Expand Up @@ -62,6 +63,7 @@ const NftdataCard: React.FC<ReviewCardProps> = ({
metaData,
MyReviews = false,
onReviewDeleted,
chainSymbol,
}) => {
const [imageSrc, setImageSrc] = React.useState<string | null>(null);
const [attributes, setAttributes] = React.useState<any>(null);
Expand Down Expand Up @@ -90,18 +92,37 @@ const NftdataCard: React.FC<ReviewCardProps> = ({

useEffect(() => {
const fetchMetaData = async () => {
const ipfsCid = metaData?.current_token_data?.token_uri.replace("ipfs://", "");

// Fetching metadata from IPFS
const metadataResponse = await axios.get(`https://ipfs.io/ipfs/${ipfsCid}`);
const metadata = metadataResponse.data;

console.log("Metadata:", metadata);
setImageSrc(metadata?.image.replace("ipfs://", ""));
setAttributes(metadata?.attributes);
}
if (chainSymbol === 'sol') {
// Handling for Solana NFTs
if (metaData?.current_token_data?.token_uri) {
try {
const response = await axios.get(metaData.current_token_data.token_uri);
const metadata = response.data;
console.log("Solana Metadata:", metadata);
setImageSrc(metadata?.image);
setAttributes(metadata?.attributes);
} catch (error) {
console.error("Error fetching Solana metadata:", error);
}
}
} else {
// Existing code for Aptos NFTs
const ipfsCid = metaData?.current_token_data?.token_uri.replace("ipfs://", "");
if (ipfsCid) {
try {
const metadataResponse = await axios.get(`https://ipfs.io/ipfs/${ipfsCid}`);
const metadata = metadataResponse.data;
console.log("Aptos Metadata:", metadata);
setImageSrc(metadata?.image.replace("ipfs://", ""));
setAttributes(metadata?.attributes);
} catch (error) {
console.error("Error fetching Aptos metadata:", error);
}
}
}
};
fetchMetaData();
}, [metaData]);
}, [metaData, chainSymbol]);

if (!metaData) {
return (
Expand All @@ -118,41 +139,25 @@ const NftdataCard: React.FC<ReviewCardProps> = ({

return (
<div className="w-full cursor-pointer rounded-3xl" style={{ backgroundColor:'#202333', border: '1px solid #0162FF'}}>
{/* <Link href={`/reviews/${metaData.domainName.replace(/^https:\/\//, '')}`}> */}
<div className="w-full h-full rounded-lg p-6">
<div>
<div className="flex flex-col">
<div className="">
<img
alt="alt"
src={`${
"https://nftstorage.link/ipfs"
}/${imageSrc}`}
className=""
/>
{/* <img
alt="alt"
src={`${metaData?.current_token_data.cdn_asset_uris.cdn_image_uri}`}
className=""
/> */}
alt={metaData.current_token_data.token_name}
src={
chainSymbol === 'sol'
? imageSrc || metaData.current_token_data.cdn_asset_uris.cdn_image_uri
: `https://nftstorage.link/ipfs/${imageSrc}`
}
className="w-full h-48 object-cover rounded-lg"
/>
</div>
<div className="w-full">
<h3 className="leading-12 mb-2 text-white">
<div className="lg:flex md:flex justify-between">
<div className="text-xl font-semibold mt-4">

{
metaData.current_token_data.token_name.slice(0, 4) === "ipfs" ? (
<div>
{metaData.current_token_data.token_name.slice(0, 4)}...{metaData.current_token_data.token_name.slice(-4)}
</div>
):(
<div>
{metaData.current_token_data.token_name}
</div>
)
}

{metaData.current_token_data.token_name}
</div>
</div>
</h3>
Expand All @@ -165,22 +170,27 @@ const NftdataCard: React.FC<ReviewCardProps> = ({
</div>
</div>

{attributes && (
<div className="flex-wrap flex gap-2 text-xs text-white rounded-full px-4 py-2 mt-4" style={{backgroundColor:'#0162FF'}}>
<div>Role: {attributes.Role}</div>
<div className="ml-4">Agility: {attributes.Agility}</div>
<div className="ml-4">Strength: {attributes.Strength}</div>
<div>Endurance: {attributes.Endurance}</div>
<div className="ml-4">Intelligence: {attributes.Intelligence}</div>
</div>
)}
{attributes && chainSymbol === 'sol' && (
<div className="flex-wrap flex gap-2 text-xs text-white justify-center rounded-full px-4 py-2 mt-4" style={{backgroundColor:'#0162FF'}}>
{attributes.map((attr, index) => (
<div key={index} className="">{attr.value}</div>
))}
</div>
)}

{attributes && chainSymbol !== 'sol' && (
<div className="flex-wrap flex gap-2 text-xs text-white rounded-full px-4 py-2 mt-4" style={{backgroundColor:'#0162FF'}}>
{Object.entries(attributes).map(([key, value]) => (
<div key={key} className="ml-4">{key}: {value.toString()}</div>
))}
</div>
)}
</div>
</div>
</div>
</div>
{/* </Link> */}
</div>
);
};

export default NftdataCard;
export default NftdataCard;
58 changes: 58 additions & 0 deletions components/UserNFTs.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import { Connection, PublicKey } from '@solana/web3.js';
import { Metaplex } from '@metaplex-foundation/js';

const fetchUserNFTs = async (userAddress: string, chainSymbol: string) => {
if (!userAddress) {
console.log('No user address provided');
return [];
}

console.log('Fetching NFTs for address:', userAddress);
console.log('Chain symbol:', chainSymbol);

try {
if (chainSymbol === 'sol') {
const connection = new Connection(process.env.NEXT_PUBLIC_SOLANA_RPC_URL);
console.log('Connected to Solana network');

let ownerPublicKey;
try {
ownerPublicKey = new PublicKey(userAddress);
} catch (err) {
console.error('Invalid Solana address:', userAddress);
return [];
}

const metaplex = new Metaplex(connection);

console.log('Fetching all NFTs for owner...');
const userNFTs = await metaplex.nfts().findAllByOwner({ owner: ownerPublicKey });
console.log('All user NFTs:', userNFTs);

const erebrusNFTs = userNFTs.filter(nft => nft.name === "Erebrus VPN NFT").map(nft => ({
amount: 1,
current_token_data: {
token_name: nft.name,
token_uri: nft.uri,
description: nft.json?.description || '',
token_data_id: nft.address.toString(),
cdn_asset_uris: {
cdn_image_uri: nft.json?.image || '',
},
},
}));

console.log('Filtered Erebrus NFTs:', erebrusNFTs);

return erebrusNFTs;
} else {
console.log('NFT fetching for this chain not implemented yet');
return [];
}
} catch (err) {
console.error('Error fetching NFTs:', err);
return [];
}
};

export default fetchUserNFTs;
6 changes: 6 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@
"@identity-connect/wallet-adapter-plugin": "^1.2.2",
"@lighthouse-web3/sdk": "^0.1.12",
"@martianwallet/aptos-wallet-adapter": "^0.0.5",
"@metaplex-foundation/js": "^0.20.1",
"@metaplex-foundation/mpl-token-metadata": "^3.2.1",
"@metaplex-foundation/umi-bundle-defaults": "^0.9.2",
"@metaplex-foundation/umi-signer-wallet-adapters": "^0.9.2",
"@metaplex-foundation/umi-uploader-bundlr": "^0.9.2",
"@msafe/aptos-wallet-adapter": "^1.0.14",
"@mysten/sui.js": "^0.54.1",
"@next/font": "13.1.1",
Expand All @@ -30,6 +35,7 @@
"@solana/wallet-adapter-react": "^0.15.35",
"@solana/wallet-adapter-react-ui": "^0.9.35",
"@solana/wallet-adapter-wallets": "^0.19.32",
"@solana/web3.js": "^1.95.3",
"@stripe/react-stripe-js": "^2.4.0",
"@stripe/stripe-js": "^2.4.0",
"@suiet/wallet-kit": "^0.2.24",
Expand Down
Loading

0 comments on commit 333f624

Please sign in to comment.