Skip to main content

Python Node and SDK for the kaze blockchain

Project description

.. image:: https://kaze.solutions/content/static/img/general/logo.svg
:alt: kaze logo

kaze-python
----------

Python Node and SDK for the kaze blockchain.

.. image:: https://img.shields.io/pypi/v/kaze-python.svg
:target: https://pypi.python.org/pypi/kaze-python
:alt: Pypi
.. image:: https://travis-ci.org/KAZEBLOCKCHAIN/kaze-python.svg?branch=master
:target: https://travis-ci.org/KAZEBLOCKCHAIN/kaze-python
:alt: Travis CI
.. image:: https://readthedocs.org/projects/kaze-python/badge/?version=latest
:target: https://kaze-python.readthedocs.io/en/latest/?badge=latest
:alt: ReadTheDocs
.. image:: https://img.shields.io/badge/license-MIT-blue.svg
:target: https://github.com/KAZEBLOCKCHAIN/kaze-python/blob/master/LICENSE.md
:alt: MIT


Overview
--------

What does it currently do
~~~~~~~~~~~~~~~~~~~~~~~~~

- This project aims to be a full port of the original C# `kaze
project <https://github.com/kaze-project>`__
- Run a Python based P2P node
- Interactive CLI for configuring node and inspecting blockchain
- Build, deploy, and run smart contracts
- Runs smart contracts on the blockchain in a Python virtual machine
- Very basic Wallet functionality (not fully tested, please do not use
on mainnet)
- `NEP2 <https://github.com/kaze-project/proposals/blob/master/nep-2.mediawiki%3E>`__
and
`NEP5 <https://github.com/kaze-project/proposals/blob/master/nep-5.mediawiki>`__
compliant wallet functionality
- RPC Client
- RPC server
- Notification Server ( for viewing transfers of NEP5 tokens )
- ``Runtime.Log`` and ``Runtime.Notify`` event monitoring

What will it do
~~~~~~~~~~~~~~~

- Consensus nodes
- More robust smart contract debugging and inspection

Documentation
~~~~~~~~~~~~~

The full documentation on how to install, configure and use kaze-python
can be found at `Read The
Docs <https://kaze-python.readthedocs.io/en/latest/>`__.

Get help or give help
~~~~~~~~~~~~~~~~~~~~~

- Open a new
`issue <https://github.com/KAZEBLOCKCHAIN/kaze-python/issues/new>`__ if
you encounter a problem.
- Or ping **@localhuman** or **@metachris** on the `kaze
Discord <https://discord.gg/R8v48YA>`__.
- Pull requests welcome. You can help with wallet functionality,
writing tests or documentation, or on any other feature you deem
awesome.

Getting started
---------------

kaze-python has two System dependencies (everything else is covered with
``pip``):

- `LevelDB <https://github.com/google/leveldb>`__
- `Python
3.6+ <https://www.python.org/downloads/release/python-364/>`__ (3.5
and below is not supported)

We have published a Youtube
`video <https://www.youtube.com/watch?v=ZZXz261AXrM>`__ to help get you
started. There are many more videos under the
`KAZEBLOCKCHAIN <https://www.youtube.com/channel/UCzlQUNLrRa8qJkz40G91iJg>`__
Youtube channel, check them out.

Docker
------

Using Docker is another option to run kaze-python. There are example
Dockerfiles provided in the
`/docker folder <https://github.com/KAZEBLOCKCHAIN/kaze-python/tree/development/docker>`__,
and we have an image on Docker hub, tagged after the kaze-python
releases: https://hub.docker.com/r/KAZEBLOCKCHAIN/kaze-python/

Native installation
-------------------

Instructions on the system setup for kaze-python:

LevelDB
~~~~~~~

OSX
^^^

::

brew install leveldb

Ubuntu/Debian 16.10+
^^^^^^^^^^^^^^^^^^^^

Ubuntu starting at 16.10 supports Python 3.6 in the official
repositories, and you can just install Python 3.6 and all the system
dependencies like this:

::

apt-get install python3.6 python3.6-dev python3.6-venv python3-pip libleveldb-dev libssl-dev g++

Older Ubuntu versions (eg. 16.04)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

For older Ubuntu versions you'll need to use an external repository like
Felix Krull's deadsnakes PPA at
https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa (read more
`here <https://askubuntu.com/questions/865554/how-do-i-install-python-3-6-using-apt-get>`__).

(The use of the third-party software links in this documentation is done
at your own discretion and risk and with agreement that you will be
solely responsible for any damage to your computer system or loss of
data that results from such activities.)

::

apt-get install software-properties-common python-software-properties
add-apt-repository ppa:deadsnakes/ppa
apt-get update
apt-get install python3.6 python3.6-dev python3.6-venv python3-pip libleveldb-dev libssl-dev g++

