diff --git a/apps/snfoundry/deployments/sepolia_latest.json b/apps/snfoundry/deployments/sepolia_latest.json index f704a2a..17bbf16 100644 --- a/apps/snfoundry/deployments/sepolia_latest.json +++ b/apps/snfoundry/deployments/sepolia_latest.json @@ -1,12 +1,12 @@ { "CofiCollection": { "classHash": "0x7a108607024be2054d1558cbfd5de3fe264afe9e025bc7653b1bc5fc76d1af0", - "address": "0x2beb2106100c5238830e2d0e23193f581fd69e53b9c5d0f7eabf11c7d85db14", + "address": "0x1b0409734a9924cf829943a4d65925957d34f041af627a1d8a6d5be69ab532d", "contract": "cofi_collection.cairo" }, "Marketplace": { "classHash": "0x44eb6074fa74a9dbddb65c52394cd1bab274e3bc22e1fc36c26c37686d1e440", - "address": "0x3b73e235a852f76cb01e014246c59db4623d7ecf5c68675f07df0e209cd0303", + "address": "0xdda31f5e1f8316230739226265d62c2d869ad989ad0e51be592dce30776918", "contract": "marketplace.cairo" } } diff --git a/apps/snfoundry/scripts-ts/deploy.ts b/apps/snfoundry/scripts-ts/deploy.ts index 3eb1107..b463f1c 100644 --- a/apps/snfoundry/scripts-ts/deploy.ts +++ b/apps/snfoundry/scripts-ts/deploy.ts @@ -5,7 +5,7 @@ import { executeDeployCalls, exportDeployments, } from "./deploy-contract"; -import { green } from "./helpers/colorize-log"; +import { green, yellow } from "./helpers/colorize-log"; /** * Deploy a contract using the specified parameters. @@ -77,7 +77,7 @@ const deployScript = async (): Promise => { constructorArgs: { cofi_collection_address: cofiCollectionAddress, admin: deployer.address, - market_fee: BigInt(300000), + market_fee: BigInt(250), // 2.5 % }, }); @@ -107,6 +107,11 @@ const deployScript = async (): Promise => { ]; const { transaction_hash } = await deployer.execute(transactions); console.log("🚀 Final transactions hash", transaction_hash); + console.log( + yellow( + "Make sure to update the contracts metadata in web app!! See README.md", + ), + ); }; deployScript() diff --git a/apps/snfoundry/scripts-ts/helpers/deploy-wrapper.ts b/apps/snfoundry/scripts-ts/helpers/deploy-wrapper.ts index c41176f..4d96c32 100644 --- a/apps/snfoundry/scripts-ts/helpers/deploy-wrapper.ts +++ b/apps/snfoundry/scripts-ts/helpers/deploy-wrapper.ts @@ -36,7 +36,7 @@ function main() { // Execute the deploy script without the reset option try { execSync( - `cd contracts && scarb build && ts-node ../scripts-ts/deploy.ts --network ${argv.network || "devnet"} --fee ${argv.fee || "eth"} ${!argv.reset && "--no-reset "} && ts-node ../scripts-ts/helpers/parse-deployments.ts && cd·..`, + `cd contracts && scarb build && ts-node ../scripts-ts/deploy.ts --network ${argv.network || "devnet"} --fee ${argv.fee || "eth"} ${!argv.reset && "--no-reset "} && ts-node ../scripts-ts/helpers/parse-deployments.ts && cd ..`, { stdio: "inherit" }, ); } catch (error) { diff --git a/apps/web/src/app/user/my-claims/page.tsx b/apps/web/src/app/user/my-claims/page.tsx index 8fc34fc..bdbaf5b 100644 --- a/apps/web/src/app/user/my-claims/page.tsx +++ b/apps/web/src/app/user/my-claims/page.tsx @@ -75,6 +75,7 @@ export default function MyClaims() { const [ClaimedOrders, setClaimedOrders] = useState(mockedOrders); const [searchTerm, setSearchTerm] = useState(""); const [MoneyToClaim, setMoneyToClaim] = useState(0); + const [checked, setChecked] = useState(false); const [, setIsFiltersModalOpen] = useState(false); const { t } = useTranslation(); @@ -88,35 +89,31 @@ export default function MyClaims() { ); useEffect(() => { - const unclaimedOrders = mockedOrders - .map((orderGroup) => ({ - ...orderGroup, - items: orderGroup.items.filter((item) => !item.claimed), - })) - .filter((orderGroup) => orderGroup.items.length > 0); - - setOrdersToClaim(unclaimedOrders); - - const totalMoneyToClaim = unclaimedOrders.reduce((total, orderGroup) => { - return ( - total + - orderGroup.items.reduce( - (groupTotal, item) => groupTotal + item.price, - 0, - ) - ); - }, 0); - - setMoneyToClaim(totalMoneyToClaim); - - const claimedOrders = mockedOrders - .map((orderGroup) => ({ - ...orderGroup, - items: orderGroup.items.filter((item) => item.claimed), - })) - .filter((orderGroup) => orderGroup.items.length > 0); - - setClaimedOrders(claimedOrders); + const fetchData = () => { + const unclaimedOrders = mockedOrders + .map((orderGroup) => ({ + ...orderGroup, + items: orderGroup.items.filter((item) => !item.claimed), + })) + .filter((orderGroup) => orderGroup.items.length > 0); + + setOrdersToClaim(unclaimedOrders); + + const totalMoneyToClaim = 0; + + setMoneyToClaim(totalMoneyToClaim); + + const claimedOrders = mockedOrders + .map((orderGroup) => ({ + ...orderGroup, + items: orderGroup.items.filter((item) => item.claimed), + })) + .filter((orderGroup) => orderGroup.items.length > 0); + + setClaimedOrders(claimedOrders); + }; + + fetchData(); }, []); const openFiltersModal = () => { @@ -124,6 +121,12 @@ export default function MyClaims() { }; const handleClaim = async () => { + if (!checked) { + const total = await contracts.get_claim_balance(); + setMoneyToClaim(Number(total)); + setChecked(true); + return; + } console.log("claiming"); const tx = await contracts.claim(); alert(`Claimed success with tx: ${tx}`); @@ -181,7 +184,9 @@ export default function MyClaims() { className="mx-auto mt-5 w-[90%] h-15 px-2" onClick={() => handleClaim()} > - {t("recieve")} {MoneyToClaim.toFixed(2)} USD + {!checked + ? "Check balance" + : `${t("recieve")} ${MoneyToClaim.toFixed(2)} USD`}
diff --git a/apps/web/src/contracts/configExternalContracts.ts b/apps/web/src/contracts/configExternalContracts.ts index 80cedef..23eba1d 100644 --- a/apps/web/src/contracts/configExternalContracts.ts +++ b/apps/web/src/contracts/configExternalContracts.ts @@ -7,7 +7,7 @@ const configExternalContracts = { sepolia: { Marketplace: { address: - "0x3b73e235a852f76cb01e014246c59db4623d7ecf5c68675f07df0e209cd0303", + "0xdda31f5e1f8316230739226265d62c2d869ad989ad0e51be592dce30776918", classHash: "0x44eb6074fa74a9dbddb65c52394cd1bab274e3bc22e1fc36c26c37686d1e440", abi: [ @@ -587,7 +587,7 @@ const configExternalContracts = { }, CofiCollection: { address: - "0x2beb2106100c5238830e2d0e23193f581fd69e53b9c5d0f7eabf11c7d85db14", + "0x1b0409734a9924cf829943a4d65925957d34f041af627a1d8a6d5be69ab532d", classHash: "0x7a108607024be2054d1558cbfd5de3fe264afe9e025bc7653b1bc5fc76d1af0", abi: [ diff --git a/apps/web/src/services/contractsInterface.ts b/apps/web/src/services/contractsInterface.ts index 18bb7a6..2ac5536 100644 --- a/apps/web/src/services/contractsInterface.ts +++ b/apps/web/src/services/contractsInterface.ts @@ -131,9 +131,26 @@ class ContractsInterface { "balanceOf", CallData.compile([address, token_id, "0x0"]), ); + return balance; } + async get_claim_balance() { + const address = this.get_user_address(); + if (!this.marketplaceContract) { + throw new Error("Cofi collection contract is not loaded"); + } + const balance_result = await this.marketplaceContract.call( + "claim_balance", + CallData.compile([address]), + ); + const balance = BigInt(Number(balance_result)); + + const stark_price_usd = await this.getStarkPrice(); + const total = (Number(balance) / 1000000000000000000) * stark_price_usd; + return total; + } + async register_product(price_usd: number, initial_stock: number) { // connect user account to contracts this.connect_account(); @@ -208,6 +225,10 @@ class ContractsInterface { "0x0", ]), ); + // wait for allowance to complete to avoid errors + await this.provider.waitForTransaction(tx.transaction_hash, { + retryInterval: 100, + }); return tx.transaction_hash; }