Moustikitos / dpos

Ark.io blockchain api

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

dposlib package aims to provide a simple API to any blockchain.

PyPI pyversions PyPI version shields.io GitHub release Downloads

Support this project

Liberapay receiving

Buy Ѧ and:

Quick View

Ubuntu dependencies installation

sudo apt-get install python python-dev python3 python3-dev
sudo apt-get install python-setuptools python3-setuptools
sudo apt-get install python-pip python3-pip

Available networks

Network Ark Solar Compendia
mainnet ark sxp nos
testnet - tsxp -
devnet dark - dnos

Main features

An intuitive REST API

>>> from dposlib import rest
>>> rest.use("dark")
True
>>> # ~/api/delegates/darktoons endpoint
>>> rest.GET.api.delegates.darktoons()
{'data': {'username': 'darktoons', 'address': 'D7seWn8JLVwX4nHd9hh2Lf7gvZNiRJ7qLk', 'publicKey': '03a02b9d5fdd1307c2ee4652ba54d492d1fd11a7d1bb3f3a44c4a05e79f19de933', 'votes': 9385785081642, 'rank': 45, 'blocks': {'produced': 32015, 'last': {'id': '9d5085e503e09c656152b541bc243155f560347aa8b377d3f2f9a1cb71900d90', 'height': 2544602, 'timestamp': {'epoch': 69406864, 'unix': 1559508064, 'human': '2019-06-02T20:41:04.000Z'}}}, 'production': {'approval': 0.07}, 'forged': {'fees': 14640580130, 'rewards': 6403000000000, 'total': 6417640580130}}}
>>> # ~/api/node/fees endpoint
>>> rest.GET.api.node.fees()
{'meta': {'days': 7}, 'data': [{'type': '0', 'min': '200000', 'max': '10000000', 'avg': '1089596', 'sum': '14887144978', 'median': '460000'}, {'type': '1', 'min': '500000000', 'max': '500000000', 'avg': '500000000', 'sum': '313500000000', 'median': '500000000'}, {'type': '3', 'min': '10000000', 'max': '100000000', 'avg': '58541781', 'sum': '1756253430', 'median': '61114510'}]}
>>> rest.use("ark")
True
>>> delegate0 = rest.GET.api.delegates(returnKey="data")[0]
>>> delegate0["username"]
u'binance_staking'

Fast way to interact with blockchain

>>> import dposlib
>>> rest.use("dark")
>>> # send 1 token to D7seWn8JLVwX4nHd9hh2Lf7gvZNiRJ7qLk with a simple message
>>> tx = dposlib.core.transfer(1, "D7seWn8JLVwX4nHd9hh2Lf7gvZNiRJ7qLk", "message")
>>> # sign tx with secret and [optional second secret]
>>> tx.finalize("first secret", "second secret")
>>> tx
{
  "amount": 100000000,
  "asset": {},
  "fee": 1090241,
  "id": "1e967879eb134712afd2b2a606be8460468b80aab857fa99a88cf8da0d72bd5d",
  "recipientId": "D7seWn8JLVwX4nHd9hh2Lf7gvZNiRJ7qLk",
  "senderId": "D7seWn8JLVwX4nHd9hh2Lf7gvZNiRJ7qLk",
  "senderPublicKey": "03a02b9d5fdd1307c2ee4652ba54d492d1fd11a7d1bb3f3a44c4a05e79f19de933",
  "signSignature": "3045022100a8dd9c50b18002bd6f8ffe9f1c0700cafb95de18670b48fa76afd85c3003a2d202200a1cc102c13857a38d8311a5c80a9222329f0c53f3305c70c91979efd5288d21",
  "signature": "304402206576aee7893f3c038d58a6def5180881077531c4b1ebe87e835da2dbe40d0670022064ae37be3f160b0c969459e06912ee619997ccf303e6d919135cdf594a74b77d",
  "timestamp": 69407340,
  "type": 0,
  "vendorField": "message"
}
>>> # broadcast transaction
>>> rest.POST.api.transactions(transactions=[tx])
{'data': {'accept': ['1e967879eb134712afd2b2a606be8460468b80aab857fa99a88cf8da0d72bd5d'], 'broadcast': ['1e967879eb134712afd2b2a606be8460468b80aab857fa99a88cf8da0d72bd5d'], 'excess': [], 'invalid': []}}

