0
I am facing a stupid problem. I am trying to read bitcoin/blocks/index leveldb using plyvel. I've set up a regtest and i know there is a block with the hash :
27ce8199dee22f96e4f392dec29ef207fcd8a3c9e43b7d58cb40a5ba01af674b
I am trying to query it using plyvel.
Note that I already read the topics :
How does Bitcoin read from/write to LevelDB
What are the keys used in the blockchain levelDB (ie what are the key:value pairs)?
https://en.bitcoin.it/wiki/Protocol_documentation
Then, I know I have to swap the endianness so it becomes :
MYVAR = "4b67af01baa540cb587d3be4c9a3d8fc07f29ec2de92f3e4962fe2de9981ce27"
Thus, I should query something like :
b + (byte) MYVAR
However I do not get how. I guess I missunderstand something in encoding. I tried :
db.get(b'b4b67af01baa540cb587d3be4c9a3d8fc07f29ec2de92f3e4962fe2de9981ce27')
db.get(b'b'+b'4b67af01baa540cb587d3be4c9a3d8fc07f29ec2de92f3e4962fe2de9981ce27')
..
Then, I opened the bitcoin/blocks/index leveldb using a gui explorer and I noticed the key for this block is :
\x62\x4b\x67\xaf\x01\xba\xa5\x40\xcb\x58\x7d\x3b\xe4\xc9\xa3\xd8\xfc\x07\xf2\x9e\xc2\xde\x92\xf3\xe4\x96\x2f\xe2\xde\x99\x81\xce\x27
which is \x62 corresponding to the "b" + the hash with \x (escaping caracter ? I know here is my misunderstanding on hex encoding)
and obviously
db.get(b'\x62\x4b\x67\xaf\x01\xba\xa5\x40\xcb\x58\x7d\x3b\xe4\xc9\xa3\xd8\xfc\x07\xf2\x9e\xc2\xde\x92\xf3\xe4\x96\x2f\xe2\xde\x99\x81\xce\x27')
perfectly works
I also tried these methods :
https://stackoverflow.com/questions/5649407/hexadecimal-string-to-byte-array-in-python
No one of them works and I really don't get why :
bytes.fromhex(hash)
bytearray.fromhex(hash)
Thank you in advance
Thank you for your reply, and I will do so. However, what I am trying to do is to reference orphans blocks. I'm not sure I would be able to see these orphans blocks through the API calls.. I mean if I know block O is an orphan block, I will be able to getblock O. But if I am looking for orphan blocks, not knowing their hash, I will be probably face some problems Iterating over all the keys of the leveldb would allow me to distinguish orphan block and "main" blocks. – Elerir – 2018-12-04T10:40:57.557
I know i shouldn't answer to my own question but I found away to do so : I'm getting all the keys using db.iterator() And then using binascii.hexlify / unhexlify I've solved my problems. My workspace was a bit messy and that's why I didn't even realize that simple trick works (I'm sure I had tried) – Elerir – 2018-12-09T11:16:37.377