Metadata-Version: 2.1
Name: py-helios-node
Version: 0.3.0
Summary: Python implementation of the Helios Protocol Node
Home-page: https://github.com/Helios-Protocol/py-helios-node
Author: Tommy Mckinnon
Author-email: tommy@heliosprotocol.io
License: MIT
Keywords: helios protocol blockchain node vm
Platform: UNKNOWN
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3.6
Requires-Dist: asyncio-cancel-token (==0.1.0a2)
Requires-Dist: aiohttp (<4.0.0,>=2.3.1)
Requires-Dist: async-lru (<1.0.0,>=0.1.0)
Requires-Dist: eth-hash (<1,>=0.2.0)
Requires-Dist: netifaces (>=0.10.7<1)
Requires-Dist: pysha3 (<2.0.0,>=1.0.0)
Requires-Dist: upnpclient (<1,>=0.0.8)
Requires-Dist: async-generator (==1.10)
Requires-Dist: bloom-filter (==1.3)
Requires-Dist: cachetools (<3.0.0,>=2.1.0)
Requires-Dist: coincurve (<9.0.0,>=8.0.0)
Requires-Dist: ipython (<7.0.0,>=6.2.1)
Requires-Dist: plyvel (==1.0.5)
Requires-Dist: helios-web3 (>=5.0.2)
Requires-Dist: lahja (==0.8.0)
Requires-Dist: websockets (>=3.0.0)
Requires-Dist: cryptography (<3.0.0,>=2.0.3)
Requires-Dist: cytoolz (<1.0.0,>=0.9.0)
Requires-Dist: eth-bloom (<2.0.0,>=1.0.3)
Requires-Dist: eth-keys (<1.0.0,>=0.2.0b3)
Requires-Dist: eth-typing (<3.0.0,>=2.0.0)
Requires-Dist: eth-utils (<2.0.0,>=1.2.0)
Requires-Dist: lru-dict (>=1.1.6)
Requires-Dist: py-ecc (<2.0.0,>=1.4.2)
Requires-Dist: pyethash (<1.0.0,>=0.1.27)
Requires-Dist: trie (<2.0.0,>=1.3.5)
Requires-Dist: sortedcontainers (>=2.0.4)
Requires-Dist: pbkdf2 (>=1.3)
Requires-Dist: rlp-cython (>=2.1.5)
Requires-Dist: uvloop (==0.11.2) ; platform_system == "Linux" or platform_system == "Darwin"
Provides-Extra: benchmark
Requires-Dist: termcolor (<2.0.0,>=1.1.0) ; extra == 'benchmark'
Requires-Dist: helios-web3 (>=5.0.2) ; extra == 'benchmark'
Provides-Extra: dev
Requires-Dist: bumpversion (<1,>=0.5.3) ; extra == 'dev'
Requires-Dist: wheel ; extra == 'dev'
Requires-Dist: setuptools (>=36.2.0) ; extra == 'dev'
Requires-Dist: tox (==2.7.0) ; extra == 'dev'
Requires-Dist: twine ; extra == 'dev'
Requires-Dist: coincurve (<9.0.0,>=8.0.0) ; extra == 'dev'
Requires-Dist: plyvel (==1.0.5) ; extra == 'dev'
Requires-Dist: asyncio-cancel-token (==0.1.0a2) ; extra == 'dev'
Requires-Dist: aiohttp (<4.0.0,>=2.3.1) ; extra == 'dev'
Requires-Dist: async-lru (<1.0.0,>=0.1.0) ; extra == 'dev'
Requires-Dist: eth-hash (<1,>=0.2.0) ; extra == 'dev'
Requires-Dist: netifaces (>=0.10.7<1) ; extra == 'dev'
Requires-Dist: pysha3 (<2.0.0,>=1.0.0) ; extra == 'dev'
Requires-Dist: upnpclient (<1,>=0.0.8) ; extra == 'dev'
Requires-Dist: async-generator (==1.10) ; extra == 'dev'
Requires-Dist: bloom-filter (==1.3) ; extra == 'dev'
Requires-Dist: cachetools (<3.0.0,>=2.1.0) ; extra == 'dev'
Requires-Dist: ipython (<7.0.0,>=6.2.1) ; extra == 'dev'
Requires-Dist: helios-web3 (>=5.0.2) ; extra == 'dev'
Requires-Dist: lahja (==0.8.0) ; extra == 'dev'
Requires-Dist: websockets (>=3.0.0) ; extra == 'dev'
Requires-Dist: hypothesis (==3.69.5) ; extra == 'dev'
Requires-Dist: pytest (<3.7,>=3.6) ; extra == 'dev'
Requires-Dist: pytest-asyncio (==0.9.0) ; extra == 'dev'
Requires-Dist: pytest-cov (==2.5.1) ; extra == 'dev'
Requires-Dist: pytest-watch (<5,>=4.1.0) ; extra == 'dev'
Requires-Dist: pytest-xdist (==1.18.1) ; extra == 'dev'
Requires-Dist: py-solc (==3.2.0) ; extra == 'dev'
Requires-Dist: matplotlib ; extra == 'dev'
Requires-Dist: py-evm (>=0.2.0-alpha.14) ; extra == 'dev'
Requires-Dist: pytest (~=3.2) ; extra == 'dev'
Requires-Dist: Sphinx (<1.8.0,>=1.5.5) ; extra == 'dev'
Requires-Dist: sphinx-rtd-theme (>=0.1.9) ; extra == 'dev'
Requires-Dist: sphinxcontrib-asyncio (>=0.2.0) ; extra == 'dev'
Requires-Dist: flake8 (==3.5.0) ; extra == 'dev'
Requires-Dist: mypy (==0.620) ; extra == 'dev'
Requires-Dist: cryptography (<3.0.0,>=2.0.3) ; extra == 'dev'
Requires-Dist: cytoolz (<1.0.0,>=0.9.0) ; extra == 'dev'
Requires-Dist: eth-bloom (<2.0.0,>=1.0.3) ; extra == 'dev'
Requires-Dist: eth-keys (<1.0.0,>=0.2.0b3) ; extra == 'dev'
Requires-Dist: eth-typing (<3.0.0,>=2.0.0) ; extra == 'dev'
Requires-Dist: eth-utils (<2.0.0,>=1.2.0) ; extra == 'dev'
Requires-Dist: lru-dict (>=1.1.6) ; extra == 'dev'
Requires-Dist: py-ecc (<2.0.0,>=1.4.2) ; extra == 'dev'
Requires-Dist: pyethash (<1.0.0,>=0.1.27) ; extra == 'dev'
Requires-Dist: trie (<2.0.0,>=1.3.5) ; extra == 'dev'
Requires-Dist: sortedcontainers (>=2.0.4) ; extra == 'dev'
Requires-Dist: pbkdf2 (>=1.3) ; extra == 'dev'
Requires-Dist: rlp-cython (>=2.1.5) ; extra == 'dev'
Requires-Dist: eth-hash[pysha3] ; (implementation_name == "cpython") and extra == 'dev'
Requires-Dist: eth-hash[pycryptodome] ; (implementation_name == "pypy") and extra == 'dev'
Requires-Dist: uvloop (==0.11.2) ; (platform_system == "Linux" or platform_system == "Darwin") and extra == 'dev'
Requires-Dist: pytest-asyncio-network-simulator (==0.1.0a2) ; (python_version >= "3.6") and extra == 'dev'
Provides-Extra: doc
Requires-Dist: py-evm (>=0.2.0-alpha.14) ; extra == 'doc'
Requires-Dist: pytest (~=3.2) ; extra == 'doc'
Requires-Dist: Sphinx (<1.8.0,>=1.5.5) ; extra == 'doc'
Requires-Dist: sphinx-rtd-theme (>=0.1.9) ; extra == 'doc'
Requires-Dist: sphinxcontrib-asyncio (>=0.2.0) ; extra == 'doc'
Provides-Extra: helios
Requires-Dist: async-generator (==1.10) ; extra == 'helios'
Requires-Dist: bloom-filter (==1.3) ; extra == 'helios'
Requires-Dist: cachetools (<3.0.0,>=2.1.0) ; extra == 'helios'
Requires-Dist: coincurve (<9.0.0,>=8.0.0) ; extra == 'helios'
Requires-Dist: ipython (<7.0.0,>=6.2.1) ; extra == 'helios'
Requires-Dist: plyvel (==1.0.5) ; extra == 'helios'
Requires-Dist: helios-web3 (>=5.0.2) ; extra == 'helios'
Requires-Dist: lahja (==0.8.0) ; extra == 'helios'
Requires-Dist: websockets (>=3.0.0) ; extra == 'helios'
Requires-Dist: uvloop (==0.11.2) ; (platform_system == "Linux" or platform_system == "Darwin") and extra == 'helios'
Provides-Extra: hp2p
Requires-Dist: asyncio-cancel-token (==0.1.0a2) ; extra == 'hp2p'
Requires-Dist: aiohttp (<4.0.0,>=2.3.1) ; extra == 'hp2p'
Requires-Dist: async-lru (<1.0.0,>=0.1.0) ; extra == 'hp2p'
Requires-Dist: eth-hash (<1,>=0.2.0) ; extra == 'hp2p'
Requires-Dist: netifaces (>=0.10.7<1) ; extra == 'hp2p'
Requires-Dist: pysha3 (<2.0.0,>=1.0.0) ; extra == 'hp2p'
Requires-Dist: upnpclient (<1,>=0.0.8) ; extra == 'hp2p'
Provides-Extra: hvm
Requires-Dist: aiohttp (<4.0.0,>=2.3.1) ; extra == 'hvm'
Requires-Dist: async-lru (<1.0.0,>=0.1.0) ; extra == 'hvm'
Requires-Dist: cryptography (<3.0.0,>=2.0.3) ; extra == 'hvm'
Requires-Dist: cytoolz (<1.0.0,>=0.9.0) ; extra == 'hvm'
Requires-Dist: eth-bloom (<2.0.0,>=1.0.3) ; extra == 'hvm'
Requires-Dist: eth-keys (<1.0.0,>=0.2.0b3) ; extra == 'hvm'
Requires-Dist: eth-typing (<3.0.0,>=2.0.0) ; extra == 'hvm'
Requires-Dist: eth-utils (<2.0.0,>=1.2.0) ; extra == 'hvm'
Requires-Dist: lru-dict (>=1.1.6) ; extra == 'hvm'
Requires-Dist: py-ecc (<2.0.0,>=1.4.2) ; extra == 'hvm'
Requires-Dist: pyethash (<1.0.0,>=0.1.27) ; extra == 'hvm'
Requires-Dist: trie (<2.0.0,>=1.3.5) ; extra == 'hvm'
Requires-Dist: sortedcontainers (>=2.0.4) ; extra == 'hvm'
Requires-Dist: pbkdf2 (>=1.3) ; extra == 'hvm'
Requires-Dist: rlp-cython (>=2.1.5) ; extra == 'hvm'
Provides-Extra: hvm-extra
Requires-Dist: coincurve (<9.0.0,>=8.0.0) ; extra == 'hvm-extra'
Requires-Dist: plyvel (==1.0.5) ; extra == 'hvm-extra'
Requires-Dist: eth-hash[pysha3] ; (implementation_name == "cpython") and extra == 'hvm-extra'
Requires-Dist: eth-hash[pycryptodome] ; (implementation_name == "pypy") and extra == 'hvm-extra'
Provides-Extra: lint
Requires-Dist: flake8 (==3.5.0) ; extra == 'lint'
Requires-Dist: mypy (==0.620) ; extra == 'lint'
Provides-Extra: test
Requires-Dist: hypothesis (==3.69.5) ; extra == 'test'
Requires-Dist: pytest (<3.7,>=3.6) ; extra == 'test'
Requires-Dist: pytest-asyncio (==0.9.0) ; extra == 'test'
Requires-Dist: pytest-cov (==2.5.1) ; extra == 'test'
Requires-Dist: pytest-watch (<5,>=4.1.0) ; extra == 'test'
Requires-Dist: pytest-xdist (==1.18.1) ; extra == 'test'
Requires-Dist: py-solc (==3.2.0) ; extra == 'test'
Requires-Dist: matplotlib ; extra == 'test'
Requires-Dist: pytest-asyncio-network-simulator (==0.1.0a2) ; (python_version >= "3.6") and extra == 'test'

