Verus Coin - this coin was backdoored by it's lead dev and should not be trusted! https://git.hush.is/duke/backdoors/src/branch/master/vrsc.md
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

309 lines
7.0 KiB

#!/bin/bash
trap '[[ -z "$(jobs -p)" ]] || kill $(jobs -p)' EXIT
set -eu
function set_data_dir() {
echo Enter blockchain data directory or leave blank for default:
read -r vrsc_data_dir
if [[ "$vrsc_data_dir" == "" ]]; then
if [[ "$OSTYPE" == "darwin"* ]]; then
V_CHAIN_DATA_DIR="$HOME/Library/Application Support/Komodo/VRSC"
else
V_CHAIN_DATA_DIR="$HOME/.komodo/VRSC"
fi
else
V_CHAIN_DATA_DIR="$vrsc_data_dir"
fi
echo -n "Install bootstrap in ${V_CHAIN_DATA_DIR}? ([1]Yes/[2]No)"
read -r answer
if [ "$answer" != "${answer#[1]}" ]; then
echo
else
echo bootstrap not installed
exit 1
fi
}
BOOTSTRAP_URL="https://bootstrap.verus.io"
BOOTSTRAP_ARCHIVE="VRSC-bootstrap.tar.gz"
BOOTSTRAP_ARCHIVE_SIG="$BOOTSTRAP_ARCHIVE.verusid"
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 '')"
CURLCMD="$(command -v curl || echo '')"
PIDOFCMD="$(command -v pidof || echo '')"
PGREPCMD="$(command -v curl || echo '')"
PROCESS_RUNNING=
# fetch methods can be disabled with ZC_DISABLE_SOMETHING=1
ZC_DISABLE_WGET="${ZC_DISABLE_WGET:-}"
ZC_DISABLE_IPFS="${ZC_DISABLE_IPFS:-}"
ZC_DISABLE_CURL="${ZC_DISABLE_CURL:-}"
# overwrite chain data if found
OVERWRITE_BLOCKCHAIN_DATA="${OVERWRITE_BLOCKCHAIN_DATA:-}"
function check_pidof() {
if [ -z "${PIDOFCMD}" ]; then
return 1
fi
local processname="$1"
cat <<EOF
Checking if $processname is running
EOF
pidof "${processname}" >/dev/null
# Check the exit code of the shasum command:
PIDOF_RESULT=$?
if [ $PIDOF_RESULT -eq 0 ]; then
PROCESS_RUNNING=1
fi
}
function check_pgrep() {
if [ -z "${PGREPCMD}" ]; then
return 1
fi
local processname="$1"
cat <<EOF
Checking if $processname is running
EOF
pgrep -x "${processname}" >/dev/null
# Check the exit code of the shasum command:
PGREP_RESULT=$?
if [ $PGREP_RESULT -eq 0 ]; then
PROCESS_RUNNING=1
fi
}
function check_failure() {
cat >&2 <<EOF
Make sure to have either pidof or pgrep installed on your system
EOF
exit 1
}
function fetch_wget() {
if [ -z "$WGETCMD" ] || [ -n "$ZC_DISABLE_WGET" ]; then
return 1
fi
local filename="$1"
local dlname="$2"
local url="$3"
cat <<EOF
Retrieving (wget): ${url}/${filename}
EOF
wget \
--progress=dot:giga \
--output-document="${dlname}" \
--continue \
--retry-connrefused --waitretry=3 --timeout=30 \
"${url}/${filename}"
}
function fetch_ipfs() {
if [ -z "${IPFSCMD}" ] || [ -n "${ZC_DISABLE_IPFS}" ]; then
return 1
fi
local filename="$1"
local dlname="$2"
local cid="$3"
cat <<EOF
Retrieving (ipfs): ${cid}/$filename
EOF
ipfs get --output "${dlname}" "${cid}/${filename}"
}
function fetch_curl() {
if [ -z "${CURLCMD}" ] || [ -n "${ZC_DISABLE_CURL}" ]; then
return 1
fi
local filename="$1"
local dlname="$2"
local url="$3"
cat <<EOF
Retrieving (curl): ${url}/${filename}
EOF
curl \
--output "${dlname}" \
-# -L -C - \
"${url}/${filename}"
}
function fetch_failure() {
cat >&2 <<EOF
Failed to fetch data bootstrap
Make sure one of the following programs installed and make sure you're online:
* ipfs
* wget
* curl
EOF
exit 1
}
function verify_checksum() {
local filename="$1"
local dlname="$2"
local expectedhash="$3"
cat <<EOF
Verifying $filename checksum
EOF
"$SHA256CMD" $SHA256ARGS -c <<EOF
$expectedhash $dlname
EOF
}
# Use flock to prevent parallel execution.
function lock() {
local lockfile=/tmp/fetch_bootstrap.lock
if [[ "$OSTYPE" == "darwin"* ]]; then
if shlock -f ${lockfile} -p $$; then
return 0
else
return 1
fi
else
# create lock file
eval "exec 200>$lockfile"
# acquire the lock
flock -n 200 &&
return 0 ||
return 1
fi
}
function exit_locked_error() {
echo "Only one instance of fetch-bootstrap.sh can be run at a time." >&2
exit 1
}
function overwrite_bootstrap_data() {
for method in pgrep pidof failure; do
if "check_$method" verusd; then
if [ -z "$PROCESS_RUNNING" ]; then
for item in "${vrsc_data[@]}"; do
echo "Removing ${item}"
rm -rf "${item}"
done
else
echo Verusd is running, close and try again.
exit 1
fi
break
fi
done
}
function fetch_bootstrap() {
echo Fetching bootstrap
for method in wget curl failure; do
if "fetch_$method" "$BOOTSTRAP_ARCHIVE" "/tmp/$BOOTSTRAP_ARCHIVE" "${BOOTSTRAP_URL}"; then
echo "Download successful!"
break
fi
done
for method in wget curl failure; do
if "fetch_$method" "$BOOTSTRAP_ARCHIVE_SIG" "/tmp/$BOOTSTRAP_ARCHIVE_SIG" "${BOOTSTRAP_URL}"; then
echo "Download successful!"
break
fi
done
expectedhash="$(awk -F'[, \t]*' '/hash/{print substr($3,2,length($3)-2)}' /tmp/$BOOTSTRAP_ARCHIVE_SIG)"
if verify_checksum $BOOTSTRAP_ARCHIVE_SIG /tmp/$BOOTSTRAP_ARCHIVE "$expectedhash"; then
echo Extracting bootstrap
tar -xzf "/tmp/$BOOTSTRAP_ARCHIVE" --directory "${V_CHAIN_DATA_DIR}"
echo Bootstrap successfully installed
rm /tmp/$BOOTSTRAP_ARCHIVE_SIG
rm /tmp/$BOOTSTRAP_ARCHIVE
else
echo "Failed to verify bootstrap checksum!" >&2
rm /tmp/$BOOTSTRAP_ARCHIVE_SIG
rm /tmp/$BOOTSTRAP_ARCHIVE
fi
}
function main() {
lock fetch-bootstrap.sh ||
exit_locked_error
cat <<EOF
This script will install a blockchain data bootstrap
EOF
# set chain data dir
if [[ -z "${V_CHAIN_DATA_DIR-}" ]]; then
set_data_dir
fi
data_files=("fee_estimates.dat" "komodostate" "komodostate.ind" "peers.dat" "db.log" "debug.log" "signedmasks")
data_dirs=("blocks" "chainstate" "database" "notarisations")
vrsc_data=()
if ! [ -d "${V_CHAIN_DATA_DIR}" ]; then
echo "making dir ${V_CHAIN_DATA_DIR}"
mkdir -p "${V_CHAIN_DATA_DIR}"
else
for file in "${data_files[@]}"; do
if [ -f "${V_CHAIN_DATA_DIR}/${file}" ]; then
vrsc_data+=("${V_CHAIN_DATA_DIR}"/"${file}")
fi
done
for dir in "${data_dirs[@]}"; do
if [ -d "${V_CHAIN_DATA_DIR}/${dir}" ]; then
vrsc_data+=("${V_CHAIN_DATA_DIR}"/"${dir}")
fi
done
fi
if [ ${#vrsc_data[*]} -lt 1 ]; then
cd "${V_CHAIN_DATA_DIR}"
echo Fetching bootstrap
fetch_bootstrap
else
echo "Found existing VRSC data:"
echo "####################################################################################"
for item in "${vrsc_data[@]}"; do
echo "${item}"
done
echo "####################################################################################"
if [ -n "$OVERWRITE_BLOCKCHAIN_DATA" ]; then
overwrite_bootstrap_data
fetch_bootstrap
else
echo -n "Existing blockchain data found. Overwrite? ([1]Yes/[2]No)"
read -r answer
if [ "$answer" != "${answer#[1]}" ]; then
overwrite_bootstrap_data
fetch_bootstrap
else
echo bootstrap not installed
exit 1
fi
fi
fi
}
main
rm -f /tmp/fetch_bootstrap
exit 0