add support for block parsing

This commit is contained in:
Craig Raw 2025-08-16 13:02:17 +02:00
parent 23f2b9197a
commit d30cc4432c
4 changed files with 89 additions and 0 deletions

View file

@ -0,0 +1,45 @@
package com.sparrowwallet.drongo.protocol;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Block extends Message {
private BlockHeader blockHeader;
private Sha256Hash hash;
private List<Transaction> transactions;
public Block(byte[] payload) {
super(payload, 0);
}
public void parse() {
blockHeader = new BlockHeader(payload, cursor);
cursor += blockHeader.getMessageSize();
hash = Sha256Hash.wrapReversed(Sha256Hash.hashTwice(payload, offset, cursor - offset));
if(cursor != payload.length) {
int numTransactions = (int)readVarInt();
transactions = new ArrayList<>(numTransactions);
for(int i = 0; i < numTransactions; i++) {
Transaction tx = new Transaction(payload, cursor);
transactions.add(tx);
cursor += tx.getMessageSize();
}
} else {
transactions = Collections.emptyList();
}
}
public BlockHeader getBlockHeader() {
return blockHeader;
}
public Sha256Hash getHash() {
return hash;
}
public List<Transaction> getTransactions() {
return transactions;
}
}

View file

@ -19,6 +19,10 @@ public class BlockHeader extends Message {
super(rawheader, 0); super(rawheader, 0);
} }
public BlockHeader(byte[] blockdata, int offset) {
super(blockdata, offset);
}
public BlockHeader(long version, Sha256Hash prevBlockHash, Sha256Hash merkleRoot, Sha256Hash witnessRoot, long time, long difficultyTarget, long nonce) { public BlockHeader(long version, Sha256Hash prevBlockHash, Sha256Hash merkleRoot, Sha256Hash witnessRoot, long time, long difficultyTarget, long nonce) {
this.version = version; this.version = version;
this.prevBlockHash = prevBlockHash; this.prevBlockHash = prevBlockHash;

View file

@ -53,6 +53,10 @@ public class Transaction extends ChildMessage {
super(rawtx, 0); super(rawtx, 0);
} }
public Transaction(byte[] blockdata, int offset) {
super(blockdata, offset);
}
public long getVersion() { public long getVersion() {
return version; return version;
} }

File diff suppressed because one or more lines are too long