cache tx0info and clear after tx0 broadcast

This commit is contained in:
Craig Raw 2024-03-25 16:23:24 +02:00
parent a4991064af
commit 1c3c2d8089

View file

@ -73,6 +73,7 @@ public class Whirlpool {
private final WhirlpoolWalletService whirlpoolWalletService;
private final WhirlpoolWalletConfig config;
private WhirlpoolInfo whirlpoolInfo;
private Tx0Info tx0Info;
private Tx0FeeTarget tx0FeeTarget = Tx0FeeTarget.BLOCKS_4;
private Tx0FeeTarget mixFeeTarget = Tx0FeeTarget.BLOCKS_4;
private HD_Wallet hdWallet;
@ -90,6 +91,7 @@ public class Whirlpool {
public Whirlpool(Integer storedBlockHeight) {
this.whirlpoolWalletService = new WhirlpoolWalletService();
this.config = computeWhirlpoolWalletConfig(storedBlockHeight);
this.tx0Info = null; // instantiated by getTx0Info()
this.whirlpoolInfo = null; // instantiated by getWhirlpoolInfo()
WhirlpoolEventService.getInstance().register(this);
@ -131,9 +133,7 @@ public class Whirlpool {
}
public Tx0Previews getTx0Previews(Collection<UnspentOutput> utxos) throws Exception {
// TODO keep tx0Info for reusing it later on another TX0 preview or TX0 broadcast
// it should be refreshed after each successful TX0 broadcast
Tx0Info tx0Info = fetchTx0Info();
Tx0Info tx0Info = getTx0Info();
// preview all pools
Tx0Config tx0Config = computeTx0Config(tx0Info);
@ -141,7 +141,6 @@ public class Whirlpool {
}
public Tx0 broadcastTx0(Pool pool, Collection<BlockTransactionHashIndex> utxos) throws Exception {
// TODO no need to instanciate WhirlpoolWallet, you just need walletSupplier & utxoSupplier
WhirlpoolWallet whirlpoolWallet = getWhirlpoolWallet();
whirlpoolWallet.startAsync().subscribeOn(Schedulers.io()).observeOn(JavaFxScheduler.platform());
UtxoSupplier utxoSupplier = whirlpoolWallet.getUtxoSupplier();
@ -151,12 +150,23 @@ public class Whirlpool {
throw new IllegalStateException("Failed to find UTXOs in Whirlpool wallet");
}
// TODO reuse tx0Info from TX0 preview to speed up the process
Tx0Info tx0Info = fetchTx0Info();
Tx0Info tx0Info = getTx0Info();
WalletSupplier walletSupplier = whirlpoolWallet.getWalletSupplier();
Tx0Config tx0Config = computeTx0Config(tx0Info);
return tx0Info.tx0(walletSupplier, utxoSupplier, whirlpoolUtxos, pool, tx0Config);
Tx0 tx0 = tx0Info.tx0(walletSupplier, utxoSupplier, whirlpoolUtxos, pool, tx0Config);
//Clear tx0 for new fee addresses
clearTx0Info();
return tx0;
}
private Tx0Info getTx0Info() throws Exception {
if(tx0Info == null) {
tx0Info = fetchTx0Info();
}
return tx0Info;
}
private Tx0Info fetchTx0Info() throws Exception {
@ -165,6 +175,10 @@ public class Whirlpool {
.subscribeOn(Schedulers.io()).observeOn(JavaFxScheduler.platform()));
}
private void clearTx0Info() {
tx0Info = null;
}
private Tx0Config computeTx0Config(Tx0Info tx0Info) {
Tx0Config tx0Config = tx0Info.getTx0Config(tx0FeeTarget, mixFeeTarget);
tx0Config.setChangeWallet(SamouraiAccount.BADBANK);