neocore 0.5.6
Core functionality of neo-python
License: MIT license
Requires Python: >=3.4
Keywords: neocore,neo,python,node

Library for working with NEO related data in Python, without database dependencies.

.. image:: https://travis-ci.org/CityOfZion/neo-python-core.svg?branch=master
        :target: https://travis-ci.org/CityOfZion/neo-python-core

.. image:: https://coveralls.io/repos/github/CityOfZion/neo-python-core/badge.svg
        :target: https://coveralls.io/github/CityOfZion/neo-python-core


* Datatypes like ``UInt160``, ``KeyPair``, ``BigInteger`` and basic string to address and address to ``UInt160`` methods
* Includes a useful cli-tool ``np-utils`` (see help with ``np-utils -h``)
* Compatible with Python 3.5+
* Used by `neo-python <https://github.com/CityOfZion/neo-python>`_
* https://pypi.python.org/pypi/neocore

``np-utils`` examples:

.. code-block:: console

    $ np-utils -h
    usage: np-utils [-h] [--version] [--address-to-scripthash address]
                    [--scripthash-to-address scripthash] [--create-wallet]

    optional arguments:
    -h, --help            show this help message and exit
    --version             show program's version number and exit
    --address-to-scripthash address
                            Convert an address to scripthash
    --scripthash-to-address scripthash
                            Convert scripthash to address
    --create-wallet       Create a wallet

    $ np-utils --create-wallet
    {
    "private_key": "KwJqCbjsmGUCqbkp83Nxi9MJ9mA7F8EN4tebJVWjYZBEoWCNxCaF",
    "address": "AHVvg26CNz1vxteJfeHy4R8P4VN8SydCM6"
    }

    $ np-utils --address-to-scripthash AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y
    Scripthash big endian:  0xe9eed8dc39332032dc22e5d6e86332c50327ba23
    Scripthash little endian: 23ba2703c53263e8d6e522dc32203339dcd8eee9
    Scripthash neo-python format: b'#\xba\'\x03\xc52c\xe8\xd6\xe5"\xdc2 39\xdc\xd8\xee\xe9'

    $ np-utils --scripthash-to-address 0xe9eed8dc39332032dc22e5d6e86332c50327ba23
    AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y

    $ np-utils --scripthash-to-address 23ba2703c53263e8d6e522dc32203339dcd8eee9
    Detected little endian scripthash. Converting to big endian for internal use.
    Big endian scripthash: 0xe9eed8dc39332032dc22e5d6e86332c50327ba23
    AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y


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

You need Python 3.5 or higher!

You can install `neocore` from PyPI with ``easy_install`` or ``pip``:

.. code-block:: console

    $ pip install -U neocore

Alternatively, if you want to work on the code, clone this repository and setup your venv:

* Clone the repo: ``git clone https://github.com/CityOfZion/neo-python-core.git``
* Create a Python 3 virtual environment and activate it:

.. code-block:: console

    $ python3 -m venv venv
    $ source venv/bin/activate

* Then install the requirements:

.. code-block:: console

    $ pip install -e .
    $ pip install -r requirements_dev.txt


Useful commands
^^^^^^^^^^^^^^^

.. code-block:: console

    $ make lint
    $ make test
    $ make coverage


Release checklist
^^^^^^^^^^^^^^^^^

(Only for admins)

Releasing a new version on GitHub automatically uploads this release to PyPI.
This is a checklist for releasing a new version:

.. code-block:: console

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

    # Update ``HISTORY.rst`` with the new version number and the changes and commit this
    vi HISTORY.rst
    git commit -m "Updated HISTORY.rst" HISTORY.rst

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

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

    # Push to GitHub, which also updates the PyPI package
    git push && git push --tags


=======
History
=======

0.5.6 2018-12-18
----------------
* Updated dependencies
* Added ``SafeReadBytes`` to ``BinaryReader``


0.5.5 2018-12-18
----------------
* Updated dependencies
* Added ``isValidPublicAddress()`` to utility module


0.5.4 2018-10-31
----------------
* Updated `BigInteger` to properly support logical shifts
* Added tests for `np-utils`
* Updated dependencies


0.5.3 2018-10-02
----------------
* Updated the dependencies


