Skip to content

Commit 8a89231

Browse files
authored
[ENSIP 19] Update set primary flow for SCWs (#2588)
* Update set primary flow for SCWs
1 parent 0ec97d1 commit 8a89231

File tree

1 file changed

+63
-13
lines changed

1 file changed

+63
-13
lines changed

apps/web/src/hooks/useSetPrimaryBasename.ts

Lines changed: 63 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import ReverseRegistrarAbi from 'apps/web/src/abis/ReverseRegistrarAbi';
22
import {
33
USERNAME_L2_RESOLVER_ADDRESSES,
4+
USERNAME_L2_REVERSE_REGISTRAR_ADDRESSES,
45
USERNAME_REVERSE_REGISTRAR_ADDRESSES,
56
} from 'apps/web/src/addresses/usernames';
67
import useBasenameChain from 'apps/web/src/hooks/useBasenameChain';
@@ -11,6 +12,9 @@ import useBaseEnsName from 'apps/web/src/hooks/useBaseEnsName';
1112
import { useErrors } from 'apps/web/contexts/Errors';
1213
import useWriteContractWithReceipt from 'apps/web/src/hooks/useWriteContractWithReceipt';
1314
import { useUsernameProfile } from 'apps/web/src/components/Basenames/UsernameProfileContext';
15+
import useWriteContractsWithLogs from 'apps/web/src/hooks/useWriteContractsWithLogs';
16+
import useCapabilitiesSafe from 'apps/web/src/hooks/useCapabilitiesSafe';
17+
import L2ReverseRegistrarAbi from 'apps/web/src/abis/L2ReverseRegistrarAbi';
1418

1519
/*
1620
A hook to set a name as primary for resolution.
@@ -31,6 +35,9 @@ export default function useSetPrimaryBasename({ secondaryUsername }: UseSetPrima
3135

3236
const { currentWalletIsProfileEditor } = useUsernameProfile();
3337
const { basenameChain: secondaryUsernameChain } = useBasenameChain(secondaryUsername);
38+
const { paymasterService: paymasterServiceEnabled } = useCapabilitiesSafe({
39+
chainId: secondaryUsernameChain.id,
40+
});
3441

3542
// Get current primary username
3643
// Note: This is sometimes undefined
@@ -52,6 +59,12 @@ export default function useSetPrimaryBasename({ secondaryUsername }: UseSetPrima
5259
eventName: 'update_primary_name',
5360
});
5461

62+
const { initiateBatchCalls, batchCallsIsSuccess, batchCallsIsLoading } =
63+
useWriteContractsWithLogs({
64+
chain: secondaryUsernameChain,
65+
eventName: 'update_primary_name',
66+
});
67+
5568
useEffect(() => {
5669
if (transactionIsSuccess) {
5770
refetchPrimaryUsername()
@@ -68,17 +81,43 @@ export default function useSetPrimaryBasename({ secondaryUsername }: UseSetPrima
6881
if (!address) return undefined;
6982

7083
try {
71-
await initiateTransaction({
72-
abi: ReverseRegistrarAbi,
73-
address: USERNAME_REVERSE_REGISTRAR_ADDRESSES[secondaryUsernameChain.id],
74-
args: [
75-
address,
76-
address,
77-
USERNAME_L2_RESOLVER_ADDRESSES[secondaryUsernameChain.id],
78-
secondaryUsername,
79-
],
80-
functionName: 'setNameForAddr',
81-
});
84+
if (!paymasterServiceEnabled) {
85+
await initiateTransaction({
86+
abi: ReverseRegistrarAbi,
87+
address: USERNAME_REVERSE_REGISTRAR_ADDRESSES[secondaryUsernameChain.id],
88+
args: [
89+
address,
90+
address,
91+
USERNAME_L2_RESOLVER_ADDRESSES[secondaryUsernameChain.id],
92+
secondaryUsername,
93+
],
94+
functionName: 'setNameForAddr',
95+
});
96+
} else {
97+
await initiateBatchCalls({
98+
contracts: [
99+
{
100+
abi: ReverseRegistrarAbi,
101+
address: USERNAME_REVERSE_REGISTRAR_ADDRESSES[secondaryUsernameChain.id],
102+
args: [
103+
address,
104+
address,
105+
USERNAME_L2_RESOLVER_ADDRESSES[secondaryUsernameChain.id],
106+
secondaryUsername,
107+
],
108+
functionName: 'setNameForAddr',
109+
},
110+
{
111+
abi: L2ReverseRegistrarAbi,
112+
address: USERNAME_L2_REVERSE_REGISTRAR_ADDRESSES[secondaryUsernameChain.id],
113+
functionName: 'setName',
114+
args: [secondaryUsername],
115+
},
116+
],
117+
account: address,
118+
chain: secondaryUsernameChain,
119+
});
120+
}
82121
} catch (error) {
83122
logError(error, 'Set primary name transaction canceled');
84123
return undefined;
@@ -89,12 +128,23 @@ export default function useSetPrimaryBasename({ secondaryUsername }: UseSetPrima
89128
secondaryUsername,
90129
primaryUsername,
91130
address,
131+
paymasterServiceEnabled,
92132
initiateTransaction,
93133
secondaryUsernameChain.id,
134+
initiateBatchCalls,
94135
logError,
95136
]);
96137

97-
const isLoading = transactionIsLoading || primaryUsernameIsLoading || primaryUsernameIsFetching;
138+
const isLoading =
139+
transactionIsLoading ||
140+
batchCallsIsLoading ||
141+
primaryUsernameIsLoading ||
142+
primaryUsernameIsFetching;
98143

99-
return { setPrimaryName, canSetUsernameAsPrimary, isLoading, transactionIsSuccess };
144+
return {
145+
setPrimaryName,
146+
canSetUsernameAsPrimary,
147+
isLoading,
148+
transactionIsSuccess: transactionIsSuccess || batchCallsIsSuccess,
149+
};
100150
}

0 commit comments

Comments
 (0)