Skip to main content

Vega API client for gRPC and REST

Project description

Vega API client

Python tests

This is the Vega API client, which talks to a Vega node using gRPC, and to a Vega Wallet server using REST.

Disclaimer

This is a community effort. It is not supported by Vega, nor is it guaranteed to be up to date or compatible with new Vega releases.

Examples

Connect to a Vega Wallet server

The methods of WalletClient each return a plain requests.Response object. See Python requests for details.

import vegaapiclient as vac

walletclient = vac.WalletClient("https://wallet.example.com")

wname = "my_vega_wallet"
wpass = "supersecret_passphrase"

# If this is your first time: create a new wallet.
response = walletclient.create(wname, wpass)
assert response.status_code == 200

# If this is *not* your first time: log in to an existing wallet.
response = walletclient.login(wname, wpass)
assert response.status_code == 200

# If you don't already have a keypair, generate one.
response = walletclient.generatekey(wpass, [])
assert response.status_code == 200
# Print key information. Note that the private key is *not* returned.
print("Key: {}".format(response.json()["key"]))

# List keypairs
response = walletclient.listkeys()
assert response.status_code == 200
for key in response.json()["keys"]:
    print("Key: {}".format(key))

myPubKey = "1122aabb..."  # hex-encoded public key

# Get one keypair
response = walletclient.getkey(myPubKey)
assert response.status_code == 200
print("Key: {}".format(response.json()["key"]))

# Sign a transaction
blob = b"data returned from a Vega node 'Prepare' call"
tx = base64.b64encode(blob).decode("ascii")
response = walletclient.signtx(tx, myPubKey)
assert response.status_code == 200
print("Signed tx: {}".format(response.json()["signedTx"]))

# When finished with the wallet, log out.
response = walletclient.logout()
assert response.status_code == 200

Connect to a Vega node

In order to interact with a Vega node, create:

  • VegaTradingClient: for trading, e.g. submitting, amending, cancelling orders
  • VegaTradingDataClient: for accessing public data
import vegaapiclient as vac

# Create client for accessing public data
datacli = vac.VegaTradingDataClient("veganode.example.com:1234")

# Create client for trading (e.g. submitting orders)
tradingcli = vac.VegaTradingClient("veganode.example.com:1234")

Get market data

from google.protobuf.empty_pb2 import Empty
import vegaapiclient as vac

# Create client for accessing public data
datacli = vac.VegaTradingDataClient("veganode.example.com:1234")

# Get a list of markets
markets = datacli.Markets(Empty()).markets
print("{}".format(markets))

# Get a specific market by ID
req = vac.grpc.api.trading.MarketByIDRequest(marketID="MARKETID")
market = datacli.MarketByID(req)
print("{}: {}".format(market.id, market.name))

Submit a signed SubmitOrder transaction

The flow to submit a signed transaction to a Vega node is as follows:

  1. Wallet server: Create a new wallet, or log in to an existing one.
  2. Wallet server: Create a keypair, if one has not already been created.
  3. Vega node: Call PrepareSubmitOrder. Send the order details. Receive a PreparedOrder object.
  4. Wallet server: Call SignTx. Send the PreparedOrder object and a public key associated with the logged-in wallet. Receive a SignedBundle object.
  5. Vega node: Call SubmitTransaction. Send the SignedBundle object.
import base64, binascii
import vegaapiclient as vac

# Vega node: Create client for trading (e.g. submitting orders)
tradingcli = vac.VegaTradingClient(nodeurl)

# Wallet server: Create a walletclient (see above for details)
walletclient = vac.WalletClient(walleturl)
walletclient.login(wallet_name, wallet_passphrase)

marketID = "MARKETID"
myPubKey = "1122aabb..."

# Vega node: Prepare the SubmitOrder
order = vac.grpc.api.trading.SubmitOrderRequest(
    submission=vac.grpc.vega.OrderSubmission(
        marketID=marketID,
        partyID=myPubKey,
        # price is an integer. For example 123456 is a price of 1.23456,
        # assuming 5 decimal places.
        price=100000,
        side=vac.grpc.vega.Side.Buy,
        size=100,
        timeInForce=vac.grpc.vega.Order.TimeInForce.GTC,
        type=vac.grpc.vega.Order.Type.LIMIT
    )
)
response = tradingcli.PrepareSubmitOrder(order)

# Wallet server: Sign the prepared transaction
blob_base64 = base64.b64encode(response.blob).decode("ascii")
response = walletclient.signtx(blob_base64, myPubKey)
assert response.status_code == 200
signedTx = response.json()["signedTx"]

# Vega node: Submit the signed transaction
request = vac.grpc.api.trading.SubmitTransactionRequest(
    tx=vac.grpc.vega.SignedBundle(
        data=base64.b64decode(signedTx["data"]),
        sig=base64.b64decode(signedTx["sig"]),
        pubKey=binascii.unhexlify(signedTx["pubKey"])
    )
)
response = tradingcli.SubmitTransaction(request)
assert response.success

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Vega API client-0.0.17.tar.gz (42.3 kB view details)

Uploaded Source

Built Distribution

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

Vega_API_client-0.0.17-py3-none-any.whl (53.2 kB view details)

Uploaded Python 3

File details

Details for the file Vega API client-0.0.17.tar.gz.

File metadata

  • Download URL: Vega API client-0.0.17.tar.gz
  • Upload date:
  • Size: 42.3 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.44.1 CPython/3.6.9

File hashes

Hashes for Vega API client-0.0.17.tar.gz
Algorithm Hash digest
SHA256 8c5c47aef5c97b4f8fa0a9ebe52d5711bb49f837352ea2103ec1dcf2c5644f7c
MD5 a916d104555ef310dd30144f4156ce1a
BLAKE2b-256 4a861406bc1d1e524ad6c3530ffd4c12865ebffd41c86ca423a947ea46ae1b67

See more details on using hashes here.

File details

Details for the file Vega_API_client-0.0.17-py3-none-any.whl.

File metadata

  • Download URL: Vega_API_client-0.0.17-py3-none-any.whl
  • Upload date:
  • Size: 53.2 kB
  • Tags: 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.44.1 CPython/3.6.9

File hashes

Hashes for Vega_API_client-0.0.17-py3-none-any.whl
Algorithm Hash digest
SHA256 837680a05ff6ba759fe45b5b23529fff7959a2ba75bfe856676044e61d7d965e
MD5 fb701dd35f3eec87abaa42ab317afc06
BLAKE2b-256 7980c0290334f7e215a46588dd82a2be79e7146ded0bd04b6aa5091331b6da6b

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