{ "info": { "author": "Toons", "author_email": "moustikitos@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Environment :: Web Environment", "Framework :: Flask", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3" ], "description": "> `dposlib` package aims to provide a simple API to ARK blockchain and forks.\n\n[![Build Status](https://travis-ci.com/Moustikitos/dpos.svg?branch=master)](https://travis-ci.com/Moustikitos/dpos)\n[![PyPI pyversions](https://img.shields.io/pypi/pyversions/dposlib.svg)](https://pypi.python.org/pypi/dposlib)\n[![GitHub release](https://img.shields.io/github/tag/Moustikitos/dpos.svg)](https://GitHub.com/Moustikitos/dpos/tags)\n[![PyPI version shields.io](https://img.shields.io/pypi/v/dposlib.svg)](https://pypi.python.org/pypi/dposlib)\n[![PyPI download total](https://img.shields.io/pypi/dm/dposlib.svg)](https://pypistats.org/packages/dposlib)\n\n### Support this project\n\n * [X] Send Ѧ to `AUahWfkfr5J4tYakugRbfow7RWVTK35GPW`\n * [X] Vote `arky` on [Ark blockchain](https://explorer.ark.io) and [earn Ѧ weekly](http://arky-delegate.info/arky)\n\n# Quick View\n\n## Ubuntu dependencies installation\n\n```bash\nsudo apt-get install python python-dev python3 python3-dev\nsudo apt-get install python-setuptools python3-setuptools\nsudo apt-get install python-pip python3-pip\nsudo apt-get install libudev-dev libusb-1.0.0-dev\n```\n\n## Available network\n\n - [x] Ark (transaction type `0`, `1`, `2` & `3`)\n * mainet : `ark`\n * devnet : `d.ark`\n * forks\n + [x] Persona : `persona`\n + [x] Ripa : `ripa`\n + [x] Phantom : `phantom`\n + [x] Qredit : `qredit`\n - [x] Lisk\n * mainet : `lisk`\n * testnet : `t.lisk`\n * forks\n + [x] shift (transaction type `0`, `1` and `3`)\n - mainnet : `shift`\n - testnet : `t.shift`\n\n## Main features\n\n### An intuitive REST API\n```python\n>>> from dposlib import rest\n>>> rest.use(\"d.ark\")\n>>> # ~/api/delegates/darktoons endpoint\n>>> rest.GET.api.delegates.darktoons()\n{'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}}}\n>>> # ~/api/node/fees endpoint\n>>> rest.GET.api.node.fees()\n{'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'}]}\n```\n\n### Fast way to interact with blockchain\n```python\n>>> import dposlib\n>>> # send 1 token to D7seWn8JLVwX4nHd9hh2Lf7gvZNiRJ7qLk with a simple message\n>>> tx = dposlib.core.transfer(1, \"D7seWn8JLVwX4nHd9hh2Lf7gvZNiRJ7qLk\", \"message\")\n>>> # sign tx with secret and [optional second secret]\n>>> tx.finalize(\"secret\", \"secondSecret\")\n>>> tx\n{\n \"amount\": 100000000,\n \"asset\": {},\n \"fee\": 1090241,\n \"id\": \"1e967879eb134712afd2b2a606be8460468b80aab857fa99a88cf8da0d72bd5d\",\n \"recipientId\": \"D7seWn8JLVwX4nHd9hh2Lf7gvZNiRJ7qLk\",\n \"senderId\": \"D7seWn8JLVwX4nHd9hh2Lf7gvZNiRJ7qLk\",\n \"senderPublicKey\": \"03a02b9d5fdd1307c2ee4652ba54d492d1fd11a7d1bb3f3a44c4a05e79f19de933\",\n \"signSignature\": \"3045022100a8dd9c50b18002bd6f8ffe9f1c0700cafb95de18670b48fa76afd85c3003a2d202200a1cc102c13857a38d8311a5c80a9222329f0c53f3305c70c91979efd5288d21\",\n \"signature\": \"304402206576aee7893f3c038d58a6def5180881077531c4b1ebe87e835da2dbe40d0670022064ae37be3f160b0c969459e06912ee619997ccf303e6d919135cdf594a74b77d\",\n \"timestamp\": 69407340,\n \"type\": 0,\n \"vendorField\": \"message\"\n}\n>>> # broadcast transaction\n>>> rest.POST.api.transactions(transactions=[tx])\n{'data': {'accept': ['1e967879eb134712afd2b2a606be8460468b80aab857fa99a88cf8da0d72bd5d'], 'broadcast': ['1e967879eb134712afd2b2a606be8460468b80aab857fa99a88cf8da0d72bd5d'], 'excess': [], 'invalid': []}}\n```\n\n[See more about transactions](doc/transaction.md)\n\n### Network API\n\n```python\n>>> rest.use(\"ark\")\n>>> dlgt = dposlib.core.api.Delegate(\"arky\") # get delegate by username\n>>> dlgt.forged()\n{'fees': 3294.7, 'forged': 227230.7, 'rewards': 223936.0}\n>>> dlgt.address\n'ARfDVWZ7Zwkox3ZXtMQQY1HYSANMB88vWE'\n>>> blk = dlgt.lastBlock() # get last forged block\n>>> blk\n{\n \"blockSignature\": \"304402200a496a628c2741537538f0492f9d683d3c4f1b30c8dd03c33ad8fbe79d08b6eb02206cdec7e1210db53a3ca22da30912479ff3644d3a1ed1d878417d5965f34dfd6d\",\n \"confirmations\": 68,\n \"generatorId\": \"ARfDVWZ7Zwkox3ZXtMQQY1HYSANMB88vWE\",\n \"generatorPublicKey\": \"030da05984d579395ce276c0dd6ca0a60140a3c3d964423a04e7abe110d60a15e9\",\n \"height\": 5862354,\n \"id\": \"1894085440657345411\",\n \"numberOfTransactions\": 0,\n \"payloadHash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n \"payloadLength\": 0,\n \"previousBlock\": \"11181074894913507025\",\n \"reward\": 2.0,\n \"timestamp\": 47535768,\n \"totalAmount\": 0.0,\n \"totalFee\": 0.0,\n \"totalForged\": 2.0,\n \"version\": 0\n}\n>>> blk.transactions()\n[]\n>>> wlt = dposlib.core.api.Wallet(dlgt.address) # get wallet by address\n>>> wlt.balance\n2537.42979112\n>>> for elem in [(tx[\"recipientId\"], tx[\"amount\"]) for tx in wlt.lastTransactions(2)]:\n... print(elem)\n...\n('AHMXV6UdkVxsTwMqeoeqdpotRRmGZZaAtj', 0.08403461)\n('AUahWfkfr5J4tYakugRbfow7RWVTK35GPW', 329.32420472)\n>>> wlt.link(\"secret passphrase here\")\n>>> wlt.send(1, \"ARfDVWZ7Zwkox3ZXtMQQY1HYSANMB88vWE\")\n{'transactionIds': ['bbce72e7a76f5f71209c8ab29b4b4299a409241dfc77835150459a34bd5a5c16'], 'success': True}\n```\n\n### Ledger Nano S integration\n\n```python\n>>> rest.use(\"d.ark\")\n>>> # 1,0,0 = devnet, account, index\n>>> ldg = dposlib.core.api.NanoS(1,0,0)\n>>> ldg\n{\n \"address\": \"DEVx3osw9Rj1wZhoUf2dMbPmmUN9P3XFpb\",\n \"balance\": 69.9939675,\n \"isDelegate\": true,\n \"publicKey\": \"025993c687f1e3418e0aa47b6ab091e414b51c45b32a107745c01c124652112c7a\",\n}\n>>> ldg.derivationPath\n\"44'/1'/1'/0'/0\"\n>>> ldg.send(1, \"DGuuCwJYoEheBAC4PZTBSBasaDHxg2e6j7\")\n```\n\n\n```python\n{'data': {'accept': ['7445b0748aae8778bcd73d2ca40d8cc19ffee7b68ea89f05e1934b96dd73ed2f'], 'broadcast': ['7445b0748aae8778bcd73d2ca40d8cc19ffee7b68ea89f05e1934b96dd73ed2f'], 'excess': [], 'invalid': []}}\n>>> ldg.upVote(\"darktoons\")\n```\n\n\n```python\n{'data': {'accept': ['c13791c8ca0cbcd8ef62a722a4a157fa6aa97a86770f988d9a6dc3234b562bc2'], 'broadcast': ['c13791c8ca0cbcd8ef62a722a4a157fa6aa97a86770f988d9a6dc3234b562bc2'], 'excess': [], 'invalid': []}}\n>>> dposlib.core.api.NanoS.fromDerivationPath(\"44'/1'/0'/0/0\")\n{\n \"address\": \"DDC7kWToyvfKa8dvRTXitr7o5FHMVKtBve\",\n \"balance\": 95.20477813,\n \"publicKey\": \"038473178d89988b1f8428efe758b99ebf1d49c47b679f3f4a9cdc0829fa6ece2b\",\n \"vote\": \"03a02b9d5fdd1307c2ee4652ba54d492d1fd11a7d1bb3f3a44c4a05e79f19de933\"\n}\n```\n\n## Version\n\n### 0.1.0\n - [x] First rebrand\n\n### 0.1.1\n - [x] ARK packaging improvement (`v1` and `v2`)\n - [x] LISK packaging improvement (`v09` and `v10`)\n - [x] ARK dynamicFee implementation\n - [x] Network API created\n\n### 0.1.2\n - [x] Packaging improvement\n\n### 0.1.3\n - [x] REST requests header bugfix (ubuntu)\n\n### 0.1.4\n - [x] Python 2.x compatibility fix\n - [x] dposlib.core.Transaction.sign does not set fees anymore\n - [x] dposlib.core.Transaction.finalize set fees before signature\n - [x] dposlib.core.Transaction fee management improved\n\n### 0.1.5\n - [x] compatibility with both ark-core v2 devnet and mainnet\n\n### 0.1.6\n - [x] Ark-core v 2.1.x compatibility\n\n### 0.1.7\n - [x] added `transaction` and `rest` MarkDown documentation files\n - [x] dposlib.core.api is both python 2.x and 3.x compliant\n - [x] added Webhook api (experimental)\n - [x] fee data initialisation improvement\n - [x] transaction broadcasting improvement\n - [x] peer selection improvement\n - [x] Lisk blockchain and forks developpement frozen\n\n### 0.1.8\n - [x] added ark v2.4 compatibility\n - [x] api wallet link using getpass library\n - [x] added ledger nano S support (transaction type 0, 1, 2 & 3)\n - [x] peer selection now checks syncing status\n\n### 0.1.9\n - [x] [travis-ci](https://travis-ci.com) integration\n - [x] dposlib.core.Transaction interface improvement\n - [x] Ark v1 and v2 cross-dependency removed\n - [x] offline work feature added\n\n### 0.2.0\n - [x] ark.v2 api improvement\n - [x] dposlib.util.misc module improvement\n - [x] upVote/downVote bugfix\n\n### 0.2.1\n - [x] added `lisk` blockchain\n - [x] added `shift`, `t.shift` and `qredit` network\n - [x] added .cold data in package distribution\n - [x] transaction types `0`, `1` and `3` added to lisk.v09 network\n - [x] python 2.x compliancy for util.data package\n\n### 0.2.2 \n - [x] Ark v2.5 headers fix\n - [x] Ark v2.5 BigInt fix\n - [x] packaging improvement\n - [x] rest `returnKey` behaviour improvement\n\n### 0.2.3 [current work](https://github.com/Moustikitos/dpos/archive/master.zip)\n\n## TODO\n - [ ] doc writing\n - [ ] unittest\n - [ ] CLI", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/Moustikitos/dpos/archive/master.zip", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Moustikitos/dpos", "keywords": "api,dpos,blockchain", "license": "Copyright 2018, MIT licence", "maintainer": "Toons", "maintainer_email": "moustikitos@gmail.com", "name": "dposlib", "package_url": "https://pypi.org/project/dposlib/", "platform": "", "project_url": "https://pypi.org/project/dposlib/", "project_urls": { "Download": "https://github.com/Moustikitos/dpos/archive/master.zip", "Homepage": "https://github.com/Moustikitos/dpos" }, "release_url": "https://pypi.org/project/dposlib/0.2.2/", "requires_dist": null, "requires_python": "", "summary": "light api compatible with main ARK and LISK forks", "version": "0.2.2" }, "last_serial": 5526406, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "30c5030a73b5036c7bd2bb07a9638ef7", "sha256": "f15e1fae670ba8c40bd00d864b1fd2fc39370fa3e0aa61f85596617640e6b32d" }, "downloads": -1, "filename": "dposlib-0.1.0.tar.gz", "has_sig": false, "md5_digest": "30c5030a73b5036c7bd2bb07a9638ef7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 341236, "upload_time": "2018-08-30T23:58:15", "url": "https://files.pythonhosted.org/packages/71/8c/d46a5b09c9c58f1465c07cf6226a5ae1bb924a92fc97cd51b90e22063195/dposlib-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "eb11340acc251398bee7c3639612ec48", "sha256": "7cce7c3fbb69b3951407602752996bd357354d62655ecd6b77dfccef0bed32db" }, "downloads": -1, "filename": "dposlib-0.1.1.tar.gz", "has_sig": false, "md5_digest": "eb11340acc251398bee7c3639612ec48", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15589, "upload_time": "2018-10-17T17:43:44", "url": "https://files.pythonhosted.org/packages/e2/7d/14d5a08657dd074d1d1806be82a93cd1cab2ec61dc8ea95204aa1c3cb06d/dposlib-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "29037938ddb9329b4c38dd50c506c91e", "sha256": "1a1231dffe9a98ef06af5e8ceeb2401898284a22c2d7b606a890cc7b0b8ea71c" }, "downloads": -1, "filename": "dposlib-0.1.2.tar.gz", "has_sig": false, "md5_digest": "29037938ddb9329b4c38dd50c506c91e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18258, "upload_time": "2018-10-17T20:02:49", "url": "https://files.pythonhosted.org/packages/ec/fa/d3601a1cb9afa7ba674b2b1d0749ee9278ec358c8ff1ac2e6edc229b8143/dposlib-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "7dfe7d091df743fd969c9eb0d6f04093", "sha256": "17870b763840ef407b5a547de50c5dd17a0922669108dd97a6f55ce4019967be" }, "downloads": -1, "filename": "dposlib-0.1.3.tar.gz", "has_sig": false, "md5_digest": "7dfe7d091df743fd969c9eb0d6f04093", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18336, "upload_time": "2018-10-18T07:38:09", "url": "https://files.pythonhosted.org/packages/d7/fd/237884b34b9b5eb76f2ac7f23e8e3e678b5cf129ec37662e54d3591243b9/dposlib-0.1.3.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "6ad82a26afc0dbc717d972501b10d58e", "sha256": "8467a84aa86fc6660089a06d3a39375adefd6693e55b07f144f95c2d0499ed3a" }, "downloads": -1, "filename": "dposlib-0.1.5.tar.gz", "has_sig": false, "md5_digest": "6ad82a26afc0dbc717d972501b10d58e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19919, "upload_time": "2019-01-02T20:15:35", "url": "https://files.pythonhosted.org/packages/e4/79/97b4f2c5f757b92043d01849ac527c7b7b5568e662e6b330da8eea1a813a/dposlib-0.1.5.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "c402bc5b0dda7ceef3e5fb51aaafb3cc", "sha256": "cba67bf481d6b003b9b634ddc2530929750d5840d73c9dfa59cb4f3c537d1704" }, "downloads": -1, "filename": "dposlib-0.1.7.tar.gz", "has_sig": false, "md5_digest": "c402bc5b0dda7ceef3e5fb51aaafb3cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19844, "upload_time": "2019-02-22T22:06:55", "url": "https://files.pythonhosted.org/packages/39/a9/34d80c8b469fb21c91b02bc209d1eb345f4a0ee302ccbd751e7c5e813f12/dposlib-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "36a951d433b7a77dbb1b7fd66572df3c", "sha256": "cf212160dc67d0da4d4b28591ef965cec68fd91d35882fa34a21715ff9f45ebd" }, "downloads": -1, "filename": "dposlib-0.1.8.tar.gz", "has_sig": false, "md5_digest": "36a951d433b7a77dbb1b7fd66572df3c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25469, "upload_time": "2019-05-19T18:23:30", "url": "https://files.pythonhosted.org/packages/f7/ca/b90725874fef9b86442c891fcc886c0bfb0269579c536af2b50e8656672a/dposlib-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "294373bb5083918828610c5eb7bbe913", "sha256": "4cc2c9e73f093f8d494fa3dd49c886efaf293865b02574916f12e542bacc0623" }, "downloads": -1, "filename": "dposlib-0.1.9.tar.gz", "has_sig": false, "md5_digest": "294373bb5083918828610c5eb7bbe913", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29097, "upload_time": "2019-06-06T20:53:33", "url": "https://files.pythonhosted.org/packages/55/97/2a4c3020f2a329ce7763e42fa5f9fa922845b32cf201ba61e19ffefe11d9/dposlib-0.1.9.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "8e5f012da4099c3ad4adb59815ed11ab", "sha256": "36a3a02316acc19ab5a5f1e236a67125310e43ca303942a01fde54453f337ace" }, "downloads": -1, "filename": "dposlib-0.2.0.tar.gz", "has_sig": false, "md5_digest": "8e5f012da4099c3ad4adb59815ed11ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29210, "upload_time": "2019-06-08T14:47:25", "url": "https://files.pythonhosted.org/packages/b6/e4/341e66927c13e1846fe68e3fb2394614d6462f0548f05cbca2bd275a7d00/dposlib-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "a916edbd3f457ef025a565655e6b54c5", "sha256": "1bedc66e50949364a32d770d953e884d5d88a5ea935602296044a4a9a5cf17eb" }, "downloads": -1, "filename": "dposlib-0.2.1.tar.gz", "has_sig": false, "md5_digest": "a916edbd3f457ef025a565655e6b54c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36444, "upload_time": "2019-06-13T19:41:46", "url": "https://files.pythonhosted.org/packages/5e/44/aca201318ca4712fd28866b81a5704320a3715130f706fe1b4dda47547ae/dposlib-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "5b4ea329d3fb93cff7aa991000d98e97", "sha256": "919efa83a38d5e36ca642b21c1acb3987f5308dea98153147680cc78f0992d1c" }, "downloads": -1, "filename": "dposlib-0.2.20.tar.gz", "has_sig": false, "md5_digest": "5b4ea329d3fb93cff7aa991000d98e97", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36820, "upload_time": "2019-07-13T08:29:34", "url": "https://files.pythonhosted.org/packages/5e/88/bda718fb93c5cabad3f7fda915ee19d82ca7f5e5164eeb80dce95e3b479c/dposlib-0.2.20.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5b4ea329d3fb93cff7aa991000d98e97", "sha256": "919efa83a38d5e36ca642b21c1acb3987f5308dea98153147680cc78f0992d1c" }, "downloads": -1, "filename": "dposlib-0.2.20.tar.gz", "has_sig": false, "md5_digest": "5b4ea329d3fb93cff7aa991000d98e97", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36820, "upload_time": "2019-07-13T08:29:34", "url": "https://files.pythonhosted.org/packages/5e/88/bda718fb93c5cabad3f7fda915ee19d82ca7f5e5164eeb80dce95e3b479c/dposlib-0.2.20.tar.gz" } ] }