Docs Markdown Cleanup

This commit is contained in:
super3 2013-05-20 00:30:00 -04:00
parent 5b5d399593
commit 2341e9b533
11 changed files with 443 additions and 399 deletions

View File

@ -1,33 +0,0 @@
Bitcoin 0.8.2 BETA
Copyright (c) 2009-2013 Bitcoin Developers
Distributed under the MIT/X11 software license, see the accompanying
file COPYING or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in
the OpenSSL Toolkit (http://www.openssl.org/). This product includes
cryptographic software written by Eric Young (eay@cryptsoft.com).
Intro
-----
Bitcoin is a free open source peer-to-peer electronic cash system that is
completely decentralized, without the need for a central server or trusted
parties. Users hold the crypto keys to their own money and transact directly
with each other, with the help of a P2P network to check for double-spending.
Setup
-----
You need the Qt4 run-time libraries to run Bitcoin-Qt. On Debian or Ubuntu:
sudo apt-get install libqtgui4
Unpack the files into a directory and run:
bin/32/bitcoin-qt (GUI, 32-bit)
bin/32/bitcoind (headless, 32-bit)
bin/64/bitcoin-qt (GUI, 64-bit)
bin/64/bitcoind (headless, 64-bit)
See the documentation at the bitcoin wiki:
https://en.bitcoin.it/wiki/Main_Page
for help and more information.

46
doc/README.md Normal file
View File

@ -0,0 +1,46 @@
Bitcoin 0.8.2 BETA
====================
Copyright (c) 2009-2013 Bitcoin Developers
Distributed under the MIT/X11 software license, see the accompanying
file COPYING or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in the [OpenSSL Toolkit](http://www.openssl.org/). This product includes
cryptographic software written by Eric Young ([eay@cryptsoft.com](mailto:eay@cryptsoft.com)), and UPnP software written by Thomas Bernard.
Intro
---------------------
Bitcoin is a free open source peer-to-peer electronic cash system that is
completely decentralized, without the need for a central server or trusted
parties. Users hold the crypto keys to their own money and transact directly
with each other, with the help of a P2P network to check for double-spending.
Setup
---------------------
You need the Qt4 run-time libraries to run Bitcoin-Qt. On Debian or Ubuntu:
`sudo apt-get install libqtgui4`
Unpack the files into a directory and run:
- bin/32/bitcoin-qt (GUI, 32-bit)
- bin/32/bitcoind (headless, 32-bit)
- bin/64/bitcoin-qt (GUI, 64-bit)
- bin/64/bitcoind (headless, 64-bit)
See the documentation at the [Bitcoin Wiki](https://en.bitcoin.it/wiki/Main_Page)
for help and more information.
Other Pages
---------------------
- [Unix Build Notes](build-unix.md)
- [OSX Build Notes](build-osx.md)
- [Windows Build Notes](build-msw.md)
- [Coding Guidelines](coding.md)
- [Release Process](release-process.md)
- [Release Notes](release-notes.md)
- [Multiwallet Qt Development](multiwallet-qt.md)
- [Unit Tests](unit-tests.md)
- [Translation Process](translation_process.md)

View File

@ -1,10 +1,9 @@
Copyright (c) 2009-2012 Bitcoin Developers Copyright (c) 2009-2013 Bitcoin Developers
Distributed under the MIT/X11 software license, see the accompanying Distributed under the MIT/X11 software license, see the accompanying
file COPYING or http://www.opensource.org/licenses/mit-license.php. file COPYING or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in This product includes software developed by the OpenSSL Project for use in the [OpenSSL Toolkit](http://www.openssl.org/). This product includes
the OpenSSL Toolkit (http://www.openssl.org/). This product includes cryptographic software written by Eric Young ([eay@cryptsoft.com](mailto:eay@cryptsoft.com)), and UPnP software written by Thomas Bernard.
cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP
software written by Thomas Bernard.
See readme-qt.rst for instructions on building Bitcoin-Qt, the See readme-qt.rst for instructions on building Bitcoin-Qt, the
@ -30,55 +29,62 @@ Boost \boost-1.50.0-mgw http://www.boost.org/users/download/
miniupnpc \miniupnpc-1.6-mgw http://miniupnp.tuxfamily.org/files/ miniupnpc \miniupnpc-1.6-mgw http://miniupnp.tuxfamily.org/files/
Their licenses: Their licenses:
OpenSSL Old BSD license with the problematic advertising requirement
Berkeley DB New BSD license with additional requirement that linked software must be free open source OpenSSL Old BSD license with the problematic advertising requirement
Boost MIT-like license Berkeley DB New BSD license with additional requirement that linked software must be free open source
miniupnpc New (3-clause) BSD license Boost MIT-like license
miniupnpc New (3-clause) BSD license
Versions used in this release: Versions used in this release:
OpenSSL 1.0.1c
Berkeley DB 4.8.30.NC OpenSSL 1.0.1c
Boost 1.50.0 Berkeley DB 4.8.30.NC
miniupnpc 1.6 Boost 1.50.0
miniupnpc 1.6
OpenSSL OpenSSL
------- -------
MSYS shell: MSYS shell:
un-tar sources with MSYS 'tar xfz' to avoid issue with symlinks (OpenSSL ticket 2377) un-tar sources with MSYS 'tar xfz' to avoid issue with symlinks (OpenSSL ticket 2377)
change 'MAKE' env. variable from 'C:\MinGW32\bin\mingw32-make.exe' to '/c/MinGW32/bin/mingw32-make.exe' change 'MAKE' env. variable from 'C:\MinGW32\bin\mingw32-make.exe' to '/c/MinGW32/bin/mingw32-make.exe'
cd /c/openssl-1.0.1c-mgw cd /c/openssl-1.0.1c-mgw
./config ./config
make make
Berkeley DB Berkeley DB
----------- -----------
MSYS shell: MSYS shell:
cd /c/db-4.8.30.NC-mgw/build_unix
sh ../dist/configure --enable-mingw --enable-cxx cd /c/db-4.8.30.NC-mgw/build_unix
make sh ../dist/configure --enable-mingw --enable-cxx
make
Boost Boost
----- -----
DOS prompt: DOS prompt:
downloaded boost jam 3.1.18
cd \boost-1.50.0-mgw downloaded boost jam 3.1.18
bjam toolset=gcc --build-type=complete stage cd \boost-1.50.0-mgw
bjam toolset=gcc --build-type=complete stage
MiniUPnPc MiniUPnPc
--------- ---------
UPnP support is optional, make with USE_UPNP= to disable it. UPnP support is optional, make with `USE_UPNP=` to disable it.
MSYS shell: MSYS shell:
cd /c/miniupnpc-1.6-mgw
make -f Makefile.mingw cd /c/miniupnpc-1.6-mgw
mkdir miniupnpc make -f Makefile.mingw
cp *.h miniupnpc/ mkdir miniupnpc
cp *.h miniupnpc/
Bitcoin Bitcoin
------- -------
DOS prompt: DOS prompt:
cd \bitcoin\src
mingw32-make -f makefile.mingw cd \bitcoin\src
strip bitcoind.exe mingw32-make -f makefile.mingw
strip bitcoind.exe

View File

@ -1,26 +1,23 @@
Copyright (c) 2009-2012 Bitcoin Developers Copyright (c) 2009-2013 Bitcoin Developers
Distributed under the MIT/X11 software license, see the accompanying Distributed under the MIT/X11 software license, see the accompanying
file COPYING or http://www.opensource.org/licenses/mit-license.php. file COPYING or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in This product includes software developed by the OpenSSL Project for use in the [OpenSSL Toolkit](http://www.openssl.org/). This product includes
the OpenSSL Toolkit (http://www.openssl.org/). This product includes cryptographic software written by Eric Young ([eay@cryptsoft.com](mailto:eay@cryptsoft.com)), and UPnP software written by Thomas Bernard.
cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP
software written by Thomas Bernard.
UNIX BUILD NOTES UNIX BUILD NOTES
================ ====================
To Build To Build
-------- ---------------------
cd src/ cd src/
make -f makefile.unix # Headless bitcoin make -f makefile.unix # Headless bitcoin
See readme-qt.rst for instructions on building Bitcoin-Qt, See readme-qt.rst for instructions on building Bitcoin-Qt, the graphical user interface.
the graphical user interface.
Dependencies Dependencies
------------ ---------------------
Library Purpose Description Library Purpose Description
------- ------- ----------- ------- ------- -----------
@ -29,15 +26,17 @@ Dependencies
libboost Boost C++ Library libboost Boost C++ Library
miniupnpc UPnP Support Optional firewall-jumping support miniupnpc UPnP Support Optional firewall-jumping support
miniupnpc may be used for UPnP port mapping. It can be downloaded from [miniupnpc](http://miniupnp.free.fr/) may be used for UPnP port mapping. It can be downloaded from [here](
http://miniupnp.tuxfamily.org/files/. UPnP support is compiled in and http://miniupnp.tuxfamily.org/files/). UPnP support is compiled in and
turned off by default. Set USE_UPNP to a different value to control this: turned off by default. Set USE_UPNP to a different value to control this:
USE_UPNP=- No UPnP support - miniupnp not required
USE_UPNP=0 (the default) UPnP support turned off by default at runtime USE_UPNP= No UPnP support miniupnp not required
USE_UPNP=1 UPnP support turned on by default at runtime USE_UPNP=0 (the default) UPnP support turned off by default at runtime
USE_UPNP=1 UPnP support turned on by default at runtime
IPv6 support may be disabled by setting: IPv6 support may be disabled by setting:
USE_IPV6=0 Disable IPv6 support
USE_IPV6=0 Disable IPv6 support
Licenses of statically linked libraries: Licenses of statically linked libraries:
Berkeley DB New BSD license with additional requirement that linked Berkeley DB New BSD license with additional requirement that linked
@ -45,51 +44,54 @@ Licenses of statically linked libraries:
Boost MIT-like license Boost MIT-like license
miniupnpc New (3-clause) BSD license miniupnpc New (3-clause) BSD license
Versions used in this release: - Versions used in this release:
GCC 4.3.3 - GCC 4.3.3
OpenSSL 1.0.1c - OpenSSL 1.0.1c
Berkeley DB 4.8.30.NC - Berkeley DB 4.8.30.NC
Boost 1.37 - Boost 1.37
miniupnpc 1.6 - miniupnpc 1.6
Dependency Build Instructions: Ubuntu & Debian Dependency Build Instructions: Ubuntu & Debian
---------------------------------------------- ----------------------------------------------
Build requirements: Build requirements:
sudo apt-get install build-essential
sudo apt-get install libssl-dev sudo apt-get install build-essential
sudo apt-get install libssl-dev
for Ubuntu 12.04: for Ubuntu 12.04:
sudo apt-get install libboost-all-dev
db4.8 packages are available at: sudo apt-get install libboost-all-dev
https://launchpad.net/~bitcoin/+archive/bitcoin
db4.8 packages are available [here](https://launchpad.net/~bitcoin/+archive/bitcoin).
Ubuntu precise has packages for libdb5.1-dev and libdb5.1++-dev, Ubuntu precise has packages for libdb5.1-dev and libdb5.1++-dev,
but using these will break binary wallet compatibility, and is not recommended. but using these will break binary wallet compatibility, and is not recommended.
for other Ubuntu & Debian: for other Ubuntu & Debian:
sudo apt-get install libdb4.8-dev
sudo apt-get install libdb4.8++-dev sudo apt-get install libdb4.8-dev
sudo apt-get install libboost1.37-dev sudo apt-get install libdb4.8++-dev
sudo apt-get install libboost1.37-dev
(If using Boost 1.37, append -mt to the boost libraries in the makefile) (If using Boost 1.37, append -mt to the boost libraries in the makefile)
Optional: Optional:
sudo apt-get install libminiupnpc-dev (see USE_UPNP compile flag)
sudo apt-get install libminiupnpc-dev (see USE_UPNP compile flag)
Dependency Build Instructions: Gentoo Dependency Build Instructions: Gentoo
------------------------------------- -------------------------------------
Note: If you just want to install bitcoind on Gentoo, you can add the Bitcoin Note: If you just want to install bitcoind on Gentoo, you can add the Bitcoin overlay and use your package manager:
overlay and use your package manager:
layman -a bitcoin && emerge bitcoind
emerge -av1 --noreplace boost glib openssl sys-libs/db:4.8 layman -a bitcoin && emerge bitcoind
emerge -av1 --noreplace boost glib openssl sys-libs/db:4.8
Take the following steps to build (no UPnP support): Take the following steps to build (no UPnP support):
cd ${BITCOIN_DIR}/src
make -f makefile.unix USE_UPNP= USE_IPV6=1 BDB_INCLUDE_PATH='/usr/include/db4.8' cd ${BITCOIN_DIR}/src
strip bitcoind make -f makefile.unix USE_UPNP= USE_IPV6=1 BDB_INCLUDE_PATH='/usr/include/db4.8'
strip bitcoind
Notes Notes
@ -100,26 +102,28 @@ symbols, which reduces the executable size by about 90%.
miniupnpc miniupnpc
--------- ---------
tar -xzvf miniupnpc-1.6.tar.gz tar -xzvf miniupnpc-1.6.tar.gz
cd miniupnpc-1.6 cd miniupnpc-1.6
make make
sudo su sudo su
make install make install
Berkeley DB Berkeley DB
----------- -----------
You need Berkeley DB 4.8. If you have to build Berkeley DB yourself: You need Berkeley DB 4.8. If you have to build Berkeley DB yourself:
../dist/configure --enable-cxx
make ../dist/configure --enable-cxx
make
Boost Boost
----- -----
If you need to build Boost yourself: If you need to build Boost yourself:
sudo su
./bootstrap.sh sudo su
./bjam install ./bootstrap.sh
./bjam install
Security Security
@ -138,10 +142,12 @@ exploit even if a vulnerability is found, you can take the following measures:
such as: "relocation R_X86_64_32 against `......' can not be used when making a shared object;" such as: "relocation R_X86_64_32 against `......' can not be used when making a shared object;"
To build with PIE, use: To build with PIE, use:
make -f makefile.unix ... -e PIE=1
make -f makefile.unix ... -e PIE=1
To test that you have built PIE executable, install scanelf, part of paxutils, and use: To test that you have built PIE executable, install scanelf, part of paxutils, and use:
scanelf -e ./bitcoin
scanelf -e ./bitcoin
The output should contain: The output should contain:
TYPE TYPE
@ -155,10 +161,10 @@ exploit even if a vulnerability is found, you can take the following measures:
executable without the non-executable stack protection. executable without the non-executable stack protection.
To verify that the stack is non-executable after compiling use: To verify that the stack is non-executable after compiling use:
scanelf -e ./bitcoin `scanelf -e ./bitcoin`
the output should contain: the output should contain:
STK/REL/PTL STK/REL/PTL
RW- R-- RW- RW- R-- RW-
The STK RW- means that the stack is readable and writeable but not executable. The STK RW- means that the stack is readable and writeable but not executable.

94
doc/coding.md Normal file
View File

@ -0,0 +1,94 @@
Coding
====================
Please be consistent with the existing coding style.
Block style:
bool Function(char* psz, int n)
{
// Comment summarising what this section of code does
for (int i = 0; i < n; i++)
{
// When something fails, return early
if (!Something())
return false;
...
}
// Success return is usually at the end
return true;
}
- ANSI/Allman block style
- 4 space indenting, no tabs
- No extra spaces inside parenthesis; please don't do ( this )
- No space after function names, one space after if, for and while
Variable names begin with the type in lowercase, like nSomeVariable.
Please don't put the first word of the variable name in lowercase like
someVariable.
Common types:
n integer number: short, unsigned short, int, unsigned int, int64, uint64, sometimes char if used as a number
d double, float
f flag
hash uint256
p pointer or array, one p for each level of indirection
psz pointer to null terminated string
str string object
v vector or similar list objects
map map or multimap
set set or multiset
bn CBigNum
-------------------------
Locking/mutex usage notes
The code is multi-threaded, and uses mutexes and the
LOCK/TRY_LOCK macros to protect data structures.
Deadlocks due to inconsistent lock ordering (thread 1 locks cs_main
and then cs_wallet, while thread 2 locks them in the opposite order:
result, deadlock as each waits for the other to release its lock) are
a problem. Compile with -DDEBUG_LOCKORDER to get lock order
inconsistencies reported in the debug.log file.
Re-architecting the core code so there are better-defined interfaces
between the various components is a goal, with any necessary locking
done by the components (e.g. see the self-contained CKeyStore class
and its cs_KeyStore lock for example).
-------
Threads
- StartNode : Starts other threads.
- ThreadGetMyExternalIP : Determines outside-the-firewall IP address, sends addr message to connected peers when it determines it.
- ThreadSocketHandler : Sends/Receives data from peers on port 8333.
- ThreadMessageHandler : Higher-level message handling (sending and receiving).
- ThreadOpenConnections : Initiates new connections to peers.
- ThreadTopUpKeyPool : replenishes the keystore's keypool.
- ThreadCleanWalletPassphrase : re-locks an encrypted wallet after user has unlocked it for a period of time.
- SendingDialogStartTransfer : used by pay-via-ip-address code (obsolete)
- ThreadDelayedRepaint : repaint the gui
- ThreadFlushWalletDB : Close the wallet.dat file if it hasn't been used in 500ms.
- ThreadRPCServer : Remote procedure call handler, listens on port 8332 for connections and services them.
- ThreadBitcoinMiner : Generates bitcoins
- ThreadMapPort : Universal plug-and-play startup/shutdown
- Shutdown : Does an orderly shutdown of everything
- ExitTimeout : Windows-only, sleeps 5 seconds then exits application

View File

@ -1,96 +0,0 @@
Please be consistent with the existing coding style.
Block style:
bool Function(char* psz, int n)
{
// Comment summarising what this section of code does
for (int i = 0; i < n; i++)
{
// When something fails, return early
if (!Something())
return false;
...
}
// Success return is usually at the end
return true;
}
- ANSI/Allman block style
- 4 space indenting, no tabs
- No extra spaces inside parenthesis; please don't do ( this )
- No space after function names, one space after if, for and while
Variable names begin with the type in lowercase, like nSomeVariable.
Please don't put the first word of the variable name in lowercase like
someVariable.
Common types:
n integer number: short, unsigned short, int, unsigned int,
int64, uint64, sometimes char if used as a number
d double, float
f flag
hash uint256
p pointer or array, one p for each level of indirection
psz pointer to null terminated string
str string object
v vector or similar list objects
map map or multimap
set set or multiset
bn CBigNum
-------------------------
Locking/mutex usage notes
The code is multi-threaded, and uses mutexes and the
LOCK/TRY_LOCK macros to protect data structures.
Deadlocks due to inconsistent lock ordering (thread 1 locks cs_main
and then cs_wallet, while thread 2 locks them in the opposite order:
result, deadlock as each waits for the other to release its lock) are
a problem. Compile with -DDEBUG_LOCKORDER to get lock order
inconsistencies reported in the debug.log file.
Re-architecting the core code so there are better-defined interfaces
between the various components is a goal, with any necessary locking
done by the components (e.g. see the self-contained CKeyStore class
and its cs_KeyStore lock for example).
-------
Threads
StartNode : Starts other threads.
ThreadGetMyExternalIP : Determines outside-the-firewall IP address,
sends addr message to connected peers when it determines it.
ThreadSocketHandler : Sends/Receives data from peers on port 8333.
ThreadMessageHandler : Higher-level message handling (sending and
receiving).
ThreadOpenConnections : Initiates new connections to peers.
ThreadTopUpKeyPool : replenishes the keystore's keypool.
ThreadCleanWalletPassphrase : re-locks an encrypted wallet after user
has unlocked it for a period of time.
SendingDialogStartTransfer : used by pay-via-ip-address code (obsolete)
ThreadDelayedRepaint : repaint the gui
ThreadFlushWalletDB : Close the wallet.dat file if it hasn't been used
in 500ms.
ThreadRPCServer : Remote procedure call handler, listens on port 8332
for connections and services them.
ThreadBitcoinMiner : Generates bitcoins
ThreadMapPort : Universal plug-and-play startup/shutdown
Shutdown : Does an orderly shutdown of everything
ExitTimeout : Windows-only, sleeps 5 seconds then exits application

View File

@ -39,15 +39,14 @@ Changes to bitcoin.cpp
bitcoin.cpp is the entry point into bitcoin-qt, and as such, will require some minor modifications to provide hooks for bitcoin.cpp is the entry point into bitcoin-qt, and as such, will require some minor modifications to provide hooks for
multiple wallet support. Most importantly will be the way it instantiates WalletModels and passes them to the multiple wallet support. Most importantly will be the way it instantiates WalletModels and passes them to the
singleton BitcoinGUI instance called window. Formerly, BitcoinGUI kept a pointer to a single instance of a WalletModel. singleton BitcoinGUI instance called window. Formerly, BitcoinGUI kept a pointer to a single instance of a WalletModel.
The initial change required is very simple: rather than calling window.setWalletModel(&walletModel); we perform the The initial change required is very simple: rather than calling `window.setWalletModel(&walletModel);` we perform the
following two steps: following two steps:
window.addWallet("~Default", &walletModel); window.addWallet("~Default", &walletModel);
window.setCurrentWallet("~Default"); window.setCurrentWallet("~Default");
The string parameter is just an arbitrary name given to the default wallet. It's been prepended with a tilde to avoid name The string parameter is just an arbitrary name given to the default wallet. It's been prepended with a tilde to avoid name collisions in the future with additional wallets.
collisions in the future with additional wallets.
The shutdown call window.setWalletModel(0) has also been removed. In its place is now: The shutdown call `window.setWalletModel(0)` has also been removed. In its place is now:
window.removeAllWallets(); window.removeAllWallets();

View File

@ -26,41 +26,41 @@ the rest of the network your transactions may never confirm.
Bitcoin-Qt changes Bitcoin-Qt changes
------------------ ------------------
* New icon and splash screen - New icon and splash screen
* Improve reporting of synchronization process - Improve reporting of synchronization process
* Remove hardcoded fee recommendations - Remove hardcoded fee recommendations
* Improve metadata of executable on MacOSX and Windows - Improve metadata of executable on MacOSX and Windows
* Move export button to individual tabs instead of toolbar - Move export button to individual tabs instead of toolbar
* Add "send coins" command to context menu in address book - Add "send coins" command to context menu in address book
* Add "copy txid" command to copy transaction IDs from transaction overview - Add "copy txid" command to copy transaction IDs from transaction overview
* Save & restore window size and position when showing & hiding window - Save & restore window size and position when showing & hiding window
* New translations: Arabic (ar), Bosnian (bs), Catalan (ca), Welsh (cy), - New translations: Arabic (ar), Bosnian (bs), Catalan (ca), Welsh (cy), Esperanto (eo), Interlingua (la), Latvian (lv) and many improvements to current translations
Esperanto (eo), Interlingua (la), Latvian (lv) and many improvements
to current translations
MacOSX: MacOSX:
* OSX support for click-to-pay (bitcoin:) links
* Fix GUI disappearing problem on MacOSX (issue #1522) - OSX support for click-to-pay (bitcoin:) links
- Fix GUI disappearing problem on MacOSX (issue #1522)
Linux/Unix: Linux/Unix:
* Copy addresses to middle-mouse-button clipboard
- Copy addresses to middle-mouse-button clipboard
Command-line options Command-line options
-------------------- --------------------
* -walletnotify will call a command on receiving transactions that affect the wallet. * `-walletnotify` will call a command on receiving transactions that affect the wallet.
* -alertnotify will call a command on receiving an alert from the network. * `-alertnotify` will call a command on receiving an alert from the network.
* -par now takes a negative number, to leave a certain amount of cores free. * `-par` now takes a negative number, to leave a certain amount of cores free.
JSON-RPC API changes JSON-RPC API changes
-------------------- --------------------
* listunspent now lists account and address infromation. * `listunspent` now lists account and address infromation.
* getinfo now also returns the time adjustment estimated from your peers. * `getinfo` now also returns the time adjustment estimated from your peers.
* getpeerinfo now returns bytessent, bytesrecv and syncnode. * `getpeerinfo` now returns bytessent, bytesrecv and syncnode.
* gettxoutsetinfo returns statistics about the unspent transaction output database. * `gettxoutsetinfo` returns statistics about the unspent transaction output database.
* gettxout returns information about a specific unspent transaction output. * `gettxout` returns information about a specific unspent transaction output.
Networking changes Networking changes
@ -76,5 +76,5 @@ Wallet compatibility/rescuing
----------------------------- -----------------------------
* Cases where wallets cannot be opened in another version/installation should be reduced. * Cases where wallets cannot be opened in another version/installation should be reduced.
* -salvagewallet now works for encrypted wallets. * `-salvagewallet` now works for encrypted wallets.

164
doc/release-process.md Normal file
View File

@ -0,0 +1,164 @@
Release Process
====================
* update translations (ping wumpus, Diapolo or tcatm on IRC)
* see https://github.com/bitcoin/bitcoin/blob/master/doc/translation_process.md#syncing-with-transifex
* * *
###update (commit) version in sources
bitcoin-qt.pro
contrib/verifysfbinaries/verify.sh
doc/README*
share/setup.nsi
src/clientversion.h (change CLIENT_VERSION_IS_RELEASE to true)
###tag version in git
git tag -a v0.8.0
###write release notes. git shortlog helps a lot, for example:
git shortlog --no-merges v0.7.2..v0.8.0
* * *
##perform gitian builds
From a directory containing the bitcoin source, gitian-builder and gitian.sigs
export SIGNER=(your gitian key, ie bluematt, sipa, etc)
export VERSION=0.8.0
cd ./gitian-builder
Fetch and build inputs: (first time, or when dependency versions change)
mkdir -p inputs; cd inputs/
wget 'http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.6.tar.gz' -O miniupnpc-1.6.tar.gz
wget 'http://www.openssl.org/source/openssl-1.0.1c.tar.gz'
wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
wget 'http://zlib.net/zlib-1.2.6.tar.gz'
wget 'ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.5.9.tar.gz'
wget 'http://fukuchi.org/works/qrencode/qrencode-3.2.0.tar.bz2'
wget 'http://downloads.sourceforge.net/project/boost/boost/1.50.0/boost_1_50_0.tar.bz2'
wget 'http://releases.qt-project.org/qt4/source/qt-everywhere-opensource-src-4.8.3.tar.gz'
cd ..
./bin/gbuild ../bitcoin/contrib/gitian-descriptors/boost-win32.yml
mv build/out/boost-win32-1.50.0-gitian2.zip inputs/
./bin/gbuild ../bitcoin/contrib/gitian-descriptors/qt-win32.yml
mv build/out/qt-win32-4.8.3-gitian-r1.zip inputs/
./bin/gbuild ../bitcoin/contrib/gitian-descriptors/deps-win32.yml
mv build/out/bitcoin-deps-0.0.5.zip inputs/
Build bitcoind and bitcoin-qt on Linux32, Linux64, and Win32:
./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian.yml
./bin/gsign --signer $SIGNER --release ${VERSION} --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian.yml
pushd build/out
zip -r bitcoin-${VERSION}-linux-gitian.zip *
mv bitcoin-${VERSION}-linux-gitian.zip ../../
popd
./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-win32.yml
./bin/gsign --signer $SIGNER --release ${VERSION}-win32 --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-win32.yml
pushd build/out
zip -r bitcoin-${VERSION}-win32-gitian.zip *
mv bitcoin-${VERSION}-win32-gitian.zip ../../
popd
Build output expected:
1. linux 32-bit and 64-bit binaries + source (bitcoin-${VERSION}-linux-gitian.zip)
2. windows 32-bit binary, installer + source (bitcoin-${VERSION}-win32-gitian.zip)
3. Gitian signatures (in gitian.sigs/${VERSION}[-win32]/(your gitian key)/
repackage gitian builds for release as stand-alone zip/tar/installer exe
**Linux .tar.gz:**
unzip bitcoin-${VERSION}-linux-gitian.zip -d bitcoin-${VERSION}-linux
tar czvf bitcoin-${VERSION}-linux.tar.gz bitcoin-${VERSION}-linux
rm -rf bitcoin-${VERSION}-linux
**Windows .zip and setup.exe:**
unzip bitcoin-${VERSION}-win32-gitian.zip -d bitcoin-${VERSION}-win32
mv bitcoin-${VERSION}-win32/bitcoin-*-setup.exe .
zip -r bitcoin-${VERSION}-win32.zip bitcoin-${VERSION}-win32
rm -rf bitcoin-${VERSION}-win32
**Perform Mac build:**
OSX binaries are created by Gavin Andresen on a 32-bit, OSX 10.6 machine.
qmake RELEASE=1 USE_UPNP=1 USE_QRCODE=1 bitcoin-qt.pro
make
export QTDIR=/opt/local/share/qt4 # needed to find translations/qt_*.qm files
T=$(contrib/qt_translations.py $QTDIR/translations src/qt/locale)
python2.7 share/qt/clean_mac_info_plist.py
python2.7 contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -add-qt-tr $T -dmg -fancy contrib/macdeploy/fancy.plist
Build output expected: Bitcoin-Qt.dmg
###Next steps:
* Code-sign Windows -setup.exe (in a Windows virtual machine) and
OSX Bitcoin-Qt.app (Note: only Gavin has the code-signing keys currently)
* upload builds to SourceForge
* create SHA256SUMS for builds, and PGP-sign it
* update bitcoin.org version
make sure all OS download links go to the right versions
* update forum version
* update wiki download links
* update wiki changelog: [https://en.bitcoin.it/wiki/Changelog](https://en.bitcoin.it/wiki/Changelog)
Commit your signature to gitian.sigs:
pushd gitian.sigs
git add ${VERSION}/${SIGNER}
git add ${VERSION}-win32/${SIGNER}
git commit -a
git push # Assuming you can push to the gitian.sigs tree
popd
-------------------------------------------------------------------------
### After 3 or more people have gitian-built, repackage gitian-signed zips:
From a directory containing bitcoin source, gitian.sigs and gitian zips
export VERSION=0.5.1
mkdir bitcoin-${VERSION}-linux-gitian
pushd bitcoin-${VERSION}-linux-gitian
unzip ../bitcoin-${VERSION}-linux-gitian.zip
mkdir gitian
cp ../bitcoin/contrib/gitian-downloader/*.pgp ./gitian/
for signer in $(ls ../gitian.sigs/${VERSION}/); do
cp ../gitian.sigs/${VERSION}/${signer}/bitcoin-build.assert ./gitian/${signer}-build.assert
cp ../gitian.sigs/${VERSION}/${signer}/bitcoin-build.assert.sig ./gitian/${signer}-build.assert.sig
done
zip -r bitcoin-${VERSION}-linux-gitian.zip *
cp bitcoin-${VERSION}-linux-gitian.zip ../
popd
mkdir bitcoin-${VERSION}-win32-gitian
pushd bitcoin-${VERSION}-win32-gitian
unzip ../bitcoin-${VERSION}-win32-gitian.zip
mkdir gitian
cp ../bitcoin/contrib/gitian-downloader/*.pgp ./gitian/
for signer in $(ls ../gitian.sigs/${VERSION}-win32/); do
cp ../gitian.sigs/${VERSION}-win32/${signer}/bitcoin-build.assert ./gitian/${signer}-build.assert
cp ../gitian.sigs/${VERSION}-win32/${signer}/bitcoin-build.assert.sig ./gitian/${signer}-build.assert.sig
done
zip -r bitcoin-${VERSION}-win32-gitian.zip *
cp bitcoin-${VERSION}-win32-gitian.zip ../
popd
- Upload gitian zips to SourceForge
- Celebrate

View File

@ -1,144 +0,0 @@
* update translations (ping wumpus, Diapolo or tcatm on IRC)
* see https://github.com/bitcoin/bitcoin/blob/master/doc/translation_process.md#syncing-with-transifex
* update (commit) version in sources
bitcoin-qt.pro
contrib/verifysfbinaries/verify.sh
doc/README*
share/setup.nsi
src/clientversion.h (change CLIENT_VERSION_IS_RELEASE to true)
* tag version in git
git tag -a v0.8.0
* write release notes. git shortlog helps a lot, for example:
git shortlog --no-merges v0.7.2..v0.8.0
* perform gitian builds
* From a directory containing the bitcoin source, gitian-builder and gitian.sigs
export SIGNER=(your gitian key, ie bluematt, sipa, etc)
export VERSION=0.8.0
cd ./gitian-builder
* Fetch and build inputs: (first time, or when dependency versions change)
mkdir -p inputs; cd inputs/
wget 'http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.6.tar.gz' -O miniupnpc-1.6.tar.gz
wget 'http://www.openssl.org/source/openssl-1.0.1c.tar.gz'
wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
wget 'http://zlib.net/zlib-1.2.6.tar.gz'
wget 'ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.5.9.tar.gz'
wget 'http://fukuchi.org/works/qrencode/qrencode-3.2.0.tar.bz2'
wget 'http://downloads.sourceforge.net/project/boost/boost/1.50.0/boost_1_50_0.tar.bz2'
wget 'http://releases.qt-project.org/qt4/source/qt-everywhere-opensource-src-4.8.3.tar.gz'
cd ..
./bin/gbuild ../bitcoin/contrib/gitian-descriptors/boost-win32.yml
mv build/out/boost-win32-1.50.0-gitian2.zip inputs/
./bin/gbuild ../bitcoin/contrib/gitian-descriptors/qt-win32.yml
mv build/out/qt-win32-4.8.3-gitian-r1.zip inputs/
./bin/gbuild ../bitcoin/contrib/gitian-descriptors/deps-win32.yml
mv build/out/bitcoin-deps-0.0.5.zip inputs/
* Build bitcoind and bitcoin-qt on Linux32, Linux64, and Win32:
./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian.yml
./bin/gsign --signer $SIGNER --release ${VERSION} --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian.yml
pushd build/out
zip -r bitcoin-${VERSION}-linux-gitian.zip *
mv bitcoin-${VERSION}-linux-gitian.zip ../../
popd
./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-win32.yml
./bin/gsign --signer $SIGNER --release ${VERSION}-win32 --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-win32.yml
pushd build/out
zip -r bitcoin-${VERSION}-win32-gitian.zip *
mv bitcoin-${VERSION}-win32-gitian.zip ../../
popd
Build output expected:
1. linux 32-bit and 64-bit binaries + source (bitcoin-${VERSION}-linux-gitian.zip)
2. windows 32-bit binary, installer + source (bitcoin-${VERSION}-win32-gitian.zip)
3. Gitian signatures (in gitian.sigs/${VERSION}[-win32]/(your gitian key)/
* repackage gitian builds for release as stand-alone zip/tar/installer exe
* Linux .tar.gz:
unzip bitcoin-${VERSION}-linux-gitian.zip -d bitcoin-${VERSION}-linux
tar czvf bitcoin-${VERSION}-linux.tar.gz bitcoin-${VERSION}-linux
rm -rf bitcoin-${VERSION}-linux
* Windows .zip and setup.exe:
unzip bitcoin-${VERSION}-win32-gitian.zip -d bitcoin-${VERSION}-win32
mv bitcoin-${VERSION}-win32/bitcoin-*-setup.exe .
zip -r bitcoin-${VERSION}-win32.zip bitcoin-${VERSION}-win32
rm -rf bitcoin-${VERSION}-win32
* perform Mac build
OSX binaries are created by Gavin Andresen on a 32-bit, OSX 10.6 machine.
qmake RELEASE=1 USE_UPNP=1 USE_QRCODE=1 bitcoin-qt.pro
make
export QTDIR=/opt/local/share/qt4 # needed to find translations/qt_*.qm files
T=$(contrib/qt_translations.py $QTDIR/translations src/qt/locale)
python2.7 share/qt/clean_mac_info_plist.py
python2.7 contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -add-qt-tr $T -dmg -fancy contrib/macdeploy/fancy.plist
Build output expected:
Bitcoin-Qt.dmg
* Code-sign Windows -setup.exe (in a Windows virtual machine) and
OSX Bitcoin-Qt.app (Note: only Gavin has the code-signing keys currently)
* upload builds to SourceForge
* create SHA256SUMS for builds, and PGP-sign it
* update bitcoin.org version
make sure all OS download links go to the right versions
* update forum version
* update wiki download links
* update wiki changelog: https://en.bitcoin.it/wiki/Changelog
* Commit your signature to gitian.sigs:
pushd gitian.sigs
git add ${VERSION}/${SIGNER}
git add ${VERSION}-win32/${SIGNER}
git commit -a
git push # Assuming you can push to the gitian.sigs tree
popd
-------------------------------------------------------------------------
* After 3 or more people have gitian-built, repackage gitian-signed zips:
* From a directory containing bitcoin source, gitian.sigs and gitian zips
export VERSION=0.5.1
mkdir bitcoin-${VERSION}-linux-gitian
pushd bitcoin-${VERSION}-linux-gitian
unzip ../bitcoin-${VERSION}-linux-gitian.zip
mkdir gitian
cp ../bitcoin/contrib/gitian-downloader/*.pgp ./gitian/
for signer in $(ls ../gitian.sigs/${VERSION}/); do
cp ../gitian.sigs/${VERSION}/${signer}/bitcoin-build.assert ./gitian/${signer}-build.assert
cp ../gitian.sigs/${VERSION}/${signer}/bitcoin-build.assert.sig ./gitian/${signer}-build.assert.sig
done
zip -r bitcoin-${VERSION}-linux-gitian.zip *
cp bitcoin-${VERSION}-linux-gitian.zip ../
popd
mkdir bitcoin-${VERSION}-win32-gitian
pushd bitcoin-${VERSION}-win32-gitian
unzip ../bitcoin-${VERSION}-win32-gitian.zip
mkdir gitian
cp ../bitcoin/contrib/gitian-downloader/*.pgp ./gitian/
for signer in $(ls ../gitian.sigs/${VERSION}-win32/); do
cp ../gitian.sigs/${VERSION}-win32/${signer}/bitcoin-build.assert ./gitian/${signer}-build.assert
cp ../gitian.sigs/${VERSION}-win32/${signer}/bitcoin-build.assert.sig ./gitian/${signer}-build.assert.sig
done
zip -r bitcoin-${VERSION}-win32-gitian.zip *
cp bitcoin-${VERSION}-win32-gitian.zip ../
popd
* Upload gitian zips to SourceForge

View File

@ -1,18 +1,19 @@
Compiling/running bitcoind unit tests Compiling/running bitcoind unit tests
------------------------------------ ------------------------------------
bitcoind unit tests are in the src/test/ directory; they bitcoind unit tests are in the `src/test/` directory; they
use the Boost::Test unit-testing framework. use the Boost::Test unit-testing framework.
To compile and run the tests: To compile and run the tests:
cd src
make -f makefile.unix test_bitcoin # Replace makefile.unix if you're not on unix cd src
./test_bitcoin # Runs the unit tests make -f makefile.unix test_bitcoin # Replace makefile.unix if you're not on unix
./test_bitcoin # Runs the unit tests
If all tests succeed the last line of output will be: If all tests succeed the last line of output will be:
*** No errors detected `*** No errors detected`
To add more tests, add BOOST_AUTO_TEST_CASE functions to the existing To add more tests, add `BOOST_AUTO_TEST_CASE` functions to the existing
.cpp files in the test/ directory or add new .cpp files that .cpp files in the test/ directory or add new .cpp files that
implement new BOOST_AUTO_TEST_SUITE sections (the makefiles are implement new BOOST_AUTO_TEST_SUITE sections (the makefiles are
set up to add test/*.cpp to test_bitcoin automatically). set up to add test/*.cpp to test_bitcoin automatically).
@ -25,9 +26,10 @@ Bitcoin-Qt unit tests are in the src/qt/test/ directory; they
use the Qt unit-testing framework. use the Qt unit-testing framework.
To compile and run the tests: To compile and run the tests:
qmake bitcoin-qt.pro BITCOIN_QT_TEST=1
make
./bitcoin-qt_test
To add more tests, add them to the src/qt/test/ directory, qmake bitcoin-qt.pro BITCOIN_QT_TEST=1
the src/qt/test/test_main.cpp file, and bitcoin-qt.pro. make
./bitcoin-qt_test
To add more tests, add them to the `src/qt/test/` directory,
the `src/qt/test/test_main.cpp` file, and bitcoin-qt.pro.