dposlib
package aims to provide a simple API to any blockchain.
Buy Ѧ and:
- Send Ѧ to
AUahWfkfr5J4tYakugRbfow7RWVTK35GPW
- Vote
arky
on Ark blockchain and earn Ѧ weekly
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
Network | Ark | Solar | Compendia |
---|---|---|---|
mainnet | ark |
sxp |
nos |
testnet | - | tsxp |
- |
devnet | dark |
- | dnos |
>>> 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'
>>> 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': []}}
>>> 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}
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"
}
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]
1.1.0 current work
- added
dposlib.cmd.send
script - added
dposlib-send
standalone package - minor fixes on
net
,builders.v2
andbuilder.v3
modules - implemented
solar-core v3
new transactions
- removed python 2.x compliancy
- removed
pytz
dependency - added
solar
testnet and mainnet -
pySecp256k1
replaced bycSecp256k1
-
bip340
schnorr signature implemented -
solar
transactionv3
implemented - ark package simplification
-
ark.api.Webhook
improvement -
multiVote
moved toswitchVote
- 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
topydoc-markdown
doc builder
Older releases…
- removed
requests
dependency - multisignature api and app run as system services
- offline start fixed
-
api.Wallet
fixed - added pythonic
datetime
attribute toTransaction
class
- better
vendorFieldHex
field handling -
dposlib.blockchain.Transaction
behaviour improvement - tx versioning defined in
net
module - bridge for ark-core 2.5 and 2.6
- multisignature client-server api
-
flake8
compliancy - Ark 2.6 compatibility
- removed package resources dependencies
-
ecdsa
lib replaced by builtinsecp256k1
- added Iop mainnet and devnet
- Lisk and forks dev stopped
-
ldgr
import now optional - sphinx doc added
- Ark v2.5 headers fix
- Ark v2.5 BigInt fix
- packaging improvement
- rest
returnKey
behaviour improvement
- added
lisk
blockchain - added
shift
,t.shift
andqredit
network - added .cold data in package distribution
- transaction types
0
,1
and3
added to lisk.v09 network - python 2.x compliancy for util.data package
- ark.v2 api improvement
- dposlib.util.misc module improvement
- upVote/downVote bugfix
- travis-ci integration
- dposlib.core.Transaction interface improvement
- Ark v1 and v2 cross-dependency removed
- offline work feature added
- 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
- added
transaction
andrest
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
- Ark-core v 2.1.x compatibility
- compatibility with both ark-core v2 devnet and mainnet
- 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
- REST requests header bugfix (ubuntu)
- Packaging improvement
- ARK packaging improvement (
v1
andv2
) - LISK packaging improvement (
v09
andv10
) - ARK dynamicFee implementation
- Network API created
- First rebrand