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