Centos/Redhat/Fedora
^^^^^^^^^^^^^^^^^^^^

::

# Install Python 3.6:
yum install -y centos-release-scl
yum install -y rh-python36
scl enable rh-python36 bash

# Install dependencies:
yum install -y epel-release
yum install -y readline-devel leveldb-devel libffi-devel gcc-c++ redhat-rpm-config gcc python-devel openssl-devel

Windows
^^^^^^^

Help needed. Installing the Python package plyvel seems to require C++
compiler support tied to Visual Studio and libraries. Refer to
`documentation <https://kaze-python.readthedocs.io/en/latest/installwindows.html>`__.

Currently you probably should use the Linux subsystem with Ubuntu, or a
Virtual Machine with Linux. You can find more information and a guide
for setting up the Linux subsystem
`here <https://medium.com/@gubanotorious/installing-and-running-kaze-python-on-windows-10-284fb518b213>`__.

Installing "Ubuntu" from Microsoft Store installs Ubuntu 16.04. You should install Ubuntu 18.04 from Microsoft Store found here: https://www.microsoft.com/en-us/p/ubuntu-1804/9n9tngvndl3q?activetab=pivot%3aoverviewtab

Python 3.6
~~~~~~~~~~

kaze-python is compatible with **Python 3.6 and later**.

On \*nix systems, install Python 3.6 via your package manager, or
download an installation package from the `official
homepage <https://www.python.org/downloads/release/python-364/>`__.


Install
~~~~~~~

It is recommended to put all project dependencies into its own virtual
environment, this way we don't pollute the global installation which
could lead to version conflicts.


1. Install from Github:

::

git clone https://github.com/KAZEBLOCKCHAIN/kaze-python.git
cd kaze-python

# if you want to use the development branch, switch now
git checkout development

# create virtual environment and activate
python3 -m venv venv
source venv/bin/activate

# install the package in an editable form
(venv) pip install -e .

2. Install from PyPi

::

# create project dir
mkdir myproject
cd myproject

# create virtual environment and activate
python3 -m venv venv
source venv/bin/activate

(venv) pip install kaze-python


Running
-------

After installing requirements and activating the environment, there is
an easy to use CLI (``np-prompt``) that starts the node and allows some
basic interactivity.

::

np-prompt
kaze cli. Type 'help' to get started

kaze> state
Progress: 1054913 / 1237188

kaze>

By default, the CLI connects to the **TestNet** (see below how to switch
to MainNet or PrivNet).

Let's query for a block in the current server by hash or by block index:

::

np-prompt
kaze cli. Type 'help' to get started

kaze> block 122235
{
"index": 122235,
"script": "",
"merkleroot": "1d5a895ea34509a83becb5d2f9391018a3f59d670d94a2c3f8deb509a07464bd",
"previousblockhash": "98ae05cb68ab857659cc6c8379eb7ba68b57ef1f5317904c295341d82d0a1713",
"tx": [
"1d5a895ea34509a83becb5d2f9391018a3f59d670d94a2c3f8deb509a07464bd"
],
"version": 0,
"time": 1479110368,
"hash": "74671375033f506325ef08d35632f74083cca564dc7ea6444c94d3b9dec3f61b",
"consensus data": 16070047272025254767,
"next_consensus": "59e75d652b5d3827bf04c165bbe9ef95cca4bf55"
}
kaze>

Bootstrapping the Blockchain
----------------------------

If you use kaze-python for the first time, you need to synchronize the
blockchain, which may take a long time. Included in this project is the script
``np-bootstrap`` to automatically download a chain directory for you. To
bootstrap for testnet, run ``np-bootstrap``, get a cup of coffee
and wait. To bootstrap for mainnet, use ``np-bootstrap -m`` and
get 8 cups of coffee (3.3 GB file).

Important: do not use the chain files from
https://github.com/KAZEBLOCKCHAIN/awesome-kaze.git, they will not work with
kaze-python.

Available Wallet commands
~~~~~~~~~~~~~~~~~~~~~~~~~

::

np-prompt
kaze cli. Type 'help' to get started

kaze> help

create wallet {wallet_path}
open wallet {wallet_path}

wallet { verbose } { rebuild } {rebuild BLOCK_HEIGHT}
export wif { ADDRESS }
import wif { WIF }

send { ASSET_ID } { ADDRESS } { AMOUNT }

Running on MainNet
~~~~~~~~~~~~~~~~~~

To run the prompt on MainNet, you can use the CLI argument ``-m`` (eg.
``np-prompt -m``), for running on PrivNet you can use ``-p``. Be
sure to check out the details of the parameters:

::

$ np-prompt -h
usage: np-prompt [-h] [-m | -p [host] | --coznet | -c CONFIG]
[-t {dark,light}] [-v] [--datadir DATADIR] [--version]

