mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-01-17 19:03:42 +01:00
elements: Implement block parsing for elements block headers
Since the difference between non-elements and elements block headers is just the middle 2 fields, I split the old parsing code so I could add the middle part. Signed-off-by: Christian Decker <decker.christian@gmail.com>
This commit is contained in:
parent
a300dea7e6
commit
4553b5c2f2
@ -26,7 +26,28 @@ bitcoin_block_from_hex(const tal_t *ctx, const struct chainparams *chainparams,
|
||||
if (!hex_decode(hex, hexlen, linear_tx, len))
|
||||
return tal_free(b);
|
||||
|
||||
pull(&p, &len, &b->hdr, sizeof(b->hdr));
|
||||
b->hdr.version = pull_le32(&p, &len);
|
||||
pull(&p, &len, &b->hdr.prev_hash, sizeof(b->hdr.prev_hash));
|
||||
pull(&p, &len, &b->hdr.merkle_hash, sizeof(b->hdr.merkle_hash));
|
||||
b->hdr.timestamp = pull_le32(&p, &len);
|
||||
|
||||
if (is_elements) {
|
||||
b->elements_hdr = tal(b, struct elements_block_hdr);
|
||||
b->elements_hdr->block_height = pull_le32(&p, &len);
|
||||
|
||||
size_t challenge_len = pull_varint(&p, &len);
|
||||
b->elements_hdr->proof.challenge = tal_arr(b->elements_hdr, u8, challenge_len);
|
||||
pull(&p, &len, b->elements_hdr->proof.challenge, challenge_len);
|
||||
|
||||
size_t solution_len = pull_varint(&p, &len);
|
||||
b->elements_hdr->proof.solution = tal_arr(b->elements_hdr, u8, solution_len);
|
||||
pull(&p, &len, b->elements_hdr->proof.solution, solution_len);
|
||||
|
||||
} else {
|
||||
b->hdr.target = pull_le32(&p, &len);
|
||||
b->hdr.nonce = pull_le32(&p, &len);
|
||||
}
|
||||
|
||||
num = pull_varint(&p, &len);
|
||||
b->tx = tal_arr(b, struct bitcoin_tx *, num);
|
||||
for (i = 0; i < num; i++) {
|
||||
|
@ -25,8 +25,19 @@ struct bitcoin_block_hdr {
|
||||
le32 nonce;
|
||||
};
|
||||
|
||||
struct elements_block_proof {
|
||||
u8 *challenge;
|
||||
u8 *solution;
|
||||
};
|
||||
|
||||
struct elements_block_hdr {
|
||||
u32 block_height;
|
||||
struct elements_block_proof proof;
|
||||
};
|
||||
|
||||
struct bitcoin_block {
|
||||
struct bitcoin_block_hdr hdr;
|
||||
struct elements_block_hdr *elements_hdr;
|
||||
/* tal_count shows now many */
|
||||
struct bitcoin_tx **tx;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user