apply Craig's feedback

- use V2__Whirlpool.sql
- allow pools list & tx0 preview without seed
- filter DataSource wallet for refresh
This commit is contained in:
zeroleak 2021-08-29 10:49:25 +02:00
parent 050c4fc31e
commit 4577a64ad5
4 changed files with 43 additions and 23 deletions

View file

@ -7,9 +7,7 @@ import com.samourai.wallet.api.backend.beans.UnspentOutput;
import com.samourai.wallet.hd.HD_Wallet; import com.samourai.wallet.hd.HD_Wallet;
import com.samourai.wallet.hd.HD_WalletFactoryGeneric; import com.samourai.wallet.hd.HD_WalletFactoryGeneric;
import com.samourai.whirlpool.client.event.*; import com.samourai.whirlpool.client.event.*;
import com.samourai.whirlpool.client.tx0.Tx0; import com.samourai.whirlpool.client.tx0.*;
import com.samourai.whirlpool.client.tx0.Tx0Config;
import com.samourai.whirlpool.client.tx0.Tx0Preview;
import com.samourai.whirlpool.client.wallet.WhirlpoolEventService; import com.samourai.whirlpool.client.wallet.WhirlpoolEventService;
import com.samourai.whirlpool.client.wallet.WhirlpoolWallet; import com.samourai.whirlpool.client.wallet.WhirlpoolWallet;
import com.samourai.whirlpool.client.wallet.WhirlpoolWalletConfig; import com.samourai.whirlpool.client.wallet.WhirlpoolWalletConfig;
@ -17,6 +15,7 @@ import com.samourai.whirlpool.client.wallet.WhirlpoolWalletService;
import com.samourai.whirlpool.client.wallet.beans.*; import com.samourai.whirlpool.client.wallet.beans.*;
import com.samourai.whirlpool.client.wallet.data.dataPersister.DataPersisterFactory; import com.samourai.whirlpool.client.wallet.data.dataPersister.DataPersisterFactory;
import com.samourai.whirlpool.client.wallet.data.dataSource.DataSourceFactory; import com.samourai.whirlpool.client.wallet.data.dataSource.DataSourceFactory;
import com.samourai.whirlpool.client.wallet.data.pool.PoolData;
import com.samourai.whirlpool.client.wallet.data.utxo.UtxoSupplier; import com.samourai.whirlpool.client.wallet.data.utxo.UtxoSupplier;
import com.samourai.whirlpool.client.wallet.data.utxoConfig.UtxoConfig; import com.samourai.whirlpool.client.wallet.data.utxoConfig.UtxoConfig;
import com.samourai.whirlpool.client.whirlpool.ServerApi; import com.samourai.whirlpool.client.whirlpool.ServerApi;
@ -40,6 +39,7 @@ import com.sparrowwallet.sparrow.event.WhirlpoolMixSuccessEvent;
import com.sparrowwallet.sparrow.wallet.UtxoEntry; import com.sparrowwallet.sparrow.wallet.UtxoEntry;
import com.sparrowwallet.sparrow.whirlpool.dataPersister.SparrowDataPersister; import com.sparrowwallet.sparrow.whirlpool.dataPersister.SparrowDataPersister;
import com.sparrowwallet.sparrow.whirlpool.dataSource.SparrowDataSource; import com.sparrowwallet.sparrow.whirlpool.dataSource.SparrowDataSource;
import com.sparrowwallet.sparrow.whirlpool.dataSource.SparrowMinerFeeSupplier;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.beans.property.BooleanProperty; import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleBooleanProperty;
@ -98,19 +98,21 @@ public class Whirlpool {
} }
public Collection<Pool> getPools() throws Exception { public Collection<Pool> getPools() throws Exception {
WhirlpoolWallet whirlpoolWallet = getWhirlpoolWallet(); Tx0ParamService tx0ParamService = getTx0ParamService();
return whirlpoolWallet.getPoolSupplier().getPools(); PoolData poolData = new PoolData(config.getServerApi().fetchPools(), tx0ParamService);
return poolData.getPools();
} }
public Tx0Preview getTx0Preview(Pool pool, Collection<UnspentOutput> utxos) throws Exception { public Tx0Preview getTx0Preview(Pool pool, Collection<UnspentOutput> utxos) throws Exception {
WhirlpoolWallet whirlpoolWallet = getWhirlpoolWallet();
Tx0Config tx0Config = new Tx0Config(); Tx0Config tx0Config = new Tx0Config();
tx0Config.setChangeWallet(WhirlpoolAccount.BADBANK); tx0Config.setChangeWallet(WhirlpoolAccount.BADBANK);
Tx0FeeTarget tx0FeeTarget = Tx0FeeTarget.BLOCKS_4; Tx0FeeTarget tx0FeeTarget = Tx0FeeTarget.BLOCKS_4;
Tx0FeeTarget mixFeeTarget = Tx0FeeTarget.BLOCKS_4; Tx0FeeTarget mixFeeTarget = Tx0FeeTarget.BLOCKS_4;
return whirlpoolWallet.tx0Preview(pool, tx0Config, utxos, tx0FeeTarget, mixFeeTarget); Tx0ParamService tx0ParamService = getTx0ParamService();
Tx0Service tx0Service = new Tx0Service(config);
return tx0Service.tx0Preview(utxos, tx0Config, tx0ParamService.getTx0Param(pool, tx0FeeTarget, mixFeeTarget));
} }
public Tx0 broadcastTx0(Pool pool, Collection<BlockTransactionHashIndex> utxos) throws Exception { public Tx0 broadcastTx0(Pool pool, Collection<BlockTransactionHashIndex> utxos) throws Exception {
@ -131,6 +133,17 @@ public class Whirlpool {
return whirlpoolWallet.tx0(whirlpoolUtxos, pool, tx0Config, tx0FeeTarget, mixFeeTarget); return whirlpoolWallet.tx0(whirlpoolUtxos, pool, tx0Config, tx0FeeTarget, mixFeeTarget);
} }
private Tx0ParamService getTx0ParamService() {
try {
SparrowMinerFeeSupplier minerFeeSupplier = SparrowMinerFeeSupplier.getInstance();
return new Tx0ParamService(minerFeeSupplier, config);
} catch(Exception e) {
log.error("Error fetching miner fees", e);
}
return null;
}
public void setHDWallet(String walletId, Wallet wallet) { public void setHDWallet(String walletId, Wallet wallet) {
if(wallet.isEncrypted()) { if(wallet.isEncrypted()) {
throw new IllegalStateException("Wallet cannot be encrypted"); throw new IllegalStateException("Wallet cannot be encrypted");

View file

@ -25,8 +25,8 @@ import com.sparrowwallet.drongo.wallet.WalletNode;
import com.sparrowwallet.sparrow.AppServices; import com.sparrowwallet.sparrow.AppServices;
import com.sparrowwallet.sparrow.EventManager; import com.sparrowwallet.sparrow.EventManager;
import com.sparrowwallet.sparrow.event.NewBlockEvent; import com.sparrowwallet.sparrow.event.NewBlockEvent;
import com.sparrowwallet.sparrow.event.NewWalletTransactionsEvent;
import com.sparrowwallet.sparrow.event.WalletAddressesChangedEvent; import com.sparrowwallet.sparrow.event.WalletAddressesChangedEvent;
import com.sparrowwallet.sparrow.event.WalletHistoryChangedEvent;
import com.sparrowwallet.sparrow.net.ElectrumServer; import com.sparrowwallet.sparrow.net.ElectrumServer;
import com.sparrowwallet.sparrow.whirlpool.Whirlpool; import com.sparrowwallet.sparrow.whirlpool.Whirlpool;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -37,12 +37,17 @@ import java.util.*;
public class SparrowDataSource extends WalletResponseDataSource { public class SparrowDataSource extends WalletResponseDataSource {
private static final Logger log = LoggerFactory.getLogger(SparrowDataSource.class); private static final Logger log = LoggerFactory.getLogger(SparrowDataSource.class);
private final String walletIdentifierPrefix;
public SparrowDataSource( public SparrowDataSource(
WhirlpoolWallet whirlpoolWallet, WhirlpoolWallet whirlpoolWallet,
HD_Wallet bip44w, HD_Wallet bip44w,
DataPersister dataPersister) DataPersister dataPersister)
throws Exception { throws Exception {
super(whirlpoolWallet, bip44w, dataPersister); super(whirlpoolWallet, bip44w, dataPersister);
// prefix matching <prefix>:master, :Premix, :Postmix
this.walletIdentifierPrefix = getWhirlpoolWallet().getWalletIdentifier().replace(":master", "");
} }
@Override @Override
@ -187,21 +192,13 @@ public class SparrowDataSource extends WalletResponseDataSource {
} }
@Subscribe @Subscribe
public void newWalletTransactions(NewWalletTransactionsEvent event) { public void walletHistoryChanged(WalletHistoryChangedEvent event) {
try { refreshWallet(event.getWalletId());
refresh();
} catch (Exception e) {
log.error("", e);
}
} }
@Subscribe @Subscribe
public void walletAddressesChanged(WalletAddressesChangedEvent event) { public void walletAddressesChanged(WalletAddressesChangedEvent event) {
try { refreshWallet(event.getWalletId());
refresh();
} catch (Exception e) {
log.error("", e);
}
} }
@Subscribe @Subscribe
@ -212,4 +209,15 @@ public class SparrowDataSource extends WalletResponseDataSource {
log.error("", e); log.error("", e);
} }
} }
private void refreshWallet(String eventWalletId) {
try {
// match <prefix>:master, :Premix, :Postmix
if (eventWalletId.startsWith(walletIdentifierPrefix)) {
refresh();
}
} catch (Exception e) {
log.error("", e);
}
}
} }

View file

@ -1 +1,2 @@
create table utxoMixData (id identity not null, hash binary(32) not null, poolId varchar(32), mixesDone integer not null default 0, forwarding bigint, wallet bigint not null); drop table if exists utxoMixData;
create table utxoMixData (id identity not null, hash binary(32) not null, mixesDone integer not null default 0, expired bigint, wallet bigint not null);

View file

@ -1,2 +0,0 @@
drop table if exists utxoMixData;
create table utxoMixData (id identity not null, hash binary(32) not null, mixesDone integer not null default 0, expired bigint, wallet bigint not null);