Merge pull request #1504 from jl777/FSM

FSM
This commit is contained in:
jl777
2019-05-27 04:22:21 -11:00
committed by GitHub
7 changed files with 150 additions and 141 deletions

View File

@@ -84,7 +84,7 @@ brew update
brew upgrade brew upgrade
brew tap discoteq/discoteq; brew install flock brew tap discoteq/discoteq; brew install flock
brew install autoconf autogen automake brew install autoconf autogen automake
brew install gcc@6 brew update && brew install gcc@8
brew install binutils brew install binutils
brew install protobuf brew install protobuf
brew install coreutils brew install coreutils

View File

@@ -1,5 +1,5 @@
build_darwin_CC = gcc-6 build_darwin_CC = gcc-8
build_darwin_CXX = g++-6 build_darwin_CXX = g++-8
build_darwin_AR: = $(shell xcrun -f ar) build_darwin_AR: = $(shell xcrun -f ar)
build_darwin_RANLIB: = $(shell xcrun -f ranlib) build_darwin_RANLIB: = $(shell xcrun -f ranlib)
build_darwin_STRIP: = $(shell xcrun -f strip) build_darwin_STRIP: = $(shell xcrun -f strip)
@@ -10,8 +10,8 @@ build_darwin_SHA256SUM = shasum -a 256
build_darwin_DOWNLOAD = curl --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) --retry $(DOWNLOAD_RETRIES) -L -f -o build_darwin_DOWNLOAD = curl --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) --retry $(DOWNLOAD_RETRIES) -L -f -o
#darwin host on darwin builder. overrides darwin host preferences. #darwin host on darwin builder. overrides darwin host preferences.
darwin_CC= gcc-6 darwin_CC= gcc-8
darwin_CXX= g++-6 darwin_CXX= g++-8
darwin_AR:=$(shell xcrun -f ar) darwin_AR:=$(shell xcrun -f ar)
darwin_RANLIB:=$(shell xcrun -f ranlib) darwin_RANLIB:=$(shell xcrun -f ranlib)
darwin_STRIP:=$(shell xcrun -f strip) darwin_STRIP:=$(shell xcrun -f strip)

View File

@@ -599,11 +599,19 @@ if ENABLE_PROTON
komodod_LDADD += $(LIBBITCOIN_PROTON) $(PROTON_LIBS) komodod_LDADD += $(LIBBITCOIN_PROTON) $(PROTON_LIBS)
endif endif
# [+] Decker: use static linking for libstdc++.6.dylib, libgomp.1.dylib, libgcc_s.1.dylib
if TARGET_DARWIN
komodod_LDFLAGS += -static-libgcc
endif
# bitcoin-cli binary # # bitcoin-cli binary #
komodo_cli_SOURCES = bitcoin-cli.cpp komodo_cli_SOURCES = bitcoin-cli.cpp
komodo_cli_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(EVENT_CFLAGS) komodo_cli_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(EVENT_CFLAGS)
komodo_cli_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) komodo_cli_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
komodo_cli_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) komodo_cli_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
if TARGET_DARWIN
komodo_cli_LDFLAGS += -static-libgcc
endif
# wallet-utility binary # # wallet-utility binary #
if ENABLE_WALLET if ENABLE_WALLET

View File

@@ -1,134 +1,134 @@
// (C) 2018 Michael Toutonghi // (C) 2018 Michael Toutonghi
// 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.
/* /*
This provides the PoW hash function for Verus, enabling CPU mining. This provides the PoW hash function for Verus, enabling CPU mining.
*/ */
#ifndef VERUS_HASH_H_ #ifndef VERUS_HASH_H_
#define VERUS_HASH_H_ #define VERUS_HASH_H_
#include <cstring> #include <cstring>
#include <vector> #include <vector>
#include <cpuid.h> #include <cpuid.h>
extern "C" extern "C"
{ {
#include "crypto/haraka.h" #include "crypto/haraka.h"
#include "crypto/haraka_portable.h" #include "crypto/haraka_portable.h"
} }
class CVerusHash class CVerusHash
{ {
public: public:
static void Hash(void *result, const void *data, size_t len); static void Hash(void *result, const void *data, size_t len);
static void (*haraka512Function)(unsigned char *out, const unsigned char *in); static void (*haraka512Function)(unsigned char *out, const unsigned char *in);
static void init(); static void init();
CVerusHash() { } CVerusHash() { }
CVerusHash &Write(const unsigned char *data, size_t len); CVerusHash &Write(const unsigned char *data, size_t len);
CVerusHash &Reset() CVerusHash &Reset()
{ {
curBuf = buf1; curBuf = buf1;
result = buf2; result = buf2;
curPos = 0; curPos = 0;
std::fill(buf1, buf1 + sizeof(buf1), 0); std::fill(buf1, buf1 + sizeof(buf1), 0);
return *this; return *this;
} }
int64_t *ExtraI64Ptr() { return (int64_t *)(curBuf + 32); } int64_t *ExtraI64Ptr() { return (int64_t *)(curBuf + 32); }
void ClearExtra() void ClearExtra()
{ {
if (curPos) if (curPos)
{ {
std::fill(curBuf + 32 + curPos, curBuf + 64, 0); std::fill(curBuf + 32 + curPos, curBuf + 64, 0);
} }
} }
void ExtraHash(unsigned char hash[32]) { (*haraka512Function)(hash, curBuf); } void ExtraHash(unsigned char hash[32]) { (*haraka512Function)(hash, curBuf); }
void Finalize(unsigned char hash[32]) void Finalize(unsigned char hash[32])
{ {
if (curPos) if (curPos)
{ {
std::fill(curBuf + 32 + curPos, curBuf + 64, 0); std::fill(curBuf + 32 + curPos, curBuf + 64, 0);
(*haraka512Function)(hash, curBuf); (*haraka512Function)(hash, curBuf);
} }
else else
std::memcpy(hash, curBuf, 32); std::memcpy(hash, curBuf, 32);
} }
private: private:
// only buf1, the first source, needs to be zero initialized // only buf1, the first source, needs to be zero initialized
unsigned char buf1[64] = {0}, buf2[64]; unsigned char buf1[64] = {0}, buf2[64];
unsigned char *curBuf = buf1, *result = buf2; unsigned char *curBuf = buf1, *result = buf2;
size_t curPos = 0; size_t curPos = 0;
}; };
class CVerusHashV2 class CVerusHashV2
{ {
public: public:
static void Hash(void *result, const void *data, size_t len); static void Hash(void *result, const void *data, size_t len);
static void (*haraka512Function)(unsigned char *out, const unsigned char *in); static void (*haraka512Function)(unsigned char *out, const unsigned char *in);
static void init(); static void init();
CVerusHashV2() {} CVerusHashV2() {}
CVerusHashV2 &Write(const unsigned char *data, size_t len); CVerusHashV2 &Write(const unsigned char *data, size_t len);
CVerusHashV2 &Reset() CVerusHashV2 &Reset()
{ {
curBuf = buf1; curBuf = buf1;
result = buf2; result = buf2;
curPos = 0; curPos = 0;
std::fill(buf1, buf1 + sizeof(buf1), 0); std::fill(buf1, buf1 + sizeof(buf1), 0);
return *this; return *this;
} }
int64_t *ExtraI64Ptr() { return (int64_t *)(curBuf + 32); } int64_t *ExtraI64Ptr() { return (int64_t *)(curBuf + 32); }
void ClearExtra() void ClearExtra()
{ {
if (curPos) if (curPos)
{ {
std::fill(curBuf + 32 + curPos, curBuf + 64, 0); std::fill(curBuf + 32 + curPos, curBuf + 64, 0);
} }
} }
void ExtraHash(unsigned char hash[32]) { (*haraka512Function)(hash, curBuf); } void ExtraHash(unsigned char hash[32]) { (*haraka512Function)(hash, curBuf); }
void Finalize(unsigned char hash[32]) void Finalize(unsigned char hash[32])
{ {
if (curPos) if (curPos)
{ {
std::fill(curBuf + 32 + curPos, curBuf + 64, 0); std::fill(curBuf + 32 + curPos, curBuf + 64, 0);
(*haraka512Function)(hash, curBuf); (*haraka512Function)(hash, curBuf);
} }
else else
std::memcpy(hash, curBuf, 32); std::memcpy(hash, curBuf, 32);
} }
private: private:
// only buf1, the first source, needs to be zero initialized // only buf1, the first source, needs to be zero initialized
unsigned char buf1[64] = {0}, buf2[64]; unsigned char buf1[64] = {0}, buf2[64];
unsigned char *curBuf = buf1, *result = buf2; unsigned char *curBuf = buf1, *result = buf2;
size_t curPos = 0; size_t curPos = 0;
}; };
extern void verus_hash(void *result, const void *data, size_t len); extern void verus_hash(void *result, const void *data, size_t len);
extern void verus_hash_v2(void *result, const void *data, size_t len); extern void verus_hash_v2(void *result, const void *data, size_t len);
inline bool IsCPUVerusOptimized() inline bool IsCPUVerusOptimized()
{ {
unsigned int eax,ebx,ecx,edx; unsigned int eax,ebx,ecx,edx;
if (!__get_cpuid(1,&eax,&ebx,&ecx,&edx)) if (!__get_cpuid(1,&eax,&ebx,&ecx,&edx))
{ {
return false; return false;
} }
return ((ecx & (bit_AVX | bit_AES)) == (bit_AVX | bit_AES)); return ((ecx & (bit_AVX | bit_AES)) == (bit_AVX | bit_AES));
}; };
#endif #endif