0.5.2 (2018-08-28)
------------------
* `Fixed8.TryParse` fix for zero
* Updated dependencies


0.5.1 (2018-08-23)
------------------
* Change BigInteger divisor operation to use floordiv rather than truediv


0.5.0 (2018-08-21)
------------------
* `np-utils --address-to-scripthash` outputs now little-endian and big-endian scripthashes
* `np-utils --scripthash-to-address` detects input endianness and converts accordingly
* Updated dependencies


0.4.11 (2018-07-05)
-------------------
* Added ``Size()`` method to `ECPoint` and `Fixed8` class.


0.4.10 (2018-06-25)
-------------------
* Updated requirements: pycryptome


0.4.9 (2018-06-08)
------------------
* Updated dependencies, especially base58


0.4.8 (2018-05-31)
----------------------------
* Create wallets with ``np-utils --create-wallet``


0.4.7 (2018-05-30)
------------------
* ``BigInteger(0)`` now is ``b'\x00'`` (`PR #50 <https://github.com/CityOfZion/neo-python-core/pull/50>`_)


0.4.6 (2018-04-30)
------------------
* make unhexlify in Crypto.VerifySignature optional (`PR #48 <https://github.com/CityOfZion/neo-python-core/pull/48>`_)


0.4.2 (2018-04-26)
------------------
* ``np-utils`` now supports ``--scripthash-to-address`` (thx @belane)


0.4.1 (2018-04-26)
-----------------------------
* ``np-utils`` cli tool (see ``cli.py``, `PR #40 <https://github.com/CityOfZion/neo-python-core/pull/40>`_)
* alter initialization of Crypto signature curve


0.3.10 (2018-03-21)
----------------------------
* Fix formatting of ``ToNeoJsonString()`` which was cutting off trailing zeroes from integers.


0.3.8 (2018-03-14)
------------------
* Fix travis deploy to be compatible with recent neo-python changes
* Update scrypt and logzero dependency versions


0.3.6 (2018-02-26)
------------------
* Enabled Python >= 3.4 in setup.py


0.3.5 (2018-02-15)
------------------
* Bugfix: Dont unhex when writing var bytes (`PR #36 <https://github.com/CityOfZion/neo-python-core/pull/36>`_)


0.3.4 (2018-01-25)
------------------
* Added ``ParseString`` method to UInt160/UInt256 (`PR #35 <https://github.com/CityOfZion/neo-python-core/pull/35>`_)


0.3.3 (2018-01-25)
------------------
* Added ``Fixed8.ToJsonString()`` (`PR #33 <https://github.com/CityOfZion/neo-python-core/pull/33>`_)


0.3.2 (2018-01-23)
------------------
* Added UInt ``To0xString`` method


0.3.1 (2018-01-09)
------------------
* Documentation update
* Moved the ``cryptography`` dependency to ``requirements_dev.txt``


0.3.0 (2018-01-09)
------------------
* Added ``neo.Cryptography`` and ``KeyPair``
* Changed signature of ``neocore.Cryptography.Crypto.Sign()`` to remove unused ``public_key`` argument
* Removed redundant ``neocore.Cryptography.Helper.hash_to_wallet_address()`` function, use  ``neocore.Cryptography.Helper.scripthash_to_address()`` instead.
* Removed unused ``neocore.Cryptography.Helper`` functions: ``random_string``, ``bytes_to_hex_string``, ``bin_sha256``, ``sha256``, ``random_key``.


0.2.4 + 0.2.5 (2018-01-03)
--------------------------
* Bugfix for deploying from Travis to PyPI/neocore


0.2.3 (2018-01-03)
------------------
* Bugfix for BinaryWriter (`PR #13 <https://github.com/CityOfZion/neo-python-core/pull/13>`_)


0.2.1 (2018-01-02)
------------------
* Added UInt*, Fixed8 and neo.IO.Binary* (`PR #9 <https://github.com/CityOfZion/neo-python-core/pull/9>`_)


0.1.1 - 0.1.2 (2017-12-30)
--------------------------
* Testing of releases on PyPI with Travis CI.


0.1.0 (2017-12-28)
------------------
* First release on PyPI.