Network API

>>> import dposlib
>>> rest.use("ark")
>>> dlgt = dposlib.core.api.Delegate("arky")  # get delegate by username
>>> dlgt.forged
{'fees': 3294.7, 'forged': 227230.7, 'rewards': 223936.0}
>>> dlgt.address
'ARfDVWZ7Zwkox3ZXtMQQY1HYSANMB88vWE'
>>> blk = dlgt.lastBlock  # get last forged block
>>> blk
{
  "blockSignature": "304402200a496a628c2741537538f0492f9d683d3c4f1b30c8dd03c33ad8fbe79d08b6eb02206cdec7e1210db53a3ca22da30912479ff3644d3a1ed1d878417d5965f34dfd6d",
  "confirmations": 68,
  "generatorId": "ARfDVWZ7Zwkox3ZXtMQQY1HYSANMB88vWE",
  "generatorPublicKey": "030da05984d579395ce276c0dd6ca0a60140a3c3d964423a04e7abe110d60a15e9",
  "height": 5862354,
  "id": "1894085440657345411",
  "numberOfTransactions": 0,
  "payloadHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  "payloadLength": 0,
  "previousBlock": "11181074894913507025",
  "reward": 2.0,
  "timestamp": 47535768,
  "totalAmount": 0.0,
  "totalFee": 0.0,
  "totalForged": 2.0,
  "version": 0
}
>>> blk.transactions()
[]
>>> wlt = dlgt.wallet
>>> wlt.balance
2537.42979112
>>> wlt.link("secret passphrase here")
>>> wlt.send(1, "ARfDVWZ7Zwkox3ZXtMQQY1HYSANMB88vWE")
{'transactionIds': ['bbce72e7a76f5f71209c8ab29b4b4299a409241dfc77835150459a34bd5a5c16'], 'success': True}

Ledger.com hard wallet

If you want to use dposlib.ark.ldgr module, you need to install ledgerblue package and its dependencies:

sudo apt-get install libudev-dev libusb-1.0.0-dev
pip install ledgerblue
>>> from dposlb import rest
>>> from dposlib.ark import api
>>> rest.use("dark")
>>> ldg = dposlib.core.api.Ledger(0, 0, 0)
>>> ldg
{
  "address": "DEVx3osw9Rj1wZhoUf2dMbPmmUN9P3XFpb",
  "balance": 69.9939675,
  "isDelegate": true,
  "publicKey": "025993c687f1e3418e0aa47b6ab091e414b51c45b32a107745c01c124652112c7a",
}
>>> ldg.derivationPath
"44'/1'/1'/0'/0"
>>> ldg.send(1, "DGuuCwJYoEheBAC4PZTBSBasaDHxg2e6j7")

{'data': {'accept': ['7445b0748aae8778bcd73d2ca40d8cc19ffee7b68ea89f05e1934b96dd73ed2f'], 'broadcast': ['7445b0748aae8778bcd73d2ca40d8cc19ffee7b68ea89f05e1934b96dd73ed2f'], 'excess': [], 'invalid': []}}
>>> ldg.upVote("darktoons")

{'data': {'accept': ['c13791c8ca0cbcd8ef62a722a4a157fa6aa97a86770f988d9a6dc3234b562bc2'], 'broadcast': ['c13791c8ca0cbcd8ef62a722a4a157fa6aa97a86770f988d9a6dc3234b562bc2'], 'excess': [], 'invalid': []}}
>>> dposlib.core.api.Ledger.fromDerivationPath("44'/1'/0'/0/0")
{
  "address": "DDC7kWToyvfKa8dvRTXitr7o5FHMVKtBve",
  "balance": 95.20477813,
  "publicKey": "038473178d89988b1f8428efe758b99ebf1d49c47b679f3f4a9cdc0829fa6ece2b",
  "vote": "03a02b9d5fdd1307c2ee4652ba54d492d1fd11a7d1bb3f3a44c4a05e79f19de933"
}

Lite wallet

usage: send [-h] -i IDENTITY [-f FEE] [--vendor-field VENDORFIELD] net action [args ...]

