293 lines
7.5 KiB
Python
293 lines
7.5 KiB
Python
from vega_sim.service import VegaService
|
|
from actions.vega import submit_multiple_orders, submit_order, submit_liquidity
|
|
from wallet_config import MM_WALLET, MM_WALLET2, TERMINATE_WALLET, wallets
|
|
import logging
|
|
|
|
logger = logging.getLogger()
|
|
|
|
mint_amount: float = 10e5
|
|
market_name = "BTC:DAI_2023"
|
|
|
|
default_sell_orders = [[1, 110], [1, 105]]
|
|
default_buy_orders = [[1, 90], [1, 95]]
|
|
|
|
|
|
def setup_simple_market(
|
|
vega: VegaService,
|
|
approve_proposal=True,
|
|
custom_market_name=market_name,
|
|
custom_asset_name="tDAI",
|
|
custom_asset_symbol="tDAI",
|
|
custom_quantum=1,
|
|
):
|
|
for wallet in wallets:
|
|
vega.create_key(wallet.name)
|
|
|
|
vega.mint(
|
|
MM_WALLET.name,
|
|
asset="VOTE",
|
|
amount=mint_amount,
|
|
)
|
|
|
|
vega.update_network_parameter(
|
|
MM_WALLET.name, parameter="market.fee.factors.makerFee", new_value="0.1"
|
|
)
|
|
vega.forward("10s")
|
|
vega.wait_fn(1)
|
|
vega.wait_for_total_catchup()
|
|
|
|
vega.create_asset(
|
|
MM_WALLET.name,
|
|
name=custom_asset_name,
|
|
symbol=custom_asset_symbol,
|
|
decimals=5,
|
|
max_faucet_amount=1e10,
|
|
quantum=custom_quantum,
|
|
)
|
|
vega.wait_fn(1)
|
|
vega.wait_for_total_catchup()
|
|
tdai_id = vega.find_asset_id(symbol=custom_asset_symbol)
|
|
logger.info(f"Created asset: {custom_asset_symbol}")
|
|
|
|
vega.mint(
|
|
"Key 1",
|
|
asset=tdai_id,
|
|
amount=mint_amount,
|
|
)
|
|
|
|
vega.mint(
|
|
MM_WALLET.name,
|
|
asset=tdai_id,
|
|
amount=mint_amount,
|
|
)
|
|
|
|
vega.mint(
|
|
MM_WALLET2.name,
|
|
asset=tdai_id,
|
|
amount=mint_amount,
|
|
)
|
|
vega.wait_fn(1)
|
|
vega.wait_for_total_catchup()
|
|
|
|
market_id = vega.create_simple_market(
|
|
custom_market_name,
|
|
proposal_key=MM_WALLET.name,
|
|
settlement_asset_id=tdai_id,
|
|
termination_key=TERMINATE_WALLET.name,
|
|
market_decimals=5,
|
|
approve_proposal=approve_proposal,
|
|
forward_time_to_enactment=approve_proposal,
|
|
)
|
|
|
|
vega.forward("10s")
|
|
vega.wait_fn(1)
|
|
vega.wait_for_total_catchup()
|
|
|
|
return market_id
|
|
|
|
|
|
def setup_simple_successor_market(
|
|
vega: VegaService, parent_market_id, tdai_id, market_name, approve_proposal=True
|
|
):
|
|
market_id = vega.create_simple_market(
|
|
market_name,
|
|
proposal_key=MM_WALLET.name,
|
|
settlement_asset_id=tdai_id,
|
|
termination_key=MM_WALLET2.name,
|
|
market_decimals=5,
|
|
approve_proposal=approve_proposal,
|
|
forward_time_to_enactment=approve_proposal,
|
|
parent_market_id=parent_market_id,
|
|
parent_market_insurance_pool_fraction=0.5,
|
|
)
|
|
submit_liquidity(vega, MM_WALLET.name, market_id)
|
|
submit_multiple_orders(
|
|
vega, MM_WALLET.name, market_id, "SIDE_SELL", [[1, 110], [1, 105]]
|
|
)
|
|
submit_multiple_orders(
|
|
vega, MM_WALLET2.name, market_id, "SIDE_BUY", [[1, 90], [1, 95]]
|
|
)
|
|
|
|
submit_order(vega, "Key 1", market_id, "SIDE_BUY", 1, 110)
|
|
|
|
vega.forward("10s")
|
|
vega.wait_fn(1)
|
|
vega.wait_for_total_catchup()
|
|
|
|
return market_id
|
|
|
|
|
|
def setup_opening_auction_market(
|
|
vega: VegaService,
|
|
market_id: str = None,
|
|
buy_orders=default_buy_orders,
|
|
sell_orders=default_sell_orders,
|
|
add_liquidity=True,
|
|
custom_market_name="BTC:DAI_2023",
|
|
custom_asset_name="tDAI",
|
|
custom_asset_symbol="tDAI",
|
|
**kwargs,
|
|
):
|
|
if not market_exists(vega, market_id):
|
|
market_id = setup_simple_market(
|
|
vega,
|
|
custom_market_name=custom_market_name,
|
|
custom_asset_name=custom_asset_name,
|
|
custom_asset_symbol=custom_asset_symbol,
|
|
**kwargs,
|
|
)
|
|
|
|
if add_liquidity:
|
|
submit_liquidity(vega, MM_WALLET.name, market_id)
|
|
submit_multiple_orders(vega, MM_WALLET.name, market_id, "SIDE_SELL", sell_orders)
|
|
submit_multiple_orders(vega, MM_WALLET2.name, market_id, "SIDE_BUY", buy_orders)
|
|
|
|
vega.forward("10s")
|
|
vega.wait_fn(1)
|
|
vega.wait_for_total_catchup()
|
|
|
|
return market_id
|
|
|
|
|
|
def market_exists(vega: VegaService, market_id: str):
|
|
if market_id is None:
|
|
return False
|
|
all_markets = vega.all_markets()
|
|
market_ids = [market.id for market in all_markets]
|
|
return market_id in market_ids
|
|
|
|
|
|
# Add sell orders and buy orders to put on the book
|
|
def setup_continuous_market(
|
|
vega: VegaService,
|
|
market_id: str = None,
|
|
buy_orders=default_buy_orders,
|
|
sell_orders=default_sell_orders,
|
|
add_liquidity=True,
|
|
custom_market_name="BTC:DAI_2023",
|
|
custom_asset_name="tDAI",
|
|
custom_asset_symbol="tDAI",
|
|
**kwargs,
|
|
):
|
|
if (
|
|
not market_exists(vega, market_id)
|
|
or buy_orders != default_buy_orders
|
|
or sell_orders != default_sell_orders
|
|
):
|
|
market_id = setup_opening_auction_market(
|
|
vega,
|
|
market_id,
|
|
buy_orders,
|
|
sell_orders,
|
|
add_liquidity,
|
|
custom_market_name=custom_market_name,
|
|
custom_asset_name=custom_asset_name,
|
|
custom_asset_symbol=custom_asset_symbol,
|
|
**kwargs,
|
|
)
|
|
|
|
submit_order(
|
|
vega, "Key 1", market_id, "SIDE_BUY", sell_orders[0][0], sell_orders[0][1]
|
|
)
|
|
|
|
vega.forward("10s")
|
|
vega.wait_fn(1)
|
|
vega.wait_for_total_catchup()
|
|
|
|
return market_id
|
|
|
|
|
|
def setup_perps_market(
|
|
vega: VegaService,
|
|
custom_asset_name="tDAI",
|
|
custom_asset_symbol="tDAI",
|
|
):
|
|
for wallet in wallets:
|
|
vega.create_key(wallet.name)
|
|
|
|
vega.mint(
|
|
MM_WALLET.name,
|
|
asset="VOTE",
|
|
amount=mint_amount,
|
|
)
|
|
|
|
vega.update_network_parameter(
|
|
MM_WALLET.name, parameter="market.fee.factors.makerFee", new_value="0.1"
|
|
)
|
|
vega.forward("10s")
|
|
vega.wait_fn(1)
|
|
vega.wait_for_total_catchup()
|
|
|
|
vega.create_asset(
|
|
MM_WALLET.name,
|
|
name=custom_asset_name,
|
|
symbol=custom_asset_symbol,
|
|
decimals=5,
|
|
max_faucet_amount=1e10,
|
|
)
|
|
vega.wait_fn(1)
|
|
vega.wait_for_total_catchup()
|
|
tdai_id = vega.find_asset_id(symbol=custom_asset_symbol)
|
|
logger.info(f"Created asset: {custom_asset_symbol}")
|
|
|
|
vega.mint(
|
|
"Key 1",
|
|
asset=tdai_id,
|
|
amount=mint_amount,
|
|
)
|
|
|
|
vega.mint(
|
|
MM_WALLET.name,
|
|
asset=tdai_id,
|
|
amount=mint_amount,
|
|
)
|
|
|
|
vega.mint(
|
|
MM_WALLET2.name,
|
|
asset=tdai_id,
|
|
amount=mint_amount,
|
|
)
|
|
vega.wait_fn(1)
|
|
vega.wait_for_total_catchup()
|
|
|
|
vega.update_network_parameter(
|
|
proposal_key=MM_WALLET.name,
|
|
parameter="limits.markets.proposePerpetualEnabled",
|
|
new_value="1",
|
|
)
|
|
|
|
vega.wait_for_total_catchup()
|
|
|
|
market_id = vega.create_simple_perps_market(
|
|
market_name="BTC:DAI_Perpetual",
|
|
proposal_key=MM_WALLET.name,
|
|
settlement_asset_id=tdai_id,
|
|
settlement_data_key=TERMINATE_WALLET.name,
|
|
funding_payment_frequency_in_seconds=10,
|
|
market_decimals=5,
|
|
)
|
|
vega.wait_for_total_catchup()
|
|
|
|
submit_liquidity(vega, MM_WALLET.name, market_id)
|
|
submit_multiple_orders(
|
|
vega, MM_WALLET.name, market_id, "SIDE_SELL", [[1, 110], [1, 105]]
|
|
)
|
|
submit_multiple_orders(
|
|
vega, MM_WALLET2.name, market_id, "SIDE_BUY", [[1, 90], [1, 95]]
|
|
)
|
|
submit_order(vega, "Key 1", market_id, "SIDE_BUY", 1, 110)
|
|
vega.forward("10s")
|
|
vega.wait_fn(1)
|
|
vega.wait_for_total_catchup()
|
|
|
|
return market_id
|
|
|
|
|
|
def market_exists(vega: VegaService, market_id: str):
|
|
if market_id is None:
|
|
return False
|
|
all_markets = vega.all_markets()
|
|
market_ids = [market.id for market in all_markets]
|
|
print("Checking for market ID:", market_id)
|
|
print("Available market IDs:", market_ids)
|
|
return market_id in market_ids |