Helios Protocol Node
====================

|Python3.6|

This is the beta stage of the HeliosProtocol node. It is currently under
active development and is not yet complete.

Install
-------

Py-helios-node install instructions:

1) Make sure you have the correct version of python installed. The
   version is listed at the top of this document. Caution: do not
   upgrade your system python from 2 to 3 as this can cause massive
   problems. Instead, we recommend installing a new version of python
   using `pyenv <https://github.com/pyenv/pyenv>`__. To install pyenv,
   use the setup script found
   `here <https://github.com/pyenv/pyenv-installer>`__. For
   completeness, we will summarize the current setup steps here:

   1) Install

      .. code:: bash

          $ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

   2) Edit .bashrc

      .. code:: bash

          $ vi ~/.bashrc

      add the lines

      .. code:: bash

          export PATH="~/.pyenv/bin:$PATH"
          eval "$(pyenv init -)"
          eval "$(pyenv virtualenv-init -)"

   3) Reload .bashrc

      .. code:: bash

          $ source ~/.bashrc

   4) Install python 3.6

      .. code:: bash

          $ pyenv install 3.6.5

2) Install git

   .. code:: bash

       $ sudo apt install git

   or

   .. code:: bash

       $ sudo yum install git

3) Clone this repo

   .. code:: bash

       $ git clone https://github.com/Helios-Protocol/py-helios-node

