From ac25da66ca00ae8bf7de570ac4e121da1be2ac90 Mon Sep 17 00:00:00 2001
From: Tommaso Casaburi
Date: Fri, 17 Jul 2026 15:22:52 +0700
Subject: [PATCH 1/6] fix(addresses): remove unsupported address providers
---
CHANGELOG.md | 5 --
public/llms-full.txt | 3 -
src/components/topbar/topbar.tsx | 2 +-
src/lib/utils/account-import-utils.test.ts | 57 +++++++++++++++++++
src/lib/utils/account-import-utils.ts | 41 ++++++++-----
src/lib/utils/chain-provider-utils.ts | 11 ++++
.../legacy-default-subscriptions.test.ts | 20 +++++--
src/lib/utils/legacy-default-subscriptions.ts | 18 +++---
src/views/about/about.tsx | 4 --
.../community-settings/community-settings.tsx | 5 +-
.../address-settings/address-settings.tsx | 16 +-----
.../advanced-settings/advanced-settings.tsx | 25 ++------
.../wallet-settings/wallet-settings.tsx | 2 +-
13 files changed, 132 insertions(+), 77 deletions(-)
create mode 100644 src/lib/utils/account-import-utils.test.ts
create mode 100644 src/lib/utils/chain-provider-utils.ts
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ce68ff9b..96b13659 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -47,7 +47,6 @@
### Bug Fixes
* **account editor:** page reload was missing when saving account edit, as well as auto navigate back to settings ([b6ee58f](https://github.com/plebbit/seedit/commit/b6ee58fe0a4872c2421f32500265a636d529b346))
-* correct SNS v1 URLs ([f863aab](https://github.com/plebbit/seedit/commit/f863aab91209b009f9d25db5d2d29fe65c1fe1f5))
* **embeds:** make iframe width fix truly Safari-specific ([1badab4](https://github.com/plebbit/seedit/commit/1badab4a68e00eb916a5672ee63e89d5a16232a4))
* **embeds:** Safari iframe sizing in media previews ([c983de5](https://github.com/plebbit/seedit/commit/c983de555032e0a9760c0344a98054c5800a32cb))
* implement bidirectional sync between subplebbit form and JSON editor ([3d29e1f](https://github.com/plebbit/seedit/commit/3d29e1fa7fecfec5af1ae583021e9bc25d2089fb))
@@ -723,14 +722,12 @@
### Features
-* **address settings:** update setting for sol addresses, with guide on how to set up ([430c597](https://github.com/plebbit/seedit/commit/430c5970761e3e3fd0af03ce230a543cea6be3ab))
* **context:** allow any number as post context, always showing the top level reply ([b9d050c](https://github.com/plebbit/seedit/commit/b9d050c87c45b2e1c541a4ac45e7f23b6e5490f7))
* **mod menu:** community moderators can ban their users ([22beb4e](https://github.com/plebbit/seedit/commit/22beb4e0ea6a2c300422fa8a21b5f230af985ec0))
* **post page:** hide reply form and display 'loading comments...' while the post is loading ([a068691](https://github.com/plebbit/seedit/commit/a06869196d236f51ab8bfffae46bdf08aefd95df))
* **scripts:** add old versions to folders e.g. seedit.eth.limo/0.1.1 ([a384e7b](https://github.com/plebbit/seedit/commit/a384e7b845f6a6071f7cf0cfab3347d82c8d2528))
* **settings:** add link to nft whitelist ([f174602](https://github.com/plebbit/seedit/commit/f174602c81bab926ece3adb45c3fd14338c2f953))
* **settings:** users can add crypto wallets to their plebbit account ([75b25e7](https://github.com/plebbit/seedit/commit/75b25e74cd6dba73aae7b3385669c5a80b2c2c75))
-* **subplebbit settings:** add info on how to set up .sol crypto domain as sub address ([5f54bbe](https://github.com/plebbit/seedit/commit/5f54bbe07ad6bf5acd8c6ff02da3e976a0730be0))
@@ -1341,5 +1338,3 @@
* Revert "style(header): remove wiki button, because of inconsistent UI and not enough space" ([e940379](https://github.com/plebbit/seedit/commit/e94037990f6ed35b2ed6cf3fc3ab4894904892c2))
* Revert "style: convert all css modules to scss" ([f1dfafe](https://github.com/plebbit/seedit/commit/f1dfafeb5e7d8b0fa6af273639e18181cc3236c8))
-
-
diff --git a/public/llms-full.txt b/public/llms-full.txt
index d8ab72eb..5aac6f1d 100644
--- a/public/llms-full.txt
+++ b/public/llms-full.txt
@@ -1011,7 +1011,6 @@ Source: https://github.com/bitsocialnet/seedit/blob/master/CHANGELOG.md
### Bug Fixes
* **account editor:** page reload was missing when saving account edit, as well as auto navigate back to settings ([b6ee58f](https://github.com/plebbit/seedit/commit/b6ee58fe0a4872c2421f32500265a636d529b346))
-* correct SNS v1 URLs ([f863aab](https://github.com/plebbit/seedit/commit/f863aab91209b009f9d25db5d2d29fe65c1fe1f5))
* **embeds:** make iframe width fix truly Safari-specific ([1badab4](https://github.com/plebbit/seedit/commit/1badab4a68e00eb916a5672ee63e89d5a16232a4))
* **embeds:** Safari iframe sizing in media previews ([c983de5](https://github.com/plebbit/seedit/commit/c983de555032e0a9760c0344a98054c5800a32cb))
* implement bidirectional sync between subplebbit form and JSON editor ([3d29e1f](https://github.com/plebbit/seedit/commit/3d29e1fa7fecfec5af1ae583021e9bc25d2089fb))
@@ -1687,14 +1686,12 @@ Source: https://github.com/bitsocialnet/seedit/blob/master/CHANGELOG.md
### Features
-* **address settings:** update setting for sol addresses, with guide on how to set up ([430c597](https://github.com/plebbit/seedit/commit/430c5970761e3e3fd0af03ce230a543cea6be3ab))
* **context:** allow any number as post context, always showing the top level reply ([b9d050c](https://github.com/plebbit/seedit/commit/b9d050c87c45b2e1c541a4ac45e7f23b6e5490f7))
* **mod menu:** community moderators can ban their users ([22beb4e](https://github.com/plebbit/seedit/commit/22beb4e0ea6a2c300422fa8a21b5f230af985ec0))
* **post page:** hide reply form and display 'loading comments...' while the post is loading ([a068691](https://github.com/plebbit/seedit/commit/a06869196d236f51ab8bfffae46bdf08aefd95df))
* **scripts:** add old versions to folders e.g. seedit.eth.limo/0.1.1 ([a384e7b](https://github.com/plebbit/seedit/commit/a384e7b845f6a6071f7cf0cfab3347d82c8d2528))
* **settings:** add link to nft whitelist ([f174602](https://github.com/plebbit/seedit/commit/f174602c81bab926ece3adb45c3fd14338c2f953))
* **settings:** users can add crypto wallets to their plebbit account ([75b25e7](https://github.com/plebbit/seedit/commit/75b25e74cd6dba73aae7b3385669c5a80b2c2c75))
-* **subplebbit settings:** add info on how to set up .sol crypto domain as sub address ([5f54bbe](https://github.com/plebbit/seedit/commit/5f54bbe07ad6bf5acd8c6ff02da3e976a0730be0))
diff --git a/src/components/topbar/topbar.tsx b/src/components/topbar/topbar.tsx
index f09fe105..c44b021e 100644
--- a/src/components/topbar/topbar.tsx
+++ b/src/components/topbar/topbar.tsx
@@ -18,7 +18,7 @@ const getSubscriptionDisplayName = (subscription: string) => {
return routeSegment;
}
const shortAddress = getShortAddress(subscription);
- return shortAddress.includes('.eth') ? shortAddress.slice(0, -4) : shortAddress.includes('.sol') ? shortAddress.slice(0, -4) : shortAddress;
+ return shortAddress.includes('.eth') ? shortAddress.slice(0, -4) : shortAddress;
};
const CommunitiesDropdown = () => {
diff --git a/src/lib/utils/account-import-utils.test.ts b/src/lib/utils/account-import-utils.test.ts
new file mode 100644
index 00000000..cb4a1738
--- /dev/null
+++ b/src/lib/utils/account-import-utils.test.ts
@@ -0,0 +1,57 @@
+import { describe, expect, it } from 'vitest';
+import { getDefaultElectronConfig, getDefaultWebConfig, processImportedAccount } from './account-import-utils';
+
+describe('account import PKC options', () => {
+ it('includes only supported chain providers in platform defaults', () => {
+ expect(Object.keys(getDefaultWebConfig().chainProviders ?? {})).toEqual(['eth', 'avax', 'matic']);
+ expect(Object.keys(getDefaultElectronConfig().chainProviders ?? {})).toEqual(['eth', 'avax', 'matic']);
+ });
+
+ it('keeps only supported providers from current and legacy locations', () => {
+ const importedAccount = {
+ account: {
+ chainProviders: {
+ eth: { urls: ['https://eth.example'], chainId: 1 },
+ unknown: { urls: ['https://unknown.example'], chainId: 123 },
+ },
+ pkcOptions: {
+ pubsubKuboRpcClientsOptions: ['https://pubsub.example'],
+ chainProviders: {
+ avax: { urls: ['https://avax.example'], chainId: 43114 },
+ unknown: { urls: ['https://legacy-unknown.example'], chainId: 123 },
+ },
+ },
+ },
+ };
+
+ const result = JSON.parse(processImportedAccount(JSON.stringify(importedAccount), false));
+
+ expect(result.account.chainProviders).toEqual({
+ eth: { urls: ['https://eth.example'], chainId: 1 },
+ });
+ expect(result.account.pkcOptions.chainProviders).toEqual({
+ avax: { urls: ['https://avax.example'], chainId: 43114 },
+ });
+ });
+
+ it('preserves supported provider overrides when import replaces transport options with platform defaults', () => {
+ const importedAccount = {
+ account: {
+ pkcOptions: {
+ pubsubKuboRpcClientsOptions: ['https://pubsub.example'],
+ chainProviders: {
+ matic: { urls: ['https://matic.example'], chainId: 137 },
+ },
+ },
+ },
+ };
+
+ const result = JSON.parse(processImportedAccount(JSON.stringify(importedAccount), true));
+
+ expect(result.account.pkcOptions.pkcRpcClientsOptions).toEqual(['ws://localhost:9138']);
+ expect(result.account.pkcOptions.chainProviders).toMatchObject({
+ eth: { urls: ['ethers.js', 'https://ethrpc.xyz', 'viem'], chainId: 1 },
+ matic: { urls: ['https://matic.example'], chainId: 137 },
+ });
+ });
+});
diff --git a/src/lib/utils/account-import-utils.ts b/src/lib/utils/account-import-utils.ts
index 56888528..9f1d25f9 100644
--- a/src/lib/utils/account-import-utils.ts
+++ b/src/lib/utils/account-import-utils.ts
@@ -1,3 +1,5 @@
+import { getSupportedChainProviders } from './chain-provider-utils';
+
interface PkcOptions {
ipfsGatewayUrls?: string[];
pubsubKuboRpcClientsOptions?: string[];
@@ -15,6 +17,7 @@ interface PkcOptions {
interface ImportedAccount {
account?: {
+ chainProviders?: PkcOptions['chainProviders'];
pkcOptions?: PkcOptions;
[key: string]: any;
};
@@ -39,10 +42,6 @@ export const getDefaultWebConfig = (): PkcOptions => ({
urls: ['https://polygon-rpc.com'],
chainId: 137,
},
- sol: {
- urls: ['https://solrpc.xyz'],
- chainId: 1,
- },
},
resolveAuthorAddresses: false,
validatePages: false,
@@ -65,10 +64,6 @@ export const getDefaultElectronConfig = (): PkcOptions => ({
urls: ['https://polygon-rpc.com'],
chainId: 137,
},
- sol: {
- urls: ['https://solrpc.xyz'],
- chainId: 1,
- },
},
resolveAuthorAddresses: false,
validatePages: false,
@@ -106,7 +101,23 @@ const hasLocalhostRpc = (options: PkcOptions): boolean => {
* - Sets platform-appropriate defaults for missing configurations
*/
export const transformPkcOptionsForImport = (importedAccount: ImportedAccount, isElectron: boolean): PkcOptions => {
- const currentOptions = importedAccount.account?.pkcOptions || {};
+ const importedOptions = importedAccount.account?.pkcOptions || {};
+ const currentOptions = {
+ ...importedOptions,
+ chainProviders: getSupportedChainProviders(importedOptions.chainProviders),
+ };
+ const getPlatformDefaults = () => {
+ const defaults = isElectron ? getDefaultElectronConfig() : getDefaultWebConfig();
+ if (!currentOptions.chainProviders) return defaults;
+
+ return {
+ ...defaults,
+ chainProviders: {
+ ...defaults.chainProviders,
+ ...currentOptions.chainProviders,
+ },
+ };
+ };
// Don't overwrite non-localhost RPC configurations
if (hasNonLocalhostRpc(currentOptions)) {
@@ -116,17 +127,17 @@ export const transformPkcOptionsForImport = (importedAccount: ImportedAccount, i
if (isElectron) {
// On electron: if account has pubsub providers, replace with localhost RPC
if (hasPubsubProviders(currentOptions)) {
- return getDefaultElectronConfig();
+ return getPlatformDefaults();
}
// If already has localhost RPC or no providers, use electron defaults
- return (currentOptions.pkcRpcClientsOptions?.length ?? 0) > 0 ? currentOptions : getDefaultElectronConfig();
+ return (currentOptions.pkcRpcClientsOptions?.length ?? 0) > 0 ? currentOptions : getPlatformDefaults();
} else {
// On web: if account has localhost RPC, replace with pubsub providers
if (hasLocalhostRpc(currentOptions)) {
- return getDefaultWebConfig();
+ return getPlatformDefaults();
}
// If no RPC or has pubsub providers, use web defaults
- return (currentOptions.pubsubKuboRpcClientsOptions?.length ?? 0) > 0 ? currentOptions : getDefaultWebConfig();
+ return (currentOptions.pubsubKuboRpcClientsOptions?.length ?? 0) > 0 ? currentOptions : getPlatformDefaults();
}
};
@@ -148,6 +159,10 @@ export const processImportedAccount = (accountJson: string, isElectron: boolean)
importedAccount.account = {};
}
+ if (importedAccount.account.chainProviders) {
+ importedAccount.account.chainProviders = getSupportedChainProviders(importedAccount.account.chainProviders);
+ }
+
// Support accounts exported by older versions that used the legacy field name
if (!importedAccount.account.pkcOptions && importedAccount.account.plebbitOptions) {
importedAccount.account.pkcOptions = importedAccount.account.plebbitOptions;
diff --git a/src/lib/utils/chain-provider-utils.ts b/src/lib/utils/chain-provider-utils.ts
new file mode 100644
index 00000000..773c50d4
--- /dev/null
+++ b/src/lib/utils/chain-provider-utils.ts
@@ -0,0 +1,11 @@
+const SUPPORTED_CHAIN_PROVIDER_TICKERS: ReadonlySet = new Set(['eth', 'matic', 'avax']);
+
+export const getSupportedChainProviders = (chainProviders: Record | undefined): Record | undefined => {
+ if (!chainProviders) return undefined;
+
+ const supportedChainProviders: Record = {};
+ for (const [ticker, provider] of Object.entries(chainProviders)) {
+ if (SUPPORTED_CHAIN_PROVIDER_TICKERS.has(ticker)) supportedChainProviders[ticker] = provider;
+ }
+ return supportedChainProviders;
+};
diff --git a/src/lib/utils/legacy-default-subscriptions.test.ts b/src/lib/utils/legacy-default-subscriptions.test.ts
index ea1225d6..d755f82b 100644
--- a/src/lib/utils/legacy-default-subscriptions.test.ts
+++ b/src/lib/utils/legacy-default-subscriptions.test.ts
@@ -24,9 +24,9 @@ describe('seedit starter community snapshot', () => {
describe('computeAddressCanonicalSubscriptionMigration', () => {
it('maps only the directory codes actually present and preserves manual-address order', () => {
- const result = computeAddressCanonicalSubscriptionMigration(['first.bso', 'memes', 'middle.eth', 'aww', 'last.sol']);
+ const result = computeAddressCanonicalSubscriptionMigration(['first.bso', 'memes', 'middle.eth', 'aww', 'last.bso']);
- expect(result.next).toEqual(['first.bso', 'memes-posting.bso', 'middle.eth', 'aww-posting.bso', 'last.sol']);
+ expect(result.next).toEqual(['first.bso', 'memes-posting.bso', 'middle.eth', 'aww-posting.bso', 'last.bso']);
expect(result.replacedDirectoryCodes).toEqual([
{ code: 'memes', address: 'memes-posting.bso', sourceIndex: 1 },
{ code: 'aww', address: 'aww-posting.bso', sourceIndex: 3 },
@@ -79,9 +79,9 @@ describe('computeAddressCanonicalSubscriptionMigration', () => {
});
it('preserves unrelated addresses while replacing a legacy cohort with the starter set', () => {
- const result = computeAddressCanonicalSubscriptionMigration(['manual-before.bso', 'plebtoken.eth', 'manual-after.sol', '💩posting.eth']);
+ const result = computeAddressCanonicalSubscriptionMigration(['manual-before.bso', 'plebtoken.eth', 'manual-after.bso', '💩posting.eth']);
- expect(result.next).toEqual(['manual-before.bso', 'manual-after.sol', ...STARTER_COMMUNITY_ADDRESSES]);
+ expect(result.next).toEqual(['manual-before.bso', 'manual-after.bso', ...STARTER_COMMUNITY_ADDRESSES]);
expect(result.removed).toEqual(['plebtoken.eth', '💩posting.eth']);
});
@@ -109,8 +109,18 @@ describe('computeAddressCanonicalSubscriptionMigration', () => {
expect(computeAddressCanonicalSubscriptionMigration(undefined)).toMatchObject({ next: [], changed: false, added: [], removed: [] });
});
+ it('removes unsupported named addresses without changing supported direct addresses', () => {
+ const publicKey = '12D3KooWQmV9xN1wJ5rL8hP7dZ6cB4sT2yF3gK9aE1uR';
+ const result = computeAddressCanonicalSubscriptionMigration(['manual.bso', 'retired.example', publicKey]);
+
+ expect(result.next).toEqual(['manual.bso', publicKey]);
+ expect(result.removed).toEqual(['retired.example']);
+ expect(result.addedStarterAddresses).toEqual([]);
+ expect(result.changed).toBe(true);
+ });
+
it('does not touch addresses that only resemble retired defaults or codes', () => {
- const subscriptions = ['plebtoken.eth.mycopy', 'notplebtoken.eth', 'memes.bso', 'MEMES'];
+ const subscriptions = ['plebtoken-copy.eth', 'notplebtoken.eth', 'memes.bso', 'MEMES'];
const result = computeAddressCanonicalSubscriptionMigration(subscriptions);
expect(result.next).toEqual(subscriptions);
diff --git a/src/lib/utils/legacy-default-subscriptions.ts b/src/lib/utils/legacy-default-subscriptions.ts
index bcf4897f..b53c324f 100644
--- a/src/lib/utils/legacy-default-subscriptions.ts
+++ b/src/lib/utils/legacy-default-subscriptions.ts
@@ -34,10 +34,8 @@ export const LEGACY_DEFAULT_SUBSCRIPTIONS = [
'plebmusic.eth',
'videos-livestreams-podcasts.eth',
'weaponized-autism.eth',
- 'vzgworld.sol',
'plebwhales.eth',
'pleblore.eth',
- 'redditdeath.sol',
'fatpeoplehate.eth',
'reddit-screenshots.eth',
'censorship-watch.eth',
@@ -57,13 +55,15 @@ export const LEGACY_DEFAULT_SUBSCRIPTIONS = [
'bitcoinbrothers.eth',
'💩posting.eth',
'plebbrothers.eth',
- 'socomfy.sol',
'plebshelpingplebs.eth',
'decentralizedscam.eth',
'plebbitai.eth',
] as const;
const LEGACY_DEFAULT_SUBSCRIPTIONS_SET: ReadonlySet = new Set(LEGACY_DEFAULT_SUBSCRIPTIONS);
+const SUPPORTED_NAME_SUFFIXES = ['.eth', '.bso'] as const;
+
+const isSupportedSubscriptionAddress = (address: string): boolean => !address.includes('.') || SUPPORTED_NAME_SUFFIXES.some((suffix) => address.endsWith(suffix));
export interface DirectoryCodeReplacement {
code: LegacyDirectoryCode;
@@ -97,16 +97,18 @@ const getLegacyDirectoryAddress = (entry: string): string | undefined => {
};
/**
- * Convert persisted directory-code subscriptions to fixed community addresses. Direct
- * address-only accounts are left untouched. Finding any retired multisub default migrates
- * that legacy cohort to the complete starter set while preserving unrelated addresses.
+ * Convert persisted directory-code subscriptions to fixed community addresses and discard
+ * unsupported name aliases. Supported direct-address-only accounts are left untouched.
+ * Finding any retired multisub default migrates that legacy cohort to the complete starter
+ * set while preserving unrelated supported addresses.
*/
export const computeAddressCanonicalSubscriptionMigration = (subscriptions: string[] | undefined): AddressCanonicalMigrationResult => {
const current = (subscriptions ?? []).filter((entry): entry is string => typeof entry === 'string');
const hasDirectoryCodes = current.some((entry) => getLegacyDirectoryAddress(entry) !== undefined);
const hasLegacyDefaults = current.some((entry) => LEGACY_DEFAULT_SUBSCRIPTIONS_SET.has(entry));
+ const hasUnsupportedNamedAddresses = current.some((entry) => !isSupportedSubscriptionAddress(entry));
- if (!hasDirectoryCodes && !hasLegacyDefaults) {
+ if (!hasDirectoryCodes && !hasLegacyDefaults && !hasUnsupportedNamedAddresses) {
return {
next: current,
changed: false,
@@ -140,7 +142,7 @@ export const computeAddressCanonicalSubscriptionMigration = (subscriptions: stri
};
current.forEach((entry, sourceIndex) => {
- if (LEGACY_DEFAULT_SUBSCRIPTIONS_SET.has(entry)) {
+ if (LEGACY_DEFAULT_SUBSCRIPTIONS_SET.has(entry) || !isSupportedSubscriptionAddress(entry)) {
removedLegacyDefaults.push(entry);
return;
}
diff --git a/src/views/about/about.tsx b/src/views/about/about.tsx
index bee5008a..aaf9a470 100644
--- a/src/views/about/about.tsx
+++ b/src/views/about/about.tsx
@@ -133,10 +133,6 @@ export const FAQ = () => {
name service such as{' '}
ENS
- {' '}
- or{' '}
-
- SNS
.
diff --git a/src/views/community-settings/community-settings.tsx b/src/views/community-settings/community-settings.tsx
index 3b5a6c2a..1351726e 100644
--- a/src/views/community-settings/community-settings.tsx
+++ b/src/views/community-settings/community-settings.tsx
@@ -101,8 +101,9 @@ const Address = ({ isReadOnly = false }: { isReadOnly?: boolean }) => {
const { address, setCommunitySettingsStore } = useCommunitySettingsStore();
const alertCryptoAddressInfo = () => {
- alert(`steps to set a .eth community address:\n1. go to app.ens.domains and search the address\n2. once you own the address, go to its page, click on "records", then "edit records"\n3. add a new text record with name "subplebbit-address" and value: ${address}\n\n steps to set a .sol community address:\n1. go to v1.sns.id and search the address\n2. once you own the address, go to your profile, click the address menu "...", then "create subdomain"\n3. enter subdomain "subplebbit-address" and create\n4. go to subdomain, "content", change content to: ${address}
- `);
+ alert(
+ `steps to set a .eth community address:\n1. go to app.ens.domains and search the address\n2. once you own the address, go to its page, click on "records", then "edit records"\n3. add a new text record with name "subplebbit-address" and value: ${address}`,
+ );
};
return (
diff --git a/src/views/settings/address-settings/address-settings.tsx b/src/views/settings/address-settings/address-settings.tsx
index 38b5a57d..8e05ae6a 100644
--- a/src/views/settings/address-settings/address-settings.tsx
+++ b/src/views/settings/address-settings/address-settings.tsx
@@ -112,7 +112,7 @@ const AddressSettings = () => {
{
once you own the address, go to its page, click on "records", then "edit records"
add a new text record with name "plebbit-author-address" and value: {account?.signer?.address}
- steps to set a .sol user address:
-
-
-
- go to{' '}
-
- v1.sns.id
- {' '}
- and search the address
-
-
once you own the address, go to your profile, click the address menu "...", then "create subdomain"
-
enter subdomain "plebbit-author-address" and create
-
go to subdomain, "content", change content to: {account?.signer?.address}