diff --git a/packages/mask/src/plugins/Avatar/Services/gun.ts b/packages/mask/src/plugins/Avatar/Services/gun.ts index 8397eeba4150..11b40c12d67c 100644 --- a/packages/mask/src/plugins/Avatar/Services/gun.ts +++ b/packages/mask/src/plugins/Avatar/Services/gun.ts @@ -1,4 +1,5 @@ import { delay } from '@masknet/shared-base' +import { isSameAddress } from '@masknet/web3-shared-evm' import { gun2 } from '../../../network/gun/version.2' import { NFT_AVATAR_GUN_SERVER } from '../constants' @@ -21,19 +22,27 @@ export async function getUserAddress(userId: string) { } export async function setUserAddress(userId: string, address: string) { - // delete userId - await NFTAvatarGUN - //@ts-expect-error - .get(userId) - //@ts-expect-error - .put(null).then!() - - // save userId - await NFTAvatarGUN - // @ts-expect-error - .get(userId) - // @ts-expect-error - .put(address).then!() + try { + // delete userId + await NFTAvatarGUN + //@ts-expect-error + .get(userId) + //@ts-expect-error + .put(null).then!() + + // save userId + await NFTAvatarGUN + // @ts-expect-error + .get(userId) + // @ts-expect-error + .put(address).then!() + } catch { + // do nothing + } finally { + const _address = await getUserAddress(userId) + if (!isSameAddress(_address, address)) + throw new Error('Something went wrong, and please check your connection.') + } } export async function getUserAddresses() { diff --git a/packages/mask/src/plugins/Avatar/Services/rss3.ts b/packages/mask/src/plugins/Avatar/Services/rss3.ts index 5c23bd5af209..552200519e40 100644 --- a/packages/mask/src/plugins/Avatar/Services/rss3.ts +++ b/packages/mask/src/plugins/Avatar/Services/rss3.ts @@ -35,9 +35,13 @@ export async function getNFTAvatarFromRSS(userId: string, address: string) { nft = nfts as NFTRSSNode } - const sig_address = web3.eth.accounts.recover(nft.nft.userId, nft.signature) - if (!isSameAddress(sig_address, address)) return - return nft.nft + try { + const sig_address = web3.eth.accounts.recover(nft.nft.userId, nft.signature) + if (!isSameAddress(sig_address, address)) return + return nft.nft + } catch { + throw new Error('Failed to recover signature.') + } } async function _getNFTAvatarFromRSS( diff --git a/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/NFTAvatarInTwitter.tsx b/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/NFTAvatarInTwitter.tsx index e56fed2ab7a4..34850160d6d8 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/NFTAvatarInTwitter.tsx +++ b/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/NFTAvatarInTwitter.tsx @@ -71,6 +71,7 @@ function NFTAvatarInTwitter() { setNFTEvent(data) } + // After the avatar is set, it cannot be saved immediately, and must wait until the avatar of twitter is updated useAsync(async () => { if (!wallet || !NFTAvatar) return