From 5da98c2f0545f641af5956cdc4490a07c3c0a701 Mon Sep 17 00:00:00 2001 From: Utkarsh <83659045+0xShuk@users.noreply.github.com> Date: Mon, 6 Jan 2025 00:00:52 +0530 Subject: [PATCH 1/2] feat: show token as mint asset if dao owns mpl authority --- stores/useGovernanceAssetsStore.tsx | 15 +++++++++++++-- utils/metaplex.ts | 10 ++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/stores/useGovernanceAssetsStore.tsx b/stores/useGovernanceAssetsStore.tsx index 2427e584a..9dcad1c0c 100644 --- a/stores/useGovernanceAssetsStore.tsx +++ b/stores/useGovernanceAssetsStore.tsx @@ -51,6 +51,7 @@ import { import group from '@utils/group' import { getFilteredProgramAccounts } from '@utils/helpers' import { bs58 } from '@coral-xyz/anchor/dist/cjs/utils/bytes' +import { getMetadataAddress } from '@utils/metaplex' const additionalPossibleMintAccounts = { Mango: [ @@ -774,17 +775,27 @@ const loadMintGovernanceAccounts = async ( const possibleMintAccount = possibleMintAccounts[index] const pk = possibleMintAccountPks[index] if (possibleMintAccount) { + const metadataAddress = getMetadataAddress(pk) + const metadataAccountInfo = await connection.current.getAccountInfo(metadataAddress) + const metadataUpdateAuthority = metadataAccountInfo?.data ? + new PublicKey(metadataAccountInfo.data.slice(1,33)) : + null + const data = Buffer.from(possibleMintAccount.data) const parsedMintInfo = parseMintAccountData(data) as MintInfo const ownerGovernance = governances.find( (g) => parsedMintInfo?.mintAuthority && - g.pubkey.equals(parsedMintInfo.mintAuthority) + g.pubkey.equals(parsedMintInfo.mintAuthority) || + metadataUpdateAuthority && + g.pubkey.equals(metadataUpdateAuthority) ) const solAccountPk = nativeAccountAddresses.find( (x) => parsedMintInfo?.mintAuthority && - x.equals(parsedMintInfo.mintAuthority) + x.equals(parsedMintInfo.mintAuthority) || + metadataUpdateAuthority && + x.equals(metadataUpdateAuthority) ) if (ownerGovernance || solAccountPk) { mintGovernances.push( diff --git a/utils/metaplex.ts b/utils/metaplex.ts index 1cf3a484a..988ec0f93 100644 --- a/utils/metaplex.ts +++ b/utils/metaplex.ts @@ -45,3 +45,13 @@ export const createIx_transferNft = async ( ix.keys[10].pubkey = payer return ix } + +export function getMetadataAddress(pk: PublicKey) { + const metadataProgramId = new PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s") + + return PublicKey.findProgramAddressSync([ + Buffer.from("metadata"), + metadataProgramId.toBuffer(), + pk.toBuffer() + ], metadataProgramId)[0] +} \ No newline at end of file From cfe03105e4d2999269edec8bf2aaa312349445e1 Mon Sep 17 00:00:00 2001 From: Utkarsh <83659045+0xShuk@users.noreply.github.com> Date: Tue, 4 Feb 2025 17:13:31 +0530 Subject: [PATCH 2/2] update authority address --- .../proposal/components/instructions/UpdateTokenMetadata.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/dao/[symbol]/proposal/components/instructions/UpdateTokenMetadata.tsx b/pages/dao/[symbol]/proposal/components/instructions/UpdateTokenMetadata.tsx index d335667e1..880362c46 100644 --- a/pages/dao/[symbol]/proposal/components/instructions/UpdateTokenMetadata.tsx +++ b/pages/dao/[symbol]/proposal/components/instructions/UpdateTokenMetadata.tsx @@ -78,7 +78,7 @@ const UpdateTokenMetadata = ({ }, [form, governedAccount]) useEffect(() => { setGovernedAccount(form?.mintAccount?.governance) - setMintAuthority(form?.mintAccount?.extensions.mint?.account.mintAuthority) + setMintAuthority(form?.mintAccount?.governance.nativeTreasuryAddress) }, [form.mintAccount]) const schema = getUpdateTokenMetadataSchema()