mirror of
https://github.com/sparrowwallet/drongo.git
synced 2024-12-26 18:16:45 +00:00
compare txes better, clear nodes functionality
This commit is contained in:
parent
81378b28b2
commit
18036268e5
2 changed files with 67 additions and 0 deletions
|
@ -3,7 +3,11 @@ package com.sparrowwallet.drongo.wallet;
|
|||
import com.sparrowwallet.drongo.protocol.Sha256Hash;
|
||||
import com.sparrowwallet.drongo.protocol.Transaction;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class BlockTransaction extends BlockTransactionHash implements Comparable<BlockTransaction> {
|
||||
private final Transaction transaction;
|
||||
|
@ -29,6 +33,62 @@ public class BlockTransaction extends BlockTransactionHash implements Comparable
|
|||
|
||||
@Override
|
||||
public int compareTo(BlockTransaction blockchainTransaction) {
|
||||
if(getHeight() != blockchainTransaction.getHeight()) {
|
||||
return getHeight() - blockchainTransaction.getHeight();
|
||||
}
|
||||
|
||||
if(getReferencedOutpoints(this).removeAll(getOutputs(blockchainTransaction))) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if(getReferencedOutpoints(blockchainTransaction).removeAll(getOutputs(this))) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return super.compareTo(blockchainTransaction);
|
||||
}
|
||||
|
||||
private static List<HashIndex> getReferencedOutpoints(BlockTransaction blockchainTransaction) {
|
||||
if(blockchainTransaction.getTransaction() == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
return blockchainTransaction.getTransaction().getInputs().stream()
|
||||
.map(txInput -> new HashIndex(txInput.getOutpoint().getHash(), (int)txInput.getOutpoint().getIndex()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private static List<HashIndex> getOutputs(BlockTransaction blockchainTransaction) {
|
||||
if(blockchainTransaction.getTransaction() == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
return blockchainTransaction.getTransaction().getOutputs().stream()
|
||||
.map(txOutput -> new HashIndex(blockchainTransaction.getHash(), txOutput.getIndex()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private static class HashIndex {
|
||||
public Sha256Hash hash;
|
||||
public int index;
|
||||
|
||||
public HashIndex(Sha256Hash hash, int index) {
|
||||
this.hash = hash;
|
||||
this.index = index;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
HashIndex hashIndex = (HashIndex) o;
|
||||
return index == hashIndex.index &&
|
||||
hash.equals(hashIndex.hash);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(hash, index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -199,12 +199,19 @@ public class Wallet {
|
|||
}
|
||||
}
|
||||
|
||||
public void clearNodes() {
|
||||
purposeNodes.clear();
|
||||
transactions.clear();
|
||||
storedBlockHeight = 0;
|
||||
}
|
||||
|
||||
public void clearHistory() {
|
||||
for(WalletNode purposeNode : purposeNodes) {
|
||||
purposeNode.clearHistory();
|
||||
}
|
||||
|
||||
transactions.clear();
|
||||
storedBlockHeight = 0;
|
||||
}
|
||||
|
||||
public boolean isValid() {
|
||||
|
|
Loading…
Reference in a new issue