Skip to main content

The official Python SDK for VSYS APIs

Project description

py-vsys

Python License

Under active maintenance. Contributions are always welcome!

The official Python SDK for VSYS APIs. The old Python SDK is deprecated and will be archived soon.

Installation

Pip

Install from PYPI

pip install py-vsys

Install from Github

pip install git+https://github.com/virtualeconomy/py-vsys.git

Pipenv

Install from PYPI

pipenv install py-vsys

Install from Github

pipenv install git+https://github.com/virtualeconomy/py-vsys.git#egg=py_vsys

Quick Example

import asyncio
import py_vsys as pv

# The RESTful API host address to a node in a public test net
HOST = "http://veldidina.vos.systems:9928"
# A test net wallet seed
SEED = ""


def print_heading(msg: str) -> None:
    print("=" * 10, f"{msg}", "=" * 10)


async def main():
    print_heading("Try out NodeAPI")
    # NodeAPI is the wrapper for RESTful APIs
    api: pv.NodeAPI = await pv.NodeAPI.new(HOST)
    # GET /blocks/last
    print(await api.blocks.get_height())
    # GET /node/version
    print(await api.node.get_version())

    print_heading("Try out Chain")
    # Chain represents the chain itself
    chain: pv.Chain = pv.Chain(api)
    # Get chain's height
    print("Height: ", await chain.height)
    # Get chain's last block
    print("Last blcok:\n", await chain.last_block)

    print_heading("Try out Account")
    # Account represents an account in the net
    wallet: pv.Wallet = pv.Wallet.from_seed_str(SEED)
    acnt: pv.Account = wallet.get_account(chain, nonce=0)
    # Get the account's balance
    print("Balance:", await acnt.bal)
    # Get the account's nonce'
    print("Nonce:", acnt.nonce)
    # Get the account's public key
    print("Public key: ", acnt.key_pair.pub)
    # Get the account's private key
    print("Private key:", acnt.key_pair.pri)
    # Get the account's address
    print("Account address:", acnt.addr)

    print_heading("Try out Smart Contract")
    ctrt_id = "CFB6zvcy39FCRGhxo8HH3PE6zZEG5zXevhG"
    ctrt: pv.NFTCtrt = pv.NFTCtrt(ctrt_id, chain)
    # Get the contract's maker
    print("Maker:", await ctrt.maker)
    # Get the contract's issuer
    print("Issuer:", await ctrt.issuer)
    # Get the contract's ID
    print("Contract id: ", ctrt.ctrt_id)

    await api.sess.close()


if __name__ == "__main__":
    asyncio.run(main())

Example output

========== Try out NodeAPI ==========
{'height': 1294386}
{'version': 'VSYS Core v0.4.1'}
========== Try out Chain ==========
Height:  1294386
Last blcok:
 {'version': 1, 'timestamp': 1646617122022012339, 'reference': '5iCNrcmHAd7ksnsKbt793DbyeRhheNLuxqzo1CRspYrkPL1oXcqSwb3jdEb5nKra9XFvnqPXHS4R6fsRzEdqDFwx', 'SPOSConsensus': {'mintTime': 1646617122000000000, 'mintBalance': 50097894873482088}, 'resourcePricingData': {'computation': 0, 'storage': 0, 'memory': 0, 'randomIO': 0, 'sequentialIO': 0}, 'TransactionMerkleRoot': 'gSDLiXotSAb8iTqZynm13syWGEg2t22sqxsnExLZwLA', 'transactions': [{'type': 5, 'id': 'FE4gbQwmg8cUPHeEmbiGH4HdjD7d7GN1Y6Xvhv4AQsu4', 'recipient': 'ATxtBDygMvWtvh9xJaGQn5MdaHsbuQxbjiG', 'timestamp': 1646617122022012339, 'amount': 900000000, 'currentBlockHeight': 1294386, 'status': 'Success', 'feeCharged': 0}], 'generator': 'ATxtBDygMvWtvh9xJaGQn5MdaHsbuQxbjiG', 'signature': '4Q9LwLEJgQmUv5iQqWbt1ScDBYyNq1d3KcZUdUvEbUNsH3zJmdvRg4BvAVoBrb82NGLTrX8pPwpWMCseWraGbi5u', 'fee': 0, 'blocksize': 330, 'height': 1294386, 'transaction count': 1}
========== Try out Account ==========
Balance: VSYS(4867193229105012)
Nonce: Nonce(0)
Public key:  PubKey(6gmM7UxzUyRJXidy2DpXXMvrPqEF9hR1eAqsmh33J6eL)
Private key: PriKey(BHpnszuqFHXuwesGbvrozYpevZiMsL29vLvud1zScqEK)
Account address: Addr(AU6BNRK34SLuc27evpzJbAswB6ntHV2hmjD)
========== Try out Smart Contract ==========
Maker: Addr(AU6BNRK34SLuc27evpzJbAswB6ntHV2hmjD)
Issuer: Addr(AU6BNRK34SLuc27evpzJbAswB6ntHV2hmjD)
Contract id:  CtrtID(CFB6zvcy39FCRGhxo8HH3PE6zZEG5zXevhG)

Docs

Account & Wallet

Chain & API

Smart Contracts

Run Tests

Functional Tests

Functional tests are scripts that simulate the behaviour of a normal user to interact wtih py_vsys(e.g. register a smart contract & call functions of it).

To run it, ensure that you have pytest properly installed(it is a development dependency of py_vsys and can be installed via pipenv install -d).

NOTE that the test environment defined as global variables in conftest.py has to be configured through environment vairables before the test cases can be executed.

Then go to the root of the of the project and run.

python -m pytest -v test/func_test

The above command will test each aspect(e.g. function send of NFT contract) individually and have required resources set up before testing(e.g. register a new contract, issue a token, etc). It's good for testing a specific aspect while it might consume too much resources to test every aspect in this way.

To test as a whole, use the whole marker like below.

python -m pytest -v test/func_test -m whole

Take NFT contract for an example, it will register a contract first and then execute functions like send, transfer, deposit, etc in a pre-orchestrated manner so that some common set up(e.g. register a contract) will be done only once.

To run a single test, say method test_pay of class TestAccount, run

python -m pytest -v test/func_test/test_acnt.py::TestAccount::test_pay

Logging

Logging for py-vsys is supported by loguru and is disabled by default. To enable it, add the following to your codes.

from loguru import logger
logger.enable("py_vsys")

Contributing

Contributions are always welcome!

See the development documentation for more details and please adhere to conventions mentioned in it.

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

py-vsys-0.1.5.tar.gz (115.1 kB view details)

Uploaded Source

Built Distribution

py_vsys-0.1.5-py3-none-any.whl (132.7 kB view details)

Uploaded Python 3

File details

Details for the file py-vsys-0.1.5.tar.gz.

File metadata

  • Download URL: py-vsys-0.1.5.tar.gz
  • Upload date:
  • Size: 115.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.9.7

File hashes

Hashes for py-vsys-0.1.5.tar.gz
Algorithm Hash digest
SHA256 677091883f835ac67e7db7e34833a7ad88dc17bae58f2c070f6f65e3a8b557bd
MD5 f24e1a99e04fb6d370e12d398a7549a5
BLAKE2b-256 f5b8d619458fa43261bdfe7abda6072265208d56d9c3c467b58cb9975b9ec1bd

See more details on using hashes here.

File details

Details for the file py_vsys-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: py_vsys-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 132.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.9.7

File hashes

Hashes for py_vsys-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 36e7a7ecd7c5231094d48133f94ca30f38410de9b8fd798f419a23cc75774f6d
MD5 eeb7d769622c543884551bc76e18db3d
BLAKE2b-256 e56a39848a6d2ce8e051c9c88003b3cdc120381adf246aff410751021b60ceac

See more details on using hashes here.

Supported by

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