View File

@@ -1056,7 +1056,7 @@ int32_t roundrobin_delay;
arith_uint256 HASHTarget,HASHTarget_POW; arith_uint256 HASHTarget,HASHTarget_POW;
// wait for peers to connect // wait for peers to connect
int32_t waitForPeers(const CChainParams &chainparams) void waitForPeers(const CChainParams &chainparams)
{ {
if (chainparams.MiningRequiresPeers()) if (chainparams.MiningRequiresPeers())
{ {

View File

@@ -85,6 +85,7 @@ const CScriptExt &CScriptExt::AddCheckLockTimeVerify(int64_t unlocktime) const
*((CScript *)this) << OP_DROP; *((CScript *)this) << OP_DROP;
return *this; return *this;
} }
return *this;
} }
// combined CLTV script and P2PKH // combined CLTV script and P2PKH

View File

@@ -52,7 +52,7 @@ cd $WD
./autogen.sh ./autogen.sh
CPPFLAGS="-I$PREFIX/include -arch x86_64" LDFLAGS="-L$PREFIX/lib -arch x86_64 -Wl,-no_pie" \ CPPFLAGS="-I$PREFIX/include -arch x86_64" LDFLAGS="-L$PREFIX/lib -arch x86_64 -Wl,-no_pie" \
CXXFLAGS='-arch x86_64 -I/usr/local/Cellar/gcc\@6/6.4.0_2/include/c++/6.4.0/ -I$PREFIX/include -fwrapv -fno-strict-aliasing -Werror -g -Wl,-undefined -Wl,dynamic_lookup' \ CXXFLAGS='-arch x86_64 -I/usr/local/Cellar/gcc\@6/6.4.0_2/include/c++/6.4.0/ -I$PREFIX/include -fwrapv -fno-strict-aliasing -Wno-builtin-declaration-mismatch -Werror -g -Wl,-undefined -Wl,dynamic_lookup' \
./configure --prefix="${PREFIX}" --with-gui=no "$HARDENING_ARG" "$LCOV_ARG" ./configure --prefix="${PREFIX}" --with-gui=no "$HARDENING_ARG" "$LCOV_ARG"
make "$@" V=1 NO_GTEST=1 STATIC=1 make "$@" V=1 NO_GTEST=1 STATIC=1