Bitcoin: Difference between revisions

From Leo's Notes
This page was last edited on 23 September 2015, at 05:53.
No edit summary
removed old miner information
Line 1: Line 1:
https://bitcointalk.org/index.php?topic=62842.0
Bitcoin is a proof of work cryptocurrency.
 
https://docs.google.com/document/d/1Gw7YPYgMgNNU42skibULbJJUx_suP_CpjSEdSi8_z9U/edit
 
https://github.com/jgarzik/pushpool


This article covers some specific aspects of the Bitcoin protocol.


My Bitcoin Address is: 1HDp1gU3rgrRNKqrKorz8uWCpHUNdyGqXm
My Bitcoin Address is: 1HDp1gU3rgrRNKqrKorz8uWCpHUNdyGqXm


== Overview ==
Bitcoin is a decentralized protocol that operates in an untrusted peer to peer environment while still being a reliable method to exchange credits (bitcoins) between people.


== BFGMiner ==
For detailed information, read the Bitcoin paper or one of the many sites out there.
 
Do the same as CGMiner below.
 
I compiled it using:
CFLAGS="-O2 -Wall -march=native -I/export/package_build/misc/miner/2.6/SDK/include" LDFLAGS="-L/export/package_build/misc/miner/2.6/SDK/lib/x86_64" ./configure --prefix=/usr/local/miner --enable-scrypt --enable-opencl
 
You also need to install jansson-devel and uthash packages.
 
 
For the 6870, this is what I did:
<syntaxhighlight lang="bash">
#!/bin/bash
./bfgminer -T -D \
--scrypt \
-o stratum+tcp://136.159.7.241:9327 \
-u pickaxe \
-p password \
-S opencl:auto \
--shaders 1120 \
--intensity 9 \
--worksize 128 \
--vectors 4 \
--gpu-threads 1 \
--gpu-engine 950
 
</syntaxhighlight>
 
== CGMiner ==
 
=== AMD Cards ===
Download the AMD SDK and ADL SDK from:
* http://developer.amd.com/tools-and-sdks/heterogeneous-computing/amd-accelerated-parallel-processing-app-sdk/downloads/
* http://developer.amd.com/tools-and-sdks/graphics-development/display-library-adl-sdk/
 
For older cards or drivers, use the older SDK (such as 2.6). You will know that you need to downgrade when things don't work. For instance, if you get:
* Segmentation Faults
* High "HW:##" values (hardware faults) from cgminer
* Not actually mining anything or other unexpected behavior.
 
Extract the archives and copy:
* AMD-APP-SDK/include  -> /build_dir/include
* AMD-APP-SDK/lib/x86_64  -> /build_dir/lib
* ADL-SDK/include/*.h -> /build_dir/cgminer-3.3.4/ADL_SDK/
 
In the cgminer-3.3.4 source directory, run:
 
<syntaxhighlight lang="text" line start="1" enclose="div">
CFLAGS="-O2 -Wall -march=native -I/build_dir/include" LDFLAGS="-L/build_dir/lib" ./configure --prefix=/usr/local/miner --enable-scrypt
make
make install
</syntaxhighlight>
 
Extract icd-registration.tgz and put the files in /etc/OpenCL/vendors/.
 
Since I do not want to install the OpenCL libs, I had to copy them (from AMD-APP-SDK/lib/x86_64) over to /usr/local/miner/libs manually, and run cgminer with the LD_LIBRARY_PATH variable defined:
 
LD_LIBRARY_PATH=/usr/local/miner/lib ./cgminer -n
 
LD_LIBRARY_PATH=/usr/local/miner/lib ./cgminer -o http://p2pool.org:9332 -u 1HDp1gU3rgrRNKqrKorz8uWCpHUNdyGqXm -p password
 
 
=== NVidia Cards ===
 
You will need to install the NVidia drivers and the cuda toolkit.
 
Once done, compile cgminer with the following paths:
 
<syntaxhighlight lang="bash" line start="1" enclose="div">
CFLAGS="-O2 -Wall -march=native -I/usr/local/cuda/include" LDFLAGS="-L/usr/lib64/nvidia" ./configure --prefix=/usr/local/miner --enable-scrypt
</syntaxhighlight>
 
Note that there is no 'ADL' for Nvidia as that's specific to AMD.
 
== P2Pool ==
=== Get the source ===
git clone git://github.com/forrestv/p2pool.git
 
=== Install Dependencies ===
Either install the packages from <code>yum</code> or from source. The dependencies that are needed are:
# Twisted
## zope
# Argparse
 
From yum, run:
yum install python-argparse  python-twisted python-twisted-web
 
Since the Twisted library is somewhat old, you might want to build it from source by getting it from:
# https://pypi.python.org/pypi/Twisted#downloads
And also the dependency:
# https://pypi.python.org/pypi/zope.interface/4.0.5#downloads
 
Extract the archives, and run the setup.py script to build. (You will need python-devel and gcc to build)
 
 
=== Running P2Pool ===
Run run_p2pool.py
 
 
 
<syntaxhighlight lang="text" line start="1" enclose="div">
 
#############################################################
####
####  Installing mining Software on CEntOS or Fedora based distributions
#### 
####  Currently 2 GPU's working under Centos 6.4 w/SDK 12.7 & Driver 12.3
####  Currently 4 GPU's working under Centos 6.0 w/SDK 12.4 & Driver 11.4
####
####  testing to increase GPU's per motherboard
#### 
####  by:  Viceroy who accepts tips at  144RtpxYKbigosiqTyXNwzwtH6Z7s96xUx
####
#############################################################
####
#############################################################
####  Section 0 - Table of Contents
#############################################################
####
####  Section 0 Table of Contents
####  Section 1 Disclaimers
####  Section 2 Setting up CentOS
####  Section 3 Setting up Base Packages
####  Section 4         Installing ATI Development Kit (SDK) 
####  Section 5        Installing ATI Catalyst Drivers
####  Section 6        Testing ATI Catalyst Drivers
####
#############################################################
####  Section 1 - Disclaimers
#############################################################
####
####  I am not responsible for you using these instructions. 
####
####  If you choose to follow anything you read here that is
####  your problem, not mine.  I have written these instructions
####  for my personal use for my particular machine in an effort
####  to help me mine bitcoin.  If you follow these instructions
####  you may or may not have success, neither of which are any
####  concern of mine because you are the fool who followed me
####  off the bridge.  I did not push you.
####
####  I am proposing here to build a TOTALLY INSECURE HIGH
####  POWERED PASSWORD CRACKING MACHINE which MAY OR MAY NOT
####  BE LEGAL TO POSESS WHERE YOU LIVE.  If the policeman
####  puts you in jail because you followed what I wrote here
####  that is your fault, not mine.  You need to be aware of
####  local, national and international laws before you decide
####  to build a high powered password cracker.  If this gets
####  into the wrong hands and it starts a nuclear war and
####  and some hostile government decides to end the world
####  guess what... that's not my fault either. 
####
####  Be responsible, do no let Kim Jong Un get this machine
####  http://en.wikipedia.org/wiki/Kim_Jong-un
####
#############################################################
####  Section 2 - Setting up Centos
#############################################################
####
####  While at your windows desktop machine you need to
####  download the ISO from http://vault.centos.org/6.0/isos/
####
####  (I will be using the 64 bit OS from here on out)
####
####  The ISO can be burned to CD, DVD or USB
####
####  (I will burn the ISO to a 2GB+ USB flash drive)
####
####  Download the ISO from:
####  http://vault.centos.org/6.0/isos/x86_64/CentOS-6.0-x86_64-LiveCD.iso
####
####  Download and install Pendrivelinux Windows Software:
####  http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/
####
####  0. Plug in your flash drive and wait for it to register
####
####  1. start pendrivelinux universal USB installer
####  2. selects CentOS from "other distros alphabetically"
####  3. select the CentOS LIVE iso you downloaded
####    (CentOS-6.0-x86_64-LiveCD.iso)
####  4. select your drive letter and format the drive
####  5. safely remove flash drive and plug into new machine
####  6. boot up and install CentOS with the menus
####  7. after intallation log in as root (or su) and:
#### 7a. set up network so IP is fixed so you can log in remotely
#### 7b. turn on the SSH daemon so you can log in (service sshd start)
#### 7c. make sshd starts each time you boot (chkconfig sshd on)
####  8. now I like to go back to my nice desk and chair
####    8a. dowload and install putty so you can talk to your box
####    http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
####    using a new ssh connection, connect to your machine as the
####    user you set up during installation.  (it's a bad idea to log
####    in as root from a remote location).
####  9. while you are sitting there at your desk download and install
####    xming windows xwindow emulator from here:
####    http://sourceforge.net/project/downloading.php?group_id=156984&filename=Xming-6-9-0-31-setup.exe
####  10. modify yum
####
####  cut and paste one command at a time
####
 
####  become root user
su -
 
#### change directory to yum repo directory
cd /etc/yum.repos.d
 
#### move original file to backup
mv -f CentOS-Base.repo CentOS-Base.repo.old
 
# COPY the following into your buffer
## (in windows you use ctrl-c)
##
## start copy ---->>
 
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the #mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
 
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://vault.centos.org/6.0/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
 
#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
baseurl=http://vault.centos.org/6.0/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
 
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
baseurl=http://vault.centos.org/6.0/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
 
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
baseurl=http://vault.centos.org/6.0/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
 
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
baseurl=http://vault.centos.org/6.0/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
 
## <<----  end copy
##
## then using the built in world processor in linux type
 
vi CentOS-Base.repo
 
# while in Vi hit [insert key]
# then paste the contents of your buffer with the right mouse button
# then hit the escape key
# hit :
# then hit x
# then hit the [enter key]
# this will save the file and exit
 
# test out your changes
 
yum check-update
 
 
 
#############################################################
####  Section 3 - Setting up Base Packages
#############################################################
 
####  become root user
su -
 
yum -y groupinstall x11
 
#### if you see an error about yum being locked be patient it will unlock in a minute
yum -y install gcc rpm-build git wget make kernel-devel python python-libs numpy openssl openssl-devel ncurses ncurses-devel ncurses-libs autoconf automake m4 pkgconfig libcurl-devel libtool libudev libusb glx-utils libX11 libstdc++ compat-libstdc++*
 
####  create new user or place all items in personal home directory
useradd miner
 
####  become prefered user (no password needed)
su -l miner
 
####  create a directory to hold all the packages
cd ~
mkdir miningpacks
cd miningpacks
 
####  download all driver package as user "miner"
####
####      wget http://download2-developer.amd.com/amd/APPSDK/AMD-APP-SDK-v2.4-lnx64.tgz
####      wget http://www2.ati.com/drivers/linux/amd-driver-installer-12-3-x86.x86_64.run
####
####  goin old-school - working version is best ...
####  note:  modern versions may break other things
####
wget http://www2.ati.com/drivers/linux/ati-driver-installer-11-4-x86.x86_64.run
 
####chmod a+x amd-driver-*
chmod a+x ati-driver-*
 
 
exit #go back to being root user
 
#############################################################
####  Section 4 - Installing ATI Development Kit (SDK)
#############################################################
####
####
####  Install this BEFORE you install the drivers
####
#############################################################
####
####
####  preparing the machine for a new SDK install
####
####
####  First Seek and Destroy ALL Existing ATI Drivers:
####      only needed if you are rebuilding.  If fresh
####      install this command will fail, no directory.
####
cd /usr/share/ati
./amd-uninstall.sh --force
 
#### more cleaning to be sure
####
#rm -Rf /etc/ati
#rm -Rf /usr/lib/fglrx
#rm -Rf /usr/share/ati
#rm -Rf /opt/AMD*
#reboot  #HIGHLY RECOMMENDED IF YOU REMOVED FILES
 
####
####  installing the new SDK install
####
 
####  become root user
su - 
 
####  become prefered user (no password needed)
su -l miner
 
####  move to directory to where you are holding the packages
cd ~
cd miningpacks
 
####  download SDK
####   
####    wget http://download2-developer.amd.com/amd/APPSDK/AMD-APP-SDK-v2.4-lnx32.tgz
####    wget http://download2-developer.amd.com/amd/APPSDK/AMD-APP-SDK-v2.6-lnx32.tgz
####    wget http://developer.amd.com/wordpress/media/2012/11/AMD-APP-SDK-v2.8-lnx64.tgz
####
####  again, oldschool because working beats not-working:
##
wget http://download2-developer.amd.com/amd/APPSDK/AMD-APP-SDK-v2.4-lnx64.tgz
 
 
exit #go back to being root user
 
#### newer style SDK install
####
#### cd /home/miner/miningpacks/
#### mkdir APP-SDK-2point7-temp
#### cd APP-SDK-2point7-temp
#### cp ../AMD-APP-SDK-v2.7-lnx64.tgz .
#### tar xzf AMD-APP-SDK-v2.7-lnx64.tgz
#### ./Install-AMD-APP.sh
#### cd ..
#### rm -rf APP-SDK-2point7-temp
#### #reboot
 
### old school style SDK install
cd /opt
tar -xf /home/miner/miningpacks/AMD-APP-SDK*
cd /
tar xf /opt/AMD-APP-SDK-v2.4-lnx64/icd-registration.tgz
ln -sf /opt/AMD-APP-SDK-v2.4-lnx64/include/CL /usr/include
ln -sf /opt/AMD-APP-SDK-v2.4-lnx64/lib/x86_64/* /usr/lib/
ldconfig
reboot
 
#### echo AMDAPPSDKROOT=/root/AMD-APP-SDK-v2.4-lnx64 >> .bashrc
#### echo AMDAPPSDKSAMPLESROOT=/root/AMD-APP-SDK-v2.4-lnx64 >> .bashrc
#### echo LD_LIBRARY_PATH=/root/AMD-APP-SDK-v2.4-lnx64/lib/x86_64 >> .bashrc
 
 
#############################################################
####  Section 5 - Installing ATI Catalyst Drivers for linux
#############################################################
####
####
####  Install this AFTER you install the SDK
####
#############################################################
 
####  become root user
su -
 
##
## important note on installing AMD Drivers under linux:
##
## be certain you have the kernel-devel for YOUR kernel
yum list installed | grep kernel-*
 
##
## output should look like this
#dracut-kernel.noarch                004-32.el6                        installed
#kernel.x86_64                      2.6.32-71.el6                      installed
#kernel-devel.x86_64                2.6.32-71.29.1.el6                @updates
#kernel-firmware.noarch              2.6.32-71.el6                      installed
#kernel-headers.x86_64              2.6.32-71.29.1.el6                @updates
#[root@localhost ~]#
#
#  notice that I DO NOT have a matched kernel and kernel-devel version. 
#  they must match EXACTLY or you will not be successful in the
#  next steps.  I have:
#    kernel.x86_64                      2.6.32-71.el6                      installed
#      and
#    kernel-devel.x86_64                2.6.32-71.29.1.el6                @updates
#
#  the difference is so slight you may have missed it
#    my subversion  32-71.29.1.el6 does NOT match 32-71.el6
 
##
## check your distribution
uname -r
 
##
## you can have multiple kernel-devel's that is not a problem
## if you are lucky this command works
yum install kernel-devel-$(uname -r)
 
#### if this was successful move on to the next section
####    proceed to package generation
 
 
####******#*#*#*#*#*##*#*####******#*#*#*#*#*##*#*
####
####  optional section if kernels do not match
####
####
#### You will need to find another "kernel" with
###  a matching "kernel-devel" package
####
#### yum --showduplicates list kernel-devel
####
#### to download a specific package just add
#### the version to the name, for example if
#### I want kernel-devel 2.6.32-358.el6 I
#### just add a hyphen
####
#### yum install kernel-devel-2.6.32-358.el6
####
####
####******#*#*#*#*#*##*#*####******#*#*#*#*#*##*#*
 
 
#############################################################
####  Generate a Distribution Specific Package of fglrx
#############################################################
 
# as root
 
####  Move to package directory
####    using menus generate RPM package for your OS
####    (generate centos 64 packages)
####
cd /home/miner/miningpacks/
 
####  chmod u+x *-driver-installer*  #step taken earlier
####  //alternative:// sh amd-driver-installer 
sh ati-driver-installer-*
 
#### (file was downloaded above)
####
####
####  Install generated package
cd /home/miner/miningpacks/
yum -y install fglrx64_p_i_c-* --nogpgcheck
aticonfig --adapter=all --initial --force
reboot
 
 
#############################################################
####  Section 6 - Testing ATI Catalyst Drivers
#############################################################
 
 
#### check installation by reading output from
more /usr/share/ati/fglrx-install.log
 
#### further testing SHOULD be done at this time against this page:
####
#### http://wiki.cchtml.com/index.php/Frequently_Asked_Questions#How_do_I_know_fglrx_is_installed_correctly.3F
 
 
#### one possible error
####
####[Message] Kernel Module : Precompiled kernel module version mismatched.
####[Error] Kernel Module : Kernel module build environment not found - please consult readme.
####
####
####  This error indicated you do not have the correct kernel-devel libs to match your kernel
####    (I told you it wouldn't work).
####
####  with xming installed on my pc when I use putty I don't even need to
####  export my display.  I can just start playing with opencl and opengl
####  libraries and samples.  But only if I did everything correctly
####  and there were no hardware issues along the way.
####
####  my machines 'hello world' test passed with flying colors
####
aticonfig --lsa
 
## output looks like this:
#* 0. 0e:00.0 AMD Radeon HD 6800 Series
#  1. 0f:00.0 AMD Radeon HD 6800 Series
#  2. 07:00.0 AMD Radeon HD 6800 Series
#  3. 06:00.0 AMD Radeon HD 6800 Series
#
#* - Default adapter
#
# which is EXACTLY what I want!!!
 
#### if you are not seeing all your GPU's at this stage something is wrong.
#### first check lspci
lspci -nn | grep VGA
 
#### if that does not show all your cards you need to hard-boot your computer.
#### it make take several attempts and some plugging and unpluggging monitor
#### cables.  There seems to be little method to the madness but make sure
#### you can see all your GPU's now or you can't mine with them.  Even though
#### centos was designed to handle multiple GPU's off the bat I still find the
#### best way to 'light up' a port is to have a monitor plugged in during hard
#### boot.  I'm sure the resistor based dongle approach would work as well.
####
glxgears
 
## Segmentation fault
##
## uh-oh I broke something!
## oh yea, I remember
##
## I forgot to log into the linux box.
## so here's what I need to make this work
## I go to the centos box and log in as my
## regular user in the graphical interface.
## then I pull down the menu and open a
## terminal window which must be 'turning
## x on for my local user'.  Once I open
## that terminal (xterm) I can walk away
## and do everything else remotely.  So
## here we go, let's have some fun...
##
glxgears
 
## Segmentation fault
## oh yea... duh
export DISPLAY=:0
glxgears
 
##40014 frames in 5.0 seconds = 8002.695 FPS
##40291 frames in 5.0 seconds = 8058.047 FPS
##40288 frames in 5.0 seconds = 8057.494 FPS
##40287 frames in 5.0 seconds = 8057.313 FPS
## ^C
##
## don't be hatin on me now...
 
 
#############################################################
####  Install ATI Display Library Development Kit (ADL SDK):
#############################################################
 
###wget http://developer.amd.com/wordpress/media/2012/11/AMD-APP-SDK-v2.8-lnx64.tgz
### cannot find APP without going through website license
### pain in the ass requires a browser download
###
 
####  become root user
su -
 
####  become prefered user (no password needed)
su -l miner
 
####  move to directory to where you are holding the packages
cd ~
cd miningpacks
 
####  place ADL zip in current directory
 
wget http://download2-developer.amd.com/amd/GPU/zip/ADL_SDK_3.0.zip
 
#### unpack it and install it into the correct directory
 
mkdir ADL-SDK-3point0-temp
cd ADL-SDK-3point0-temp
cp ../ADL_SDK_3.0.zip .
unzip ADL_SDK_3.0.zip
 
cp /home/miner/miningpacks/ADL-SDK-3point0-temp/include/*.h /home/miner/cgminer/ADL_SDK
rm -rf /home/miner/ADL-SDK-3point0-temp
 
 
 
#############################################################
####  Install CGMiner
#############################################################
 
####  become root user
su -
 
####  become prefered user (no password needed)
su -l miner
 
####  move to home directory
cd ~
 
####  download CGMiner from author
git clone https://github.com/ckolivas/cgminer
 
 
####  copy ADL libraries to correct location
cd /home/miner/cgminer/ADL_SDK
cp /home/miner/miningpacks/ADL-SDK-5point0-temp/include/*.h .
rm -rf /home/miner/miningpacks/ADL-SDK-5point0-temp/
cd ..
 
./autogen.sh
 
make
 
exit #go back to being root user
 
cd /home/miner/cgminer/
make install
 
reboot #if you have not after changes to libraries
 
#if you did everything as I have above you are finished
#and can run cgminer.  test with  ./cgminer -n
 
####
#### Now test out your new miner for 24 hours and if you like all the time and effort I
#### put into this guide I encourage you to think about testing your new miner here:
 
./cgminer -o stratum+tcp://mining.eligius.st:3334 -u 1NQc6tCtRmT8zBeLKNpboFaUBMLcxDwUm6 -p x0 -I 9 --per-device-stats 2>logfile.txt
 
####
#### After 24hrs of burn in read the logfile.  Make sure nothing strange happened. 
#### Here's how you read the log:
 
more logfile.txt
 
#### If you don't see any errors set your miner to your favorite pool and off you go.
#### Then set that file aside so you can refer to it later.
 
cp logfile.txt burninlog.txt
 
#### in the future, unless you are having problems you can remove the --per-device-stats and the logging
#### from the command line, so it looks like this:  (don't forget to change the address!!)
 
./cgminer -o stratum+tcp://mining.eligius.st:3334 -u 1NQc6tCtRmT8zBeLKNpboFaUBMLcxDwUm6 -p x0 -I 9
 
 
 
#### Best of luck, greenhorn!


#############################################################
== Address / Keys ==
####  The End
An address consists of a public / private key pair.
#############################################################


</syntaxhighlight>
=== Brain Wallets ===
A brain wallet allows for the generation of the public/private key pair using a passphrase. It is accomplished by:
# Converting a pass phrase into a private key
#* PrivateKey = SHA256(PassPhrase)
# Generate a public key using the private key
#* PublicKey = privateToPublic(PrivateKey)
# Generate the bitcoin address
#* Hash = SHA256(PublicKey)
#* Hash160 = RIPEMD160(Hash)      (used by transactions)
#* Address = Base58Check(Hash160)


The publickey can either be uncompressed or compressed. A compressed public key is simply a truncated key where the missing parts can be recomputed.


[[Category:CryptoCurrency]]
[[Category:CryptoCurrency]]

Revision as of 05:53, 23 September 2015

Bitcoin is a proof of work cryptocurrency.

This article covers some specific aspects of the Bitcoin protocol.

My Bitcoin Address is: 1HDp1gU3rgrRNKqrKorz8uWCpHUNdyGqXm

Overview

Bitcoin is a decentralized protocol that operates in an untrusted peer to peer environment while still being a reliable method to exchange credits (bitcoins) between people.

For detailed information, read the Bitcoin paper or one of the many sites out there.

Address / Keys

An address consists of a public / private key pair.

Brain Wallets

A brain wallet allows for the generation of the public/private key pair using a passphrase. It is accomplished by:

  1. Converting a pass phrase into a private key
    • PrivateKey = SHA256(PassPhrase)
  2. Generate a public key using the private key
    • PublicKey = privateToPublic(PrivateKey)
  3. Generate the bitcoin address
    • Hash = SHA256(PublicKey)
    • Hash160 = RIPEMD160(Hash) (used by transactions)
    • Address = Base58Check(Hash160)

The publickey can either be uncompressed or compressed. A compressed public key is simply a truncated key where the missing parts can be recomputed.