mirror of
https://github.com/bisq-network/bisq.git
synced 2025-02-24 15:10:44 +01:00
Add segwit/legacy checbox for address creation
This commit is contained in:
parent
a9cc28f65a
commit
f9f5d92941
3 changed files with 29 additions and 13 deletions
|
@ -601,16 +601,21 @@ public class BtcWalletService extends WalletService {
|
|||
Optional<AddressEntry> addressEntry = getAddressEntryListAsImmutableList().stream()
|
||||
.filter(e -> context == e.getContext())
|
||||
.findAny();
|
||||
return getOrCreateAddressEntry(context, addressEntry);
|
||||
return getOrCreateAddressEntry(context, addressEntry, false);
|
||||
}
|
||||
|
||||
public AddressEntry getFreshAddressEntry() {
|
||||
return getFreshAddressEntry(true);
|
||||
}
|
||||
|
||||
public AddressEntry getFreshAddressEntry(boolean segwit) {
|
||||
AddressEntry.Context context = AddressEntry.Context.AVAILABLE;
|
||||
Optional<AddressEntry> addressEntry = getAddressEntryListAsImmutableList().stream()
|
||||
.filter(e -> context == e.getContext())
|
||||
.filter(e -> isAddressUnused(e.getAddress()))
|
||||
.filter(e -> Script.ScriptType.P2WPKH.equals(e.getAddress().getOutputScriptType()) == segwit)
|
||||
.findAny();
|
||||
return getOrCreateAddressEntry(context, addressEntry);
|
||||
return getOrCreateAddressEntry(context, addressEntry, segwit);
|
||||
}
|
||||
|
||||
public void recoverAddressEntry(String offerId, String address, AddressEntry.Context context) {
|
||||
|
@ -618,18 +623,15 @@ public class BtcWalletService extends WalletService {
|
|||
addressEntryList.swapAvailableToAddressEntryWithOfferId(addressEntry, context, offerId));
|
||||
}
|
||||
|
||||
private AddressEntry getOrCreateAddressEntry(AddressEntry.Context context, Optional<AddressEntry> addressEntry) {
|
||||
private AddressEntry getOrCreateAddressEntry(AddressEntry.Context context, Optional<AddressEntry> addressEntry, boolean segwit) {
|
||||
if (addressEntry.isPresent()) {
|
||||
return addressEntry.get();
|
||||
} else {
|
||||
DeterministicKey key;
|
||||
boolean segwit;
|
||||
if (AddressEntry.Context.AVAILABLE.equals(context)) {
|
||||
if (segwit) {
|
||||
key = (DeterministicKey) wallet.findKeyFromAddress(wallet.freshReceiveAddress(Script.ScriptType.P2WPKH));
|
||||
segwit = true;
|
||||
} else {
|
||||
key = (DeterministicKey) wallet.findKeyFromAddress(wallet.freshReceiveAddress(Script.ScriptType.P2PKH));
|
||||
segwit = false;
|
||||
}
|
||||
AddressEntry entry = new AddressEntry(key, context, segwit);
|
||||
addressEntryList.addAddressEntry(entry);
|
||||
|
|
|
@ -992,6 +992,7 @@ funds.deposit.fundWallet=Fund your wallet
|
|||
funds.deposit.withdrawFromWallet=Send funds from wallet
|
||||
funds.deposit.amount=Amount in BTC (optional)
|
||||
funds.deposit.generateAddress=Generate new address
|
||||
funds.deposit.generateAddressSegwit=Native segwit format (Bech32)
|
||||
funds.deposit.selectUnused=Please select an unused address from the table above rather than generating a new one.
|
||||
|
||||
funds.withdrawal.arbitrationFee=Arbitration fee
|
||||
|
|
|
@ -41,8 +41,12 @@ import bisq.core.util.coin.CoinFormatter;
|
|||
|
||||
import bisq.common.UserThread;
|
||||
import bisq.common.app.DevEnv;
|
||||
import bisq.common.config.Config;
|
||||
|
||||
import org.bitcoinj.core.Address;
|
||||
import org.bitcoinj.core.Coin;
|
||||
import org.bitcoinj.core.NetworkParameters;
|
||||
import org.bitcoinj.core.SegwitAddress;
|
||||
import org.bitcoinj.core.Transaction;
|
||||
|
||||
import net.glxn.qrgen.QRCode;
|
||||
|
@ -54,6 +58,7 @@ import javax.inject.Named;
|
|||
import javafx.fxml.FXML;
|
||||
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.CheckBox;
|
||||
import javafx.scene.control.TableCell;
|
||||
import javafx.scene.control.TableColumn;
|
||||
import javafx.scene.control.TableView;
|
||||
|
@ -85,10 +90,7 @@ import java.util.concurrent.TimeUnit;
|
|||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import static bisq.desktop.util.FormBuilder.addAddressTextField;
|
||||
import static bisq.desktop.util.FormBuilder.addButton;
|
||||
import static bisq.desktop.util.FormBuilder.addInputTextField;
|
||||
import static bisq.desktop.util.FormBuilder.addTitledGroupBg;
|
||||
import static bisq.desktop.util.FormBuilder.*;
|
||||
|
||||
@FxmlView
|
||||
public class DepositView extends ActivatableView<VBox, Void> {
|
||||
|
@ -102,6 +104,7 @@ public class DepositView extends ActivatableView<VBox, Void> {
|
|||
private ImageView qrCodeImageView;
|
||||
private AddressTextField addressTextField;
|
||||
private Button generateNewAddressButton;
|
||||
private CheckBox generateNewAddressSegwitCheckbox;
|
||||
private TitledGroupBg titledGroupBg;
|
||||
private InputTextField amountTextField;
|
||||
|
||||
|
@ -195,16 +198,26 @@ public class DepositView extends ActivatableView<VBox, Void> {
|
|||
addressTextField.setManaged(false);
|
||||
amountTextField.setManaged(false);
|
||||
|
||||
generateNewAddressSegwitCheckbox = addCheckBox(gridPane, ++gridRow,
|
||||
Res.get("funds.deposit.generateAddressSegwit"), -20);
|
||||
generateNewAddressSegwitCheckbox.setAllowIndeterminate(false);
|
||||
generateNewAddressSegwitCheckbox.setSelected(true);
|
||||
GridPane.setColumnIndex(generateNewAddressSegwitCheckbox, 0);
|
||||
GridPane.setHalignment(generateNewAddressSegwitCheckbox, HPos.LEFT);
|
||||
|
||||
generateNewAddressButton = addButton(gridPane, ++gridRow, Res.get("funds.deposit.generateAddress"), -20);
|
||||
GridPane.setColumnIndex(generateNewAddressButton, 0);
|
||||
GridPane.setHalignment(generateNewAddressButton, HPos.LEFT);
|
||||
|
||||
generateNewAddressButton.setOnAction(event -> {
|
||||
boolean hasUnUsedAddress = observableList.stream().anyMatch(e -> e.getNumTxOutputs() == 0);
|
||||
boolean segwit = generateNewAddressSegwitCheckbox.isSelected();
|
||||
NetworkParameters params = Config.baseCurrencyNetworkParameters();
|
||||
boolean hasUnUsedAddress = observableList.stream().anyMatch(e -> e.getNumTxOutputs() == 0
|
||||
&& (Address.fromString(params, e.getAddressString()) instanceof SegwitAddress) == segwit);
|
||||
if (hasUnUsedAddress) {
|
||||
new Popup().warning(Res.get("funds.deposit.selectUnused")).show();
|
||||
} else {
|
||||
AddressEntry newSavingsAddressEntry = walletService.getFreshAddressEntry();
|
||||
AddressEntry newSavingsAddressEntry = walletService.getFreshAddressEntry(segwit);
|
||||
updateList();
|
||||
observableList.stream()
|
||||
.filter(depositListItem -> depositListItem.getAddressString().equals(newSavingsAddressEntry.getAddressString()))
|
||||
|
|
Loading…
Add table
Reference in a new issue