scottliyq / PyPerp

Python SDK for Perpetual Protocol

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

PyPerp

A python SDK for Perpetual Protocol.

Installation

From PyPi:

pip install pyperp

Documentation

The complete documentation is available here

Example Code

This example code is written to demonstrate simple trading on Optimism Kovan.

Create an ApiProvider object

from eth_account import Account
from pyperp.providers import OptimismKovanProvider

account = Account.from_key('<PRIVATE_KEY_HERE>')
provider = OptimismKovanProvider(
  '<RPC_ENDPOINT_URL>',
  account
)

Approve Vault to use USDC

from pyperp.contracts import Vault
from pyperp.common.types import GasParams

gas_params = GasParams(
  gas=1000000,
  gas_price=100000
)

vault = Vault(provider)

receipt = vault.approve_vault_to_use_usdc(
  gas_params
)

deposit USDC to vault

receipt = vault.deposit(
  vault.usdc.address,
  10000000000,
  gas_params
)

Vault.deposit() takes the following positional arguments:

token: contract address of collateral token

amount: amount of token to deposit

gas_params: GasParams object denoting gas paramateres.

check how much collateral can be withdrawn

print(
  vault.get_free_collateral(
    account.address
  )
)

withdraw from vault

receipt = vault.withdraw(
  vault.usdc.address,
  <AMOUNT_HERE>,
  gas_params
)

open a position

You can open a position for either vBTC or vETH. In this example we will open a position for vBTC

from pyperp.contracts import ClearingHouse
from pyperp.contracts.types import OpenPositionParams
from pyperp.commom.utils import getDeadline

clearing_house = ClearingHouse(provider)

params = OpenPositionParams(
  base_token = clearing_house.vbtc.address,
  is_base_to_quote = True,
  is_exact_input = True,
  amount = int(0.002*10**18),
  opposite_amount_bound = 0,
  deadline = getDeadline(120), #deadline is 120 secs from now
  sqrt_price_limit_x96 = 0
)

receipt = clearing_house.open_position(
  params, gas_params
)

get account value

print(
  clearing_house.get_account_value(account.address)
)

Close Position

from pyperp.contract.types import ClosePositionParams

params = ClosePositionParams(
  base_token=clearing_house.vbtc.address,
  sqrt_price_limit_x96=0,
  oppposite_amount_bound=0,
  deadline=getDeadline(120)
)

receipt = clearing_house.close_position(
  params, gas_params
)

About

Python SDK for Perpetual Protocol

License:MIT License


Languages

Language:Python 100.0%