Skip to main content

A JSON RPC client for the Witnet Protocol.

Project description

witpy

Build Status

witpy is a library for interfacing with the Witnet protocol. ( See Witnet.io for more information )

Built on top of websockets and jsonrpcclient, it provides an easy way to automate wallet operations by node operators and any one else who might find it useful.

Quick Install:

> pip install witpy

Consider using virtualenv:

> sudo apt-get install virtualenv
> virtualenv env
> source env/bin/activate
(env) > pip install witpy

Usage:

Must have a Witnet node and wallet server running. See the Github for more information.

The WalletClient is a singleton and can be retrieved by:

from witpy.wallet.client import WalletClient as  witnet

client = witnet.socket(url='127.0.0.1', port=11212)

All the functions in witpy/wallet/client.py act as a direct passthrough of the json-rpc API provided by the Witnet wallet server. The json-rpc "method": is called as a client function with the "params": being keyword arguments **kwargs. It returns the raw json-rpc response from the wallet server.

# Some useful methods

client.create_mnemonics(length=12)
client.create_wallet(name='testnet', caption='witpy', password='secret', seed_source='mnemonics', seed_data='mnemonic word phrase')
client.get_wallet_infos()

client.unlock_wallet(wallet_id=wallet_id, session_id=session_id)
client.lock_wallet(wallet_id=wallet_id, session_id=session_id)

client.generate_address(wallet_id=wallet_id, session_id=session_id)
client.get_addresses(wallet_id=wallet_id, session_id=session_id, offset=0, limit=0)

client.create_vtt(wallet_id=wallet_id, session_id=session_id, address='', amount=1, fee=1, time_lock=0)
client.get_block_chain(epoch=-1, limit=1)

An example of requests:

from witpy.wallet.client import WalletClient as  witnet
from witpy.transactions.data_request import DataRequest as Request
from witpy.transactions.rad_request import RadRequest

from witpy.radon.types import FILTERS, REDUCERS, TYPES
from witpy.radon.script import Script, Source, Aggregator, Tally, cbor_to_radon, radon_to_cbor, method_from_script

import json

wallet_id = 'my-wallet-id'
session_id = client.unlock_wallet(wallet_id=wallet_id, password='secret')['session_id']

# 
client = WalletClient.socket('127.0.0.1', port=11212)

# Source 1
bitstamp = Source('https://www.bitstamp.net/api/ticker/')
bitstamp.parse_map_json().get_float('last').round()
# Source 2
blockchain = Source('https://blockchain.info/ticker')
blockchain.parse_map_json().get_map('USD').get_float('last').multiply(1000).round()
# Source 3
coindesk = Source('https://api.coindesk.com/v1/bpi/currentprice.json')
coindesk.parse_map_json().get_map('bpi').get_map('USD').get_float('rate_float').multiply(1000).round()


# Set aggregator and Tally
aggregator = Aggregator(filters=[[witnet.FILTERS.deviation_standard, 1.5]], reducer=REDUCERS.average_mean)
tally = Tally(filters=[[FILTERS.deviation_standard, 1]], reducer=REDUCERS.average_mean)

# Test Radon
rad_request = RadRequest().add_source(bitstamp).add_source(blockchain).add_source(coindesk)
rad_request.set_aggregate(aggregator).set_tally(tally)
rad = client.run_rad_request(rad_request=rad_request.to_json())
print(rad)

# Test Data Request
data_request = Request().add_source(bitstamp).add_source(blockchain).add_source(coindesk)
data_request.set_aggregate(aggregator).set_tally(tally)
data_request.set_quorum(5, 5, 2, 2, 51).set_fees(1, 1, 1, 1).set_collateral(1000000000).schedule(0)
print(data_request.as_json())

# Create and Send Transaction
trx = client.create_data_request(wallet_id=wallet_id, session_id=session_id, request=data_request.to_json(), fee=1)

# Save the transaction to a json file as a backup
with open('data/trx.json', 'w') as outfile:
    json.dump(trx, outfile)

print(trx['transaction'])

# The hash of the data request used to lookup
print(trx['transaction_id']) 

resp = client.send_transaction(wallet_id=wallet_id, session_id=session_id, transaction=trx['transaction'])
print(resp)

Disclaimer:*

witpy is provided on an "as is" basis without any warranties of any kind regarding any content, data, materials and/or services provided by this library. In no event shall the owners of, or contributors to, witpy be liable for any damages of any kind, including, but not limited to, loss of use, loss of profits, or loss of data arising out of or in any way connected with the use of the witpy library.

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

witpy-0.8.2.tar.gz (45.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

witpy-0.8.2-py2.py3-none-any.whl (45.0 kB view details)

Uploaded Python 2Python 3

File details

Details for the file witpy-0.8.2.tar.gz.

File metadata

  • Download URL: witpy-0.8.2.tar.gz
  • Upload date:
  • Size: 45.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.0

File hashes

Hashes for witpy-0.8.2.tar.gz
Algorithm Hash digest
SHA256 7eaee35e1d79568e95302a0147d521904ad6452c80268395aa31bca2ded14e24
MD5 a219c241221fade21e5789bf3cd3efb2
BLAKE2b-256 6ad928a43768790c326c5d9d937c4aaa4c5e13fb70be763426f93147f1691042

See more details on using hashes here.

File details

Details for the file witpy-0.8.2-py2.py3-none-any.whl.

File metadata

  • Download URL: witpy-0.8.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 45.0 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.0

File hashes

Hashes for witpy-0.8.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 d2fdf778569d53f3e53803abf3889be6716c0895794164844952894e2be0a9cb
MD5 223ffd8b63f14bc05cb5095145076bbd
BLAKE2b-256 982304e5e6c9fbc297e4ad6e6bd0a18fa0ad5d4a9d830b2b29e77ce3e5dcaaa6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page