From 1adf1ac516d6c1196e34a9281a18e3852aba85c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sehyun=20Chung=20=E2=9C=8C=EF=B8=8E?= <41171808+sehyunc@users.noreply.github.com> Date: Mon, 15 Jul 2024 15:27:42 -0700 Subject: [PATCH] s --- trade.renegade.fi/app/api/get-logs/route.ts | 34 +++++++++++++++++++ trade.renegade.fi/app/providers.tsx | 4 +-- .../create-stepper/steps/default-step.tsx | 14 ++++++-- trade.renegade.fi/lib/viem.ts | 6 ---- 4 files changed, 48 insertions(+), 10 deletions(-) create mode 100644 trade.renegade.fi/app/api/get-logs/route.ts diff --git a/trade.renegade.fi/app/api/get-logs/route.ts b/trade.renegade.fi/app/api/get-logs/route.ts new file mode 100644 index 00000000..e3d1d8bd --- /dev/null +++ b/trade.renegade.fi/app/api/get-logs/route.ts @@ -0,0 +1,34 @@ +import { chain } from "@/lib/viem" +import { NextRequest } from "next/server" +import { createPublicClient, http, parseAbiItem } from "viem" + +// Necessary because public RPC does not support getting logs +export const viemClient = createPublicClient({ + chain, + transport: http(process.env.NEXT_PUBLIC_RPC_URL), +}) + +export async function GET(req: NextRequest) { + try { + const blinderShare = BigInt( + req.nextUrl.searchParams.get("blinderShare") || "0" + ) + if (!blinderShare) { + throw new Error("Blinder share is required") + } + const logs = await viemClient.getLogs({ + address: process.env.NEXT_PUBLIC_DARKPOOL_CONTRACT, + event: parseAbiItem( + "event WalletUpdated(uint256 indexed wallet_blinder_share)" + ), + args: { + wallet_blinder_share: BigInt(blinderShare?.toString() || "0"), + }, + fromBlock: BigInt(process.env.FROM_BLOCK || 0), + }) + return new Response(JSON.stringify({ logs: logs.length })) + } catch (error) { + console.error(error) + return new Response(JSON.stringify({ error }), { status: 500 }) + } +} diff --git a/trade.renegade.fi/app/providers.tsx b/trade.renegade.fi/app/providers.tsx index 6d671efd..e023dca2 100644 --- a/trade.renegade.fi/app/providers.tsx +++ b/trade.renegade.fi/app/providers.tsx @@ -4,7 +4,7 @@ import LazyDatadog from "@/app/(desktop)/telemetry" import { OrderToaster } from "@/app/order-toaster" import { TaskToaster } from "@/app/task-toaster" import { AppProvider } from "@/contexts/App/app-context" -import { chain, sdkViemClient } from "@/lib/viem" +import { chain, viemClient } from "@/lib/viem" import { menuAnatomy } from "@chakra-ui/anatomy" import { CacheProvider } from "@chakra-ui/next-js" import { @@ -204,7 +204,7 @@ export const renegadeConfig = createSDKConfig({ priceReporterUrl: process.env.NEXT_PUBLIC_PRICE_REPORTER_URL, relayerUrl: process.env.NEXT_PUBLIC_RENEGADE_RELAYER_HOSTNAME, ssr: true, - viemClient: sdkViemClient, + viemClient, }) /* diff --git a/trade.renegade.fi/components/steppers/create-stepper/steps/default-step.tsx b/trade.renegade.fi/components/steppers/create-stepper/steps/default-step.tsx index 16d3b401..d163697a 100644 --- a/trade.renegade.fi/components/steppers/create-stepper/steps/default-step.tsx +++ b/trade.renegade.fi/components/steppers/create-stepper/steps/default-step.tsx @@ -18,7 +18,7 @@ import { Text, } from "@chakra-ui/react" import { useConfig } from "@renegade-fi/react" -import { connect } from "@renegade-fi/react/actions" +import { connect, getSkRoot } from "@renegade-fi/react/actions" import { CircleHelp, Unplug } from "lucide-react" import { toast } from "sonner" import { useLocalStorage } from "usehooks-ts" @@ -66,7 +66,17 @@ export function DefaultStep() { throw new Error("Invalid signature") } config.setState((x) => ({ ...x, seed: data })) - const res = await connect(config) + const skRoot = getSkRoot(config) + const blinderShare = config.utils.derive_blinder_share(skRoot) + + // Check if WalletUpdated events exist onchain + const logs = await fetch(`/api/get-logs?blinderShare=${blinderShare}`) + .then((res) => res.json()) + .then((data) => data.logs) + + const res = await connect(config, { + isCreateWallet: logs === 0, + }) if (res?.job) { const { isLookup, job } = res toast.promise(job, { diff --git a/trade.renegade.fi/lib/viem.ts b/trade.renegade.fi/lib/viem.ts index eb184585..d0d74704 100644 --- a/trade.renegade.fi/lib/viem.ts +++ b/trade.renegade.fi/lib/viem.ts @@ -26,9 +26,3 @@ export const viemClient = createPublicClient({ chain, transport: http(), }) - -// Necessary because public RPC does not support getting logs -export const sdkViemClient = createPublicClient({ - chain, - transport: http(process.env.NEXT_PUBLIC_RPC_URL), -})