A Programmable Cryptocurrency
💾⏰💪 Thanks for your interest in this open source project. This repo is the go implementation of the Spacemesh p2p full node software.
Spacemesh is a decentralized blockchain computer using a new race-free consensus protocol that doesn't involve energy-wasteful
proof of work.
We aim to create a secure and scalable decentralized computer formed by a large number of desktop PCs at home.
We are designing and coding a modern blockchain platform from the ground up for scale, security and speed based on the learnings of the achievements and mistakes of previous projects in this space.
To learn more about Spacemesh head over to https://spacemesh.io.
To learn more about the Spacemesh protocol watch this video.
Spacemesh is designed to create a decentralized blockchain smart contracts computer and a cryptocurrency that is formed by connecting the home PCs of people from around the world into one virtual computer without incurring massive energy waste and mining pools issues that are inherent in other blockchain computers, and provide a provably-secure and incentive-compatible smart contracts execution environment.
Spacemesh is designed to be ASIC-resistant and in a way that doesn’t give an unfair advantage to rich parties who can afford setting up dedicated computers on the network. We achieve this by using a novel consensus protocol and optimize the software to be most effectively be used on home PCs that are also used for interactive apps.
Provide dapp and app developers with a robust way to add value exchange and other value related features to their apps at scale. Our goal is to create a truly decentralized cryptocurrency that fulfills the original vision behind bitcoin to become a secure trustless store of value as well as a transactional currency with extremely low transaction fees.
go-spacemesh is designed to be installed and operated on users' home PCs to form one decentralized computer. It is going to be distributed in the Spacemesh App but people can also build and run it from source code.
We are working hard towards our first major milestone - a public permissionless testnet running the Spacemesh consensus protocol.
Thank you for considering to contribute to the go-spacemesh open source project!
We welcome contributions large and small and we actively accept contributions.
go-spacemesh is part of The Spacemesh open source project, and is MIT licensed open source software.
We welcome collaborators to the Spacemesh core dev team.
You don’t have to contribute code! Many important types of contributions are important for our project. See: How to Contribute to Open Source?
To get started, please read our contributions guidelines.
Browse Good First Issues.
Get ethereum awards for your contribution by working on one of our gitcoin funded issues.
Please read the Spacemesh full FAQ.
git clone [email protected]:spacemeshos/go-spacemesh.git
-- or --
Fork the project from https://github.com/spacemeshos/go-spacemesh
Since the project uses Go Modules it is best to place the code outside your
$GOPATH. Read this for alternatives.
Building is supported on OS X, Linux, FreeBSD, and Windows.
Install Go 1.14 or later for your platform, if you haven't already.
$GOPATH is set correctly and that the
$GOPATH/bin directory appears in
Before building we need to set up the golang environment. Do this by running:
This will invoke
setup_env.sh which supports Linux and MacOS. On other platforms it should be straightforward to follow the steps in this script manually.
go-spacemesh for your current system architecture, from the project root directory, use:
(On FreeBSD, you should instead use
gmake build. You can install
pkg install gmake if it isn't already installed.)
This will build the
go-spacemesh binary, saving it in the
To build a binary for a specific architecture directory use:
make darwin | linux | freebsd | windows
Platform-specific binaries are saved to the
go-spacemesh is p2p software which is designed to form a decentralized network by connecting to other instances of go-spacemesh running on remote computers.
To run go-spacemesh you need to specify the parameters shared between all instances on a specific network.
You specify these parameters by providing go-spacemesh with a json config file. Other CLI flags control local node behavior and override default values.
./go-spacemesh --tcp-port [a_port] --config [configFileLocation] -d [nodeDataFilesPath]
Assuming tn1.json is a testnet config file saved in the same directory as go-spacemesh, use the following command to join the testnet. The data folder will be created in the same directory as go-spacemesh. The node will use TCP port 7513 and UDP port 7513 for p2p connections:
./go-spacemesh --tcp-port 7513 --config ./tn1.json -d ./sm_data
Build the CLI Wallet from source code and run it:
Use the CLI Wallet commands to setup accounts, start smeshing and execute transactions.
./go-spacemesh --tcp-port [a_port] --config [configFileLocation] -d [nodeDataFilesPath] --coinbase [coinbase_account] --start-mining --post-datadir [dir_for_post_data]
./go-spacemesh --tcp-port 7513 --config ./tn1.json -d ./sm_data --coinbase 0x36168c60e06abbb4f5df6d1dd6a1b15655d71e75 --start-mining --post-datadir ./post_data
Find the latest Testnet release in the releases and download the precompiled binary for your platform of choice (or you can compile
go-spacemesh yourself, from source, using the release tag). The release notes contain a link to a
config.json file that you'll need to join the testnet.
Note that you must download (or build) precisely this version (latest Testnet release) of
go-spacemesh, and the compatible config file, in order to join the current testnet. Older versions of the code may be incompatible with this testnet, and a different config file will not work.
NOTE: if tests are hanging try running
ulimit -n 400. some tests require that to work.
We've enabled continuous integration on this repository in GitHub. You can read more about our CI workflows.
Dockerfile is included in the project allowing anyone to build and run a docker image:
docker build -t spacemesh . docker run -d --name=spacemesh spacemesh
On Windows you will need the following prerequisites:
C:\Program Files\Git\binfrom System PATH (if present) and add
C:\Program Files\Git\cmdto System PATH (if not already present)
C:\Program Files (x86)\GnuWin32\binto System PATH
Close and reopen powershell to load the new PATH. You can then run the command
make install followed by
make build as on UNIX-based systems.