mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-06-28 20:39:51 +00:00
update-payjoin (#2281)
* feat: upgrade to flutter_payjoin 0.23.0 * fix: dependency discrepancy freezed_annotation * feat(cw_bitcoin): use latest payjoin deps * ci: update rust toolchain * Update pubspec.yaml * trial: downgrade flutter payjoin ffi * some checks * trial 2 * [skip ci] use correct image for CI * fix: bump flutter sdk to 3.29.0 * partial revert --------- Co-authored-by: Czarek Nakamoto <cyjan@mrcyjanek.net> Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
This commit is contained in:
parent
b0edf1fe75
commit
8457a45c2a
38 changed files with 477 additions and 346 deletions
|
@ -6,6 +6,7 @@ import 'dart:typed_data';
|
|||
import 'package:bitcoin_base/bitcoin_base.dart';
|
||||
import 'package:cw_bitcoin/bitcoin_wallet.dart';
|
||||
import 'package:cw_bitcoin/bitcoin_wallet_addresses.dart';
|
||||
import 'package:cw_bitcoin/payjoin/payjoin_persister.dart';
|
||||
import 'package:cw_bitcoin/payjoin/payjoin_receive_worker.dart';
|
||||
import 'package:cw_bitcoin/payjoin/payjoin_send_worker.dart';
|
||||
import 'package:cw_bitcoin/payjoin/payjoin_session_errors.dart';
|
||||
|
@ -16,6 +17,7 @@ import 'package:cw_core/utils/print_verbose.dart';
|
|||
import 'package:payjoin_flutter/common.dart';
|
||||
import 'package:payjoin_flutter/receive.dart';
|
||||
import 'package:payjoin_flutter/send.dart';
|
||||
import 'package:payjoin_flutter/src/config.dart' as pj_config;
|
||||
import 'package:payjoin_flutter/uri.dart' as PayjoinUri;
|
||||
|
||||
class PayjoinManager {
|
||||
|
@ -31,11 +33,13 @@ class PayjoinManager {
|
|||
'https://ohttp.cakewallet.com',
|
||||
];
|
||||
|
||||
static Future<PayjoinUri.Url> randomOhttpRelayUrl() => PayjoinUri.Url.fromStr(
|
||||
ohttpRelayUrls[Random.secure().nextInt(ohttpRelayUrls.length)]);
|
||||
static String randomOhttpRelayUrl() =>
|
||||
ohttpRelayUrls[Random.secure().nextInt(ohttpRelayUrls.length)];
|
||||
|
||||
static const payjoinDirectoryUrl = 'https://payjo.in';
|
||||
|
||||
Future<void> initPayjoin() => pj_config.PConfig.initializeApp();
|
||||
|
||||
Future<void> resumeSessions() async {
|
||||
final allSessions = _payjoinStorage.readAllOpenSessions(_wallet.id);
|
||||
|
||||
|
@ -43,11 +47,11 @@ class PayjoinManager {
|
|||
if (session.isSenderSession) {
|
||||
printV("Resuming Payjoin Sender Session ${session.pjUri!}");
|
||||
return _spawnSender(
|
||||
sender: Sender.fromJson(session.sender!),
|
||||
sender: Sender.fromJson(json: session.sender!),
|
||||
pjUri: session.pjUri!,
|
||||
);
|
||||
}
|
||||
final receiver = Receiver.fromJson(session.receiver!);
|
||||
final receiver = Receiver.fromJson(json: session.receiver!);
|
||||
printV("Resuming Payjoin Receiver Session ${receiver.id()}");
|
||||
return _spawnReceiver(receiver: receiver);
|
||||
});
|
||||
|
@ -66,7 +70,12 @@ class PayjoinManager {
|
|||
psbtBase64: originalPsbt,
|
||||
pjUri: pjUri,
|
||||
);
|
||||
return senderBuilder.buildRecommended(minFeeRate: minFeeRateSatPerKwu);
|
||||
final persister = PayjoinSenderPersister.impl();
|
||||
final newSender =
|
||||
await senderBuilder.buildRecommended(minFeeRate: minFeeRateSatPerKwu);
|
||||
final senderToken = await newSender.persist(persister: persister);
|
||||
|
||||
return Sender.load(token: senderToken, persister: persister);
|
||||
} catch (e) {
|
||||
throw Exception('Error initializing Payjoin Sender: $e');
|
||||
}
|
||||
|
@ -143,21 +152,21 @@ class PayjoinManager {
|
|||
Future<Receiver> initReceiver(String address,
|
||||
[bool isTestnet = false]) async {
|
||||
try {
|
||||
final payjoinDirectory =
|
||||
await PayjoinUri.Url.fromStr(payjoinDirectoryUrl);
|
||||
|
||||
final ohttpKeys = await PayjoinUri.fetchOhttpKeys(
|
||||
ohttpRelay: await randomOhttpRelayUrl(),
|
||||
payjoinDirectory: payjoinDirectory,
|
||||
payjoinDirectory: payjoinDirectoryUrl,
|
||||
);
|
||||
|
||||
final receiver = await Receiver.create(
|
||||
final newReceiver = await NewReceiver.create(
|
||||
address: address,
|
||||
network: isTestnet ? Network.testnet : Network.bitcoin,
|
||||
directory: payjoinDirectory,
|
||||
directory: payjoinDirectoryUrl,
|
||||
ohttpKeys: ohttpKeys,
|
||||
ohttpRelay: await randomOhttpRelayUrl(),
|
||||
);
|
||||
final persister = PayjoinReceiverPersister.impl();
|
||||
final receiverToken = await newReceiver.persist(persister: persister);
|
||||
final receiver =
|
||||
await Receiver.load(persister: persister, token: receiverToken);
|
||||
|
||||
await _payjoinStorage.insertReceiverSession(receiver, _wallet.id);
|
||||
|
||||
|
@ -195,7 +204,8 @@ class PayjoinManager {
|
|||
rawAmount = getOutputAmountFromTx(tx, _wallet);
|
||||
break;
|
||||
case PayjoinReceiverRequestTypes.checkIsOwned:
|
||||
(_wallet.walletAddresses as BitcoinWalletAddresses).newPayjoinReceiver();
|
||||
(_wallet.walletAddresses as BitcoinWalletAddresses)
|
||||
.newPayjoinReceiver();
|
||||
_payjoinStorage.markReceiverSessionInProgress(receiver.id());
|
||||
|
||||
final inputScript = message['input_script'] as Uint8List;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue