Bitcoin Forum
May 21, 2024, 06:21:35 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: [1]
1  Bitcoin / Development & Technical Discussion / private key to public key generation bitcoin vb.net gives unknown error on: February 25, 2020, 10:08:26 AM
I'm trying to use secp256k1 eliptic curve to get the public key from private key but it gives me an unknown error error

Quote
Private Sub Button13_Click(sender As Object, e As EventArgs) Handles Button13.Click
    Dim private_key = "68040878110175628235481263019639686"
    'public key should be Nr6MbFUfMovKCX4vd5YpQnRYsN4rq6pNPEEBKmicAEwwuYLpJrt5LsRvfvR2G8pJ5rMchEMWDYJ7rdY GY7PjxHEa
    Dim public_key As String


    Using eliptic As New ECDsaCng()
        eliptic.HashAlgorithm = CngAlgorithm.ECDsaP256

        Dim data() As Byte = Encoding.UTF8.GetBytes(private_key)
        Dim key As Byte() = eliptic.SignData(data)
        public_key = key.ToString
    End Using

    TextBox15.Text = public_key
End Sub
2  Bitcoin / Development & Technical Discussion / How to generate the hash of public key in Bitcoin on: February 24, 2020, 08:14:35 AM
I'm trying to hash the public key with SHA256 and then ripemed160 and get the hash. but it gives the error "System.ArgumentOutOfRangeException: 'Index and length must refer to a location within the string. Parameter name: length'" I think it's because of the odd number of characters of the public key.

Public key: 2b4632d08485ff1df2db55b9dafd23347d1c47a457072a1e87be26896549a8737

Hash should be: 93ce48570b55c42c2af816aeaba06cfee1224fae

Code:
Imports System.Security.Cryptography
Imports System.Text
Imports System.Globalization
Imports System.Numerics

Private Function HexStringToByteArray(ByVal shex As String) As Byte()
    Dim B As Byte() = Enumerable.Range(0, shex.Length).Where(Function(x) x Mod 2 = 0).[Select](Function(x) Convert.ToByte(shex.Substring(x, 2), 16)).ToArray()
    Return Enumerable.Range(0, shex.Length).Where(Function(x) x Mod 2 = 0).[Select](Function(x) Convert.ToByte(shex.Substring(x, 2), 16)).ToArray()
End Function


Private Sub Button12_Click(sender As Object, e As EventArgs) Handles Button12.Click

Dim public_key as String = "2b4632d08485ff1df2db55b9dafd23347d1c47a457072a1e87be26896549a8737"
   Dim pubkey_hash As String

    Dim sha256 As SHA256 = SHA256Managed.Create()
      Dim bytes As Byte() = HexStringToByteArray(public_key)
    Dim hash As Byte() = sha256.ComputeHash(bytes)
    Dim stringBuilder1 As New StringBuilder()

    For i As Integer = 0 To hash.Length - 1
        stringBuilder1.Append(hash(i).ToString("X2"))
    Next

    bytes = HexStringToByteArray(stringBuilder1.ToString())

    Dim ripemd160 As RIPEMD160 = RIPEMD160Managed.Create()
    Dim hash_160 As Byte() = ripemd160.ComputeHash(bytes)

    Dim stringBuilder2 As New StringBuilder()

    For i As Integer = 0 To hash_160.Length - 1
        stringBuilder2.Append(hash_160(i).ToString("X2"))
    Next

    Dim arr() As Char = stringBuilder2.ToString

    pubkey_hash = arr.tostring
    TextBox14.Text = pubkey_hash


   End Sub


what I want to achieve is : bitcoin Public key --> SHA256 --> RIPEMD160 = final hash
3  Bitcoin / Development & Technical Discussion / Generating the candidate block and merkle root on: February 19, 2020, 05:18:13 AM
I'm trying to develop a solo miner for bitcoin, now I'm in the stage of generating the merkle root. To make the coinbase transaction I looked at https://bitcoin.org/en/developer-reference#coinbase , but I don't understand the structure etc

as I understand, to generate the merkle root, the transactions should be taken from mempool and should be hashed plus the coinbase transaction should be placed as the first transaction when hashing.

the above link states he coinbase transaction should be as follows, this is the candidate block structure right?
Code:
hash (null)
index (UINT32_MAX)
script bytes
height
coinbase script
sequence

so to hash it as a candidate block what should I do? concatenate all the information and double SHA256 it and convert to little endian?

Code:
(hash (null) & index (UINT32_MAX) & script bytes & height & coinbase script & sequence) --> convert to little endian? 


and where do I place my public wallet address? inside the "script bytes"? Can someone shed some light here?

Code:
script bytes --> Wallet address: 18ib9rJq7LiNZTSbGL7fHdJmZgWW6QEJCD

 
Pages: [1]
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!