diff --git a/contract-deployer/src/app/page.tsx b/contract-deployer/src/app/page.tsx
index 9bcb9ab5..5a8923be 100644
--- a/contract-deployer/src/app/page.tsx
+++ b/contract-deployer/src/app/page.tsx
@@ -1,15 +1,54 @@
"use client";
-import { useMbWallet } from "@mintbase-js/react";
import { NearWalletConnector } from "@/components/NearWalletSelector";
+import { useMbWallet } from "@mintbase-js/react";
-import Head from "next/head";
import ContractDeployer from "@/components/ContractDeployer";
+import { SuccessPage } from "@/components/Success";
import { Button } from "@/components/ui/button";
+import { mbUrl, nearblocksUrl } from "@/config/setup";
+import { getTxnHash } from "@/lib/utils";
+import Head from "next/head";
+import { useSearchParams } from "next/navigation";
+import { useEffect, useState } from "react";
export default function Home() {
const { isConnected, activeAccountId } = useMbWallet();
+ const [txnUrl, setTxnUrl] = useState("");
+
+ const params = useSearchParams();
+
+ const mintedParams = params.get("signMeta")
+ ? JSON.parse(params.get("signMeta") as string)
+ : "";
+ const txnHashes = params.get("transactionHashes")
+ ? params.get("transactionHashes")
+ : "";
+
+ useEffect(() => {
+ const fetchTxnHash = async () => {
+ const txn = await getTxnHash(txnHashes as string);
+ setTxnUrl(txn);
+ };
+
+ fetchTxnHash();
+ }, [txnHashes]);
+
+ if (mintedParams) {
+ const contractName = mintedParams.args.contractAddress as string;
+ const contractPage = `${mbUrl}/contract/${contractName}`;
+ const txnHashUrl = `${nearblocksUrl}/txns/${txnUrl}`;
+
+ const successPageData = {
+ contractName: contractName,
+ contractPage,
+ txnHashUrl,
+ };
+
+ return ;
+ }
+
if (isConnected)
return (
diff --git a/contract-deployer/src/components/Success.tsx b/contract-deployer/src/components/Success.tsx
new file mode 100644
index 00000000..8a0bc928
--- /dev/null
+++ b/contract-deployer/src/components/Success.tsx
@@ -0,0 +1,47 @@
+import { Button } from "@/components/ui/button";
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+} from "@/components/ui/card";
+import Link from "next/link";
+
+interface SuccessPageData {
+ contractName: string;
+ contractPage: string;
+ txnHashUrl: string;
+}
+
+export function SuccessPage({ data }: { data: SuccessPageData }): JSX.Element {
+ const { contractPage, contractName, txnHashUrl } = data;
+
+ return (
+
+
+
+ Success you just deployed a smart contract!
+
+
+
+
+ {contractName}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/contract-deployer/src/config/setup.ts b/contract-deployer/src/config/setup.ts
index 59951bf9..8eff2a86 100644
--- a/contract-deployer/src/config/setup.ts
+++ b/contract-deployer/src/config/setup.ts
@@ -1,4 +1,21 @@
+import { Network } from "@mintbase-js/sdk";
+
export const MintbaseWalletSetup = {
contractAddress: "test122212.mintspace2.testnet",
network: "testnet",
-};
\ No newline at end of file
+};
+
+export const network = MintbaseWalletSetup.network as Network;
+
+const isTestnet = MintbaseWalletSetup.network === "testnet";
+
+export const nearblocksApi = !isTestnet
+ ? "https://api.nearblocks.io"
+ : "https://api-testnet.nearblocks.io";
+
+export const mbUrl = !isTestnet
+ ? "https://www.mintbase.xyz"
+ : "https://testnet.mintbase.xyz";
+export const nearblocksUrl = !isTestnet
+ ? "https://nearblocks.io"
+ : "https://testnet.nearblocks.io";
diff --git a/contract-deployer/src/hooks/useDeployContract.ts b/contract-deployer/src/hooks/useDeployContract.ts
index f85f49ee..137a50e5 100644
--- a/contract-deployer/src/hooks/useDeployContract.ts
+++ b/contract-deployer/src/hooks/useDeployContract.ts
@@ -7,8 +7,16 @@ import * as z from "zod";
import { zodResolver } from "@hookform/resolvers/zod";
+import { network } from "@/config/setup";
+import { callbackUrl } from "@/lib/utils";
import { checkStoreName } from "@mintbase-js/data";
-import { MINTBASE_CONTRACTS, deployContract, execute } from "@mintbase-js/sdk";
+import {
+ CallBackArgs,
+ MINTBASE_CONTRACTS,
+ TransactionSuccessEnum,
+ deployContract,
+ execute,
+} from "@mintbase-js/sdk";
import { formSchema } from "./formSchema";
const useDeployContract = () => {
@@ -33,24 +41,38 @@ const useDeployContract = () => {
});
const handleDeployContract = async (data: FieldValues): Promise => {
- if (!activeAccountId) return;
+ if (!activeAccountId || !data?.name) return;
+
+ const contractName = data.name;
// check if contract already exists.
- const { data: checkStore } = await checkStoreName(data.name);
+ const { data: checkStore } = await checkStoreName(contractName);
if (checkStore?.nft_contracts.length === 0) {
setAlreadyExistsError("");
const wallet = await getWallet();
+
+ const factoryContractId = MINTBASE_CONTRACTS[network];
+
+ const callbackArgs: CallBackArgs = {
+ args: {
+ contractAddress: `${contractName}.${factoryContractId}`,
+ },
+ type: TransactionSuccessEnum.DEPLOY_STORE,
+ };
+
+ const cbUrl = callbackUrl(callbackArgs);
+
const deployArgs = deployContract({
- name: data.name,
+ name: contractName,
ownerId: activeAccountId,
- factoryContractId: MINTBASE_CONTRACTS.testnet,
+ factoryContractId: factoryContractId,
metadata: {
symbol: data.symbol,
},
});
- await execute({ wallet }, deployArgs);
+ await execute({ wallet, callbackUrl: cbUrl }, deployArgs);
} else {
setAlreadyExistsError("Contract already exists.");
}
diff --git a/contract-deployer/src/lib/utils.ts b/contract-deployer/src/lib/utils.ts
index cad10f16..2e418adb 100644
--- a/contract-deployer/src/lib/utils.ts
+++ b/contract-deployer/src/lib/utils.ts
@@ -1,8 +1,26 @@
"use client";
-import { type ClassValue, clsx } from "clsx"
-import { twMerge } from "tailwind-merge"
-
+import { nearblocksApi } from "@/config/setup";
+import { CallBackArgs } from "@mintbase-js/sdk";
+import { clsx, type ClassValue } from "clsx";
+import { twMerge } from "tailwind-merge";
+
export function cn(...inputs: ClassValue[]) {
- return twMerge(clsx(inputs))
+ return twMerge(clsx(inputs));
}
+
+export const getTxnHash = async (hash: string) => {
+ const res = await fetch(`${nearblocksApi}/v1/search/?keyword=${hash}`);
+
+ const txn = await res.json();
+
+ return txn?.receipts[0].originated_from_transaction_hash;
+};
+
+export const callbackUrl = (cbArgs: CallBackArgs) =>
+ `${window.location.origin}/?signMeta=${encodeURIComponent(
+ JSON.stringify({
+ type: cbArgs.type,
+ args: cbArgs.args,
+ })
+ )}`;