It was the Bitcointalk forum that inspired us to create Bitcointalksearch.org - Bitcointalk is an excellent site that should be the default page for anybody dealing in cryptocurrency, since it is a virtual gold-mine of data. However, our experience and user feedback led us create our site; Bitcointalk's search is slow, and difficult to get the results you need, because you need to log in first to find anything useful - furthermore, there are rate limiters for their search functionality.
The aim of our project is to create a faster website that yields more results and faster without having to create an account and eliminate the need to log in - your personal data, therefore, will never be in jeopardy since we are not asking for any of your data and you don't need to provide them to use our site with all of its capabilities.
We created this website with the sole purpose of users being able to search quickly and efficiently in the field of cryptocurrency so they will have access to the latest and most accurate information and thereby assisting the crypto-community at large.
addnode=198.154.60.183
addnode=50.116.37.18
addnode=212.71.251.113
addnode=192.241.171.45
addnode=dvc.rpwt.org:52333
addnode=devcoin.rpwt.org:52333
addnode=dvc.rpwt.org:52333
addnode=devcoin.rpwt.org:52333
addnode=devcoin.rpwt.org:52333
addnode=dvc.us.public.txn.co.in
addnode=dvc.eu.public.txn.co.in
addnode=85.17.248.211:7333
addnone=198.154.60.61:7333
addnode=188.165.216.59:7333
addnode=54.193.11.95
addnode=54.255.130.210
addnode=198.23.242.92
addnode=121.199.12.227
addnode=54.185.94.219
addnode=162.243.175.205
screen -d -m -S p2pool
~/p2pool/run_p2pool.py $Bitcoin_User $Bitcoin_Password \
--merged http://$Namecoin_User:[email protected]:7333 \
--merged http://$Ixcoin_User:[email protected]:8338 \
--merged http://$Devcoin_User:[email protected]:6333 \
--merged http://$i0coin_User:[email protected]:7338 \
--merged http://$Fusioncoin_User:[email protected]:18491 \
--merged http://$Huntercoin_User:[email protected]:8399 \
--address 1YourBitcoinAddress
sudo chown -R $(whoami):$(whoami) .*
sudo chown -R $(whoami):$(whoami) *
### To download ###
wget http://bitcoin.kyros.info/install-merged-mining.sh
### To run, without downloading the blockchain via http ###
./install-merged-mining.sh --compile
### OR ###
./install-merged-mining.sh --download
### To run, WITH downloading the blockchain via http ###
./install-merged-mining.sh --compile --http
### OR ###
./install-merged-mining.sh --download --http
#!/bin/bash
# A function to display help and exit.
Usage()
{
echo "$(basename $0): Downloads and installs bitcoind, p2pool, and other coins for merged mining." >&2
echo "Usage:" >&2
echo "To download precompiled binaries (faster but less secure):" >&2
echo " $(basename $0) --download" >&2
echo "To download the source code and compile yourself (slower but more secure):" >&2
echo " $(basename $0) --compile" >&2
echo "You may also choose to download the bitcoin blockchain via http. Add the following to the command line:" >&2
echo " --http" >&2
echo "If you don't use this, the blockchain will instead download using the (much slower) built-in peer-to-peer process." >&2
echo >&2
exit 1
} # Usage()
################################################
# Coin Settings
################################################
# Create arrays for storing the various coin RPC usernames, passwords, and other settings.
declare -A CoinUser
declare -A CoinPassword
declare -A CoinPort
declare -A CoinRPCPort
declare -A CoinSourceDownload
declare -A CoinSourceUpdate
declare -A CoinCompileCommand
declare -A CoinSymbol
# Set the default values for all the coins.
# These will be overridden by existing values in the config files.
# Note that you never need to remember the various RPC usernames and passwords; they just have to exist and be unguessable.
# Also note that the path to the config file is always of the form ~/coinname/coinname.conf. If you ever add a coin that doesn't meet this assumption, you'll have to add another array to track the config file location.
CoinUser["bitcoin"]=`< /dev/urandom tr -dc A-Za-z0-9 | head -c40`
CoinPassword["bitcoin"]=`< /dev/urandom tr -dc A-Za-z0-9 | head -c40`
CoinPort["bitcoin"]=8333
CoinRPCPort["bitcoin"]=8332
CoinSourceDownload["bitcoin"]="" # @TODO: Fill this out.
CoinSourceUpdate["bitcoin"]="" # @TODO: Fill this out.
CoinCompileCommand["bitcoin"]="" # @TODO: Fill this out.
CoinSymbol["bitcoin"]=BTC
CoinUser["namecoin"]=`< /dev/urandom tr -dc A-Za-z0-9 | head -c40`
CoinPassword["namecoin"]=`< /dev/urandom tr -dc A-Za-z0-9 | head -c40`
CoinPort["namecoin"]=8334
CoinRPCPort["namecoin"]=7333
CoinSourceDownload["namecoin"]="git clone https://github.com/namecoin/namecoin"
CoinSourceUpdate["namecoin"]="git pull"
CoinCompileCommand["namecoin"]="make -f Makefile"
CoinSymbol["namecoin"]=NMC
CoinUser["ixcoin"]=`< /dev/urandom tr -dc A-Za-z0-9 | head -c40`
CoinPassword["ixcoin"]=`< /dev/urandom tr -dc A-Za-z0-9 | head -c40`
CoinPort["ixcoin"]=8337
CoinRPCPort["ixcoin"]=8338
CoinSourceDownload["ixcoin"]="git clone https://github.com/FrictionlessCoin/iXcoin ixcoin"
CoinSourceUpdate["ixcoin"]="git pull"
CoinCompileCommand["ixcoin"]="make -f makefile.unix"
CoinSymbol["ixcoin"]=IXC
CoinUser["devcoin"]=`< /dev/urandom tr -dc A-Za-z0-9 | head -c40`
CoinPassword["devcoin"]=`< /dev/urandom tr -dc A-Za-z0-9 | head -c40`
CoinPort["devcoin"]=6334
CoinRPCPort["devcoin"]=6333
CoinSourceDownload["devcoin"]="git clone git://gitorious.org/devcoin/devcoin.git"
CoinSourceUpdate["devcoin"]="git pull"
CoinCompileCommand["devcoin"]="make -f makefile.unix USE_PNP=1 devcoind"
CoinSymbol["devcoin"]=DVC
CoinUser["i0coin"]=`< /dev/urandom tr -dc A-Za-z0-9 | head -c40`
CoinPassword["i0coin"]=`< /dev/urandom tr -dc A-Za-z0-9 | head -c40`
CoinPort["i0coin"]=7337
CoinRPCPort["i0coin"]=7338
CoinSourceDownload["i0coin"]="git clone http://github.com/rsnel/i0coin/"
CoinSourceUpdate["i0coin"]="git pull"
CoinCompileCommand["i0coin"]="make -f makefile.unix i0coind"
CoinSymbol["i0coin"]=I0C
CoinUser["fusioncoin"]=`< /dev/urandom tr -dc A-Za-z0-9 | head -c40`
CoinPassword["fusioncoin"]=`< /dev/urandom tr -dc A-Za-z0-9 | head -c40`
CoinPort["fusioncoin"]=8492
CoinRPCPort["fusioncoin"]=18491
CoinSourceDownload["fusioncoin"]="git clone https://github.com/fusioncoin/fusioncoin"
CoinSourceUpdate["fusioncoin"]="git pull"
CoinCompileCommand["fusioncoin"]="make -f makefile.unix"
CoinSymbol["fusioncoin"]=FSC
CoinUser["huntercoin"]=`< /dev/urandom tr -dc A-Za-z0-9 | head -c40`
CoinPassword["huntercoin"]=`< /dev/urandom tr -dc A-Za-z0-9 | head -c40`
CoinPort["huntercoin"]=8398
CoinRPCPort["huntercoin"]=8399
CoinSourceDownload["huntercoin"]="git clone https://github.com/chronokings/huntercoin"
CoinSourceUpdate["huntercoin"]="git pull"
CoinCompileCommand["huntercoin"]="make -f Makefile"
CoinSymbol["huntercoin"]=HUC
# This is the list of coins that should be compiled (if the user selects that option) -- this should be all coins except Bitcoin.
CompileCoins="namecoin ixcoin devcoin i0coin fusioncoin huntercoin"
# This is the list of all coins, both compiled and non-compiled. Generally this should be only Bitcoin that's unique here.
AllCoins="bitcoin $CompileCoins"
################################################
# Utility functions
################################################
#
# Gets the settings for a given coin and adds them to the Coin*[] global arrays.
#
# Parameters:
# $1: Coin name (string literal, used in the associative array. No spaces.)
# $2: (optional) Path and filename of the config file. If not specified, the default path is used.
#
# Return value:
# 0: Settings already exist, retrieved and added to global arrays.
# 1: One or more settings do not exist in the file.
# Settings that do exist were retrieved and added to global arrays.
# 98: Parameter error.
# 99: Error in reading file (not found or no read permission).
#
# Output:
# None
#
GetSettings()
{
# Make sure we have the right number of parameters, and that a coin name is specified.
if [ $# -lt 1 -o $# -gt 2 -o -z "$1" ] ; then
return 98
fi
# Get the path and filename of the config file
local filepath
if [ -n "$2" ] ; then
filepath="$2"
else
filepath="$HOME/.$1/$1.conf"
fi
# Make sure the config file exists and is readable.
if [ ! -r "$filepath" ] ; then
return 99
fi
# Read the values from the file.
local user password port rpcport retval
user="$(grep -i "rpcuser" "$filepath" | awk -F= '{print $2}')"
password="$(grep -i "rpcpassword" "$filepath" | awk -F= '{print $2}')"
port="$(grep -ie "^port" "$filepath" | awk -F= '{print $2}')"
rpcport="$(grep -i "rpcport" "$filepath" | awk -F= '{print $2}')"
# Update the appropriate arrays, if the value was read from the file.
[ -n "$user" ] && CoinUser["$1"]="$user"
[ -n "$password" ] && CoinPassword["$1"]="$password"
[ -n "$port" ] && CoinPort["$1"]="$port"
[ -n "$rpcport" ] && CoinRPCPort["$1"]="$rpcport"
# The global arrays now contain all the settings, either read from the file or the global defaults, for the given coin.
# Return the appropriate value.
[ -z "$user" -o -z "$password" -o -z "$port" -o -z "$rpcport" ] && return 1
return 0
} # GetSettings()
#
# Adds a line to a settings file if it doesn't already exist.
#
# Parameters:
# $1: Coin name (string literal, used in the associative array. No spaces.)
# $2: The line to add.
# $3: (optional) Path and filename of the config file. If not specified, the default path is used.
#
# Return value:
# 0: Line added.
# 1: Line already exists.
# 98: Parameter error.
# 99: Error in reading file (not found or no read permission).
#
# Output:
# None
#
AddLine()
{
# Make sure we have the right number of parameters, and that a coin name is specified.
if [ $# -lt 1 -o $# -gt 3 -o -z "$1" -o -z "$2" ] ; then
return 98
fi
# Get the path and filename of the config file
local filepath
if [ -n "$3" ] ; then
filepath="$3"
else
filepath="$HOME/.$1/$1.conf"
fi
# Make sure the config file exists and is readable.
if [ ! -r "$filepath" ] ; then
return 99
fi
# Add the line if it doesn't already exist.
local matchstring=$(echo "$2" | sed -e 's/[]\/$*.^|[]/\\&/g')
if ! grep -qe "^$matchstring\$" "$filepath" ; then
echo "$2" >> "$filepath"
return 0
fi
return 1
} # AddLine()
#
# Updates the settings file for a given coin.
#
# Parameters:
# $1: Coin name (string literal, used in the associative array. No spaces.)
# $2: (optional) Path and filename of the config file. If not specified, the default path is used.
#
# Return value:
# 0: Settings updated.
# 98: Parameter error.
# 99: Error in reading file (not found or no read permission).
#
# Output:
# None
#
UpdateSettings()
{
# Make sure we have the right number of parameters, and that a coin name is specified.
if [ $# -lt 1 -o $# -gt 2 -o -z "$1" ] ; then
return 98
fi
# Get the path and filename of the config file
local filepath
if [ -n "$2" ] ; then
filepath="$2"
else
filepath="$HOME/.$1/$1.conf"
fi
# Make sure the config file exists and is readable.
if [ ! -r "$filepath" ] ; then
return 99
fi
# Make sure the three static lines always exist in the file
local Line
for Line in "server=1" "daemon=1" "rpcallowip=127.0.0.1"
do
AddLine "$1" "$Line" "$filepath"
done
# Remove the four parametric lines, then add in the correct values
grep -ve "^rpcuser=" "$filepath" | grep -ve "^rpcpassword=" | grep -ve "^port=" | grep -ve "^rpcport=" > "$filepath.tmp"
mv "$filepath.tmp" "$filepath"
AddLine "$1" "rpcuser=${CoinUser[$1]}" "$filepath"
AddLine "$1" "rpcpassword=${CoinPassword[$1]}" "$filepath"
AddLine "$1" "port=${CoinPort[$1]}" "$filepath"
AddLine "$1" "rpcport=${CoinRPCPort[$1]}" "$filepath"
echo "" >> "$filepath"
} # UpdateSettings()
################################################
# Main Script Start
################################################
# Determine what the user wants to do, or display help
if [ $# -eq 0 ] ; then
Usage
else
while [ $# -gt 0 ] ; do
if [ "--download" = "$1" ] ; then
Method="download"
elif [ "--compile" = "$1" ] ; then
Method="compile"
# elif [ "--torrent" = "$1" ] ; then
# Blockchain="torrent"
elif [ "--http" = "$1" ] ; then
Blockchain="http"
else
echo "Error: Unrecognized parameter on command line. Aborting" >2
Usage
fi
shift
done
fi
# Make sure the user specified where to compile or download
if [ -z "$Method" ] ; then
echo "Error: No installation method specified (compile or download). Aborting" >2
Usage
fi
################################################
# Sudo Script Creation and Run
################################################
# Create a script to update the system. This requires sudo, so we can't run it directly.
cat <~/sudoscript.sh
#!/bin/sh
# Install the pre-req for add-apt-repository
apt-get -y install software-properties-common
# Add the bitcoin repository
add-apt-repository -y ppa:bitcoin/bitcoin
# Update installed packages
apt-get -y update
apt-get -y dist-upgrade
# Install the needed prerequisites
# Note that bitcoind is always installed as a binary, not compiled.
apt-get -y install bitcoind python-software-properties screen git python-rrdtool python-pygame python-scipy python-twisted python-twisted-web python-imaging build-essential libglib2.0-dev libglibmm-2.4-dev libqt4-dev python-dev libssl-dev libdb5.1++-dev libboost1.55-all-dev dh-autoreconf libcurl4-openssl-dev libminiupnpc-dev ufw p7zip-full
# Set up and configure a firewall, if it isn't already there.
# Note that we do NOT enable the RPC port for any coins!
ufw default deny # Deny everything unless expressly permitted
ufw allow 22/tcp # SSH
ufw allow 8333/tcp # bitcoin peer to peer
ufw allow 8334/tcp # namecoin peer to peer
ufw allow 8337/tcp # ixcoin peer to peer
ufw allow 6334/tcp # devcoin peer to peer
ufw allow 7337/tcp # i0coin peer to peer
ufw allow 8492/tcp # fusioncoin peer to peer
ufw allow 8398/tcp # huntercoin peer to peer
ufw allow 9333/tcp # P2pool peer to peer
ufw allow 9332/tcp # P2Pool connections and Web interface
ufw --force enable # Turn it on
EOF
echo "About to update your system. This requires elevated privileges. Please enter your password when prompted."
sleep 2 # pause so the user has a chance to see and read the message.
sudo sh ~/sudoscript.sh
rm ~/sudoscript.sh
################################################
# P2Pool Installation or Update
################################################
# Install p2pool
if [ -d ~/p2pool/ ] ; then
cd ~/p2pool
git pull
else
cd
git clone git://github.com/forrestv/p2pool.git
fi
################################################
# Coin Binaries Setup
################################################
# Now either download or compile the binaries.
if [ "$Method" = "download" ] ; then
################################################
# Binary Download
################################################
# Download and unpack scripts and binaries for other coins
cd
wget http://pool.nitro.gr/p2pool-files.tar.gz
# Ensure the compiled binaries archive is valid! This checksum has to be updated each time the binaries are repackaged.
# Too much manual work, Murdof can enable this if he wants to maintain it. (Switch "false" to "true")
if false; then
checksum="$(md5sum p2pool-files.tar.gz | awk '{print $1;}')"
if [ "$checksum" != "0e35d6a1ee234b1a90975588917275eb" ] ; then
echo "ERROR: Downloaded binaries are corrupt or have been tampered with! Please try running this script again. If this error repeats, please contact the script author here:" >&2
echo "https://bitcointalk.org/index.php?topic=651819.0" >&2
exit 3
fi
fi
Status="$Status\nDownload succeeded."
# Unpack the binaries and delete the downloaded archive.
tar xvzf p2pool-files.tar.gz
rm p2pool-files.tar.gz
elif [ "$Method" = "compile" ] ; then
################################################
# Compile from Coin Source
################################################
# Make the local binaries directory
mkdir -p ~/bin
# Make a directory to download and store all the alt-coin sources
mkdir -p ~/coin_source
for Coin in $CompileCoins ; do
cd ~/coin_source
if [ -d ~/coin_source/$Coin/ ] ; then
cd ~/coin_source/$Coin
${CoinSourceUpdate[$Coin]}
else
${CoinSourceDownload[$Coin]}
fi
cd ~/coin_source/$Coin/src
${CoinCompileCommand[$Coin]}
if [ -f ${Coin}d ] ; then
Status="$Status\n${Coin} compilation succeeded."
strip ${Coin}d
cp ${Coin}d ~/bin
else
Status="$Status\n${Coin} compilation FAILED."
fi
done
else
# This should never happen! It means there's an error in this script itself.
echo "Unhandled error! Bad programmer! No cookie!" >&2
exit 2
fi
################################################
# Script settings creation
################################################
for Coin in $AllCoins ; do
# Make directories for everything
mkdir -p ~/.${Coin}
# Create an empty config file, if it doesn't already exist.
ConfigFile=$HOME/.${Coin}/${Coin}.conf
touch "$ConfigFile"
# Read the old settings from the config file, if any.
GetSettings "$Coin" "$ConfigFile"
# Update the settings.
UpdateSettings "$Coin" "$ConfigFile"
done
################################################
# "Batch Files" Creation
################################################
# Create the startup script for all coins and p2pool.
cat >~/start-p2pool <#!/bin/sh
/usr/bin/bitcoind -daemon
~/bin/namecoind -daemon
~/bin/ixcoind -daemon
~/bin/devcoind -daemon >/dev/null # For some reason, devcoin writes to the terminal, even when started as a daemon.
~/bin/i0coind -daemon
~/bin/fusioncoind -daemon
~/bin/huntercoind -daemon
screen -d -m -S p2pool \\
~/p2pool/run_p2pool.py ${CoinUser["bitcoin"]} ${CoinPassword["bitcoin"]} \\
EOF
for Coin in $CompileCoins
do
echo " --merged http://${CoinUser[$Coin]}:${CoinPassword[$Coin]}@127.0.0.1:${CoinRPCPort[$Coin]} \\" >>~/start-p2pool
done
echo "" >>~/start-p2pool
echo "" >>~/start-p2pool
chmod 755 ~/start-p2pool
# Create a script to list the value of all coin wallets.
cat >~/listallcoins <#!/bin/sh
echo "BTC: \$(/usr/bin/bitcoind -rpcpassword=${CoinPassword[bitcoin]} listaccounts | awk '{getline; print \$NF;exit;}')"
EOF
for Coin in $CompileCoins
do
cat >>~/listallcoins <echo "${CoinSymbol[$Coin]}: \$($HOME/bin/${Coin}d -rpcpassword=${CoinPassword[$Coin]} listaccounts | awk '{getline; print \$NF; exit;}')"
EOF
done
chmod 755 ~/listallcoins
################################################
# Bitcoin Blockchain Download
################################################
# If requested, download the blockchain.
if [ "$Blockchain" = "http" ] ; then
cd ~/.bitcoin
#wget https://bitfetch.com/static/bootstrap.7z
# Note: as of this writing, the SSL certificate for bitfetch.com has expired.
# If you just try to wget the file, wget will fail, complaining about it.
# So, we have to force wget to ignore the expired certificate. Once the
# certificate on the site has been properly renewed, delete the line below
# and uncomment the line above.
wget --no-check-certificate https://bitfetch.com/static/bootstrap.7z
# unzip it.
7z x bootstrap.7z
#elif [ "$Blockchain" = "torrent" ] ; then
# @TODO: No clue how torrenting works on Unix. Someone else can fill this in.
fi
################################################
# Wrap up and exit
################################################
# Wrap up; tell the user we succeeded, and ask him to reboot.
echo
echo
echo
echo "Installation results:"
echo -e "$Status"
echo
echo "It is strongly advised that you reboot at this point. After rebooting,"
echo "start p2pool and all the coin daemons with this command:"
echo " ~/start-p2pool"
echo
echo "You may also add this line to your cron so it starts automatically:"
echo " @reboot $HOME/start-p2pool"
echo
echo "You may check your coin balances at any time with this command:"
echo " ~/listallcoins"
echo
echo "Thank you for helping to protect the bitcoin network by participating"
echo "in p2pool, and good luck with your mining!"