Sprouts Classic is the original Sprouts, a network-compatible, community-developed wallet client.
The project has been designed to provide people with a stable, secure, and feature-rich alternative to the Sprouts Classic reference wallet (http://github.com/ppcoin/ppcoin).
To help faciliate broad community cooperation, a number of trusted Sprouts Classic/Peershares community leaders have write permissions to the project's codebase, allowing for decentralization and continuity. Community members, old and new, are encouraged to find ways to contribute to the success of the project. If you have experience with programming, product design, QA engineering, translation, or have a different set of skills that you want to bring to the project, your involvement is appreciated!
- Source: Source Code
- Documentation: Build Instructions
- Support: Sprouts Forum, Issue Tracker
Sprouts Classic (abbreviated SPRTSC), also known as Sprouts Classic and Peer-to-Peer Coin is the first cryptocurrency design introducing proof-of-stake consensus as a security model, with a combined proof-of-stake/proof-of-work minting system. Sprouts Classic is based on Bitcoin, while introducing many important innovations to cryptocurrency field including new security model, energy efficiency, better minting model and more adaptive response to rapid change in network computation power.
- Developers work in their own forks, then submit pull requests when they think their feature or bug fix is ready.
- If it is a simple/trivial/non-controversial change, then one of the development team members simply pulls it.
- If it is a more complicated or potentially controversial change, then the change may be discussed in the pull request, or the requester may be asked to start a discussion Sprouts Talk for a broader community discussion.
- The patch will be accepted if there is broad consensus that it is a good thing. Developers should expect to rework and resubmit patches if they don't match the project's coding conventions (see coding.txt) or are controversial.
- From time to time a pull request will become outdated. If this occurs, and the pull is no longer automatically mergeable; a comment on the pull will be used to issue a warning of closure. Pull requests closed in this manner will have their corresponding issue labeled 'stagnant'.
- For development ideas and help see here.
Changes to translations as well as new translations can be submitted to Sprouts Classic Forum.
Translations are periodically pulled from Get Localization and merged into the git repository.
Important: We do not accept translation changes as GitHub pull requests because the next pull from Get Localization would automatically overwrite them again.
Standard build tool is Qt qmake
, the following is executed in /home/${USER}.
sudo apt-get install ntp git build-essential libssl-dev libdb-dev libdb++-dev libqrencode-dev libboost-dev qt5-default qt5-qmake -y
sudo apt-get install libprotoc-dev libprotobuf-dev -y
sudo apt-get install libpng-dev qrencode -y
sudo apt-get install libqrencode-dev -y
git clone https://github.com/skourdes/SproutsClassic
cd SproutsClassic
qmake USE_O3=1 USE_QRCODE=1 FIRST_CLASS_MESSAGING=1 RELEASE=1 USE_UPNPC=1
make
The recommended way of installing the Homebrew OS X package manager is via Terminal command:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Homebrew is tractable. The standard script installs Homebrew to /usr/local
so that sudo is not required for brew install
. It is a careful script, it can be run even if other packages have already been installed to /usr/local
. It informs the user exactly what it will do before it does it, enabling the user to confirm the details before permitting brew to execute the action.
To uninstall Homebrew, paste the command below in a terminal prompt.
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
By default, this command will uninstall homebrew and remove its footprint, i.e. will remove brew and restore /usr/local
to its prior state.
brew install autoconf automake libtool miniupnpc openssl pkg-config
brew install boost protobuf libevent libqrencode
brew install berkeley-db4
brew install berkeley-db
brew install qt5 --with-dbus
brew link qt5 --force --overwrite
In a new Terminal window:
$ git clone https://github.com/skourdes/SproutsClassic.git
$ cd SproutsClassic
$ /usr/local/opt/qt/bin/qmake RELEASE=1 USE_UPNP=1 USE_QRCODE=1 sprouts.pro
$ make
$ export QTDIR=/usr/local/opt/qt5
$ T=$(contrib/qt_translations.py $QTDIR/translations src/qt/locale)
$ python2.7 contrib/macdeploy/macdeployqtplus -add-qt-tr $T -dmg -fancy contrib/macdeploy/fancy.plist SproutsClassic.app
Installing the MXE cross-compilation tool.
Make the distribution ppa known to the APT package system:
$ echo "deb http://pkg.mxe.cc/repos/apt/debian wheezy main" > \
/etc/apt/sources.list.d/mxeapt.list
Add the GPG key to the APT package system:
$ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D43A795B73B16ABE9643FE1AFD8FFF16DB45C6AB
Update the APT cache:
$ apt-get update
Install some MXE package:
$ apt-get install mxe-i686-w64-mingw32.static-qt
Names of packages are mxe-<target>-<package>
.
Possible targets:
- i686-w64-mingw32.static
- x86-64-w64-mingw32.static (note that
_
replaced with-
)- i686-w64-mingw32.shared
- x86-64-w64-mingw32.shared (note that
_
replaced with-
)
(A complete list of packages can be found on the MXE site and in the build matrix.)
Packages are installed to /usr/lib/mxe/<target>/
. The location acts as the root of the MXE source tree.
For example, cross-compile CMake project:
$ target=i686-w64-mingw32.static
$ mxedir=/usr/lib/mxe/
$ $mxedir/usr/bin/$target-cmake project-source
$ make
(Generally, Windows cross-compiled products are 32-bit and will run on both 32-bit and 64-bit Windows systems.)
#!/bin/bash
# Working setup to cross-compile Windows binaries for Sprouts hosted on a
# Vagrant Ubuntu 16.04 VM using non-Canonical ppas for MXE and Qt5.7:
# deb http://pkg.mxe.cc/repos/apt/debian wheezy main
# Doesn't seem to pass the QT directives through, though. Tough.
# Basic path bindings
PATH=/usr/lib/mxe/usr/bin:$PATH
MXE_PATH=/usr/lib/mxe
MXE_INCLUDE_PATH=/usr/lib/mxe/usr/i686-w64-mingw32.static/include
MXE_LIB_PATH=/usr/lib/mxe/usr/i686-w64-mingw32.static/lib
# Belt and braces
CXXFLAGS="-std=gnu++11 -march=i686"
LDFLAGS="-march=i686"
target="i686-w64-mingw32.static"
# Particularise for cross-compiling
export BOOST_LIB_SUFFIX=-mt
export BOOST_THREAD_LIB_SUFFIX=_win32-mt
export BOOST_INCLUDE_PATH=${MXE_INCLUDE_PATH}/boost
export BOOST_LIB_PATH=${MXE_LIB_PATH}
export OPENSSL_INCLUDE_PATH=${MXE_INCLUDE_PATH}/openssl
export OPENSSL_LIB_PATH=${MXE_LIB_PATH}
export BDB_INCLUDE_PATH=${MXE_INCLUDE_PATH}
export BDB_LIB_PATH=${MXE_LIB_PATH}
export MINIUPNPC_INCLUDE_PATH=${MXE_INCLUDE_PATH}
export MINIUPNPC_LIB_PATH=${MXE_LIB_PATH}
export QMAKE_LRELEASE=${MXE_PATH}/usr/${target}/qt5/bin/lrelease
# Call qmake to create Makefile.[Release|Debug]
${target}-qmake-qt5 \
MXE=1 \
USE_O3=1 \
USE_QRCODE=1 \
FIRST_CLASS_MESSAGING=1 \
RELEASE=1 \
USE_UPNPC=1 \
BOOST_LIB_SUFFIX=${BOOST_LIB_SUFFIX} \
BOOST_THREAD_LIB_SUFFIX=${BOOST_THREAD_LIB_SUFFIX} \
BOOST_INCLUDE_PATH=${BOOST_INCLUDE_PATH} \
BOOST_LIB_PATH=${BOOST_LIB_PATH} \
OPENSSL_INCLUDE_PATH=${OPENSSL_INCLUDE_PATH} \
OPENSSL_LIB_PATH=${OPENSSL_LIB_PATH} \
BDB_INCLUDE_PATH=${BDB_INCLUDE_PATH} \
BDB_LIB_PATH=${BDB_LIB_PATH} \
MINIUPNPC_INCLUDE_PATH=${MINIUPNPC_INCLUDE_PATH} \
MINIUPNPC_LIB_PATH=${MINIUPNPC_LIB_PATH} \
QMAKE_LRELEASE=${QMAKE_LRELEASE} sprouts.pro
# Go for it. If successful, Windows binary will be written out to ./release/SproutsClassic.exe
make -f Makefile.Release CXXFLAGS="-DQT_GUI -DQT_NO_PRINTER -std=gnu++11 -march=i686" LDFLAGS="-march=i686"
The cross-compilation product is saved in the release
directory under the name SproutsClassic.exe
and can be tested on Ubuntu with:
$ wine release/SproutsClassic.exe
(be prepared for a long wait during the loading of the index, e.g. 15-20 mins on a low-end machine)