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);
|
||||
}
|
||||
|
||||
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) {
|
||||
this.version = version;
|
||||
this.prevBlockHash = prevBlockHash;
|
||||
|
|
|
|||
|
|
@ -53,6 +53,10 @@ public class Transaction extends ChildMessage {
|
|||
super(rawtx, 0);
|
||||
}
|
||||
|
||||
public Transaction(byte[] blockdata, int offset) {
|
||||
super(blockdata, offset);
|
||||
}
|
||||
|
||||
public long getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue