Skip to content

Commit 70997f2

Browse files
committed
Update page.tsx
1 parent 26e0e93 commit 70997f2

1 file changed

Lines changed: 18 additions & 3 deletions

File tree

src/app/balance/page.tsx

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,17 @@ import {
99
} from "@mui/material";
1010
import { useAccount, useReadContract, useReadContracts } from "wagmi";
1111
import { useSearchParams } from "next/navigation";
12-
import { zeroAddress } from "viem";
12+
import { zeroAddress, encodePacked, keccak256, getAddress } from "viem";
1313
import { CONTRACTS, REWARDS_PROGRAM_ABI, MemberRoleLabels, MemberTypeLabels } from "@/config/contracts";
1414
import { toBytes12, fromBytes12, fromBytes8, shortenAddress, formatFula, formatContractError, fromBytes16 } from "@/lib/utils";
15+
16+
/** Compute the virtual storage key for a walletless member (mirrors _virtualAddr in contract) */
17+
function virtualAddr(memberID: string, programId: number): `0x${string}` {
18+
const memberIDBytes = toBytes12(memberID);
19+
const hash = keccak256(encodePacked(["bytes12", "uint32"], [memberIDBytes, programId]));
20+
// Take last 20 bytes (address = uint160 of uint256)
21+
return getAddress("0x" + hash.slice(-40)) as `0x${string}`;
22+
}
1523
import { useProgramCount, useProgram, useTransferToParent, useWithdraw, useDepositTokens, useRewardTypes, useTransferLimit, useClaimMember } from "@/hooks/useRewardsProgram";
1624
import { OnChainDisclaimer } from "@/components/common/OnChainDisclaimer";
1725
import { QRCodeDisplay } from "@/components/common/QRCodeDisplay";
@@ -32,12 +40,19 @@ function MemberProgramRow({ memberID, programId }: { memberID: string; programId
3240

3341
const { data: program } = useProgram(programId);
3442

43+
// For walletless members, compute the virtual storage key to query balance
44+
const balanceKey: `0x${string}` | undefined = member?.active
45+
? (member.wallet && member.wallet !== zeroAddress
46+
? member.wallet as `0x${string}`
47+
: virtualAddr(memberID, programId))
48+
: undefined;
49+
3550
const { data: balance } = useReadContract({
3651
address: CONTRACTS.rewardsProgram,
3752
abi: REWARDS_PROGRAM_ABI,
3853
functionName: "getBalance",
39-
args: member?.wallet && member.wallet !== zeroAddress ? [programId, member.wallet as `0x${string}`] : undefined,
40-
query: { enabled: !!member?.wallet && member.wallet !== zeroAddress },
54+
args: balanceKey ? [programId, balanceKey] : undefined,
55+
query: { enabled: !!balanceKey },
4156
});
4257

4358
if (!member || !member.active) return null;

0 commit comments

Comments
 (0)