Skip to main content

Python API bridging DPOS blockchains

Project description

https://github.com/Moustikitos/arky/raw/master/arky-logo.png

Copyright 2016-2017 Toons, Copyright 2017 ARK, MIT licence

Install

Ubuntu / OSX

>From development version

sudo -H pip install https://github.com/ArkEcosystem/arky/archive/aip11.zip

If you work with python3

sudo -H pip3 install https://github.com/ArkEcosystem/arky/archive/aip11.zip

Windows

>From development version

pip install https://github.com/ArkEcosystem/arky/archive/aip11.zip

REST API

rest module allows developpers to send requests to the blockchain.

>>> import arky.rest
>>> arky.rest.use("ark")

It loads the ark.net file and create associated REST API endpoinds. All endpoinds can be reached using this syntax :

arky.rest.[METHOD].[endpoinds with "/" replaced by "."](param=value, ...[returnKey=name])

>>> # http equivalent [PEER ADDRESS]/api/delegates/get?username=arky
>>> arky.rest.GET.api.delegates.get(username="arky")
{'delegate': {'productivity': 99.22, 'producedblocks': 42283, 'approval': 1.06,
'rate': 19, 'publicKey': '030da05984d579395ce276c0dd6ca0a60140a3c3d964423a04e7ab
e110d60a15e9', 'username': 'arky', 'vote': '137484978342696', 'address': 'ARfDVW
Z7Zwkox3ZXtMQQY1HYSANMB88vWE', 'missedblocks': 334}, 'success': True}

It returns a python dictionary transposed from server json response. You can provide a returnKey option value to get the field you want from server response :

>>> arky.rest.use("oxy")
>>> arky.rest.GET.api.delegates.get(username="toons", returnKey="delegate")
{'rate': 20, 'producedblocks': 1354, 'approval': 14.36, 'username': 'toons', 'ra
nk': 20, 'publicKey': 'c0f4e7fb7555fd19de2b6a9de92f02b44cef56c782ca0f6983607b7f4
e508ef9', 'productivity': 99.63, 'missedblocks': 5, 'vote': '1476176009882003',
'address': '15981732227677853647X'}

Blockchain core

arky.rest.use loads a blockchain package find in *.net file as arky.core. Blockchain package define the current interface :

  • arky.core.crypto.getKeys(secret)

  • arky.core.crypto.getAddress(publicKey)

  • arky.core.crypto.getSignature(tx, privateKey)

  • arky.core.crypto.getId(tx)

  • arky.core.crypto.getBytes(tx)

  • arky.core.crypto.bakeTransaction(**kw)

  • arky.core.sendTransaction(**kw)

  • arky.core.sendPayload(*payloads)

  • arky.core.sendToken(amount, recipientId, secret, secondSecret=None, vendorField=None)

  • arky.core.registerSecondPublicKey(secondPublicKey, secret, secondSecret=None)

  • arky.core.registerSecondPassphrase(secondPassphrase, secret, secondSecret=None)

  • arky.core.registerDelegate(username, secret, secondSecret=None)

  • arky.core.upVoteDelegate(usernames, secret, secondSecret=None)

  • arky.core.downVoteDelegate(usernames, secret, secondSecret=None)

arky.core create transaction localy using pynacl and ecdsa crypto libraries so no secret is sent trough the network.

Send coins

Amount are given in SATOSHI.

>>> arky.rest.use("toxy")
>>> arky.core.sendToken(amount=100000000, recipientId="15981732227677853647X",
...                     secret="secret", secondSecret="secondSecret")
{'id': '13372419325129159475', 'success': True}
>>> arky.rest.use("dark")
>>> arky.core.sendToken(amount=100000000, recipientId="15981732227677853647X",
...                     secret="secret", secondSecret="secondSecret",
...                     vendorField="Your smart bridge message here")
{'success': True, 'transactionIds': ['24584ec149106e6206445106af8176cc885edf12ae
0c4534d2e4a3b4214d4a3f'], 'broadcast': '90.0%'}

Vote for delegate

>>> arky.rest.use("toxy")
>>> arky.core.upVoteDelegate(["toons", "unused"],
...                          secret="secret", secondSecret="secondSecret")
{'id': '10107701353010554951', 'success': True}
>>> arky.rest.use("dark")
>>> arky.core.downVoteDelegate(["d_arky"],
...                            secret="secret", secondSecret="secondSecret")
{'broadcast': '100.0%', 'transactionIds': ['ecd663ea46472cd7d72431eb13e9b23ef9c2
6aae8a1004621b871677960d01f1'], 'success': True}

CLI

You can use arky package without writing a line of code trough command line interface. There are two ways to launch the CLI.

>>> from arky import cli
>>> cli.start()
Welcome to arky-cli [Python 3.5.1 / arky 1.0a0]
Available commands: network, account, delegate
cold@.../>

Use network

cold@.../> network use
Network(s) found:
    1 - ark-aip11
    2 - ark
    3 - dark
    4 - kapu
    5 - lisk
    6 - oxy
    7 - shift
    8 - toxy
    9 - tshift
Choose an item: [1-9]> 8
hot@toxy/network>

Use Ledger Nano S

hot@ark/network> ledger link
hot@ark/ledger[AerGA...VbMft]> send 1 AUahWfkfr5J4tYakugRbfow7RWVTK35GPW "send 1 ARK from ledger using arky CLI"
Use ledger key to confirm or or cancel :
    Send 1.00000000 ARK to AUahWfkfr5J4tYakugRbfow7RWVTK35GPW ?
    Broadcasting transaction...
         broadcast: 100.0%
    transactionIds: ['34d4ce9dea2dd4f52e8d6af1977d5f00488694ecbdaf7c45f70a7c46c078c744']
           success: True
hot@ark/ledger[AerGA...VbMft]>

Author

Toons <moustikitos@gmail.com>

Support this project

https://github.com/ArkEcosystem/arky/raw/master/ark-logo.png

Toons Ark address: AUahWfkfr5J4tYakugRbfow7RWVTK35GPW

http://bruno.thoorens.free.fr/img/bitcoin.png

Toons Bitcoin address: 3Jgib9SQiDLYML7QKBYtJUkHq2nyG6Z63D

Show gratitude on Gratipay:

http://img.shields.io/gratipay/user/b_py.svg?style=flat-square

Vote for Toons’ delegate arky

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

Arky-1.1.tar.gz (25.6 kB view hashes)

Uploaded Source

Built Distributions

Arky-1.1-py3.5.egg (78.5 kB view hashes)

Uploaded Source

Arky-1.1-py2.py3-none-any.whl (40.4 kB view hashes)

Uploaded Python 2 Python 3

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