mirror of
https://github.com/sparrowwallet/drongo.git
synced 2024-11-02 18:26:43 +00:00
transaction history support
This commit is contained in:
parent
11978e1f48
commit
a32410b538
4 changed files with 86 additions and 7 deletions
|
@ -68,6 +68,8 @@ jar {
|
|||
attributes "Main-Class": "com.sparrowwallet.drongo.Main"
|
||||
}
|
||||
|
||||
exclude('logback.xml')
|
||||
|
||||
archiveBaseName = 'drongo'
|
||||
archiveVersion = '0.1'
|
||||
}
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
package com.sparrowwallet.drongo.wallet;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class TransactionReference implements Comparable<TransactionReference> {
|
||||
private final String transactionId;
|
||||
private final Integer height;
|
||||
private final Long fee;
|
||||
|
||||
public TransactionReference(String transactionId) {
|
||||
this(transactionId, 0, 0L);
|
||||
}
|
||||
|
||||
public TransactionReference(String transactionId, Integer height) {
|
||||
this(transactionId, height, 0L);
|
||||
}
|
||||
|
||||
public TransactionReference(String transactionId, Integer height, Long fee) {
|
||||
this.transactionId = transactionId;
|
||||
this.height = height;
|
||||
this.fee = fee;
|
||||
}
|
||||
|
||||
public String getTransactionId() {
|
||||
return transactionId;
|
||||
}
|
||||
|
||||
public Integer getHeight() {
|
||||
return height;
|
||||
}
|
||||
|
||||
public Long getFee() {
|
||||
return fee;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
TransactionReference that = (TransactionReference) o;
|
||||
return transactionId.equals(that.transactionId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(transactionId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(TransactionReference reference) {
|
||||
return height - reference.height;
|
||||
}
|
||||
|
||||
public TransactionReference copy() {
|
||||
return new TransactionReference(transactionId, height, fee);
|
||||
}
|
||||
}
|
|
@ -11,6 +11,7 @@ import com.sparrowwallet.drongo.policy.Policy;
|
|||
import com.sparrowwallet.drongo.policy.PolicyType;
|
||||
import com.sparrowwallet.drongo.protocol.Script;
|
||||
import com.sparrowwallet.drongo.protocol.ScriptType;
|
||||
import com.sparrowwallet.drongo.protocol.Transaction;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
@ -23,7 +24,8 @@ public class Wallet {
|
|||
private ScriptType scriptType;
|
||||
private Policy defaultPolicy;
|
||||
private List<Keystore> keystores = new ArrayList<>();
|
||||
private final Set<Node> accountNodes = new TreeSet<>();
|
||||
private final Set<Node> purposeNodes = new TreeSet<>();
|
||||
private final Map<String, Transaction> transactions = new HashMap<>();
|
||||
|
||||
public Wallet() {
|
||||
}
|
||||
|
@ -80,16 +82,20 @@ public class Wallet {
|
|||
this.keystores = keystores;
|
||||
}
|
||||
|
||||
private Set<Node> getAccountNodes() {
|
||||
return accountNodes;
|
||||
private Set<Node> getPurposeNodes() {
|
||||
return purposeNodes;
|
||||
}
|
||||
|
||||
public Map<String, Transaction> getTransactions() {
|
||||
return transactions;
|
||||
}
|
||||
|
||||
public Node getNode(KeyPurpose keyPurpose) {
|
||||
Node purposeNode;
|
||||
Optional<Node> optionalPurposeNode = accountNodes.stream().filter(node -> node.getKeyPurpose().equals(keyPurpose)).findFirst();
|
||||
Optional<Node> optionalPurposeNode = purposeNodes.stream().filter(node -> node.getKeyPurpose().equals(keyPurpose)).findFirst();
|
||||
if(optionalPurposeNode.isEmpty()) {
|
||||
purposeNode = new Node(keyPurpose);
|
||||
accountNodes.add(purposeNode);
|
||||
purposeNodes.add(purposeNode);
|
||||
} else {
|
||||
purposeNode = optionalPurposeNode.get();
|
||||
}
|
||||
|
@ -272,9 +278,9 @@ public class Wallet {
|
|||
for(Keystore keystore : keystores) {
|
||||
copy.getKeystores().add(keystore.copy());
|
||||
}
|
||||
for(Wallet.Node node : accountNodes) {
|
||||
for(Wallet.Node node : purposeNodes) {
|
||||
Node nodeCopy = copy.copyNode(node);
|
||||
copy.getAccountNodes().add(nodeCopy);
|
||||
copy.getPurposeNodes().add(nodeCopy);
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
|
@ -286,6 +292,9 @@ public class Wallet {
|
|||
for(Node child : node.getChildren()) {
|
||||
copy.getChildren().add(copyNode(child));
|
||||
}
|
||||
for(TransactionReference reference : node.getHistory()) {
|
||||
copy.getHistory().add(reference.copy());
|
||||
}
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
@ -349,6 +358,7 @@ public class Wallet {
|
|||
private String label;
|
||||
private Long amount;
|
||||
private Set<Node> children = new TreeSet<>();
|
||||
private Set<TransactionReference> history = new TreeSet<>();
|
||||
|
||||
private transient KeyPurpose keyPurpose;
|
||||
private transient int index = -1;
|
||||
|
@ -431,6 +441,14 @@ public class Wallet {
|
|||
this.children = children;
|
||||
}
|
||||
|
||||
public Set<TransactionReference> getHistory() {
|
||||
return history;
|
||||
}
|
||||
|
||||
public void setHistory(Set<TransactionReference> history) {
|
||||
this.history = history;
|
||||
}
|
||||
|
||||
public Address getAddress() {
|
||||
return Wallet.this.getAddress(keyPurpose, index);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@ open module com.sparrowwallet.drongo {
|
|||
requires org.bouncycastle.provider;
|
||||
requires de.mkammerer.argon2;
|
||||
requires slf4j.api;
|
||||
requires json.simple;
|
||||
requires jeromq;
|
||||
exports com.sparrowwallet.drongo;
|
||||
exports com.sparrowwallet.drongo.psbt;
|
||||
exports com.sparrowwallet.drongo.protocol;
|
||||
|
|
Loading…
Reference in a new issue