feat: Add solana to Open Crypto Pay (#2417)
Konstantin Ullrich committed
Jul 30, 2025 at 01:24 UTC
d32569fc8469c7539fd45c23ce0c8cce1bbbdbe3
3 files changed
+12
-4
cw_solana/lib/pending_solana_transaction.dart
+3
-2
@@ -6,6 +6,7 @@ class PendingSolanaTransaction with PendingTransaction {
6
final String destinationAddress;
7
final Function sendTransaction;
8
final double fee;
9
+ String? _sig;
10
11
PendingSolanaTransaction({
12
required this.fee,
@@ -28,7 +29,7 @@ class PendingSolanaTransaction with PendingTransaction {
29
30
@override
31
Future<void> commit() async {
31
- return await sendTransaction();
32
+ _sig = await sendTransaction();
33
}
34
35
@override
@@ -41,7 +42,7 @@ class PendingSolanaTransaction with PendingTransaction {
42
String get hex => serializedTransaction;
43
44
@override
44
- String get id => '';
45
+ String get id => _sig ?? '';
46
47
@override
48
Future<Map<String, String>> commitUR() {
lib/core/open_crypto_pay/open_cryptopay_service.dart
+8
-1
@@ -12,6 +12,9 @@ class OpenCryptoPayService {
12
value.toLowerCase().contains("lightning=lnurl") ||
13
value.toLowerCase().startsWith("lnurl");
14
15
+ static bool requiresClientCommit(CryptoCurrency currency) =>
16
+ [CryptoCurrency.xmr, CryptoCurrency.sol].contains(currency) || currency.tag == "SOL";
17
+
18
Future<String> commitOpenCryptoPayRequest(
19
String txHex, {
20
required String txId,
@@ -39,7 +42,7 @@ class OpenCryptoPayService {
42
throw OpenCryptoPayException(body.toString());
43
}
44
throw OpenCryptoPayException(
42
- "Unexpected status code ${response.statusCode} ${response}");
45
+ "Unexpected status code ${response.statusCode} ${response.body}");
46
}
47
48
Future<void> cancelOpenCryptoPayRequest(OpenCryptoPayRequest request) async {
@@ -162,6 +165,10 @@ class OpenCryptoPayService {
165
return "Ethereum";
166
case "POL":
167
return "Polygon";
168
+ case "TRX":
169
+ return "Tron";
170
+ case "SOL":
171
+ return "Solana";
172
default:
173
return asset.fullName!;
174
}
lib/view_model/send/send_view_model.dart
+1
-1
@@ -560,7 +560,7 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
560
561
if (ocpRequest != null) {
562
state = TransactionCommitting();
563
- if (selectedCryptoCurrency == CryptoCurrency.xmr) {
563
+ if (OpenCryptoPayService.requiresClientCommit(selectedCryptoCurrency)) {
564
await pendingTransaction!.commit();
565
}
566