Implement a hard fork for extended/infinite claim expiration times #112
369 changed files with 3021 additions and 2447 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -111,3 +111,5 @@ qa/pull-tester/test.*/*
|
||||||
!src/leveldb*/Makefile
|
!src/leveldb*/Makefile
|
||||||
|
|
||||||
/doc/doxygen/
|
/doc/doxygen/
|
||||||
|
|
||||||
|
libbitcoinconsensus.pc
|
||||||
|
|
|
@ -33,7 +33,7 @@ matrix:
|
||||||
- compiler: ": 32-bit + dash"
|
- compiler: ": 32-bit + dash"
|
||||||
env: HOST=i686-pc-linux-gnu PACKAGES="g++-multilib bc" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-glibc-back-compat" USE_SHELL="/bin/dash"
|
env: HOST=i686-pc-linux-gnu PACKAGES="g++-multilib bc" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-glibc-back-compat" USE_SHELL="/bin/dash"
|
||||||
- compiler: ": Cross-Mac"
|
- compiler: ": Cross-Mac"
|
||||||
env: HOST=x86_64-apple-darwin11 PACKAGES="gcc-multilib g++-multilib cmake libcap-dev libz-dev libbz2-dev" OSX_SDK=10.7 GOAL="deploy"
|
env: HOST=x86_64-apple-darwin11 PACKAGES="cmake libcap-dev libz-dev libbz2-dev" OSX_SDK=10.7 GOAL="deploy"
|
||||||
- compiler: ": Win64"
|
- compiler: ": Win64"
|
||||||
env: HOST=x86_64-w64-mingw32 PACKAGES="nsis gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 binutils-mingw-w64-x86-64 mingw-w64-dev wine bc" RUN_TESTS=true GOAL="deploy" BITCOIN_CONFIG="--enable-gui" MAKEJOBS="-j2"
|
env: HOST=x86_64-w64-mingw32 PACKAGES="nsis gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 binutils-mingw-w64-x86-64 mingw-w64-dev wine bc" RUN_TESTS=true GOAL="deploy" BITCOIN_CONFIG="--enable-gui" MAKEJOBS="-j2"
|
||||||
- compiler: ": Win32"
|
- compiler: ": Win32"
|
||||||
|
|
2
COPYING
2
COPYING
|
@ -1,4 +1,4 @@
|
||||||
Copyright (c) 2009-2014 Bitcoin Developers
|
Copyright (c) 2009-2015 Bitcoin Developers
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
|
@ -4,6 +4,11 @@ SUBDIRS = src
|
||||||
|
|
||||||
GZIP_ENV="-9n"
|
GZIP_ENV="-9n"
|
||||||
|
|
||||||
|
if BUILD_BITCOIN_LIBS
|
||||||
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
|
pkgconfig_DATA = libbitcoinconsensus.pc
|
||||||
|
endif
|
||||||
|
|
||||||
BITCOIND_BIN=$(top_builddir)/src/bitcoind$(EXEEXT)
|
BITCOIND_BIN=$(top_builddir)/src/bitcoind$(EXEEXT)
|
||||||
BITCOIN_QT_BIN=$(top_builddir)/src/qt/bitcoin-qt$(EXEEXT)
|
BITCOIN_QT_BIN=$(top_builddir)/src/qt/bitcoin-qt$(EXEEXT)
|
||||||
BITCOIN_CLI_BIN=$(top_builddir)/src/bitcoin-cli$(EXEEXT)
|
BITCOIN_CLI_BIN=$(top_builddir)/src/bitcoin-cli$(EXEEXT)
|
||||||
|
|
39
README.md
39
README.md
|
@ -5,8 +5,6 @@ Bitcoin Core integration/staging tree
|
||||||
|
|
||||||
https://www.bitcoin.org
|
https://www.bitcoin.org
|
||||||
|
|
||||||
Copyright (c) 2009-2014 Bitcoin Core Developers
|
|
||||||
|
|
||||||
What is Bitcoin?
|
What is Bitcoin?
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
|
@ -40,7 +38,7 @@ submitter will be asked to start a discussion (if they haven't already) on the
|
||||||
|
|
||||||
The patch will be accepted if there is broad consensus that it is a good thing.
|
The patch will be accepted if there is broad consensus that it is a good thing.
|
||||||
Developers should expect to rework and resubmit patches if the code doesn't
|
Developers should expect to rework and resubmit patches if the code doesn't
|
||||||
match the project's coding conventions (see [doc/coding.md](doc/coding.md)) or are
|
match the project's coding conventions (see [doc/developer-notes.md](doc/developer-notes.md)) or are
|
||||||
controversial.
|
controversial.
|
||||||
|
|
||||||
The `master` branch is regularly built and tested, but is not guaranteed to be
|
The `master` branch is regularly built and tested, but is not guaranteed to be
|
||||||
|
@ -85,38 +83,3 @@ Translations are periodically pulled from Transifex and merged into the git repo
|
||||||
pull from Transifex would automatically overwrite them again.
|
pull from Transifex would automatically overwrite them again.
|
||||||
|
|
||||||
Translators should also subscribe to the [mailing list](https://groups.google.com/forum/#!forum/bitcoin-translators).
|
Translators should also subscribe to the [mailing list](https://groups.google.com/forum/#!forum/bitcoin-translators).
|
||||||
|
|
||||||
Development tips and tricks
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
**compiling for debugging**
|
|
||||||
|
|
||||||
Run configure with the --enable-debug option, then make. Or run configure with
|
|
||||||
CXXFLAGS="-g -ggdb -O0" or whatever debug flags you need.
|
|
||||||
|
|
||||||
**debug.log**
|
|
||||||
|
|
||||||
If the code is behaving strangely, take a look in the debug.log file in the data directory;
|
|
||||||
error and debugging messages are written there.
|
|
||||||
|
|
||||||
The -debug=... command-line option controls debugging; running with just -debug will turn
|
|
||||||
on all categories (and give you a very large debug.log file).
|
|
||||||
|
|
||||||
The Qt code routes qDebug() output to debug.log under category "qt": run with -debug=qt
|
|
||||||
to see it.
|
|
||||||
|
|
||||||
**testnet and regtest modes**
|
|
||||||
|
|
||||||
Run with the -testnet option to run with "play bitcoins" on the test network, if you
|
|
||||||
are testing multi-machine code that needs to operate across the internet.
|
|
||||||
|
|
||||||
If you are testing something that can run on one machine, run with the -regtest option.
|
|
||||||
In regression test mode, blocks can be created on-demand; see qa/rpc-tests/ for tests
|
|
||||||
that run in -regtest mode.
|
|
||||||
|
|
||||||
**DEBUG_LOCKORDER**
|
|
||||||
|
|
||||||
Bitcoin Core is a multithreaded application, and deadlocks or other multithreading bugs
|
|
||||||
can be very difficult to track down. Compiling with -DDEBUG_LOCKORDER (configure
|
|
||||||
CXXFLAGS="-DDEBUG_LOCKORDER -g") inserts run-time checks to keep track of which locks
|
|
||||||
are held, and adds warnings to the debug.log file if inconsistencies are detected.
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ define(_CLIENT_VERSION_MINOR, 10)
|
||||||
define(_CLIENT_VERSION_REVISION, 99)
|
define(_CLIENT_VERSION_REVISION, 99)
|
||||||
define(_CLIENT_VERSION_BUILD, 0)
|
define(_CLIENT_VERSION_BUILD, 0)
|
||||||
define(_CLIENT_VERSION_IS_RELEASE, false)
|
define(_CLIENT_VERSION_IS_RELEASE, false)
|
||||||
define(_COPYRIGHT_YEAR, 2014)
|
define(_COPYRIGHT_YEAR, 2015)
|
||||||
AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[info@bitcoin.org],[bitcoin])
|
AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[info@bitcoin.org],[bitcoin])
|
||||||
AC_CONFIG_SRCDIR([src/main.cpp])
|
AC_CONFIG_SRCDIR([src/main.cpp])
|
||||||
AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
|
AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
|
||||||
|
@ -692,6 +692,7 @@ AC_MSG_CHECKING([whether to build libraries])
|
||||||
AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
|
AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
|
||||||
if test x$build_bitcoin_libs = xyes; then
|
if test x$build_bitcoin_libs = xyes; then
|
||||||
AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
|
AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
|
||||||
|
AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
|
||||||
fi
|
fi
|
||||||
AC_MSG_RESULT($build_bitcoin_libs)
|
AC_MSG_RESULT($build_bitcoin_libs)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# bash programmable completion for bitcoind(1) and bitcoin-cli(1)
|
# bash programmable completion for bitcoind(1) and bitcoin-cli(1)
|
||||||
# Copyright (c) 2012,2014 Christian von Roques <roques@mti.ag>
|
# Copyright (c) 2012,2014 Christian von Roques <roques@mti.ag>
|
||||||
# Distributed under the MIT/X11 software license, see the accompanying
|
# Distributed under the MIT 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.
|
||||||
|
|
||||||
have bitcoind && {
|
have bitcoind && {
|
||||||
|
|
|
@ -44,10 +44,10 @@ If you run this script from src/ it will automatically update the year on the co
|
||||||
.cpp and .h files if these have a git commit from the current year.
|
.cpp and .h files if these have a git commit from the current year.
|
||||||
|
|
||||||
For example a file changed in 2014 (with 2014 being the current year):
|
For example a file changed in 2014 (with 2014 being the current year):
|
||||||
```// Copyright (c) 2009-2013 The Bitcoin developers```
|
```// Copyright (c) 2009-2013 The Bitcoin Core developers```
|
||||||
|
|
||||||
would be changed to:
|
would be changed to:
|
||||||
```// Copyright (c) 2009-2014 The Bitcoin developers```
|
```// Copyright (c) 2009-2014 The Bitcoin Core developers```
|
||||||
|
|
||||||
symbol-check.py
|
symbol-check.py
|
||||||
==================
|
==================
|
||||||
|
|
|
@ -7,11 +7,11 @@ a perl regex one liner.
|
||||||
|
|
||||||
For example: if it finds something like this and we're in 2014
|
For example: if it finds something like this and we're in 2014
|
||||||
|
|
||||||
// Copyright (c) 2009-2013 The Bitcoin developers
|
// Copyright (c) 2009-2013 The Bitcoin Core developers
|
||||||
|
|
||||||
it will change it to
|
it will change it to
|
||||||
|
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
|
|
||||||
It will do this for all the files in the folder and its children.
|
It will do this for all the files in the folder and its children.
|
||||||
|
|
||||||
|
|
|
@ -156,12 +156,17 @@ read -p "Press 's' to sign off on the merge. " -n 1 -r >&2
|
||||||
echo
|
echo
|
||||||
if [[ "d$REPLY" =~ ^d[Ss]$ ]]; then
|
if [[ "d$REPLY" =~ ^d[Ss]$ ]]; then
|
||||||
if [[ "$(git config --get user.signingkey)" == "" ]]; then
|
if [[ "$(git config --get user.signingkey)" == "" ]]; then
|
||||||
echo "WARNING: No GPG signing key set, not signing. Set one using:" >&2
|
echo "ERROR: No GPG signing key set, not signing. Set one using:" >&2
|
||||||
echo "git config --global user.signingkey <key>" >&2
|
echo "git config --global user.signingkey <key>" >&2
|
||||||
git commit -q --signoff --amend --no-edit
|
cleanup
|
||||||
|
exit 1
|
||||||
else
|
else
|
||||||
git commit -q --gpg-sign --amend --no-edit
|
git commit -q --gpg-sign --amend --no-edit
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
echo "Not signing off on merge, exiting."
|
||||||
|
cleanup
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clean up temporary branches, and put the result in $BRANCH.
|
# Clean up temporary branches, and put the result in $BRANCH.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
# Copyright (c) 2014 Wladimir J. van der Laan
|
# Copyright (c) 2014 Wladimir J. van der Laan
|
||||||
# Distributed under the MIT/X11 software license, see the accompanying
|
# Distributed under the MIT 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.
|
||||||
'''
|
'''
|
||||||
A script to check that the (Linux) executables produced by gitian only contain
|
A script to check that the (Linux) executables produced by gitian only contain
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
# Copyright (c) 2014 Wladimir J. van der Laan
|
# Copyright (c) 2014 Wladimir J. van der Laan
|
||||||
# Distributed under the MIT/X11 software license, see the accompanying
|
# Distributed under the MIT 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.
|
||||||
'''
|
'''
|
||||||
Run this script from the root of the repository to update all translations from
|
Run this script from the root of the repository to update all translations from
|
||||||
|
|
|
@ -79,7 +79,7 @@ script: |
|
||||||
mkdir -p temp
|
mkdir -p temp
|
||||||
pushd temp
|
pushd temp
|
||||||
tar xf ../$SOURCEDIST
|
tar xf ../$SOURCEDIST
|
||||||
find bitcoin-* | sort | tar --no-recursion -c -T - | gzip -9n > ../$SOURCEDIST
|
find bitcoin-* | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ../$SOURCEDIST
|
||||||
popd
|
popd
|
||||||
|
|
||||||
ORIGPATH="$PATH"
|
ORIGPATH="$PATH"
|
||||||
|
@ -99,7 +99,7 @@ script: |
|
||||||
find . -name "lib*.la" -delete
|
find . -name "lib*.la" -delete
|
||||||
find . -name "lib*.a" -delete
|
find . -name "lib*.a" -delete
|
||||||
rm -rf ${DISTNAME}/lib/pkgconfig
|
rm -rf ${DISTNAME}/lib/pkgconfig
|
||||||
find . | sort | tar --no-recursion -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}.tar.gz
|
find . | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}.tar.gz
|
||||||
cd ../../
|
cd ../../
|
||||||
done
|
done
|
||||||
mkdir -p $OUTDIR/src
|
mkdir -p $OUTDIR/src
|
||||||
|
|
|
@ -10,7 +10,7 @@ packages:
|
||||||
reference_datetime: "2013-06-01 00:00:00"
|
reference_datetime: "2013-06-01 00:00:00"
|
||||||
remotes: []
|
remotes: []
|
||||||
files:
|
files:
|
||||||
- "bitcoin-0.9.99-osx-unsigned.tar.gz"
|
- "bitcoin-osx-unsigned.tar.gz"
|
||||||
- "signature.tar.gz"
|
- "signature.tar.gz"
|
||||||
script: |
|
script: |
|
||||||
WRAP_DIR=$HOME/wrapped
|
WRAP_DIR=$HOME/wrapped
|
||||||
|
@ -28,8 +28,8 @@ script: |
|
||||||
chmod +x ${WRAP_DIR}/${prog}
|
chmod +x ${WRAP_DIR}/${prog}
|
||||||
done
|
done
|
||||||
|
|
||||||
UNSIGNED=`echo bitcoin-*.tar.gz`
|
UNSIGNED=bitcoin-osx-unsigned.tar.gz
|
||||||
SIGNED=`echo ${UNSIGNED} | sed 's/.tar.*//' | sed 's/-unsigned//'`.dmg
|
SIGNED=bitcoin-osx-signed.dmg
|
||||||
|
|
||||||
tar -xf ${UNSIGNED}
|
tar -xf ${UNSIGNED}
|
||||||
./detached-sig-apply.sh ${UNSIGNED} signature.tar.gz
|
./detached-sig-apply.sh ${UNSIGNED} signature.tar.gz
|
||||||
|
|
|
@ -6,7 +6,7 @@ suites:
|
||||||
architectures:
|
architectures:
|
||||||
- "amd64"
|
- "amd64"
|
||||||
packages:
|
packages:
|
||||||
- "g++-multilib"
|
- "g++"
|
||||||
- "git-core"
|
- "git-core"
|
||||||
- "pkg-config"
|
- "pkg-config"
|
||||||
- "autoconf2.13"
|
- "autoconf2.13"
|
||||||
|
@ -90,7 +90,7 @@ script: |
|
||||||
mkdir -p temp
|
mkdir -p temp
|
||||||
pushd temp
|
pushd temp
|
||||||
tar xf ../$SOURCEDIST
|
tar xf ../$SOURCEDIST
|
||||||
find bitcoin-* | sort | tar --no-recursion -c -T - | gzip -9n > ../$SOURCEDIST
|
find bitcoin-* | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ../$SOURCEDIST
|
||||||
popd
|
popd
|
||||||
|
|
||||||
ORIGPATH="$PATH"
|
ORIGPATH="$PATH"
|
||||||
|
@ -116,7 +116,7 @@ script: |
|
||||||
cp ${BASEPREFIX}/${i}/native/bin/${i}-pagestuff unsigned-app-${i}/pagestuff
|
cp ${BASEPREFIX}/${i}/native/bin/${i}-pagestuff unsigned-app-${i}/pagestuff
|
||||||
mv dist unsigned-app-${i}
|
mv dist unsigned-app-${i}
|
||||||
pushd unsigned-app-${i}
|
pushd unsigned-app-${i}
|
||||||
find . | sort | tar --no-recursion -czf ${OUTDIR}/${DISTNAME}-osx-unsigned.tar.gz -T -
|
find . | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-osx-unsigned.tar.gz
|
||||||
popd
|
popd
|
||||||
|
|
||||||
make deploy
|
make deploy
|
||||||
|
@ -126,7 +126,7 @@ script: |
|
||||||
find . -name "lib*.la" -delete
|
find . -name "lib*.la" -delete
|
||||||
find . -name "lib*.a" -delete
|
find . -name "lib*.a" -delete
|
||||||
rm -rf ${DISTNAME}/lib/pkgconfig
|
rm -rf ${DISTNAME}/lib/pkgconfig
|
||||||
find . | sort | tar --no-recursion -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}.tar.gz
|
find . | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}.tar.gz
|
||||||
cd ../../
|
cd ../../
|
||||||
done
|
done
|
||||||
mkdir -p $OUTDIR/src
|
mkdir -p $OUTDIR/src
|
||||||
|
|
|
@ -83,7 +83,7 @@ script: |
|
||||||
mkdir -p temp
|
mkdir -p temp
|
||||||
pushd temp
|
pushd temp
|
||||||
tar xf ../$SOURCEDIST
|
tar xf ../$SOURCEDIST
|
||||||
find bitcoin-* | sort | tar --no-recursion -c -T - | gzip -9n > ../$SOURCEDIST
|
find bitcoin-* | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ../$SOURCEDIST
|
||||||
popd
|
popd
|
||||||
|
|
||||||
ORIGPATH="$PATH"
|
ORIGPATH="$PATH"
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
#
|
#
|
||||||
# linearize-data.py: Construct a linear, no-fork version of the chain.
|
# linearize-data.py: Construct a linear, no-fork version of the chain.
|
||||||
#
|
#
|
||||||
# Copyright (c) 2013-2014 The Bitcoin developers
|
# Copyright (c) 2013-2014 The Bitcoin Core developers
|
||||||
# Distributed under the MIT/X11 software license, see the accompanying
|
# Distributed under the MIT 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.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
#
|
#
|
||||||
# linearize-hashes.py: List blocks in a linear, no-fork version of the chain.
|
# linearize-hashes.py: List blocks in a linear, no-fork version of the chain.
|
||||||
#
|
#
|
||||||
# Copyright (c) 2013-2014 The Bitcoin developers
|
# Copyright (c) 2013-2014 The Bitcoin Core developers
|
||||||
# Distributed under the MIT/X11 software license, see the accompanying
|
# Distributed under the MIT 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.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
|
@ -31,8 +31,8 @@ define fetch_file
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define int_get_build_recipe_hash
|
define int_get_build_recipe_hash
|
||||||
$(eval $(1)_all_file_checksums:=$(shell $(build_SHA256SUM) $(meta_depends) packages/$(1).mk $(addprefix $(PATCHES_PATH)/$(1)/,$($(1)_patches))))
|
$(eval $(1)_all_file_checksums:=$(shell $(build_SHA256SUM) $(meta_depends) packages/$(1).mk $(addprefix $(PATCHES_PATH)/$(1)/,$($(1)_patches)) | cut -d" " -f1))
|
||||||
$(eval $(1)_recipe_hash:=$(shell echo -n "$($(1)_all_file_checksums)" | cut -d" " -f1 | $(build_SHA256SUM)))
|
$(eval $(1)_recipe_hash:=$(shell echo -n "$($(1)_all_file_checksums)" | $(build_SHA256SUM) | cut -d" " -f1))
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define int_get_build_id
|
define int_get_build_id
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
OSX_MIN_VERSION=10.6
|
OSX_MIN_VERSION=10.6
|
||||||
OSX_SDK_VERSION=10.7
|
OSX_SDK_VERSION=10.7
|
||||||
OSX_SDK=$(SDK_PATH)/MacOSX$(OSX_SDK_VERSION).sdk
|
OSX_SDK=$(SDK_PATH)/MacOSX$(OSX_SDK_VERSION).sdk
|
||||||
darwin_CC=clang -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK)
|
LD64_VERSION=241.9
|
||||||
darwin_CXX=clang++ -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK)
|
darwin_CC=clang -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION)
|
||||||
|
darwin_CXX=clang++ -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION)
|
||||||
|
|
||||||
darwin_CFLAGS=-pipe
|
darwin_CFLAGS=-pipe
|
||||||
darwin_CXXFLAGS=$(darwin_CFLAGS)
|
darwin_CXXFLAGS=$(darwin_CFLAGS)
|
||||||
|
|
|
@ -1,61 +1,37 @@
|
||||||
package=native_cctools
|
package=native_cctools
|
||||||
$(package)_version=809
|
$(package)_version=ee31ae567931c426136c94aad457c7b51d844beb
|
||||||
$(package)_download_path=http://www.opensource.apple.com/tarballs/cctools
|
$(package)_download_path=https://github.com/theuni/cctools-port/archive
|
||||||
$(package)_file_name=cctools-$($(package)_version).tar.gz
|
$(package)_file_name=$($(package)_version).tar.gz
|
||||||
$(package)_sha256_hash=03ba62749b843b131c7304a044a98c6ffacd65b1399b921d69add0375f79d8ad
|
$(package)_sha256_hash=ef107e6ab1b3994cb22e14f4f5c59ea0c0b5a988e6b21d42ed9616b018bbcbf9
|
||||||
$(package)_build_subdir=cctools2odcctools/odcctools-$($(package)_version)
|
$(package)_build_subdir=cctools
|
||||||
$(package)_dependencies=native_libuuid native_openssl
|
$(package)_clang_version=3.3
|
||||||
$(package)_ld64_download_file=ld64-127.2.tar.gz
|
$(package)_clang_download_path=http://llvm.org/releases/$($(package)_clang_version)
|
||||||
$(package)_ld64_download_path=http://www.opensource.apple.com/tarballs/ld64
|
$(package)_clang_download_file=clang+llvm-$($(package)_clang_version)-amd64-Ubuntu-12.04.2.tar.gz
|
||||||
$(package)_ld64_file_name=$($(package)_ld64_download_file)
|
$(package)_clang_file_name=clang-llvm-$($(package)_clang_version)-amd64-Ubuntu-12.04.2.tar.gz
|
||||||
$(package)_ld64_sha256_hash=97b75547b2bd761306ab3e15ae297f01e7ab9760b922bc657f4ef72e4e052142
|
$(package)_clang_sha256_hash=60d8f69f032d62ef61bf527857ebb933741ec3352d4d328c5516aa520662dab7
|
||||||
$(package)_dyld_download_file=dyld-195.5.tar.gz
|
|
||||||
$(package)_dyld_download_path=http://www.opensource.apple.com/tarballs/dyld
|
|
||||||
$(package)_dyld_file_name=$($(package)_dyld_download_file)
|
|
||||||
$(package)_dyld_sha256_hash=2cf0484c87cf79b606b351a7055a247dae84093ae92c747a74e0cde2c8c8f83c
|
|
||||||
$(package)_toolchain4_download_file=10cc648683617cca8bcbeae507888099b41b530c.tar.gz
|
|
||||||
$(package)_toolchain4_download_path=https://github.com/mingwandroid/toolchain4/archive
|
|
||||||
$(package)_toolchain4_file_name=toolchain4-1.tar.gz
|
|
||||||
$(package)_toolchain4_sha256_hash=18406961fd4a1ec5c7ea35c91d6a80a2f8bb797a2bd243a610bd75e13eff9aca
|
|
||||||
$(package)_clang_download_file=clang+llvm-3.2-x86-linux-ubuntu-12.04.tar.gz
|
|
||||||
$(package)_clang_download_path=http://llvm.org/releases/3.2
|
|
||||||
$(package)_clang_file_name=clang-llvm-3.2-x86-linux-ubuntu-12.04.tar.gz
|
|
||||||
$(package)_clang_sha256_hash=b9d57a88f9514fa1f327a1a703756d0c1c960f4c58494a5bd80313245d13ffff
|
|
||||||
|
|
||||||
define $(package)_fetch_cmds
|
define $(package)_fetch_cmds
|
||||||
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_file),$($(package)_file_name),$($(package)_sha256_hash)) && \
|
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_file),$($(package)_file_name),$($(package)_sha256_hash)) && \
|
||||||
$(call fetch_file,$(package),$($(package)_ld64_download_path),$($(package)_ld64_download_file),$($(package)_ld64_file_name),$($(package)_ld64_sha256_hash)) && \
|
$(call fetch_file,$(package),$($(package)_clang_download_path),$($(package)_clang_download_file),$($(package)_clang_file_name),$($(package)_clang_sha256_hash))
|
||||||
$(call fetch_file,$(package),$($(package)_dyld_download_path),$($(package)_dyld_download_file),$($(package)_dyld_file_name),$($(package)_dyld_sha256_hash)) && \
|
endef
|
||||||
$(call fetch_file,$(package),$($(package)_clang_download_path),$($(package)_clang_download_file),$($(package)_clang_file_name),$($(package)_clang_sha256_hash)) && \
|
|
||||||
$(call fetch_file,$(package),$($(package)_toolchain4_download_path),$($(package)_toolchain4_download_file),$($(package)_toolchain4_file_name),$($(package)_toolchain4_sha256_hash))
|
define $(package)_extract_cmds
|
||||||
|
mkdir -p toolchain/bin toolchain/lib/clang/3.5/include && \
|
||||||
|
tar --strip-components=1 -C toolchain -xf $($(package)_source_dir)/$($(package)_clang_file_name) && \
|
||||||
|
echo "#!/bin/sh" > toolchain/bin/$(host)-dsymutil && \
|
||||||
|
echo "exit 0" >> toolchain/bin/$(host)-dsymutil && \
|
||||||
|
chmod +x toolchain/bin/$(host)-dsymutil && \
|
||||||
|
tar --strip-components=1 -xf $($(package)_source)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define $(package)_set_vars
|
define $(package)_set_vars
|
||||||
$(package)_config_opts=--target=$(host) --with-sysroot=$(OSX_SDK)
|
$(package)_config_opts=--target=$(host) --disable-libuuid
|
||||||
$(package)_cflags+=-m32
|
$(package)_ldflags+=-Wl,-rpath=\\$$$$$$$$\$$$$$$$$ORIGIN/../lib
|
||||||
$(package)_cxxflags+=-m32
|
$(package)_cc=$($(package)_extract_dir)/toolchain/bin/clang
|
||||||
$(package)_cppflags+=-D__DARWIN_UNIX03 -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS
|
$(package)_cxx=$($(package)_extract_dir)/toolchain/bin/clang++
|
||||||
$(package)_ldflags+=-m32 -Wl,-rpath=\\$$$$$$$$\$$$$$$$$ORIGIN/../lib
|
|
||||||
$(package)_ldflags+=-L$$(native_cctools_extract_dir)/clang+llvm-3.2-x86-linux-ubuntu-12.04/lib
|
|
||||||
endef
|
|
||||||
define $(package)_extract_cmds
|
|
||||||
tar --strip-components=1 -xf $($(package)_source_dir)/$($(package)_toolchain4_file_name) && \
|
|
||||||
ln -sf $($(package)_source) cctools2odcctools/$($(package)_file_name) && \
|
|
||||||
ln -sf $($(package)_source_dir)/$($(package)_ld64_file_name) cctools2odcctools/$($(package)_ld64_file_name) && \
|
|
||||||
ln -sf $($(package)_source_dir)/$($(package)_dyld_file_name) cctools2odcctools/$($(package)_dyld_file_name) && \
|
|
||||||
tar xf $($(package)_source_dir)/$($(package)_clang_file_name) && \
|
|
||||||
mkdir -p $(SDK_PATH) sdks &&\
|
|
||||||
cd sdks; ln -sf $(OSX_SDK) MacOSX$(OSX_SDK_VERSION).sdk
|
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define $(package)_preprocess_cmds
|
define $(package)_preprocess_cmds
|
||||||
sed -i "s|GCC_DIR|LLVM_CLANG_DIR|g" cctools2odcctools/extract.sh && \
|
cd $($(package)_build_subdir); ./autogen.sh
|
||||||
sed -i "s|llvmgcc42-2336.1|clang+llvm-3.2-x86-linux-ubuntu-12.04|g" cctools2odcctools/extract.sh && \
|
|
||||||
sed -i "s|/llvmCore/include/llvm-c|/include/llvm-c \$$$${LLVM_CLANG_DIR}/include/llvm |" cctools2odcctools/extract.sh && \
|
|
||||||
sed -i "s|fAC_INIT|AC_INIT|" cctools2odcctools/files/configure.ac && \
|
|
||||||
sed -i 's/\# Dynamically linked LTO/\t ;\&\n\t linux*)\n# Dynamically linked LTO/' cctools2odcctools/files/configure.ac && \
|
|
||||||
cd cctools2odcctools; ./extract.sh --osxver $(OSX_SDK_VERSION) && \
|
|
||||||
sed -i "s|define\tPC|define\tPC_|" odcctools-809/include/architecture/sparc/reg.h
|
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define $(package)_config_cmds
|
define $(package)_config_cmds
|
||||||
|
@ -68,13 +44,13 @@ endef
|
||||||
|
|
||||||
define $(package)_stage_cmds
|
define $(package)_stage_cmds
|
||||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install && \
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install && \
|
||||||
cd ../../clang+llvm-3.2-x86-linux-ubuntu-12.04 && \
|
cd $($(package)_extract_dir)/toolchain && \
|
||||||
mkdir -p $($(package)_staging_prefix_dir)/lib/clang/3.2/include && \
|
mkdir -p $($(package)_staging_prefix_dir)/lib/clang/$($(package)_clang_version)/include && \
|
||||||
mkdir -p $($(package)_staging_prefix_dir)/bin && \
|
mkdir -p $($(package)_staging_prefix_dir)/bin $($(package)_staging_prefix_dir)/include && \
|
||||||
cp -P bin/clang bin/clang++ $($(package)_staging_prefix_dir)/bin/ &&\
|
cp -P bin/clang bin/clang++ $($(package)_staging_prefix_dir)/bin/ &&\
|
||||||
cp lib/libLTO.so $($(package)_staging_prefix_dir)/lib/ && \
|
cp lib/libLTO.so $($(package)_staging_prefix_dir)/lib/ && \
|
||||||
cp lib/clang/3.2/include/* $($(package)_staging_prefix_dir)/lib/clang/3.2/include/ && \
|
cp -rf lib/clang/$($(package)_clang_version)/include/* $($(package)_staging_prefix_dir)/lib/clang/$($(package)_clang_version)/include/ && \
|
||||||
echo "#!/bin/sh" > $($(package)_staging_prefix_dir)/bin/$(host)-dsymutil && \
|
cp bin/$(host)-dsymutil $($(package)_staging_prefix_dir)/bin && \
|
||||||
echo "exit 0" >> $($(package)_staging_prefix_dir)/bin/$(host)-dsymutil && \
|
if `test -d include/c++/`; then cp -rf include/c++/ $($(package)_staging_prefix_dir)/include/; fi && \
|
||||||
chmod +x $($(package)_staging_prefix_dir)/bin/$(host)-dsymutil
|
if `test -d lib/c++/`; then cp -rf lib/c++/ $($(package)_staging_prefix_dir)/lib/; fi
|
||||||
endef
|
endef
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
package:=native_libuuid
|
|
||||||
$(package)_version=1.41.14
|
|
||||||
$(package)_download_path=http://downloads.sourceforge.net/e2fsprogs
|
|
||||||
$(package)_file_name=e2fsprogs-libs-$($(package)_version).tar.gz
|
|
||||||
$(package)_sha256_hash=dbc7a138a3218d9b80a0626b5b692d76934d6746d8cbb762751be33785d8d9f5
|
|
||||||
|
|
||||||
define $(package)_set_vars
|
|
||||||
$(package)_config_opts=--disable-elf-shlibs --disable-uuidd
|
|
||||||
$(package)_cflags+=-m32
|
|
||||||
$(package)_ldflags+=-m32
|
|
||||||
$(package)_cxxflags+=-m32
|
|
||||||
endef
|
|
||||||
|
|
||||||
define $(package)_config_cmds
|
|
||||||
$($(package)_autoconf)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define $(package)_build_cmds
|
|
||||||
$(MAKE) -C lib/uuid
|
|
||||||
endef
|
|
||||||
|
|
||||||
define $(package)_stage_cmds
|
|
||||||
$(MAKE) DESTDIR=$($(package)_staging_dir) -C lib/uuid install
|
|
||||||
endef
|
|
|
@ -1,21 +0,0 @@
|
||||||
package=native_openssl
|
|
||||||
$(package)_version=1.0.1h
|
|
||||||
$(package)_download_path=https://www.openssl.org/source
|
|
||||||
$(package)_file_name=openssl-$($(package)_version).tar.gz
|
|
||||||
$(package)_sha256_hash=9d1c8a9836aa63e2c6adb684186cbd4371c9e9dcc01d6e3bb447abf2d4d3d093
|
|
||||||
define $(package)_set_vars
|
|
||||||
$(package)_build_config_opts= --prefix=$(build_prefix) no-zlib no-shared no-krb5C linux-generic32 -m32
|
|
||||||
endef
|
|
||||||
|
|
||||||
define $(package)_config_cmds
|
|
||||||
./Configure $($(package)_build_config_opts) &&\
|
|
||||||
sed -i "s|engines apps test|engines|" Makefile
|
|
||||||
endef
|
|
||||||
|
|
||||||
define $(package)_build_cmds
|
|
||||||
$(MAKE) -j1
|
|
||||||
endef
|
|
||||||
|
|
||||||
define $(package)_stage_cmds
|
|
||||||
$(MAKE) INSTALL_PREFIX=$($(package)_staging_dir) -j1 install_sw
|
|
||||||
endef
|
|
|
@ -14,6 +14,9 @@ $(package)_config_opts_linux=-fPIC
|
||||||
$(package)_config_opts_x86_64_linux=linux-x86_64
|
$(package)_config_opts_x86_64_linux=linux-x86_64
|
||||||
$(package)_config_opts_i686_linux=linux-generic32
|
$(package)_config_opts_i686_linux=linux-generic32
|
||||||
$(package)_config_opts_arm_linux=linux-generic32
|
$(package)_config_opts_arm_linux=linux-generic32
|
||||||
|
$(package)_config_opts_aarch64_linux=linux-generic64
|
||||||
|
$(package)_config_opts_mipsel_linux=linux-generic32
|
||||||
|
$(package)_config_opts_mips_linux=linux-generic32
|
||||||
$(package)_config_opts_x86_64_darwin=darwin64-x86_64-cc
|
$(package)_config_opts_x86_64_darwin=darwin64-x86_64-cc
|
||||||
$(package)_config_opts_x86_64_mingw32=mingw64
|
$(package)_config_opts_x86_64_mingw32=mingw64
|
||||||
$(package)_config_opts_i686_mingw32=mingw
|
$(package)_config_opts_i686_mingw32=mingw
|
||||||
|
|
|
@ -19,5 +19,5 @@ wallet_packages=bdb
|
||||||
upnp_packages=miniupnpc
|
upnp_packages=miniupnpc
|
||||||
|
|
||||||
ifneq ($(build_os),darwin)
|
ifneq ($(build_os),darwin)
|
||||||
darwin_native_packages=native_libuuid native_openssl native_cctools native_cdrkit native_libdmg-hfsplus
|
darwin_native_packages=native_cctools native_cdrkit native_libdmg-hfsplus
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -7,7 +7,7 @@ $(package)_dependencies=openssl
|
||||||
$(package)_linux_dependencies=freetype fontconfig dbus libxcb libX11 xproto libXext
|
$(package)_linux_dependencies=freetype fontconfig dbus libxcb libX11 xproto libXext
|
||||||
$(package)_build_subdir=qtbase
|
$(package)_build_subdir=qtbase
|
||||||
$(package)_qt_libs=corelib network widgets gui plugins testlib
|
$(package)_qt_libs=corelib network widgets gui plugins testlib
|
||||||
$(package)_patches=mac-qmake.conf fix-xcb-include-order.patch qt5-tablet-osx.patch
|
$(package)_patches=mac-qmake.conf fix-xcb-include-order.patch qt5-tablet-osx.patch qt5-yosemite.patch
|
||||||
|
|
||||||
define $(package)_set_vars
|
define $(package)_set_vars
|
||||||
$(package)_config_opts_release = -release
|
$(package)_config_opts_release = -release
|
||||||
|
@ -34,7 +34,7 @@ $(package)_config_opts += -qt-libpng -qt-libjpeg -qt-zlib -qt-pcre
|
||||||
|
|
||||||
ifneq ($(build_os),darwin)
|
ifneq ($(build_os),darwin)
|
||||||
$(package)_config_opts_darwin = -xplatform macx-clang-linux -device-option MAC_SDK_PATH=$(OSX_SDK) -device-option CROSS_COMPILE="$(host)-"
|
$(package)_config_opts_darwin = -xplatform macx-clang-linux -device-option MAC_SDK_PATH=$(OSX_SDK) -device-option CROSS_COMPILE="$(host)-"
|
||||||
$(package)_config_opts_darwin += -device-option MAC_MIN_VERSION=$(OSX_MIN_VERSION) -device-option MAC_TARGET=$(host)
|
$(package)_config_opts_darwin += -device-option MAC_MIN_VERSION=$(OSX_MIN_VERSION) -device-option MAC_TARGET=$(host) -device-option MAC_LD64_VERSION=$(LD64_VERSION)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(package)_config_opts_linux = -qt-xkbcommon -qt-xcb -no-eglfs -no-linuxfb -system-freetype -no-sm -fontconfig -no-xinput2 -no-libudev -no-egl -no-opengl
|
$(package)_config_opts_linux = -qt-xkbcommon -qt-xcb -no-eglfs -no-linuxfb -system-freetype -no-sm -fontconfig -no-xinput2 -no-libudev -no-egl -no-opengl
|
||||||
|
@ -56,6 +56,7 @@ define $(package)_preprocess_cmds
|
||||||
cp -f $($(package)_patch_dir)/mac-qmake.conf qtbase/mkspecs/macx-clang-linux/qmake.conf && \
|
cp -f $($(package)_patch_dir)/mac-qmake.conf qtbase/mkspecs/macx-clang-linux/qmake.conf && \
|
||||||
patch -p1 < $($(package)_patch_dir)/fix-xcb-include-order.patch && \
|
patch -p1 < $($(package)_patch_dir)/fix-xcb-include-order.patch && \
|
||||||
patch -p1 < $($(package)_patch_dir)/qt5-tablet-osx.patch && \
|
patch -p1 < $($(package)_patch_dir)/qt5-tablet-osx.patch && \
|
||||||
|
patch -d qtbase -p1 < $($(package)_patch_dir)/qt5-yosemite.patch && \
|
||||||
echo "QMAKE_CFLAGS += $($(package)_cflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
echo "QMAKE_CFLAGS += $($(package)_cflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
||||||
echo "QMAKE_CXXFLAGS += $($(package)_cxxflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
echo "QMAKE_CXXFLAGS += $($(package)_cxxflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
||||||
echo "QMAKE_LFLAGS += $($(package)_ldflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
echo "QMAKE_LFLAGS += $($(package)_ldflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
||||||
|
|
|
@ -15,7 +15,7 @@ QMAKE_MAC_SDK.macosx.platform_name = macosx
|
||||||
QMAKE_CFLAGS += -target $${MAC_TARGET}
|
QMAKE_CFLAGS += -target $${MAC_TARGET}
|
||||||
QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_CFLAGS
|
QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_CFLAGS
|
||||||
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
|
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
|
||||||
QMAKE_LFLAGS += -target $${MAC_TARGET}
|
QMAKE_LFLAGS += -target $${MAC_TARGET} -mlinker-version=$${MAC_LD64_VERSION}
|
||||||
QMAKE_AR = $${CROSS_COMPILE}ar cq
|
QMAKE_AR = $${CROSS_COMPILE}ar cq
|
||||||
QMAKE_RANLIB=$${CROSS_COMPILE}ranlib
|
QMAKE_RANLIB=$${CROSS_COMPILE}ranlib
|
||||||
QMAKE_LIBTOOL=$${CROSS_COMPILE}libtool
|
QMAKE_LIBTOOL=$${CROSS_COMPILE}libtool
|
||||||
|
|
52
depends/patches/qt/qt5-yosemite.patch
Normal file
52
depends/patches/qt/qt5-yosemite.patch
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
The following patch was taken from upstream:
|
||||||
|
https://qt.gitorious.org/qt/qtbase/commit/70e4428b6f1c6a4bad112203f67ee7d22107616c.patch
|
||||||
|
|
||||||
|
The first hunk was removed because it conflicts with 5.2.1, and is not currently needed.
|
||||||
|
|
||||||
|
From 70e4428b6f1c6a4bad112203f67ee7d22107616c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
|
||||||
|
Date: Tue, 3 Jun 2014 14:20:20 +0200
|
||||||
|
Subject: [PATCH] Cocoa: Adapt to Xcode 6 clang version sudden pickiness
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Yes, that means OS X Yosemite fix.
|
||||||
|
|
||||||
|
Change-Id: I236f7af7b803de24ff0895e04c9a9253b5cfdb3b
|
||||||
|
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
|
||||||
|
---
|
||||||
|
.../platforms/cocoa/qcocoaaccessibilityelement.mm | 2 +-
|
||||||
|
.../platforms/cocoa/qcocoaapplicationdelegate.mm | 2 +-
|
||||||
|
src/plugins/platforms/cocoa/qcocoamenuloader.mm | 2 +-
|
||||||
|
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
|
||||||
|
index f841184..548c6a2 100644
|
||||||
|
--- a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
|
||||||
|
+++ b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
|
||||||
|
@@ -124,7 +124,7 @@ static void cleanupCocoaApplicationDelegate()
|
||||||
|
[dockMenu release];
|
||||||
|
[qtMenuLoader release];
|
||||||
|
if (reflectionDelegate) {
|
||||||
|
- [NSApp setDelegate:reflectionDelegate];
|
||||||
|
+ [[NSApplication sharedApplication] setDelegate:reflectionDelegate];
|
||||||
|
[reflectionDelegate release];
|
||||||
|
}
|
||||||
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||||
|
diff --git a/src/plugins/platforms/cocoa/qcocoamenuloader.mm b/src/plugins/platforms/cocoa/qcocoamenuloader.mm
|
||||||
|
index 60bc3b5..9340e94 100644
|
||||||
|
--- a/src/plugins/platforms/cocoa/qcocoamenuloader.mm
|
||||||
|
+++ b/src/plugins/platforms/cocoa/qcocoamenuloader.mm
|
||||||
|
@@ -174,7 +174,7 @@ QT_END_NAMESPACE
|
||||||
|
- (void)removeActionsFromAppMenu
|
||||||
|
{
|
||||||
|
for (NSMenuItem *item in [appMenu itemArray])
|
||||||
|
- [item setTag:nil];
|
||||||
|
+ [item setTag:0];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc
|
||||||
|
--
|
||||||
|
1.7.1
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
Bitcoin 0.10.99 BETA
|
Bitcoin Core 0.10.99
|
||||||
=====================
|
=====================
|
||||||
|
|
||||||
Copyright (c) 2009-2014 Bitcoin Developers
|
|
||||||
|
|
||||||
|
|
||||||
Setup
|
Setup
|
||||||
---------------------
|
---------------------
|
||||||
[Bitcoin Core](http://bitcoin.org/en/download) is the original Bitcoin client and it builds the backbone of the network. However, it downloads and stores the entire history of Bitcoin transactions (which is currently several GBs); depending on the speed of your computer and network connection, the synchronization process can take anywhere from a few hours to a day or more. Thankfully you only have to do this once. If you would like the process to go faster you can [download the blockchain directly](bootstrap.md).
|
[Bitcoin Core](http://bitcoin.org/en/download) is the original Bitcoin client and it builds the backbone of the network. However, it downloads and stores the entire history of Bitcoin transactions (which is currently several GBs); depending on the speed of your computer and network connection, the synchronization process can take anywhere from a few hours to a day or more. Thankfully you only have to do this once. If you would like the process to go faster you can [download the blockchain directly](bootstrap.md).
|
||||||
|
@ -51,7 +48,7 @@ Development
|
||||||
---------------------
|
---------------------
|
||||||
The Bitcoin repo's [root README](https://github.com/bitcoin/bitcoin/blob/master/README.md) contains relevant information on the development process and automated testing.
|
The Bitcoin repo's [root README](https://github.com/bitcoin/bitcoin/blob/master/README.md) contains relevant information on the development process and automated testing.
|
||||||
|
|
||||||
- [Coding Guidelines](coding.md)
|
- [Developer Notes](developer-notes.md)
|
||||||
- [Multiwallet Qt Development](multiwallet-qt.md)
|
- [Multiwallet Qt Development](multiwallet-qt.md)
|
||||||
- [Release Notes](release-notes.md)
|
- [Release Notes](release-notes.md)
|
||||||
- [Release Process](release-process.md)
|
- [Release Process](release-process.md)
|
||||||
|
@ -71,6 +68,6 @@ The Bitcoin repo's [root README](https://github.com/bitcoin/bitcoin/blob/master/
|
||||||
|
|
||||||
License
|
License
|
||||||
---------------------
|
---------------------
|
||||||
Distributed under the [MIT/X11 software license](http://www.opensource.org/licenses/mit-license.php).
|
Distributed under the [MIT software license](http://www.opensource.org/licenses/mit-license.php).
|
||||||
This product includes software developed by the OpenSSL Project for use in the [OpenSSL Toolkit](https://www.openssl.org/). This product includes
|
This product includes software developed by the OpenSSL Project for use in the [OpenSSL Toolkit](https://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](mailto:eay@cryptsoft.com)), and UPnP software written by Thomas Bernard.
|
||||||
|
|
|
@ -1,13 +1,5 @@
|
||||||
Bitcoin 0.10.99 BETA
|
Bitcoin Core 0.10.99
|
||||||
|
=====================
|
||||||
Copyright (c) 2009-2014 Bitcoin Core 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 (https://www.openssl.org/). This product includes
|
|
||||||
cryptographic software written by Eric Young (eay@cryptsoft.com).
|
|
||||||
|
|
||||||
|
|
||||||
Intro
|
Intro
|
||||||
-----
|
-----
|
||||||
|
|
|
@ -1,14 +1,5 @@
|
||||||
The following is a list of assets used in the bitcoin source and their proper attribution.
|
The following is a list of assets used in the bitcoin source and their proper attribution.
|
||||||
|
|
||||||
[Wladimir van der Laan](https://github.com/laanwj)
|
|
||||||
-----------------------
|
|
||||||
#### Info
|
|
||||||
* License: MIT
|
|
||||||
|
|
||||||
### Assets Used
|
|
||||||
src/qt/res/icons/watch*.png, src/qt/res/icons/tx_in.png,
|
|
||||||
src/qt/res/icons/tx_inout.png,
|
|
||||||
|
|
||||||
[Typicons/Stephen Hutchings](http://typicons.com)
|
[Typicons/Stephen Hutchings](http://typicons.com)
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
|
@ -30,7 +21,7 @@ The following is a list of assets used in the bitcoin source and their proper at
|
||||||
src/qt/res/icons/overview.png, src/qt/res/icons/quit.png,
|
src/qt/res/icons/overview.png, src/qt/res/icons/quit.png,
|
||||||
src/qt/res/icons/receive.png, src/qt/res/icons/remove.png,
|
src/qt/res/icons/receive.png, src/qt/res/icons/remove.png,
|
||||||
src/qt/res/icons/send.png, src/qt/res/icons/synced.png,
|
src/qt/res/icons/send.png, src/qt/res/icons/synced.png,
|
||||||
src/qt/res/icons/transaction*.png, src/qt/res/icons/tx_input.png,
|
src/qt/res/icons/transaction*.png, src/qt/res/icons/tx_output.png,
|
||||||
|
|
||||||
Jonas Schnelli
|
Jonas Schnelli
|
||||||
-----------------------
|
-----------------------
|
||||||
|
@ -38,18 +29,17 @@ Jonas Schnelli
|
||||||
### Info
|
### Info
|
||||||
* Designer: Jonas Schnelli
|
* Designer: Jonas Schnelli
|
||||||
* Bitcoin Icon: (based on the original bitcoin logo from Bitboy)
|
* Bitcoin Icon: (based on the original bitcoin logo from Bitboy)
|
||||||
* Some icons are based on Stephan Hutchings Typicons
|
* Some icons are based on Stephan Hutchings Typicons (these are under CC BY-SA license)
|
||||||
* License: MIT
|
* License: MIT
|
||||||
|
|
||||||
### Assets Used
|
### Assets Used
|
||||||
src/qt/res/icons/about.png, src/qt/res/icons/about_qt.png,
|
src/qt/res/icons/about.png, src/qt/res/icons/about_qt.png,
|
||||||
src/qt/res/icons/clock*.png, src/qt/res/icons/connect[0-3].png,
|
src/qt/res/icons/bitcoin.icns, src/qt/res/icons/bitcoin.ico,
|
||||||
src/qt/res/icons/eye_minus.png, src/qt/res/icons/verify.png,
|
src/qt/res/icons/bitcoin.png, src/qt/res/icons/clock*.png,
|
||||||
src/qt/res/icons/eye_plus.png, src/qt/res/icons/tx_inout.png,
|
src/qt/res/icons/connect[0-3].png, src/qt/res/icons/eye_minus.png,
|
||||||
src/qt/res/icons/tx_output.png, src/qt/res/icons/bitcoin.icns,
|
src/qt/res/icons/eye_plus.png, src/qt/res/icons/verify.png,
|
||||||
src/qt/res/src/bitcoin.svg, src/qt/res/src/bitcoin.ico,
|
src/qt/res/icons/tx_inout.png, src/qt/res/icons/tx_input.png,
|
||||||
src/qt/res/src/bitcoin.png, src/qt/res/src/bitcoin_testnet.png,
|
src/qt/res/src/verify.svg, src/qt/res/src/bitcoin.svg,
|
||||||
docs/bitcoin_logo_doxygen.png, src/qt/res/src/tx*.svg,
|
src/qt/res/src/clock*.svg, src/qt/res/src/connect*.svg,
|
||||||
src/qt/res/src/connect*.svg, src/qt/res/src/clock*.svg,
|
src/qt/res/src/mine.svg, src/qt/res/src/qt.svg, src/qt/res/src/tx*.svg,
|
||||||
src/qt/res/src/mine.svg, src/qt/res/src/qt.svg,
|
|
||||||
src/qt/res/src/verify.svg,
|
src/qt/res/src/verify.svg,
|
||||||
|
|
|
@ -89,6 +89,41 @@ Not OK (used plenty in the current source, but not picked up):
|
||||||
A full list of comment syntaxes picked up by doxygen can be found at http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html,
|
A full list of comment syntaxes picked up by doxygen can be found at http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html,
|
||||||
but if possible use one of the above styles.
|
but if possible use one of the above styles.
|
||||||
|
|
||||||
|
Development tips and tricks
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
**compiling for debugging**
|
||||||
|
|
||||||
|
Run configure with the --enable-debug option, then make. Or run configure with
|
||||||
|
CXXFLAGS="-g -ggdb -O0" or whatever debug flags you need.
|
||||||
|
|
||||||
|
**debug.log**
|
||||||
|
|
||||||
|
If the code is behaving strangely, take a look in the debug.log file in the data directory;
|
||||||
|
error and debugging messages are written there.
|
||||||
|
|
||||||
|
The -debug=... command-line option controls debugging; running with just -debug will turn
|
||||||
|
on all categories (and give you a very large debug.log file).
|
||||||
|
|
||||||
|
The Qt code routes qDebug() output to debug.log under category "qt": run with -debug=qt
|
||||||
|
to see it.
|
||||||
|
|
||||||
|
**testnet and regtest modes**
|
||||||
|
|
||||||
|
Run with the -testnet option to run with "play bitcoins" on the test network, if you
|
||||||
|
are testing multi-machine code that needs to operate across the internet.
|
||||||
|
|
||||||
|
If you are testing something that can run on one machine, run with the -regtest option.
|
||||||
|
In regression test mode, blocks can be created on-demand; see qa/rpc-tests/ for tests
|
||||||
|
that run in -regtest mode.
|
||||||
|
|
||||||
|
**DEBUG_LOCKORDER**
|
||||||
|
|
||||||
|
Bitcoin Core is a multithreaded application, and deadlocks or other multithreading bugs
|
||||||
|
can be very difficult to track down. Compiling with -DDEBUG_LOCKORDER (configure
|
||||||
|
CXXFLAGS="-DDEBUG_LOCKORDER -g") inserts run-time checks to keep track of which locks
|
||||||
|
are held, and adds warnings to the debug.log file if inconsistencies are detected.
|
||||||
|
|
||||||
Locking/mutex usage notes
|
Locking/mutex usage notes
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
|
@ -136,3 +171,16 @@ Threads
|
||||||
- BitcoinMiner : Generates bitcoins (if wallet is enabled).
|
- BitcoinMiner : Generates bitcoins (if wallet is enabled).
|
||||||
|
|
||||||
- Shutdown : Does an orderly shutdown of everything.
|
- Shutdown : Does an orderly shutdown of everything.
|
||||||
|
|
||||||
|
Pull Request Terminology
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
Concept ACK - Agree with the idea and overall direction, but haven't reviewed the code changes or tested them.
|
||||||
|
|
||||||
|
utACK (untested ACK) - Reviewed and agree with the code changes but haven't actually tested them.
|
||||||
|
|
||||||
|
Tested ACK - Reviewed the code changes and have verified the functionality or bug fix.
|
||||||
|
|
||||||
|
ACK - A loose ACK can be confusing. It's best to avoid them unless it's a documentation/comment only change in which case there is nothing to test/verify; therefore the tested/untested distinction is not there.
|
||||||
|
|
||||||
|
NACK - Disagree with the code changes/concept. Should be accompanied by an explanation.
|
|
@ -83,7 +83,7 @@ Unixy OSes by entering the following in a terminal:
|
||||||
|
|
||||||
After creating the VM, we need to configure it.
|
After creating the VM, we need to configure it.
|
||||||
|
|
||||||
- Click the `Settings` button, then go to the `Network` tab. Adapter 1 should be attacked to `NAT`.
|
- Click the `Settings` button, then go to the `Network` tab. Adapter 1 should be attached to `NAT`.
|
||||||
|
|
||||||
![](gitian-building/network_settings.png)
|
![](gitian-building/network_settings.png)
|
||||||
|
|
||||||
|
@ -291,7 +291,7 @@ Setting up gitian images
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
Gitian needs virtual images of the operating system to build in.
|
Gitian needs virtual images of the operating system to build in.
|
||||||
Currently this is Ubuntu Precise for both x86 architectures.
|
Currently this is Ubuntu Precise for x86_64.
|
||||||
These images will be copied and used every time that a build is started to
|
These images will be copied and used every time that a build is started to
|
||||||
make sure that the build is deterministic.
|
make sure that the build is deterministic.
|
||||||
Creating the images will take a while, but only has to be done once.
|
Creating the images will take a while, but only has to be done once.
|
||||||
|
@ -300,7 +300,6 @@ Execute the following as user `debian`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd gitian-builder
|
cd gitian-builder
|
||||||
bin/make-base-vm --lxc --arch i386 --suite precise
|
|
||||||
bin/make-base-vm --lxc --arch amd64 --suite precise
|
bin/make-base-vm --lxc --arch amd64 --suite precise
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -311,27 +310,10 @@ There will be a lot of warnings printed during build of the images. These can be
|
||||||
Getting and building the inputs
|
Getting and building the inputs
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
In [doc/release-process.md](release-process.md) in the bitcoin repository under 'Fetch and build inputs'.
|
Follow the instructions in [doc/release-process.md](release-process.md) in the bitcoin repository
|
||||||
you will find a list of `wget` commands that can be executed to get the dependencies.
|
under 'Fetch and build inputs' to install sources which require manual intervention. Also follow
|
||||||
|
the next step: 'Seed the Gitian sources cache', which will fetch all necessary source files allowing
|
||||||
I needed to add `--no-check-certificate` to the OpenSSL wget line to make it work.
|
for gitian to work offline.
|
||||||
Likely this is because the ca-certificates in Debian 7.4 is fairly old. This does not create a
|
|
||||||
security issue as the gitian descriptors check the integrity of the input archives and refuse to work
|
|
||||||
if any one is corrupted.
|
|
||||||
|
|
||||||
After downloading the archives, execute the `gbuild` commands to build the dependencies.
|
|
||||||
This can take a long time, but only has to be done when the dependencies change, for example
|
|
||||||
to upgrade the used version.
|
|
||||||
|
|
||||||
**Note**: Do not forget to copy the result from `build/out` to `inputs` after every gbuild command! This will save
|
|
||||||
you a lot of time.
|
|
||||||
|
|
||||||
At any time you can check the package installation and build progress with
|
|
||||||
|
|
||||||
```bash
|
|
||||||
tail -f var/install.log
|
|
||||||
tail -f var/build.log
|
|
||||||
```
|
|
||||||
|
|
||||||
Building Bitcoin
|
Building Bitcoin
|
||||||
----------------
|
----------------
|
||||||
|
@ -339,6 +321,15 @@ Building Bitcoin
|
||||||
To build Bitcoin (for Linux, OSX and Windows) just follow the steps under 'perform
|
To build Bitcoin (for Linux, OSX and Windows) just follow the steps under 'perform
|
||||||
gitian builds' in [doc/release-process.md](release-process.md) in the bitcoin repository.
|
gitian builds' in [doc/release-process.md](release-process.md) in the bitcoin repository.
|
||||||
|
|
||||||
|
This may take a long time as it also builds the dependencies needed for each descriptor.
|
||||||
|
These dependencies will be cached after a successful build to avoid rebuilding them when possible.
|
||||||
|
|
||||||
|
At any time you can check the package installation and build progress with
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tail -f var/install.log
|
||||||
|
tail -f var/build.log
|
||||||
|
|
||||||
Output from `gbuild` will look something like
|
Output from `gbuild` will look something like
|
||||||
|
|
||||||
Initialized empty Git repository in /home/debian/gitian-builder/inputs/bitcoin/.git/
|
Initialized empty Git repository in /home/debian/gitian-builder/inputs/bitcoin/.git/
|
||||||
|
@ -348,7 +339,7 @@ Output from `gbuild` will look something like
|
||||||
Resolving deltas: 100% (25724/25724), done.
|
Resolving deltas: 100% (25724/25724), done.
|
||||||
From https://github.com/bitcoin/bitcoin
|
From https://github.com/bitcoin/bitcoin
|
||||||
... (new tags, new branch etc)
|
... (new tags, new branch etc)
|
||||||
--- Building for precise i386 ---
|
--- Building for precise x86_64 ---
|
||||||
Stopping target if it is up
|
Stopping target if it is up
|
||||||
Making a new image copy
|
Making a new image copy
|
||||||
stdin: is not a tty
|
stdin: is not a tty
|
||||||
|
@ -363,9 +354,6 @@ Output from `gbuild` will look something like
|
||||||
lxc-start: Connection refused - inotify event with no name (mask 32768)
|
lxc-start: Connection refused - inotify event with no name (mask 32768)
|
||||||
Running build script (log in var/build.log)
|
Running build script (log in var/build.log)
|
||||||
|
|
||||||
As when building the dependencies, the progress of package installation and building
|
|
||||||
can be inspected in `var/install.log` and `var/build.log`.
|
|
||||||
|
|
||||||
Building an alternative repository
|
Building an alternative repository
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ Release Process
|
||||||
mv build/out/bitcoin-*.zip build/out/bitcoin-*.exe ../
|
mv build/out/bitcoin-*.zip build/out/bitcoin-*.exe ../
|
||||||
./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-osx.yml
|
./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-osx.yml
|
||||||
./bin/gsign --signer $SIGNER --release ${VERSION}-osx-unsigned --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-osx.yml
|
./bin/gsign --signer $SIGNER --release ${VERSION}-osx-unsigned --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-osx.yml
|
||||||
mv build/out/bitcoin-*-unsigned.tar.gz inputs
|
mv build/out/bitcoin-*-unsigned.tar.gz inputs/bitcoin-osx-unsigned.tar.gz
|
||||||
mv build/out/bitcoin-*.tar.gz build/out/bitcoin-*.dmg ../
|
mv build/out/bitcoin-*.tar.gz build/out/bitcoin-*.dmg ../
|
||||||
popd
|
popd
|
||||||
Build output expected:
|
Build output expected:
|
||||||
|
@ -102,7 +102,7 @@ Commit your signature to gitian.sigs:
|
||||||
cp signature.tar.gz inputs/
|
cp signature.tar.gz inputs/
|
||||||
./bin/gbuild -i ../bitcoin/contrib/gitian-descriptors/gitian-osx-signer.yml
|
./bin/gbuild -i ../bitcoin/contrib/gitian-descriptors/gitian-osx-signer.yml
|
||||||
./bin/gsign --signer $SIGNER --release ${VERSION}-osx-signed --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-osx-signer.yml
|
./bin/gsign --signer $SIGNER --release ${VERSION}-osx-signed --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-osx-signer.yml
|
||||||
mv build/out/bitcoin-${VERSION}-osx.dmg ../
|
mv build/out/bitcoin-osx-signed.dmg ../bitcoin-${VERSION}-osx.dmg
|
||||||
popd
|
popd
|
||||||
|
|
||||||
Commit your signature for the signed OSX binary:
|
Commit your signature for the signed OSX binary:
|
||||||
|
|
|
@ -1,21 +1,100 @@
|
||||||
Translations
|
Translations
|
||||||
============
|
============
|
||||||
|
|
||||||
The Bitcoin Core GUI can be easily translated into other languages. Here's how we
|
The Bitcoin-Core project has been designed to support multiple localisations. This makes adding new phrases, and completely new languages easily achievable. For managing all application translations, Bitcoin-Core makes use of the Transifex online translation management tool.
|
||||||
handle those translations.
|
|
||||||
|
|
||||||
Files and Folders
|
### Helping to translate (using Transifex)
|
||||||
-----------------
|
Transifex is setup to monitor the Github repo for updates, and when code containing new translations is found, Transifex will process any changes. It may take several hours after a pull-request has been merged, to appear in the Transifex web interface.
|
||||||
|
|
||||||
### bitcoin-qt.pro
|
Multiple language support is critical in assisting Bitcoin’s global adoption, and growth. One of Bitcoin’s greatest strengths is cross-boarder money transfers, any help making that easier is greatly appreciated.
|
||||||
|
|
||||||
This file takes care of generating `.qm` files from `.ts` files. It is mostly
|
See the [Transifex Bitcoin project](https://www.transifex.com/projects/p/bitcoin/) to assist in translations. You should also join the translation mailing list for announcements - see details below.
|
||||||
automated.
|
|
||||||
|
|
||||||
### src/qt/bitcoin.qrc
|
### Writing code with translations
|
||||||
|
We use automated scripts to help extract translations in both Qt, and non-Qt source files. It is rarely necessary to manually edit the files in `src/qt/locale/`. The translation source files must adhere to the following format:
|
||||||
|
`bitcoin_xx_YY.ts or bitcoin_xx.ts`
|
||||||
|
|
||||||
This file must be updated whenever a new translation is added. Please note that
|
`src/qt/locale/bitcoin_en.ts` is treated in a special way. It is used as the source for all other translations. Whenever a string in the source code is changed, this file must be updated to reflect those changes. A custom script is used to extract strings from the non-Qt parts. This script makes use of `gettext`, so make sure that utility is installed (ie, `apt-get install gettext` on Ubuntu/Debian). Once this has been updated, `lupdate` (included in the Qt SDK) is used to update `bitcoin_en.ts`.
|
||||||
files must end with `.qm`, not `.ts`.
|
|
||||||
|
To automatically regenerate the `bitcoin_en.ts` file, run the following commands:
|
||||||
|
```sh
|
||||||
|
cd src/
|
||||||
|
make translate
|
||||||
|
```
|
||||||
|
|
||||||
|
`contrib/bitcoin-qt.pro` takes care of generating `.qm` (binary compiled) files from `.ts` (source files) files. It’s mostly automated, and you shouldn’t need to worry about it.
|
||||||
|
|
||||||
|
**Example Qt translation**
|
||||||
|
```cpp
|
||||||
|
QToolBar *toolbar = addToolBar(tr("Tabs toolbar"));
|
||||||
|
```
|
||||||
|
|
||||||
|
### Creating a pull-request
|
||||||
|
For general PRs, you shouldn’t include any updates to the translation source files. They will be updated periodically, primarily around pre-releases, allowing time for any new phrases to be translated before public releases. This is also important in avoiding translation related merge conflicts.
|
||||||
|
|
||||||
|
When an updated source file is merged into the Github repo, Transifex will automatically detect it (although it can take several hours). Once processed, the new strings will show up as "Remaining" in the Transifex web interface and are ready for translators.
|
||||||
|
|
||||||
|
To create the pull-request, use the following commands:
|
||||||
|
```
|
||||||
|
git add src/qt/bitcoinstrings.cpp src/qt/locale/bitcoin_en.ts
|
||||||
|
git commit
|
||||||
|
```
|
||||||
|
|
||||||
|
### Creating a Transifex account
|
||||||
|
Visit the [Transifex Signup](https://www.transifex.com/signup/) page to create an account. Take note of your username and password, as they will be required to configure the command-line tool.
|
||||||
|
|
||||||
|
You can find the Bitcoin translation project at [https://www.transifex.com/projects/p/bitcoin/](https://www.transifex.com/projects/p/bitcoin/).
|
||||||
|
|
||||||
|
### Installing the Transifex client command-line tool
|
||||||
|
The client it used to fetch updated translations. If you are having problems, or need more details, see [http://docs.transifex.com/developer/client/setup](http://docs.transifex.com/developer/client/setup)
|
||||||
|
|
||||||
|
**For Linux and Mac**
|
||||||
|
|
||||||
|
`pip install transifex-client`
|
||||||
|
|
||||||
|
Setup your transifex client config as follows. Please *ignore the token field*.
|
||||||
|
|
||||||
|
```ini
|
||||||
|
nano ~/.transifexrc
|
||||||
|
|
||||||
|
[https://www.transifex.com]
|
||||||
|
hostname = https://www.transifex.com
|
||||||
|
password = PASSWORD
|
||||||
|
token =
|
||||||
|
username = USERNAME
|
||||||
|
```
|
||||||
|
|
||||||
|
**For Windows**
|
||||||
|
|
||||||
|
Please see [http://docs.transifex.com/developer/client/setup#windows](http://docs.transifex.com/developer/client/setup#windows) for details on installation.
|
||||||
|
|
||||||
|
The Transifex Bitcoin project config file is included as part of the repo. It can be found at `.tx/config`, however you shouldn’t need change anything.
|
||||||
|
|
||||||
|
### Synchronising translations
|
||||||
|
To assist in updating translations, we have created a script to help.
|
||||||
|
|
||||||
|
1. `python contrib/devtools/update-translations.py`
|
||||||
|
2. Update `src/qt/bitcoin.qrc` manually or via
|
||||||
|
`ls src/qt/locale/*ts|xargs -n1 basename|sed 's/\(bitcoin_\(.*\)\).ts/<file alias="\2">locale\/\1.qm<\/file>/'`
|
||||||
|
3. Update `src/qt/Makefile.am` manually or via
|
||||||
|
`ls src/qt/locale/*ts|xargs -n1 basename|sed 's/\(bitcoin_\(.*\)\).ts/ locale\/\1.ts \\/'`
|
||||||
|
4. `git add` new translations from `src/qt/locale/`
|
||||||
|
|
||||||
|
**Do not directly download translations** one by one from the Transifex website, as we do a few post-processing steps before committing the translations.
|
||||||
|
|
||||||
|
### Handling Plurals (in source files)
|
||||||
|
When new plurals are added to the source file, it's important to do the following steps:
|
||||||
|
|
||||||
|
1. Open `bitcoin_en.ts` in Qt Linguist (included in the Qt SDK)
|
||||||
|
2. Search for `%n`, which will take you to the parts in the translation that use plurals
|
||||||
|
3. Look for empty `English Translation (Singular)` and `English Translation (Plural)` fields
|
||||||
|
4. Add the appropriate strings for the singular and plural form of the base string
|
||||||
|
5. Mark the item as done (via the green arrow symbol in the toolbar)
|
||||||
|
6. Repeat from step 2, until all singular and plural forms are in the source file
|
||||||
|
7. Save the source file
|
||||||
|
|
||||||
|
### Translating a new language
|
||||||
|
To create a new language template, you will need to edit the languages manifest file `src/qt/bitcoin.qrc` and add a new entry. Below is an example of the english language entry.
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<qresource prefix="/translations">
|
<qresource prefix="/translations">
|
||||||
|
@ -24,66 +103,9 @@ files must end with `.qm`, not `.ts`.
|
||||||
</qresource>
|
</qresource>
|
||||||
```
|
```
|
||||||
|
|
||||||
### src/qt/locale/
|
**Note:** that the language translation file **must end in `.qm`** (the compiled extension), and not `.ts`.
|
||||||
|
|
||||||
This directory contains all translations. Filenames must adhere to this format:
|
### Questions and general assistance
|
||||||
|
The Bitcoin-Core translation maintainers include *tcatm, seone, Diapolo, wumpus and luke-jr*.You can find them, and others, in the Freenode IRC chatroom - `irc.freenode.net #bitcoin-dev`.
|
||||||
|
|
||||||
bitcoin_xx_YY.ts or bitcoin_xx.ts
|
If you are a translator, you should also subscribe to the mailing list, https://groups.google.com/forum/#!forum/bitcoin-translators. Announcements will be posted during application pre-releases to notify translators to check for updates.
|
||||||
|
|
||||||
#### bitcoin_en.ts (Source file)
|
|
||||||
|
|
||||||
`src/qt/locale/bitcoin_en.ts` is treated in a special way. It is used as the
|
|
||||||
source for all other translations. Whenever a string in the code is changed
|
|
||||||
this file must be updated to reflect those changes. A custom script is used
|
|
||||||
to extract strings from the non-Qt parts. This script makes use of `gettext`,
|
|
||||||
so make sure that utility is installed (ie, `apt-get install gettext` on
|
|
||||||
Ubuntu/Debian). Once this has been updated, lupdate (included in the Qt SDK)
|
|
||||||
is used to update bitcoin_en.ts. This process has been automated, from src/qt,
|
|
||||||
simply run:
|
|
||||||
make translate
|
|
||||||
|
|
||||||
##### Handling of plurals in the source file
|
|
||||||
|
|
||||||
When new plurals are added to the source file, it's important to do the following steps:
|
|
||||||
|
|
||||||
1. Open bitcoin_en.ts in Qt Linguist (also included in the Qt SDK)
|
|
||||||
2. Search for `%n`, which will take you to the parts in the translation that use plurals
|
|
||||||
3. Look for empty `English Translation (Singular)` and `English Translation (Plural)` fields
|
|
||||||
4. Add the appropriate strings for the singular and plural form of the base string
|
|
||||||
5. Mark the item as done (via the green arrow symbol in the toolbar)
|
|
||||||
6. Repeat from step 2. until all singular and plural forms are in the source file
|
|
||||||
7. Save the source file
|
|
||||||
|
|
||||||
##### Creating the pull-request
|
|
||||||
|
|
||||||
An updated source file should be merged to github and Transifex will pick it
|
|
||||||
up from there (can take some hours). Afterwards the new strings show up as "Remaining"
|
|
||||||
in Transifex and can be translated.
|
|
||||||
|
|
||||||
To create the pull-request you have to do:
|
|
||||||
|
|
||||||
git add src/qt/bitcoinstrings.cpp src/qt/locale/bitcoin_en.ts
|
|
||||||
git commit
|
|
||||||
|
|
||||||
Syncing with Transifex
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
We are using https://transifex.com as a frontend for translating the client.
|
|
||||||
|
|
||||||
https://www.transifex.com/projects/p/bitcoin/resource/tx/
|
|
||||||
|
|
||||||
The "Transifex client" (see: http://support.transifex.com/customer/portal/topics/440187-transifex-client/articles)
|
|
||||||
is used to fetch new translations from Transifex. The configuration for this client (`.tx/config`)
|
|
||||||
is part of the repository.
|
|
||||||
|
|
||||||
Do not directly download translations one by one from the Transifex website, as we do a few
|
|
||||||
postprocessing steps before committing the translations.
|
|
||||||
|
|
||||||
### Fetching new translations
|
|
||||||
|
|
||||||
1. `python contrib/devtools/update-translations.py`
|
|
||||||
2. update `src/qt/bitcoin.qrc` manually or via
|
|
||||||
`ls src/qt/locale/*ts|xargs -n1 basename|sed 's/\(bitcoin_\(.*\)\).ts/<file alias="\2">locale\/\1.qm<\/file>/'`
|
|
||||||
3. update `src/qt/Makefile.am` manually or via
|
|
||||||
`ls src/qt/locale/*ts|xargs -n1 basename|sed 's/\(bitcoin_\(.*\)\).ts/ locale\/\1.ts \\/'`
|
|
||||||
4. `git add` new translations from `src/qt/locale/`
|
|
11
libbitcoinconsensus.pc.in
Normal file
11
libbitcoinconsensus.pc.in
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
prefix=@prefix@
|
||||||
|
exec_prefix=@exec_prefix@
|
||||||
|
libdir=@libdir@
|
||||||
|
includedir=@includedir@
|
||||||
|
|
||||||
|
Name: Bitcoin Core consensus library
|
||||||
|
Description: Library for the Bitcoin consensus protocol.
|
||||||
|
Version: @PACKAGE_VERSION@
|
||||||
|
Libs: -L${libdir} -lbitcoinconsensus
|
||||||
|
Cflags: -I${includedir}
|
||||||
|
Requires.private: libcrypto
|
|
@ -20,7 +20,7 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
import urlparse
|
import urlparse
|
||||||
|
|
||||||
class RESTTest (BitcoinTestFramework):
|
class HTTPBasicsTest (BitcoinTestFramework):
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
|
|
||||||
#################################################
|
#################################################
|
||||||
|
@ -73,4 +73,4 @@ class RESTTest (BitcoinTestFramework):
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
RESTTest ().main ()
|
HTTPBasicsTest ().main ()
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env python2
|
#!/usr/bin/env python2
|
||||||
# Copyright (c) 2014 The Bitcoin Core developers
|
# Copyright (c) 2014 The Bitcoin Core developers
|
||||||
# Distributed under the MIT/X11 software license, see the accompanying
|
# Distributed under the MIT 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.
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -41,6 +41,10 @@ class WalletTest (BitcoinTestFramework):
|
||||||
|
|
||||||
self.nodes[0].setgenerate(True, 1)
|
self.nodes[0].setgenerate(True, 1)
|
||||||
|
|
||||||
|
walletinfo = self.nodes[0].getwalletinfo()
|
||||||
|
assert_equal(walletinfo['immature_balance'], 50)
|
||||||
|
assert_equal(walletinfo['balance'], 0)
|
||||||
|
|
||||||
self.sync_all()
|
self.sync_all()
|
||||||
self.nodes[1].setgenerate(True, 101)
|
self.nodes[1].setgenerate(True, 101)
|
||||||
self.sync_all()
|
self.sync_all()
|
||||||
|
@ -54,6 +58,9 @@ class WalletTest (BitcoinTestFramework):
|
||||||
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 11)
|
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 11)
|
||||||
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 10)
|
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 10)
|
||||||
|
|
||||||
|
walletinfo = self.nodes[0].getwalletinfo()
|
||||||
|
assert_equal(walletinfo['immature_balance'], 0)
|
||||||
|
|
||||||
# Have node0 mine a block, thus he will collect his own fee.
|
# Have node0 mine a block, thus he will collect his own fee.
|
||||||
self.nodes[0].setgenerate(True, 1)
|
self.nodes[0].setgenerate(True, 1)
|
||||||
self.sync_all()
|
self.sync_all()
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env python2
|
#!/usr/bin/env python2
|
||||||
# Copyright (c) 2014 The Bitcoin Core developers
|
# Copyright (c) 2014 The Bitcoin Core developers
|
||||||
# Distributed under the MIT/X11 software license, see the accompanying
|
# Distributed under the MIT 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.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -74,11 +74,12 @@ BITCOIN_CORE_H = \
|
||||||
alert.h \
|
alert.h \
|
||||||
allocators.h \
|
allocators.h \
|
||||||
amount.h \
|
amount.h \
|
||||||
|
arith_uint256.h \
|
||||||
base58.h \
|
base58.h \
|
||||||
bloom.h \
|
bloom.h \
|
||||||
chain.h \
|
chain.h \
|
||||||
chainparams.h \
|
|
||||||
chainparamsbase.h \
|
chainparamsbase.h \
|
||||||
|
chainparams.h \
|
||||||
chainparamsseeds.h \
|
chainparamsseeds.h \
|
||||||
checkpoints.h \
|
checkpoints.h \
|
||||||
checkqueue.h \
|
checkqueue.h \
|
||||||
|
@ -87,8 +88,6 @@ BITCOIN_CORE_H = \
|
||||||
coins.h \
|
coins.h \
|
||||||
compat.h \
|
compat.h \
|
||||||
compressor.h \
|
compressor.h \
|
||||||
primitives/block.h \
|
|
||||||
primitives/transaction.h \
|
|
||||||
core_io.h \
|
core_io.h \
|
||||||
crypter.h \
|
crypter.h \
|
||||||
db.h \
|
db.h \
|
||||||
|
@ -108,6 +107,8 @@ BITCOIN_CORE_H = \
|
||||||
net.h \
|
net.h \
|
||||||
noui.h \
|
noui.h \
|
||||||
pow.h \
|
pow.h \
|
||||||
|
primitives/block.h \
|
||||||
|
primitives/transaction.h \
|
||||||
protocol.h \
|
protocol.h \
|
||||||
pubkey.h \
|
pubkey.h \
|
||||||
random.h \
|
random.h \
|
||||||
|
@ -115,11 +116,11 @@ BITCOIN_CORE_H = \
|
||||||
rpcprotocol.h \
|
rpcprotocol.h \
|
||||||
rpcserver.h \
|
rpcserver.h \
|
||||||
script/interpreter.h \
|
script/interpreter.h \
|
||||||
|
script/script_error.h \
|
||||||
script/script.h \
|
script/script.h \
|
||||||
script/sigcache.h \
|
script/sigcache.h \
|
||||||
script/sign.h \
|
script/sign.h \
|
||||||
script/standard.h \
|
script/standard.h \
|
||||||
script/script_error.h \
|
|
||||||
serialize.h \
|
serialize.h \
|
||||||
streams.h \
|
streams.h \
|
||||||
sync.h \
|
sync.h \
|
||||||
|
@ -132,13 +133,13 @@ BITCOIN_CORE_H = \
|
||||||
uint256.h \
|
uint256.h \
|
||||||
undo.h \
|
undo.h \
|
||||||
util.h \
|
util.h \
|
||||||
utilstrencodings.h \
|
|
||||||
utilmoneystr.h \
|
utilmoneystr.h \
|
||||||
|
utilstrencodings.h \
|
||||||
utiltime.h \
|
utiltime.h \
|
||||||
version.h \
|
version.h \
|
||||||
|
walletdb.h \
|
||||||
wallet.h \
|
wallet.h \
|
||||||
wallet_ismine.h \
|
wallet_ismine.h \
|
||||||
walletdb.h \
|
|
||||||
compat/sanity.h
|
compat/sanity.h
|
||||||
|
|
||||||
JSON_H = \
|
JSON_H = \
|
||||||
|
@ -261,18 +262,19 @@ libbitcoin_common_a_SOURCES = \
|
||||||
# backward-compatibility objects and their sanity checks are linked.
|
# backward-compatibility objects and their sanity checks are linked.
|
||||||
libbitcoin_util_a_CPPFLAGS = $(BITCOIN_INCLUDES)
|
libbitcoin_util_a_CPPFLAGS = $(BITCOIN_INCLUDES)
|
||||||
libbitcoin_util_a_SOURCES = \
|
libbitcoin_util_a_SOURCES = \
|
||||||
compat/strnlen.cpp \
|
arith_uint256.cpp \
|
||||||
compat/glibc_sanity.cpp \
|
|
||||||
compat/glibcxx_sanity.cpp \
|
|
||||||
chainparamsbase.cpp \
|
chainparamsbase.cpp \
|
||||||
clientversion.cpp \
|
clientversion.cpp \
|
||||||
|
compat/glibc_sanity.cpp \
|
||||||
|
compat/glibcxx_sanity.cpp \
|
||||||
|
compat/strnlen.cpp \
|
||||||
random.cpp \
|
random.cpp \
|
||||||
rpcprotocol.cpp \
|
rpcprotocol.cpp \
|
||||||
sync.cpp \
|
sync.cpp \
|
||||||
uint256.cpp \
|
uint256.cpp \
|
||||||
util.cpp \
|
util.cpp \
|
||||||
utilstrencodings.cpp \
|
|
||||||
utilmoneystr.cpp \
|
utilmoneystr.cpp \
|
||||||
|
utilstrencodings.cpp \
|
||||||
utiltime.cpp \
|
utiltime.cpp \
|
||||||
$(BITCOIN_CORE_H)
|
$(BITCOIN_CORE_H)
|
||||||
|
|
||||||
|
@ -352,19 +354,20 @@ bitcoin_cli_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
|
||||||
if BUILD_BITCOIN_LIBS
|
if BUILD_BITCOIN_LIBS
|
||||||
include_HEADERS = script/bitcoinconsensus.h
|
include_HEADERS = script/bitcoinconsensus.h
|
||||||
libbitcoinconsensus_la_SOURCES = \
|
libbitcoinconsensus_la_SOURCES = \
|
||||||
primitives/transaction.cpp \
|
arith_uint256.cpp \
|
||||||
crypto/hmac_sha512.cpp \
|
crypto/hmac_sha512.cpp \
|
||||||
|
crypto/ripemd160.cpp \
|
||||||
crypto/sha1.cpp \
|
crypto/sha1.cpp \
|
||||||
crypto/sha256.cpp \
|
crypto/sha256.cpp \
|
||||||
crypto/sha512.cpp \
|
crypto/sha512.cpp \
|
||||||
crypto/ripemd160.cpp \
|
|
||||||
eccryptoverify.cpp \
|
eccryptoverify.cpp \
|
||||||
ecwrapper.cpp \
|
ecwrapper.cpp \
|
||||||
hash.cpp \
|
hash.cpp \
|
||||||
|
primitives/transaction.cpp \
|
||||||
pubkey.cpp \
|
pubkey.cpp \
|
||||||
script/script.cpp \
|
|
||||||
script/interpreter.cpp \
|
|
||||||
script/bitcoinconsensus.cpp \
|
script/bitcoinconsensus.cpp \
|
||||||
|
script/interpreter.cpp \
|
||||||
|
script/script.cpp \
|
||||||
uint256.cpp \
|
uint256.cpp \
|
||||||
utilstrencodings.cpp
|
utilstrencodings.cpp
|
||||||
|
|
||||||
|
|
|
@ -191,6 +191,7 @@ BITCOIN_QT_H = \
|
||||||
qt/receiverequestdialog.h \
|
qt/receiverequestdialog.h \
|
||||||
qt/recentrequeststablemodel.h \
|
qt/recentrequeststablemodel.h \
|
||||||
qt/rpcconsole.h \
|
qt/rpcconsole.h \
|
||||||
|
qt/scicon.h \
|
||||||
qt/sendcoinsdialog.h \
|
qt/sendcoinsdialog.h \
|
||||||
qt/sendcoinsentry.h \
|
qt/sendcoinsentry.h \
|
||||||
qt/signverifymessagedialog.h \
|
qt/signverifymessagedialog.h \
|
||||||
|
@ -255,9 +256,6 @@ RES_ICONS = \
|
||||||
qt/res/icons/tx_input.png \
|
qt/res/icons/tx_input.png \
|
||||||
qt/res/icons/tx_output.png \
|
qt/res/icons/tx_output.png \
|
||||||
qt/res/icons/tx_mined.png \
|
qt/res/icons/tx_mined.png \
|
||||||
qt/res/icons/unit_btc.png \
|
|
||||||
qt/res/icons/unit_mbtc.png \
|
|
||||||
qt/res/icons/unit_ubtc.png \
|
|
||||||
qt/res/icons/verify.png
|
qt/res/icons/verify.png
|
||||||
|
|
||||||
BITCOIN_QT_CPP = \
|
BITCOIN_QT_CPP = \
|
||||||
|
@ -277,10 +275,14 @@ BITCOIN_QT_CPP = \
|
||||||
qt/qvalidatedlineedit.cpp \
|
qt/qvalidatedlineedit.cpp \
|
||||||
qt/qvaluecombobox.cpp \
|
qt/qvaluecombobox.cpp \
|
||||||
qt/rpcconsole.cpp \
|
qt/rpcconsole.cpp \
|
||||||
|
qt/scicon.cpp \
|
||||||
qt/splashscreen.cpp \
|
qt/splashscreen.cpp \
|
||||||
qt/trafficgraphwidget.cpp \
|
qt/trafficgraphwidget.cpp \
|
||||||
qt/utilitydialog.cpp \
|
qt/utilitydialog.cpp
|
||||||
qt/winshutdownmonitor.cpp
|
|
||||||
|
if TARGET_WINDOWS
|
||||||
|
BITCOIN_QT_CPP += qt/winshutdownmonitor.cpp
|
||||||
|
endif
|
||||||
|
|
||||||
if ENABLE_WALLET
|
if ENABLE_WALLET
|
||||||
BITCOIN_QT_CPP += \
|
BITCOIN_QT_CPP += \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
TESTS += test/test_bitcoin test/bitcoin-util-test.py
|
TESTS += test/test_bitcoin
|
||||||
bin_PROGRAMS += test/test_bitcoin
|
bin_PROGRAMS += test/test_bitcoin
|
||||||
TEST_SRCDIR = test
|
TEST_SRCDIR = test
|
||||||
TEST_BINARY=test/test_bitcoin$(EXEEXT)
|
TEST_BINARY=test/test_bitcoin$(EXEEXT)
|
||||||
|
@ -14,7 +14,8 @@ EXTRA_DIST += \
|
||||||
test/data/tt-locktime317000-out.hex \
|
test/data/tt-locktime317000-out.hex \
|
||||||
test/data/tx394b54bb.hex \
|
test/data/tx394b54bb.hex \
|
||||||
test/data/txcreate1.hex \
|
test/data/txcreate1.hex \
|
||||||
test/data/txcreate2.hex
|
test/data/txcreate2.hex \
|
||||||
|
test/data/txcreatesign.hex
|
||||||
|
|
||||||
JSON_TEST_FILES = \
|
JSON_TEST_FILES = \
|
||||||
test/data/script_valid.json \
|
test/data/script_valid.json \
|
||||||
|
@ -33,6 +34,7 @@ RAW_TEST_FILES = test/data/alertTests.raw
|
||||||
GENERATED_TEST_FILES = $(JSON_TEST_FILES:.json=.json.h) $(RAW_TEST_FILES:.raw=.raw.h)
|
GENERATED_TEST_FILES = $(JSON_TEST_FILES:.json=.json.h) $(RAW_TEST_FILES:.raw=.raw.h)
|
||||||
|
|
||||||
BITCOIN_TESTS =\
|
BITCOIN_TESTS =\
|
||||||
|
test/arith_uint256_tests.cpp \
|
||||||
test/bignum.h \
|
test/bignum.h \
|
||||||
test/alert_tests.cpp \
|
test/alert_tests.cpp \
|
||||||
test/allocator_tests.cpp \
|
test/allocator_tests.cpp \
|
||||||
|
@ -105,6 +107,8 @@ bitcoin_test_clean : FORCE
|
||||||
rm -f $(CLEAN_BITCOIN_TEST) $(test_test_bitcoin_OBJECTS) $(TEST_BINARY)
|
rm -f $(CLEAN_BITCOIN_TEST) $(test_test_bitcoin_OBJECTS) $(TEST_BINARY)
|
||||||
|
|
||||||
check-local:
|
check-local:
|
||||||
|
@echo "Running test/bitcoin-util-test.py..."
|
||||||
|
$(AM_V_at)srcdir=$(srcdir) PYTHONPATH=$(builddir)/test $(srcdir)/test/bitcoin-util-test.py
|
||||||
$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C secp256k1 check
|
$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C secp256k1 check
|
||||||
|
|
||||||
%.json.h: %.json
|
%.json.h: %.json
|
||||||
|
|
|
@ -15,12 +15,12 @@ int CAddrInfo::GetTriedBucket(const std::vector<unsigned char>& nKey) const
|
||||||
CDataStream ss1(SER_GETHASH, 0);
|
CDataStream ss1(SER_GETHASH, 0);
|
||||||
std::vector<unsigned char> vchKey = GetKey();
|
std::vector<unsigned char> vchKey = GetKey();
|
||||||
ss1 << nKey << vchKey;
|
ss1 << nKey << vchKey;
|
||||||
uint64_t hash1 = Hash(ss1.begin(), ss1.end()).GetLow64();
|
uint64_t hash1 = Hash(ss1.begin(), ss1.end()).GetCheapHash();
|
||||||
|
|
||||||
CDataStream ss2(SER_GETHASH, 0);
|
CDataStream ss2(SER_GETHASH, 0);
|
||||||
std::vector<unsigned char> vchGroupKey = GetGroup();
|
std::vector<unsigned char> vchGroupKey = GetGroup();
|
||||||
ss2 << nKey << vchGroupKey << (hash1 % ADDRMAN_TRIED_BUCKETS_PER_GROUP);
|
ss2 << nKey << vchGroupKey << (hash1 % ADDRMAN_TRIED_BUCKETS_PER_GROUP);
|
||||||
uint64_t hash2 = Hash(ss2.begin(), ss2.end()).GetLow64();
|
uint64_t hash2 = Hash(ss2.begin(), ss2.end()).GetCheapHash();
|
||||||
return hash2 % ADDRMAN_TRIED_BUCKET_COUNT;
|
return hash2 % ADDRMAN_TRIED_BUCKET_COUNT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,11 +30,11 @@ int CAddrInfo::GetNewBucket(const std::vector<unsigned char>& nKey, const CNetAd
|
||||||
std::vector<unsigned char> vchGroupKey = GetGroup();
|
std::vector<unsigned char> vchGroupKey = GetGroup();
|
||||||
std::vector<unsigned char> vchSourceGroupKey = src.GetGroup();
|
std::vector<unsigned char> vchSourceGroupKey = src.GetGroup();
|
||||||
ss1 << nKey << vchGroupKey << vchSourceGroupKey;
|
ss1 << nKey << vchGroupKey << vchSourceGroupKey;
|
||||||
uint64_t hash1 = Hash(ss1.begin(), ss1.end()).GetLow64();
|
uint64_t hash1 = Hash(ss1.begin(), ss1.end()).GetCheapHash();
|
||||||
|
|
||||||
CDataStream ss2(SER_GETHASH, 0);
|
CDataStream ss2(SER_GETHASH, 0);
|
||||||
ss2 << nKey << vchSourceGroupKey << (hash1 % ADDRMAN_NEW_BUCKETS_PER_SOURCE_GROUP);
|
ss2 << nKey << vchSourceGroupKey << (hash1 % ADDRMAN_NEW_BUCKETS_PER_SOURCE_GROUP);
|
||||||
uint64_t hash2 = Hash(ss2.begin(), ss2.end()).GetLow64();
|
uint64_t hash2 = Hash(ss2.begin(), ss2.end()).GetCheapHash();
|
||||||
return hash2 % ADDRMAN_NEW_BUCKET_COUNT;
|
return hash2 % ADDRMAN_NEW_BUCKET_COUNT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2010 Satoshi Nakamoto
|
// Copyright (c) 2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Copyright (c) 2010 Satoshi Nakamoto
|
// Copyright (c) 2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2013 The Bitcoin developers
|
// Copyright (c) 2009-2013 The Bitcoin Core developers
|
||||||
// Distributed under the MIT/X11 software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
#ifndef BITCOIN_ALERT_H
|
#ifndef BITCOIN_ALERT_H
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2009-2013 The Bitcoin developers
|
// Copyright (c) 2009-2013 The Bitcoin Core developers
|
||||||
// Distributed under the MIT/X11 software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
#include "allocators.h"
|
#include "allocators.h"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2013 The Bitcoin developers
|
// Copyright (c) 2009-2013 The Bitcoin Core developers
|
||||||
// Distributed under the MIT/X11 software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
#ifndef BITCOIN_ALLOCATORS_H
|
#ifndef BITCOIN_ALLOCATORS_H
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
259
src/arith_uint256.cpp
Normal file
259
src/arith_uint256.cpp
Normal file
|
@ -0,0 +1,259 @@
|
||||||
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||||
|
// Copyright (c) 2009-2014 The Bitcoin developers
|
||||||
|
// Distributed under the MIT software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#include "arith_uint256.h"
|
||||||
|
|
||||||
|
#include "uint256.h"
|
||||||
|
#include "utilstrencodings.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
template <unsigned int BITS>
|
||||||
|
base_uint<BITS>::base_uint(const std::string& str)
|
||||||
|
{
|
||||||
|
SetHex(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <unsigned int BITS>
|
||||||
|
base_uint<BITS>& base_uint<BITS>::operator<<=(unsigned int shift)
|
||||||
|
{
|
||||||
|
base_uint<BITS> a(*this);
|
||||||
|
for (int i = 0; i < WIDTH; i++)
|
||||||
|
pn[i] = 0;
|
||||||
|
int k = shift / 32;
|
||||||
|
shift = shift % 32;
|
||||||
|
for (int i = 0; i < WIDTH; i++) {
|
||||||
|
if (i + k + 1 < WIDTH && shift != 0)
|
||||||
|
pn[i + k + 1] |= (a.pn[i] >> (32 - shift));
|
||||||
|
if (i + k < WIDTH)
|
||||||
|
pn[i + k] |= (a.pn[i] << shift);
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <unsigned int BITS>
|
||||||
|
base_uint<BITS>& base_uint<BITS>::operator>>=(unsigned int shift)
|
||||||
|
{
|
||||||
|
base_uint<BITS> a(*this);
|
||||||
|
for (int i = 0; i < WIDTH; i++)
|
||||||
|
pn[i] = 0;
|
||||||
|
int k = shift / 32;
|
||||||
|
shift = shift % 32;
|
||||||
|
for (int i = 0; i < WIDTH; i++) {
|
||||||
|
if (i - k - 1 >= 0 && shift != 0)
|
||||||
|
pn[i - k - 1] |= (a.pn[i] << (32 - shift));
|
||||||
|
if (i - k >= 0)
|
||||||
|
pn[i - k] |= (a.pn[i] >> shift);
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <unsigned int BITS>
|
||||||
|
base_uint<BITS>& base_uint<BITS>::operator*=(uint32_t b32)
|
||||||
|
{
|
||||||
|
uint64_t carry = 0;
|
||||||
|
for (int i = 0; i < WIDTH; i++) {
|
||||||
|
uint64_t n = carry + (uint64_t)b32 * pn[i];
|
||||||
|
pn[i] = n & 0xffffffff;
|
||||||
|
carry = n >> 32;
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <unsigned int BITS>
|
||||||
|
base_uint<BITS>& base_uint<BITS>::operator*=(const base_uint& b)
|
||||||
|
{
|
||||||
|
base_uint<BITS> a = *this;
|
||||||
|
*this = 0;
|
||||||
|
for (int j = 0; j < WIDTH; j++) {
|
||||||
|
uint64_t carry = 0;
|
||||||
|
for (int i = 0; i + j < WIDTH; i++) {
|
||||||
|
uint64_t n = carry + pn[i + j] + (uint64_t)a.pn[j] * b.pn[i];
|
||||||
|
pn[i + j] = n & 0xffffffff;
|
||||||
|
carry = n >> 32;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <unsigned int BITS>
|
||||||
|
base_uint<BITS>& base_uint<BITS>::operator/=(const base_uint& b)
|
||||||
|
{
|
||||||
|
base_uint<BITS> div = b; // make a copy, so we can shift.
|
||||||
|
base_uint<BITS> num = *this; // make a copy, so we can subtract.
|
||||||
|
*this = 0; // the quotient.
|
||||||
|
int num_bits = num.bits();
|
||||||
|
int div_bits = div.bits();
|
||||||
|
if (div_bits == 0)
|
||||||
|
throw uint_error("Division by zero");
|
||||||
|
if (div_bits > num_bits) // the result is certainly 0.
|
||||||
|
return *this;
|
||||||
|
int shift = num_bits - div_bits;
|
||||||
|
div <<= shift; // shift so that div and num align.
|
||||||
|
while (shift >= 0) {
|
||||||
|
if (num >= div) {
|
||||||
|
num -= div;
|
||||||
|
pn[shift / 32] |= (1 << (shift & 31)); // set a bit of the result.
|
||||||
|
}
|
||||||
|
div >>= 1; // shift back.
|
||||||
|
shift--;
|
||||||
|
}
|
||||||
|
// num now contains the remainder of the division.
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <unsigned int BITS>
|
||||||
|
int base_uint<BITS>::CompareTo(const base_uint<BITS>& b) const
|
||||||
|
{
|
||||||
|
for (int i = WIDTH - 1; i >= 0; i--) {
|
||||||
|
if (pn[i] < b.pn[i])
|
||||||
|
return -1;
|
||||||
|
if (pn[i] > b.pn[i])
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <unsigned int BITS>
|
||||||
|
bool base_uint<BITS>::EqualTo(uint64_t b) const
|
||||||
|
{
|
||||||
|
for (int i = WIDTH - 1; i >= 2; i--) {
|
||||||
|
if (pn[i])
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (pn[1] != (b >> 32))
|
||||||
|
return false;
|
||||||
|
if (pn[0] != (b & 0xfffffffful))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <unsigned int BITS>
|
||||||
|
double base_uint<BITS>::getdouble() const
|
||||||
|
{
|
||||||
|
double ret = 0.0;
|
||||||
|
double fact = 1.0;
|
||||||
|
for (int i = 0; i < WIDTH; i++) {
|
||||||
|
ret += fact * pn[i];
|
||||||
|
fact *= 4294967296.0;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <unsigned int BITS>
|
||||||
|
std::string base_uint<BITS>::GetHex() const
|
||||||
|
{
|
||||||
|
return ArithToUint256(*this).GetHex();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <unsigned int BITS>
|
||||||
|
void base_uint<BITS>::SetHex(const char* psz)
|
||||||
|
{
|
||||||
|
*this = UintToArith256(uint256S(psz));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <unsigned int BITS>
|
||||||
|
void base_uint<BITS>::SetHex(const std::string& str)
|
||||||
|
{
|
||||||
|
SetHex(str.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
template <unsigned int BITS>
|
||||||
|
std::string base_uint<BITS>::ToString() const
|
||||||
|
{
|
||||||
|
return (GetHex());
|
||||||
|
}
|
||||||
|
|
||||||
|
template <unsigned int BITS>
|
||||||
|
unsigned int base_uint<BITS>::bits() const
|
||||||
|
{
|
||||||
|
for (int pos = WIDTH - 1; pos >= 0; pos--) {
|
||||||
|
if (pn[pos]) {
|
||||||
|
for (int bits = 31; bits > 0; bits--) {
|
||||||
|
if (pn[pos] & 1 << bits)
|
||||||
|
return 32 * pos + bits + 1;
|
||||||
|
}
|
||||||
|
return 32 * pos + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Explicit instantiations for base_uint<256>
|
||||||
|
template base_uint<256>::base_uint(const std::string&);
|
||||||
|
template base_uint<256>& base_uint<256>::operator<<=(unsigned int);
|
||||||
|
template base_uint<256>& base_uint<256>::operator>>=(unsigned int);
|
||||||
|
template base_uint<256>& base_uint<256>::operator*=(uint32_t b32);
|
||||||
|
template base_uint<256>& base_uint<256>::operator*=(const base_uint<256>& b);
|
||||||
|
template base_uint<256>& base_uint<256>::operator/=(const base_uint<256>& b);
|
||||||
|
template int base_uint<256>::CompareTo(const base_uint<256>&) const;
|
||||||
|
template bool base_uint<256>::EqualTo(uint64_t) const;
|
||||||
|
template double base_uint<256>::getdouble() const;
|
||||||
|
template std::string base_uint<256>::GetHex() const;
|
||||||
|
template std::string base_uint<256>::ToString() const;
|
||||||
|
template void base_uint<256>::SetHex(const char*);
|
||||||
|
template void base_uint<256>::SetHex(const std::string&);
|
||||||
|
template unsigned int base_uint<256>::bits() const;
|
||||||
|
|
||||||
|
// This implementation directly uses shifts instead of going
|
||||||
|
// through an intermediate MPI representation.
|
||||||
|
arith_uint256& arith_uint256::SetCompact(uint32_t nCompact, bool* pfNegative, bool* pfOverflow)
|
||||||
|
{
|
||||||
|
int nSize = nCompact >> 24;
|
||||||
|
uint32_t nWord = nCompact & 0x007fffff;
|
||||||
|
if (nSize <= 3) {
|
||||||
|
nWord >>= 8 * (3 - nSize);
|
||||||
|
*this = nWord;
|
||||||
|
} else {
|
||||||
|
*this = nWord;
|
||||||
|
*this <<= 8 * (nSize - 3);
|
||||||
|
}
|
||||||
|
if (pfNegative)
|
||||||
|
*pfNegative = nWord != 0 && (nCompact & 0x00800000) != 0;
|
||||||
|
if (pfOverflow)
|
||||||
|
*pfOverflow = nWord != 0 && ((nSize > 34) ||
|
||||||
|
(nWord > 0xff && nSize > 33) ||
|
||||||
|
(nWord > 0xffff && nSize > 32));
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t arith_uint256::GetCompact(bool fNegative) const
|
||||||
|
{
|
||||||
|
int nSize = (bits() + 7) / 8;
|
||||||
|
uint32_t nCompact = 0;
|
||||||
|
if (nSize <= 3) {
|
||||||
|
nCompact = GetLow64() << 8 * (3 - nSize);
|
||||||
|
} else {
|
||||||
|
arith_uint256 bn = *this >> 8 * (nSize - 3);
|
||||||
|
nCompact = bn.GetLow64();
|
||||||
|
}
|
||||||
|
// The 0x00800000 bit denotes the sign.
|
||||||
|
// Thus, if it is already set, divide the mantissa by 256 and increase the exponent.
|
||||||
|
if (nCompact & 0x00800000) {
|
||||||
|
nCompact >>= 8;
|
||||||
|
nSize++;
|
||||||
|
}
|
||||||
|
assert((nCompact & ~0x007fffff) == 0);
|
||||||
|
assert(nSize < 256);
|
||||||
|
nCompact |= nSize << 24;
|
||||||
|
nCompact |= (fNegative && (nCompact & 0x007fffff) ? 0x00800000 : 0);
|
||||||
|
return nCompact;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint256 ArithToUint256(const arith_uint256 &a)
|
||||||
|
{
|
||||||
|
uint256 b;
|
||||||
|
// TODO: needs bswap32 on big-endian
|
||||||
|
memcpy(b.begin(), a.pn, a.size());
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
arith_uint256 UintToArith256(const uint256 &a)
|
||||||
|
{
|
||||||
|
arith_uint256 b;
|
||||||
|
// TODO: needs bswap32 on big-endian
|
||||||
|
memcpy(b.pn, a.begin(), a.size());
|
||||||
|
return b;
|
||||||
|
}
|
290
src/arith_uint256.h
Normal file
290
src/arith_uint256.h
Normal file
|
@ -0,0 +1,290 @@
|
||||||
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||||
|
// Copyright (c) 2009-2014 The Bitcoin developers
|
||||||
|
// Distributed under the MIT software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#ifndef BITCOIN_ARITH_UINT256_H
|
||||||
|
#define BITCOIN_ARITH_UINT256_H
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <cstring>
|
||||||
|
#include <stdexcept>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class uint256;
|
||||||
|
|
||||||
|
class uint_error : public std::runtime_error {
|
||||||
|
public:
|
||||||
|
explicit uint_error(const std::string& str) : std::runtime_error(str) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Template base class for unsigned big integers. */
|
||||||
|
template<unsigned int BITS>
|
||||||
|
class base_uint
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
enum { WIDTH=BITS/32 };
|
||||||
|
uint32_t pn[WIDTH];
|
||||||
|
public:
|
||||||
|
|
||||||
|
base_uint()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < WIDTH; i++)
|
||||||
|
pn[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
base_uint(const base_uint& b)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < WIDTH; i++)
|
||||||
|
pn[i] = b.pn[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
base_uint& operator=(const base_uint& b)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < WIDTH; i++)
|
||||||
|
pn[i] = b.pn[i];
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
base_uint(uint64_t b)
|
||||||
|
{
|
||||||
|
pn[0] = (unsigned int)b;
|
||||||
|
pn[1] = (unsigned int)(b >> 32);
|
||||||
|
for (int i = 2; i < WIDTH; i++)
|
||||||
|
pn[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
explicit base_uint(const std::string& str);
|
||||||
|
|
||||||
|
bool operator!() const
|
||||||
|
{
|
||||||
|
for (int i = 0; i < WIDTH; i++)
|
||||||
|
if (pn[i] != 0)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const base_uint operator~() const
|
||||||
|
{
|
||||||
|
base_uint ret;
|
||||||
|
for (int i = 0; i < WIDTH; i++)
|
||||||
|
ret.pn[i] = ~pn[i];
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
const base_uint operator-() const
|
||||||
|
{
|
||||||
|
base_uint ret;
|
||||||
|
for (int i = 0; i < WIDTH; i++)
|
||||||
|
ret.pn[i] = ~pn[i];
|
||||||
|
ret++;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
double getdouble() const;
|
||||||
|
|
||||||
|
base_uint& operator=(uint64_t b)
|
||||||
|
{
|
||||||
|
pn[0] = (unsigned int)b;
|
||||||
|
pn[1] = (unsigned int)(b >> 32);
|
||||||
|
for (int i = 2; i < WIDTH; i++)
|
||||||
|
pn[i] = 0;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
base_uint& operator^=(const base_uint& b)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < WIDTH; i++)
|
||||||
|
pn[i] ^= b.pn[i];
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
base_uint& operator&=(const base_uint& b)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < WIDTH; i++)
|
||||||
|
pn[i] &= b.pn[i];
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
base_uint& operator|=(const base_uint& b)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < WIDTH; i++)
|
||||||
|
pn[i] |= b.pn[i];
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
base_uint& operator^=(uint64_t b)
|
||||||
|
{
|
||||||
|
pn[0] ^= (unsigned int)b;
|
||||||
|
pn[1] ^= (unsigned int)(b >> 32);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
base_uint& operator|=(uint64_t b)
|
||||||
|
{
|
||||||
|
pn[0] |= (unsigned int)b;
|
||||||
|
pn[1] |= (unsigned int)(b >> 32);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
base_uint& operator<<=(unsigned int shift);
|
||||||
|
base_uint& operator>>=(unsigned int shift);
|
||||||
|
|
||||||
|
base_uint& operator+=(const base_uint& b)
|
||||||
|
{
|
||||||
|
uint64_t carry = 0;
|
||||||
|
for (int i = 0; i < WIDTH; i++)
|
||||||
|
{
|
||||||
|
uint64_t n = carry + pn[i] + b.pn[i];
|
||||||
|
pn[i] = n & 0xffffffff;
|
||||||
|
carry = n >> 32;
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
base_uint& operator-=(const base_uint& b)
|
||||||
|
{
|
||||||
|
*this += -b;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
base_uint& operator+=(uint64_t b64)
|
||||||
|
{
|
||||||
|
base_uint b;
|
||||||
|
b = b64;
|
||||||
|
*this += b;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
base_uint& operator-=(uint64_t b64)
|
||||||
|
{
|
||||||
|
base_uint b;
|
||||||
|
b = b64;
|
||||||
|
*this += -b;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
base_uint& operator*=(uint32_t b32);
|
||||||
|
base_uint& operator*=(const base_uint& b);
|
||||||
|
base_uint& operator/=(const base_uint& b);
|
||||||
|
|
||||||
|
base_uint& operator++()
|
||||||
|
{
|
||||||
|
// prefix operator
|
||||||
|
int i = 0;
|
||||||
|
while (++pn[i] == 0 && i < WIDTH-1)
|
||||||
|
i++;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
const base_uint operator++(int)
|
||||||
|
{
|
||||||
|
// postfix operator
|
||||||
|
const base_uint ret = *this;
|
||||||
|
++(*this);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
base_uint& operator--()
|
||||||
|
{
|
||||||
|
// prefix operator
|
||||||
|
int i = 0;
|
||||||
|
while (--pn[i] == (uint32_t)-1 && i < WIDTH-1)
|
||||||
|
i++;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
const base_uint operator--(int)
|
||||||
|
{
|
||||||
|
// postfix operator
|
||||||
|
const base_uint ret = *this;
|
||||||
|
--(*this);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CompareTo(const base_uint& b) const;
|
||||||
|
bool EqualTo(uint64_t b) const;
|
||||||
|
|
||||||
|
friend inline const base_uint operator+(const base_uint& a, const base_uint& b) { return base_uint(a) += b; }
|
||||||
|
friend inline const base_uint operator-(const base_uint& a, const base_uint& b) { return base_uint(a) -= b; }
|
||||||
|
friend inline const base_uint operator*(const base_uint& a, const base_uint& b) { return base_uint(a) *= b; }
|
||||||
|
friend inline const base_uint operator/(const base_uint& a, const base_uint& b) { return base_uint(a) /= b; }
|
||||||
|
friend inline const base_uint operator|(const base_uint& a, const base_uint& b) { return base_uint(a) |= b; }
|
||||||
|
friend inline const base_uint operator&(const base_uint& a, const base_uint& b) { return base_uint(a) &= b; }
|
||||||
|
friend inline const base_uint operator^(const base_uint& a, const base_uint& b) { return base_uint(a) ^= b; }
|
||||||
|
friend inline const base_uint operator>>(const base_uint& a, int shift) { return base_uint(a) >>= shift; }
|
||||||
|
friend inline const base_uint operator<<(const base_uint& a, int shift) { return base_uint(a) <<= shift; }
|
||||||
|
friend inline const base_uint operator*(const base_uint& a, uint32_t b) { return base_uint(a) *= b; }
|
||||||
|
friend inline bool operator==(const base_uint& a, const base_uint& b) { return memcmp(a.pn, b.pn, sizeof(a.pn)) == 0; }
|
||||||
|
friend inline bool operator!=(const base_uint& a, const base_uint& b) { return memcmp(a.pn, b.pn, sizeof(a.pn)) != 0; }
|
||||||
|
friend inline bool operator>(const base_uint& a, const base_uint& b) { return a.CompareTo(b) > 0; }
|
||||||
|
friend inline bool operator<(const base_uint& a, const base_uint& b) { return a.CompareTo(b) < 0; }
|
||||||
|
friend inline bool operator>=(const base_uint& a, const base_uint& b) { return a.CompareTo(b) >= 0; }
|
||||||
|
friend inline bool operator<=(const base_uint& a, const base_uint& b) { return a.CompareTo(b) <= 0; }
|
||||||
|
friend inline bool operator==(const base_uint& a, uint64_t b) { return a.EqualTo(b); }
|
||||||
|
friend inline bool operator!=(const base_uint& a, uint64_t b) { return !a.EqualTo(b); }
|
||||||
|
|
||||||
|
std::string GetHex() const;
|
||||||
|
void SetHex(const char* psz);
|
||||||
|
void SetHex(const std::string& str);
|
||||||
|
std::string ToString() const;
|
||||||
|
|
||||||
|
unsigned int size() const
|
||||||
|
{
|
||||||
|
return sizeof(pn);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the position of the highest bit set plus one, or zero if the
|
||||||
|
* value is zero.
|
||||||
|
*/
|
||||||
|
unsigned int bits() const;
|
||||||
|
|
||||||
|
uint64_t GetLow64() const
|
||||||
|
{
|
||||||
|
assert(WIDTH >= 2);
|
||||||
|
return pn[0] | (uint64_t)pn[1] << 32;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 256-bit unsigned big integer. */
|
||||||
|
class arith_uint256 : public base_uint<256> {
|
||||||
|
public:
|
||||||
|
arith_uint256() {}
|
||||||
|
arith_uint256(const base_uint<256>& b) : base_uint<256>(b) {}
|
||||||
|
arith_uint256(uint64_t b) : base_uint<256>(b) {}
|
||||||
|
explicit arith_uint256(const std::string& str) : base_uint<256>(str) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The "compact" format is a representation of a whole
|
||||||
|
* number N using an unsigned 32bit number similar to a
|
||||||
|
* floating point format.
|
||||||
|
* The most significant 8 bits are the unsigned exponent of base 256.
|
||||||
|
* This exponent can be thought of as "number of bytes of N".
|
||||||
|
* The lower 23 bits are the mantissa.
|
||||||
|
* Bit number 24 (0x800000) represents the sign of N.
|
||||||
|
* N = (-1^sign) * mantissa * 256^(exponent-3)
|
||||||
|
*
|
||||||
|
* Satoshi's original implementation used BN_bn2mpi() and BN_mpi2bn().
|
||||||
|
* MPI uses the most significant bit of the first byte as sign.
|
||||||
|
* Thus 0x1234560000 is compact (0x05123456)
|
||||||
|
* and 0xc0de000000 is compact (0x0600c0de)
|
||||||
|
*
|
||||||
|
* Bitcoin only uses this "compact" format for encoding difficulty
|
||||||
|
* targets, which are unsigned 256bit quantities. Thus, all the
|
||||||
|
* complexities of the sign bit and using base 256 are probably an
|
||||||
|
* implementation accident.
|
||||||
|
*/
|
||||||
|
arith_uint256& SetCompact(uint32_t nCompact, bool *pfNegative = NULL, bool *pfOverflow = NULL);
|
||||||
|
uint32_t GetCompact(bool fNegative = false) const;
|
||||||
|
|
||||||
|
friend uint256 ArithToUint256(const arith_uint256 &);
|
||||||
|
friend arith_uint256 UintToArith256(const uint256 &);
|
||||||
|
};
|
||||||
|
|
||||||
|
uint256 ArithToUint256(const arith_uint256 &);
|
||||||
|
arith_uint256 UintToArith256(const uint256 &);
|
||||||
|
|
||||||
|
#endif // BITCOIN_UINT256_H
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2014 The Bitcoin developers
|
// Copyright (c) 2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ BEGIN
|
||||||
VALUE "FileVersion", VER_FILEVERSION_STR
|
VALUE "FileVersion", VER_FILEVERSION_STR
|
||||||
VALUE "InternalName", "bitcoin-cli"
|
VALUE "InternalName", "bitcoin-cli"
|
||||||
VALUE "LegalCopyright", COPYRIGHT_STR
|
VALUE "LegalCopyright", COPYRIGHT_STR
|
||||||
VALUE "LegalTrademarks1", "Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php."
|
VALUE "LegalTrademarks1", "Distributed under the MIT software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php."
|
||||||
VALUE "OriginalFilename", "bitcoin-cli.exe"
|
VALUE "OriginalFilename", "bitcoin-cli.exe"
|
||||||
VALUE "ProductName", "Bitcoin-cli"
|
VALUE "ProductName", "Bitcoin-cli"
|
||||||
VALUE "ProductVersion", VER_PRODUCTVERSION_STR
|
VALUE "ProductVersion", VER_PRODUCTVERSION_STR
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2013 The Bitcoin developers
|
// Copyright (c) 2009-2013 The Bitcoin Core developers
|
||||||
// Distributed under the MIT/X11 software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
#include "chainparamsbase.h"
|
#include "chainparamsbase.h"
|
||||||
|
@ -86,7 +86,7 @@ static bool AppInitRPC(int argc, char* argv[])
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
ReadConfigFile(mapArgs, mapMultiArgs);
|
ReadConfigFile(mapArgs, mapMultiArgs);
|
||||||
} catch(std::exception &e) {
|
} catch (const std::exception& e) {
|
||||||
fprintf(stderr,"Error reading configuration file: %s\n", e.what());
|
fprintf(stderr,"Error reading configuration file: %s\n", e.what());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -206,7 +206,7 @@ int CommandLineRPC(int argc, char *argv[])
|
||||||
// Connection succeeded, no need to retry.
|
// Connection succeeded, no need to retry.
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
catch (const CConnectionFailed& e) {
|
catch (const CConnectionFailed&) {
|
||||||
if (fWait)
|
if (fWait)
|
||||||
MilliSleep(1000);
|
MilliSleep(1000);
|
||||||
else
|
else
|
||||||
|
@ -214,10 +214,10 @@ int CommandLineRPC(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
} while (fWait);
|
} while (fWait);
|
||||||
}
|
}
|
||||||
catch (boost::thread_interrupted) {
|
catch (const boost::thread_interrupted&) {
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
catch (std::exception& e) {
|
catch (const std::exception& e) {
|
||||||
strPrint = string("error: ") + e.what();
|
strPrint = string("error: ") + e.what();
|
||||||
nRet = EXIT_FAILURE;
|
nRet = EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -240,7 +240,7 @@ int main(int argc, char* argv[])
|
||||||
if(!AppInitRPC(argc, argv))
|
if(!AppInitRPC(argc, argv))
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
catch (std::exception& e) {
|
catch (const std::exception& e) {
|
||||||
PrintExceptionContinue(&e, "AppInitRPC()");
|
PrintExceptionContinue(&e, "AppInitRPC()");
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
|
@ -252,7 +252,7 @@ int main(int argc, char* argv[])
|
||||||
try {
|
try {
|
||||||
ret = CommandLineRPC(argc, argv);
|
ret = CommandLineRPC(argc, argv);
|
||||||
}
|
}
|
||||||
catch (std::exception& e) {
|
catch (const std::exception& e) {
|
||||||
PrintExceptionContinue(&e, "CommandLineRPC()");
|
PrintExceptionContinue(&e, "CommandLineRPC()");
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
PrintExceptionContinue(NULL, "CommandLineRPC()");
|
PrintExceptionContinue(NULL, "CommandLineRPC()");
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT/X11 software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
#include "base58.h"
|
#include "base58.h"
|
||||||
|
@ -191,7 +191,7 @@ static void MutateTxAddInput(CMutableTransaction& tx, const string& strInput)
|
||||||
string strTxid = strInput.substr(0, pos);
|
string strTxid = strInput.substr(0, pos);
|
||||||
if ((strTxid.size() != 64) || !IsHex(strTxid))
|
if ((strTxid.size() != 64) || !IsHex(strTxid))
|
||||||
throw runtime_error("invalid TX input txid");
|
throw runtime_error("invalid TX input txid");
|
||||||
uint256 txid(strTxid);
|
uint256 txid(uint256S(strTxid));
|
||||||
|
|
||||||
static const unsigned int minTxOutSz = 9;
|
static const unsigned int minTxOutSz = 9;
|
||||||
static const unsigned int maxVout = MAX_BLOCK_SIZE / minTxOutSz;
|
static const unsigned int maxVout = MAX_BLOCK_SIZE / minTxOutSz;
|
||||||
|
@ -315,7 +315,7 @@ static bool findSighashFlags(int& flags, const string& flagStr)
|
||||||
uint256 ParseHashUO(map<string,UniValue>& o, string strKey)
|
uint256 ParseHashUO(map<string,UniValue>& o, string strKey)
|
||||||
{
|
{
|
||||||
if (!o.count(strKey))
|
if (!o.count(strKey))
|
||||||
return 0;
|
return uint256();
|
||||||
return ParseHashUV(o[strKey], strKey);
|
return ParseHashUV(o[strKey], strKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -368,7 +368,7 @@ static void MutateTxSign(CMutableTransaction& tx, const string& flagStr)
|
||||||
// Add previous txouts given in the RPC call:
|
// Add previous txouts given in the RPC call:
|
||||||
if (!registers.count("prevtxs"))
|
if (!registers.count("prevtxs"))
|
||||||
throw runtime_error("prevtxs register variable must be set.");
|
throw runtime_error("prevtxs register variable must be set.");
|
||||||
UniValue prevtxsObj = registers["privatekeys"];
|
UniValue prevtxsObj = registers["prevtxs"];
|
||||||
{
|
{
|
||||||
for (unsigned int previdx = 0; previdx < prevtxsObj.count(); previdx++) {
|
for (unsigned int previdx = 0; previdx < prevtxsObj.count(); previdx++) {
|
||||||
UniValue prevOut = prevtxsObj[previdx];
|
UniValue prevOut = prevtxsObj[previdx];
|
||||||
|
@ -379,13 +379,13 @@ static void MutateTxSign(CMutableTransaction& tx, const string& flagStr)
|
||||||
if (!prevOut.checkObject(types))
|
if (!prevOut.checkObject(types))
|
||||||
throw runtime_error("prevtxs internal object typecheck fail");
|
throw runtime_error("prevtxs internal object typecheck fail");
|
||||||
|
|
||||||
uint256 txid = ParseHashUV(prevOut, "txid");
|
uint256 txid = ParseHashUV(prevOut["txid"], "txid");
|
||||||
|
|
||||||
int nOut = atoi(prevOut["vout"].getValStr());
|
int nOut = atoi(prevOut["vout"].getValStr());
|
||||||
if (nOut < 0)
|
if (nOut < 0)
|
||||||
throw runtime_error("vout must be positive");
|
throw runtime_error("vout must be positive");
|
||||||
|
|
||||||
vector<unsigned char> pkData(ParseHexUV(prevOut, "scriptPubKey"));
|
vector<unsigned char> pkData(ParseHexUV(prevOut["scriptPubKey"], "scriptPubKey"));
|
||||||
CScript scriptPubKey(pkData.begin(), pkData.end());
|
CScript scriptPubKey(pkData.begin(), pkData.end());
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -485,7 +485,7 @@ static void MutateTx(CMutableTransaction& tx, const string& command,
|
||||||
static void OutputTxJSON(const CTransaction& tx)
|
static void OutputTxJSON(const CTransaction& tx)
|
||||||
{
|
{
|
||||||
UniValue entry(UniValue::VOBJ);
|
UniValue entry(UniValue::VOBJ);
|
||||||
TxToUniv(tx, 0, entry);
|
TxToUniv(tx, uint256(), entry);
|
||||||
|
|
||||||
string jsonOutput = entry.write(4);
|
string jsonOutput = entry.write(4);
|
||||||
fprintf(stdout, "%s\n", jsonOutput.c_str());
|
fprintf(stdout, "%s\n", jsonOutput.c_str());
|
||||||
|
@ -586,10 +586,10 @@ static int CommandLineRawTx(int argc, char* argv[])
|
||||||
OutputTx(tx);
|
OutputTx(tx);
|
||||||
}
|
}
|
||||||
|
|
||||||
catch (boost::thread_interrupted) {
|
catch (const boost::thread_interrupted&) {
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
catch (std::exception& e) {
|
catch (const std::exception& e) {
|
||||||
strPrint = string("error: ") + e.what();
|
strPrint = string("error: ") + e.what();
|
||||||
nRet = EXIT_FAILURE;
|
nRet = EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -612,7 +612,7 @@ int main(int argc, char* argv[])
|
||||||
if(!AppInitRawTx(argc, argv))
|
if(!AppInitRawTx(argc, argv))
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
catch (std::exception& e) {
|
catch (const std::exception& e) {
|
||||||
PrintExceptionContinue(&e, "AppInitRawTx()");
|
PrintExceptionContinue(&e, "AppInitRawTx()");
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
|
@ -624,7 +624,7 @@ int main(int argc, char* argv[])
|
||||||
try {
|
try {
|
||||||
ret = CommandLineRawTx(argc, argv);
|
ret = CommandLineRawTx(argc, argv);
|
||||||
}
|
}
|
||||||
catch (std::exception& e) {
|
catch (const std::exception& e) {
|
||||||
PrintExceptionContinue(&e, "CommandLineRawTx()");
|
PrintExceptionContinue(&e, "CommandLineRawTx()");
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
PrintExceptionContinue(NULL, "CommandLineRawTx()");
|
PrintExceptionContinue(NULL, "CommandLineRawTx()");
|
||||||
|
|
|
@ -21,7 +21,7 @@ BEGIN
|
||||||
VALUE "FileVersion", VER_FILEVERSION_STR
|
VALUE "FileVersion", VER_FILEVERSION_STR
|
||||||
VALUE "InternalName", "bitcoind"
|
VALUE "InternalName", "bitcoind"
|
||||||
VALUE "LegalCopyright", COPYRIGHT_STR
|
VALUE "LegalCopyright", COPYRIGHT_STR
|
||||||
VALUE "LegalTrademarks1", "Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php."
|
VALUE "LegalTrademarks1", "Distributed under the MIT software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php."
|
||||||
VALUE "OriginalFilename", "bitcoind.exe"
|
VALUE "OriginalFilename", "bitcoind.exe"
|
||||||
VALUE "ProductName", "Bitcoind"
|
VALUE "ProductName", "Bitcoind"
|
||||||
VALUE "ProductVersion", VER_PRODUCTVERSION_STR
|
VALUE "ProductVersion", VER_PRODUCTVERSION_STR
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2013 The Bitcoin developers
|
// Copyright (c) 2009-2013 The Bitcoin Core developers
|
||||||
// Distributed under the MIT/X11 software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
#include "clientversion.h"
|
#include "clientversion.h"
|
||||||
|
@ -97,7 +97,7 @@ bool AppInit(int argc, char* argv[])
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ReadConfigFile(mapArgs, mapMultiArgs);
|
ReadConfigFile(mapArgs, mapMultiArgs);
|
||||||
} catch(std::exception &e) {
|
} catch (const std::exception& e) {
|
||||||
fprintf(stderr,"Error reading configuration file: %s\n", e.what());
|
fprintf(stderr,"Error reading configuration file: %s\n", e.what());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -147,7 +147,7 @@ bool AppInit(int argc, char* argv[])
|
||||||
detectShutdownThread = new boost::thread(boost::bind(&DetectShutdownThread, &threadGroup));
|
detectShutdownThread = new boost::thread(boost::bind(&DetectShutdownThread, &threadGroup));
|
||||||
fRet = AppInit2(threadGroup);
|
fRet = AppInit2(threadGroup);
|
||||||
}
|
}
|
||||||
catch (std::exception& e) {
|
catch (const std::exception& e) {
|
||||||
PrintExceptionContinue(&e, "AppInit()");
|
PrintExceptionContinue(&e, "AppInit()");
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
PrintExceptionContinue(NULL, "AppInit()");
|
PrintExceptionContinue(NULL, "AppInit()");
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2012-2014 The Bitcoin developers
|
// Copyright (c) 2012-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2012-2014 The Bitcoin developers
|
// Copyright (c) 2012-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
13
src/chain.h
13
src/chain.h
|
@ -1,11 +1,12 @@
|
||||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
#ifndef BITCOIN_CHAIN_H
|
#ifndef BITCOIN_CHAIN_H
|
||||||
#define BITCOIN_CHAIN_H
|
#define BITCOIN_CHAIN_H
|
||||||
|
|
||||||
|
#include "arith_uint256.h"
|
||||||
#include "primitives/block.h"
|
#include "primitives/block.h"
|
||||||
#include "pow.h"
|
#include "pow.h"
|
||||||
#include "tinyformat.h"
|
#include "tinyformat.h"
|
||||||
|
@ -117,7 +118,7 @@ public:
|
||||||
unsigned int nUndoPos;
|
unsigned int nUndoPos;
|
||||||
|
|
||||||
//! (memory only) Total amount of work (expected number of hashes) in the chain up to and including this block
|
//! (memory only) Total amount of work (expected number of hashes) in the chain up to and including this block
|
||||||
uint256 nChainWork;
|
arith_uint256 nChainWork;
|
||||||
|
|
||||||
//! Number of transactions in this block.
|
//! Number of transactions in this block.
|
||||||
//! Note: in a potential headers-first mode, this number cannot be relied upon
|
//! Note: in a potential headers-first mode, this number cannot be relied upon
|
||||||
|
@ -150,14 +151,14 @@ public:
|
||||||
nFile = 0;
|
nFile = 0;
|
||||||
nDataPos = 0;
|
nDataPos = 0;
|
||||||
nUndoPos = 0;
|
nUndoPos = 0;
|
||||||
nChainWork = 0;
|
nChainWork = arith_uint256();
|
||||||
nTx = 0;
|
nTx = 0;
|
||||||
nChainTx = 0;
|
nChainTx = 0;
|
||||||
nStatus = 0;
|
nStatus = 0;
|
||||||
nSequenceId = 0;
|
nSequenceId = 0;
|
||||||
|
|
||||||
nVersion = 0;
|
nVersion = 0;
|
||||||
hashMerkleRoot = 0;
|
hashMerkleRoot = uint256();
|
||||||
nTime = 0;
|
nTime = 0;
|
||||||
nBits = 0;
|
nBits = 0;
|
||||||
nNonce = 0;
|
nNonce = 0;
|
||||||
|
@ -282,11 +283,11 @@ public:
|
||||||
uint256 hashPrev;
|
uint256 hashPrev;
|
||||||
|
|
||||||
CDiskBlockIndex() {
|
CDiskBlockIndex() {
|
||||||
hashPrev = 0;
|
hashPrev = uint256();
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit CDiskBlockIndex(const CBlockIndex* pindex) : CBlockIndex(*pindex) {
|
explicit CDiskBlockIndex(const CBlockIndex* pindex) : CBlockIndex(*pindex) {
|
||||||
hashPrev = (pprev ? pprev->GetBlockHash() : 0);
|
hashPrev = (pprev ? pprev->GetBlockHash() : uint256());
|
||||||
}
|
}
|
||||||
|
|
||||||
ADD_SERIALIZE_METHODS;
|
ADD_SERIALIZE_METHODS;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2010 Satoshi Nakamoto
|
// Copyright (c) 2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ static void convertSeed6(std::vector<CAddress> &vSeedsOut, const SeedSpec6 *data
|
||||||
|
|
||||||
static Checkpoints::MapCheckpoints mapCheckpoints =
|
static Checkpoints::MapCheckpoints mapCheckpoints =
|
||||||
boost::assign::map_list_of
|
boost::assign::map_list_of
|
||||||
( 0, uint256("0x008c55867210a8154af697b7776c6b6cdb26972381eac9f84d18a491374464a3"));
|
( 0, uint256S("0x008c55867210a8154af697b7776c6b6cdb26972381eac9f84d18a491374464a3"));
|
||||||
/*static Checkpoints::MapCheckpoints mapCheckpoints =
|
/*static Checkpoints::MapCheckpoints mapCheckpoints =
|
||||||
boost::assign::map_list_of
|
boost::assign::map_list_of
|
||||||
( 11111, uint256("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d"))
|
( 11111, uint256("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d"))
|
||||||
|
@ -83,7 +83,7 @@ static const Checkpoints::CCheckpointData data = {
|
||||||
|
|
||||||
static Checkpoints::MapCheckpoints mapCheckpointsTestnet =
|
static Checkpoints::MapCheckpoints mapCheckpointsTestnet =
|
||||||
boost::assign::map_list_of
|
boost::assign::map_list_of
|
||||||
( 546, uint256("000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70"))
|
( 546, uint256S("000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70"))
|
||||||
;
|
;
|
||||||
static const Checkpoints::CCheckpointData dataTestnet = {
|
static const Checkpoints::CCheckpointData dataTestnet = {
|
||||||
&mapCheckpointsTestnet,
|
&mapCheckpointsTestnet,
|
||||||
|
@ -94,7 +94,7 @@ static const Checkpoints::CCheckpointData dataTestnet = {
|
||||||
|
|
||||||
static Checkpoints::MapCheckpoints mapCheckpointsRegtest =
|
static Checkpoints::MapCheckpoints mapCheckpointsRegtest =
|
||||||
boost::assign::map_list_of
|
boost::assign::map_list_of
|
||||||
( 0, uint256("0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206"))
|
( 0, uint256S("0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206"))
|
||||||
;
|
;
|
||||||
static const Checkpoints::CCheckpointData dataRegtest = {
|
static const Checkpoints::CCheckpointData dataRegtest = {
|
||||||
&mapCheckpointsRegtest,
|
&mapCheckpointsRegtest,
|
||||||
|
@ -119,7 +119,7 @@ public:
|
||||||
pchMessageStart[3] = 0xd9;
|
pchMessageStart[3] = 0xd9;
|
||||||
vAlertPubKey = ParseHex("04fc9702847840aaf195de8442ebecedf5b095cdbb9bc716bda9110971b28a49e0ead8564ff0db22209e0374782c093bb899692d524e9d6a6956e7c5ecbcd68284");
|
vAlertPubKey = ParseHex("04fc9702847840aaf195de8442ebecedf5b095cdbb9bc716bda9110971b28a49e0ead8564ff0db22209e0374782c093bb899692d524e9d6a6956e7c5ecbcd68284");
|
||||||
nDefaultPort = 8333;
|
nDefaultPort = 8333;
|
||||||
bnProofOfWorkLimit = ~uint256(0) >> 1;
|
bnProofOfWorkLimit = ~arith_uint256(0) >> 1;
|
||||||
nSubsidyHalvingInterval = 2100000;
|
nSubsidyHalvingInterval = 2100000;
|
||||||
nEnforceBlockUpgradeMajority = 750;
|
nEnforceBlockUpgradeMajority = 750;
|
||||||
nRejectBlockOutdatedMajority = 950;
|
nRejectBlockOutdatedMajority = 950;
|
||||||
|
@ -148,7 +148,7 @@ public:
|
||||||
//txNew.vout[0].scriptPubKey = CScript() << ParseHex("0425caecb9fbf6cf50979644e85c11e3ec9007fd477fab9683648c6539e59b59c3a4d9b9c0b552c37eee6476f3e0d8425ac0346fe69ad61628b8c340d42fbfa3fd") << OP_CHECKSIG;
|
//txNew.vout[0].scriptPubKey = CScript() << ParseHex("0425caecb9fbf6cf50979644e85c11e3ec9007fd477fab9683648c6539e59b59c3a4d9b9c0b552c37eee6476f3e0d8425ac0346fe69ad61628b8c340d42fbfa3fd") << OP_CHECKSIG;
|
||||||
txNew.vout[0].scriptPubKey = CScript() << OP_DUP << OP_HASH160 << ParseHex("e5ff2d9e3a254622ae493573169c0fa94c82fe4f") << OP_EQUALVERIFY << OP_CHECKSIG;
|
txNew.vout[0].scriptPubKey = CScript() << OP_DUP << OP_HASH160 << ParseHex("e5ff2d9e3a254622ae493573169c0fa94c82fe4f") << OP_EQUALVERIFY << OP_CHECKSIG;
|
||||||
genesis.vtx.push_back(txNew);
|
genesis.vtx.push_back(txNew);
|
||||||
genesis.hashPrevBlock = 0;
|
genesis.hashPrevBlock.SetNull();
|
||||||
genesis.hashMerkleRoot = genesis.BuildMerkleTree();
|
genesis.hashMerkleRoot = genesis.BuildMerkleTree();
|
||||||
genesis.nVersion = 1;
|
genesis.nVersion = 1;
|
||||||
genesis.nTime = 1417453734;
|
genesis.nTime = 1417453734;
|
||||||
|
@ -172,10 +172,10 @@ public:
|
||||||
hashGenesisBlock = genesis.GetHash();
|
hashGenesisBlock = genesis.GetHash();
|
||||||
//printf("%s\n", hashGenesisBlock.GetHex().c_str());
|
//printf("%s\n", hashGenesisBlock.GetHex().c_str());
|
||||||
//assert(hashGenesisBlock == uint256("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"));
|
//assert(hashGenesisBlock == uint256("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"));
|
||||||
assert(hashGenesisBlock == uint256("0x008c55867210a8154af697b7776c6b6cdb26972381eac9f84d18a491374464a3"));
|
assert(hashGenesisBlock == uint256S("0x008c55867210a8154af697b7776c6b6cdb26972381eac9f84d18a491374464a3"));
|
||||||
//printf("%s\n", genesis.hashMerkleRoot.GetHex().c_str());
|
//printf("%s\n", genesis.hashMerkleRoot.GetHex().c_str());
|
||||||
//assert(genesis.hashMerkleRoot == uint256("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"));
|
//assert(genesis.hashMerkleRoot == uint256("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"));
|
||||||
assert(genesis.hashMerkleRoot == uint256("0xa7d51d407092059a2beeffab22e65d6176cfb3c33b93515109480aa7c81c9141"));
|
assert(genesis.hashMerkleRoot == uint256S("0xa7d51d407092059a2beeffab22e65d6176cfb3c33b93515109480aa7c81c9141"));
|
||||||
|
|
||||||
//vSeeds.push_back(CDNSSeedData("bitcoin.sipa.be", "seed.bitcoin.sipa.be"));
|
//vSeeds.push_back(CDNSSeedData("bitcoin.sipa.be", "seed.bitcoin.sipa.be"));
|
||||||
//vSeeds.push_back(CDNSSeedData("bluematt.me", "dnsseed.bluematt.me"));
|
//vSeeds.push_back(CDNSSeedData("bluematt.me", "dnsseed.bluematt.me"));
|
||||||
|
@ -288,7 +288,7 @@ public:
|
||||||
nMinerThreads = 1;
|
nMinerThreads = 1;
|
||||||
nTargetTimespan = 14 * 24 * 60 * 60; //! two weeks
|
nTargetTimespan = 14 * 24 * 60 * 60; //! two weeks
|
||||||
nTargetSpacing = 10 * 60;
|
nTargetSpacing = 10 * 60;
|
||||||
bnProofOfWorkLimit = ~uint256(0) >> 1;
|
bnProofOfWorkLimit = ~arith_uint256(0) >> 1;
|
||||||
genesis.nTime = 1296688602;
|
genesis.nTime = 1296688602;
|
||||||
genesis.nBits = 0x207fffff;
|
genesis.nBits = 0x207fffff;
|
||||||
genesis.nNonce = 2;
|
genesis.nNonce = 2;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
||||||
#include "checkpoints.h"
|
#include "checkpoints.h"
|
||||||
#include "primitives/block.h"
|
#include "primitives/block.h"
|
||||||
#include "protocol.h"
|
#include "protocol.h"
|
||||||
#include "uint256.h"
|
#include "arith_uint256.h"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ public:
|
||||||
const MessageStartChars& MessageStart() const { return pchMessageStart; }
|
const MessageStartChars& MessageStart() const { return pchMessageStart; }
|
||||||
const std::vector<unsigned char>& AlertKey() const { return vAlertPubKey; }
|
const std::vector<unsigned char>& AlertKey() const { return vAlertPubKey; }
|
||||||
int GetDefaultPort() const { return nDefaultPort; }
|
int GetDefaultPort() const { return nDefaultPort; }
|
||||||
const uint256& ProofOfWorkLimit() const { return bnProofOfWorkLimit; }
|
const arith_uint256& ProofOfWorkLimit() const { return bnProofOfWorkLimit; }
|
||||||
int SubsidyHalvingInterval() const { return nSubsidyHalvingInterval; }
|
int SubsidyHalvingInterval() const { return nSubsidyHalvingInterval; }
|
||||||
/** Used to check majorities for block version upgrade */
|
/** Used to check majorities for block version upgrade */
|
||||||
int EnforceBlockUpgradeMajority() const { return nEnforceBlockUpgradeMajority; }
|
int EnforceBlockUpgradeMajority() const { return nEnforceBlockUpgradeMajority; }
|
||||||
|
@ -87,7 +87,7 @@ protected:
|
||||||
//! Raw pub key bytes for the broadcast alert signing key.
|
//! Raw pub key bytes for the broadcast alert signing key.
|
||||||
std::vector<unsigned char> vAlertPubKey;
|
std::vector<unsigned char> vAlertPubKey;
|
||||||
int nDefaultPort;
|
int nDefaultPort;
|
||||||
uint256 bnProofOfWorkLimit;
|
arith_uint256 bnProofOfWorkLimit;
|
||||||
int nSubsidyHalvingInterval;
|
int nSubsidyHalvingInterval;
|
||||||
int nEnforceBlockUpgradeMajority;
|
int nEnforceBlockUpgradeMajority;
|
||||||
int nRejectBlockOutdatedMajority;
|
int nRejectBlockOutdatedMajority;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2010 Satoshi Nakamoto
|
// Copyright (c) 2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2014 The Bitcoin developers
|
// Copyright (c) 2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2012-2014 The Bitcoin developers
|
// Copyright (c) 2012-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2012-2014 The Bitcoin developers
|
// Copyright (c) 2012-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
* Copyright year (2009-this)
|
* Copyright year (2009-this)
|
||||||
* Todo: update this when changing our copyright comments in the source
|
* Todo: update this when changing our copyright comments in the source
|
||||||
*/
|
*/
|
||||||
#define COPYRIGHT_YEAR 2014
|
#define COPYRIGHT_YEAR 2015
|
||||||
|
|
||||||
#endif //HAVE_CONFIG_H
|
#endif //HAVE_CONFIG_H
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2011-2013 The Bitcoin developers
|
// Copyright (c) 2011-2013 The Bitcoin Core developers
|
||||||
// Distributed under the MIT/X11 software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
#ifndef BITCOIN_COINCONTROL_H
|
#ifndef BITCOIN_COINCONTROL_H
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2012-2014 The Bitcoin developers
|
// Copyright (c) 2012-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
@ -33,33 +33,18 @@ void CCoins::CalcMaskSize(unsigned int &nBytes, unsigned int &nNonzeroBytes) con
|
||||||
nBytes += nLastUsedByte;
|
nBytes += nLastUsedByte;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CCoins::Spend(const COutPoint &out, CTxInUndo &undo) {
|
bool CCoins::Spend(uint32_t nPos)
|
||||||
if (out.n >= vout.size())
|
{
|
||||||
|
if (nPos >= vout.size() || vout[nPos].IsNull())
|
||||||
return false;
|
return false;
|
||||||
if (vout[out.n].IsNull())
|
vout[nPos].SetNull();
|
||||||
return false;
|
|
||||||
LogPrintf("In CCoins::Spend for output %d in transaction %s\n", out.n, out.hash.GetHex().c_str());
|
|
||||||
undo = CTxInUndo(vout[out.n]);
|
|
||||||
vout[out.n].SetNull();
|
|
||||||
Cleanup();
|
Cleanup();
|
||||||
if (vout.size() == 0) {
|
|
||||||
undo.nHeight = nHeight;
|
|
||||||
undo.fCoinBase = fCoinBase;
|
|
||||||
undo.nVersion = this->nVersion;
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CCoins::Spend(int nPos) {
|
|
||||||
CTxInUndo undo;
|
|
||||||
COutPoint out(0, nPos);
|
|
||||||
return Spend(out, undo);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool CCoinsView::GetCoins(const uint256 &txid, CCoins &coins) const { return false; }
|
bool CCoinsView::GetCoins(const uint256 &txid, CCoins &coins) const { return false; }
|
||||||
bool CCoinsView::HaveCoins(const uint256 &txid) const { return false; }
|
bool CCoinsView::HaveCoins(const uint256 &txid) const { return false; }
|
||||||
uint256 CCoinsView::GetBestBlock() const { return uint256(0); }
|
uint256 CCoinsView::GetBestBlock() const { return uint256(); }
|
||||||
bool CCoinsView::BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlock) { return false; }
|
bool CCoinsView::BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlock) { return false; }
|
||||||
bool CCoinsView::GetStats(CCoinsStats &stats) const { return false; }
|
bool CCoinsView::GetStats(CCoinsStats &stats) const { return false; }
|
||||||
|
|
||||||
|
@ -74,7 +59,7 @@ bool CCoinsViewBacked::GetStats(CCoinsStats &stats) const { return base->GetStat
|
||||||
|
|
||||||
CCoinsKeyHasher::CCoinsKeyHasher() : salt(GetRandHash()) {}
|
CCoinsKeyHasher::CCoinsKeyHasher() : salt(GetRandHash()) {}
|
||||||
|
|
||||||
CCoinsViewCache::CCoinsViewCache(CCoinsView *baseIn) : CCoinsViewBacked(baseIn), hasModifier(false), hashBlock(0) { }
|
CCoinsViewCache::CCoinsViewCache(CCoinsView *baseIn) : CCoinsViewBacked(baseIn), hasModifier(false) { }
|
||||||
|
|
||||||
CCoinsViewCache::~CCoinsViewCache()
|
CCoinsViewCache::~CCoinsViewCache()
|
||||||
{
|
{
|
||||||
|
@ -145,7 +130,7 @@ bool CCoinsViewCache::HaveCoins(const uint256 &txid) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint256 CCoinsViewCache::GetBestBlock() const {
|
uint256 CCoinsViewCache::GetBestBlock() const {
|
||||||
if (hashBlock == uint256(0))
|
if (hashBlock.IsNull())
|
||||||
hashBlock = base->GetBestBlock();
|
hashBlock = base->GetBestBlock();
|
||||||
return hashBlock;
|
return hashBlock;
|
||||||
}
|
}
|
||||||
|
|
15
src/coins.h
15
src/coins.h
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
@ -9,7 +9,6 @@
|
||||||
#include "compressor.h"
|
#include "compressor.h"
|
||||||
#include "serialize.h"
|
#include "serialize.h"
|
||||||
#include "uint256.h"
|
#include "uint256.h"
|
||||||
#include "undo.h"
|
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
@ -237,11 +236,8 @@ public:
|
||||||
Cleanup();
|
Cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! mark an outpoint spent, and construct undo information
|
|
||||||
bool Spend(const COutPoint &out, CTxInUndo &undo);
|
|
||||||
|
|
||||||
//! mark a vout spent
|
//! mark a vout spent
|
||||||
bool Spend(int nPos);
|
bool Spend(uint32_t nPos);
|
||||||
|
|
||||||
//! check whether a particular output is still available
|
//! check whether a particular output is still available
|
||||||
bool IsAvailable(unsigned int nPos) const {
|
bool IsAvailable(unsigned int nPos) const {
|
||||||
|
@ -301,7 +297,7 @@ struct CCoinsStats
|
||||||
uint256 hashSerialized;
|
uint256 hashSerialized;
|
||||||
CAmount nTotalAmount;
|
CAmount nTotalAmount;
|
||||||
|
|
||||||
CCoinsStats() : nHeight(0), hashBlock(0), nTransactions(0), nTransactionOutputs(0), nSerializedSize(0), hashSerialized(0), nTotalAmount(0) {}
|
CCoinsStats() : nHeight(0), nTransactions(0), nTransactionOutputs(0), nSerializedSize(0), nTotalAmount(0) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -441,6 +437,11 @@ public:
|
||||||
private:
|
private:
|
||||||
CCoinsMap::iterator FetchCoins(const uint256 &txid);
|
CCoinsMap::iterator FetchCoins(const uint256 &txid);
|
||||||
CCoinsMap::const_iterator FetchCoins(const uint256 &txid) const;
|
CCoinsMap::const_iterator FetchCoins(const uint256 &txid) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* By making the copy constructor private, we prevent accidentally using it when one intends to create a cache on top of a base cache.
|
||||||
|
*/
|
||||||
|
CCoinsViewCache(const CCoinsViewCache &);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BITCOIN_COINS_H
|
#endif // BITCOIN_COINS_H
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT/X11 software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
#ifndef BITCOIN_COMPAT_H
|
#ifndef BITCOIN_COMPAT_H
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT/X11 software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
#ifndef BITCOIN_CORE_IO_H
|
#ifndef BITCOIN_CORE_IO_H
|
||||||
|
@ -19,6 +19,7 @@ extern CScript ParseScript(std::string s);
|
||||||
extern bool DecodeHexTx(CTransaction& tx, const std::string& strHexTx);
|
extern bool DecodeHexTx(CTransaction& tx, const std::string& strHexTx);
|
||||||
extern bool DecodeHexBlk(CBlock&, const std::string& strHexBlk);
|
extern bool DecodeHexBlk(CBlock&, const std::string& strHexBlk);
|
||||||
extern uint256 ParseHashUV(const UniValue& v, const std::string& strName);
|
extern uint256 ParseHashUV(const UniValue& v, const std::string& strName);
|
||||||
|
extern uint256 ParseHashStr(const std::string&, const std::string& strName);
|
||||||
extern std::vector<unsigned char> ParseHexUV(const UniValue& v, const std::string& strName);
|
extern std::vector<unsigned char> ParseHexUV(const UniValue& v, const std::string& strName);
|
||||||
|
|
||||||
// core_write.cpp
|
// core_write.cpp
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT/X11 software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
#include "core_io.h"
|
#include "core_io.h"
|
||||||
|
@ -131,6 +131,11 @@ uint256 ParseHashUV(const UniValue& v, const string& strName)
|
||||||
string strHex;
|
string strHex;
|
||||||
if (v.isStr())
|
if (v.isStr())
|
||||||
strHex = v.getValStr();
|
strHex = v.getValStr();
|
||||||
|
return ParseHashStr(strHex, strName); // Note: ParseHashStr("") throws a runtime_error
|
||||||
|
}
|
||||||
|
|
||||||
|
uint256 ParseHashStr(const std::string& strHex, const std::string& strName)
|
||||||
|
{
|
||||||
if (!IsHex(strHex)) // Note: IsHex("") is false
|
if (!IsHex(strHex)) // Note: IsHex("") is false
|
||||||
throw runtime_error(strName+" must be hexadecimal string (not '"+strHex+"')");
|
throw runtime_error(strName+" must be hexadecimal string (not '"+strHex+"')");
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT/X11 software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
#include "core_io.h"
|
#include "core_io.h"
|
||||||
|
@ -127,7 +127,7 @@ void TxToUniv(const CTransaction& tx, const uint256& hashBlock, UniValue& entry)
|
||||||
}
|
}
|
||||||
entry.pushKV("vout", vout);
|
entry.pushKV("vout", vout);
|
||||||
|
|
||||||
if (hashBlock != 0)
|
if (!hashBlock.IsNull())
|
||||||
entry.pushKV("blockhash", hashBlock.GetHex());
|
entry.pushKV("blockhash", hashBlock.GetHex());
|
||||||
|
|
||||||
entry.pushKV("hex", EncodeHexTx(tx)); // the hex-encoded transaction. used the name "hex" to be consistent with the verbose output of "getrawtransaction".
|
entry.pushKV("hex", EncodeHexTx(tx)); // the hex-encoded transaction. used the name "hex" to be consistent with the verbose output of "getrawtransaction".
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2009-2013 The Bitcoin developers
|
// Copyright (c) 2009-2013 The Bitcoin Core developers
|
||||||
// Distributed under the MIT/X11 software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
#include "crypter.h"
|
#include "crypter.h"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2009-2014 The Bitcoin developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2014 The Bitcoin developers
|
// Copyright (c) 2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2014 The Bitcoin developers
|
// Copyright (c) 2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2014 The Bitcoin developers
|
// Copyright (c) 2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2014 The Bitcoin developers
|
// Copyright (c) 2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2014 The Bitcoin developers
|
// Copyright (c) 2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2014 The Bitcoin developers
|
// Copyright (c) 2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2014 The Bitcoin developers
|
// Copyright (c) 2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2014 The Bitcoin developers
|
// Copyright (c) 2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2014 The Bitcoin developers
|
// Copyright (c) 2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2014 The Bitcoin developers
|
// Copyright (c) 2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2014 The Bitcoin developers
|
// Copyright (c) 2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2014 The Bitcoin developers
|
// Copyright (c) 2014 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT 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.
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue