Skip to main content

Ccurl PoW Interface for PyOTA

Project description

A python interface to load Ccurl library and perform proof of work locally, without relying on a node. To be used together with PyOTA, the Python Client Library for IOTA. For more info, read the docs.

Motivation

Currently, PyOTA doesn’t support performing proof of work locally. The attach_to_tangle API command sends the prepared transaction trytes to an IOTA node, that does the PoW by filling out attachment_timestamp* fields and calculating nonce with Curl P-81. In case of bundles, transactions are chained together through their transaction hash.

Installation

To use the module, follow the steps: - Clone the repo from GitHub:

$ git clone https://github.com/lzpap/ccurl.interface.py.git

  • Make sure you have cmake availabke on your system. This is a build dependecy for the ccurl library.

  • Build ccurl according to build instructions and put the .so library into the src folder, or run the init script in the main folder to build and initialize:

$ ./init.sh

  • Create a vitual environment / activate the one you use for PyOTA.

  • Install th python package from source by running:

$ pip install -e .

How to use?

Once installed, you can use the module to replace attach_to_tangle core api call in PyOTA. Just import the ccurl_interface module from the pow package and you are good to go.

An example code below illustrates how to do PoW for a bundle consisting of two transactions.

Code Example

import iota
from pprint import *
from pow import ccurl_interface

# Generate seed
myseed = iota.crypto.types.Seed.random()

#Generate two addresses
addres_generator = iota.crypto.addresses.AddressGenerator(myseed)
addys = addres_generator.get_addresses(1, count=2)

# preparing transactions
pt = iota.ProposedTransaction(address = iota.Address(addys[0]),
                              tag     = iota.Tag(b'LOCALATTACHINTERFACE99999'),
                              value   = 0)

pt2 = iota.ProposedTransaction(address = iota.Address(addys[1]),
                               tag     = iota.Tag(b'LOCALATTACHINTERFACE99999'),
                               value   = 0)

# preparing bundle that consists of both transactions prepared in the previous example
pb = iota.ProposedBundle(transactions=[pt2,pt])

# generate bundle hash
pb.finalize()

# declare a api instance
api = iota.Iota("https://nodes.thetangle.org:443") # selecting IOTA node

# get tips to be approved by your bundle
gta = api.get_transactions_to_approve(depth=3)

minimum_weight_magnitude = 14 # target is mainnet

# perform PoW locally
bundle_trytes =\
    ccurl_interface.attach_to_tangle(
        pb.as_tryte_strings(),
        gta['trunkTransaction'],
        gta['branchTransaction'],
        mwm
    )

# Broadcast transactions on the Tangle
broadcasted = api.broadcast_and_store(bundle_trytes)

bundle_broadcasted =iota.Bundle.from_tryte_strings(broadcasted['trytes'])

pprint('Local pow broadcasted transactions are:')
pprint(bundle_broadcasted.as_json_compatible())

Tests

Run nosetests to test in current environment. Run tox -v -p all to test in Python 2.7, 3.5, 3.6 and 3.8.

Contribute

Raise issues: https://github.com/lzpap/ccurl.interface.py/issues

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

PyOTA-PoW-1.0.0.tar.gz (37.6 kB view details)

Uploaded Source

Built Distribution

PyOTA_PoW-1.0.0-py3-none-any.whl (36.5 kB view details)

Uploaded Python 3

File details

Details for the file PyOTA-PoW-1.0.0.tar.gz.

File metadata

  • Download URL: PyOTA-PoW-1.0.0.tar.gz
  • Upload date:
  • Size: 37.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.0

File hashes

Hashes for PyOTA-PoW-1.0.0.tar.gz
Algorithm Hash digest
SHA256 11594c8849c2f880157084c17f0d97f632a214516d5ef29a803e2fd6b9df1c95
MD5 fb217ef32df9ec1a2127e16405191788
BLAKE2b-256 d95a2718f8f7d131cbe2f568a9da4578b57ba281fb74acfb1f5973d1cb4c0e85

See more details on using hashes here.

File details

Details for the file PyOTA_PoW-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: PyOTA_PoW-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 36.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.0

File hashes

Hashes for PyOTA_PoW-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 85706d450c2a7ba09b585f048f828eeb5be3b2b99674b383855601a5d1f66874
MD5 107b945a5e9436df739747a4787fe88a
BLAKE2b-256 847d8a3082656fe73f185e0865f4386219bfe334b06e0fc22e524908023fc7af

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