Skip to main content

Python sdk to interact with Rysk v12

Project description

Rysk V12 Python SDK

Python wrapper for ryskV12 cli

Setup

  1. Ensure Python 3.11+ is installed.
  2. Install the required dependencies:
    poetry add ryskV12
    
  3. Download the ryskV12 CLI:
    ./client/scripts/fetch_latest_release.sh
    
    This automatically pulls the latest release of ryskV12 cli. If that is not the case please navigate to https://github.com/rysk-finance/ryskV12-cli/releases/latest and download the latest release in this directory as ryskV12.

Run

Instantiation

from ryskV12.client import Rysk, Env

private_key = "YOUR_PRIVATE_KEY"
env = Env.TESTNET 
rysk_sdk = Rysk(env=env, private_key=private_key, v12_cli_path="./ryskV12")  # Optional CLI path

Create a Connection

async def stream_reader(stream, callback):
    if stream and callback:
        while True:
            line = await stream.readline()
            if not line:
                break
            callback(line)

def response_handler(response: string):
    print(f"Received response: {response.strip()}")


channel_id = "rfqs_listener"
uri = "/rfqs/0x..."  # Example websocket endpoint (replace with actual asset address)

proc = rysk_sdk.execute_async(rysk_sdk.connect_args(channel_id, uri), response_handler)
asyncio.run(stream_reader(proc.stdout, response_handler))

Approve USDC Spending

chain_id = 84532
amount = "1000000"
rpc_url= "https://rpc..."

proc = rysk_sdk.execute(rysk_sdk.approve_args(chain_id, amount, rpc_url))

List USDC Balances

maker_channel = "maker-channel"
account = "0xabc"

proc = rysk_sdk.execute(rysk_sdk.balances_args(maker_channel, account))

Deposit / Withdraw

from models import Transfer

maker_channel = "maker-channel"
transfer_details = Transfer(
    amout="500000",
    asset="0x...",  # The asset address
    chain_id=84532,
    is_deposit=True,
    nonce="some-unique-nonce",
)
proc = rysk_sdk.execute(rysk_sdk.transfer_args(maker_channel, transfer_details))

List Positions

maker_channel = "maker-channel"
account = "0xabc"

proc = rysk_sdk.execute(rysk_sdk.positions_args(maker_channel, account))

Send a Quote

from models import Quote

maker_channel = "maker-channel"
request_id = "some-uuid-from-server"
quote_details = Quote(
    assetAddress="0x...",
    chainId=84532,
    expiry=1678886400,
    isPut=False,
    isTakerBuy=True,
    maker="0x...",
    nonce="another-unique-nonce",
    price="0.01",
    quantity="1",
    strike="1000000",
    validUntil=1678886460,
)

proc = rysk_sdk.execute(rysk_sdk.quote_args(maker_channel, request_id, quote_details))

Example

import asyncio
import json
import time
from ryskV12.models import Quote, is_json_rpc_response, is_request
from ryskV12.client import Rysk, Env

private_key = ""
public_address = ""
asset = "0xb67bfa7b488df4f2efa874f4e59242e9130ae61f"

async def process_rfqs():
    rysk_sdk = Rysk(env=Env.TESTNET, private_key=private_key)
    maker_chan = "maker__py"
    rfq_chan = f'{asset}__py'
    try:
        asyncio.create_task(rysk_sdk.execute_async(rysk_sdk.connect_args(maker_chan, "maker")))

        def process_rfq(payload: bytes):
            # payload = str(payload)
            print(payload)
            if payload == b'\n':
                return
            try:
                data = json.loads(payload)
                if is_json_rpc_response(data):
                    request_id = data["id"]
                    result = data["result"]
                    if is_request(result):
                        quote = Quote(
                            result["asset"],
                            result["chainId"],
                            result["expiry"],
                            result["isPut"],
                            False,
                            public_address,
                            str(int(time.time() * 1000)),
                            "1000000000",
                            result["quantity"],
                            result["strike"],
                            int(time.time()) + 30,
                        )
                        proc = rysk_sdk.execute(rysk_sdk.quote_args(maker_chan, request_id, quote))

                        print(proc.stdout.readlines())
                        print(proc.stderr.readlines())

            except Exception as e:
                print("error")
                print(e)

        await rysk_sdk.execute_async(rysk_sdk.connect_args(rfq_chan, "rfqs/0xb67bfa7b488df4f2efa874f4e59242e9130ae61f"), process_rfq)
    except Exception as e:
        print(e)
    finally:
        rysk_sdk.execute(rysk_sdk.disconnect(maker_chan))
        rysk_sdk.execute(rysk_sdk.disconnect(rfq_chan))


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

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

ryskv12-1.0.2.tar.gz (5.7 kB view details)

Uploaded Source

Built Distribution

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

ryskv12-1.0.2-py3-none-any.whl (6.6 kB view details)

Uploaded Python 3

File details

Details for the file ryskv12-1.0.2.tar.gz.

File metadata

  • Download URL: ryskv12-1.0.2.tar.gz
  • Upload date:
  • Size: 5.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.9.6 Darwin/23.3.0

File hashes

Hashes for ryskv12-1.0.2.tar.gz
Algorithm Hash digest
SHA256 73a87d417170f2f9c1d5b7acafab4fb9dbb09da78237283d56f639267ae59616
MD5 10dc1352330fbdeea0fbecdb5a941440
BLAKE2b-256 4b973e980c2a740a45eb43bdbe7254504ab3f2259439173b5a6f26aa2d10d0d8

See more details on using hashes here.

File details

Details for the file ryskv12-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: ryskv12-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 6.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.9.6 Darwin/23.3.0

File hashes

Hashes for ryskv12-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b36a18859447e49e8b2f9191d79b30e59adaf20039e37c9eaa8aa1fd8b94560c
MD5 0505690b0e4ab1a8bd3df2a49f8c1531
BLAKE2b-256 77cff965dc0b266e07a98b35ff50ba05b59e9c6be542a482f4b658a954f76f37

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