mirror of
https://github.com/sparrowwallet/drongo.git
synced 2024-12-26 01:56:44 +00:00
support reordering
This commit is contained in:
parent
0815484c4c
commit
0bb5b75be5
3 changed files with 50 additions and 4 deletions
|
@ -39,8 +39,8 @@ public class Transaction extends ChildMessage {
|
||||||
private Sha256Hash cachedTxId;
|
private Sha256Hash cachedTxId;
|
||||||
private Sha256Hash cachedWTxId;
|
private Sha256Hash cachedWTxId;
|
||||||
|
|
||||||
private ArrayList<TransactionInput> inputs;
|
private List<TransactionInput> inputs;
|
||||||
private ArrayList<TransactionOutput> outputs;
|
private List<TransactionOutput> outputs;
|
||||||
|
|
||||||
public Transaction() {
|
public Transaction() {
|
||||||
version = 1;
|
version = 1;
|
||||||
|
@ -731,4 +731,24 @@ public class Transaction extends ChildMessage {
|
||||||
outputStream.write(new VarInt(bytes.length).encode());
|
outputStream.write(new VarInt(bytes.length).encode());
|
||||||
outputStream.write(bytes);
|
outputStream.write(bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void moveInput(int fromIndex, int toIndex) {
|
||||||
|
moveItem(inputs, fromIndex, toIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void moveOutput(int fromIndex, int toIndex) {
|
||||||
|
moveItem(outputs, fromIndex, toIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T> void moveItem(List<T> list, int fromIndex, int toIndex) {
|
||||||
|
if(fromIndex < 0 || fromIndex >= list.size() || toIndex < 0 || toIndex >= list.size()) {
|
||||||
|
throw new IllegalArgumentException("Invalid indices [" + fromIndex + ", " + toIndex + "] provided to list of size " + list.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
T item = list.remove(fromIndex);
|
||||||
|
list.add(toIndex, item);
|
||||||
|
|
||||||
|
cachedTxId = null;
|
||||||
|
cachedWTxId = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -594,6 +594,28 @@ public class PSBT {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void moveInput(int fromIndex, int toIndex) {
|
||||||
|
moveItem(psbtInputs, fromIndex, toIndex);
|
||||||
|
transaction.moveInput(fromIndex, toIndex);
|
||||||
|
for(int i = 0; i < psbtInputs.size(); i++) {
|
||||||
|
psbtInputs.get(i).setIndex(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void moveOutput(int fromIndex, int toIndex) {
|
||||||
|
moveItem(psbtOutputs, fromIndex, toIndex);
|
||||||
|
transaction.moveOutput(fromIndex, toIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T> void moveItem(List<T> list, int fromIndex, int toIndex) {
|
||||||
|
if(fromIndex < 0 || fromIndex >= list.size() || toIndex < 0 || toIndex >= list.size()) {
|
||||||
|
throw new IllegalArgumentException("Invalid indices [" + fromIndex + ", " + toIndex + "] provided to list of size " + list.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
T item = list.remove(fromIndex);
|
||||||
|
list.add(toIndex, item);
|
||||||
|
}
|
||||||
|
|
||||||
public List<PSBTInput> getPsbtInputs() {
|
public List<PSBTInput> getPsbtInputs() {
|
||||||
return psbtInputs;
|
return psbtInputs;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@ public class PSBTInput {
|
||||||
private ECKey tapInternalKey;
|
private ECKey tapInternalKey;
|
||||||
|
|
||||||
private final Transaction transaction;
|
private final Transaction transaction;
|
||||||
private final int index;
|
private int index;
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(PSBTInput.class);
|
private static final Logger log = LoggerFactory.getLogger(PSBTInput.class);
|
||||||
|
|
||||||
|
@ -680,10 +680,14 @@ public class PSBTInput {
|
||||||
}
|
}
|
||||||
|
|
||||||
public TransactionOutput getUtxo() {
|
public TransactionOutput getUtxo() {
|
||||||
int vout = (int)transaction.getInputs().get(index).getOutpoint().getIndex();
|
int vout = (int)getInput().getOutpoint().getIndex();
|
||||||
return getWitnessUtxo() != null ? getWitnessUtxo() : (getNonWitnessUtxo() != null ? getNonWitnessUtxo().getOutputs().get(vout) : null);
|
return getWitnessUtxo() != null ? getWitnessUtxo() : (getNonWitnessUtxo() != null ? getNonWitnessUtxo().getOutputs().get(vout) : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setIndex(int index) {
|
||||||
|
this.index = index;
|
||||||
|
}
|
||||||
|
|
||||||
public void clearNonFinalFields() {
|
public void clearNonFinalFields() {
|
||||||
partialSignatures.clear();
|
partialSignatures.clear();
|
||||||
sigHash = null;
|
sigHash = null;
|
||||||
|
|
Loading…
Reference in a new issue