Command line wallet.

positional arguments:
  net                   any of [ark, dark, dnos, nos, sxp, tsxp]
  action                any of [fund, vote, lock, claim, burn]
  args                  arguments to be passed to transaction builder

options:
  -h, --help            show this help message and exit
  -i IDENTITY, --identity IDENTITY
                        public key, wallet address or delegate username
  -f FEE, --fee FEE     transaction fee
  --vendor-field VENDORFIELD

To use lite wallet with ledger:

usage: send [-h] -i ldgr:<a>;<i> [-f FEE] [--vendor-field VENDORFIELD] net action [args ...]
    where <a> is the account index [0..9]
          <i> is the wallet index  [0..9]

Version

  • added dposlib.cmd.send script
  • added dposlib-send standalone package
  • minor fixes on net, builders.v2 and builder.v3 modules
  • implemented solar-core v3 new transactions

1.0.0

  • removed python 2.x compliancy
  • removed pytz dependency
  • added solar testnet and mainnet
  • pySecp256k1 replaced by cSecp256k1
  • bip340 schnorr signature implemented
  • solar transaction v3 implemented
  • ark package simplification
  • ark.api.Webhook improvement
  • multiVote moved to switchVote

0.3.5

  • Ark-core v 3.0.x compliancy
  • fee management improvement
  • ledger.com Ark app support
  • multiVote implementation
  • magistrate implementation
  • Compendia network added
  • Unikname network added
  • packaging improvement
  • switched from sphinx to pydoc-markdown doc builder
Older releases…

0.3.4

  • removed requests dependency
  • multisignature api and app run as system services

0.3.3

  • offline start fixed
  • api.Wallet fixed
  • added pythonic datetime attribute to Transaction class

0.3.2

  • better vendorFieldHex field handling
  • dposlib.blockchain.Transaction behaviour improvement
  • tx versioning defined in net module
  • bridge for ark-core 2.5 and 2.6

0.3.1

  • multisignature client-server api

0.3.0

  • flake8 compliancy
  • Ark 2.6 compatibility
  • removed package resources dependencies
  • ecdsa lib replaced by builtin secp256k1
  • added Iop mainnet and devnet
  • Lisk and forks dev stopped
  • ldgr import now optional
  • sphinx doc added

0.2.2

  • Ark v2.5 headers fix
  • Ark v2.5 BigInt fix
  • packaging improvement
  • rest returnKey behaviour improvement

0.2.1

  • added lisk blockchain
  • added shift, t.shift and qredit network
  • added .cold data in package distribution
  • transaction types 0, 1 and 3 added to lisk.v09 network
  • python 2.x compliancy for util.data package

0.2.0

  • ark.v2 api improvement
  • dposlib.util.misc module improvement
  • upVote/downVote bugfix

0.1.9

  • travis-ci integration
  • dposlib.core.Transaction interface improvement
  • Ark v1 and v2 cross-dependency removed
  • offline work feature added

0.1.8

  • added ark v2.4 compatibility
  • api wallet link using getpass library
  • added ledger nano S support (transaction type 0, 1, 2 & 3)
  • peer selection now checks syncing status

0.1.7

  • added transaction and rest MarkDown documentation files
  • dposlib.core.api is both python 2.x and 3.x compliant
  • added Webhook api (experimental)
  • fee data initialisation improvement
  • transaction broadcasting improvement
  • peer selection improvement
  • Lisk blockchain and forks developpement frozen

0.1.6

  • Ark-core v 2.1.x compatibility

0.1.5

  • compatibility with both ark-core v2 devnet and mainnet

0.1.4

  • Python 2.x compatibility fix
  • dposlib.core.Transaction.sign does not set fees anymore
  • dposlib.core.Transaction.finalize set fees before signature
  • dposlib.core.Transaction fee management improved

0.1.3

  • REST requests header bugfix (ubuntu)

0.1.2

  • Packaging improvement

0.1.1

  • ARK packaging improvement (v1 and v2)
  • LISK packaging improvement (v09 and v10)
  • ARK dynamicFee implementation
  • Network API created

0.1.0

  • First rebrand

About

Ark.io blockchain api

License:MIT License


Languages

Language:Python 100.0%