Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: New Lp Interfaces #4313

Merged
merged 5 commits into from
Dec 6, 2023
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 25 additions & 19 deletions api/bin/chainflip-lp-api/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use chainflip_api::{
self,
lp::{
types::{LimitOrder, RangeOrder},
LpApi, Tick,
LpApi, Order, Tick,
},
primitives::{
chains::{Bitcoin, Ethereum, Polkadot},
Expand Down Expand Up @@ -117,7 +117,7 @@ pub trait Rpc {
async fn update_range_order(
&self,
base_asset: RpcAsset,
pair_asset: RpcAsset,
quote_asset: RpcAsset,
id: OrderIdJson,
tick_range: Option<Range<Tick>>,
size_change: IncreaseOrDecrease<RangeOrderSizeJson>,
Expand All @@ -127,7 +127,7 @@ pub trait Rpc {
async fn set_range_order(
&self,
base_asset: RpcAsset,
pair_asset: RpcAsset,
quote_asset: RpcAsset,
id: OrderIdJson,
tick_range: Option<Range<Tick>>,
size: RangeOrderSizeJson,
Expand All @@ -136,8 +136,9 @@ pub trait Rpc {
#[method(name = "update_limit_order")]
async fn update_limit_order(
&self,
sell_asset: RpcAsset,
buy_asset: RpcAsset,
base_asset: RpcAsset,
quote_asset: RpcAsset,
order: Order,
id: OrderIdJson,
tick: Option<Tick>,
amount_change: IncreaseOrDecrease<NumberOrHex>,
Expand All @@ -147,8 +148,9 @@ pub trait Rpc {
#[method(name = "set_limit_order")]
async fn set_limit_order(
&self,
sell_asset: RpcAsset,
buy_asset: RpcAsset,
base_asset: RpcAsset,
quote_asset: RpcAsset,
order: Order,
id: OrderIdJson,
tick: Option<Tick>,
amount: NumberOrHex,
Expand Down Expand Up @@ -248,7 +250,7 @@ impl RpcServer for RpcServerImpl {
async fn update_range_order(
&self,
base_asset: RpcAsset,
pair_asset: RpcAsset,
quote_asset: RpcAsset,
id: OrderIdJson,
tick_range: Option<Range<Tick>>,
size_change: IncreaseOrDecrease<RangeOrderSizeJson>,
Expand All @@ -258,7 +260,7 @@ impl RpcServer for RpcServerImpl {
.lp_api()
.update_range_order(
base_asset.try_into()?,
pair_asset.try_into()?,
quote_asset.try_into()?,
id.try_into()?,
tick_range,
size_change.try_map(|size| size.try_into())?,
Expand All @@ -269,7 +271,7 @@ impl RpcServer for RpcServerImpl {
async fn set_range_order(
&self,
base_asset: RpcAsset,
pair_asset: RpcAsset,
quote_asset: RpcAsset,
id: OrderIdJson,
tick_range: Option<Range<Tick>>,
size: RangeOrderSizeJson,
Expand All @@ -279,7 +281,7 @@ impl RpcServer for RpcServerImpl {
.lp_api()
.set_range_order(
base_asset.try_into()?,
pair_asset.try_into()?,
quote_asset.try_into()?,
id.try_into()?,
tick_range,
size.try_into()?,
Expand All @@ -289,8 +291,9 @@ impl RpcServer for RpcServerImpl {

async fn update_limit_order(
&self,
sell_asset: RpcAsset,
buy_asset: RpcAsset,
base_asset: RpcAsset,
quote_asset: RpcAsset,
order: Order,
id: OrderIdJson,
tick: Option<Tick>,
amount_change: IncreaseOrDecrease<NumberOrHex>,
Expand All @@ -300,8 +303,9 @@ impl RpcServer for RpcServerImpl {
.api
.lp_api()
.update_limit_order(
sell_asset.try_into()?,
buy_asset.try_into()?,
base_asset.try_into()?,
quote_asset.try_into()?,
order,
id.try_into()?,
tick,
amount_change.try_map(try_parse_number_or_hex)?,
Expand All @@ -312,8 +316,9 @@ impl RpcServer for RpcServerImpl {

async fn set_limit_order(
&self,
sell_asset: RpcAsset,
buy_asset: RpcAsset,
base_asset: RpcAsset,
quote_asset: RpcAsset,
order: Order,
id: OrderIdJson,
tick: Option<Tick>,
sell_amount: NumberOrHex,
Expand All @@ -323,8 +328,9 @@ impl RpcServer for RpcServerImpl {
.api
.lp_api()
.set_limit_order(
sell_asset.try_into()?,
buy_asset.try_into()?,
base_asset.try_into()?,
quote_asset.try_into()?,
order,
id.try_into()?,
tick,
try_parse_number_or_hex(sell_amount)?,
Expand Down
67 changes: 38 additions & 29 deletions api/lib/src/lp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ pub use cf_amm::{
use cf_chains::address::EncodedAddress;
use cf_primitives::{Asset, AssetAmount, BlockNumber, EgressId};
use chainflip_engine::state_chain_observer::client::{
extrinsic_api::signed::{SignedExtrinsicApi, UntilInBlock},
extrinsic_api::signed::{SignedExtrinsicApi, UntilFinalized, UntilInBlock},
StateChainClient,
};
use pallet_cf_pools::{AssetsMap, IncreaseOrDecrease, OrderId, RangeOrderSize};
Expand All @@ -22,7 +22,7 @@ pub mod types {
#[derive(Serialize, Deserialize, Clone)]
pub struct RangeOrder {
pub base_asset: Asset,
pub pair_asset: Asset,
pub quote_asset: Asset,
pub id: OrderId,
pub tick_range: Range<Tick>,
pub liquidity_total: NumberOrHex,
Expand All @@ -38,14 +38,15 @@ pub mod types {

#[derive(Serialize, Deserialize, Clone)]
pub struct LimitOrder {
pub sell_asset: Asset,
pub buy_asset: Asset,
pub base_asset: Asset,
pub quote_asset: Asset,
pub order: Order,
pub id: OrderId,
pub tick: Tick,
pub amount_total: NumberOrHex,
pub sell_amount_total: NumberOrHex,
pub collected_fees: NumberOrHex,
pub bought_amount: NumberOrHex,
pub amount_change: Option<IncreaseOrDecrease<NumberOrHex>>,
pub sell_amount_change: Option<IncreaseOrDecrease<NumberOrHex>>,
}
}

Expand All @@ -62,13 +63,13 @@ fn collect_range_order_returns(
collected_fees,
tick_range,
base_asset,
pair_asset,
quote_asset,
id,
..
},
) => Some(types::RangeOrder {
base_asset,
pair_asset,
quote_asset,
id,
size_change: size_change.map(|increase_or_decrese| {
increase_or_decrese.map(|range_order_change| types::RangeOrderChange {
Expand All @@ -93,25 +94,27 @@ fn collect_limit_order_returns(
.filter_map(|event| match event {
state_chain_runtime::RuntimeEvent::LiquidityPools(
pallet_cf_pools::Event::LimitOrderUpdated {
amount_change,
amount_total,
sell_amount_change,
sell_amount_total,
collected_fees,
bought_amount,
tick,
sell_asset,
buy_asset,
base_asset,
quote_asset,
order,
id,
..
},
) => Some(types::LimitOrder {
sell_asset,
buy_asset,
base_asset,
quote_asset,
order,
id,
tick,
amount_total: amount_total.into(),
sell_amount_total: sell_amount_total.into(),
collected_fees: collected_fees.into(),
bought_amount: bought_amount.into(),
amount_change: amount_change
sell_amount_change: sell_amount_change
.map(|increase_or_decrese| increase_or_decrese.map(|amount| amount.into())),
}),
_ => None,
Expand Down Expand Up @@ -141,7 +144,7 @@ pub trait LpApi: SignedExtrinsicApi {
asset,
})
.await
.until_in_block()
.until_finalized()
.await?;

events
Expand Down Expand Up @@ -189,7 +192,7 @@ pub trait LpApi: SignedExtrinsicApi {
async fn update_range_order(
&self,
base_asset: Asset,
pair_asset: Asset,
quote_asset: Asset,
id: OrderId,
option_tick_range: Option<Range<Tick>>,
size_change: IncreaseOrDecrease<RangeOrderSize>,
Expand All @@ -198,7 +201,7 @@ pub trait LpApi: SignedExtrinsicApi {
let (_tx_hash, events, ..) = self
.submit_signed_extrinsic(pallet_cf_pools::Call::update_range_order {
base_asset,
pair_asset,
quote_asset,
id,
option_tick_range,
size_change,
Expand All @@ -213,7 +216,7 @@ pub trait LpApi: SignedExtrinsicApi {
async fn set_range_order(
&self,
base_asset: Asset,
pair_asset: Asset,
quote_asset: Asset,
id: OrderId,
option_tick_range: Option<Range<Tick>>,
size: RangeOrderSize,
Expand All @@ -222,7 +225,7 @@ pub trait LpApi: SignedExtrinsicApi {
let (_tx_hash, events, ..) = self
.submit_signed_extrinsic(pallet_cf_pools::Call::set_range_order {
base_asset,
pair_asset,
quote_asset,
id,
option_tick_range,
size,
Expand All @@ -234,19 +237,22 @@ pub trait LpApi: SignedExtrinsicApi {
Ok(collect_range_order_returns(events))
}

#[allow(clippy::too_many_arguments)]
async fn update_limit_order(
&self,
sell_asset: Asset,
buy_asset: Asset,
base_asset: Asset,
quote_asset: Asset,
order: Order,
id: OrderId,
option_tick: Option<Tick>,
amount_change: IncreaseOrDecrease<AssetAmount>,
dispatch_at: Option<BlockNumber>,
) -> Result<Vec<types::LimitOrder>> {
self.scheduled_or_immediate(
pallet_cf_pools::Call::update_limit_order {
sell_asset,
buy_asset,
base_asset,
quote_asset,
order,
id,
option_tick,
amount_change,
Expand All @@ -256,19 +262,22 @@ pub trait LpApi: SignedExtrinsicApi {
.await
}

#[allow(clippy::too_many_arguments)]
async fn set_limit_order(
&self,
sell_asset: Asset,
buy_asset: Asset,
base_asset: Asset,
quote_asset: Asset,
order: Order,
id: OrderId,
option_tick: Option<Tick>,
sell_amount: AssetAmount,
dispatch_at: Option<BlockNumber>,
) -> Result<Vec<types::LimitOrder>> {
self.scheduled_or_immediate(
pallet_cf_pools::Call::set_limit_order {
sell_asset,
buy_asset,
base_asset,
quote_asset,
order,
id,
option_tick,
sell_amount,
Expand Down
13 changes: 7 additions & 6 deletions bouncer/commands/go_bananas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,15 @@ type AmountChange = null | {
};

type LimitOrderResponse = {
sell_asset: string;
buy_asset: string;
base_asset: string;
quote_asset: string;
order: string;
id: number;
tick: number;
amount_total: number;
sell_amount_total: number;
collected_fees: number;
bought_amount: number;
amount_change: AmountChange;
sell_amount_change: AmountChange;
};

function predictBtcAddress(pubkey: string, salt: number): string {
Expand Down Expand Up @@ -100,12 +101,12 @@ async function playLp(asset: Asset, price: number, liquidity: number) {
const result = await Promise.all([
call(
'lp_set_limit_order',
['USDC', asset, 1, buyTick, '0x' + BigInt(liquidityFine).toString(16)],
[asset, 'USDC', 'Sell', 1, buyTick, '0x' + BigInt(liquidityFine).toString(16)],
`Buy ${asset}`,
),
call(
'lp_set_limit_order',
[asset, 'USDC', 1, sellTick, '0x' + BigInt(liquidityFine / price).toString(16)],
[asset, 'USDC', 'Buy', 1, sellTick, '0x' + BigInt(liquidityFine / price).toString(16)],
`Sell ${asset}`,
),
]);
Expand Down
6 changes: 3 additions & 3 deletions bouncer/shared/create_lp_pool.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export async function createLpPool(ccy: Asset, initialPrice: number) {
if (
(
await chainflip.query.liquidityPools.pools({
assets: { one: 'usdc', zero: ccy.toLowerCase() },
assets: { quote: 'usdc', base: ccy.toLowerCase() },
})
).toJSON()! === null
) {
Expand All @@ -21,9 +21,9 @@ export async function createLpPool(ccy: Asset, initialPrice: number) {
const poolCreatedEvent = observeEvent(
'liquidityPools:NewPoolCreated',
chainflip,
(event) => event.data.pairAsset.toUpperCase() === ccy,
(event) => event.data.baseAsset.toUpperCase() === ccy,
);
const extrinsic = chainflip.tx.liquidityPools.newPool('usdc', ccy.toLowerCase(), 20, price);
const extrinsic = chainflip.tx.liquidityPools.newPool(ccy.toLowerCase(), 'usdc', 20, price);
await submitGovernanceExtrinsic(extrinsic);
await poolCreatedEvent;
}
Expand Down
Loading