--- /dev/null
+# Dockerfile for building novacoin binaries.
+
+Now, you can build your own novacoin files on all systems with docker and do it easy without installing depends on your system.
+
+## How:
+
+### Build docker image
+
+```
+sudo docker build .
+```
+
+### Run docker container
+
+Builder will return HASH of image
+Example:
+Successfully built 9bbff825d50f
+
+```
+sudo docker run -it -v ~/path/to/novacoin/folder:/novacoin 9bbff825d50f
+```
+
+If your system uses SELINUX you may use --privileged=true key
+
+```
+sudo docker run --privileged=true -it -v ~/development/novacoin:/novacoin 9bbff825d50f
+```
+
+See novacoin-qt file in used novacoin folder and novacoind file in src subfolder.
\ No newline at end of file
--- /dev/null
+FROM ubuntu:latest
+
+# Install deps
+RUN apt-get update -y \
+ && apt-get install -y \
+ qt4-qmake \
+ libqt4-dev \
+ build-essential \
+ libboost-dev \
+ libboost-system-dev \
+ libboost-filesystem-dev \
+ libboost-program-options-dev \
+ libboost-thread-dev \
+ libssl-dev \
+ libdb++-dev \
+ libqrencode-dev \
+ wget \
+ pkg-config \
+ libpng3-dev
+
+
+RUN wget http://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz; tar zxf ./qrencode-3.4.4.tar.gz
+WORKDIR /qrencode-3.4.4
+RUN ./configure --enable-static; \
+ make; \
+ make install
+
+VOLUME /novacoin
+
+WORKDIR /novacoin
+
+ENTRYPOINT qmake USE_O3=1 USE_ASM=1 RELEASE=1 && \
+ make && \
+ cd src && \
+ make -f makefile.unix USE_O3=1 USE_ASM=1 STATIC=1 && \
+ strip novacoind
+
+
2.1) gcc
cd /home/<ваше имя>/mxe
- make gcc zlib
+ make gcc zlib libpng
Проверка того, что установка gcc прошла успешно:
В папке /home/<ваше имя>/mxe/usr/bin должен появиться файл i686-w64-mingw32.static-gcc и i686-w64-mingw32.static-g++
И при запуске ./i686-w64-mingw32.static-gcc -v должно выдаваться
......
Thread model: win32
-gcc version 4.9.2 (GCC)
+gcc version 4.9.3 (GCC)
-В папке /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib должен быть файл:
+В папке /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib должны быть файлы:
libz.a
+libpng.a
2.2) Openssl
libdb_cxx.a
2.5) qrencode
--Скачайте http://download.sourceforge.net/libpng/libpng-1.6.15.tar.gz?download
--Распакуйте в домашнюю папку
--Откройте терминал
-
- export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
- cd /home/<ваше имя>/libpng-1.6.15
- ./configure --host=i686-w64-mingw32.static --disable-shared
- make
- cp .libs/libpng16.a .libs/libpng.a
-
-Проверка что libpng собралась успешно:
-в папке /home/<ваше имя>/libpng-1.6.15/.libs должен быть файл:
-libpng.a
-
-Скачайте http://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz
-Распакуйте в домашнюю папку
--Откройте терминал
+-Откройте терминал:
+
export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
cd /home/<ваше имя>/qrencode-3.4.4
-
- LIBS="../libpng-1.6.15/.libs/libpng.a ../mxe/usr/i686-w64-mingw32.static/lib/libz.a" \
- png_CFLAGS="-I../libpng-1.6.15" \
- png_LIBS="-L../libpng-1.6.15/.libs" \
./configure --host=i686-w64-mingw32.static --enable-static --disable-shared --without-tools
-
make
Проверка что qrencode успешно собралась:
-Должно появиться в ответ
QMake version 2.01a
-Using Qt version 4.8.6 in /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/qt/lib
+Using Qt version 4.8.7 in /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/qt/lib
Qt 5
-Откройте терминал
-Должно появиться в ответ
QMake version 3.0
-Using Qt version 5.4.0 in /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/qt5/lib
+Using Qt version 5.5.1 in /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/qt5/lib
3. Компиляция
-Поменяйте текущие INCLUDEPATHS, LIBPATHS, LIBS на:
BOOST_SUFFIX?=-mt
+BOOST_THREAD_LIB_SUFFIX?=_win32-mt
INCLUDEPATHS= \
-I"$(CURDIR)" \
- -I"/home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/include" \
- -I"/home/<ваше имя>/" \
-I"/home/<ваше имя>/db-6.0.20/build_unix" \
LIBPATHS= \
-L"$(CURDIR)/leveldb" \
- -L"/home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib" \
-L"/home/<ваше имя>/db-6.0.20/build_unix" \
LIBS= \
-l boost_system$(BOOST_SUFFIX) \
-l boost_filesystem$(BOOST_SUFFIX) \
-l boost_program_options$(BOOST_SUFFIX) \
- -l boost_thread$(BOOST_SUFFIX) \
+ -l boost_thread$(BOOST_THREAD_LIB_SUFFIX) \
-l boost_chrono$(BOOST_SUFFIX) \
-l db_cxx \
-l ssl \
-l crypto \
- -l z
--Поменяйте LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat на
-LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat -Wl,--large-address-aware -static
+ -l z \
+ -l pthread
-Поменяйте в последних строчках makefile.mingw
g++ -c $(CFLAGS) -o $@ $<
на
cd leveldb; TARGET_OS=NATIVE_WINDOWS make CROSS=i686-w64-mingw32.static- libleveldb.a libmemenv.a; cd ..
-Ещё измените
-obj/txdb-leveldb.o: leveldb/libleveldb.lib
+Если вы хотите использовать BerkeleyDB как базу блоков, то просто удалите строчку USE_LEVELDB:=1
+
+Измените
+clean:
+ -del /Q novacoind.exe
+ -del /Q obj\*
+ -del /Q crypto\scrypt\asm\obj\*
+
на
-obj/txdb-leveldb.o: leveldb/libleveldb.a
-Если вы хотите использовать BerkeleyDB как базу блоков, то просто удалите строчку USE_LEVELDB:=1
+clean:
+ -rm novacoind.exe
+ -rm obj/*
+ -rm crypto/scrypt/asm/obj/*
-Сохраните измененный файл makefile.mingw
-Откройте терминал
cd /home/<ваше имя>/novacoin/src
export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
-make CROSS=i686-w64-mingw32.static- -f makefile.mingw
+make -j n CROSS=i686-w64-mingw32.static- -f makefile.mingw (вместо n количество ядер вашего процессора, которые вы хотите выделить под сборку)
strip novacoind.exe
-Откройте терминал и выполните следующие команды:
export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
cd /home/<ваше имя>/novacoin/src/leveldb
-TARGET_OS=NATIVE_WINDOWS make CROSS=i686-w64-mingw32.static- libleveldb.a libmemenv.a;
+TARGET_OS=NATIVE_WINDOWS make CROSS=i686-w64-mingw32.static- libleveldb.a libmemenv.a
-Откройте файл /home/<ваше имя>/novacoin/novacoin-qt.pro в текстовом редакторе(при написании инструкции использовался Pluma 1.8.1)
-Ниже
замените прописанные пути к зависимостям на
BOOST_LIB_SUFFIX=-mt
-BOOST_INCLUDE_PATH=/home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/include
-BOOST_LIB_PATH=/home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib
+BOOST_THREAD_LIB_SUFFIX=_win32-mt
BDB_INCLUDE_PATH=/home/<ваше имя>/db-6.0.20/build_unix
-BDB_LIB_PATH=//home/<ваше имя>/db-6.0.20/build_unix
-OPENSSL_INCLUDE_PATH=/home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/include
-OPENSSL_LIB_PATH=/home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib
+BDB_LIB_PATH=/home/<ваше имя>/db-6.0.20/build_unix
QRENCODE_INCLUDE_PATH=/home/<ваше имя>/qrencode-3.4.4
QRENCODE_LIB_PATH=/home/<ваше имя>/qrencode-3.4.4/.libs
на
win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease
-Измените
-LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread$$BOOST_THREAD_LIB_SUFFIX
-на
-LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread_win32$$BOOST_THREAD_LIB_SUFFIX
-
-Измените
-windows:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX -Wl,-Bstatic -lpthread -Wl,-Bdynamic
-на
-windows:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX
-
-Сохраните измененный файл novacoin-qt.pro
-Откройте терминал и выполните следующие команды
if (nTime > nNow + 10*60) // came in a flying DeLorean
return true;
- if (nTime==0 || nNow-nTime > ADDRMAN_HORIZON_DAYS*86400) // not seen in over a month
+ if (nTime==0 || nNow-nTime > ADDRMAN_HORIZON_DAYS*nOneDay) // not seen in over a month
return true;
if (nLastSuccess==0 && nAttempts>=ADDRMAN_RETRIES) // tried three times and never a success
return true;
- if (nNow-nLastSuccess > ADDRMAN_MIN_FAIL_DAYS*86400 && nAttempts>=ADDRMAN_MAX_FAILURES) // 10 successive failures in the last week
+ if (nNow-nLastSuccess > ADDRMAN_MIN_FAIL_DAYS*nOneDay && nAttempts>=ADDRMAN_MAX_FAILURES) // 10 successive failures in the last week
return true;
return false;
PUBKEY_ADDRESS = 8,
SCRIPT_ADDRESS = 20,
PUBKEY_ADDRESS_TEST = 111,
- SCRIPT_ADDRESS_TEST = 196,
+ SCRIPT_ADDRESS_TEST = 196
};
bool Set(const CKeyID &id);
HTTP_UNAUTHORIZED = 401,
HTTP_FORBIDDEN = 403,
HTTP_NOT_FOUND = 404,
- HTTP_INTERNAL_SERVER_ERROR = 500,
+ HTTP_INTERNAL_SERVER_ERROR = 500
};
// Bitcoin RPC error codes
RPC_WALLET_PASSPHRASE_INCORRECT = -14, // The wallet passphrase entered was incorrect
RPC_WALLET_WRONG_ENC_STATE = -15, // Command given in wrong wallet encryption state (encrypting an encrypted wallet etc.)
RPC_WALLET_ENCRYPTION_FAILED = -16, // Failed to encrypt the wallet
- RPC_WALLET_ALREADY_UNLOCKED = -17, // Wallet is already unlocked
+ RPC_WALLET_ALREADY_UNLOCKED = -17 // Wallet is already unlocked
};
json_spirit::Object JSONRPCError(int code, const std::string& message);
#include "util.h"
#include "net.h"
-#define CHECKPOINT_MAX_SPAN (60 * 60) // max 1 hour before latest block
+// max 1 hour before latest block
+static const int64_t CHECKPOINT_MAX_SPAN = nOneHour;
#ifdef WIN32
#undef STRICT
while (!strDump.eof() && keyHex != "DATA=END")
{
getline(strDump, keyHex);
- if (keyHex != "DATA_END")
+ if (keyHex != "DATA=END")
{
getline(strDump, valueHex);
vResult.push_back(make_pair(ParseHex(keyHex),ParseHex(valueHex)));
CTxDestination address;
std::string addrStr;
- uint64_t coinAge = max( (txOut.nValue * nDayWeight) / (COIN * 86400), (int64_t)0);
+ uint64_t coinAge = max( (txOut.nValue * nDayWeight) / (COIN * nOneDay), 0LL);
if (ExtractDestination(txOut.scriptPubKey, address))
{
int64_t KernelRecord::getAge() const
{
- return (GetAdjustedTime() - nTime) / 86400;
+ return (GetAdjustedTime() - nTime) / nOneDay;
}
uint64_t KernelRecord::getCoinDay() const
if( nWeight < 0)
return 0;
nWeight = min(nWeight, (int64_t)nStakeMaxAge);
- uint64_t coinAge = (nValue * nWeight ) / (COIN * 86400);
+ uint64_t coinAge = (nValue * nWeight ) / (COIN * nOneDay);
return coinAge;
}
int64_t nWeight = GetAdjustedTime() - nTime + minutes * 60;
if( nWeight < nStakeMinAge)
return 0;
- uint64_t coinAge = (nValue * nWeight ) / (COIN * 86400);
+ uint64_t coinAge = (nValue * nWeight ) / (COIN * nOneDay);
PoSReward = GetProofOfStakeReward(coinAge, nBits, GetAdjustedTime() + minutes * 60);
return PoSReward;
}
//uint64_t coinAge = max(nValue * dayWeight / COIN, (int64_t)0);
//return target * coinAge / pow(static_cast<double>(2), 256);
int64_t Weight = (min((GetAdjustedTime() - nTime) + timeOffset, (int64_t)(nStakeMinAge+nStakeMaxAge)) - nStakeMinAge);
- uint64_t coinAge = max(nValue * Weight / (COIN * 86400), (int64_t)0);
+ uint64_t coinAge = max(nValue * Weight / (COIN * nOneDay), 0LL);
return coinAge / (pow(static_cast<double>(2),32) * difficulty);
}
// Probabilities for the first d days
for(i = 0; i < d; i++)
{
- timeOffset = i * 86400;
- p = pow(1 - getProbToMintStake(difficulty, timeOffset), 86400);
+ timeOffset = i * nOneDay;
+ p = pow(1 - getProbToMintStake(difficulty, timeOffset), nOneDay);
prob *= p;
}
// Probability for the m minutes of the last day
- timeOffset = d * 86400;
+ timeOffset = d * nOneDay;
p = pow(1 - getProbToMintStake(difficulty, timeOffset), 60 * m);
prob *= p;
#include "checkpoints.h"
#include "db.h"
#include "txdb.h"
-#include "net.h"
#include "init.h"
#include "ui_interface.h"
#include "checkqueue.h"
{
GMF_BLOCK,
GMF_RELAY,
- GMF_SEND,
+ GMF_SEND
};
typedef std::map<uint256, std::pair<CTxIndex, CTransaction> > MapPrevTx;
{
BLOCK_PROOF_OF_STAKE = (1 << 0), // is proof-of-stake block
BLOCK_STAKE_ENTROPY = (1 << 1), // entropy bit for stake modifier
- BLOCK_STAKE_MODIFIER = (1 << 2), // regenerated stake modifier
+ BLOCK_STAKE_MODIFIER = (1 << 2) // regenerated stake modifier
};
uint64_t nStakeModifier; // hash modifier for proof-of-stake
g++ $(CFLAGS) $(LDFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS)
clean:
- -del /Q novacoind
+ -del /Q novacoind.exe
-del /Q obj\*
-del /Q crypto\scrypt\asm\obj\*
#include "mruset.h"
#include "netbase.h"
-#include "protocol.h"
#include "addrman.h"
#include "hash.h"
enum
{
MSG_TX = 1,
- MSG_BLOCK,
+ MSG_BLOCK
};
class CRequestTracker
if (connect(hSocket, (struct sockaddr*)&sockaddr, len) == SOCKET_ERROR)
{
+ int nErr = WSAGetLastError();
// WSAEINVAL is here because some legacy version of winsock uses it
- if (WSAGetLastError() == WSAEINPROGRESS || WSAGetLastError() == WSAEWOULDBLOCK || WSAGetLastError() == WSAEINVAL)
+ if (nErr == WSAEINPROGRESS || nErr == WSAEWOULDBLOCK || nErr == WSAEINVAL)
{
struct timeval timeout;
timeout.tv_sec = nTimeout / 1000;
NET_TOR,
NET_I2P,
- NET_MAX,
+ NET_MAX
};
extern int nConnectTimeout;
}
void ThreadNtpSamples(void* parg) {
- const int64_t nMaxOffset = 86400; // Not a real limit, just sanity threshold.
+ const int64_t nMaxOffset = nOneDay; // Not a real limit, just sanity threshold.
printf("Trying to find NTP server at localhost...\n");
/** nServices flags */
enum
{
- NODE_NETWORK = (1 << 0),
+ NODE_NETWORK = (1 << 0)
};
/** A CService with information about it as peer */
SIGHASH_ALL = 1,
SIGHASH_NONE = 2,
SIGHASH_SINGLE = 3,
- SIGHASH_ANYONECANPAY = 0x80,
+ SIGHASH_ANYONECANPAY = 0x80
};
/** Script verification flags */
SCRIPT_VERIFY_STRICTENC = (1U << 1), // enforce strict conformance to DER and SEC2 for signatures and pubkeys
SCRIPT_VERIFY_LOW_S = (1U << 2), // enforce low S values in signatures (depends on STRICTENC)
SCRIPT_VERIFY_NOCACHE = (1U << 3), // do not store results in signature cache (but do query it)
- SCRIPT_VERIFY_NULLDUMMY = (1U << 4), // verify dummy stack item consumed by CHECKMULTISIG is of zero-length
+ SCRIPT_VERIFY_NULLDUMMY = (1U << 4) // verify dummy stack item consumed by CHECKMULTISIG is of zero-length
};
// Strict verification:
TX_PUBKEYHASH,
TX_SCRIPTHASH,
TX_MULTISIG,
- TX_NULL_DATA,
+ TX_NULL_DATA
};
const char* GetTxnOutputType(txnouttype t);
OP_PUBKEYHASH = 0xfd,
OP_PUBKEY = 0xfe,
- OP_INVALIDOPCODE = 0xff,
+ OP_INVALIDOPCODE = 0xff
};
const char* GetOpName(opcodetype opcode);
// modifiers
SER_SKIPSIG = (1 << 16),
- SER_BLOCKHEADERONLY = (1 << 17),
+ SER_BLOCKHEADERONLY = (1 << 17)
};
#endif
// Compiler name
+#if defined(__GNUC__) && defined(__INTEL_COMPILER)
+/*code specific to linux icc compiler*/
+#define CL_NAME "-icc"
+#else
#ifdef __GNUC__
/*code for GNU C compiler */
#define CL_NAME "-gcc"
#define CL_NAME "-genericcl"
/*others*/
#endif
+#endif
// The following part of the code determines the CLIENT_BUILD variable.
// Several mechanisms are used for this: