spartan-farmer
Notes: The code is un-audited and not production ready, use it at your own risk.
Subspace is a proof-of-storage blockchain that resolves the farmer's dilemma, to learn more read our whitepaper.
This a bare-bones farmer for the simplified Spartan proof-of-space variant of Subspace. A farmer is similar to a miner in a proof-of-work blockchain, but instead of wasting CPU cycles, it wastes disk space. Much of this code has been based on subspace-core-rust.
The farmer basically has two modes: plotting and farming.
encode(genesis_piece, farmer_id, plot_index)
hmac(encoding, salt)
and stored within a binary search tree (BST).This process currently takes ~ 36 hours per TB on a quad-core machine.
Once plotting is complete the farmer may join the network and participate in consensus.
slot_notifications
via JSON-RPC.hash(epoch_randomness||slot_index) and
SOLUTION_RANGE`.SOLUTION_RANGE
return a SOLUTION
else return None
The simplest way to use spartan-farmer is to use container image:
bash
docker volume create spartan-farmer
docker run --rm -it --mount source=spartan-farmer,target=/tmp/spartan subspacelabs/spartan-farmer --help
spartan-farmer
is the volume where plot and identity will be stored, it only needs to be created once.
Instead of Docker you can also install spartan-farmer natively by compiling it using cargo.
Notes: This will currently only work on Mac and Linux, not Windows.
If you have not previously installed the gmp_mpfr_sys
crate, follow these instructions.
RocksDB on Linux needs LLVM/Clang:
bash
sudo apt-get install llvm clang
Then install the framer using Cargo:
cargo +nightly install spartan-farmer
NOTE: Above command requires nightly compiler for now, make sure to install it if ou don't have one yet:
rustup toolchain install nightly
Commands here assume you installed native binary, but you can also easily adapt them to using with Docker.
Use --help
to find out all available commands and their options:
spartan-farmer --help
spartan-farmer plot <optional parameters> <piece-count> <seed>
This will create a 1 GB plot:
spartan-farmer plot 256000 test
For all supported options check help:
spartan-farmer plot --help
By default, plots are written to the OS-specific users local data directory.
``` Linux $XDGDATAHOME or /home/alice/.local/share $HOME/.local/share
macOS $HOME/Library/Application Support /Users/Alice/Library/Application Support
Windows {FOLDERID_LocalAppData} C:\Users\Alice\AppData\Local ```
RUST_LOG=debug spartan-farmer farm
This will connect to local node and will try to solve on every slot notification.