4) Set python environment

   .. code:: bash

       $ cd py-helios-node
       $ pyenv local 3.6.5

5) Install the Helios Node

   .. code:: bash

       $ pip3 install -e .

6) Ensure that the slow version of RLP is uninstalled, and install a
   fresh copy of the fast one. This will force all external libraries
   that use RLP to switch to the fast one.

   .. code:: bash

       $ pip3 uninstall rlp
       $ pip3 uninstall rlp-cython
       $ pip3 install rlp-cython

Configure
---------

The Helios Protocol consensus mechanism is partially based on PoS. This
requires that all nodes are associated with a wallet address that has a
non-zero stake in order to run. So at this point, you have to configure
the node software to use your wallet as a source of coins to stake.

1) Create keystore file. This is an encrypted file that stores your
   private key. You will be able to create this with our wallet when it
   is released. But for now, you can just create a new wallet using
   `MyEtherWallet <http://myetherwallet.com>`__, then save the wallet
   file. This file will work with Helios Protocol.
2) Place keystore file within the directory helios/keystore
3) Configure node to use your keystore file. Copy
   helios/helios\_config.template.py to helios/helios\_config.py. Then
   edit the new file and tell it the filename of your keystore file to
   use.

Open Ports in Firewall
----------------------

The node software needs to have an open path for communication with
other nodes on the network. If you have firewall software enabled, such
as iptables, then you might have to open some ports to ensure this. The
default installation of Ubuntu and Debian probably already have the
ports open. Other distros such as Centos likely have most ports closed
by default.

Debian and Ubuntu

.. code:: bash

    $ sudo iptables -I INPUT -p tcp -m tcp --dport 30303 -j ACCEPT
    $ sudo iptables -I INPUT -p tcp -m tcp --dport 30304 -j ACCEPT
    $ sudo iptables-save

Centos 7

.. code:: bash

    $ sudo firewall-cmd --permanent –zone=public --add-port=30303/tcp
    $ sudo firewall-cmd --permanent –zone=public --add-port=30304/tcp
    $ sudo firewall-cmd --reload

Start the node
--------------

.. code:: bash

    $ helios

Then enter your keystore password when prompted. This password is never
saved, it is only used to initially decrypt your keystore file.

This document is still a work in progress. More details will come soon.

.. |Python3.6| image:: https://img.shields.io/badge/python-3.6-blue.svg
   :target: https://www.python.org/downloads/release/python-360/


