@@ -21,7 +21,7 @@ const methods = [
21
21
'solana_requestAccounts' ,
22
22
'solana_signTransaction' ,
23
23
'solana_signAndSendTransaction' ,
24
- // NOTE: 'solana_signMessage' is not supported in FW
24
+ 'solana_signMessage' ,
25
25
] ;
26
26
27
27
const solanaSignTransaction = createThunk <
@@ -129,14 +129,25 @@ const solanaRequestThunk = createThunk<
129
129
130
130
return { signature : pushResponse . payload . txid } ;
131
131
}
132
+ case 'solana_signMessage' : {
133
+ // Signing arbitrary messages for Solana is not supported in FW
134
+ // We indicate support for it in the adapter for compatibility, since some apps request it but don't actually use it
135
+ throw new Error ( 'solana_signMessage not supported' ) ;
136
+ }
132
137
}
133
138
} ) ;
134
139
140
+ // https://github.com/reown-com/blockchain-api/blob/master/SUPPORTED_CHAINS.md#solana
141
+ enum SolanaChainIds {
142
+ MAINNET = 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' ,
143
+ TESTNET = 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1' ,
144
+ MAINNET_LEGACY = 'solana:4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZ' ,
145
+ }
146
+
135
147
export const getChainId = ( network : Network ) =>
136
- // https://github.com/reown-com/blockchain-api/blob/master/SUPPORTED_CHAINS.md#solana
137
148
network . testnet
138
- ? 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1'
139
- : 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' ;
149
+ ? [ SolanaChainIds . TESTNET ]
150
+ : [ SolanaChainIds . MAINNET , SolanaChainIds . MAINNET_LEGACY ] ;
140
151
141
152
export const getNamespace = ( accounts : Account [ ] ) => {
142
153
const solana = {
@@ -152,11 +163,13 @@ export const getNamespace = (accounts: Account[]) => {
152
163
153
164
if ( ! account . visible || networkType !== 'solana' ) return ;
154
165
155
- const walletConnectChainId = getChainId ( network ) ;
156
- if ( ! solana . chains . includes ( walletConnectChainId ) ) {
157
- solana . chains . push ( walletConnectChainId ) ;
166
+ const walletConnectChainIds = getChainId ( network ) ;
167
+ for ( const walletConnectChainId of walletConnectChainIds ) {
168
+ if ( ! solana . chains . includes ( walletConnectChainId ) ) {
169
+ solana . chains . push ( walletConnectChainId ) ;
170
+ }
171
+ solana . accounts . push ( `${ walletConnectChainId } :${ account . descriptor } ` ) ;
158
172
}
159
- solana . accounts . push ( `${ walletConnectChainId } :${ account . descriptor } ` ) ;
160
173
} ) ;
161
174
162
175
return { solana } ;
@@ -172,11 +185,13 @@ const processNamespaces = (
172
185
( [ key , namespace ] : [ string , ProposalTypes . RequiredNamespace ] ) => {
173
186
if ( key === 'solana' ) {
174
187
namespace . chains ?. forEach ( chain => {
175
- const alreadyAdded = networks . some ( network => network . namespaceId === chain ) ;
176
- if ( alreadyAdded ) return ;
177
188
const supported = networksCollection
178
189
. filter ( nc => nc . networkType === 'solana' )
179
- . find ( nc => chain === getChainId ( nc ) ) ;
190
+ . find ( nc => getChainId ( nc ) . includes ( chain as SolanaChainIds ) ) ;
191
+ const alreadyAdded = networks . some (
192
+ network => network . symbol === supported ?. symbol ,
193
+ ) ;
194
+ if ( alreadyAdded ) return ;
180
195
const getStatus = ( ) => {
181
196
if ( ! supported ) return 'unsupported' ;
182
197
const hasAccounts = accounts . some (
0 commit comments