diff --git a/.travis.yml b/.travis.yml index c45e82a94..a8c43acd2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,12 +6,10 @@ compiler: - gcc env: global: - - SDK_URL=https://bitcoincore.org/depends-sources/sdks - - KOMODO_BUILD_DIR=Komodo-build - - COMPRESSED_BUILD=Komodo-build.tar.gz - CCACHE_SIZE=100M - CCACHE_TEMPDIR=/tmp/.ccache-temp - CCACHE_COMPRESS=1 + - STORAGE_DEST=gs://$BUCKET/$PROJECT/$TRAVIS_BRANCH/ cache: apt: true directories: @@ -23,48 +21,47 @@ matrix: fast_finish: true include: - compiler: ": Linux" - env: HOST=x86_64-unknown-linux-gnu TARGET_PLATFORM=linux64 BUILD_SCRIPT=build.sh - TRAVIS_OS_NAME=linux PACKAGES="build-essential pkg-config libc6-dev m4 g++-multilib + env: BUILD_SCRIPT=build.sh + PACKAGES="build-essential pkg-config libc6-dev m4 g++-multilib autoconf libtool ncurses-dev unzip python zlib1g-dev wget bsdmainutils automake libssl-dev libprotobuf-dev protobuf-compiler libqrencode-dev libdb++-dev software-properties-common - libcurl4-openssl-dev curl" PPA="ppa:chris-lea/zeromq" KOMODO_EXEC_SET="komodod - komodo-cli" + libcurl4-openssl-dev curl" + PACKAGE_NAME=verus-cli-linux.tar.gz + PACKAGING_MATRIX="cp src/komodod src/komodo-cli kmd/linux/verus-cli && chmod -R +x kmd/linux/verus-cli/ && cd kmd/linux && tar -czf $PACKAGE_NAME verus-cli && ls" - compiler: ": Windows" - env: HOST=x86_64-w64-mingw32 TARGET_PLATFORM=win64 RUST_TARGET=x86_64-pc-windows-gnu - BUILD_SCRIPT=build-win.sh PACKAGES="build-essential pkg-config libcurl3-gnutls-dev + env: RUST_TARGET=x86_64-pc-windows-gnu + BUILD_SCRIPT=build-win.sh + PACKAGES="build-essential pkg-config libcurl3-gnutls-dev libc6-dev libevent-dev m4 g++-multilib autoconf libtool ncurses-dev unzip git python zlib1g-dev wget bsdmainutils automake libssl-dev libprotobuf-dev protobuf-compiler - libdb++-dev ntp ntpdate mingw-w64 wine bc" KOMODO_EXEC_SET="komodod.exe komodo-cli.exe - komodo-tx.exe" + libdb++-dev ntp ntpdate mingw-w64 wine bc" + PACKAGE_NAME=verus-cli-windows.zip + PACKAGING_MATRIX="cp src/komodod.exe src/komodo-cli.exe src/komodo-tx.exe kmd/windows/verus-cli && + cd kmd/windows && zip -r9 $PACKAGE_NAME verus-cli && ls" exclude: - compiler: gcc install: -- if [ ! -d "$HOME/google-cloud-sdk/bin" ]; then rm -rf $HOME/google-cloud-sdk; export - CLOUDSDK_CORE_DISABLE_PROMPTS=1; curl https://sdk.cloud.google.com | bash; fi -- source /home/travis/google-cloud-sdk/path.bash.inc -- sudo rm -f /etc/apt/sources.list.d/travis_ci_zeromq3-source.list -- travis_retry sudo apt-get -y update && sudo apt-get -y install -qq $PACKAGES -- if [ $TARGET_PLATFORM = win64 ]; then curl -sSf https://build.travis-ci.org/files/rustup-init.sh - | sh -s -- --default-toolchain stable -y && export PATH=$PATH:$HOME/.cargo/bin:$PATH; - fi -- if [ $TARGET_PLATFORM = win64 ]; then rustup target add $RUST_TARGET; fi +- if [ $TRAVIS_OS_NAME = linux ]; then sudo rm -f /etc/apt/sources.list.d/travis_ci_zeromq3-source.list && + travis_retry sudo apt-get -y update && travis_retry sudo apt-get -y install -qq $PACKAGES; fi +- if [ -n "$RUST_TARGET" ]; then curl -sSf https://build.travis-ci.org/files/rustup-init.sh + | sh -s -- --default-toolchain stable -y && export PATH=$PATH:$HOME/.cargo/bin:$PATH && rustup target add $RUST_TARGET; fi before_script: - unset CC; unset CXX -- mkdir -p depends/SDKs depends/sdk-sources script: - "./zcutil/fetch-params.sh" - "./zcutil/$BUILD_SCRIPT -j2" after_script: -- if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then gcloud auth activate-service-account - --key-file AUTH_KEY.json; fi -- if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then cd src && mkdir $TARGET_PLATFORM && - cp -r $KOMODO_EXEC_SET $TARGET_PLATFORM && tar -czvf $TARGET_PLATFORM.tar.gz $TARGET_PLATFORM; - fi -- if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then gsutil cp $TARGET_PLATFORM.tar.gz - gs://$BUCKET/$PROJECT/$TRAVIS_BRANCH/; fi +- if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then eval "${PACKAGING_MATRIX}" && + gsutil cp $PACKAGE_NAME $STORAGE_DEST; fi notifications: slack: secure: FiVlFhSw5xnDu1Cx2yAo3J7miFCSRyuzR/2+8LKFjdWl5+fyIGvQ9x5vgUg6dWbv3UP9iIMqQuWfotsg8H+NE8pYRZQ0zDVxZ5h9+PA028qGb3OF4TMFNcltP5DGtAZ6AqrMNRZ4ltatPUm5H9ig1bhzjsx+3pqlqQuVXTXPjaUryB5s/fk2CjrsV6zTLfPHiI30jeMjmQrJJLik1vSWF70sB6HkQhvaT6jymkO4Vuh+cja418W1xIgkkoRsOXiZ/JK4hIypFo/sBkmIOprGqoFUahFqJlsBoSrp9iAzkwbDItIqqvNCHTEeN7lj6kK43ZK72E4etjjNc0CXWeleXBJBCj5Prq2lEkQ4NwuDTos3KLyyr2vI7f54xhb5+wjzY9dByHXGuG5UaNz0+uukuJinAdazGaNmmfesv1wg9p3jGa/TLsfHLMcUti875DzkUHnenivP5cXrc6/uuZyyQNq5+Gn/3DA8k0y7d1e23nm3nDjCNfATAn3yu1jieYY2yYI6CYGEXcD+UbP61uG6no+mm/lkQbQosyDfE0sADqGryqXswRste+R0sSVMBQtTipAZOUoYNbEmhN4+L78SSp3zpmgkrIxAw7le8oj6Evp2ofvE2Kvh+Z0MVoEJx6mtZI6hheIFSS38NeUZr/HBfRSpaElOYTN/ZNf8QwThCWo= before_install: - openssl aes-256-cbc -K $encrypted_11153c0bb86c_key -iv $encrypted_11153c0bb86c_iv -in AUTH_KEY.json.enc -out AUTH_KEY.json -d +- if [ ! -d "$HOME/google-cloud-sdk/bin" ]; then rm -rf $HOME/google-cloud-sdk; export + CLOUDSDK_CORE_DISABLE_PROMPTS=1; curl https://sdk.cloud.google.com | bash; fi +- source /home/travis/google-cloud-sdk/path.bash.inc +- gcloud auth activate-service-account --key-file AUTH_KEY.json +- rm AUTH_KEY.json && rm AUTH_KEY.json.enc + diff --git a/kmd/linux/verus-cli/README.txt b/kmd/linux/verus-cli/README.txt new file mode 100644 index 000000000..6a11e966a --- /dev/null +++ b/kmd/linux/verus-cli/README.txt @@ -0,0 +1,15 @@ +VerusCoin Command Line Tools v0.3.3-beta +Contents: +komodod - the Komodo daemon +komodo-cli - Komodo command line utility +verus - wrapper for komodo-cli that applies the command to the VRSC coin +verusd - wrapper for komodod that sets the VerusCoin parameters to defaults properly + +The first time on a new system you will need to run ./fetchparams.sh before using komodod or verusd. +On Ubuntu 18 systems you will need to run these two commands before running the command line tools: +sudo apt-get install libgconf-2-4 +sudo apt-get install libcurl3 + +Run ./verusd to launch komodod, and use ./verus to run commands such as: +./verus stop +Which signals komodod (if it is running) to stop running. diff --git a/kmd/linux/verus-cli/fetch-params.sh b/kmd/linux/verus-cli/fetch-params.sh new file mode 100755 index 000000000..10bade7cb --- /dev/null +++ b/kmd/linux/verus-cli/fetch-params.sh @@ -0,0 +1,165 @@ +#!/bin/bash + +set -eu + +PARAMS_DIR="$HOME/.zcash-params" + +SPROUT_PKEY_NAME='sprout-proving.key' +SPROUT_VKEY_NAME='sprout-verifying.key' +SPROUT_URL="https://z.cash/downloads" +SPROUT_IPFS="/ipfs/QmZKKx7Xup7LiAtFRhYsE1M7waXcv9ir9eCECyXAFGxhEo" + +SHA256CMD="$(command -v sha256sum || echo shasum)" +SHA256ARGS="$(command -v sha256sum >/dev/null || echo '-a 256')" + +WGETCMD="$(command -v wget || echo '')" +IPFSCMD="$(command -v ipfs || echo '')" + +# fetch methods can be disabled with ZC_DISABLE_SOMETHING=1 +ZC_DISABLE_WGET="${ZC_DISABLE_WGET:-}" +ZC_DISABLE_IPFS="${ZC_DISABLE_IPFS:-}" + +function fetch_wget { + if [ -z "$WGETCMD" ] || ! [ -z "$ZC_DISABLE_WGET" ]; then + return 1 + fi + + local filename="$1" + local dlname="$2" + + cat <&2 <&2 + exit 1 + fi + fi +} + +# Use flock to prevent parallel execution. +function lock() { + local lockfile=/tmp/fetch_params.lock + # create lock file + eval "exec 200>/$lockfile" + # acquire the lock + flock -n 200 \ + && return 0 \ + || return 1 +} + +function exit_locked_error { + echo "Only one instance of fetch-params.sh can be run at a time." >&2 + exit 1 +} + +function main() { + + lock fetch-params.sh \ + || exit_locked_error + + cat <> "$README_PATH" <&2 <&2 + exit 1 + fi + fi +} + +# Use flock to prevent parallel execution. +function lock() { + local lockfile=/tmp/fetch_params.lock + # create lock file + eval "exec 200>/$lockfile" + # acquire the lock + flock -n 200 \ + && return 0 \ + || return 1 +} + +function exit_locked_error { + echo "Only one instance of fetch-params.sh can be run at a time." >&2 + exit 1 +} + +function main() { + + lock fetch-params.sh \ + || exit_locked_error + + cat <> "$README_PATH" < removed; CValidationState stateDummy; - // don't keep staking transactions + // don't keep staking or invalid transactions if (tx.IsCoinBase() || (block.IsVerusPOSBlock() && (i == (block.vtx.size() - 1))) || !AcceptToMemoryPool(mempool, stateDummy, tx, false, NULL)) + { mempool.remove(tx, removed, true); + } } if (anchorBeforeDisconnect != anchorAfterDisconnect) { // The anchor may not change between block disconnects, @@ -3166,8 +3168,17 @@ bool static DisconnectTip(CValidationState &state, bool fBare = false) { assert(pcoinsTip->GetAnchorAt(pcoinsTip->GetBestAnchor(), newTree)); // Let wallets know transactions went from 1-confirmed to // 0-confirmed or conflicted: - BOOST_FOREACH(const CTransaction &tx, block.vtx) { - SyncWithWallets(tx, NULL); + for (int i = 0; i < block.vtx.size(); i++) + { + CTransaction &tx = block.vtx[i]; + if (block.IsVerusPOSBlock() && (i == (block.vtx.size() - 1))) + { + EraseFromWallets(tx.GetHash()); + } + else + { + SyncWithWallets(tx, NULL); + } } // Update cached incremental witnesses //fprintf(stderr,"chaintip false\n"); diff --git a/src/validationinterface.cpp b/src/validationinterface.cpp index cd3e30f3d..a8e15db99 100644 --- a/src/validationinterface.cpp +++ b/src/validationinterface.cpp @@ -51,3 +51,7 @@ void UnregisterAllValidationInterfaces() { void SyncWithWallets(const CTransaction &tx, const CBlock *pblock) { g_signals.SyncTransaction(tx, pblock); } + +void EraseFromWallets(const uint256 &hash) { + g_signals.EraseTransaction(hash); +} diff --git a/src/validationinterface.h b/src/validationinterface.h index 1855dacd7..767c4762f 100644 --- a/src/validationinterface.h +++ b/src/validationinterface.h @@ -28,6 +28,8 @@ void UnregisterValidationInterface(CValidationInterface* pwalletIn); void UnregisterAllValidationInterfaces(); /** Push an updated transaction to all registered wallets */ void SyncWithWallets(const CTransaction& tx, const CBlock* pblock = NULL); +/** Erase a transaction from all registered wallets */ +void EraseFromWallets(const uint256 &hash); class CValidationInterface { protected: diff --git a/zcutil/build-win.sh b/zcutil/build-win.sh index a3288e879..5c12893fa 100755 --- a/zcutil/build-win.sh +++ b/zcutil/build-win.sh @@ -10,7 +10,7 @@ set -x cd "$(dirname "$(readlink -f "$0")")/.." cd depends/ && make HOST=$HOST V=1 NO_QT=1 -cd .. +cd ../ ./autogen.sh CONFIG_SITE=$PWD/depends/x86_64-w64-mingw32/share/config.site CXXFLAGS="-DPTW32_STATIC_LIB -DCURL_STATICLIB -DCURVE_ALT_BN128 -fopenmp -pthread" ./configure --prefix="${PREFIX}" --host=x86_64-w64-mingw32 --enable-static --disable-shared sed -i 's/-lboost_system-mt /-lboost_system-mt-s /' configure