Chia blockchain python implementation (full node, farmer, harvester, timelord, and wallet)
Go to file
Mariano Sorgente a479a506f9 Scripts (#14)
* Start block UI stuff

* Start with block search

* Create connections from the UI

* Add plot directory

* Add scripts for key generation, and plotting

* Remove keys and plot config

* Add scripts for key generation, and plotting

* Readme, comments
2019-11-08 16:51:01 -05:00
lib Clean up scripts for linux 2019-11-03 08:24:49 -08:00
plots Scripts (#14) 2019-11-08 16:51:01 -05:00
src Scripts (#14) 2019-11-08 16:51:01 -05:00
tests Scripts (#14) 2019-11-08 16:51:01 -05:00
.flake8 New blockchain class implementation 2019-09-24 15:01:32 +09:00
.gitignore Scripts (#14) 2019-11-08 16:51:01 -05:00
.gitmodules Start on prompt 2019-10-29 09:39:02 +09:00
definitions.py Scripts (#14) 2019-11-08 16:51:01 -05:00
LICENSE Initial commit 2019-07-16 17:32:40 +09:00
mypy.ini Changed to mypy from pyright, fix tests (full node still broken) 2019-10-22 16:44:01 +09:00
README.md Scripts (#14) 2019-11-08 16:51:01 -05:00
requirements.txt Scripts (#14) 2019-11-08 16:51:01 -05:00
setup.py Merge branch 'challenge_hash' into networking 2019-11-03 16:42:05 -08:00

chia-blockchain

Python 3.7 is used for this project. Make sure your python version is >=3.7 by typing python3.

Install

# for Debian-based distros
sudo apt-get install build-essential cmake python3-dev python3-venv --no-install-recommends

git submodule update --init --recursive
python3 -m venv .venv
. .venv/bin/activate
pip install wheel # For building blspy
pip install -e .
pip install -r requirements.txt

cd lib/chiavdf/fast_vdf
# Install libgmp, libboost, and libflint, and then run the following
sh install.sh

Generate keys

First, create some keys by running the following script:

python -m src.scrips.regenerate_keys

Run a full node

To run a full node on port 8002, and connect to the testnet, run the following command. This wil also start an ssh server in port 8222 for the UI, which you can connect to to see the state of the node.

python -m src.server.start_full_node "127.0.0.1" 8002 -u 8222
ssh -p 8222 localhost

Run a farmer + full node

Farmers are entities in the network who use their hard drive space to try to create blocks (like Bitcoin's miners), and earn block rewards. First, you must generate some hard drive plots, which can take a long time depending on the size of the plots. Then, run the farmer + full node with the following script. A full node is also started on port 8002, which you can ssh into to view the node UI.

python -m src.scrips.create_plots -k 20 -n 10
sh ./src/scripts/simulate_farming.sh

Run a timelord + full node

Timelords execute sequential verifiable delay functions (proofs of time), that get added to blocks to make them valid. This requires fast CPUs and a lot of memory.

sh ./src/scripts/simulate_farming.sh

Tips

When running the servers on Mac OS, allow the application to accept incoming connections. Try running one of the full nodes a few minutes after the other ones, to test initial sync. Configuration of peers can be changed in src/config/config.yaml. You can also run the simulation, which runs all servers and multiple full nodes, at once.

./src/scripts/simulate_network.sh

Run tests

The first time the tests are run, BlockTools will create and persist many plots. These are used for creating proofs of space during testing. The next time tests are run, this won't be necessary.

py.test tests -s -v

Run linting

flake8 src
mypy src tests

Configure VS code

  1. Install Python extension
  2. Set the environment to ./.venv/bin/python
  3. Install mypy plugin
  4. Preferences > Settings > Python > Linting > flake8 enabled
  5. Preferences > Settings > Python > Linting > mypy enabled
  6. Preferences > Settings > mypy > Targets: set to ./src and ./tests