Skip to content

Commit

Permalink
Merge branch 'milestone-1.12.0' into d-robert
Browse files Browse the repository at this point in the history
  • Loading branch information
911-Benedek-RobertGeorge committed Feb 26, 2024
2 parents e5c63ca + ea749f9 commit 5665582
Show file tree
Hide file tree
Showing 35 changed files with 846 additions and 977 deletions.
682 changes: 367 additions & 315 deletions package-lock.json

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{
"name": "data-dex",
"version": "1.11.0",
"version": "1.11.4",
"description": "The Itheum Data DEX enables you to trade your data using web3 tech",
"dependencies": {
"@chakra-ui/icons": "2.1.1",
"@chakra-ui/react": "2.8.2",
"@emotion/react": "11.11.3",
"@emotion/styled": "11.11.0",
"@hookform/resolvers": "3.3.4",
"@itheum/sdk-mx-data-nft": "2.6.2",
"@itheum/sdk-mx-data-nft": "2.7.0-alpha.2",
"@itheum/sdk-mx-enterprise": "0.2.0",
"@multiversx/sdk-core": "12.18.0",
"@multiversx/sdk-dapp": "2.28.0",
Expand Down
Binary file added src/assets/img/whitelist/NFTuneApp.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/img/whitelist/TimeCapsuleApp.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
99 changes: 50 additions & 49 deletions src/components/ListDataNFTModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,25 @@ import {
useToast,
useColorMode,
} from "@chakra-ui/react";
import { Offer } from "@itheum/sdk-mx-data-nft/out";
import { useGetAccountInfo, useGetLoginInfo, useGetNetworkConfig, useGetPendingTransactions, useTrackTransactionStatus } from "@multiversx/sdk-dapp/hooks";
import axios from "axios";

import BigNumber from "bignumber.js";
import DataNFTLiveUptime from "components/UtilComps/DataNFTLiveUptime";
import { contractsForChain } from "libs/config";
import { getApi } from "libs/MultiversX/api";
import { sleep, printPrice, convertToLocalString, getTokenWantedRepresentation, backendApi } from "libs/utils";
import { DataNftMarketContract } from "libs/MultiversX/dataNftMarket";
import { sleep, printPrice, convertToLocalString, getTokenWantedRepresentation, backendApi, getApiDataMarshal } from "libs/utils";
import { useMarketStore } from "store";

export type ListModalProps = {
isOpen: boolean;
onClose: () => void;
sellerFee: number;
nftData: any;
offer: any;
marketContract: any;
offer: Partial<Offer>;
marketContract: DataNftMarketContract;
amount: number;
setAmount: (amount: number) => void;
};
Expand All @@ -40,16 +42,15 @@ export default function ListDataNFTModal({ isOpen, onClose, sellerFee, nftData,
const { chainID } = useGetNetworkConfig();
const { address } = useGetAccountInfo();
const marketRequirements = useMarketStore((state) => state.marketRequirements);

const toast = useToast();
const fullPrice = amount * offer.wanted_token_amount;
const fullPrice = amount * Number(offer.wantedTokenAmount);
const priceWithSellerFee = fullPrice - (fullPrice * sellerFee) / 10000;
const priceWithSellerFeeAndRoyalties = priceWithSellerFee - priceWithSellerFee * nftData.royalties;
const feePrice =
address !== nftData.creator
? printPrice(priceWithSellerFeeAndRoyalties, getTokenWantedRepresentation(offer.wanted_token_identifier, offer.wanted_token_nonce))
: printPrice(priceWithSellerFee, getTokenWantedRepresentation(offer.wanted_token_identifier, offer.wanted_token_nonce));
const fee = offer.wanted_token_amount;
? printPrice(priceWithSellerFeeAndRoyalties, getTokenWantedRepresentation(offer.wantedTokenIdentifier ?? "", offer.wantedTokenNonce ?? 0))
: printPrice(priceWithSellerFee, getTokenWantedRepresentation(offer.wantedTokenIdentifier ?? "", offer.wantedTokenNonce ?? 0));
const fee = offer.wantedTokenAmount;
const [readTermsChecked, setReadTermsChecked] = useState(false);
const [liveUptimeFAIL, setLiveUptimeFAIL] = useState<boolean>(true);
const [isLiveUptimeSuccessful, setIsLiveUptimeSuccessful] = useState<boolean>(false);
Expand Down Expand Up @@ -92,15 +93,15 @@ export default function ListDataNFTModal({ isOpen, onClose, sellerFee, nftData,

async function addOfferBackend(
txHash = listTxHash,
offered_token_identifier = nftData.collection,
offered_token_nonce = nftData.nonce,
offered_token_amount = 1,
offeredTokenIdentifier = nftData.collection,
offeredTokenNonce = nftData.nonce,
offeredTokenAmount = 1,
title = nftData.title,
description = nftData.description,
wanted_token_identifier = offer.wanted_token_identifier,
wanted_token_nonce = offer.wanted_token_nonce,
wanted_token_amount = Number(
(Number(offer.wanted_token_amount) + (Number(offer.wanted_token_amount) * (marketRequirements.buyerTaxPercentage ?? 200)) / 10000) * Number(10 ** 18)
wantedTokenIdentifier = offer.wantedTokenIdentifier,
wantedTokenNonce = offer.wantedTokenNonce,
wantedTokenAmount = Number(
(Number(offer.wantedTokenAmount) + (Number(offer.wantedTokenAmount) * (marketRequirements.buyerTaxPercentage ?? 200)) / 10000) * Number(10 ** 18)
).toString(),
quantity = amount * 1,
owner = address
Expand Down Expand Up @@ -135,17 +136,17 @@ export default function ListDataNFTModal({ isOpen, onClose, sellerFee, nftData,
};

const requestBody = {
index: index,
offered_token_identifier: offered_token_identifier,
offered_token_nonce: offered_token_nonce,
offered_token_amount: offered_token_amount,
title: title,
description: description,
wanted_token_identifier: wanted_token_identifier,
wanted_token_nonce: wanted_token_nonce,
wanted_token_amount: wanted_token_amount,
quantity: quantity,
owner: owner,
index,
offeredTokenIdentifier,
offeredTokenNonce,
offeredTokenAmount,
title,
description,
wantedTokenIdentifier,
wantedTokenNonce,
wantedTokenAmount,
quantity,
owner,
};

const response = await fetch(`${backendUrl}/addOffer`, {
Expand Down Expand Up @@ -196,21 +197,21 @@ export default function ListDataNFTModal({ isOpen, onClose, sellerFee, nftData,
}
}

const { sessionId } = await marketContract.addToMarket(nftData.collection, nftData.nonce, amount, offer.wanted_token_amount, address);
const { sessionId } = await marketContract.addToMarket(nftData.collection, nftData.nonce, amount, offer.wantedTokenAmount ?? 0, address);
if (isWebWallet) {
const price = Number(offer.wanted_token_amount) + (Number(offer.wanted_token_amount) * (marketRequirements.buyerTaxPercentage ?? 200)) / 10000;
const price = Number(offer.wantedTokenAmount) + (Number(offer.wantedTokenAmount) * (marketRequirements.buyerTaxPercentage ?? 200)) / 10000;
sessionStorage.setItem(
"web-wallet-tx",
JSON.stringify({
type: "add-offer-tx",
offered_token_identifier: nftData.collection,
offered_token_nonce: nftData.nonce,
offered_token_amount: 1,
offeredTokenIdentifier: nftData.collection,
offeredTokenNonce: nftData.nonce,
offeredTokenAmount: 1,
title: nftData.title,
description: nftData.description,
wanted_token_identifier: offer.wanted_token_identifier,
wanted_token_nonce: offer.wanted_token_nonce,
wanted_token_amount: Number(price * Number(10 ** 18)).toString(),
wantedTokenIdentifier: offer.wantedTokenIdentifier,
wantedTokenNonce: offer.wantedTokenNonce,
wantedTokenAmount: Number(price * Number(10 ** 18)).toString(),
quantity: amount * 1,
owner: address,
})
Expand Down Expand Up @@ -263,8 +264,8 @@ export default function ListDataNFTModal({ isOpen, onClose, sellerFee, nftData,
<>
{": "}
{printPrice(
new BigNumber(offer.wanted_token_amount).toNumber(),
getTokenWantedRepresentation(offer.wanted_token_identifier, offer.wanted_token_nonce)
new BigNumber(offer.wantedTokenAmount ?? 0).toNumber(),
getTokenWantedRepresentation(offer.wantedTokenIdentifier ?? "", offer.wantedTokenNonce ?? 0)
)}
</>
) : (
Expand All @@ -277,10 +278,10 @@ export default function ListDataNFTModal({ isOpen, onClose, sellerFee, nftData,
<Box w="140px">Seller Tax (per NFT)</Box>
<Box>
:{" "}
{`${sellerFee / 100}% (${new BigNumber(offer.wanted_token_amount)
{`${sellerFee / 100}% (${new BigNumber(offer.wantedTokenAmount ?? 0)
.multipliedBy(sellerFee)
.div(10000)
.toNumber()} ${getTokenWantedRepresentation(offer.wanted_token_identifier, offer.wanted_token_nonce)})`}
.toNumber()} ${getTokenWantedRepresentation(offer.wantedTokenIdentifier ?? "", offer.wantedTokenNonce ?? 0)})`}
</Box>
</Flex>

Expand All @@ -290,8 +291,8 @@ export default function ListDataNFTModal({ isOpen, onClose, sellerFee, nftData,
<Box>
:{" "}
{`${convertToLocalString(nftData.royalties * 100)}% (${convertToLocalString(
new BigNumber(offer.wanted_token_amount).multipliedBy((1 - sellerFee / 10000) * nftData.royalties)
)} ${getTokenWantedRepresentation(offer.wanted_token_identifier, offer.wanted_token_nonce)})`}
new BigNumber(offer.wantedTokenAmount ?? 0).multipliedBy((1 - sellerFee / 10000) * nftData.royalties)
)} ${getTokenWantedRepresentation(offer.wantedTokenIdentifier ?? "", offer.wantedTokenNonce ?? 0)})`}
</Box>
</Flex>
)}
Expand All @@ -302,7 +303,7 @@ export default function ListDataNFTModal({ isOpen, onClose, sellerFee, nftData,
{": "}
{
<>
{feePrice} {fee && itheumPrice ? `(~${convertToLocalString(fee * itheumPrice * amount, 2)} USD)` : ""}
{feePrice} {fee && itheumPrice ? `(~${convertToLocalString(Number(fee) * itheumPrice * amount, 2)} USD)` : ""}
</>
}
</Box>
Expand All @@ -312,20 +313,20 @@ export default function ListDataNFTModal({ isOpen, onClose, sellerFee, nftData,
<Box>
{
<>
{new BigNumber(offer.wanted_token_amount).comparedTo(0) <= 0 ? (
{new BigNumber(offer.wantedTokenAmount ?? 0).comparedTo(0) <= 0 ? (
""
) : (
<>
{" " + convertToLocalString(new BigNumber(offer.wanted_token_amount).multipliedBy(amount)) + " "}
{getTokenWantedRepresentation(offer.wanted_token_identifier, offer.wanted_token_nonce)}
{" " + convertToLocalString(new BigNumber(offer.wantedTokenAmount ?? 0).multipliedBy(amount)) + " "}
{getTokenWantedRepresentation(offer.wantedTokenIdentifier ?? "", offer.wantedTokenNonce ?? 0)}
{" - "}
{convertToLocalString(new BigNumber(offer.wanted_token_amount).multipliedBy(amount).multipliedBy(sellerFee).div(10000))}
{" " + getTokenWantedRepresentation(offer.wanted_token_identifier, offer.wanted_token_nonce)}
{convertToLocalString(new BigNumber(offer.wantedTokenAmount ?? 0).multipliedBy(amount).multipliedBy(sellerFee).div(10000))}
{" " + getTokenWantedRepresentation(offer.wantedTokenIdentifier ?? "", offer.wantedTokenNonce ?? 0)}
{address != nftData.creator && (
<>
{" - "}
{convertToLocalString(new BigNumber(offer.wanted_token_amount).multipliedBy((1 - sellerFee / 10000) * nftData.royalties))}
{" " + getTokenWantedRepresentation(offer.wanted_token_identifier, offer.wanted_token_nonce)}
{convertToLocalString(new BigNumber(offer.wantedTokenAmount ?? 0).multipliedBy((1 - sellerFee / 10000) * nftData.royalties))}
{" " + getTokenWantedRepresentation(offer.wantedTokenIdentifier ?? "", offer.wantedTokenNonce ?? 0)}
</>
)}
</>
Expand All @@ -337,7 +338,7 @@ export default function ListDataNFTModal({ isOpen, onClose, sellerFee, nftData,
</Box>

<DataNFTLiveUptime
dataMarshal={nftData.dataMarshal}
dataMarshal={getApiDataMarshal(chainID)}
NFTId={nftData.id}
handleFlagAsFailed={(hasFailed: boolean) => setLiveUptimeFAIL(hasFailed)}
isLiveUptimeSuccessful={isLiveUptimeSuccessful}
Expand Down
15 changes: 8 additions & 7 deletions src/components/MarketplaceLowerCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,18 @@ import {
Flex,
Box,
} from "@chakra-ui/react";
import { Offer } from "@itheum/sdk-mx-data-nft/out";
import { useGetAccountInfo, useGetLoginInfo } from "@multiversx/sdk-dapp/hooks/account";
import { useGetPendingTransactions } from "@multiversx/sdk-dapp/hooks/transactions";
import ProcureDataNFTModal from "components/ProcureDataNFTModal";
import ExploreAppButton from "components/UtilComps/ExploreAppButton";
import { DataNftMetadataType, OfferType } from "libs/MultiversX/types";
import { DataNftMetadataType } from "libs/MultiversX/types";
import { isValidNumericCharacter } from "libs/utils";
import { useMarketStore } from "store";
import PreviewDataButton from "./PreviewDataButton";

type MarketplaceLowerCardProps = {
offer: OfferType;
offer: Offer;
nftMetadata: DataNftMetadataType;
};

Expand All @@ -31,28 +32,28 @@ const MarketplaceLowerCard: FC<MarketplaceLowerCardProps> = ({ offer, nftMetadat
const { address } = useGetAccountInfo();
const { hasPendingTransactions } = useGetPendingTransactions();
const marketRequirements = useMarketStore((state) => state.marketRequirements);

const [amount, setAmount] = useState<number>(1);
const [amountError, setAmountError] = useState<string>("");
const { isOpen: isProcureModalOpen, onOpen: onProcureModalOpen, onClose: onProcureModalClose } = useDisclosure();
const isMyNft = offer.owner === address;
const maxBuyLimit = import.meta.env.VITE_MAX_BUY_LIMIT_PER_SFT ? Number(import.meta.env.VITE_MAX_BUY_LIMIT_PER_SFT) : 0;
const maxBuyNumber = maxBuyLimit > 0 ? Math.min(maxBuyLimit, offer.quantity) : offer.quantity;

return (
<>
<HStack justifyContent="stretch">
<PreviewDataButton previewDataURL={nftMetadata.dataPreview} />

<ExploreAppButton nonce={offer.offered_token_nonce} />
<ExploreAppButton nonce={offer.offeredTokenNonce} />
</HStack>

{!isMyNft ? (
isMxLoggedIn && (
<HStack>
<HStack mt={2}>
<Flex flexDirection="row">
<Box>
<Text fontSize="md" mb="1">
Amount{" "}
Quantity{" "}
</Text>
<NumberInput
size="md"
Expand Down Expand Up @@ -93,7 +94,7 @@ const MarketplaceLowerCard: FC<MarketplaceLowerCardProps> = ({ offer, nftMetadat
onClick={() => {
onProcureModalOpen();
}}>
Purchase Data
Buy Data NFT
</Button>
</Flex>
</HStack>
Expand Down
19 changes: 10 additions & 9 deletions src/components/MyListedDataLowerCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import BigNumber from "bignumber.js";
import { PREVIEW_DATA_ON_DEVNET_SESSION_KEY, contractsForChain } from "libs/config";
import { useLocalStorage } from "libs/hooks";
import { DataNftMarketContract } from "libs/MultiversX/dataNftMarket";
import { DataNftMetadataType, OfferType } from "libs/MultiversX/types";
import { DataNftMetadataType } from "libs/MultiversX/types";
import {
convertToLocalString,
convertEsdtToWei,
Expand All @@ -39,9 +39,10 @@ import {
} from "libs/utils";
import { useMarketStore } from "store";
import PreviewDataButton from "./PreviewDataButton";
import { Offer } from "@itheum/sdk-mx-data-nft/out";

type MyListedDataLowerCardProps = {
offer: OfferType;
offer: Offer;
nftMetadata: DataNftMetadataType;
};

Expand Down Expand Up @@ -134,7 +135,7 @@ const MyListedDataLowerCard: FC<MyListedDataLowerCardProps> = ({ offer, nftMetad

const price = newPrice + (newPrice * (marketRequirements.buyerTaxPercentage ?? 200)) / 10000;

const requestBody = { price: convertEsdtToWei(price, tokenDecimals(offer.wanted_token_identifier)).toFixed() };
const requestBody = { price: convertEsdtToWei(price, tokenDecimals(offer.wantedTokenIdentifier)).toFixed() };
const response = await fetch(`${backendUrl}/updateOffer/${index}`, {
method: "POST",
headers: headers,
Expand Down Expand Up @@ -182,8 +183,8 @@ const MyListedDataLowerCard: FC<MyListedDataLowerCardProps> = ({ offer, nftMetad
const fee =
marketRequirements && offer
? convertWeiToEsdt(
new BigNumber(offer.wanted_token_amount).multipliedBy(10000).div(10000 + (marketRequirements.buyerTaxPercentage as number)),
tokenDecimals(offer.wanted_token_identifier)
new BigNumber(offer.wantedTokenAmount).multipliedBy(10000).div(10000 + (marketRequirements.buyerTaxPercentage as number)),
tokenDecimals(offer.wantedTokenIdentifier)
).toNumber()
: 0;

Expand Down Expand Up @@ -247,7 +248,7 @@ const MyListedDataLowerCard: FC<MyListedDataLowerCardProps> = ({ offer, nftMetad

const { sessionId: sessionIdTemp } = await contract.updateOfferPrice(
offer.index,
convertEsdtToWei(newListingPrice, tokenDecimals(offer.wanted_token_identifier)).toFixed(),
convertEsdtToWei(newListingPrice, tokenDecimals(offer.wantedTokenIdentifier)).toFixed(),
address
);
if (isWebWallet) {
Expand Down Expand Up @@ -287,8 +288,8 @@ const MyListedDataLowerCard: FC<MyListedDataLowerCardProps> = ({ offer, nftMetad
if (marketRequirements) {
setNewListingPrice(
convertWeiToEsdt(
new BigNumber(offer.wanted_token_amount).multipliedBy(10000).div(10000 + marketRequirements.buyerTaxPercentage),
tokenDecimals(offer.wanted_token_identifier)
new BigNumber(offer.wantedTokenAmount).multipliedBy(10000).div(10000 + marketRequirements.buyerTaxPercentage),
tokenDecimals(offer.wantedTokenIdentifier)
).toNumber()
);
} else {
Expand Down Expand Up @@ -452,7 +453,7 @@ const MyListedDataLowerCard: FC<MyListedDataLowerCardProps> = ({ offer, nftMetad
Current Fee per Data NFT
</Box>
<Box fontSize="md">
: {fee} {getTokenWantedRepresentation(offer.wanted_token_identifier, offer.wanted_token_nonce)}{" "}
: {fee} {getTokenWantedRepresentation(offer.wantedTokenIdentifier, offer.wantedTokenNonce)}{" "}
{fee && itheumPrice ? `(~${convertToLocalString(fee * itheumPrice, 2)} USD)` : ""}
</Box>
</Flex>
Expand Down
Loading

0 comments on commit 5665582

Please sign in to comment.