module Secp256k1::Bitcoin

Overview

Implements the Bitcoin address space for the Secp256k1 library.

Defined in:

bitcoin.cr

Class Method Summary

Class Method Detail

def self.address_from_private(priv : BigInt, version = "00", compressed = true) #

Generates a Bitcoin address from a private key.

Parameters:

  • priv (BigInt): the private key as number.
  • version (String): the version byte, default: "00" (Bitcoin).
  • compressed (Bool): indicator if address should be compressed or not, default: true (compressed).
Secp256k1::Bitcoin.address_from_private BigInt.new("53d77137b39427a35d8c4b187f532d3912e1e7135985e730633e1e3c1b87ce97", 16)
# => "1Q1zbmPZtS2chwxpviqz6qHgoM8UUuviGN"

[View source]
def self.address_from_public_key(pub : String, version = "00") #

Generates a Bitcoin address for any public key, compressed or uncompressed.

Parameters:

  • pub (String): the public key, compressed or uncompressed.
  • version (String): the version byte, default: "00" (Bitcoin).
Secp256k1::Bitcoin.address_from_public_key "03e097fc69f0b92f711620511c07fefdd648e469df46b1e4385a00a1786f6bc55b"
# => "1Q1zbmPZtS2chwxpviqz6qHgoM8UUuviGN"

Note, compressed public keys generate compressed addresses, whereas uncompressed keys generate uncompressed addresses.

Raises if the public key is malformed.


[View source]
def self.address_from_public_point(p : Secp256k1::ECPoint, version = "00", compressed = true) #

Generates a Bitcoin address from an public key as ECPoint.

Parameters:

  • p (ECPoint): the public key as point with x and y coordinates.
  • version (String): the version byte, default: "00" (Bitcoin).
  • compressed (Bool): indicator if address should be compressed or not, default: true (compressed).

See .address_from_public_key and ECPoint for usage instructions.


[View source]
def self.address_from_wif(wif : String) #

Gets a Bitcoin address from a Base-58 Wallet-Import Format (WIF).

Parameters:

  • wif (String): the Base-58 Wallet-Import Format (WIF).
Secp256k1::Bitcoin.address_from_wif "5JTDCfWtwBsA26NcrJJdb7xvBPvJY9jKTdppXckp3SVTrBe6pg1"
# => "1Gbxhju13BpwpzzFRgNr2TDYCRTg94kgFC"

Raises if Wallet-Import Format (WIF) is invalid.


[View source]
def self.is_wif_compressed?(wif : String) #

Checks if it's a compressed or an uncompressed Wallet-Import Format (WIF).

Parameters:

  • wif (String): the Base-58 Wallet-Import Format (WIF).
Secp256k1::Bitcoin.is_wif_compressed? "5JTDCfWtwBsA26NcrJJdb7xvBPvJY9jKTdppXckp3SVTrBe6pg1"
# => false

Returns true if the key is compressed.

Raises if Wallet-Import Format (WIF) is invalid.


[View source]
def self.mini_is_valid?(m : String) #

Validates wether a mini-private key has a correct checksum and formatting.

Parameters:

  • m (String): the mini-private key.
Secp256k1::Bitcoin.mini_is_valid? "S7qq5k98DAvee6mtQgpg4xAJatT9mR"
# => true

Returns true if the key contains a valid checksum and is formatted correctly.


[View source]
def self.new_mini_private_key #

Generates a new mini-private key (30 characters length, Base-56 encoded).

Secp256k1::Bitcoin.new_mini_private_key
# => S7qq5k98DAvee6mtQgpg4xAJatT9mR

[View source]
def self.private_key_from_mini(m : String) #

Gets a private key from a mini-private key if the key is valid.

Parameters:

  • m (String): the mini-private key.
Secp256k1::Bitcoin.private_key_from_mini "S7qq5k98DAvee6mtQgpg4xAJatT9mR"
# => "53d77137b39427a35d8c4b187f532d3912e1e7135985e730633e1e3c1b87ce97"

Raises if the key is invalid.


[View source]
def self.private_key_from_wif(wif : String) #

Gets a private key from a Base-58 Wallet-Import Format (WIF).

Parameters:

  • wif (String): the Base-58 Wallet-Import Format (WIF).
Secp256k1::Bitcoin.private_key_from_wif "Kz2grUzxEAxNopiREbNpVbjoitAGQVXnUZY4n8pNdmWdVqub99qu"
# => "53d77137b39427a35d8c4b187f532d3912e1e7135985e730633e1e3c1b87ce97"

Raises if Wallet-Import Format (WIF) is invalid.


[View source]
def self.version_byte_from_wif(wif : String) #

Gets the version byte from a Base-58 Wallet-Import Format (WIF).

Parameters:

  • wif (String): the Base-58 Wallet-Import Format (WIF).
Secp256k1::Bitcoin.version_byte_from_wif "5JTDCfWtwBsA26NcrJJdb7xvBPvJY9jKTdppXckp3SVTrBe6pg1"
# => "80"

Raises if Wallet-Import Format (WIF) is invalid.


[View source]
def self.wif_from_private(k : BigInt, version = "80", compr = "") #

Gets a Base-58 Wallet-Import Format (WIF) from a private key.

Parameters:

  • k (BigInt): the private key.
  • version (String): the version byte, default: "80" (Bitcoin).
  • compr (String): the compression byte, default: "" (uncompressed).
Secp256k1::Bitcoin.wif_from_private BigInt.new("53d77137b39427a35d8c4b187f532d3912e1e7135985e730633e1e3c1b87ce97", 16)
# => "5JTDCfWtwBsA26NcrJJdb7xvBPvJY9jKTdppXckp3SVTrBe6pg1"

Note, the compression byte compr is either empty "" for uncompressed keys or "01" for compressed keys. See also .wif_from_private_compressed and .wif_from_private_uncompressed.


[View source]
def self.wif_from_private_compressed(k : BigInt, version = "80") #

Gets a compressed Base-58 Wallet-Import Format (WIF) from a private key.

Parameters:

  • k (BigInt): the private key
  • version (String): the version byte, default: "80" (Bitcoin)
Secp256k1::Bitcoin.wif_from_private_compressed BigInt.new("53d77137b39427a35d8c4b187f532d3912e1e7135985e730633e1e3c1b87ce97", 16)
# => "Kz2grUzxEAxNopiREbNpVbjoitAGQVXnUZY4n8pNdmWdVqub99qu"

[View source]
def self.wif_from_private_uncompressed(k : BigInt, version = "80") #

Gets an uncompressed Base-58 Wallet-Import Format (WIF) from a private key.

Parameters:

  • k (BigInt): the private key
  • version (String): the version byte, default: "80" (Bitcoin)
Secp256k1::Bitcoin.wif_from_private_uncompressed BigInt.new("53d77137b39427a35d8c4b187f532d3912e1e7135985e730633e1e3c1b87ce97", 16)
# => "5JTDCfWtwBsA26NcrJJdb7xvBPvJY9jKTdppXckp3SVTrBe6pg1"

[View source]
def self.wif_is_valid?(wif : String) #

Validates wether a Wallet-Import Format (WIF) has a correct checksum and formatting.

Parameters:

  • wif (String): the Base-58 Wallet-Import Format (WIF).
Secp256k1::Bitcoin.wif_is_valid? "5JTDCfWtwBsA26NcrJJdb7xvBPvJY9jKTdppXckp3SVTrBe6pg1"
# => true

Returns true if the key contains a valid checksum and is formatted correctly.


[View source]