Skip to content

Commit 1987693

Browse files
authored
add onchain metadata on the main page (#137)
* add onchain metadata on the main page * update packages * revert changes
1 parent 92f76dd commit 1987693

File tree

3 files changed

+73
-4
lines changed

3 files changed

+73
-4
lines changed

hooks/useOnchainMetadata/index.ts

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ import { useRealmByPubkeyQuery } from "@hooks/queries/realm"
99
import { getNativeTreasuryAddress } from "@solana/spl-governance"
1010

1111
export type MetadataKey = IdlAccounts<MythicMetadata>["metadataKey"]
12+
export type MetadataItemForList = {
13+
displayName: string | undefined
14+
daoImage: string | undefined
15+
realm: PublicKey
16+
}
17+
1218
const metadataProgramId = new PublicKey("metaThtkusoWYDvHBFXfvc93Z3d8iBeDZ4DVyq8SYVR")
1319

1420
export function useGetOnchainMetadata(realmAddress: PublicKey | undefined) {
@@ -19,7 +25,7 @@ export function useGetOnchainMetadata(realmAddress: PublicKey | undefined) {
1925

2026
return useQuery({
2127
enabled: realm !== undefined,
22-
queryKey: ['get-onchain=metadata', {realmAddress: realmAddress?.toBase58()}],
28+
queryKey: ['get-onchain-metadata', {realmAddress: realmAddress?.toBase58()}],
2329
queryFn: async() => {
2430
if (!realm || !realm.result) {
2531
return null
@@ -65,6 +71,41 @@ export function useGetOnchainMetadata(realmAddress: PublicKey | undefined) {
6571
return null
6672
}
6773
},
74+
refetchOnWindowFocus: false,
75+
staleTime: 3600000, // 1 hour
76+
cacheTime: 3600000 * 24 * 10,
77+
})
78+
}
79+
80+
export function useGetAllMetadata() {
81+
const { connection } = useConnection()
82+
const provider = new AnchorProvider(connection, {} as Wallet, {})
83+
const client = new Program(idl as MythicMetadata, metadataProgramId, provider)
84+
85+
const query = useQuery({
86+
queryKey: ['get-onchain-metadata'],
87+
queryFn: async () => {
88+
const metadatas = await client.account.metadata.all()
89+
const displayNameKeyId = metadataKeys[1].id
90+
const daoImageKeyId = metadataKeys[2].id
91+
92+
const metadataItems: MetadataItemForList[] = metadatas.map(metadata => {
93+
const displayName = metadata.account.items.find(i => i.metadataKeyId.eq(displayNameKeyId))?.value.toString()
94+
const daoImage = metadata.account.items.find(i => i.metadataKeyId.eq(daoImageKeyId))?.value.toString()
95+
96+
return {
97+
displayName,
98+
daoImage,
99+
realm: metadata.account.subject
100+
}
101+
})
102+
103+
return metadataItems
104+
},
105+
staleTime: 3600000, // 1 hour
106+
cacheTime: 3600000 * 24 * 10,
68107
refetchOnWindowFocus: false
69108
})
109+
110+
return query
70111
}

pages/realms/index.tsx

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { DEFAULT_GOVERNANCE_PROGRAM_ID } from '@components/instructions/tools'
2020
import { useRealmsByProgramQuery } from '@hooks/queries/realm'
2121
import useLegacyConnectionContext from '@hooks/useLegacyConnectionContext'
2222
import RealmsDashboard from './components/RealmsDashboard'
23+
import { useGetAllMetadata } from '@hooks/useOnchainMetadata'
2324

2425
const Realms = () => {
2526
const [realms, setRealms] = useState<ReadonlyArray<RealmInfo>>([])
@@ -42,7 +43,8 @@ const Realms = () => {
4243
[],
4344
)
4445
const { data: queryRealms } = useRealmsByProgramQuery(programs)
45-
46+
const metadata = useGetAllMetadata().data
47+
4648
useMemo(async () => {
4749
if (
4850
connection &&
@@ -64,11 +66,29 @@ const Realms = () => {
6466
}),
6567
) ?? []
6668
const allRealms = [...certifiedRealms, ...unchartedRealms]
67-
setRealms(sortDaos(allRealms))
69+
70+
if (metadata) {
71+
const updatedRealms = allRealms.map((realm) => {
72+
const metadataAccount = metadata.find(
73+
(m) => m.realm.toBase58() === realm.realmId.toBase58()
74+
)
75+
76+
if (metadataAccount) {
77+
return {
78+
...realm,
79+
displayName: metadataAccount.displayName ?? realm.displayName,
80+
ogImage: metadataAccount.daoImage ?? realm.ogImage,
81+
}
82+
}
83+
return realm
84+
})
85+
setRealms(sortDaos(updatedRealms))
86+
}
87+
6888
setFilteredRealms(sortDaos(allRealms))
6989
setIsLoadingRealms(false)
7090
}
71-
}, [connection, routeHasClusterInPath, cluster, queryRealms])
91+
}, [connection, routeHasClusterInPath, cluster, queryRealms, metadata])
7292

7393
const handleCreateRealmButtonClick = async () => {
7494
if (!connected) {

public/realms/mainnet-beta.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3965,5 +3965,13 @@
39653965
"realmId": "GDaLwof8UxAsQZjBgtiWepyV73rkKpdPVUMFVEAwMw1r",
39663966
"communityMint": "4B5EYJd7MJaVEZUWMhMxUckxtMqSicJpiqM4g6hKm4wz",
39673967
"sortRank": 986
3968+
},
3969+
{
3970+
"symbol": "Realms Consensus HK",
3971+
"displayName": "Realms Consensus HK",
3972+
"programId": "GovER5Lthms3bLBqWub97yVrMmEogzX7xNjdXpPPCVZw",
3973+
"realmId": "E9xXs6YpuMBD3a8jShzMDzsivZiy8YmcD5UzTsmwsUE",
3974+
"communityMint": "7JLYpUf35CbKsHW6x1zw4RbsNhcmtEfxT352czXi59Cg",
3975+
"sortRank": 1001
39683976
}
39693977
]

0 commit comments

Comments
 (0)