mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-06-28 12:29:51 +00:00
* Initial Payjoin * Initial Payjoin * More payjoin stuff * Minor fixes * Minor fixes * Minor cleanup * Minor cleanup * Minor cleanup * Minor cleanup * Minor cleanup * Minor cleanup * Fix minor bug causes by data inconsistency in the btc utxos * Minor cleanup * Minor cleanup * Minor cleanup * Minor cleanup * Initial Payjoin * Initial Payjoin * More payjoin stuff * Minor fixes * Minor fixes * Minor cleanup * Minor cleanup * Minor cleanup * Minor cleanup * Minor cleanup * Minor cleanup * Fix minor bug causes by data inconsistency in the btc utxos * Minor cleanup * Minor cleanup * Minor cleanup * Minor cleanup * Fix Rebase issues * Move PJ Receiver to isolate * Add Payjoin Setting * Payjoin Sender are now isolated * Added Payjoin sessions to tx overview. Fix Fee issue with payjoin * Clean up code * Fix taproot for payjoin * Fix CI Errors * Add Payjoin UI elements and details page * Add Payjoin UI elements and details page * Fix Translations * feat: Detect Payjoin URIs in pasted text and show to the User sending Payjoin * feat: rename pjUri to payjoinURI for more code clarity * Update res/values/strings_pl.arb Co-authored-by: cyan <cyjan@mrcyjanek.net> * Update cw_bitcoin/lib/payjoin/manager.dart Co-authored-by: cyan <cyjan@mrcyjanek.net> * Update cw_bitcoin/lib/payjoin/manager.dart Co-authored-by: cyan <cyjan@mrcyjanek.net> * feat: Disable Payjoin per default * feat: Disable Payjoin fully if disabled or no Inputs available * feat: Resume Payjoin if app comes back to foreground * chore: Revert overly aggressive code formats * feat: show correct Payjoin amount for receivers * feat: Improved payjoin status * feat: Show payjoin errors on payjoin details screen * deps: update flutter to 3.27.4 * feat: Revert localisations * bug: Remove duplicate transaction id on payjoin details * style: remove double await in payjoin sender * refactor(cw_bitcoin): Refactor method signatures and convert constructor to factory * refactor(cw_bitcoin): Refactor wallet service and PSBT signer for cleaner code Removed unnecessary `CakeHive` dependency and refactored `BitcoinWallet` initialization to use `payjoinSessionSource`. Improved code readability in `PsbtSigner` by reformatting lines and simplifying constructor methods for `UtxoWithPrivateKey`. * fix: Resume Payjoin Sessions and load PJUri after sleep * feat: Add "Copy Payjoin URL button" to receive screen * fix: Add "Payjoin enabled"-Box below QR Code on the receive screen * fix: Set payjoin_enabled color to black independent of the theme * refactor: Payjoin session management and cleanup unused code. --------- Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> Co-authored-by: cyan <cyjan@mrcyjanek.net>
95 lines
2.8 KiB
Dart
95 lines
2.8 KiB
Dart
import 'package:cw_core/payjoin_session.dart';
|
|
import 'package:hive/hive.dart';
|
|
import 'package:payjoin_flutter/receive.dart';
|
|
import 'package:payjoin_flutter/send.dart';
|
|
|
|
class PayjoinStorage {
|
|
PayjoinStorage(this._payjoinSessionSources);
|
|
|
|
final Box<PayjoinSession> _payjoinSessionSources;
|
|
|
|
static const String _receiverPrefix = 'pj_recv_';
|
|
static const String _senderPrefix = 'pj_send_';
|
|
|
|
Future<void> insertReceiverSession(
|
|
Receiver receiver,
|
|
String walletId,
|
|
) =>
|
|
_payjoinSessionSources.put(
|
|
"$_receiverPrefix${receiver.id()}",
|
|
PayjoinSession(
|
|
walletId: walletId,
|
|
receiver: receiver.toJson(),
|
|
),
|
|
);
|
|
|
|
Future<void> markReceiverSessionComplete(
|
|
String sessionId, String txId, String amount) async {
|
|
final session = _payjoinSessionSources.get("$_receiverPrefix${sessionId}")!;
|
|
|
|
session.status = PayjoinSessionStatus.success.name;
|
|
session.txId = txId;
|
|
session.rawAmount = amount;
|
|
await session.save();
|
|
}
|
|
|
|
Future<void> markReceiverSessionUnrecoverable(
|
|
String sessionId, String reason) async {
|
|
final session = _payjoinSessionSources.get("$_receiverPrefix${sessionId}")!;
|
|
|
|
session.status = PayjoinSessionStatus.unrecoverable.name;
|
|
session.error = reason;
|
|
await session.save();
|
|
}
|
|
|
|
Future<void> markReceiverSessionInProgress(String sessionId) async {
|
|
final session = _payjoinSessionSources.get("$_receiverPrefix${sessionId}")!;
|
|
|
|
session.status = PayjoinSessionStatus.inProgress.name;
|
|
session.inProgressSince = DateTime.now();
|
|
await session.save();
|
|
}
|
|
|
|
Future<void> insertSenderSession(
|
|
Sender sender,
|
|
String pjUrl,
|
|
String walletId,
|
|
BigInt amount,
|
|
) =>
|
|
_payjoinSessionSources.put(
|
|
"$_senderPrefix$pjUrl",
|
|
PayjoinSession(
|
|
walletId: walletId,
|
|
pjUri: pjUrl,
|
|
sender: sender.toJson(),
|
|
status: PayjoinSessionStatus.inProgress.name,
|
|
inProgressSince: DateTime.now(),
|
|
rawAmount: amount.toString(),
|
|
),
|
|
);
|
|
|
|
Future<void> markSenderSessionComplete(String pjUrl, String txId) async {
|
|
final session = _payjoinSessionSources.get("$_senderPrefix$pjUrl")!;
|
|
|
|
session.status = PayjoinSessionStatus.success.name;
|
|
session.txId = txId;
|
|
await session.save();
|
|
}
|
|
|
|
Future<void> markSenderSessionUnrecoverable(String pjUrl) async {
|
|
final session = _payjoinSessionSources.get("$_senderPrefix$pjUrl")!;
|
|
|
|
session.status = PayjoinSessionStatus.unrecoverable.name;
|
|
await session.save();
|
|
}
|
|
|
|
List<PayjoinSession> readAllOpenSessions(String walletId) =>
|
|
_payjoinSessionSources.values
|
|
.where((session) =>
|
|
session.walletId == walletId &&
|
|
![
|
|
PayjoinSessionStatus.success.name,
|
|
PayjoinSessionStatus.unrecoverable.name
|
|
].contains(session.status))
|
|
.toList();
|
|
}
|