From 022b9cf22efdbf2e59cfe380c3b0e434355d5322 Mon Sep 17 00:00:00 2001 From: Paul Bradley Date: Fri, 14 Mar 2014 06:39:51 +0000 Subject: [PATCH 1/8] KGW at block 720, retarget every 12 blocks --- src/bitcoinrpc.cpp | 22 +++++++++++----------- src/main.cpp | 19 ++++++++++++------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp index 4f7bd84..286ae61 100644 --- a/src/bitcoinrpc.cpp +++ b/src/bitcoinrpc.cpp @@ -2897,24 +2897,24 @@ void ThreadRPCServer2(void* parg) try { boost::shared_ptr acceptor(new ip::tcp::acceptor(io_service)); - acceptor->open(endpoint.protocol()); - acceptor->set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); +// acceptor->open(endpoint.protocol()); +// acceptor->set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); // Try making the socket dual IPv6/IPv4 (if listening on the "any" address) - boost::system::error_code v6_only_error; - acceptor->set_option(boost::asio::ip::v6_only(loopback), v6_only_error); +// boost::system::error_code v6_only_error; +// acceptor->set_option(boost::asio::ip::v6_only(loopback), v6_only_error); - acceptor->bind(endpoint); - acceptor->listen(socket_base::max_connections); +// acceptor->bind(endpoint); +// acceptor->listen(socket_base::max_connections); - RPCListen(acceptor, context, fUseSSL); +// RPCListen(acceptor, context, fUseSSL); // Cancel outstanding listen-requests for this acceptor when shutting down - StopRequests.connect(signals2::slot( - static_cast(&ip::tcp::acceptor::close), acceptor.get()) - .track(acceptor)); +// StopRequests.connect(signals2::slot( +// static_cast(&ip::tcp::acceptor::close), acceptor.get()) +// .track(acceptor)); // If dual IPv6/IPv4 failed (or we're opening loopback interfaces only), open IPv4 separately - if (loopback || v6_only_error) +// if (loopback || v6_only_error) { bindAddress = loopback ? asio::ip::address_v4::loopback() : asio::ip::address_v4::any(); endpoint.address(bindAddress); diff --git a/src/main.cpp b/src/main.cpp index 9db889c..54a6fd4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -838,6 +838,7 @@ int64 static GetBlockValue(int nHeight, int64 nFees) static const int64 nTargetTimespan = 314; // piCoin: Every block static const int64 nTargetSpacing = 314; // piCoin: 314 second blocks static const int64 nInterval = nTargetTimespan / nTargetSpacing; +static const int64 KGWInterval = 12; static const int64 nReTargetHistoryFact = 4; // look at 4 times the retarget // interval into the block history @@ -945,6 +946,10 @@ unsigned int static GetNextWorkRequired_V1(const CBlockIndex* pindexLast, const } unsigned int static KimotoGravityWell(const CBlockIndex* pindexLast, const CBlock *pblock, uint64 TargetBlocksSpacingSeconds, uint64 PastBlocksMin, uint64 PastBlocksMax) { + + // KGW every 12 blocks + if ((pindexLast->nHeight+1) % KGWInterval != 0) {return pindexLast->nBits;} + /* current difficulty formula, megacoin - kimoto gravity well */ const CBlockIndex *BlockLastSolved = pindexLast; const CBlockIndex *BlockReading = pindexLast; @@ -996,10 +1001,10 @@ unsigned int static KimotoGravityWell(const CBlockIndex* pindexLast, const CBloc if (bnNew > bnProofOfWorkLimit) { bnNew = bnProofOfWorkLimit; } /// debug print - printf("Difficulty Retarget - Kimoto Gravity Well\n"); - printf("PastRateAdjustmentRatio = %g\n", PastRateAdjustmentRatio); - printf("Before: %08x %s\n", BlockLastSolved->nBits, CBigNum().SetCompact(BlockLastSolved->nBits).getuint256().ToString().c_str()); - printf("After: %08x %s\n", bnNew.GetCompact(), bnNew.getuint256().ToString().c_str()); +// printf("Difficulty Retarget - Kimoto Gravity Well\n"); +// printf("PastRateAdjustmentRatio = %g\n", PastRateAdjustmentRatio); +// printf("Before: %08x %s\n", BlockLastSolved->nBits, CBigNum().SetCompact(BlockLastSolved->nBits).getuint256().ToString().c_str()); +// printf("After: %08x %s\n", bnNew.GetCompact(), bnNew.getuint256().ToString().c_str()); return bnNew.GetCompact(); } @@ -1008,8 +1013,8 @@ unsigned int static GetNextWorkRequired_V2(const CBlockIndex* pindexLast, const { static const int64 BlocksTargetSpacing = 40; // seconds unsigned int TimeDaySeconds = 60 * 60 * 24; - int64 PastSecondsMin = TimeDaySeconds * 0.0185; - int64 PastSecondsMax = TimeDaySeconds * 0.23125; + int64 PastSecondsMin = TimeDaySeconds * 0.25; + int64 PastSecondsMax = TimeDaySeconds * 7; uint64 PastBlocksMin = PastSecondsMin / BlocksTargetSpacing; uint64 PastBlocksMax = PastSecondsMax / BlocksTargetSpacing; @@ -1023,7 +1028,7 @@ unsigned int static GetNextWorkRequired(const CBlockIndex* pindexLast, const CBl if (pindexLast->nHeight+1 >= 50) { DiffMode = 2; } } else { - if (pindexLast->nHeight+1 >= 35000) { DiffMode = 2; } + if (pindexLast->nHeight+1 >= 720) { DiffMode = 2; } } if (DiffMode == 1) { return GetNextWorkRequired_V1(pindexLast, pblock); } From 5a38b33cea1716e17a0d8cec1f7fab6e243d470d Mon Sep 17 00:00:00 2001 From: Paul Bradley Date: Fri, 14 Mar 2014 00:21:17 -0700 Subject: [PATCH 2/8] fixed typo --- contrib/gitian-descriptors/gitian-win32.yml | 27 +++++++++++---------- src/qt/bitcoin.qrc | 4 +-- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/contrib/gitian-descriptors/gitian-win32.yml b/contrib/gitian-descriptors/gitian-win32.yml index 03c96fa..4bbc9c6 100644 --- a/contrib/gitian-descriptors/gitian-win32.yml +++ b/contrib/gitian-descriptors/gitian-win32.yml @@ -1,5 +1,5 @@ --- -name: "litecoin" +name: "picoin" suites: - "precise" architectures: @@ -13,11 +13,11 @@ packages: - "faketime" reference_datetime: "2011-01-30 00:00:00" remotes: -- "url": "https://github.com/litecoin-project/litecoin.git" - "dir": "litecoin" +- "url": "https://github.com/Paul-Bradley/projectpiCoin" + "dir": "picoin" files: - "qt-win32-4.8.3-gitian-r4.zip" -- "boost-win32-1.54.0-gitian-r6.zip" +- "boost-win32-1.55.0-gitian-r6.zip" - "bitcoin-deps-win32-gitian-r9.zip" script: | # @@ -27,11 +27,11 @@ script: | mkdir -p $STAGING cd $STAGING unzip ../build/qt-win32-4.8.3-gitian-r4.zip - unzip ../build/boost-win32-1.54.0-gitian-r6.zip + unzip ../build/boost-win32-1.55.0-gitian-r6.zip unzip ../build/bitcoin-deps-win32-gitian-r9.zip cd $HOME/build/ # - cd litecoin + cd picoin export PATH=$STAGING/host/bin:$PATH mkdir -p $OUTDIR/src git archive HEAD | tar -x -C $OUTDIR/src @@ -41,19 +41,19 @@ script: | export FAKETIME=$REFERENCE_DATETIME export TZ=UTC ln -s $STAGING $HOME/qt - $HOME/staging/host/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$STAGING MINIUPNPC_INCLUDE_PATH=$STAGING BDB_LIB_PATH=$STAGING BDB_INCLUDE_PATH=$STAGING BOOST_LIB_PATH=$STAGING BOOST_INCLUDE_PATH=$STAGING BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$STAGING OPENSSL_INCLUDE_PATH=$STAGING QRENCODE_LIB_PATH=$STAGING QRENCODE_INCLUDE_PATH=$STAGING USE_QRCODE=1 INCLUDEPATH=$STAGING DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=litecoin USE_BUILD_INFO=1 USE_SSE2=1 + $HOME/staging/host/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$STAGING MINIUPNPC_INCLUDE_PATH=$STAGING BDB_LIB_PATH=$STAGING BDB_INCLUDE_PATH=$STAGING BOOST_LIB_PATH=$STAGING BOOST_INCLUDE_PATH=$STAGING BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$STAGING OPENSSL_INCLUDE_PATH=$STAGING QRENCODE_LIB_PATH=$STAGING QRENCODE_INCLUDE_PATH=$STAGING USE_QRCODE=1 INCLUDEPATH=$STAGING DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=picoin USE_BUILD_INFO=1 USE_SSE2=1 make $MAKEOPTS - $HOST-strip release/litecoin-qt.exe - cp release/litecoin-qt.exe $OUTDIR/ + $HOST-strip release/picoin-qt.exe + cp release/picoin-qt.exe $OUTDIR/ # cd src export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 export FAKETIME=$REFERENCE_DATETIME export TZ=UTC - make -f makefile.linux-mingw $MAKEOPTS DEPSDIR=$STAGING litecoind.exe USE_UPNP=0 DEBUGFLAGS="-frandom-seed=litecoin" USE_SSE2=1 - $HOST-strip litecoind.exe + make -f makefile.linux-mingw $MAKEOPTS DEPSDIR=$STAGING picoind.exe USE_UPNP=1 DEBUGFLAGS="-frandom-seed=picoin" USE_SSE2=1 + $HOST-strip picoind.exe mkdir $OUTDIR/daemon - cp litecoind.exe $OUTDIR/daemon + cp picoind.exe $OUTDIR/daemon cd .. mkdir nsis git archive HEAD | tar -x -C nsis @@ -62,4 +62,5 @@ script: | cp ../../release/* ../release/ cp ../../src/*.exe . makensis ../share/setup.nsi - cp ../share/litecoin-*-win32-setup.exe $OUTDIR/ + cp ../share/picoin-*-win32-setup.exe $OUTDIR/ + diff --git a/src/qt/bitcoin.qrc b/src/qt/bitcoin.qrc index a901536..90d35eb 100644 --- a/src/qt/bitcoin.qrc +++ b/src/qt/bitcoin.qrc @@ -1,6 +1,6 @@ - res/icons/piCoin.png + res/icons/picoin.png res/icons/address-book.png res/icons/quit.png res/icons/send.png @@ -24,7 +24,7 @@ res/icons/editpaste.png res/icons/editcopy.png res/icons/add.png - res/icons/piCoin.png + res/icons/picoin.png res/icons/toolbar_testnet.png res/icons/edit.png res/icons/history.png From 7d3aecad2bf55d8497ffffdf20f7b269c7fa5f61 Mon Sep 17 00:00:00 2001 From: Paul Bradley Date: Fri, 14 Mar 2014 00:44:11 -0700 Subject: [PATCH 3/8] Updated to boost 1.55 --- piCoin-qt.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/piCoin-qt.pro b/piCoin-qt.pro index aa8c947..8ba21fb 100644 --- a/piCoin-qt.pro +++ b/piCoin-qt.pro @@ -302,7 +302,7 @@ OTHER_FILES += \ # platform specific defaults, if not overridden on command line isEmpty(BOOST_LIB_SUFFIX) { macx:BOOST_LIB_SUFFIX = -mt - windows:BOOST_LIB_SUFFIX = -mgw46-mt-1_54 + windows:BOOST_LIB_SUFFIX = -mgw46-mt-1_55 } isEmpty(BOOST_THREAD_LIB_SUFFIX) { From 4ca8cf07525865b35d8026471933a4e4814e751f Mon Sep 17 00:00:00 2001 From: Paul Bradley Date: Fri, 14 Mar 2014 00:56:53 -0700 Subject: [PATCH 4/8] Revert "Updated to boost 1.55" This reverts commit 7d3aecad2bf55d8497ffffdf20f7b269c7fa5f61. --- piCoin-qt.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/piCoin-qt.pro b/piCoin-qt.pro index 8ba21fb..aa8c947 100644 --- a/piCoin-qt.pro +++ b/piCoin-qt.pro @@ -302,7 +302,7 @@ OTHER_FILES += \ # platform specific defaults, if not overridden on command line isEmpty(BOOST_LIB_SUFFIX) { macx:BOOST_LIB_SUFFIX = -mt - windows:BOOST_LIB_SUFFIX = -mgw46-mt-1_55 + windows:BOOST_LIB_SUFFIX = -mgw46-mt-1_54 } isEmpty(BOOST_THREAD_LIB_SUFFIX) { From 4537ad74bf0de3a8473fd648f00443ba04a93aff Mon Sep 17 00:00:00 2001 From: Paul Bradley Date: Fri, 14 Mar 2014 01:56:17 -0700 Subject: [PATCH 5/8] mingw makefile changed to cross compile --- src/makefile.mingw | 121 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 94 insertions(+), 27 deletions(-) diff --git a/src/makefile.mingw b/src/makefile.mingw index 89b0559..36d36d9 100644 --- a/src/makefile.mingw +++ b/src/makefile.mingw @@ -1,43 +1,76 @@ # Copyright (c) 2009-2010 Satoshi Nakamoto -# Copyright (c) 2014 piCoin Developers # Distributed under the MIT/X11 software license, see the accompanying -# file license.txt or http://www.opensource.org/licenses/mit-license.php. +# file COPYING or http://www.opensource.org/licenses/mit-license.php. -USE_UPNP=- +# Makefile for the MinGW g++ compiler/toolchain +# +# Assumes Berkeley DB, Boost, and OpenSSL have all been compiled and installed +# into /usr/local (/usr/local/include, /usr/local/lib). +# +# If dependencies are somewhere else, run 'make DEPSDIR=/path/' +# +# Boost libraries are given wacky names that include the particular version of +# boost you're using; set BOOST_SUFFIX appropriately. +# +# 'make clean' assumes it is running inside a MSYS shell, and uses 'rm' +# to remove files. + +CXX ?= g++ + +USE_UPNP:=- +USE_IPV6:=1 + +DEPSDIR?=/usr/local +BOOST_SUFFIX?=-mgw46-mt-sd-1_52 INCLUDEPATHS= \ - -I"C:\deps\boost" \ - -I"C:\deps\db\build_unix" \ - -I"C:\deps\ssl\include" + -I"$(CURDIR)" \ + -I"$(DEPSDIR)/include" LIBPATHS= \ - -L"C:\deps\boost\stage\lib" \ - -L"C:\deps\db\build_unix" \ - -L"C:\deps\ssl" + -L"$(CURDIR)/leveldb" \ + -L"$(DEPSDIR)/lib" LIBS= \ - -l boost_system-mgw46-mt-1_54 \ - -l boost_filesystem-mgw46-mt-1_54 \ - -l boost_program_options-mgw46-mt-1_54 \ - -l boost_thread-mgw46-mt-1_54 \ + -l leveldb \ + -l memenv \ + -l boost_system$(BOOST_SUFFIX) \ + -l boost_filesystem$(BOOST_SUFFIX) \ + -l boost_program_options$(BOOST_SUFFIX) \ + -l boost_thread$(BOOST_SUFFIX) \ + -l boost_chrono$(BOOST_SUFFIX) \ -l db_cxx \ -l ssl \ -l crypto -DEFS=-DWIN32 -DWIN32_LEAN_AND_MEAN -D_WINDOWS -DBOOST_THREAD_USE_LIB -DBOOST_SPIRIT_THREADSAFE -DUSE_IPV6 -D__NO_SYSTEM_INCLUDES +DEFS=-D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB -DBOOST_SPIRIT_THREADSAFE DEBUGFLAGS=-g CFLAGS=-mthreads -O2 -w -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS) +# enable: ASLR, DEP and large address aware +LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat -Wl,--large-address-aware TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data) +ifndef USE_UPNP + override USE_UPNP = - +endif +ifneq (${USE_UPNP}, -) + LIBS += -l miniupnpc -l iphlpapi + DEFS += -DSTATICLIB -DUSE_UPNP=$(USE_UPNP) +endif +ifneq (${USE_IPV6}, -) + DEFS += -DUSE_IPV6=$(USE_IPV6) +endif -LIBS += -l kernel32 -l user32 -l gdi32 -l comdlg32 -l winspool -l winmm -l shell32 -l comctl32 -l ole32 -l oleaut32 -l uuid -l rpcrt4 -l advapi32 -l ws2_32 -l mswsock -l shlwapi +LIBS += -l mingwthrd -l kernel32 -l user32 -l gdi32 -l comdlg32 -l winspool -l winmm -l shell32 -l comctl32 -l ole32 -l oleaut32 -l uuid -l rpcrt4 -l advapi32 -l ws2_32 -l mswsock -l shlwapi -# TODO: make the mingw builds pier about dependencies, like the linux/osx builds are +# TODO: make the mingw builds smarter about dependencies, like the linux/osx builds are HEADERS = $(wildcard *.h) OBJS= \ + leveldb/libleveldb.a \ + obj/alert.o \ obj/version.o \ obj/checkpoints.o \ obj/netbase.o \ @@ -46,7 +79,6 @@ OBJS= \ obj/key.o \ obj/db.o \ obj/init.o \ - obj/irc.o \ obj/keystore.o \ obj/main.o \ obj/net.o \ @@ -54,6 +86,9 @@ OBJS= \ obj/bitcoinrpc.o \ obj/rpcdump.o \ obj/rpcnet.o \ + obj/rpcmining.o \ + obj/rpcwallet.o \ + obj/rpcblockchain.o \ obj/rpcrawtransaction.o \ obj/script.o \ obj/scrypt.o \ @@ -61,21 +96,53 @@ OBJS= \ obj/util.o \ obj/wallet.o \ obj/walletdb.o \ - obj/noui.o + obj/hash.o \ + obj/bloom.o \ + obj/noui.o \ + obj/leveldb.o \ + obj/txdb.o + +ifdef USE_SSE2 +DEFS += -DUSE_SSE2 +OBJS_SSE2= obj/scrypt-sse2.o +OBJS += $(OBJS_SSE2) +endif + +all: picoind.exe +test check: test_picoin.exe FORCE + test_picoin.exe -all: piCoind.exe +# +# LevelDB support +# +DEFS += $(addprefix -I,$(CURDIR)/leveldb/include) +DEFS += $(addprefix -I,$(CURDIR)/leveldb/helpers) -obj/scrypt.o: scrypt.c - gcc -c $(CFLAGS) -o $@ $^ +leveldb/libleveldb.a: + cd leveldb && $(MAKE) CC=$(CC) CXX=$(CXX) OPT="$(CFLAGS)" TARGET_OS=NATIVE_WINDOWS libleveldb.a libmemenv.a && cd .. + +obj/%-sse2.o: %-sse2.cpp + $(CXX) -c $(CFLAGS) -msse2 -mstackrealign -o $@ $< obj/%.o: %.cpp $(HEADERS) - g++ -c $(CFLAGS) -o $@ $< + $(CXX) -c $(CFLAGS) -o $@ $< + +picoind.exe: $(OBJS:obj/%=obj/%) + $(CXX) $(CFLAGS) $(LDFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) + +TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp)) -piCoind.exe: $(OBJS:obj/%=obj/%) - g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) +obj-test/%.o: test/%.cpp $(HEADERS) + $(CXX) -c $(TESTDEFS) $(CFLAGS) -o $@ $< + +test_picoin.exe: $(TESTOBJS) $(filter-out obj/init.o,$(OBJS:obj/%=obj/%)) + $(CXX) $(CFLAGS) $(LDFLAGS) -o $@ $(LIBPATHS) $^ -lboost_unit_test_framework$(BOOST_SUFFIX) $(LIBS) clean: - -del /Q piCoind - -del /Q obj\* - -del /Q build.h + rm -f picoind.exe test_picoin.exe + rm -f obj/* + rm -f obj-test/* + cd leveldb && $(MAKE) TARGET_OS=NATIVE_WINDOWS clean && cd .. + +FORCE: From 67c77c23d9f96404951acc099fcc865e451be836 Mon Sep 17 00:00:00 2001 From: Paul Bradley Date: Fri, 14 Mar 2014 02:17:35 -0700 Subject: [PATCH 6/8] Roll back boost for win build --- piCoin-qt.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/piCoin-qt.pro b/piCoin-qt.pro index aa8c947..14f8775 100644 --- a/piCoin-qt.pro +++ b/piCoin-qt.pro @@ -302,7 +302,7 @@ OTHER_FILES += \ # platform specific defaults, if not overridden on command line isEmpty(BOOST_LIB_SUFFIX) { macx:BOOST_LIB_SUFFIX = -mt - windows:BOOST_LIB_SUFFIX = -mgw46-mt-1_54 + windows:BOOST_LIB_SUFFIX = -mgw44-mt-1_54 } isEmpty(BOOST_THREAD_LIB_SUFFIX) { From 13253e643b0a6bc1a536c9c5c582454a7899b7f4 Mon Sep 17 00:00:00 2001 From: Paul Bradley Date: Fri, 14 Mar 2014 02:31:05 -0700 Subject: [PATCH 7/8] boost suffix changed --- piCoin-qt.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/piCoin-qt.pro b/piCoin-qt.pro index 14f8775..ef76249 100644 --- a/piCoin-qt.pro +++ b/piCoin-qt.pro @@ -302,7 +302,7 @@ OTHER_FILES += \ # platform specific defaults, if not overridden on command line isEmpty(BOOST_LIB_SUFFIX) { macx:BOOST_LIB_SUFFIX = -mt - windows:BOOST_LIB_SUFFIX = -mgw44-mt-1_54 + windows:BOOST_LIB_SUFFIX = -mgw44-mt-s-1_50 } isEmpty(BOOST_THREAD_LIB_SUFFIX) { From 1b3d2696e0ceff342d82a73f9da36d764857ca33 Mon Sep 17 00:00:00 2001 From: Paul Bradley Date: Fri, 14 Mar 2014 03:00:45 -0700 Subject: [PATCH 8/8] more cross compile fixes --- piCoin-qt.pro | 234 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 152 insertions(+), 82 deletions(-) diff --git a/piCoin-qt.pro b/piCoin-qt.pro index ef76249..0ad91d9 100644 --- a/piCoin-qt.pro +++ b/piCoin-qt.pro @@ -1,27 +1,23 @@ TEMPLATE = app -TARGET = piCoin-qt -VERSION = 0.0.2 +TARGET = picoin-qt +macx:TARGET = "picoin-Qt" +VERSION = 0.8.6.2 INCLUDEPATH += src src/json src/qt -DEFINES += QT_GUI BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN __NO_SYSTEM_INCLUDES +QT += core gui network +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets +DEFINES += QT_GUI BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE CONFIG += no_include_pwd +CONFIG += thread -# UNCOMMENT THIS SECTION TO BUILD ON WINDOWS +# for boost 1.37, add -mt to the boost libraries +# use: qmake BOOST_LIB_SUFFIX=-mt +# for boost thread win32 with _win32 sufix +# use: BOOST_THREAD_LIB_SUFFIX=_win32-... +# or when linking against a specific BerkelyDB version: BDB_LIB_SUFFIX=-4.8 -======= -windows:LIBS += -lshlwapi -LIBS += $$join(BOOST_LIB_PATH,,-L,) $$join(BDB_LIB_PATH,,-L,) $$join(OPENSSL_LIB_PATH,,-L,) $$join(QRENCODE_LIB_PATH,,-L,) -LIBS += -lssl -lcrypto -ldb_cxx$$BDB_LIB_SUFFIX -windows:LIBS += -lws2_32 -lole32 -loleaut32 -luuid -lgdi32 -LIBS += -lboost_system -lboost_filesystem -lboost_program_options -lboost_thread -BOOST_LIB_SUFFIX= -BOOST_INCLUDE_PATH=C:/deps/ -BOOST_LIB_PATH=C:/deps/boost/stage/lib -BDB_INCLUDE_PATH=C:/deps/db/build_unix -BDB_LIB_PATH=C:/deps/db/build_unix -OPENSSL_INCLUDE_PATH=C:/deps/ssl/include -OPENSSL_LIB_PATH=C:/deps/ssl - -======= +# Dependency library locations can be customized with: +# BOOST_INCLUDE_PATH, BOOST_LIB_PATH, BDB_INCLUDE_PATH, +# BDB_LIB_PATH, OPENSSL_INCLUDE_PATH and OPENSSL_LIB_PATH respectively OBJECTS_DIR = build MOC_DIR = build @@ -30,27 +26,31 @@ UI_DIR = build # use: qmake "RELEASE=1" contains(RELEASE, 1) { # Mac: compile for maximum compatibility (10.5, 32-bit) - macx:QMAKE_CXXFLAGS += -mmacosx-version-min=10.7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk - macx:QMAKE_CFLAGS += -mmacosx-version-min=10.7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk - macx:QMAKE_LFLAGS += -mmacosx-version-min=10.7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk - QMAKE_CXXFLAGS += -stdlib=libstdc++ - QMAKE_CFLAGS_THREAD += -pthread - QMAKE_CXXFLAGS_THREAD += -pthread - !windows:!macx { - # Linux: static link - LIBS += -Wl,-Bstatic + macx:QMAKE_CXXFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk + macx:QMAKE_CFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk + macx:QMAKE_OBJECTIVE_CFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk + + !win32:!macx { + # Linux: static link and extra security (see: https://wiki.debian.org/Hardening) + LIBS += -Wl,-Bstatic -Wl,-z,relro -Wl,-z,now } } !win32 { -# for extra security against potential buffer overflows: enable GCCs Stack Smashing Protection -QMAKE_CXXFLAGS *= -fstack-protector-all --param ssp-buffer-size=1 -QMAKE_LFLAGS *= -fstack-protector-all --param ssp-buffer-size=1 -# We need to exclude this for Windows cross compile with MinGW 4.2.x, as it will result in a non-working executable! -# This can be enabled for Windows, when we switch to MinGW >= 4.4.x. + # for extra security against potential buffer overflows: enable GCCs Stack Smashing Protection + QMAKE_CXXFLAGS *= -fstack-protector-all + QMAKE_LFLAGS *= -fstack-protector-all + # Exclude on Windows cross compile with MinGW 4.2.x, as it will result in a non-working executable! + # This can be enabled for Windows, when we switch to MinGW >= 4.4.x. } +# for extra security (see: https://wiki.debian.org/Hardening): this flag is GCC compiler-specific +QMAKE_CXXFLAGS *= -D_FORTIFY_SOURCE=2 # for extra security on Windows: enable ASLR and DEP via GCC linker flags win32:QMAKE_LFLAGS *= -Wl,--dynamicbase -Wl,--nxcompat +# on Windows: enable GCC large address aware linker flag +win32:QMAKE_LFLAGS *= -Wl,--large-address-aware +# i686-w64-mingw32 +win32:QMAKE_LFLAGS *= -static-libgcc -static-libstdc++ # use: qmake "USE_QRCODE=1" # libqrencode (http://fukuchi.org/works/qrencode/index.en.html) must be installed for support @@ -66,6 +66,15 @@ contains(USE_QRCODE, 1) { # miniupnpc (http://miniupnp.free.fr/files/) must be installed for support contains(USE_UPNP, -) { message(Building without UPNP support) +} else { + message(Building with UPNP support) + count(USE_UPNP, 0) { + USE_UPNP=1 + } + DEFINES += USE_UPNP=$$USE_UPNP STATICLIB + INCLUDEPATH += $$MINIUPNPC_INCLUDE_PATH + LIBS += $$join(MINIUPNPC_LIB_PATH,,-L,) -lminiupnpc + win32:LIBS += -liphlpapi } # use: qmake "USE_DBUS=1" @@ -92,9 +101,28 @@ contains(BITCOIN_NEED_QT_PLUGINS, 1) { QTPLUGIN += qcncodecs qjpcodecs qtwcodecs qkrcodecs qtaccessiblewidgets } +INCLUDEPATH += src/leveldb/include src/leveldb/helpers +LIBS += $$PWD/src/leveldb/libleveldb.a $$PWD/src/leveldb/libmemenv.a +!win32 { + # we use QMAKE_CXXFLAGS_RELEASE even without RELEASE=1 because we use RELEASE to indicate linking preferences not -O preferences + genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a +} else { + # make an educated guess about what the ranlib command is called + isEmpty(QMAKE_RANLIB) { + QMAKE_RANLIB = $$replace(QMAKE_STRIP, strip, ranlib) + } + LIBS += -lshlwapi + genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libleveldb.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libmemenv.a +} +genleveldb.target = $$PWD/src/leveldb/libleveldb.a +genleveldb.depends = FORCE +PRE_TARGETDEPS += $$PWD/src/leveldb/libleveldb.a +QMAKE_EXTRA_TARGETS += genleveldb +# Gross ugly hack that depends on qmake internals, unfortunately there is no other way to do it. +QMAKE_CLEAN += $$PWD/src/leveldb/libleveldb.a; cd $$PWD/src/leveldb ; $(MAKE) clean # regenerate src/build.h -!windows|contains(USE_BUILD_INFO, 1) { +!win32|contains(USE_BUILD_INFO, 1) { genbuild.depends = FORCE genbuild.commands = cd $$PWD; /bin/sh share/genbuild.sh $$OUT_PWD/build/build.h genbuild.target = $$OUT_PWD/build/build.h @@ -103,9 +131,7 @@ contains(BITCOIN_NEED_QT_PLUGINS, 1) { DEFINES += HAVE_BUILD_INFO } -QMAKE_CXXFLAGS += -msse2 -QMAKE_CFLAGS += -msse2 -QMAKE_CXXFLAGS_WARN_ON = -fdiagnostics-show-option -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wstack-protector +QMAKE_CXXFLAGS_WARN_ON = -fdiagnostics-show-option -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wstack-protector -Wno-deprecated # Input DEPENDPATH += src src/json src/qt @@ -114,21 +140,25 @@ HEADERS += src/qt/bitcoingui.h \ src/qt/addresstablemodel.h \ src/qt/optionsdialog.h \ src/qt/sendcoinsdialog.h \ + src/qt/coincontroldialog.h \ + src/qt/coincontroltreewidget.h \ src/qt/addressbookpage.h \ src/qt/signverifymessagedialog.h \ src/qt/aboutdialog.h \ src/qt/editaddressdialog.h \ src/qt/bitcoinaddressvalidator.h \ + src/alert.h \ src/addrman.h \ src/base58.h \ src/bignum.h \ src/checkpoints.h \ + src/coincontrol.h \ src/compat.h \ src/sync.h \ src/util.h \ + src/hash.h \ src/uint256.h \ src/serialize.h \ - src/strlcpy.h \ src/main.h \ src/net.h \ src/key.h \ @@ -136,8 +166,9 @@ HEADERS += src/qt/bitcoingui.h \ src/walletdb.h \ src/script.h \ src/init.h \ - src/irc.h \ + src/bloom.h \ src/mruset.h \ + src/checkqueue.h \ src/json/json_spirit_writer_template.h \ src/json/json_spirit_writer.h \ src/json/json_spirit_value.h \ @@ -161,6 +192,9 @@ HEADERS += src/qt/bitcoingui.h \ src/qt/transactionfilterproxy.h \ src/qt/transactionview.h \ src/qt/walletmodel.h \ + src/qt/walletview.h \ + src/qt/walletstack.h \ + src/qt/walletframe.h \ src/bitcoinrpc.h \ src/qt/overviewpage.h \ src/qt/csvmodelwriter.h \ @@ -172,41 +206,50 @@ HEADERS += src/qt/bitcoingui.h \ src/qt/askpassphrasedialog.h \ src/protocol.h \ src/qt/notificator.h \ - src/qt/qtipcserver.h \ + src/qt/paymentserver.h \ src/allocators.h \ src/ui_interface.h \ + src/qt/rpcconsole.h \ src/scrypt.h \ - src/qt/miningpage.h \ src/version.h \ - src/qt/rpcconsole.h - -SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \ + src/netbase.h \ + src/clientversion.h \ + src/txdb.h \ + src/leveldb.h \ + src/threadsafety.h \ + src/limitedmap.h \ + src/qt/macnotificationhandler.h \ + src/qt/splashscreen.h + +SOURCES += src/qt/bitcoin.cpp \ + src/qt/bitcoingui.cpp \ src/qt/transactiontablemodel.cpp \ src/qt/addresstablemodel.cpp \ src/qt/optionsdialog.cpp \ src/qt/sendcoinsdialog.cpp \ + src/qt/coincontroldialog.cpp \ + src/qt/coincontroltreewidget.cpp \ src/qt/addressbookpage.cpp \ src/qt/signverifymessagedialog.cpp \ src/qt/aboutdialog.cpp \ src/qt/editaddressdialog.cpp \ src/qt/bitcoinaddressvalidator.cpp \ + src/alert.cpp \ src/version.cpp \ src/sync.cpp \ src/util.cpp \ + src/hash.cpp \ src/netbase.cpp \ src/key.cpp \ src/script.cpp \ src/main.cpp \ src/init.cpp \ src/net.cpp \ - src/irc.cpp \ + src/bloom.cpp \ src/checkpoints.cpp \ src/addrman.cpp \ src/db.cpp \ src/walletdb.cpp \ - src/json/json_spirit_writer.cpp \ - src/json/json_spirit_value.cpp \ - src/json/json_spirit_reader.cpp \ src/qt/clientmodel.cpp \ src/qt/guiutil.cpp \ src/qt/transactionrecord.cpp \ @@ -221,9 +264,15 @@ SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \ src/qt/transactionfilterproxy.cpp \ src/qt/transactionview.cpp \ src/qt/walletmodel.cpp \ + src/qt/walletview.cpp \ + src/qt/walletstack.cpp \ + src/qt/walletframe.cpp \ src/bitcoinrpc.cpp \ src/rpcdump.cpp \ src/rpcnet.cpp \ + src/rpcmining.cpp \ + src/rpcwallet.cpp \ + src/rpcblockchain.cpp \ src/rpcrawtransaction.cpp \ src/qt/overviewpage.cpp \ src/qt/csvmodelwriter.cpp \ @@ -235,18 +284,18 @@ SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \ src/qt/askpassphrasedialog.cpp \ src/protocol.cpp \ src/qt/notificator.cpp \ - src/qt/qtipcserver.cpp \ + src/qt/paymentserver.cpp \ src/qt/rpcconsole.cpp \ - src/scrypt.c \ - src/qt/miningpage.cpp \ - src/noui.cpp + src/scrypt.cpp \ + src/noui.cpp \ + src/leveldb.cpp \ + src/txdb.cpp \ + src/qt/splashscreen.cpp -RESOURCES += \ - src/qt/bitcoin.qrc \ - src/qt/background.qrc +RESOURCES += src/qt/bitcoin.qrc -FORMS += \ - src/qt/forms/sendcoinsdialog.ui \ +FORMS += src/qt/forms/sendcoinsdialog.ui \ + src/qt/forms/coincontroldialog.ui \ src/qt/forms/addressbookpage.ui \ src/qt/forms/signverifymessagedialog.ui \ src/qt/forms/aboutdialog.ui \ @@ -256,7 +305,6 @@ FORMS += \ src/qt/forms/sendcoinsentry.ui \ src/qt/forms/askpassphrasedialog.ui \ src/qt/forms/rpcconsole.ui \ - src/qt/forms/miningpage.ui \ src/qt/forms/optionsdialog.ui contains(USE_QRCODE, 1) { @@ -271,10 +319,21 @@ SOURCES += src/qt/test/test_main.cpp \ HEADERS += src/qt/test/uritests.h DEPENDPATH += src/qt/test QT += testlib -TARGET = bitcoin-qt_test +TARGET = picoin-qt_test DEFINES += BITCOIN_QT_TEST + macx: CONFIG -= app_bundle } +contains(USE_SSE2, 1) { +DEFINES += USE_SSE2 +gccsse2.input = SOURCES_SSE2 +gccsse2.output = $$PWD/build/${QMAKE_FILE_BASE}.o +gccsse2.commands = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME} -msse2 -mstackrealign +QMAKE_EXTRA_COMPILERS += gccsse2 +SOURCES_SSE2 += src/scrypt-sse2.cpp +} + +# Todo: Remove this line when switching to Qt5, as that option was removed CODECFORTR = UTF-8 # for lrelease/lupdate @@ -295,14 +354,20 @@ TSQM.CONFIG = no_link QMAKE_EXTRA_COMPILERS += TSQM # "Other files" to show in Qt Creator -OTHER_FILES += \ - contrib/gitian-descriptors/* doc/*.rst doc/*.txt doc/README README.md res/bitcoin-qt.rc \ - share/setup.nsi +OTHER_FILES += README.md \ + doc/*.rst \ + doc/*.txt \ + doc/*.md \ + src/qt/res/bitcoin-qt.rc \ + src/test/*.cpp \ + src/test/*.h \ + src/qt/test/*.cpp \ + src/qt/test/*.h # platform specific defaults, if not overridden on command line isEmpty(BOOST_LIB_SUFFIX) { macx:BOOST_LIB_SUFFIX = -mt - windows:BOOST_LIB_SUFFIX = -mgw44-mt-s-1_50 + win32:BOOST_LIB_SUFFIX = -mgw44-mt-s-1_50 } isEmpty(BOOST_THREAD_LIB_SUFFIX) { @@ -310,29 +375,29 @@ isEmpty(BOOST_THREAD_LIB_SUFFIX) { } isEmpty(BDB_LIB_PATH) { - macx:BDB_LIB_PATH = /usr/local/opt/berkeley-db4/lib + macx:BDB_LIB_PATH = /opt/local/lib/db48 } isEmpty(BDB_LIB_SUFFIX) { + macx:BDB_LIB_SUFFIX = -4.8 } isEmpty(BDB_INCLUDE_PATH) { - macx:BDB_INCLUDE_PATH = /usr/local/opt/berkeley-db4/include + macx:BDB_INCLUDE_PATH = /opt/local/include/db48 } isEmpty(BOOST_LIB_PATH) { - macx:BOOST_LIB_PATH = /usr/local/opt/boost/lib + macx:BOOST_LIB_PATH = /opt/local/lib } isEmpty(BOOST_INCLUDE_PATH) { - macx:BOOST_INCLUDE_PATH = /usr/local/opt/boost/include + macx:BOOST_INCLUDE_PATH = /opt/local/include } -windows:LIBS += -lws2_32 -lshlwapi -lmswsock -windows:DEFINES += WIN32 WIN32_LEAN_AND_MEAN -windows:RC_FILE = src/qt/res/bitcoin-qt.rc +win32:DEFINES += WIN32 +win32:RC_FILE = src/qt/res/bitcoin-qt.rc -windows:!contains(MINGW_THREAD_BUGFIX, 0) { +win32:!contains(MINGW_THREAD_BUGFIX, 0) { # At least qmake's win32-g++-cross profile is missing the -lmingwthrd # thread-safety flag. GCC has -mthreads to enable this, but it doesn't # work with static linking. -lmingwthrd must come BEFORE -lmingw, so @@ -343,33 +408,38 @@ windows:!contains(MINGW_THREAD_BUGFIX, 0) { QMAKE_LIBS_QT_ENTRY = -lmingwthrd $$QMAKE_LIBS_QT_ENTRY } -!windows:!mac { +!win32:!macx { DEFINES += LINUX LIBS += -lrt + # _FILE_OFFSET_BITS=64 lets 32-bit fopen transparently support large files. + DEFINES += _FILE_OFFSET_BITS=64 } -macx:HEADERS += src/qt/macdockiconhandler.h -macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm -macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit +macx:HEADERS += src/qt/macdockiconhandler.h src/qt/macnotificationhandler.h +macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm src/qt/macnotificationhandler.mm +macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit -framework CoreServices macx:DEFINES += MAC_OSX MSG_NOSIGNAL=0 -macx:ICON = src/qt/res/icons/bitcoin.icns -macx:TARGET = "piCoin-Qt" +macx:ICON = src/qt/res/icons/picoin.icns +macx:QMAKE_CFLAGS_THREAD += -pthread +macx:QMAKE_LFLAGS_THREAD += -pthread +macx:QMAKE_CXXFLAGS_THREAD += -pthread +macx:QMAKE_INFO_PLIST = share/qt/Info.plist # Set libraries and includes at end, to use platform-defined defaults if not overridden INCLUDEPATH += $$BOOST_INCLUDE_PATH $$BDB_INCLUDE_PATH $$OPENSSL_INCLUDE_PATH $$QRENCODE_INCLUDE_PATH LIBS += $$join(BOOST_LIB_PATH,,-L,) $$join(BDB_LIB_PATH,,-L,) $$join(OPENSSL_LIB_PATH,,-L,) $$join(QRENCODE_LIB_PATH,,-L,) LIBS += -lssl -lcrypto -ldb_cxx$$BDB_LIB_SUFFIX # -lgdi32 has to happen after -lcrypto (see #681) -windows:LIBS += -lole32 -luuid -lgdi32 +win32:LIBS += -lws2_32 -lshlwapi -lmswsock -lole32 -loleaut32 -luuid -lgdi32 LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread$$BOOST_THREAD_LIB_SUFFIX +win32:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX +macx:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX contains(RELEASE, 1) { - !windows:!macx { + !win32:!macx { # Linux: turn dynamic linking back on for c/c++ runtime libraries LIBS += -Wl,-Bdynamic } } -system($$QMAKE_LRELEASE -silent $$_PRO_FILE_) - - +system($$QMAKE_LRELEASE -silent $$TRANSLATIONS)