From 5ea114ef7666de8e5380eeb4070de81f696a9dc5 Mon Sep 17 00:00:00 2001 From: Yusrah Mohammed Date: Fri, 22 May 2026 12:43:11 +0100 Subject: [PATCH] fix: DAO role detection --- .../verify/identity-verification/page.tsx | 7 +++---- app/verify/success/page.tsx | 7 +++---- lib/roleDetection.ts | 20 +++++++++++++++++-- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/app/(verify)/verify/identity-verification/page.tsx b/app/(verify)/verify/identity-verification/page.tsx index 34b2317..a2d278b 100644 --- a/app/(verify)/verify/identity-verification/page.tsx +++ b/app/(verify)/verify/identity-verification/page.tsx @@ -1,12 +1,12 @@ 'use client'; import ConnectButton from '@/components/ConnectButton'; -import VerifyBackButton from '@/components/verify/VerifyBackButton'; import VerifyWalletReconnect from '@/components/verify/VerifyWalletReconnect'; import { api } from '@/lib/api'; import { useRedirectIfAlreadyVerified } from '@/hooks/useRedirectIfAlreadyVerified'; import { persistVerifyRequestId, persistVerifyWallet } from '@/lib/identity-verify-session'; import { Check, Circle, Shield } from 'lucide-react'; +import Link from 'next/link'; import { useState, useEffect } from 'react'; import { useAccount } from 'wagmi'; @@ -83,13 +83,12 @@ export default function IdentityVerificationPage() {
-
- +

GrantOS

-
+ {isConnected ? : }
diff --git a/app/verify/success/page.tsx b/app/verify/success/page.tsx index b393bbc..6afd811 100644 --- a/app/verify/success/page.tsx +++ b/app/verify/success/page.tsx @@ -3,7 +3,6 @@ // app/verify/success/page.tsx import ConnectButton from '@/components/ConnectButton'; -import VerifyBackButton from '@/components/verify/VerifyBackButton'; import VerifyWalletReconnect from '@/components/verify/VerifyWalletReconnect'; import { api } from '@/lib/api'; import { @@ -18,6 +17,7 @@ import { } from '@/lib/identity-verify-session'; import { IDENTITY_REGISTRY_ABI, IDENTITY_REGISTRY_ADDRESS } from '@/lib/contracts'; import { Check, CheckCircle2, Fingerprint, Shield, AlertTriangle } from 'lucide-react'; +import Link from 'next/link'; import { useRouter, useSearchParams } from 'next/navigation'; import { Suspense, useEffect, useMemo, useRef, useState } from 'react'; import { useAccount, useReadContract, useWaitForTransactionReceipt, useConfig, useSwitchChain, useBalance } from 'wagmi'; @@ -521,8 +521,7 @@ function SuccessContent() {
-
- +
G
@@ -530,7 +529,7 @@ function SuccessContent() { Sepolia -
+
{isFullyVerified && ( diff --git a/lib/roleDetection.ts b/lib/roleDetection.ts index ca408d3..b3ae8f6 100644 --- a/lib/roleDetection.ts +++ b/lib/roleDetection.ts @@ -17,6 +17,7 @@ export type DetectedRoles = { isVerified: boolean; builderGrantIds: bigint[]; committeeGrantIds: bigint[]; + grantorGrantIds: bigint[]; isBuilder: boolean; isCommittee: boolean; isDaoAdmin: boolean; @@ -117,6 +118,11 @@ export function useRoleDetection(): DetectedRoles { abi: grantEscrowAbi, functionName: 'grantId' as const, }, + { + address: addr, + abi: grantEscrowAbi, + functionName: 'grantor' as const, + }, ]); return [...base, ...perEscrow]; }, [address, enabled, escrowAddresses]); @@ -141,6 +147,7 @@ export function useRoleDetection(): DetectedRoles { isVerified: false, builderGrantIds: [], committeeGrantIds: [], + grantorGrantIds: [], isBuilder: false, isCommittee: false, isDaoAdmin: false, @@ -159,12 +166,14 @@ export function useRoleDetection(): DetectedRoles { const builderIds: bigint[] = []; const committeeIds: bigint[] = []; + const grantorIds: bigint[] = []; const roleResults = data.slice(1); - for (let i = 0; i < roleResults.length; i += 3) { + for (let i = 0; i < roleResults.length; i += 4) { const builderRes = roleResults[i] as { status: string; result?: string } | undefined; const committeeRes = roleResults[i + 1] as { status: string; result?: boolean } | undefined; const grantIdRes = roleResults[i + 2] as { status: string; result?: bigint } | undefined; + const grantorRes = roleResults[i + 3] as { status: string; result?: string } | undefined; if (grantIdRes?.status === 'success' && grantIdRes.result !== undefined) { const gid = grantIdRes.result; @@ -177,12 +186,18 @@ export function useRoleDetection(): DetectedRoles { if (committeeRes?.status === 'success' && committeeRes.result) { committeeIds.push(gid); } + if ( + grantorRes?.status === 'success' && + grantorRes.result?.toLowerCase() === address.toLowerCase() + ) { + grantorIds.push(gid); + } } } const isBuilder = builderIds.length > 0; const isCommittee = committeeIds.length > 0; - const isDaoAdmin = committeeIds.length >= 3; + const isDaoAdmin = grantorIds.length > 0 || committeeIds.length >= 3; const isNewWallet = !isVerified && !isBuilder && !isCommittee; const hasMultipleRoles = isBuilder && isCommittee; @@ -192,6 +207,7 @@ export function useRoleDetection(): DetectedRoles { isVerified, builderGrantIds: builderIds, committeeGrantIds: committeeIds, + grantorGrantIds: grantorIds, isBuilder, isCommittee, isDaoAdmin,