This repository has been archived by the owner. It is now read-only.
Pythonic way to ineract with ARK blockchain
Switch branches/tags
Nothing to show
Clone or download
Pull request Compare This branch is 580 commits ahead of ravelou:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
arky
bin
test
.gitattributes
.gitignore
MANIFEST.in
VERSION
ark.ico
arky-logo.png
arky.html
readme.md
setup.py

readme.md

Copyright 2016-2018 Toons, MIT licence

Install

Ubuntu / OSX

From development version

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

If you work with python3

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

Windows

From development version

pip install https://github.com/Moustikitos/arky/archive/aip11-dev.zip

REST API

rest module allows developers to send requests to the blockchain.

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

All endpoints can be reached using this syntax :

arky.rest.[METHOD].[endpoints 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 a server json response. You can provide a returnKey option value to get the field you want from the 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': '14761760.09882003', 
'address': '15981732227677853647X'}

Blockchain core

arky.rest.use loads a blockchain package found in *.net file as arky.core. Blockchain package defines 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.sendTransaction(**kw)
  • arky.core.sendPayload(*payloads)
  • arky.core.sendToken(amount, recipientId, secret, secondSecret=None, vendorField=None)
  • arky.core.registerSecondPublicKey(secondPublicKey, secret)
  • arky.core.registerSecondPassphrase(secret, secondSecret)
  • arky.core.registerDelegate(username, secret, secondSecret=None)
  • arky.core.upVoteDelegate(usernames, secret, secondSecret=None)
  • arky.core.downVoteDelegate(usernames, secret, secondSecret=None)

arky.core creates a transaction object locally using pynacl and ecdsa crypto libraries so no secrets (e.g., passphrase, second passphrase) are 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 the arky package without writing a line of code through the command line interface. There are two ways to launch the CLI.

>>> from arky import cli
>>> cli.start()
Welcome to arky-cli [Python x.y.z / arky 1.x]
Available commands: network, account, delegate, ledger
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>

Link account

hot@toxy/network> account link secret
hot@toxy/account[18160...4874X]> send 1.23 12427608128403844156X
Send 1.23000000 oxycoin to 12427608128403844156X ? [y-n]> y
Enter second passphrase> secondSecret
    Broadcasting transaction...
          id: 776848717338323058
    success: TrueZ
hot@toxy/account[18160...4874X]> status
          secondSignature: 1
          multisignatures: []
          secondPublicKey: 8b509500d5950122b3e446189b4312805515c8e7814a409e09ac5c21935564af
        u_multisignatures: []
      unconfirmedBalance: 2637000000
                publicKey: 5d036a858ce89f844491762eb89e2bfbd50a4a0a0da658e4b2628b25b117ae09
    unconfirmedSignature: 1
                  address: 18160565574430594874X
                  balance: 2637000000
hot@toxy/account[18160...4874X]>

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

Contributors