Bitcoins

Bitcoin is an digital Payment System that is based on the difficulty to compute an Hash with an special bit pattern. Depending on the power used to calculate the hash the difficulty is increased. Till now the create of this system is not known.

Free Coins

Clients

Pools for Mining

Protocol

  • Used Hashes: SHA-256 , RIPEMD-160
  • Merkle Trees:
    hash(a) = sha256(sha256(a))
    hash(a) hash(b) hash(c)
    hash(hash(a)+hash(b)) hash(hash(c)+hash(c))
    hash(hash(hash(a)+hash(b))+hash(hash(c)+hash(c)))
  • Signatures: "Elliptic Curve Digital Signature Algorithm" (ECDSA) (Used: secp256k1 curve)
    y² = x³ + a*x + b
    secp256k1: Section(2.7.1) Strength(128) Size(256) RSA/DSA(3072) Koblitz
    p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F = 2^256-2^32-2^9-2^8-2^7-2^6-2^4-1
    a = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    b = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000007
    G = 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 (compressed Form)
    G = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8 (uncompressed)
    n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
    h = 01
    http://public.fh-wolfenbuettel.de/~gerndt/ecc-speidel.pdf
  • Public keys are given as 04 "x" "y" where x and y are 32byte big-endian integers representing the coordinates of a point on the curve.
    Signatures use DER encoding to pack the r and s components into a single byte stream.
  • Transaction: input(s) , input_signature(s) , recipient_address(s)
  • IF input >recipient than difference is fee for first who validates
  • Coinbase Transaction: no input
  • Addresses
    A bitcoin address is in fact the hash of a ECDSA public key, computed this way:
    Version = 1 byte of 0 (zero); on the test network, this is 1 byte of 111
    Key hash = Version concatenated with RIPEMD-160(SHA-256(public key))
    Checksum = 1st 4 bytes of SHA-256(SHA-256(Key hash))
    Bitcoin Address = Base58Encode(Key hash concatenated with Checksum)
    The Base58 encoding used is home made, and has some differences. Especially, leading zeroes are kept as single zeroes when conversion happens.