Skip to main content

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/iotaledger/ccurl.interface.py.git

  • Make sure you have cmake available 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 pprint
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 an api instance
api = iota.Iota("https://nodes.thetangle.org:443")

# 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/iotaledger/ccurl.interface.py/issues

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.1.0.tar.gz (41.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

PyOTA_PoW-1.1.0-py3-none-any.whl (35.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: PyOTA-PoW-1.1.0.tar.gz
  • Upload date:
  • Size: 41.7 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.6.0 requests-toolbelt/0.9.1 tqdm/4.37.0 CPython/3.7.1

File hashes

Hashes for PyOTA-PoW-1.1.0.tar.gz
Algorithm Hash digest
SHA256 3c4c4f8aaa47bf5d86f7ec2b3f17a06e8ff3e97b2932219da29818bc9aafba39
MD5 a6c3dedd2ca0a8880634e958d69a60ae
BLAKE2b-256 b3b8b4678b80a96b8fba181f1305938ed2d9329cbd747f251dc6c016fb2d4777

See more details on using hashes here.

File details

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

File metadata

  • Download URL: PyOTA_PoW-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 35.4 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.6.0 requests-toolbelt/0.9.1 tqdm/4.37.0 CPython/3.7.1

File hashes

Hashes for PyOTA_PoW-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 40b5f373cf5d8a6f1470214a5109ac3159a6d6a4001464812ef7715e4f02171d
MD5 2d121ed9795dcc63b6759124bd372b19
BLAKE2b-256 52158c5bd85239f4830ad031a1ad2890a371bb8430679f618eb84dcec0ac7b12

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page