A python SDK for Perpetual Protocol.
From PyPi:
pip install pyperp
The complete documentation is available here
This example code is written to demonstrate simple trading on Optimism Kovan.
from eth_account import Account
from pyperp.providers import OptimismKovanProvider
account = Account.from_key('<PRIVATE_KEY_HERE>')
provider = OptimismKovanProvider(
'<RPC_ENDPOINT_URL>',
account
)
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
)
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.
print(
vault.get_free_collateral(
account.address
)
)
receipt = vault.withdraw(
vault.usdc.address,
<AMOUNT_HERE>,
gas_params
)
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
)
print(
clearing_house.get_account_value(account.address)
)
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
)