optional arguments:
-h, --help show this help message and exit
-m, --mainnet Use MainNet instead of the default TestNet
-p [host], --privnet [host]
Use a private net instead of the default TestNet,
optionally using a custom host (default: 127.0.0.1)
--coznet Use the CoZ network instead of the default TestNet
-c CONFIG, --config CONFIG
Use a specific config file
-t {dark,light}, --set-default-theme {dark,light}
Set the default theme to be loaded from the config
file. Default: 'dark'
-v, --verbose Show smart-contract events by default
--datadir DATADIR Absolute path to use for database directories
--version show program's version number and exit

Logging
~~~~~~~

Currently, ``np-prompt`` logs to ``prompt.log``

--------------

Tests
-----

Note that some of the unit tests use a giant blockchain fixture database
(~800MB). This file is not kept in the repo, but are downloaded the
first time the tests are run, this can take some time (depending on the
internet connection), but happens only once.

Useful commands
---------------

::

make lint
make test
make coverage
make docs


# run only kaze-python tests
python -m unittest discover kaze

# run only kaze-boa tests
python -m unittest discover boa_test

Updating the version number and releasing new versions of kaze-python
--------------------------------------------------------------------

This is a checklist for releasing a new version, which for now means:

1. Merging the changes from development into master
2. Setting the version from eg. ``0.4.6-dev`` to ``0.4.6`` (which
automatically created a tag/release)
3. On the dev branch, setting the version to the next patch, eg.
``0.4.7-dev``
4. Pushing master, development and the tags to GitHub

Make sure you are on the development branch and have all changes merged
that you want to publish. Then follow these steps:

::

# Only in case you want to increase the version number again (eg. scope changed from patch to minor):
# bumpversion --no-tag minor|major

# Update CHANGELOG.rst: make sure all changes are there and remove `-dev` from the version number
vi CHANGELOG.rst
git commit -m "Updated changelog for release" CHANGELOG.rst

# Merge development branch into master
git checkout master
git merge development

# Set the release version number and create the tag
bumpversion release

# Switch back into the development branch
git checkout development

# Increase patch number and add `-dev`
bumpversion --no-tag patch

# Push to GitHub, which also updates the PyPI package and Docker Hub image
git push origin master development --tags

Troubleshooting
---------------

If you run into problems, check these things before ripping out your
hair:

- Double-check that you are using Python 3.6.x
- Update the project dependencies (``pip install -e .``)
- If you encounter any problems, please take a look at the
`installation
section <https://kaze-python.readthedocs.io/en/latest/install.html#further-install-notes>`__
in the docs, and if that doesn't help open an issue. We'll try to
help.
- You can reach us on the `kaze Discord <https://discord.gg/R8v48YA>`__,
or simply file a `GitHub
issue <https://github.com/KAZEBLOCKCHAIN/kaze-python/issues/new>`__.

License
-------

- Open-source
`MIT <https://github.com/KAZEBLOCKCHAIN/kaze-python/blob/master/LICENSE.md>`__.
- Contributors: [@localhuman](https://github.com/localhuman) (Creator), [@metachris](https://github.com/metachris), [@ixje](https://github.com/ixje), and [many more](https://github.com/KAZEBLOCKCHAIN/kaze-python/graphs/contributors)

Donations
---------

Accepted at **ATEMNPSjRVvsXmaJW4ZYJBSVuJ6uR2mjQU**


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kaze-python-0.8.0.tar.gz (1.0 MB view details)

Uploaded Source

Built Distribution

kaze_python-0.8.0-py3-none-any.whl (322.8 kB view details)

Uploaded Python 3

File details

Details for the file kaze-python-0.8.0.tar.gz.

File metadata

  • Download URL: kaze-python-0.8.0.tar.gz
  • Upload date:
  • Size: 1.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.23.4 CPython/3.6.3

File hashes

Hashes for kaze-python-0.8.0.tar.gz
Algorithm Hash digest
SHA256 37e558bc5f846d3b68c28c95cf46bba70f3813776c0b495c538a5c718eaeaf0f
MD5 b8d649405bbc7c82151ce59fd9c6a526
BLAKE2b-256 00629bc77e6f8bf457591c2b5e331d7872d6dadd2ee2bc3402ab3f8b3071aaef

See more details on using hashes here.

File details

Details for the file kaze_python-0.8.0-py3-none-any.whl.

File metadata

  • Download URL: kaze_python-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 322.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.23.4 CPython/3.6.3

File hashes

Hashes for kaze_python-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 665019cd1d9c6f48ec242ce7c28135972f19a0816285465874ede5e9ff3d0c5d
MD5 3967580dbd14c0019535cdde3ebef1b3
BLAKE2b-256 c4764f99daa8013e5da5944eae8118a9aa961a649a25af7f59596bf71642381a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page