make wallet node static inner class

This commit is contained in:
Craig Raw 2020-05-30 11:47:23 +02:00
parent 331b83f7a0
commit 5223fe8d8c
6 changed files with 37 additions and 39 deletions

2
drongo

@ -1 +1 @@
Subproject commit a32410b53831b3e5b111dd8fc82291c7ab30c732
Subproject commit cc4f70002f64bc38307401cfecc548e0ee9adbbe

View file

@ -29,7 +29,7 @@ public class AddressTreeTable extends TreeTableView<Entry> {
public void initialize(NodeEntry rootEntry) {
getStyleClass().add("address-treetable");
String address = rootEntry.getNode().getAddress().toString();
String address = rootEntry.getAddress().toString();
RecursiveTreeItem<Entry> rootItem = new RecursiveTreeItem<>(rootEntry, Entry::getChildren);
setRoot(rootItem);
@ -92,7 +92,7 @@ public class AddressTreeTable extends TreeTableView<Entry> {
} else {
if(entry instanceof NodeEntry) {
NodeEntry nodeEntry = (NodeEntry)entry;
Address address = nodeEntry.getNode().getAddress();
Address address = nodeEntry.getAddress();
setText(address.toString());
setContextMenu(new AddressContextMenu(address));
} else {

View file

@ -73,24 +73,24 @@ public class ElectrumServer {
}
public void getHistory(Wallet wallet, KeyPurpose keyPurpose) throws ServerException {
getHistory(wallet.getNode(keyPurpose).getChildren());
getMempool(wallet.getNode(keyPurpose).getChildren());
getHistory(wallet, wallet.getNode(keyPurpose).getChildren());
getMempool(wallet, wallet.getNode(keyPurpose).getChildren());
}
public void getHistory(Collection<Wallet.Node> nodes) throws ServerException {
getReferences("blockchain.scripthash.get_history", nodes);
public void getHistory(Wallet wallet, Collection<Wallet.Node> nodes) throws ServerException {
getReferences(wallet, "blockchain.scripthash.get_history", nodes);
}
public void getMempool(Collection<Wallet.Node> nodes) throws ServerException {
getReferences("blockchain.scripthash.get_mempool", nodes);
public void getMempool(Wallet wallet, Collection<Wallet.Node> nodes) throws ServerException {
getReferences(wallet, "blockchain.scripthash.get_mempool", nodes);
}
public void getReferences(String method, Collection<Wallet.Node> nodes) throws ServerException {
public void getReferences(Wallet wallet, String method, Collection<Wallet.Node> nodes) throws ServerException {
try {
JsonRpcClient client = new JsonRpcClient(getTransport());
BatchRequestBuilder<String, ScriptHashTx[]> batchRequest = client.createBatchRequest().keysType(String.class).returnType(ScriptHashTx[].class);
for(Wallet.Node node : nodes) {
batchRequest.add(node.getDerivationPath(), method, getScriptHash(node));
batchRequest.add(node.getDerivationPath(), method, getScriptHash(wallet, node));
}
Map<String, ScriptHashTx[]> result = batchRequest.execute();
@ -163,26 +163,8 @@ public class ElectrumServer {
}
}
public void getHistory(Wallet.Node node) throws ServerException {
getHistory(getScriptHash(node));
}
public void getHistory(String scriptHash) throws ServerException {
try {
JsonRpcClient client = new JsonRpcClient(getTransport());
List<ScriptHashTx> txList = client.onDemand(ELectrumXService.class).getHistory(scriptHash);
for(ScriptHashTx tx : txList) {
System.out.println(tx);
}
} catch (IllegalStateException e) {
throw new ServerException(e.getCause());
} catch (Exception e) {
throw new ServerException(e);
}
}
private String getScriptHash(Wallet.Node node) {
byte[] hash = Sha256Hash.hash(node.getOutputScript().getProgram());
private String getScriptHash(Wallet wallet, Wallet.Node node) {
byte[] hash = Sha256Hash.hash(wallet.getOutputScript(node).getProgram());
byte[] reversed = Utils.reverseBytes(hash);
return Utils.bytesToHex(reversed);
}

View file

@ -1,19 +1,35 @@
package com.sparrowwallet.sparrow.wallet;
import com.sparrowwallet.drongo.address.Address;
import com.sparrowwallet.drongo.protocol.Script;
import com.sparrowwallet.drongo.wallet.Wallet;
import java.util.stream.Collectors;
public class NodeEntry extends Entry {
private final Wallet wallet;
private final Wallet.Node node;
public NodeEntry(Wallet.Node node) {
super(node.getLabel(), node.getChildren().stream().map(NodeEntry::new).collect(Collectors.toList()));
public NodeEntry(Wallet wallet, Wallet.Node node) {
super(node.getLabel(), node.getChildren().stream().map(childNode -> new NodeEntry(wallet, childNode)).collect(Collectors.toList()));
this.wallet = wallet;
this.node = node;
labelProperty().addListener((observable, oldValue, newValue) -> node.setLabel(newValue));
}
public Address getAddress() {
return wallet.getAddress(node);
}
public Script getOutputScript() {
return wallet.getOutputScript(node);
}
public String getOutputDescriptor() {
return wallet.getOutputDescriptor(node);
}
@Override
public Long getAmount() {
//TODO: Iterate through TransactionEntries to calculate amount

View file

@ -65,7 +65,7 @@ public class ReceiveController extends WalletFormController implements Initializ
this.currentEntry = nodeEntry;
address.setText(nodeEntry.getNode().getAddress().toString());
address.setText(nodeEntry.getAddress().toString());
label.textProperty().bindBidirectional(nodeEntry.labelProperty());
@ -74,16 +74,16 @@ public class ReceiveController extends WalletFormController implements Initializ
//TODO: Find last used block height if available (red flag?)
lastUsed.setText("Unknown");
Image qrImage = getQrCode(nodeEntry.getNode().getAddress().toString());
Image qrImage = getQrCode(nodeEntry.getAddress().toString());
if(qrImage != null) {
qrCode.setImage(qrImage);
}
scriptPubKeyArea.clear();
appendScript(scriptPubKeyArea, nodeEntry.getNode().getOutputScript(), null, null);
appendScript(scriptPubKeyArea, nodeEntry.getOutputScript(), null, null);
outputDescriptor.clear();
outputDescriptor.appendText(nodeEntry.getNode().getOutputDescriptor());
outputDescriptor.appendText(nodeEntry.getOutputDescriptor());
}
private Image getQrCode(String address) {

View file

@ -51,7 +51,7 @@ public class WalletForm {
purposeEntry = optionalPurposeEntry.get();
} else {
Wallet.Node purposeNode = getWallet().getNode(keyPurpose);
purposeEntry = new NodeEntry(purposeNode);
purposeEntry = new NodeEntry(getWallet(), purposeNode);
accountEntries.add(purposeEntry);
}
@ -69,7 +69,7 @@ public class WalletForm {
}
}
NodeEntry freshEntry = new NodeEntry(freshNode);
NodeEntry freshEntry = new NodeEntry(getWallet(), freshNode);
rootEntry.getChildren().add(freshEntry);
return freshEntry;
}