mirror of
https://github.com/sparrowwallet/drongo.git
synced 2025-11-05 11:56:38 +00:00
add support for block parsing
This commit is contained in:
parent
23f2b9197a
commit
d30cc4432c
4 changed files with 89 additions and 0 deletions
45
src/main/java/com/sparrowwallet/drongo/protocol/Block.java
Normal file
45
src/main/java/com/sparrowwallet/drongo/protocol/Block.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
Loading…
Reference in a new issue