@@ -13,6 +13,7 @@ import { getCurrentEnvironment } from "../utils/config";
1313import { get } from "../utils/apiClient" ;
1414import { useAuth } from "../context/useAuth" ;
1515import { cleanMultisigAddress } from "../utils/multisig" ;
16+ import { getChainById } from "../../../config" ;
1617
1718interface OrderlyKeyLoginModalProps {
1819 isOpen : boolean ;
@@ -38,6 +39,7 @@ export default function OrderlyKeyLoginModal({
3839 const { token } = useAuth ( ) ;
3940 const [ isCreating , setIsCreating ] = useState ( false ) ;
4041 const [ multisigAddress , setMultisigAddress ] = useState < string | undefined > ( ) ;
42+ const [ multisigChainId , setMultisigChainId ] = useState < number | undefined > ( ) ;
4143 const [ isLoadingStatus , setIsLoadingStatus ] = useState ( false ) ;
4244
4345 const isMainnet = getCurrentEnvironment ( ) === "mainnet" ;
@@ -60,13 +62,16 @@ export default function OrderlyKeyLoginModal({
6062 const data = await get < {
6163 isMultisig ?: boolean ;
6264 multisigAddress ?: string ;
65+ multisigChainId ?: number | null ;
6366 } > ( "/api/graduation/graduation-status" , token , {
6467 showToastOnError : false ,
6568 } ) ;
6669 if ( data . isMultisig && data . multisigAddress ) {
6770 setMultisigAddress ( data . multisigAddress ) ;
71+ setMultisigChainId ( data . multisigChainId || undefined ) ;
6872 } else {
6973 setMultisigAddress ( undefined ) ;
74+ setMultisigChainId ( undefined ) ;
7075 }
7176 } catch ( error ) {
7277 console . error ( "Failed to fetch graduation status:" , error ) ;
@@ -86,12 +91,20 @@ export default function OrderlyKeyLoginModal({
8691 accountId ||
8792 ( cleanAddress && brokerId ? getAccountId ( cleanAddress , brokerId ) : "" ) ;
8893
94+ const requiredChainId =
95+ isMultisig && multisigChainId ? multisigChainId : null ;
96+ const isOnCorrectChain = requiredChainId
97+ ? chainId === requiredChainId
98+ : isSupportedChain ;
99+ const requiredChain = requiredChainId ? getChainById ( requiredChainId ) : null ;
100+
89101 const handleSwitchChain = async ( ) => {
90102 try {
91- await switchChain ( { chainId : defaultChainId } ) ;
103+ const targetChainId = requiredChainId || defaultChainId ;
104+ await switchChain ( { chainId : targetChainId } ) ;
92105 } catch ( error ) {
93106 console . error ( "Failed to switch chain:" , error ) ;
94- toast . error ( "Please switch to a supported network in your wallet" ) ;
107+ toast . error ( "Please switch to the required network in your wallet" ) ;
95108 }
96109 } ;
97110
@@ -101,8 +114,12 @@ export default function OrderlyKeyLoginModal({
101114 return ;
102115 }
103116
104- if ( ! isSupportedChain ) {
105- toast . error ( "Please switch to a supported network" ) ;
117+ if ( ! isOnCorrectChain ) {
118+ toast . error (
119+ isMultisig
120+ ? "Please switch to the network where your multisig delegate signer link was established"
121+ : "Please switch to a supported network"
122+ ) ;
106123 return ;
107124 }
108125
@@ -119,8 +136,6 @@ export default function OrderlyKeyLoginModal({
119136
120137 let orderlyKey : Uint8Array ;
121138
122- console . log ( "isMultisig" , isMultisig ) ;
123-
124139 if ( isMultisig ) {
125140 orderlyKey = await addDelegateOrderlyKey (
126141 signer ,
@@ -201,12 +216,22 @@ export default function OrderlyKeyLoginModal({
201216 < div className = "mt-3 bg-info/10 rounded-lg p-3 border border-info/20" >
202217 < div className = "flex items-start gap-2" >
203218 < div className = "i-mdi:information-outline text-info w-4 h-4 mt-0.5 flex-shrink-0" > </ div >
204- < p className = "text-xs text-gray-400 text-left" >
205- Creating delegate key for multisig wallet:{ " " }
206- < span className = "font-mono text-primary-light" >
207- { multisigAddress }
208- </ span >
209- </ p >
219+ < div className = "text-xs text-gray-400 text-left" >
220+ < p className = "mb-1" >
221+ Creating delegate key for multisig wallet:{ " " }
222+ < span className = "font-mono text-primary-light" >
223+ { multisigAddress }
224+ </ span >
225+ </ p >
226+ { requiredChain && (
227+ < p className = "text-info" >
228+ Required network:{ " " }
229+ < span className = "font-semibold" >
230+ { requiredChain . name }
231+ </ span >
232+ </ p >
233+ ) }
234+ </ div >
210235 </ div >
211236 </ div >
212237 ) }
@@ -246,14 +271,17 @@ export default function OrderlyKeyLoginModal({
246271 </ p >
247272 </ div >
248273
249- { ! isSupportedChain && (
274+ { ! isOnCorrectChain && (
250275 < div className = "bg-warning/10 border border-warning/20 rounded-lg p-3 mb-4" >
251276 < div className = "flex items-start gap-2" >
252277 < div className = "i-mdi:alert text-warning w-5 h-5 mt-0.5 flex-shrink-0" > </ div >
253278 < div className = "flex-1" >
254279 < p className = "text-warning text-sm" >
255- Please switch to a supported network to create your
256- Orderly key.
280+ { isMultisig && requiredChain
281+ ? `Please switch to ${ requiredChain . name } where your multisig delegate signer link was established.`
282+ : isMultisig && requiredChainId
283+ ? `Please switch to the network where your multisig delegate signer link was established (Chain ID: ${ requiredChainId } ).`
284+ : "Please switch to a supported network to create your Orderly key." }
257285 </ p >
258286 </ div >
259287 </ div >
@@ -268,7 +296,7 @@ export default function OrderlyKeyLoginModal({
268296 >
269297 Cancel
270298 </ Button >
271- { isSupportedChain ? (
299+ { isOnCorrectChain ? (
272300 < Button
273301 variant = "primary"
274302 onClick = { handleCreateKey }
0 commit comments