I wanted to convert the following bitcoin mining python code to VB.net (2012) and I tried to convert it's functionality, but it throws some errors and I'm stuck as I even can't get the resulting value of "header"
variable.
and the final hash result should be 0000000000000000e067a478024addfecdc93628978aa52d91fabd4292982a50
, but I'm no where near that.
why this produces errors, converting from hex to byte is not the correct method?
in python L
is used to format it to long
right?, so what does the <L
& <LLL
in the python code do? and is this ::-1
used to prevent overflow when reading the hex string?
and, in exp = bits >> 24
what does it do, bitwise operations?
import hashlib, struct
ver = 2
prev_block = "000000000000000117c80378b8da0e33559b5997f2ad55e2f7d18ec1975b9717"
mrkl_root = "871714dcbae6c8193a2bb9b2a69fe1c0440399f38d94b3a0f1b447275a29978a"
time_ = 0x53058b35 # 2014-02-20 04:57:25
bits = 0x19015f53
# https://en.bitcoin.it/wiki/Difficulty
exp = bits >> 24
mant = bits & 0xffffff
target_hexstr = '%064x' % (mant * (1<<(8*(exp - 3))))
target_str = target_hexstr.decode('hex')
nonce = 0
while nonce < 0x100000000:
header = ( struct.pack("<L", ver) + prev_block.decode('hex')[::-1] +
mrkl_root.decode('hex')[::-1] + struct.pack("<LLL", time_, bits, nonce))
hash = hashlib.sha256(hashlib.sha256(header).digest()).digest()
print nonce, hash[::-1].encode('hex')
if hash[::-1] < target_str:
print 'success'
break
nonce += 1
The VB.NET code I've been coding up until now is,
Public Class Form1
Dim version As Long = 0
Dim time As Integer
Dim pblock As Byte
Dim mklroot As Byte
Dim header As String
Dim nonce As Integer = 856192328
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Textbox1.Text = "2"
Textbox2.Text = "000000000000000117c80378b8da0e33559b5997f2ad55e2f7d18ec1975b9717"
Textbox3.Text = "871714dcbae6c8193a2bb9b2a69fe1c0440399f38d94b3a0f1b447275a29978a"
Textbox4.Text = "0x53058b35" '2014-02-20 04:57:25
Textbox5.Text = "0x19015f53"
Dim n As Int32 = T2.Text.Length - 1
version = CLng(Textbox1.Text)
'pblock = CByte(Textbox2.Text)
pblock = Convert.ToByte(Convert.ToInt32(Textbox2.Text, 16))
mklroot = Convert.ToByte(Convert.ToInt32(Textbox3.Text, 16))
time = CInt(Textbox4.Text)
header = version & pblock & mklroot & time & nonce
Textbox6.Text = header
End Sub
End Class