pool
Module0x93f6…7dfd
- Move path
- 0x7fd8…1fec::pool
- Functions
- 5525 public, 0 entry
- Structs
- 12
pool
Bytecode3937 lines
The on-chain disassembly. Offsets are bytecode positions within each function.
// Move bytecode v7
module 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec.pool {
use 0000000000000000000000000000000000000000000000000000000000000001::option;
use 0000000000000000000000000000000000000000000000000000000000000001::type_name;
use 0000000000000000000000000000000000000000000000000000000000000002::balance;
use 0000000000000000000000000000000000000000000000000000000000000002::event;
use 0000000000000000000000000000000000000000000000000000000000000002::object;
use 0000000000000000000000000000000000000000000000000000000000000002::vec_set;
use 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec::admin;
use 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec::agg_price;
use 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec::decimal;
use 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec::fee;
use 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec::model;
use 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec::position;
use 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec::rate;
use 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec::sdecimal;
use 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec::srate;
struct Vault<phantom Ty0> has store {
enabled: bool,
weight: Decimal,
reserving_fee_model: ID,
price_config: AggPriceConfig,
last_update: u64,
liquidity: Balance<Ty0>,
reserved_amount: u64,
unrealised_reserving_fee_amount: Decimal,
acc_reserving_rate: Rate
}
struct Symbol has store {
open_enabled: bool,
decrease_enabled: bool,
liquidate_enabled: bool,
supported_collaterals: VecSet<TypeName>,
funding_fee_model: ID,
price_config: AggPriceConfig,
last_update: u64,
opening_amount: u64,
opening_size: Decimal,
realised_pnl: SDecimal,
unrealised_funding_fee_value: SDecimal,
acc_funding_rate: SRate
}
struct LossProtectionVault<phantom Ty0> has store {
balance: Balance<Ty0>
}
struct VaultAmountConfig has copy, drop, store {
min_amount: u64,
max_amount: u64
}
struct OpenPositionResult<phantom Ty0> {
position: Position<Ty0>,
referral_rebate: Balance<Ty0>,
fee_rebate: Balance<Ty0>,
scard_rebate: Option<Balance<Ty0>>,
event: OpenPositionSuccessEvent
}
struct DecreasePositionResult<phantom Ty0> {
to_trader: Balance<Ty0>,
referral_rebate: Balance<Ty0>,
fee_rebate: Balance<Ty0>,
scard_rebate: Option<Balance<Ty0>>,
event: DecreasePositionSuccessEvent
}
struct DecreasePositionResultV1<phantom Ty0> {
to_trader: Balance<Ty0>,
referral_rebate: Balance<Ty0>,
fee_rebate: Balance<Ty0>,
scard_rebate: Option<Balance<Ty0>>,
event: DecreasePositionSuccessEventV1
}
struct OpenPositionSuccessEvent has copy, drop {
position_config: PositionConfig,
collateral_price: Decimal,
index_price: Decimal,
open_amount: u64,
open_fee_amount: u64,
reserve_amount: u64,
collateral_amount: u64,
referral_rebate_amount: u64,
fee_rebate_amount: u64,
scard_rebate_amount: Option<u64>,
referrer: address
}
struct DecreasePositionSuccessEvent has copy, drop {
collateral_price: Decimal,
index_price: Decimal,
decrease_amount: u64,
decrease_fee_value: Decimal,
reserving_fee_value: Decimal,
funding_fee_value: SDecimal,
delta_realised_pnl: SDecimal,
closed: bool,
has_profit: bool,
settled_amount: u64,
referral_rebate_amount: u64,
fee_rebate_amount: u64,
scard_rebate_amount: Option<u64>,
referrer: address
}
struct DecreasePositionSuccessEventV1 has copy, drop {
collateral_price: Decimal,
index_price: Decimal,
decrease_amount: u64,
decrease_fee_value: Decimal,
reserving_fee_value: Decimal,
funding_fee_value: SDecimal,
instant_exit_fee_value: Decimal,
instant_exit_fee_tier: u8,
delta_realised_pnl: SDecimal,
closed: bool,
has_profit: bool,
settled_amount: u64,
referral_rebate_amount: u64,
fee_rebate_amount: u64,
scard_rebate_amount: Option<u64>,
referrer: address
}
struct DecreaseReservedFromPositionEvent has copy, drop {
decrease_amount: u64
}
struct PledgeInPositionEvent has copy, drop {
pledge_amount: u64
}
struct RedeemFromPositionEvent has copy, drop {
collateral_price: Decimal,
index_price: Decimal,
redeem_amount: u64
}
struct LiquidatePositionEvent has copy, drop {
liquidator: address,
collateral_price: Decimal,
index_price: Decimal,
position_size: Decimal,
reserving_fee_value: Decimal,
funding_fee_value: SDecimal,
delta_realised_pnl: SDecimal,
loss_amount: u64,
liquidator_bonus_amount: u64,
liquidation_amount: u64
}
struct LiquidationFeeEvent has copy, drop {
liquidation_fee_amount: u64,
liquidation_fee_value: Decimal,
fee_collector: address
}
struct LossProtectionVaultChangeEvent<phantom Ty0> has copy, drop {
to_loss_protection_vault_amount: u64,
from_loss_protection_vault_amount: u64
}
refresh_vault<Ty0>(Arg0: &mut Vault<Ty0>, Arg1: &ReservingFeeModel, Arg2: u64) {
L3: loc0: Rate
B0:
0CopyLoc[0](Arg0: &mut Vault<Ty0>)
1FreezeRef
2MoveLoc[1](Arg1: &ReservingFeeModel)
3CopyLoc[2](Arg2: u64)
4Call vault_delta_reserving_rate<Ty0>(&Vault<Ty0>, &ReservingFeeModel, u64): Rate
5StLoc[3](loc0: Rate)
6CopyLoc[0](Arg0: &mut Vault<Ty0>)
7FreezeRef
8CopyLoc[3](loc0: Rate)
9Call vault_acc_reserving_rate<Ty0>(&Vault<Ty0>, Rate): Rate
10CopyLoc[0](Arg0: &mut Vault<Ty0>)
11MutBorrowFieldGeneric[0](Vault.acc_reserving_rate: Rate)
12WriteRef
13CopyLoc[0](Arg0: &mut Vault<Ty0>)
14FreezeRef
15MoveLoc[3](loc0: Rate)
16Call vault_unrealised_reserving_fee_amount<Ty0>(&Vault<Ty0>, Rate): Decimal
17CopyLoc[0](Arg0: &mut Vault<Ty0>)
18MutBorrowFieldGeneric[1](Vault.unrealised_reserving_fee_amount: Decimal)
19WriteRef
20MoveLoc[2](Arg2: u64)
21MoveLoc[0](Arg0: &mut Vault<Ty0>)
22MutBorrowFieldGeneric[2](Vault.last_update: u64)
23WriteRef
24Ret
}
refresh_symbol(Arg0: &mut Symbol, Arg1: &FundingFeeModel, Arg2: SDecimal, Arg3: Decimal, Arg4: u64) {
L5: loc0: SRate
B0:
0CopyLoc[0](Arg0: &mut Symbol)
1FreezeRef
2MoveLoc[1](Arg1: &FundingFeeModel)
3MoveLoc[2](Arg2: SDecimal)
4MoveLoc[3](Arg3: Decimal)
5CopyLoc[4](Arg4: u64)
6Call symbol_delta_funding_rate(&Symbol, &FundingFeeModel, SDecimal, Decimal, u64): SRate
7StLoc[5](loc0: SRate)
8CopyLoc[0](Arg0: &mut Symbol)
9FreezeRef
10CopyLoc[5](loc0: SRate)
11Call symbol_acc_funding_rate(&Symbol, SRate): SRate
12CopyLoc[0](Arg0: &mut Symbol)
13MutBorrowField[3](Symbol.acc_funding_rate: SRate)
14WriteRef
15CopyLoc[0](Arg0: &mut Symbol)
16FreezeRef
17MoveLoc[5](loc0: SRate)
18Call symbol_unrealised_funding_fee_value(&Symbol, SRate): SDecimal
19CopyLoc[0](Arg0: &mut Symbol)
20MutBorrowField[4](Symbol.unrealised_funding_fee_value: SDecimal)
21WriteRef
22MoveLoc[4](Arg4: u64)
23MoveLoc[0](Arg0: &mut Symbol)
24MutBorrowField[5](Symbol.last_update: u64)
25WriteRef
26Ret
}
public vault_enabled<Ty0>(Arg0: &Vault<Ty0>): bool {
B0:
0MoveLoc[0](Arg0: &Vault<Ty0>)
1ImmBorrowFieldGeneric[3](Vault.enabled: bool)
2ReadRef
3Ret
}
public vault_weight<Ty0>(Arg0: &Vault<Ty0>): Decimal {
B0:
0MoveLoc[0](Arg0: &Vault<Ty0>)
1ImmBorrowFieldGeneric[4](Vault.weight: Decimal)
2ReadRef
3Ret
}
public vault_reserving_fee_model<Ty0>(Arg0: &Vault<Ty0>): &ID {
B0:
0MoveLoc[0](Arg0: &Vault<Ty0>)
1ImmBorrowFieldGeneric[5](Vault.reserving_fee_model: ID)
2Ret
}
public vault_price_config<Ty0>(Arg0: &Vault<Ty0>): &AggPriceConfig {
B0:
0MoveLoc[0](Arg0: &Vault<Ty0>)
1ImmBorrowFieldGeneric[6](Vault.price_config: AggPriceConfig)
2Ret
}
public vault_liquidity_amount<Ty0>(Arg0: &Vault<Ty0>): u64 {
B0:
0MoveLoc[0](Arg0: &Vault<Ty0>)
1ImmBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
2Call balance::value<Ty0>(&Balance<Ty0>): u64
3Ret
}
public vault_reserved_amount<Ty0>(Arg0: &Vault<Ty0>): u64 {
B0:
0MoveLoc[0](Arg0: &Vault<Ty0>)
1ImmBorrowFieldGeneric[8](Vault.reserved_amount: u64)
2ReadRef
3Ret
}
public vault_utilization<Ty0>(Arg0: &Vault<Ty0>): Rate {
L1: loc0: Rate
L2: loc1: Decimal
B0:
0CopyLoc[0](Arg0: &Vault<Ty0>)
1Call vault_supply_amount<Ty0>(&Vault<Ty0>): Decimal
2StLoc[2](loc1: Decimal)
3ImmBorrowLoc[2](loc1: Decimal)
4Call decimal::is_zero(&Decimal): bool
5BrFalse(11)
B1:
6MoveLoc[0](Arg0: &Vault<Ty0>)
7Pop
8Call rate::zero(): Rate
9StLoc[1](loc0: Rate)
10Branch(19)
B2:
11MoveLoc[0](Arg0: &Vault<Ty0>)
12ImmBorrowFieldGeneric[8](Vault.reserved_amount: u64)
13ReadRef
14Call decimal::from_u64(u64): Decimal
15MoveLoc[2](loc1: Decimal)
16Call decimal::div(Decimal, Decimal): Decimal
17Call decimal::to_rate(Decimal): Rate
18StLoc[1](loc0: Rate)
B3:
19MoveLoc[1](loc0: Rate)
20Ret
}
public vault_supply_amount<Ty0>(Arg0: &Vault<Ty0>): Decimal {
B0:
0CopyLoc[0](Arg0: &Vault<Ty0>)
1ImmBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
2Call balance::value<Ty0>(&Balance<Ty0>): u64
3CopyLoc[0](Arg0: &Vault<Ty0>)
4ImmBorrowFieldGeneric[8](Vault.reserved_amount: u64)
5ReadRef
6Add
7Call decimal::from_u64(u64): Decimal
8MoveLoc[0](Arg0: &Vault<Ty0>)
9ImmBorrowFieldGeneric[1](Vault.unrealised_reserving_fee_amount: Decimal)
10ReadRef
11Call decimal::add(Decimal, Decimal): Decimal
12Ret
}
public vault_delta_reserving_rate<Ty0>(Arg0: &Vault<Ty0>, Arg1: &ReservingFeeModel, Arg2: u64): Rate {
L3: loc0: u64
B0:
0CopyLoc[0](Arg0: &Vault<Ty0>)
1ImmBorrowFieldGeneric[2](Vault.last_update: u64)
2ReadRef
3LdU64(0)
4Gt
5BrFalse(27)
B1:
6MoveLoc[2](Arg2: u64)
7CopyLoc[0](Arg0: &Vault<Ty0>)
8ImmBorrowFieldGeneric[2](Vault.last_update: u64)
9ReadRef
10Sub
11StLoc[3](loc0: u64)
12CopyLoc[3](loc0: u64)
13LdU64(0)
14Gt
15BrFalse(22)
B2:
16MoveLoc[1](Arg1: &ReservingFeeModel)
17MoveLoc[0](Arg0: &Vault<Ty0>)
18Call vault_utilization<Ty0>(&Vault<Ty0>): Rate
19MoveLoc[3](loc0: u64)
20Call model::compute_reserving_fee_rate(&ReservingFeeModel, Rate, u64): Rate
21Ret
B3:
22MoveLoc[0](Arg0: &Vault<Ty0>)
23Pop
24MoveLoc[1](Arg1: &ReservingFeeModel)
25Pop
26Branch(31)
B4:
27MoveLoc[0](Arg0: &Vault<Ty0>)
28Pop
29MoveLoc[1](Arg1: &ReservingFeeModel)
30Pop
B5:
31Call rate::zero(): Rate
32Ret
}
public vault_acc_reserving_rate<Ty0>(Arg0: &Vault<Ty0>, Arg1: Rate): Rate {
B0:
0MoveLoc[0](Arg0: &Vault<Ty0>)
1ImmBorrowFieldGeneric[0](Vault.acc_reserving_rate: Rate)
2ReadRef
3MoveLoc[1](Arg1: Rate)
4Call rate::add(Rate, Rate): Rate
5Ret
}
public vault_unrealised_reserving_fee_amount<Ty0>(Arg0: &Vault<Ty0>, Arg1: Rate): Decimal {
B0:
0CopyLoc[0](Arg0: &Vault<Ty0>)
1ImmBorrowFieldGeneric[1](Vault.unrealised_reserving_fee_amount: Decimal)
2ReadRef
3MoveLoc[0](Arg0: &Vault<Ty0>)
4ImmBorrowFieldGeneric[8](Vault.reserved_amount: u64)
5ReadRef
6Call decimal::from_u64(u64): Decimal
7MoveLoc[1](Arg1: Rate)
8Call decimal::mul_with_rate(Decimal, Rate): Decimal
9Call decimal::add(Decimal, Decimal): Decimal
10Ret
}
public symbol_last_update(Arg0: &Symbol): u64 {
B0:
0MoveLoc[0](Arg0: &Symbol)
1ImmBorrowField[5](Symbol.last_update: u64)
2ReadRef
3Ret
}
public symbol_open_enabled(Arg0: &Symbol): bool {
B0:
0MoveLoc[0](Arg0: &Symbol)
1ImmBorrowField[12](Symbol.open_enabled: bool)
2ReadRef
3Ret
}
public symbol_decrease_enabled(Arg0: &Symbol): bool {
B0:
0MoveLoc[0](Arg0: &Symbol)
1ImmBorrowField[13](Symbol.decrease_enabled: bool)
2ReadRef
3Ret
}
public symbol_liquidate_enabled(Arg0: &Symbol): bool {
B0:
0MoveLoc[0](Arg0: &Symbol)
1ImmBorrowField[14](Symbol.liquidate_enabled: bool)
2ReadRef
3Ret
}
public symbol_supported_collaterals(Arg0: &Symbol): &VecSet<TypeName> {
B0:
0MoveLoc[0](Arg0: &Symbol)
1ImmBorrowField[15](Symbol.supported_collaterals: VecSet<TypeName>)
2Ret
}
public symbol_funding_fee_model(Arg0: &Symbol): &ID {
B0:
0MoveLoc[0](Arg0: &Symbol)
1ImmBorrowField[16](Symbol.funding_fee_model: ID)
2Ret
}
public symbol_price_config(Arg0: &Symbol): &AggPriceConfig {
B0:
0MoveLoc[0](Arg0: &Symbol)
1ImmBorrowField[17](Symbol.price_config: AggPriceConfig)
2Ret
}
public symbol_opening_amount(Arg0: &Symbol): u64 {
B0:
0MoveLoc[0](Arg0: &Symbol)
1ImmBorrowField[18](Symbol.opening_amount: u64)
2ReadRef
3Ret
}
public symbol_opening_size(Arg0: &Symbol): Decimal {
B0:
0MoveLoc[0](Arg0: &Symbol)
1ImmBorrowField[19](Symbol.opening_size: Decimal)
2ReadRef
3Ret
}
public symbol_pnl_per_lp(Arg0: &Symbol, Arg1: SDecimal, Arg2: Decimal): SDecimal {
B0:
0CopyLoc[0](Arg0: &Symbol)
1ImmBorrowField[20](Symbol.realised_pnl: SDecimal)
2ReadRef
3MoveLoc[0](Arg0: &Symbol)
4ImmBorrowField[4](Symbol.unrealised_funding_fee_value: SDecimal)
5ReadRef
6Call sdecimal::add(SDecimal, SDecimal): SDecimal
7MoveLoc[1](Arg1: SDecimal)
8Call sdecimal::add(SDecimal, SDecimal): SDecimal
9MoveLoc[2](Arg2: Decimal)
10Call sdecimal::div_by_decimal(SDecimal, Decimal): SDecimal
11Ret
}
public symbol_delta_funding_rate(Arg0: &Symbol, Arg1: &FundingFeeModel, Arg2: SDecimal, Arg3: Decimal, Arg4: u64): SRate {
L5: loc0: u64
B0:
0CopyLoc[0](Arg0: &Symbol)
1ImmBorrowField[5](Symbol.last_update: u64)
2ReadRef
3LdU64(0)
4Gt
5BrFalse(29)
B1:
6MoveLoc[4](Arg4: u64)
7CopyLoc[0](Arg0: &Symbol)
8ImmBorrowField[5](Symbol.last_update: u64)
9ReadRef
10Sub
11StLoc[5](loc0: u64)
12CopyLoc[5](loc0: u64)
13LdU64(0)
14Gt
15BrFalse(24)
B2:
16MoveLoc[1](Arg1: &FundingFeeModel)
17MoveLoc[0](Arg0: &Symbol)
18MoveLoc[2](Arg2: SDecimal)
19MoveLoc[3](Arg3: Decimal)
20Call symbol_pnl_per_lp(&Symbol, SDecimal, Decimal): SDecimal
21MoveLoc[5](loc0: u64)
22Call model::compute_funding_fee_rate(&FundingFeeModel, SDecimal, u64): SRate
23Ret
B3:
24MoveLoc[0](Arg0: &Symbol)
25Pop
26MoveLoc[1](Arg1: &FundingFeeModel)
27Pop
28Branch(33)
B4:
29MoveLoc[0](Arg0: &Symbol)
30Pop
31MoveLoc[1](Arg1: &FundingFeeModel)
32Pop
B5:
33Call srate::zero(): SRate
34Ret
}
public symbol_acc_funding_rate(Arg0: &Symbol, Arg1: SRate): SRate {
B0:
0MoveLoc[0](Arg0: &Symbol)
1ImmBorrowField[3](Symbol.acc_funding_rate: SRate)
2ReadRef
3MoveLoc[1](Arg1: SRate)
4Call srate::add(SRate, SRate): SRate
5Ret
}
public symbol_unrealised_funding_fee_value(Arg0: &Symbol, Arg1: SRate): SDecimal {
B0:
0CopyLoc[0](Arg0: &Symbol)
1ImmBorrowField[4](Symbol.unrealised_funding_fee_value: SDecimal)
2ReadRef
3ImmBorrowLoc[1](Arg1: SRate)
4Call srate::is_positive(&SRate): bool
5MoveLoc[0](Arg0: &Symbol)
6ImmBorrowField[19](Symbol.opening_size: Decimal)
7ReadRef
8ImmBorrowLoc[1](Arg1: SRate)
9Call srate::value(&SRate): Rate
10Call decimal::mul_with_rate(Decimal, Rate): Decimal
11Call sdecimal::from_decimal(bool, Decimal): SDecimal
12Call sdecimal::add(SDecimal, SDecimal): SDecimal
13Ret
}
public symbol_delta_size(Arg0: &Symbol, Arg1: &AggPrice, Arg2: bool): SDecimal {
L3: loc0: bool
L4: loc1: Decimal
L5: loc2: Decimal
B0:
0MoveLoc[1](Arg1: &AggPrice)
1CopyLoc[0](Arg0: &Symbol)
2ImmBorrowField[18](Symbol.opening_amount: u64)
3ReadRef
4Call agg_price::coins_to_value(&AggPrice, u64): Decimal
5StLoc[5](loc2: Decimal)
6ImmBorrowLoc[5](loc2: Decimal)
7CopyLoc[0](Arg0: &Symbol)
8ImmBorrowField[19](Symbol.opening_size: Decimal)
9Call decimal::gt(&Decimal, &Decimal): bool
10BrFalse(21)
B1:
11MoveLoc[2](Arg2: bool)
12Not
13MoveLoc[5](loc2: Decimal)
14MoveLoc[0](Arg0: &Symbol)
15ImmBorrowField[19](Symbol.opening_size: Decimal)
16ReadRef
17Call decimal::sub(Decimal, Decimal): Decimal
18StLoc[4](loc1: Decimal)
19StLoc[3](loc0: bool)
20Branch(29)
B2:
21MoveLoc[2](Arg2: bool)
22MoveLoc[0](Arg0: &Symbol)
23ImmBorrowField[19](Symbol.opening_size: Decimal)
24ReadRef
25MoveLoc[5](loc2: Decimal)
26Call decimal::sub(Decimal, Decimal): Decimal
27StLoc[4](loc1: Decimal)
28StLoc[3](loc0: bool)
B3:
29MoveLoc[3](loc0: bool)
30MoveLoc[4](loc1: Decimal)
31Call sdecimal::from_decimal(bool, Decimal): SDecimal
32Ret
}
public compute_rebase_fee_rate(Arg0: &RebaseFeeModel, Arg1: bool, Arg2: Decimal, Arg3: Decimal, Arg4: Decimal, Arg5: Decimal): Rate {
L6: loc0: Rate
L7: loc1: Rate
L8: loc2: Rate
B0:
0ImmBorrowLoc[2](Arg2: Decimal)
1ImmBorrowLoc[3](Arg3: Decimal)
2Call decimal::eq(&Decimal, &Decimal): bool
3BrFalse(9)
B1:
4MoveLoc[0](Arg0: &RebaseFeeModel)
5Pop
6Call rate::zero(): Rate
7StLoc[6](loc0: Rate)
8Branch(25)
B2:
9MoveLoc[2](Arg2: Decimal)
10MoveLoc[3](Arg3: Decimal)
11Call decimal::div(Decimal, Decimal): Decimal
12Call decimal::to_rate(Decimal): Rate
13StLoc[7](loc1: Rate)
14MoveLoc[4](Arg4: Decimal)
15MoveLoc[5](Arg5: Decimal)
16Call decimal::div(Decimal, Decimal): Decimal
17Call decimal::to_rate(Decimal): Rate
18StLoc[8](loc2: Rate)
19MoveLoc[0](Arg0: &RebaseFeeModel)
20MoveLoc[1](Arg1: bool)
21MoveLoc[7](loc1: Rate)
22MoveLoc[8](loc2: Rate)
23Call model::compute_rebase_fee_rate(&RebaseFeeModel, bool, Rate, Rate): Rate
24StLoc[6](loc0: Rate)
B3:
25MoveLoc[6](loc0: Rate)
26Ret
}
public(friend) new_vault<Ty0>(Arg0: u256, Arg1: ID, Arg2: AggPriceConfig): Vault<Ty0> {
B0:
0LdTrue
1MoveLoc[0](Arg0: u256)
2Call decimal::from_raw(u256): Decimal
3MoveLoc[1](Arg1: ID)
4MoveLoc[2](Arg2: AggPriceConfig)
5LdU64(0)
6Call balance::zero<Ty0>(): Balance<Ty0>
7LdU64(0)
8Call decimal::zero(): Decimal
9Call rate::zero(): Rate
10PackGeneric[0](Vault<Ty0>)
11Ret
}
public(friend) mut_vault_price_config<Ty0>(Arg0: &mut Vault<Ty0>): &mut AggPriceConfig {
B0:
0MoveLoc[0](Arg0: &mut Vault<Ty0>)
1MutBorrowFieldGeneric[6](Vault.price_config: AggPriceConfig)
2Ret
}
public(friend) new_symbol(Arg0: ID, Arg1: AggPriceConfig): Symbol {
B0:
0LdTrue
1LdTrue
2LdTrue
3Call vec_set::empty<TypeName>(): VecSet<TypeName>
4MoveLoc[0](Arg0: ID)
5MoveLoc[1](Arg1: AggPriceConfig)
6LdU64(0)
7LdU64(0)
8Call decimal::zero(): Decimal
9Call sdecimal::zero(): SDecimal
10Call sdecimal::zero(): SDecimal
11Call srate::zero(): SRate
12Pack[1](Symbol)
13Ret
}
public(friend) mut_symbol_price_config(Arg0: &mut Symbol): &mut AggPriceConfig {
B0:
0MoveLoc[0](Arg0: &mut Symbol)
1MutBorrowField[17](Symbol.price_config: AggPriceConfig)
2Ret
}
public(friend) add_collateral_to_symbol<Ty0>(Arg0: &mut Symbol) {
B0:
0MoveLoc[0](Arg0: &mut Symbol)
1MutBorrowField[15](Symbol.supported_collaterals: VecSet<TypeName>)
2Call type_name::get<Ty0>(): TypeName
3Call vec_set::insert<TypeName>(&mut VecSet<TypeName>, TypeName)
4Ret
}
public(friend) remove_collateral_from_symbol<Ty0>(Arg0: &mut Symbol) {
L1: loc0: TypeName
L2: loc1: &mut VecSet<TypeName>
B0:
0MoveLoc[0](Arg0: &mut Symbol)
1MutBorrowField[15](Symbol.supported_collaterals: VecSet<TypeName>)
2StLoc[2](loc1: &mut VecSet<TypeName>)
3Call type_name::get<Ty0>(): TypeName
4StLoc[1](loc0: TypeName)
5MoveLoc[2](loc1: &mut VecSet<TypeName>)
6ImmBorrowLoc[1](loc0: TypeName)
7Call vec_set::remove<TypeName>(&mut VecSet<TypeName>, &TypeName)
8Ret
}
public(friend) set_symbol_status(Arg0: &mut Symbol, Arg1: bool, Arg2: bool, Arg3: bool) {
B0:
0MoveLoc[1](Arg1: bool)
1CopyLoc[0](Arg0: &mut Symbol)
2MutBorrowField[12](Symbol.open_enabled: bool)
3WriteRef
4MoveLoc[2](Arg2: bool)
5CopyLoc[0](Arg0: &mut Symbol)
6MutBorrowField[13](Symbol.decrease_enabled: bool)
7WriteRef
8MoveLoc[3](Arg3: bool)
9MoveLoc[0](Arg0: &mut Symbol)
10MutBorrowField[14](Symbol.liquidate_enabled: bool)
11WriteRef
12Ret
}
public(friend) set_symbol_by_funding_state(Arg0: &mut Symbol, Arg1: SRate, Arg2: SDecimal, Arg3: u64) {
B0:
0MoveLoc[1](Arg1: SRate)
1CopyLoc[0](Arg0: &mut Symbol)
2MutBorrowField[3](Symbol.acc_funding_rate: SRate)
3WriteRef
4MoveLoc[2](Arg2: SDecimal)
5CopyLoc[0](Arg0: &mut Symbol)
6MutBorrowField[4](Symbol.unrealised_funding_fee_value: SDecimal)
7WriteRef
8MoveLoc[3](Arg3: u64)
9MoveLoc[0](Arg0: &mut Symbol)
10MutBorrowField[5](Symbol.last_update: u64)
11WriteRef
12Ret
}
public(friend) destroy_symbol(Arg0: Symbol): AggPriceConfig {
L1: loc0: AggPriceConfig
B0:
0MoveLoc[0](Arg0: Symbol)
1Unpack[1](Symbol)
2Pop
3Pop
4Pop
5Pop
6Pop
7Pop
8StLoc[1](loc0: AggPriceConfig)
9Pop
10Pop
11Pop
12Pop
13Pop
14MoveLoc[1](loc0: AggPriceConfig)
15Ret
}
public(friend) set_vault_status<Ty0>(Arg0: &mut Vault<Ty0>, Arg1: bool) {
B0:
0MoveLoc[1](Arg1: bool)
1MoveLoc[0](Arg0: &mut Vault<Ty0>)
2MutBorrowFieldGeneric[3](Vault.enabled: bool)
3WriteRef
4Ret
}
public(friend) set_vault_weight<Ty0>(Arg0: &mut Vault<Ty0>, Arg1: u256) {
B0:
0MoveLoc[1](Arg1: u256)
1Call decimal::from_raw(u256): Decimal
2MoveLoc[0](Arg0: &mut Vault<Ty0>)
3MutBorrowFieldGeneric[4](Vault.weight: Decimal)
4WriteRef
5Ret
}
public new_vault_amount_config(Arg0: u64, Arg1: u64): VaultAmountConfig {
B0:
0MoveLoc[0](Arg0: u64)
1MoveLoc[1](Arg1: u64)
2Pack[3](VaultAmountConfig)
3Ret
}
public(friend) new_loss_protection_vault<Ty0>(): LossProtectionVault<Ty0> {
B0:
0Call balance::zero<Ty0>(): Balance<Ty0>
1PackGeneric[1](LossProtectionVault<Ty0>)
2Ret
}
public(friend) loss_protection_vault_balance<Ty0>(Arg0: &mut LossProtectionVault<Ty0>): &mut Balance<Ty0> {
B0:
0MoveLoc[0](Arg0: &mut LossProtectionVault<Ty0>)
1MutBorrowFieldGeneric[9](LossProtectionVault.balance: Balance<Ty0>)
2Ret
}
public(friend) deposit_to_loss_protection_vault<Ty0>(Arg0: &mut LossProtectionVault<Ty0>, Arg1: Balance<Ty0>) {
B0:
0MoveLoc[0](Arg0: &mut LossProtectionVault<Ty0>)
1MutBorrowFieldGeneric[9](LossProtectionVault.balance: Balance<Ty0>)
2MoveLoc[1](Arg1: Balance<Ty0>)
3Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
4Pop
5Ret
}
public(friend) withdraw_from_loss_protection_vault<Ty0>(Arg0: &mut LossProtectionVault<Ty0>, Arg1: u64): Balance<Ty0> {
B0:
0MoveLoc[0](Arg0: &mut LossProtectionVault<Ty0>)
1MutBorrowFieldGeneric[9](LossProtectionVault.balance: Balance<Ty0>)
2MoveLoc[1](Arg1: u64)
3Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
4Ret
}
public(friend) loss_protection_vault_value<Ty0>(Arg0: &LossProtectionVault<Ty0>): u64 {
B0:
0MoveLoc[0](Arg0: &LossProtectionVault<Ty0>)
1ImmBorrowFieldGeneric[9](LossProtectionVault.balance: Balance<Ty0>)
2Call balance::value<Ty0>(&Balance<Ty0>): u64
3Ret
}
public(friend) deposit<Ty0>(Arg0: &mut Vault<Ty0>, Arg1: &RebaseFeeModel, Arg2: &AggPrice, Arg3: Balance<Ty0>, Arg4: u64, Arg5: u64, Arg6: Decimal, Arg7: Decimal, Arg8: Decimal, Arg9: Decimal, Arg10: Option<VaultAmountConfig>): u64 * Decimal {
L11: loc0: u64
L12: loc1: VaultAmountConfig
L13: loc2: u64
L14: loc3: Decimal
L15: loc4: Rate
L16: loc5: Decimal
L17: loc6: u64
B0:
0CopyLoc[0](Arg0: &mut Vault<Ty0>)
1ImmBorrowFieldGeneric[3](Vault.enabled: bool)
2ReadRef
3BrFalse(5)
B1:
4Branch(13)
B2:
5MoveLoc[0](Arg0: &mut Vault<Ty0>)
6Pop
7MoveLoc[2](Arg2: &AggPrice)
8Pop
9MoveLoc[1](Arg1: &RebaseFeeModel)
10Pop
11LdConst[0](u64: 100)
12Abort
B3:
13ImmBorrowLoc[3](Arg3: Balance<Ty0>)
14Call balance::value<Ty0>(&Balance<Ty0>): u64
15StLoc[13](loc2: u64)
16CopyLoc[13](loc2: u64)
17LdU64(0)
18Gt
19BrFalse(21)
B4:
20Branch(29)
B5:
21MoveLoc[0](Arg0: &mut Vault<Ty0>)
22Pop
23MoveLoc[2](Arg2: &AggPrice)
24Pop
25MoveLoc[1](Arg1: &RebaseFeeModel)
26Pop
27LdConst[8](u64: 108)
28Abort
B6:
29ImmBorrowLoc[10](Arg10: Option<VaultAmountConfig>)
30Call option::is_some<VaultAmountConfig>(&Option<VaultAmountConfig>): bool
31BrFalse(61)
B7:
32ImmBorrowLoc[10](Arg10: Option<VaultAmountConfig>)
33Call option::borrow<VaultAmountConfig>(&Option<VaultAmountConfig>): &VaultAmountConfig
34ReadRef
35StLoc[12](loc1: VaultAmountConfig)
36ImmBorrowLoc[12](loc1: VaultAmountConfig)
37ImmBorrowField[22](VaultAmountConfig.max_amount: u64)
38ReadRef
39LdU64(0)
40Gt
41BrFalse(61)
B8:
42CopyLoc[0](Arg0: &mut Vault<Ty0>)
43ImmBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
44Call balance::value<Ty0>(&Balance<Ty0>): u64
45CopyLoc[13](loc2: u64)
46Add
47ImmBorrowLoc[12](loc1: VaultAmountConfig)
48ImmBorrowField[22](VaultAmountConfig.max_amount: u64)
49ReadRef
50Le
51BrFalse(53)
B9:
52Branch(61)
B10:
53MoveLoc[0](Arg0: &mut Vault<Ty0>)
54Pop
55MoveLoc[2](Arg2: &AggPrice)
56Pop
57MoveLoc[1](Arg1: &RebaseFeeModel)
58Pop
59LdConst[14](u64: 117)
60Abort
B11:
61MoveLoc[2](Arg2: &AggPrice)
62MoveLoc[13](loc2: u64)
63Call agg_price::coins_to_value(&AggPrice, u64): Decimal
64StLoc[14](loc3: Decimal)
65MoveLoc[1](Arg1: &RebaseFeeModel)
66LdTrue
67MoveLoc[7](Arg7: Decimal)
68CopyLoc[14](loc3: Decimal)
69Call decimal::add(Decimal, Decimal): Decimal
70MoveLoc[8](Arg8: Decimal)
71CopyLoc[14](loc3: Decimal)
72Call decimal::add(Decimal, Decimal): Decimal
73CopyLoc[0](Arg0: &mut Vault<Ty0>)
74ImmBorrowFieldGeneric[4](Vault.weight: Decimal)
75ReadRef
76MoveLoc[9](Arg9: Decimal)
77Call compute_rebase_fee_rate(&RebaseFeeModel, bool, Decimal, Decimal, Decimal, Decimal): Rate
78StLoc[15](loc4: Rate)
79CopyLoc[14](loc3: Decimal)
80MoveLoc[15](loc4: Rate)
81Call decimal::mul_with_rate(Decimal, Rate): Decimal
82StLoc[16](loc5: Decimal)
83MoveLoc[14](loc3: Decimal)
84CopyLoc[16](loc5: Decimal)
85Call decimal::sub(Decimal, Decimal): Decimal
86StLoc[14](loc3: Decimal)
87MoveLoc[0](Arg0: &mut Vault<Ty0>)
88MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
89MoveLoc[3](Arg3: Balance<Ty0>)
90Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
91Pop
92CopyLoc[5](Arg5: u64)
93LdU64(0)
94Eq
95BrFalse(106)
B12:
96ImmBorrowLoc[6](Arg6: Decimal)
97Call decimal::is_zero(&Decimal): bool
98BrFalse(100)
B13:
99Branch(102)
B14:
100LdConst[10](u64: 110)
101Abort
B15:
102MoveLoc[14](loc3: Decimal)
103Call decimal::truncate_decimal(Decimal): u64
104StLoc[11](loc0: u64)
105Branch(120)
B16:
106ImmBorrowLoc[6](Arg6: Decimal)
107Call decimal::is_zero(&Decimal): bool
108Not
109BrFalse(111)
B17:
110Branch(113)
B18:
111LdConst[10](u64: 110)
112Abort
B19:
113MoveLoc[14](loc3: Decimal)
114MoveLoc[5](Arg5: u64)
115Call decimal::from_u64(u64): Decimal
116MoveLoc[6](Arg6: Decimal)
117Call decimal::mul_div(Decimal, Decimal, Decimal): Decimal
118Call decimal::floor_u64(Decimal): u64
119StLoc[11](loc0: u64)
B20:
120MoveLoc[11](loc0: u64)
121StLoc[17](loc6: u64)
122CopyLoc[17](loc6: u64)
123MoveLoc[4](Arg4: u64)
124Ge
125BrFalse(127)
B21:
126Branch(129)
B22:
127LdConst[11](u64: 111)
128Abort
B23:
129MoveLoc[17](loc6: u64)
130MoveLoc[16](loc5: Decimal)
131Ret
}
public(friend) admin_add_liquidity_to_vault<Ty0>(Arg0: &AdminCap, Arg1: &mut Vault<Ty0>, Arg2: Balance<Ty0>): u64 * u64 {
L3: loc0: u64
B0:
0CopyLoc[1](Arg1: &mut Vault<Ty0>)
1ImmBorrowFieldGeneric[3](Vault.enabled: bool)
2ReadRef
3BrFalse(5)
B1:
4Branch(9)
B2:
5MoveLoc[1](Arg1: &mut Vault<Ty0>)
6Pop
7LdConst[0](u64: 100)
8Abort
B3:
9ImmBorrowLoc[2](Arg2: Balance<Ty0>)
10Call balance::value<Ty0>(&Balance<Ty0>): u64
11StLoc[3](loc0: u64)
12CopyLoc[3](loc0: u64)
13LdU64(0)
14Gt
15BrFalse(17)
B4:
16Branch(21)
B5:
17MoveLoc[1](Arg1: &mut Vault<Ty0>)
18Pop
19LdConst[8](u64: 108)
20Abort
B6:
21CopyLoc[1](Arg1: &mut Vault<Ty0>)
22MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
23MoveLoc[2](Arg2: Balance<Ty0>)
24Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
25Pop
26MoveLoc[3](loc0: u64)
27MoveLoc[1](Arg1: &mut Vault<Ty0>)
28ImmBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
29Call balance::value<Ty0>(&Balance<Ty0>): u64
30Ret
}
public(friend) withdraw<Ty0>(Arg0: &mut Vault<Ty0>, Arg1: &RebaseFeeModel, Arg2: &AggPrice, Arg3: u64, Arg4: u64, Arg5: u64, Arg6: Decimal, Arg7: Decimal, Arg8: Decimal, Arg9: Decimal, Arg10: Option<VaultAmountConfig>): Balance<Ty0> * Decimal {
L11: loc0: VaultAmountConfig
L12: loc1: Rate
L13: loc2: Decimal
L14: loc3: Balance<Ty0>
L15: loc4: u64
L16: loc5: Decimal
B0:
0CopyLoc[0](Arg0: &mut Vault<Ty0>)
1ImmBorrowFieldGeneric[3](Vault.enabled: bool)
2ReadRef
3BrFalse(5)
B1:
4Branch(13)
B2:
5MoveLoc[0](Arg0: &mut Vault<Ty0>)
6Pop
7MoveLoc[2](Arg2: &AggPrice)
8Pop
9MoveLoc[1](Arg1: &RebaseFeeModel)
10Pop
11LdConst[0](u64: 100)
12Abort
B3:
13CopyLoc[3](Arg3: u64)
14LdU64(0)
15Gt
16BrFalse(18)
B4:
17Branch(26)
B5:
18MoveLoc[0](Arg0: &mut Vault<Ty0>)
19Pop
20MoveLoc[2](Arg2: &AggPrice)
21Pop
22MoveLoc[1](Arg1: &RebaseFeeModel)
23Pop
24LdConst[9](u64: 109)
25Abort
B6:
26MoveLoc[6](Arg6: Decimal)
27MoveLoc[3](Arg3: u64)
28Call decimal::from_u64(u64): Decimal
29MoveLoc[5](Arg5: u64)
30Call decimal::from_u64(u64): Decimal
31Call decimal::mul_div(Decimal, Decimal, Decimal): Decimal
32StLoc[16](loc5: Decimal)
33ImmBorrowLoc[16](loc5: Decimal)
34ImmBorrowLoc[7](Arg7: Decimal)
35Call decimal::le(&Decimal, &Decimal): bool
36BrFalse(38)
B7:
37Branch(46)
B8:
38MoveLoc[0](Arg0: &mut Vault<Ty0>)
39Pop
40MoveLoc[2](Arg2: &AggPrice)
41Pop
42MoveLoc[1](Arg1: &RebaseFeeModel)
43Pop
44LdConst[1](u64: 101)
45Abort
B9:
46MoveLoc[1](Arg1: &RebaseFeeModel)
47LdFalse
48MoveLoc[7](Arg7: Decimal)
49CopyLoc[16](loc5: Decimal)
50Call decimal::sub(Decimal, Decimal): Decimal
51MoveLoc[8](Arg8: Decimal)
52CopyLoc[16](loc5: Decimal)
53Call decimal::sub(Decimal, Decimal): Decimal
54CopyLoc[0](Arg0: &mut Vault<Ty0>)
55ImmBorrowFieldGeneric[4](Vault.weight: Decimal)
56ReadRef
57MoveLoc[9](Arg9: Decimal)
58Call compute_rebase_fee_rate(&RebaseFeeModel, bool, Decimal, Decimal, Decimal, Decimal): Rate
59StLoc[12](loc1: Rate)
60CopyLoc[16](loc5: Decimal)
61MoveLoc[12](loc1: Rate)
62Call decimal::mul_with_rate(Decimal, Rate): Decimal
63StLoc[13](loc2: Decimal)
64MoveLoc[16](loc5: Decimal)
65CopyLoc[13](loc2: Decimal)
66Call decimal::sub(Decimal, Decimal): Decimal
67StLoc[16](loc5: Decimal)
68MoveLoc[2](Arg2: &AggPrice)
69MoveLoc[16](loc5: Decimal)
70Call agg_price::value_to_coins(&AggPrice, Decimal): Decimal
71Call decimal::floor_u64(Decimal): u64
72StLoc[15](loc4: u64)
73CopyLoc[15](loc4: u64)
74CopyLoc[0](Arg0: &mut Vault<Ty0>)
75ImmBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
76Call balance::value<Ty0>(&Balance<Ty0>): u64
77Le
78BrFalse(80)
B10:
79Branch(84)
B11:
80MoveLoc[0](Arg0: &mut Vault<Ty0>)
81Pop
82LdConst[2](u64: 102)
83Abort
B12:
84ImmBorrowLoc[10](Arg10: Option<VaultAmountConfig>)
85Call option::is_some<VaultAmountConfig>(&Option<VaultAmountConfig>): bool
86BrFalse(112)
B13:
87ImmBorrowLoc[10](Arg10: Option<VaultAmountConfig>)
88Call option::borrow<VaultAmountConfig>(&Option<VaultAmountConfig>): &VaultAmountConfig
89ReadRef
90StLoc[11](loc0: VaultAmountConfig)
91ImmBorrowLoc[11](loc0: VaultAmountConfig)
92ImmBorrowField[23](VaultAmountConfig.min_amount: u64)
93ReadRef
94LdU64(0)
95Gt
96BrFalse(112)
B14:
97CopyLoc[0](Arg0: &mut Vault<Ty0>)
98ImmBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
99Call balance::value<Ty0>(&Balance<Ty0>): u64
100CopyLoc[15](loc4: u64)
101Sub
102ImmBorrowLoc[11](loc0: VaultAmountConfig)
103ImmBorrowField[23](VaultAmountConfig.min_amount: u64)
104ReadRef
105Ge
106BrFalse(108)
B15:
107Branch(112)
B16:
108MoveLoc[0](Arg0: &mut Vault<Ty0>)
109Pop
110LdConst[15](u64: 118)
111Abort
B17:
112MoveLoc[0](Arg0: &mut Vault<Ty0>)
113MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
114MoveLoc[15](loc4: u64)
115Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
116StLoc[14](loc3: Balance<Ty0>)
117ImmBorrowLoc[14](loc3: Balance<Ty0>)
118Call balance::value<Ty0>(&Balance<Ty0>): u64
119MoveLoc[4](Arg4: u64)
120Ge
121BrFalse(123)
B18:
122Branch(125)
B19:
123LdConst[11](u64: 111)
124Abort
B20:
125MoveLoc[14](loc3: Balance<Ty0>)
126MoveLoc[13](loc2: Decimal)
127Ret
}
public(friend) swap_in<Ty0>(Arg0: &mut Vault<Ty0>, Arg1: &RebaseFeeModel, Arg2: &AggPrice, Arg3: Balance<Ty0>, Arg4: Decimal, Arg5: Decimal, Arg6: Decimal, Arg7: Option<VaultAmountConfig>): Decimal * Decimal {
L8: loc0: VaultAmountConfig
L9: loc1: u64
L10: loc2: Rate
L11: loc3: Decimal
L12: loc4: Decimal
B0:
0CopyLoc[0](Arg0: &mut Vault<Ty0>)
1ImmBorrowFieldGeneric[3](Vault.enabled: bool)
2ReadRef
3BrFalse(5)
B1:
4Branch(13)
B2:
5MoveLoc[0](Arg0: &mut Vault<Ty0>)
6Pop
7MoveLoc[2](Arg2: &AggPrice)
8Pop
9MoveLoc[1](Arg1: &RebaseFeeModel)
10Pop
11LdConst[0](u64: 100)
12Abort
B3:
13ImmBorrowLoc[3](Arg3: Balance<Ty0>)
14Call balance::value<Ty0>(&Balance<Ty0>): u64
15StLoc[9](loc1: u64)
16CopyLoc[9](loc1: u64)
17LdU64(0)
18Gt
19BrFalse(21)
B4:
20Branch(29)
B5:
21MoveLoc[0](Arg0: &mut Vault<Ty0>)
22Pop
23MoveLoc[2](Arg2: &AggPrice)
24Pop
25MoveLoc[1](Arg1: &RebaseFeeModel)
26Pop
27LdConst[7](u64: 107)
28Abort
B6:
29ImmBorrowLoc[7](Arg7: Option<VaultAmountConfig>)
30Call option::is_some<VaultAmountConfig>(&Option<VaultAmountConfig>): bool
31BrFalse(61)
B7:
32ImmBorrowLoc[7](Arg7: Option<VaultAmountConfig>)
33Call option::borrow<VaultAmountConfig>(&Option<VaultAmountConfig>): &VaultAmountConfig
34ReadRef
35StLoc[8](loc0: VaultAmountConfig)
36ImmBorrowLoc[8](loc0: VaultAmountConfig)
37ImmBorrowField[22](VaultAmountConfig.max_amount: u64)
38ReadRef
39LdU64(0)
40Gt
41BrFalse(61)
B8:
42CopyLoc[0](Arg0: &mut Vault<Ty0>)
43ImmBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
44Call balance::value<Ty0>(&Balance<Ty0>): u64
45CopyLoc[9](loc1: u64)
46Add
47ImmBorrowLoc[8](loc0: VaultAmountConfig)
48ImmBorrowField[22](VaultAmountConfig.max_amount: u64)
49ReadRef
50Le
51BrFalse(53)
B9:
52Branch(61)
B10:
53MoveLoc[0](Arg0: &mut Vault<Ty0>)
54Pop
55MoveLoc[2](Arg2: &AggPrice)
56Pop
57MoveLoc[1](Arg1: &RebaseFeeModel)
58Pop
59LdConst[14](u64: 117)
60Abort
B11:
61CopyLoc[0](Arg0: &mut Vault<Ty0>)
62MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
63MoveLoc[3](Arg3: Balance<Ty0>)
64Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
65Pop
66MoveLoc[2](Arg2: &AggPrice)
67MoveLoc[9](loc1: u64)
68Call agg_price::coins_to_value(&AggPrice, u64): Decimal
69StLoc[12](loc4: Decimal)
70MoveLoc[1](Arg1: &RebaseFeeModel)
71LdTrue
72MoveLoc[4](Arg4: Decimal)
73CopyLoc[12](loc4: Decimal)
74Call decimal::add(Decimal, Decimal): Decimal
75MoveLoc[5](Arg5: Decimal)
76CopyLoc[12](loc4: Decimal)
77Call decimal::add(Decimal, Decimal): Decimal
78MoveLoc[0](Arg0: &mut Vault<Ty0>)
79ImmBorrowFieldGeneric[4](Vault.weight: Decimal)
80ReadRef
81MoveLoc[6](Arg6: Decimal)
82Call compute_rebase_fee_rate(&RebaseFeeModel, bool, Decimal, Decimal, Decimal, Decimal): Rate
83StLoc[10](loc2: Rate)
84CopyLoc[12](loc4: Decimal)
85MoveLoc[10](loc2: Rate)
86Call decimal::mul_with_rate(Decimal, Rate): Decimal
87StLoc[11](loc3: Decimal)
88MoveLoc[12](loc4: Decimal)
89CopyLoc[11](loc3: Decimal)
90Call decimal::sub(Decimal, Decimal): Decimal
91MoveLoc[11](loc3: Decimal)
92Ret
}
public(friend) swap_out<Ty0>(Arg0: &mut Vault<Ty0>, Arg1: &RebaseFeeModel, Arg2: &AggPrice, Arg3: u64, Arg4: Decimal, Arg5: Decimal, Arg6: Decimal, Arg7: Decimal, Arg8: Option<VaultAmountConfig>): Balance<Ty0> * Decimal {
L9: loc0: VaultAmountConfig
L10: loc1: u64
L11: loc2: Rate
L12: loc3: Decimal
B0:
0CopyLoc[0](Arg0: &mut Vault<Ty0>)
1ImmBorrowFieldGeneric[3](Vault.enabled: bool)
2ReadRef
3BrFalse(5)
B1:
4Branch(13)
B2:
5MoveLoc[1](Arg1: &RebaseFeeModel)
6Pop
7MoveLoc[0](Arg0: &mut Vault<Ty0>)
8Pop
9MoveLoc[2](Arg2: &AggPrice)
10Pop
11LdConst[0](u64: 100)
12Abort
B3:
13ImmBorrowLoc[4](Arg4: Decimal)
14ImmBorrowLoc[5](Arg5: Decimal)
15Call decimal::lt(&Decimal, &Decimal): bool
16BrFalse(18)
B4:
17Branch(26)
B5:
18MoveLoc[1](Arg1: &RebaseFeeModel)
19Pop
20MoveLoc[0](Arg0: &mut Vault<Ty0>)
21Pop
22MoveLoc[2](Arg2: &AggPrice)
23Pop
24LdConst[1](u64: 101)
25Abort
B6:
26MoveLoc[1](Arg1: &RebaseFeeModel)
27LdFalse
28MoveLoc[5](Arg5: Decimal)
29CopyLoc[4](Arg4: Decimal)
30Call decimal::sub(Decimal, Decimal): Decimal
31MoveLoc[6](Arg6: Decimal)
32CopyLoc[0](Arg0: &mut Vault<Ty0>)
33ImmBorrowFieldGeneric[4](Vault.weight: Decimal)
34ReadRef
35MoveLoc[7](Arg7: Decimal)
36Call compute_rebase_fee_rate(&RebaseFeeModel, bool, Decimal, Decimal, Decimal, Decimal): Rate
37StLoc[11](loc2: Rate)
38CopyLoc[4](Arg4: Decimal)
39MoveLoc[11](loc2: Rate)
40Call decimal::mul_with_rate(Decimal, Rate): Decimal
41StLoc[12](loc3: Decimal)
42MoveLoc[4](Arg4: Decimal)
43CopyLoc[12](loc3: Decimal)
44Call decimal::sub(Decimal, Decimal): Decimal
45StLoc[4](Arg4: Decimal)
46MoveLoc[2](Arg2: &AggPrice)
47MoveLoc[4](Arg4: Decimal)
48Call agg_price::value_to_coins(&AggPrice, Decimal): Decimal
49Call decimal::floor_u64(Decimal): u64
50StLoc[10](loc1: u64)
51CopyLoc[10](loc1: u64)
52MoveLoc[3](Arg3: u64)
53Ge
54BrFalse(56)
B7:
55Branch(60)
B8:
56MoveLoc[0](Arg0: &mut Vault<Ty0>)
57Pop
58LdConst[11](u64: 111)
59Abort
B9:
60CopyLoc[10](loc1: u64)
61CopyLoc[0](Arg0: &mut Vault<Ty0>)
62ImmBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
63Call balance::value<Ty0>(&Balance<Ty0>): u64
64Lt
65BrFalse(67)
B10:
66Branch(71)
B11:
67MoveLoc[0](Arg0: &mut Vault<Ty0>)
68Pop
69LdConst[2](u64: 102)
70Abort
B12:
71ImmBorrowLoc[8](Arg8: Option<VaultAmountConfig>)
72Call option::is_some<VaultAmountConfig>(&Option<VaultAmountConfig>): bool
73BrFalse(99)
B13:
74ImmBorrowLoc[8](Arg8: Option<VaultAmountConfig>)
75Call option::borrow<VaultAmountConfig>(&Option<VaultAmountConfig>): &VaultAmountConfig
76ReadRef
77StLoc[9](loc0: VaultAmountConfig)
78ImmBorrowLoc[9](loc0: VaultAmountConfig)
79ImmBorrowField[23](VaultAmountConfig.min_amount: u64)
80ReadRef
81LdU64(0)
82Gt
83BrFalse(99)
B14:
84CopyLoc[0](Arg0: &mut Vault<Ty0>)
85ImmBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
86Call balance::value<Ty0>(&Balance<Ty0>): u64
87CopyLoc[10](loc1: u64)
88Sub
89ImmBorrowLoc[9](loc0: VaultAmountConfig)
90ImmBorrowField[23](VaultAmountConfig.min_amount: u64)
91ReadRef
92Ge
93BrFalse(95)
B15:
94Branch(99)
B16:
95MoveLoc[0](Arg0: &mut Vault<Ty0>)
96Pop
97LdConst[15](u64: 118)
98Abort
B17:
99MoveLoc[0](Arg0: &mut Vault<Ty0>)
100MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
101MoveLoc[10](loc1: u64)
102Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
103MoveLoc[12](loc3: Decimal)
104Ret
}
public(friend) open_position_v1<Ty0>(Arg0: &mut Vault<Ty0>, Arg1: &mut Symbol, Arg2: &FeeConfig, Arg3: &ReservingFeeModel, Arg4: &FundingFeeModel, Arg5: &PositionConfig, Arg6: &AggPrice, Arg7: &AggPrice, Arg8: &mut Balance<Ty0>, Arg9: Decimal, Arg10: Rate, Arg11: Option<Rate>, Arg12: bool, Arg13: u64, Arg14: u64, Arg15: Decimal, Arg16: u64, Arg17: address, Arg18: bool): OpenPositionResult<Ty0> {
L19: loc0: TypeName
L20: loc1: u64
L21: loc2: u64
L22: loc3: Decimal
L23: loc4: Decimal
L24: loc5: PositionConfig
L25: loc6: Option<Balance<Ty0>>
L26: loc7: Balance<Ty0>
L27: loc8: Balance<Ty0>
L28: loc9: Position<Ty0>
L29: loc10: &VecSet<TypeName>
L30: loc11: u64
L31: loc12: Option<Balance<Ty0>>
L32: loc13: Option<u64>
L33: loc14: u64
L34: loc15: u64
L35: loc16: u64
L36: loc17: u64
L37: loc18: u64
L38: loc19: SDecimal
L39: loc20: Balance<Ty0>
L40: loc21: u64
L41: loc22: u64
L42: loc23: Balance<Ty0>
L43: loc24: u64
L44: loc25: Decimal
L45: loc26: Position<Ty0>
L46: loc27: u64
L47: loc28: Balance<Ty0>
L48: loc29: u64
L49: loc30: Option<Balance<Ty0>>
L50: loc31: u64
B0:
0CopyLoc[0](Arg0: &mut Vault<Ty0>)
1ImmBorrowFieldGeneric[3](Vault.enabled: bool)
2ReadRef
3BrFalse(5)
B1:
4Branch(25)
B2:
5MoveLoc[0](Arg0: &mut Vault<Ty0>)
6Pop
7MoveLoc[1](Arg1: &mut Symbol)
8Pop
9MoveLoc[3](Arg3: &ReservingFeeModel)
10Pop
11MoveLoc[5](Arg5: &PositionConfig)
12Pop
13MoveLoc[7](Arg7: &AggPrice)
14Pop
15MoveLoc[4](Arg4: &FundingFeeModel)
16Pop
17MoveLoc[2](Arg2: &FeeConfig)
18Pop
19MoveLoc[6](Arg6: &AggPrice)
20Pop
21MoveLoc[8](Arg8: &mut Balance<Ty0>)
22Pop
23LdConst[0](u64: 100)
24Abort
B3:
25CopyLoc[1](Arg1: &mut Symbol)
26ImmBorrowField[12](Symbol.open_enabled: bool)
27ReadRef
28BrFalse(30)
B4:
29Branch(50)
B5:
30MoveLoc[0](Arg0: &mut Vault<Ty0>)
31Pop
32MoveLoc[1](Arg1: &mut Symbol)
33Pop
34MoveLoc[3](Arg3: &ReservingFeeModel)
35Pop
36MoveLoc[5](Arg5: &PositionConfig)
37Pop
38MoveLoc[7](Arg7: &AggPrice)
39Pop
40MoveLoc[4](Arg4: &FundingFeeModel)
41Pop
42MoveLoc[2](Arg2: &FeeConfig)
43Pop
44MoveLoc[6](Arg6: &AggPrice)
45Pop
46MoveLoc[8](Arg8: &mut Balance<Ty0>)
47Pop
48LdConst[4](u64: 104)
49Abort
B6:
50CopyLoc[3](Arg3: &ReservingFeeModel)
51Call object::id<ReservingFeeModel>(&ReservingFeeModel): ID
52CopyLoc[0](Arg0: &mut Vault<Ty0>)
53ImmBorrowFieldGeneric[5](Vault.reserving_fee_model: ID)
54ReadRef
55Eq
56BrFalse(58)
B7:
57Branch(78)
B8:
58MoveLoc[0](Arg0: &mut Vault<Ty0>)
59Pop
60MoveLoc[1](Arg1: &mut Symbol)
61Pop
62MoveLoc[3](Arg3: &ReservingFeeModel)
63Pop
64MoveLoc[5](Arg5: &PositionConfig)
65Pop
66MoveLoc[7](Arg7: &AggPrice)
67Pop
68MoveLoc[4](Arg4: &FundingFeeModel)
69Pop
70MoveLoc[2](Arg2: &FeeConfig)
71Pop
72MoveLoc[6](Arg6: &AggPrice)
73Pop
74MoveLoc[8](Arg8: &mut Balance<Ty0>)
75Pop
76LdConst[12](u64: 112)
77Abort
B9:
78CopyLoc[4](Arg4: &FundingFeeModel)
79Call object::id<FundingFeeModel>(&FundingFeeModel): ID
80CopyLoc[1](Arg1: &mut Symbol)
81ImmBorrowField[16](Symbol.funding_fee_model: ID)
82ReadRef
83Eq
84BrFalse(86)
B10:
85Branch(106)
B11:
86MoveLoc[0](Arg0: &mut Vault<Ty0>)
87Pop
88MoveLoc[1](Arg1: &mut Symbol)
89Pop
90MoveLoc[3](Arg3: &ReservingFeeModel)
91Pop
92MoveLoc[5](Arg5: &PositionConfig)
93Pop
94MoveLoc[7](Arg7: &AggPrice)
95Pop
96MoveLoc[4](Arg4: &FundingFeeModel)
97Pop
98MoveLoc[2](Arg2: &FeeConfig)
99Pop
100MoveLoc[6](Arg6: &AggPrice)
101Pop
102MoveLoc[8](Arg8: &mut Balance<Ty0>)
103Pop
104LdConst[13](u64: 113)
105Abort
B12:
106CopyLoc[1](Arg1: &mut Symbol)
107ImmBorrowField[15](Symbol.supported_collaterals: VecSet<TypeName>)
108StLoc[29](loc10: &VecSet<TypeName>)
109Call type_name::get<Ty0>(): TypeName
110StLoc[19](loc0: TypeName)
111MoveLoc[29](loc10: &VecSet<TypeName>)
112ImmBorrowLoc[19](loc0: TypeName)
113Call vec_set::contains<TypeName>(&VecSet<TypeName>, &TypeName): bool
114BrFalse(116)
B13:
115Branch(136)
B14:
116MoveLoc[0](Arg0: &mut Vault<Ty0>)
117Pop
118MoveLoc[1](Arg1: &mut Symbol)
119Pop
120MoveLoc[3](Arg3: &ReservingFeeModel)
121Pop
122MoveLoc[5](Arg5: &PositionConfig)
123Pop
124MoveLoc[7](Arg7: &AggPrice)
125Pop
126MoveLoc[4](Arg4: &FundingFeeModel)
127Pop
128MoveLoc[2](Arg2: &FeeConfig)
129Pop
130MoveLoc[6](Arg6: &AggPrice)
131Pop
132MoveLoc[8](Arg8: &mut Balance<Ty0>)
133Pop
134LdConst[3](u64: 103)
135Abort
B15:
136CopyLoc[0](Arg0: &mut Vault<Ty0>)
137ImmBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
138Call balance::value<Ty0>(&Balance<Ty0>): u64
139CopyLoc[14](Arg14: u64)
140Gt
141BrFalse(143)
B16:
142Branch(163)
B17:
143MoveLoc[0](Arg0: &mut Vault<Ty0>)
144Pop
145MoveLoc[1](Arg1: &mut Symbol)
146Pop
147MoveLoc[3](Arg3: &ReservingFeeModel)
148Pop
149MoveLoc[5](Arg5: &PositionConfig)
150Pop
151MoveLoc[7](Arg7: &AggPrice)
152Pop
153MoveLoc[4](Arg4: &FundingFeeModel)
154Pop
155MoveLoc[2](Arg2: &FeeConfig)
156Pop
157MoveLoc[6](Arg6: &AggPrice)
158Pop
159MoveLoc[8](Arg8: &mut Balance<Ty0>)
160Pop
161LdConst[2](u64: 102)
162Abort
B18:
163CopyLoc[0](Arg0: &mut Vault<Ty0>)
164MoveLoc[3](Arg3: &ReservingFeeModel)
165CopyLoc[16](Arg16: u64)
166Call refresh_vault<Ty0>(&mut Vault<Ty0>, &ReservingFeeModel, u64)
167MoveLoc[18](Arg18: bool)
168Not
169BrFalse(183)
B19:
170CopyLoc[1](Arg1: &mut Symbol)
171FreezeRef
172CopyLoc[7](Arg7: &AggPrice)
173MoveLoc[12](Arg12: bool)
174Call symbol_delta_size(&Symbol, &AggPrice, bool): SDecimal
175StLoc[38](loc19: SDecimal)
176CopyLoc[1](Arg1: &mut Symbol)
177MoveLoc[4](Arg4: &FundingFeeModel)
178MoveLoc[38](loc19: SDecimal)
179MoveLoc[15](Arg15: Decimal)
180CopyLoc[16](Arg16: u64)
181Call refresh_symbol(&mut Symbol, &FundingFeeModel, SDecimal, Decimal, u64)
182Branch(185)
B20:
183MoveLoc[4](Arg4: &FundingFeeModel)
184Pop
B21:
185CopyLoc[5](Arg5: &PositionConfig)
186CopyLoc[6](Arg6: &AggPrice)
187CopyLoc[7](Arg7: &AggPrice)
188CopyLoc[0](Arg0: &mut Vault<Ty0>)
189MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
190MoveLoc[8](Arg8: &mut Balance<Ty0>)
191MoveLoc[9](Arg9: Decimal)
192CopyLoc[13](Arg13: u64)
193CopyLoc[14](Arg14: u64)
194CopyLoc[0](Arg0: &mut Vault<Ty0>)
195ImmBorrowFieldGeneric[0](Vault.acc_reserving_rate: Rate)
196ReadRef
197CopyLoc[1](Arg1: &mut Symbol)
198ImmBorrowField[3](Symbol.acc_funding_rate: SRate)
199ReadRef
200MoveLoc[16](Arg16: u64)
201Call position::open_position<Ty0>(&PositionConfig, &AggPrice, &AggPrice, &mut Balance<Ty0>, &mut Balance<Ty0>, Decimal, u64, u64, Rate, SRate, u64): OpenPositionResult<Ty0>
202Call position::unwrap_open_position_result<Ty0>(OpenPositionResult<Ty0>): Position<Ty0> * Balance<Ty0> * Decimal
203StLoc[44](loc25: Decimal)
204StLoc[42](loc23: Balance<Ty0>)
205StLoc[45](loc26: Position<Ty0>)
206ImmBorrowLoc[42](loc23: Balance<Ty0>)
207Call balance::value<Ty0>(&Balance<Ty0>): u64
208StLoc[43](loc24: u64)
209CopyLoc[44](loc25: Decimal)
210MoveLoc[10](Arg10: Rate)
211Call decimal::mul_with_rate(Decimal, Rate): Decimal
212Call decimal::floor_u64(Decimal): u64
213StLoc[48](loc29: u64)
214CopyLoc[44](loc25: Decimal)
215MoveLoc[2](Arg2: &FeeConfig)
216Call fee::get_fee_rate(&FeeConfig): Rate
217Call decimal::mul_with_rate(Decimal, Rate): Decimal
218Call decimal::floor_u64(Decimal): u64
219StLoc[40](loc21: u64)
220ImmBorrowLoc[11](Arg11: Option<Rate>)
221Call option::is_some<Rate>(&Option<Rate>): bool
222BrFalse(231)
B22:
223MoveLoc[44](loc25: Decimal)
224ImmBorrowLoc[11](Arg11: Option<Rate>)
225Call option::borrow<Rate>(&Option<Rate>): &Rate
226ReadRef
227Call decimal::mul_with_rate(Decimal, Rate): Decimal
228Call decimal::floor_u64(Decimal): u64
229StLoc[30](loc11: u64)
230Branch(233)
B23:
231LdU64(0)
232StLoc[30](loc11: u64)
B24:
233MoveLoc[30](loc11: u64)
234StLoc[50](loc31: u64)
235CopyLoc[0](Arg0: &mut Vault<Ty0>)
236ImmBorrowFieldGeneric[8](Vault.reserved_amount: u64)
237ReadRef
238CopyLoc[14](Arg14: u64)
239Add
240CopyLoc[0](Arg0: &mut Vault<Ty0>)
241MutBorrowFieldGeneric[8](Vault.reserved_amount: u64)
242WriteRef
243CopyLoc[0](Arg0: &mut Vault<Ty0>)
244MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
245MoveLoc[42](loc23: Balance<Ty0>)
246Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
247StLoc[41](loc22: u64)
248CopyLoc[48](loc29: u64)
249CopyLoc[40](loc21: u64)
250Add
251CopyLoc[50](loc31: u64)
252Add
253StLoc[46](loc27: u64)
254MoveLoc[41](loc22: u64)
255MoveLoc[46](loc27: u64)
256Gt
257BrFalse(259)
B25:
258Branch(271)
B26:
259MoveLoc[0](Arg0: &mut Vault<Ty0>)
260Pop
261MoveLoc[1](Arg1: &mut Symbol)
262Pop
263MoveLoc[5](Arg5: &PositionConfig)
264Pop
265MoveLoc[7](Arg7: &AggPrice)
266Pop
267MoveLoc[6](Arg6: &AggPrice)
268Pop
269LdConst[2](u64: 102)
270Abort
B27:
271CopyLoc[0](Arg0: &mut Vault<Ty0>)
272MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
273CopyLoc[48](loc29: u64)
274Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
275StLoc[47](loc28: Balance<Ty0>)
276CopyLoc[0](Arg0: &mut Vault<Ty0>)
277MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
278CopyLoc[40](loc21: u64)
279Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
280StLoc[39](loc20: Balance<Ty0>)
281CopyLoc[50](loc31: u64)
282LdU64(0)
283Gt
284BrFalse(292)
B28:
285MoveLoc[0](Arg0: &mut Vault<Ty0>)
286MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
287CopyLoc[50](loc31: u64)
288Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
289Call option::some<Balance<Ty0>>(Balance<Ty0>): Option<Balance<Ty0>>
290StLoc[31](loc12: Option<Balance<Ty0>>)
291Branch(296)
B29:
292MoveLoc[0](Arg0: &mut Vault<Ty0>)
293Pop
294Call option::none<Balance<Ty0>>(): Option<Balance<Ty0>>
295StLoc[31](loc12: Option<Balance<Ty0>>)
B30:
296MoveLoc[31](loc12: Option<Balance<Ty0>>)
297StLoc[49](loc30: Option<Balance<Ty0>>)
298CopyLoc[1](Arg1: &mut Symbol)
299ImmBorrowField[19](Symbol.opening_size: Decimal)
300ReadRef
301ImmBorrowLoc[45](loc26: Position<Ty0>)
302Call position::position_size<Ty0>(&Position<Ty0>): Decimal
303Call decimal::add(Decimal, Decimal): Decimal
304CopyLoc[1](Arg1: &mut Symbol)
305MutBorrowField[19](Symbol.opening_size: Decimal)
306WriteRef
307CopyLoc[1](Arg1: &mut Symbol)
308ImmBorrowField[18](Symbol.opening_amount: u64)
309ReadRef
310CopyLoc[13](Arg13: u64)
311Add
312MoveLoc[1](Arg1: &mut Symbol)
313MutBorrowField[18](Symbol.opening_amount: u64)
314WriteRef
315ImmBorrowLoc[45](loc26: Position<Ty0>)
316Call position::collateral_amount<Ty0>(&Position<Ty0>): u64
317StLoc[37](loc18: u64)
318MoveLoc[45](loc26: Position<Ty0>)
319StLoc[28](loc9: Position<Ty0>)
320MoveLoc[47](loc28: Balance<Ty0>)
321StLoc[27](loc8: Balance<Ty0>)
322MoveLoc[39](loc20: Balance<Ty0>)
323StLoc[26](loc7: Balance<Ty0>)
324MoveLoc[49](loc30: Option<Balance<Ty0>>)
325StLoc[25](loc6: Option<Balance<Ty0>>)
326MoveLoc[5](Arg5: &PositionConfig)
327ReadRef
328StLoc[24](loc5: PositionConfig)
329MoveLoc[6](Arg6: &AggPrice)
330Call agg_price::price_of(&AggPrice): Decimal
331StLoc[23](loc4: Decimal)
332MoveLoc[7](Arg7: &AggPrice)
333Call agg_price::price_of(&AggPrice): Decimal
334StLoc[22](loc3: Decimal)
335MoveLoc[13](Arg13: u64)
336StLoc[21](loc2: u64)
337MoveLoc[43](loc24: u64)
338StLoc[20](loc1: u64)
339MoveLoc[14](Arg14: u64)
340StLoc[36](loc17: u64)
341MoveLoc[37](loc18: u64)
342StLoc[35](loc16: u64)
343MoveLoc[48](loc29: u64)
344StLoc[34](loc15: u64)
345MoveLoc[40](loc21: u64)
346StLoc[33](loc14: u64)
347CopyLoc[50](loc31: u64)
348LdU64(0)
349Gt
350BrFalse(355)
B31:
351MoveLoc[50](loc31: u64)
352Call option::some<u64>(u64): Option<u64>
353StLoc[32](loc13: Option<u64>)
354Branch(357)
B32:
355Call option::none<u64>(): Option<u64>
356StLoc[32](loc13: Option<u64>)
B33:
357MoveLoc[28](loc9: Position<Ty0>)
358MoveLoc[27](loc8: Balance<Ty0>)
359MoveLoc[26](loc7: Balance<Ty0>)
360MoveLoc[25](loc6: Option<Balance<Ty0>>)
361MoveLoc[24](loc5: PositionConfig)
362MoveLoc[23](loc4: Decimal)
363MoveLoc[22](loc3: Decimal)
364MoveLoc[21](loc2: u64)
365MoveLoc[20](loc1: u64)
366MoveLoc[36](loc17: u64)
367MoveLoc[35](loc16: u64)
368MoveLoc[34](loc15: u64)
369MoveLoc[33](loc14: u64)
370MoveLoc[32](loc13: Option<u64>)
371MoveLoc[17](Arg17: address)
372Pack[7](OpenPositionSuccessEvent)
373PackGeneric[2](OpenPositionResult<Ty0>)
374Ret
}
public(friend) unwrap_open_position_result<Ty0>(Arg0: OpenPositionResult<Ty0>): Position<Ty0> * Balance<Ty0> * Balance<Ty0> * Option<Balance<Ty0>> * OpenPositionSuccessEvent {
B0:
0MoveLoc[0](Arg0: OpenPositionResult<Ty0>)
1UnpackGeneric[2](OpenPositionResult<Ty0>)
2Ret
}
public(friend) decrease_position_v1_1<Ty0>(Arg0: &mut Vault<Ty0>, Arg1: &mut Symbol, Arg2: &FeeConfig, Arg3: &mut Position<Ty0>, Arg4: &ReservingFeeModel, Arg5: &FundingFeeModel, Arg6: &AggPrice, Arg7: &AggPrice, Arg8: Decimal, Arg9: Rate, Arg10: Option<Rate>, Arg11: bool, Arg12: u64, Arg13: Decimal, Arg14: &PositionInstantExitFeeConfig, Arg15: u64, Arg16: address, Arg17: bool): DecreasePositionResultV1<Ty0> {
L18: loc0: Decimal
L19: loc1: u8
L20: loc2: Decimal
L21: loc3: SDecimal
L22: loc4: Decimal
L23: loc5: Decimal
L24: loc6: u64
L25: loc7: Decimal
L26: loc8: Decimal
L27: loc9: Option<Balance<Ty0>>
L28: loc10: Balance<Ty0>
L29: loc11: Option<Balance<Ty0>>
L30: loc12: Balance<Ty0>
L31: loc13: Balance<Ty0>
L32: loc14: Option<u64>
L33: loc15: u64
L34: loc16: u64
L35: loc17: u64
L36: loc18: bool
L37: loc19: bool
L38: loc20: SDecimal
L39: loc21: bool
L40: loc22: Decimal
L41: loc23: Decimal
L42: loc24: u64
L43: loc25: SDecimal
L44: loc26: SDecimal
L45: loc27: Rate
L46: loc28: Balance<Ty0>
L47: loc29: u64
L48: loc30: Decimal
L49: loc31: SDecimal
L50: loc32: bool
L51: loc33: u8
L52: loc34: Decimal
L53: loc35: u64
L54: loc36: Decimal
L55: loc37: Balance<Ty0>
L56: loc38: u64
L57: loc39: Decimal
L58: loc40: Decimal
L59: loc41: Decimal
L60: loc42: Option<Balance<Ty0>>
L61: loc43: u64
L62: loc44: Decimal
L63: loc45: u64
L64: loc46: Balance<Ty0>
L65: loc47: Balance<Ty0>
B0:
0CopyLoc[0](Arg0: &mut Vault<Ty0>)
1ImmBorrowFieldGeneric[3](Vault.enabled: bool)
2ReadRef
3BrFalse(5)
B1:
4Branch(25)
B2:
5MoveLoc[0](Arg0: &mut Vault<Ty0>)
6Pop
7MoveLoc[1](Arg1: &mut Symbol)
8Pop
9MoveLoc[4](Arg4: &ReservingFeeModel)
10Pop
11MoveLoc[3](Arg3: &mut Position<Ty0>)
12Pop
13MoveLoc[14](Arg14: &PositionInstantExitFeeConfig)
14Pop
15MoveLoc[7](Arg7: &AggPrice)
16Pop
17MoveLoc[5](Arg5: &FundingFeeModel)
18Pop
19MoveLoc[2](Arg2: &FeeConfig)
20Pop
21MoveLoc[6](Arg6: &AggPrice)
22Pop
23LdConst[0](u64: 100)
24Abort
B3:
25CopyLoc[1](Arg1: &mut Symbol)
26ImmBorrowField[13](Symbol.decrease_enabled: bool)
27ReadRef
28BrFalse(30)
B4:
29Branch(50)
B5:
30MoveLoc[0](Arg0: &mut Vault<Ty0>)
31Pop
32MoveLoc[1](Arg1: &mut Symbol)
33Pop
34MoveLoc[4](Arg4: &ReservingFeeModel)
35Pop
36MoveLoc[3](Arg3: &mut Position<Ty0>)
37Pop
38MoveLoc[14](Arg14: &PositionInstantExitFeeConfig)
39Pop
40MoveLoc[7](Arg7: &AggPrice)
41Pop
42MoveLoc[5](Arg5: &FundingFeeModel)
43Pop
44MoveLoc[2](Arg2: &FeeConfig)
45Pop
46MoveLoc[6](Arg6: &AggPrice)
47Pop
48LdConst[5](u64: 105)
49Abort
B6:
50CopyLoc[4](Arg4: &ReservingFeeModel)
51Call object::id<ReservingFeeModel>(&ReservingFeeModel): ID
52CopyLoc[0](Arg0: &mut Vault<Ty0>)
53ImmBorrowFieldGeneric[5](Vault.reserving_fee_model: ID)
54ReadRef
55Eq
56BrFalse(58)
B7:
57Branch(78)
B8:
58MoveLoc[0](Arg0: &mut Vault<Ty0>)
59Pop
60MoveLoc[1](Arg1: &mut Symbol)
61Pop
62MoveLoc[4](Arg4: &ReservingFeeModel)
63Pop
64MoveLoc[3](Arg3: &mut Position<Ty0>)
65Pop
66MoveLoc[14](Arg14: &PositionInstantExitFeeConfig)
67Pop
68MoveLoc[7](Arg7: &AggPrice)
69Pop
70MoveLoc[5](Arg5: &FundingFeeModel)
71Pop
72MoveLoc[2](Arg2: &FeeConfig)
73Pop
74MoveLoc[6](Arg6: &AggPrice)
75Pop
76LdConst[12](u64: 112)
77Abort
B9:
78CopyLoc[5](Arg5: &FundingFeeModel)
79Call object::id<FundingFeeModel>(&FundingFeeModel): ID
80CopyLoc[1](Arg1: &mut Symbol)
81ImmBorrowField[16](Symbol.funding_fee_model: ID)
82ReadRef
83Eq
84BrFalse(86)
B10:
85Branch(106)
B11:
86MoveLoc[0](Arg0: &mut Vault<Ty0>)
87Pop
88MoveLoc[1](Arg1: &mut Symbol)
89Pop
90MoveLoc[4](Arg4: &ReservingFeeModel)
91Pop
92MoveLoc[3](Arg3: &mut Position<Ty0>)
93Pop
94MoveLoc[14](Arg14: &PositionInstantExitFeeConfig)
95Pop
96MoveLoc[7](Arg7: &AggPrice)
97Pop
98MoveLoc[5](Arg5: &FundingFeeModel)
99Pop
100MoveLoc[2](Arg2: &FeeConfig)
101Pop
102MoveLoc[6](Arg6: &AggPrice)
103Pop
104LdConst[13](u64: 113)
105Abort
B12:
106CopyLoc[0](Arg0: &mut Vault<Ty0>)
107MoveLoc[4](Arg4: &ReservingFeeModel)
108CopyLoc[15](Arg15: u64)
109Call refresh_vault<Ty0>(&mut Vault<Ty0>, &ReservingFeeModel, u64)
110MoveLoc[17](Arg17: bool)
111Not
112BrFalse(126)
B13:
113CopyLoc[1](Arg1: &mut Symbol)
114FreezeRef
115CopyLoc[7](Arg7: &AggPrice)
116CopyLoc[11](Arg11: bool)
117Call symbol_delta_size(&Symbol, &AggPrice, bool): SDecimal
118StLoc[44](loc26: SDecimal)
119CopyLoc[1](Arg1: &mut Symbol)
120MoveLoc[5](Arg5: &FundingFeeModel)
121MoveLoc[44](loc26: SDecimal)
122MoveLoc[13](Arg13: Decimal)
123CopyLoc[15](Arg15: u64)
124Call refresh_symbol(&mut Symbol, &FundingFeeModel, SDecimal, Decimal, u64)
125Branch(128)
B14:
126MoveLoc[5](Arg5: &FundingFeeModel)
127Pop
B15:
128MoveLoc[3](Arg3: &mut Position<Ty0>)
129CopyLoc[6](Arg6: &AggPrice)
130CopyLoc[7](Arg7: &AggPrice)
131MoveLoc[8](Arg8: Decimal)
132MoveLoc[11](Arg11: bool)
133CopyLoc[12](Arg12: u64)
134CopyLoc[0](Arg0: &mut Vault<Ty0>)
135ImmBorrowFieldGeneric[0](Vault.acc_reserving_rate: Rate)
136ReadRef
137CopyLoc[1](Arg1: &mut Symbol)
138ImmBorrowField[3](Symbol.acc_funding_rate: SRate)
139ReadRef
140MoveLoc[14](Arg14: &PositionInstantExitFeeConfig)
141MoveLoc[15](Arg15: u64)
142Call position::decrease_position_v1<Ty0>(&mut Position<Ty0>, &AggPrice, &AggPrice, Decimal, bool, u64, Rate, SRate, &PositionInstantExitFeeConfig, u64): DecreasePositionResultV1<Ty0>
143Call position::unwrap_decrease_position_result_v1<Ty0>(DecreasePositionResultV1<Ty0>): bool * bool * u64 * u64 * Decimal * Decimal * Decimal * Decimal * SDecimal * Decimal * u8 * Balance<Ty0> * Balance<Ty0>
144StLoc[64](loc46: Balance<Ty0>)
145StLoc[65](loc47: Balance<Ty0>)
146StLoc[51](loc33: u8)
147StLoc[52](loc34: Decimal)
148StLoc[49](loc31: SDecimal)
149StLoc[59](loc41: Decimal)
150StLoc[40](loc22: Decimal)
151StLoc[58](loc40: Decimal)
152StLoc[41](loc23: Decimal)
153StLoc[42](loc24: u64)
154StLoc[63](loc45: u64)
155StLoc[50](loc32: bool)
156StLoc[39](loc21: bool)
157CopyLoc[40](loc22: Decimal)
158MoveLoc[9](Arg9: Rate)
159Call decimal::mul_with_rate(Decimal, Rate): Decimal
160StLoc[57](loc39: Decimal)
161CopyLoc[6](Arg6: &AggPrice)
162CopyLoc[57](loc39: Decimal)
163Call agg_price::value_to_coins(&AggPrice, Decimal): Decimal
164Call decimal::floor_u64(Decimal): u64
165StLoc[56](loc38: u64)
166ImmBorrowLoc[10](Arg10: Option<Rate>)
167Call option::is_some<Rate>(&Option<Rate>): bool
168BrFalse(176)
B16:
169CopyLoc[40](loc22: Decimal)
170ImmBorrowLoc[10](Arg10: Option<Rate>)
171Call option::borrow<Rate>(&Option<Rate>): &Rate
172ReadRef
173Call decimal::mul_with_rate(Decimal, Rate): Decimal
174StLoc[18](loc0: Decimal)
175Branch(178)
B17:
176Call decimal::zero(): Decimal
177StLoc[18](loc0: Decimal)
B18:
178MoveLoc[18](loc0: Decimal)
179StLoc[62](loc44: Decimal)
180CopyLoc[6](Arg6: &AggPrice)
181CopyLoc[62](loc44: Decimal)
182Call agg_price::value_to_coins(&AggPrice, Decimal): Decimal
183Call decimal::floor_u64(Decimal): u64
184StLoc[61](loc43: u64)
185MoveLoc[2](Arg2: &FeeConfig)
186Call fee::get_fee_rate(&FeeConfig): Rate
187StLoc[45](loc27: Rate)
188CopyLoc[40](loc22: Decimal)
189CopyLoc[52](loc34: Decimal)
190Call decimal::add(Decimal, Decimal): Decimal
191MoveLoc[45](loc27: Rate)
192Call decimal::mul_with_rate(Decimal, Rate): Decimal
193StLoc[48](loc30: Decimal)
194CopyLoc[6](Arg6: &AggPrice)
195CopyLoc[48](loc30: Decimal)
196Call agg_price::value_to_coins(&AggPrice, Decimal): Decimal
197Call decimal::floor_u64(Decimal): u64
198StLoc[47](loc29: u64)
199MoveLoc[57](loc39: Decimal)
200MoveLoc[48](loc30: Decimal)
201MoveLoc[62](loc44: Decimal)
202Call decimal::add(Decimal, Decimal): Decimal
203Call decimal::add(Decimal, Decimal): Decimal
204StLoc[54](loc36: Decimal)
205CopyLoc[47](loc29: u64)
206CopyLoc[56](loc38: u64)
207Add
208CopyLoc[61](loc43: u64)
209Add
210StLoc[53](loc35: u64)
211CopyLoc[0](Arg0: &mut Vault<Ty0>)
212ImmBorrowFieldGeneric[8](Vault.reserved_amount: u64)
213ReadRef
214MoveLoc[42](loc24: u64)
215Sub
216CopyLoc[0](Arg0: &mut Vault<Ty0>)
217MutBorrowFieldGeneric[8](Vault.reserved_amount: u64)
218WriteRef
219CopyLoc[0](Arg0: &mut Vault<Ty0>)
220ImmBorrowFieldGeneric[1](Vault.unrealised_reserving_fee_amount: Decimal)
221ReadRef
222MoveLoc[58](loc40: Decimal)
223Call decimal::sub(Decimal, Decimal): Decimal
224CopyLoc[0](Arg0: &mut Vault<Ty0>)
225MutBorrowFieldGeneric[1](Vault.unrealised_reserving_fee_amount: Decimal)
226WriteRef
227CopyLoc[0](Arg0: &mut Vault<Ty0>)
228MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
229MoveLoc[65](loc47: Balance<Ty0>)
230Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
231MoveLoc[53](loc35: u64)
232Gt
233BrFalse(235)
B19:
234Branch(245)
B20:
235MoveLoc[0](Arg0: &mut Vault<Ty0>)
236Pop
237MoveLoc[1](Arg1: &mut Symbol)
238Pop
239MoveLoc[7](Arg7: &AggPrice)
240Pop
241MoveLoc[6](Arg6: &AggPrice)
242Pop
243LdConst[2](u64: 102)
244Abort
B21:
245CopyLoc[0](Arg0: &mut Vault<Ty0>)
246MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
247CopyLoc[56](loc38: u64)
248Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
249StLoc[55](loc37: Balance<Ty0>)
250CopyLoc[0](Arg0: &mut Vault<Ty0>)
251MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
252CopyLoc[47](loc29: u64)
253Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
254StLoc[46](loc28: Balance<Ty0>)
255CopyLoc[61](loc43: u64)
256LdU64(0)
257Gt
258BrFalse(266)
B22:
259MoveLoc[0](Arg0: &mut Vault<Ty0>)
260MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
261CopyLoc[61](loc43: u64)
262Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
263Call option::some<Balance<Ty0>>(Balance<Ty0>): Option<Balance<Ty0>>
264StLoc[29](loc11: Option<Balance<Ty0>>)
265Branch(270)
B23:
266MoveLoc[0](Arg0: &mut Vault<Ty0>)
267Pop
268Call option::none<Balance<Ty0>>(): Option<Balance<Ty0>>
269StLoc[29](loc11: Option<Balance<Ty0>>)
B24:
270MoveLoc[29](loc11: Option<Balance<Ty0>>)
271StLoc[60](loc42: Option<Balance<Ty0>>)
272CopyLoc[1](Arg1: &mut Symbol)
273ImmBorrowField[19](Symbol.opening_size: Decimal)
274ReadRef
275MoveLoc[41](loc23: Decimal)
276Call decimal::sub(Decimal, Decimal): Decimal
277CopyLoc[1](Arg1: &mut Symbol)
278MutBorrowField[19](Symbol.opening_size: Decimal)
279WriteRef
280CopyLoc[1](Arg1: &mut Symbol)
281ImmBorrowField[18](Symbol.opening_amount: u64)
282ReadRef
283CopyLoc[12](Arg12: u64)
284Sub
285CopyLoc[1](Arg1: &mut Symbol)
286MutBorrowField[18](Symbol.opening_amount: u64)
287WriteRef
288CopyLoc[1](Arg1: &mut Symbol)
289ImmBorrowField[4](Symbol.unrealised_funding_fee_value: SDecimal)
290ReadRef
291CopyLoc[49](loc31: SDecimal)
292Call sdecimal::sub(SDecimal, SDecimal): SDecimal
293CopyLoc[1](Arg1: &mut Symbol)
294MutBorrowField[4](Symbol.unrealised_funding_fee_value: SDecimal)
295WriteRef
296CopyLoc[50](loc32: bool)
297Not
298CopyLoc[6](Arg6: &AggPrice)
299CopyLoc[63](loc45: u64)
300Call agg_price::coins_to_value(&AggPrice, u64): Decimal
301Call sdecimal::from_decimal(bool, Decimal): SDecimal
302CopyLoc[40](loc22: Decimal)
303MoveLoc[54](loc36: Decimal)
304Call decimal::sub(Decimal, Decimal): Decimal
305CopyLoc[59](loc41: Decimal)
306Call decimal::add(Decimal, Decimal): Decimal
307CopyLoc[52](loc34: Decimal)
308Call decimal::add(Decimal, Decimal): Decimal
309Call sdecimal::sub_with_decimal(SDecimal, Decimal): SDecimal
310StLoc[43](loc25: SDecimal)
311CopyLoc[1](Arg1: &mut Symbol)
312ImmBorrowField[20](Symbol.realised_pnl: SDecimal)
313ReadRef
314CopyLoc[43](loc25: SDecimal)
315Call sdecimal::add(SDecimal, SDecimal): SDecimal
316MoveLoc[1](Arg1: &mut Symbol)
317MutBorrowField[20](Symbol.realised_pnl: SDecimal)
318WriteRef
319MoveLoc[64](loc46: Balance<Ty0>)
320StLoc[31](loc13: Balance<Ty0>)
321MoveLoc[55](loc37: Balance<Ty0>)
322StLoc[30](loc12: Balance<Ty0>)
323MoveLoc[46](loc28: Balance<Ty0>)
324StLoc[28](loc10: Balance<Ty0>)
325MoveLoc[60](loc42: Option<Balance<Ty0>>)
326StLoc[27](loc9: Option<Balance<Ty0>>)
327MoveLoc[6](Arg6: &AggPrice)
328Call agg_price::price_of(&AggPrice): Decimal
329StLoc[26](loc8: Decimal)
330MoveLoc[7](Arg7: &AggPrice)
331Call agg_price::price_of(&AggPrice): Decimal
332StLoc[25](loc7: Decimal)
333MoveLoc[12](Arg12: u64)
334StLoc[24](loc6: u64)
335MoveLoc[40](loc22: Decimal)
336StLoc[23](loc5: Decimal)
337MoveLoc[59](loc41: Decimal)
338StLoc[22](loc4: Decimal)
339MoveLoc[49](loc31: SDecimal)
340StLoc[21](loc3: SDecimal)
341MoveLoc[52](loc34: Decimal)
342StLoc[20](loc2: Decimal)
343MoveLoc[51](loc33: u8)
344StLoc[19](loc1: u8)
345MoveLoc[43](loc25: SDecimal)
346StLoc[38](loc20: SDecimal)
347MoveLoc[39](loc21: bool)
348StLoc[37](loc19: bool)
349MoveLoc[50](loc32: bool)
350StLoc[36](loc18: bool)
351MoveLoc[63](loc45: u64)
352StLoc[35](loc17: u64)
353MoveLoc[56](loc38: u64)
354StLoc[34](loc16: u64)
355MoveLoc[47](loc29: u64)
356StLoc[33](loc15: u64)
357CopyLoc[61](loc43: u64)
358LdU64(0)
359Gt
360BrFalse(365)
B25:
361MoveLoc[61](loc43: u64)
362Call option::some<u64>(u64): Option<u64>
363StLoc[32](loc14: Option<u64>)
364Branch(367)
B26:
365Call option::none<u64>(): Option<u64>
366StLoc[32](loc14: Option<u64>)
B27:
367MoveLoc[31](loc13: Balance<Ty0>)
368MoveLoc[30](loc12: Balance<Ty0>)
369MoveLoc[28](loc10: Balance<Ty0>)
370MoveLoc[27](loc9: Option<Balance<Ty0>>)
371MoveLoc[26](loc8: Decimal)
372MoveLoc[25](loc7: Decimal)
373MoveLoc[24](loc6: u64)
374MoveLoc[23](loc5: Decimal)
375MoveLoc[22](loc4: Decimal)
376MoveLoc[21](loc3: SDecimal)
377MoveLoc[20](loc2: Decimal)
378MoveLoc[19](loc1: u8)
379MoveLoc[38](loc20: SDecimal)
380MoveLoc[37](loc19: bool)
381MoveLoc[36](loc18: bool)
382MoveLoc[35](loc17: u64)
383MoveLoc[34](loc16: u64)
384MoveLoc[33](loc15: u64)
385MoveLoc[32](loc14: Option<u64>)
386MoveLoc[16](Arg16: address)
387Pack[9](DecreasePositionSuccessEventV1)
388PackGeneric[3](DecreasePositionResultV1<Ty0>)
389Ret
}
public(friend) unwrap_decrease_position_result_v1<Ty0>(Arg0: DecreasePositionResultV1<Ty0>): Balance<Ty0> * Balance<Ty0> * Balance<Ty0> * Option<Balance<Ty0>> * DecreasePositionSuccessEventV1 {
B0:
0MoveLoc[0](Arg0: DecreasePositionResultV1<Ty0>)
1UnpackGeneric[3](DecreasePositionResultV1<Ty0>)
2Ret
}
public(friend) decrease_position_v1_1_with_loss_protection<Ty0>(Arg0: &mut Vault<Ty0>, Arg1: &mut Symbol, Arg2: Rate, Arg3: &mut Position<Ty0>, Arg4: &ReservingFeeModel, Arg5: &FundingFeeModel, Arg6: &AggPrice, Arg7: &AggPrice, Arg8: Decimal, Arg9: Rate, Arg10: Option<Rate>, Arg11: bool, Arg12: u64, Arg13: Decimal, Arg14: &PositionInstantExitFeeConfig, Arg15: u64, Arg16: address, Arg17: bool, Arg18: &mut LossProtectionVault<Ty0>, Arg19: Rate): DecreasePositionResultV1<Ty0> {
L20: loc0: Decimal
L21: loc1: u64
L22: loc2: u64
L23: loc3: u64
L24: loc4: bool
L25: loc5: bool
L26: loc6: SDecimal
L27: loc7: u8
L28: loc8: Decimal
L29: loc9: SDecimal
L30: loc10: Decimal
L31: loc11: bool
L32: loc12: Decimal
L33: loc13: u64
L34: loc14: Decimal
L35: loc15: Decimal
L36: loc16: Option<Balance<Ty0>>
L37: loc17: Balance<Ty0>
L38: loc18: Balance<Ty0>
L39: loc19: Balance<Ty0>
L40: loc20: u64
L41: loc21: u64
L42: loc22: u64
L43: loc23: u64
L44: loc24: u64
L45: loc25: Option<Balance<Ty0>>
L46: loc26: Option<u64>
L47: loc27: u64
L48: loc28: u64
L49: loc29: u64
L50: loc30: bool
L51: loc31: Balance<Ty0>
L52: loc32: Decimal
L53: loc33: Decimal
L54: loc34: u64
L55: loc35: SDecimal
L56: loc36: SDecimal
L57: loc37: Balance<Ty0>
L58: loc38: u64
L59: loc39: Decimal
L60: loc40: u64
L61: loc41: SDecimal
L62: loc42: bool
L63: loc43: u8
L64: loc44: Decimal
L65: loc45: u64
L66: loc46: u64
L67: loc47: Balance<Ty0>
L68: loc48: Balance<Ty0>
L69: loc49: u64
L70: loc50: Decimal
L71: loc51: Balance<Ty0>
L72: loc52: u64
L73: loc53: Decimal
L74: loc54: Decimal
L75: loc55: Decimal
L76: loc56: Option<Balance<Ty0>>
L77: loc57: u64
L78: loc58: Decimal
L79: loc59: u64
L80: loc60: Balance<Ty0>
L81: loc61: u64
L82: loc62: Balance<Ty0>
L83: loc63: u64
B0:
0CopyLoc[0](Arg0: &mut Vault<Ty0>)
1ImmBorrowFieldGeneric[3](Vault.enabled: bool)
2ReadRef
3BrFalse(5)
B1:
4Branch(25)
B2:
5MoveLoc[0](Arg0: &mut Vault<Ty0>)
6Pop
7MoveLoc[1](Arg1: &mut Symbol)
8Pop
9MoveLoc[4](Arg4: &ReservingFeeModel)
10Pop
11MoveLoc[3](Arg3: &mut Position<Ty0>)
12Pop
13MoveLoc[18](Arg18: &mut LossProtectionVault<Ty0>)
14Pop
15MoveLoc[14](Arg14: &PositionInstantExitFeeConfig)
16Pop
17MoveLoc[7](Arg7: &AggPrice)
18Pop
19MoveLoc[5](Arg5: &FundingFeeModel)
20Pop
21MoveLoc[6](Arg6: &AggPrice)
22Pop
23LdConst[0](u64: 100)
24Abort
B3:
25CopyLoc[1](Arg1: &mut Symbol)
26ImmBorrowField[13](Symbol.decrease_enabled: bool)
27ReadRef
28BrFalse(30)
B4:
29Branch(50)
B5:
30MoveLoc[0](Arg0: &mut Vault<Ty0>)
31Pop
32MoveLoc[1](Arg1: &mut Symbol)
33Pop
34MoveLoc[4](Arg4: &ReservingFeeModel)
35Pop
36MoveLoc[3](Arg3: &mut Position<Ty0>)
37Pop
38MoveLoc[18](Arg18: &mut LossProtectionVault<Ty0>)
39Pop
40MoveLoc[14](Arg14: &PositionInstantExitFeeConfig)
41Pop
42MoveLoc[7](Arg7: &AggPrice)
43Pop
44MoveLoc[5](Arg5: &FundingFeeModel)
45Pop
46MoveLoc[6](Arg6: &AggPrice)
47Pop
48LdConst[5](u64: 105)
49Abort
B6:
50CopyLoc[4](Arg4: &ReservingFeeModel)
51Call object::id<ReservingFeeModel>(&ReservingFeeModel): ID
52CopyLoc[0](Arg0: &mut Vault<Ty0>)
53ImmBorrowFieldGeneric[5](Vault.reserving_fee_model: ID)
54ReadRef
55Eq
56BrFalse(58)
B7:
57Branch(78)
B8:
58MoveLoc[0](Arg0: &mut Vault<Ty0>)
59Pop
60MoveLoc[1](Arg1: &mut Symbol)
61Pop
62MoveLoc[4](Arg4: &ReservingFeeModel)
63Pop
64MoveLoc[3](Arg3: &mut Position<Ty0>)
65Pop
66MoveLoc[18](Arg18: &mut LossProtectionVault<Ty0>)
67Pop
68MoveLoc[14](Arg14: &PositionInstantExitFeeConfig)
69Pop
70MoveLoc[7](Arg7: &AggPrice)
71Pop
72MoveLoc[5](Arg5: &FundingFeeModel)
73Pop
74MoveLoc[6](Arg6: &AggPrice)
75Pop
76LdConst[12](u64: 112)
77Abort
B9:
78CopyLoc[5](Arg5: &FundingFeeModel)
79Call object::id<FundingFeeModel>(&FundingFeeModel): ID
80CopyLoc[1](Arg1: &mut Symbol)
81ImmBorrowField[16](Symbol.funding_fee_model: ID)
82ReadRef
83Eq
84BrFalse(86)
B10:
85Branch(106)
B11:
86MoveLoc[0](Arg0: &mut Vault<Ty0>)
87Pop
88MoveLoc[1](Arg1: &mut Symbol)
89Pop
90MoveLoc[4](Arg4: &ReservingFeeModel)
91Pop
92MoveLoc[3](Arg3: &mut Position<Ty0>)
93Pop
94MoveLoc[18](Arg18: &mut LossProtectionVault<Ty0>)
95Pop
96MoveLoc[14](Arg14: &PositionInstantExitFeeConfig)
97Pop
98MoveLoc[7](Arg7: &AggPrice)
99Pop
100MoveLoc[5](Arg5: &FundingFeeModel)
101Pop
102MoveLoc[6](Arg6: &AggPrice)
103Pop
104LdConst[13](u64: 113)
105Abort
B12:
106CopyLoc[0](Arg0: &mut Vault<Ty0>)
107MoveLoc[4](Arg4: &ReservingFeeModel)
108CopyLoc[15](Arg15: u64)
109Call refresh_vault<Ty0>(&mut Vault<Ty0>, &ReservingFeeModel, u64)
110MoveLoc[17](Arg17: bool)
111Not
112BrFalse(126)
B13:
113CopyLoc[1](Arg1: &mut Symbol)
114FreezeRef
115CopyLoc[7](Arg7: &AggPrice)
116CopyLoc[11](Arg11: bool)
117Call symbol_delta_size(&Symbol, &AggPrice, bool): SDecimal
118StLoc[56](loc36: SDecimal)
119CopyLoc[1](Arg1: &mut Symbol)
120MoveLoc[5](Arg5: &FundingFeeModel)
121MoveLoc[56](loc36: SDecimal)
122MoveLoc[13](Arg13: Decimal)
123CopyLoc[15](Arg15: u64)
124Call refresh_symbol(&mut Symbol, &FundingFeeModel, SDecimal, Decimal, u64)
125Branch(128)
B14:
126MoveLoc[5](Arg5: &FundingFeeModel)
127Pop
B15:
128MoveLoc[3](Arg3: &mut Position<Ty0>)
129CopyLoc[6](Arg6: &AggPrice)
130CopyLoc[7](Arg7: &AggPrice)
131MoveLoc[8](Arg8: Decimal)
132MoveLoc[11](Arg11: bool)
133CopyLoc[12](Arg12: u64)
134CopyLoc[0](Arg0: &mut Vault<Ty0>)
135ImmBorrowFieldGeneric[0](Vault.acc_reserving_rate: Rate)
136ReadRef
137CopyLoc[1](Arg1: &mut Symbol)
138ImmBorrowField[3](Symbol.acc_funding_rate: SRate)
139ReadRef
140MoveLoc[14](Arg14: &PositionInstantExitFeeConfig)
141MoveLoc[15](Arg15: u64)
142Call position::decrease_position_v1<Ty0>(&mut Position<Ty0>, &AggPrice, &AggPrice, Decimal, bool, u64, Rate, SRate, &PositionInstantExitFeeConfig, u64): DecreasePositionResultV1<Ty0>
143Call position::unwrap_decrease_position_result_v1<Ty0>(DecreasePositionResultV1<Ty0>): bool * bool * u64 * u64 * Decimal * Decimal * Decimal * Decimal * SDecimal * Decimal * u8 * Balance<Ty0> * Balance<Ty0>
144StLoc[80](loc60: Balance<Ty0>)
145StLoc[82](loc62: Balance<Ty0>)
146StLoc[63](loc43: u8)
147StLoc[64](loc44: Decimal)
148StLoc[61](loc41: SDecimal)
149StLoc[75](loc55: Decimal)
150StLoc[52](loc32: Decimal)
151StLoc[74](loc54: Decimal)
152StLoc[53](loc33: Decimal)
153StLoc[54](loc34: u64)
154StLoc[79](loc59: u64)
155StLoc[62](loc42: bool)
156StLoc[50](loc30: bool)
157CopyLoc[52](loc32: Decimal)
158MoveLoc[9](Arg9: Rate)
159Call decimal::mul_with_rate(Decimal, Rate): Decimal
160StLoc[73](loc53: Decimal)
161CopyLoc[6](Arg6: &AggPrice)
162CopyLoc[73](loc53: Decimal)
163Call agg_price::value_to_coins(&AggPrice, Decimal): Decimal
164Call decimal::floor_u64(Decimal): u64
165StLoc[72](loc52: u64)
166ImmBorrowLoc[10](Arg10: Option<Rate>)
167Call option::is_some<Rate>(&Option<Rate>): bool
168BrFalse(176)
B16:
169CopyLoc[52](loc32: Decimal)
170ImmBorrowLoc[10](Arg10: Option<Rate>)
171Call option::borrow<Rate>(&Option<Rate>): &Rate
172ReadRef
173Call decimal::mul_with_rate(Decimal, Rate): Decimal
174StLoc[20](loc0: Decimal)
175Branch(178)
B17:
176Call decimal::zero(): Decimal
177StLoc[20](loc0: Decimal)
B18:
178MoveLoc[20](loc0: Decimal)
179StLoc[78](loc58: Decimal)
180CopyLoc[6](Arg6: &AggPrice)
181CopyLoc[78](loc58: Decimal)
182Call agg_price::value_to_coins(&AggPrice, Decimal): Decimal
183Call decimal::floor_u64(Decimal): u64
184StLoc[77](loc57: u64)
185CopyLoc[52](loc32: Decimal)
186MoveLoc[2](Arg2: Rate)
187Call decimal::mul_with_rate(Decimal, Rate): Decimal
188StLoc[59](loc39: Decimal)
189CopyLoc[6](Arg6: &AggPrice)
190CopyLoc[59](loc39: Decimal)
191Call agg_price::value_to_coins(&AggPrice, Decimal): Decimal
192Call decimal::floor_u64(Decimal): u64
193StLoc[58](loc38: u64)
194MoveLoc[73](loc53: Decimal)
195MoveLoc[59](loc39: Decimal)
196MoveLoc[78](loc58: Decimal)
197Call decimal::add(Decimal, Decimal): Decimal
198Call decimal::add(Decimal, Decimal): Decimal
199StLoc[70](loc50: Decimal)
200CopyLoc[58](loc38: u64)
201CopyLoc[72](loc52: u64)
202Add
203CopyLoc[77](loc57: u64)
204Add
205StLoc[69](loc49: u64)
206CopyLoc[62](loc42: bool)
207BrFalse(295)
B19:
208CopyLoc[18](Arg18: &mut LossProtectionVault<Ty0>)
209FreezeRef
210Call loss_protection_vault_value<Ty0>(&LossProtectionVault<Ty0>): u64
211StLoc[66](loc46: u64)
212CopyLoc[66](loc46: u64)
213LdU64(0)
214Gt
215BrFalse(221)
B20:
216CopyLoc[79](loc59: u64)
217LdU64(0)
218Gt
219StLoc[31](loc11: bool)
220Branch(223)
B21:
221LdFalse
222StLoc[31](loc11: bool)
B22:
223MoveLoc[31](loc11: bool)
224BrFalse(280)
B23:
225CopyLoc[66](loc46: u64)
226CopyLoc[79](loc59: u64)
227Ge
228BrFalse(232)
B24:
229CopyLoc[79](loc59: u64)
230StLoc[40](loc20: u64)
231Branch(234)
B25:
232MoveLoc[66](loc46: u64)
233StLoc[40](loc20: u64)
B26:
234MoveLoc[40](loc20: u64)
235StLoc[49](loc29: u64)
236ImmBorrowLoc[80](loc60: Balance<Ty0>)
237Call balance::value<Ty0>(&Balance<Ty0>): u64
238StLoc[81](loc61: u64)
239CopyLoc[49](loc29: u64)
240CopyLoc[81](loc61: u64)
241Gt
242BrFalse(246)
B27:
243MoveLoc[81](loc61: u64)
244StLoc[41](loc21: u64)
245Branch(248)
B28:
246MoveLoc[49](loc29: u64)
247StLoc[41](loc21: u64)
B29:
248MoveLoc[41](loc21: u64)
249StLoc[47](loc27: u64)
250CopyLoc[47](loc27: u64)
251LdU64(0)
252Gt
253BrFalse(273)
B30:
254MoveLoc[18](Arg18: &mut LossProtectionVault<Ty0>)
255CopyLoc[47](loc27: u64)
256Call withdraw_from_loss_protection_vault<Ty0>(&mut LossProtectionVault<Ty0>, u64): Balance<Ty0>
257StLoc[68](loc48: Balance<Ty0>)
258MutBorrowLoc[80](loc60: Balance<Ty0>)
259CopyLoc[47](loc27: u64)
260Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
261StLoc[51](loc31: Balance<Ty0>)
262MutBorrowLoc[82](loc62: Balance<Ty0>)
263MoveLoc[51](loc31: Balance<Ty0>)
264Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
265Pop
266MutBorrowLoc[80](loc60: Balance<Ty0>)
267MoveLoc[68](loc48: Balance<Ty0>)
268Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
269Pop
270MoveLoc[47](loc27: u64)
271StLoc[42](loc22: u64)
272Branch(277)
B31:
273MoveLoc[18](Arg18: &mut LossProtectionVault<Ty0>)
274Pop
275LdU64(0)
276StLoc[42](loc22: u64)
B32:
277MoveLoc[42](loc22: u64)
278StLoc[43](loc23: u64)
279Branch(284)
B33:
280MoveLoc[18](Arg18: &mut LossProtectionVault<Ty0>)
281Pop
282LdU64(0)
283StLoc[43](loc23: u64)
B34:
284MoveLoc[43](loc23: u64)
285StLoc[60](loc40: u64)
286CopyLoc[60](loc40: u64)
287LdU64(0)
288Gt
289BrFalse(333)
B35:
290LdU64(0)
291MoveLoc[60](loc40: u64)
292PackGeneric[4](LossProtectionVaultChangeEvent<Ty0>)
293Call event::emit<LossProtectionVaultChangeEvent<Ty0>>(LossProtectionVaultChangeEvent<Ty0>)
294Branch(333)
B36:
295ImmBorrowLoc[82](loc62: Balance<Ty0>)
296Call balance::value<Ty0>(&Balance<Ty0>): u64
297StLoc[83](loc63: u64)
298CopyLoc[79](loc59: u64)
299Call decimal::from_u64(u64): Decimal
300MoveLoc[19](Arg19: Rate)
301Call decimal::mul_with_rate(Decimal, Rate): Decimal
302Call decimal::floor_u64(Decimal): u64
303StLoc[65](loc45: u64)
304CopyLoc[65](loc45: u64)
305CopyLoc[83](loc63: u64)
306Gt
307BrFalse(311)
B37:
308MoveLoc[83](loc63: u64)
309StLoc[44](loc24: u64)
310Branch(313)
B38:
311MoveLoc[65](loc45: u64)
312StLoc[44](loc24: u64)
B39:
313MoveLoc[44](loc24: u64)
314StLoc[48](loc28: u64)
315CopyLoc[48](loc28: u64)
316LdU64(0)
317Gt
318BrFalse(331)
B40:
319MutBorrowLoc[82](loc62: Balance<Ty0>)
320CopyLoc[48](loc28: u64)
321Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
322StLoc[67](loc47: Balance<Ty0>)
323MoveLoc[18](Arg18: &mut LossProtectionVault<Ty0>)
324MoveLoc[67](loc47: Balance<Ty0>)
325Call deposit_to_loss_protection_vault<Ty0>(&mut LossProtectionVault<Ty0>, Balance<Ty0>)
326MoveLoc[48](loc28: u64)
327LdU64(0)
328PackGeneric[4](LossProtectionVaultChangeEvent<Ty0>)
329Call event::emit<LossProtectionVaultChangeEvent<Ty0>>(LossProtectionVaultChangeEvent<Ty0>)
330Branch(333)
B41:
331MoveLoc[18](Arg18: &mut LossProtectionVault<Ty0>)
332Pop
B42:
333CopyLoc[0](Arg0: &mut Vault<Ty0>)
334ImmBorrowFieldGeneric[8](Vault.reserved_amount: u64)
335ReadRef
336MoveLoc[54](loc34: u64)
337Sub
338CopyLoc[0](Arg0: &mut Vault<Ty0>)
339MutBorrowFieldGeneric[8](Vault.reserved_amount: u64)
340WriteRef
341CopyLoc[0](Arg0: &mut Vault<Ty0>)
342ImmBorrowFieldGeneric[1](Vault.unrealised_reserving_fee_amount: Decimal)
343ReadRef
344MoveLoc[74](loc54: Decimal)
345Call decimal::sub(Decimal, Decimal): Decimal
346CopyLoc[0](Arg0: &mut Vault<Ty0>)
347MutBorrowFieldGeneric[1](Vault.unrealised_reserving_fee_amount: Decimal)
348WriteRef
349CopyLoc[0](Arg0: &mut Vault<Ty0>)
350MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
351MoveLoc[82](loc62: Balance<Ty0>)
352Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
353MoveLoc[69](loc49: u64)
354Gt
355BrFalse(357)
B43:
356Branch(367)
B44:
357MoveLoc[0](Arg0: &mut Vault<Ty0>)
358Pop
359MoveLoc[1](Arg1: &mut Symbol)
360Pop
361MoveLoc[7](Arg7: &AggPrice)
362Pop
363MoveLoc[6](Arg6: &AggPrice)
364Pop
365LdConst[2](u64: 102)
366Abort
B45:
367CopyLoc[0](Arg0: &mut Vault<Ty0>)
368MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
369CopyLoc[72](loc52: u64)
370Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
371StLoc[71](loc51: Balance<Ty0>)
372CopyLoc[0](Arg0: &mut Vault<Ty0>)
373MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
374CopyLoc[58](loc38: u64)
375Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
376StLoc[57](loc37: Balance<Ty0>)
377CopyLoc[77](loc57: u64)
378LdU64(0)
379Gt
380BrFalse(388)
B46:
381MoveLoc[0](Arg0: &mut Vault<Ty0>)
382MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
383CopyLoc[77](loc57: u64)
384Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
385Call option::some<Balance<Ty0>>(Balance<Ty0>): Option<Balance<Ty0>>
386StLoc[45](loc25: Option<Balance<Ty0>>)
387Branch(392)
B47:
388MoveLoc[0](Arg0: &mut Vault<Ty0>)
389Pop
390Call option::none<Balance<Ty0>>(): Option<Balance<Ty0>>
391StLoc[45](loc25: Option<Balance<Ty0>>)
B48:
392MoveLoc[45](loc25: Option<Balance<Ty0>>)
393StLoc[76](loc56: Option<Balance<Ty0>>)
394CopyLoc[1](Arg1: &mut Symbol)
395ImmBorrowField[19](Symbol.opening_size: Decimal)
396ReadRef
397MoveLoc[53](loc33: Decimal)
398Call decimal::sub(Decimal, Decimal): Decimal
399CopyLoc[1](Arg1: &mut Symbol)
400MutBorrowField[19](Symbol.opening_size: Decimal)
401WriteRef
402CopyLoc[1](Arg1: &mut Symbol)
403ImmBorrowField[18](Symbol.opening_amount: u64)
404ReadRef
405CopyLoc[12](Arg12: u64)
406Sub
407CopyLoc[1](Arg1: &mut Symbol)
408MutBorrowField[18](Symbol.opening_amount: u64)
409WriteRef
410CopyLoc[1](Arg1: &mut Symbol)
411ImmBorrowField[4](Symbol.unrealised_funding_fee_value: SDecimal)
412ReadRef
413CopyLoc[61](loc41: SDecimal)
414Call sdecimal::sub(SDecimal, SDecimal): SDecimal
415CopyLoc[1](Arg1: &mut Symbol)
416MutBorrowField[4](Symbol.unrealised_funding_fee_value: SDecimal)
417WriteRef
418CopyLoc[62](loc42: bool)
419Not
420CopyLoc[6](Arg6: &AggPrice)
421CopyLoc[79](loc59: u64)
422Call agg_price::coins_to_value(&AggPrice, u64): Decimal
423Call sdecimal::from_decimal(bool, Decimal): SDecimal
424CopyLoc[52](loc32: Decimal)
425MoveLoc[70](loc50: Decimal)
426Call decimal::sub(Decimal, Decimal): Decimal
427CopyLoc[75](loc55: Decimal)
428Call decimal::add(Decimal, Decimal): Decimal
429CopyLoc[64](loc44: Decimal)
430Call decimal::add(Decimal, Decimal): Decimal
431Call sdecimal::sub_with_decimal(SDecimal, Decimal): SDecimal
432StLoc[55](loc35: SDecimal)
433CopyLoc[1](Arg1: &mut Symbol)
434ImmBorrowField[20](Symbol.realised_pnl: SDecimal)
435ReadRef
436CopyLoc[55](loc35: SDecimal)
437Call sdecimal::add(SDecimal, SDecimal): SDecimal
438MoveLoc[1](Arg1: &mut Symbol)
439MutBorrowField[20](Symbol.realised_pnl: SDecimal)
440WriteRef
441MoveLoc[80](loc60: Balance<Ty0>)
442StLoc[39](loc19: Balance<Ty0>)
443MoveLoc[71](loc51: Balance<Ty0>)
444StLoc[38](loc18: Balance<Ty0>)
445MoveLoc[57](loc37: Balance<Ty0>)
446StLoc[37](loc17: Balance<Ty0>)
447MoveLoc[76](loc56: Option<Balance<Ty0>>)
448StLoc[36](loc16: Option<Balance<Ty0>>)
449MoveLoc[6](Arg6: &AggPrice)
450Call agg_price::price_of(&AggPrice): Decimal
451StLoc[35](loc15: Decimal)
452MoveLoc[7](Arg7: &AggPrice)
453Call agg_price::price_of(&AggPrice): Decimal
454StLoc[34](loc14: Decimal)
455MoveLoc[12](Arg12: u64)
456StLoc[33](loc13: u64)
457MoveLoc[52](loc32: Decimal)
458StLoc[32](loc12: Decimal)
459MoveLoc[75](loc55: Decimal)
460StLoc[30](loc10: Decimal)
461MoveLoc[61](loc41: SDecimal)
462StLoc[29](loc9: SDecimal)
463MoveLoc[64](loc44: Decimal)
464StLoc[28](loc8: Decimal)
465MoveLoc[63](loc43: u8)
466StLoc[27](loc7: u8)
467MoveLoc[55](loc35: SDecimal)
468StLoc[26](loc6: SDecimal)
469MoveLoc[50](loc30: bool)
470StLoc[25](loc5: bool)
471MoveLoc[62](loc42: bool)
472StLoc[24](loc4: bool)
473MoveLoc[79](loc59: u64)
474StLoc[23](loc3: u64)
475MoveLoc[72](loc52: u64)
476StLoc[22](loc2: u64)
477MoveLoc[58](loc38: u64)
478StLoc[21](loc1: u64)
479CopyLoc[77](loc57: u64)
480LdU64(0)
481Gt
482BrFalse(487)
B49:
483MoveLoc[77](loc57: u64)
484Call option::some<u64>(u64): Option<u64>
485StLoc[46](loc26: Option<u64>)
486Branch(489)
B50:
487Call option::none<u64>(): Option<u64>
488StLoc[46](loc26: Option<u64>)
B51:
489MoveLoc[39](loc19: Balance<Ty0>)
490MoveLoc[38](loc18: Balance<Ty0>)
491MoveLoc[37](loc17: Balance<Ty0>)
492MoveLoc[36](loc16: Option<Balance<Ty0>>)
493MoveLoc[35](loc15: Decimal)
494MoveLoc[34](loc14: Decimal)
495MoveLoc[33](loc13: u64)
496MoveLoc[32](loc12: Decimal)
497MoveLoc[30](loc10: Decimal)
498MoveLoc[29](loc9: SDecimal)
499MoveLoc[28](loc8: Decimal)
500MoveLoc[27](loc7: u8)
501MoveLoc[26](loc6: SDecimal)
502MoveLoc[25](loc5: bool)
503MoveLoc[24](loc4: bool)
504MoveLoc[23](loc3: u64)
505MoveLoc[22](loc2: u64)
506MoveLoc[21](loc1: u64)
507MoveLoc[46](loc26: Option<u64>)
508MoveLoc[16](Arg16: address)
509Pack[9](DecreasePositionSuccessEventV1)
510PackGeneric[3](DecreasePositionResultV1<Ty0>)
511Ret
}
public(friend) decrease_reserved_from_position<Ty0>(Arg0: &mut Vault<Ty0>, Arg1: &mut Position<Ty0>, Arg2: &ReservingFeeModel, Arg3: u64, Arg4: u64): DecreaseReservedFromPositionEvent {
L5: loc0: Balance<Ty0>
B0:
0CopyLoc[2](Arg2: &ReservingFeeModel)
1Call object::id<ReservingFeeModel>(&ReservingFeeModel): ID
2CopyLoc[0](Arg0: &mut Vault<Ty0>)
3ImmBorrowFieldGeneric[5](Vault.reserving_fee_model: ID)
4ReadRef
5Eq
6BrFalse(8)
B1:
7Branch(16)
B2:
8MoveLoc[0](Arg0: &mut Vault<Ty0>)
9Pop
10MoveLoc[2](Arg2: &ReservingFeeModel)
11Pop
12MoveLoc[1](Arg1: &mut Position<Ty0>)
13Pop
14LdConst[12](u64: 112)
15Abort
B3:
16CopyLoc[0](Arg0: &mut Vault<Ty0>)
17MoveLoc[2](Arg2: &ReservingFeeModel)
18MoveLoc[4](Arg4: u64)
19Call refresh_vault<Ty0>(&mut Vault<Ty0>, &ReservingFeeModel, u64)
20MoveLoc[1](Arg1: &mut Position<Ty0>)
21CopyLoc[3](Arg3: u64)
22CopyLoc[0](Arg0: &mut Vault<Ty0>)
23ImmBorrowFieldGeneric[0](Vault.acc_reserving_rate: Rate)
24ReadRef
25Call position::decrease_reserved_from_position<Ty0>(&mut Position<Ty0>, u64, Rate): Balance<Ty0>
26StLoc[5](loc0: Balance<Ty0>)
27CopyLoc[0](Arg0: &mut Vault<Ty0>)
28ImmBorrowFieldGeneric[8](Vault.reserved_amount: u64)
29ReadRef
30CopyLoc[3](Arg3: u64)
31Sub
32CopyLoc[0](Arg0: &mut Vault<Ty0>)
33MutBorrowFieldGeneric[8](Vault.reserved_amount: u64)
34WriteRef
35MoveLoc[0](Arg0: &mut Vault<Ty0>)
36MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
37MoveLoc[5](loc0: Balance<Ty0>)
38Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
39Pop
40MoveLoc[3](Arg3: u64)
41Pack[10](DecreaseReservedFromPositionEvent)
42Ret
}
public(friend) pledge_in_position<Ty0>(Arg0: &mut Position<Ty0>, Arg1: Balance<Ty0>): PledgeInPositionEvent {
L2: loc0: u64
B0:
0ImmBorrowLoc[1](Arg1: Balance<Ty0>)
1Call balance::value<Ty0>(&Balance<Ty0>): u64
2StLoc[2](loc0: u64)
3MoveLoc[0](Arg0: &mut Position<Ty0>)
4MoveLoc[1](Arg1: Balance<Ty0>)
5Call position::pledge_in_position<Ty0>(&mut Position<Ty0>, Balance<Ty0>)
6MoveLoc[2](loc0: u64)
7Pack[11](PledgeInPositionEvent)
8Ret
}
public(friend) redeem_from_position_v1<Ty0>(Arg0: &mut Vault<Ty0>, Arg1: &mut Symbol, Arg2: &mut Position<Ty0>, Arg3: &ReservingFeeModel, Arg4: &FundingFeeModel, Arg5: &AggPrice, Arg6: &AggPrice, Arg7: bool, Arg8: u64, Arg9: Decimal, Arg10: u64, Arg11: bool): Balance<Ty0> * RedeemFromPositionEvent {
L12: loc0: SDecimal
L13: loc1: RedeemFromPositionEvent
L14: loc2: Balance<Ty0>
B0:
0CopyLoc[3](Arg3: &ReservingFeeModel)
1Call object::id<ReservingFeeModel>(&ReservingFeeModel): ID
2CopyLoc[0](Arg0: &mut Vault<Ty0>)
3ImmBorrowFieldGeneric[5](Vault.reserving_fee_model: ID)
4ReadRef
5Eq
6BrFalse(8)
B1:
7Branch(24)
B2:
8MoveLoc[0](Arg0: &mut Vault<Ty0>)
9Pop
10MoveLoc[1](Arg1: &mut Symbol)
11Pop
12MoveLoc[3](Arg3: &ReservingFeeModel)
13Pop
14MoveLoc[2](Arg2: &mut Position<Ty0>)
15Pop
16MoveLoc[6](Arg6: &AggPrice)
17Pop
18MoveLoc[4](Arg4: &FundingFeeModel)
19Pop
20MoveLoc[5](Arg5: &AggPrice)
21Pop
22LdConst[12](u64: 112)
23Abort
B3:
24CopyLoc[4](Arg4: &FundingFeeModel)
25Call object::id<FundingFeeModel>(&FundingFeeModel): ID
26CopyLoc[1](Arg1: &mut Symbol)
27ImmBorrowField[16](Symbol.funding_fee_model: ID)
28ReadRef
29Eq
30BrFalse(32)
B4:
31Branch(48)
B5:
32MoveLoc[0](Arg0: &mut Vault<Ty0>)
33Pop
34MoveLoc[1](Arg1: &mut Symbol)
35Pop
36MoveLoc[3](Arg3: &ReservingFeeModel)
37Pop
38MoveLoc[2](Arg2: &mut Position<Ty0>)
39Pop
40MoveLoc[6](Arg6: &AggPrice)
41Pop
42MoveLoc[4](Arg4: &FundingFeeModel)
43Pop
44MoveLoc[5](Arg5: &AggPrice)
45Pop
46LdConst[13](u64: 113)
47Abort
B6:
48CopyLoc[0](Arg0: &mut Vault<Ty0>)
49MoveLoc[3](Arg3: &ReservingFeeModel)
50CopyLoc[10](Arg10: u64)
51Call refresh_vault<Ty0>(&mut Vault<Ty0>, &ReservingFeeModel, u64)
52MoveLoc[11](Arg11: bool)
53Not
54BrFalse(68)
B7:
55CopyLoc[1](Arg1: &mut Symbol)
56FreezeRef
57CopyLoc[6](Arg6: &AggPrice)
58CopyLoc[7](Arg7: bool)
59Call symbol_delta_size(&Symbol, &AggPrice, bool): SDecimal
60StLoc[12](loc0: SDecimal)
61CopyLoc[1](Arg1: &mut Symbol)
62MoveLoc[4](Arg4: &FundingFeeModel)
63MoveLoc[12](loc0: SDecimal)
64MoveLoc[9](Arg9: Decimal)
65CopyLoc[10](Arg10: u64)
66Call refresh_symbol(&mut Symbol, &FundingFeeModel, SDecimal, Decimal, u64)
67Branch(70)
B8:
68MoveLoc[4](Arg4: &FundingFeeModel)
69Pop
B9:
70MoveLoc[2](Arg2: &mut Position<Ty0>)
71CopyLoc[5](Arg5: &AggPrice)
72CopyLoc[6](Arg6: &AggPrice)
73MoveLoc[7](Arg7: bool)
74CopyLoc[8](Arg8: u64)
75MoveLoc[0](Arg0: &mut Vault<Ty0>)
76ImmBorrowFieldGeneric[0](Vault.acc_reserving_rate: Rate)
77ReadRef
78MoveLoc[1](Arg1: &mut Symbol)
79ImmBorrowField[3](Symbol.acc_funding_rate: SRate)
80ReadRef
81MoveLoc[10](Arg10: u64)
82Call position::redeem_from_position<Ty0>(&mut Position<Ty0>, &AggPrice, &AggPrice, bool, u64, Rate, SRate, u64): Balance<Ty0>
83StLoc[14](loc2: Balance<Ty0>)
84MoveLoc[5](Arg5: &AggPrice)
85Call agg_price::price_of(&AggPrice): Decimal
86MoveLoc[6](Arg6: &AggPrice)
87Call agg_price::price_of(&AggPrice): Decimal
88MoveLoc[8](Arg8: u64)
89Pack[12](RedeemFromPositionEvent)
90StLoc[13](loc1: RedeemFromPositionEvent)
91MoveLoc[14](loc2: Balance<Ty0>)
92MoveLoc[13](loc1: RedeemFromPositionEvent)
93Ret
}
public(friend) liquidate_position_v1<Ty0>(Arg0: &mut Vault<Ty0>, Arg1: &mut Symbol, Arg2: &mut Position<Ty0>, Arg3: &ReservingFeeModel, Arg4: &FundingFeeModel, Arg5: &AggPrice, Arg6: &AggPrice, Arg7: bool, Arg8: Decimal, Arg9: u64, Arg10: address, Arg11: bool, Arg12: Rate, Arg13: address): Balance<Ty0> * Balance<Ty0> * LiquidatePositionEvent {
L14: loc0: SDecimal
L15: loc1: SDecimal
L16: loc2: LiquidatePositionEvent
L17: loc3: SDecimal
L18: loc4: u64
L19: loc5: Decimal
L20: loc6: u64
L21: loc7: u64
L22: loc8: Decimal
L23: loc9: u64
L24: loc10: Decimal
L25: loc11: Decimal
L26: loc12: Balance<Ty0>
L27: loc13: Balance<Ty0>
L28: loc14: Balance<Ty0>
L29: loc15: u64
B0:
0CopyLoc[0](Arg0: &mut Vault<Ty0>)
1ImmBorrowFieldGeneric[3](Vault.enabled: bool)
2ReadRef
3BrFalse(5)
B1:
4Branch(21)
B2:
5MoveLoc[0](Arg0: &mut Vault<Ty0>)
6Pop
7MoveLoc[1](Arg1: &mut Symbol)
8Pop
9MoveLoc[3](Arg3: &ReservingFeeModel)
10Pop
11MoveLoc[2](Arg2: &mut Position<Ty0>)
12Pop
13MoveLoc[6](Arg6: &AggPrice)
14Pop
15MoveLoc[4](Arg4: &FundingFeeModel)
16Pop
17MoveLoc[5](Arg5: &AggPrice)
18Pop
19LdConst[0](u64: 100)
20Abort
B3:
21CopyLoc[1](Arg1: &mut Symbol)
22ImmBorrowField[14](Symbol.liquidate_enabled: bool)
23ReadRef
24BrFalse(26)
B4:
25Branch(42)
B5:
26MoveLoc[0](Arg0: &mut Vault<Ty0>)
27Pop
28MoveLoc[1](Arg1: &mut Symbol)
29Pop
30MoveLoc[3](Arg3: &ReservingFeeModel)
31Pop
32MoveLoc[2](Arg2: &mut Position<Ty0>)
33Pop
34MoveLoc[6](Arg6: &AggPrice)
35Pop
36MoveLoc[4](Arg4: &FundingFeeModel)
37Pop
38MoveLoc[5](Arg5: &AggPrice)
39Pop
40LdConst[6](u64: 106)
41Abort
B6:
42CopyLoc[3](Arg3: &ReservingFeeModel)
43Call object::id<ReservingFeeModel>(&ReservingFeeModel): ID
44CopyLoc[0](Arg0: &mut Vault<Ty0>)
45ImmBorrowFieldGeneric[5](Vault.reserving_fee_model: ID)
46ReadRef
47Eq
48BrFalse(50)
B7:
49Branch(66)
B8:
50MoveLoc[0](Arg0: &mut Vault<Ty0>)
51Pop
52MoveLoc[1](Arg1: &mut Symbol)
53Pop
54MoveLoc[3](Arg3: &ReservingFeeModel)
55Pop
56MoveLoc[2](Arg2: &mut Position<Ty0>)
57Pop
58MoveLoc[6](Arg6: &AggPrice)
59Pop
60MoveLoc[4](Arg4: &FundingFeeModel)
61Pop
62MoveLoc[5](Arg5: &AggPrice)
63Pop
64LdConst[12](u64: 112)
65Abort
B9:
66CopyLoc[4](Arg4: &FundingFeeModel)
67Call object::id<FundingFeeModel>(&FundingFeeModel): ID
68CopyLoc[1](Arg1: &mut Symbol)
69ImmBorrowField[16](Symbol.funding_fee_model: ID)
70ReadRef
71Eq
72BrFalse(74)
B10:
73Branch(90)
B11:
74MoveLoc[0](Arg0: &mut Vault<Ty0>)
75Pop
76MoveLoc[1](Arg1: &mut Symbol)
77Pop
78MoveLoc[3](Arg3: &ReservingFeeModel)
79Pop
80MoveLoc[2](Arg2: &mut Position<Ty0>)
81Pop
82MoveLoc[6](Arg6: &AggPrice)
83Pop
84MoveLoc[4](Arg4: &FundingFeeModel)
85Pop
86MoveLoc[5](Arg5: &AggPrice)
87Pop
88LdConst[13](u64: 113)
89Abort
B12:
90CopyLoc[0](Arg0: &mut Vault<Ty0>)
91MoveLoc[3](Arg3: &ReservingFeeModel)
92CopyLoc[9](Arg9: u64)
93Call refresh_vault<Ty0>(&mut Vault<Ty0>, &ReservingFeeModel, u64)
94MoveLoc[11](Arg11: bool)
95Not
96BrFalse(110)
B13:
97CopyLoc[1](Arg1: &mut Symbol)
98FreezeRef
99CopyLoc[6](Arg6: &AggPrice)
100CopyLoc[7](Arg7: bool)
101Call symbol_delta_size(&Symbol, &AggPrice, bool): SDecimal
102StLoc[15](loc1: SDecimal)
103CopyLoc[1](Arg1: &mut Symbol)
104MoveLoc[4](Arg4: &FundingFeeModel)
105MoveLoc[15](loc1: SDecimal)
106MoveLoc[8](Arg8: Decimal)
107MoveLoc[9](Arg9: u64)
108Call refresh_symbol(&mut Symbol, &FundingFeeModel, SDecimal, Decimal, u64)
109Branch(112)
B14:
110MoveLoc[4](Arg4: &FundingFeeModel)
111Pop
B15:
112MoveLoc[2](Arg2: &mut Position<Ty0>)
113CopyLoc[5](Arg5: &AggPrice)
114CopyLoc[6](Arg6: &AggPrice)
115MoveLoc[7](Arg7: bool)
116CopyLoc[0](Arg0: &mut Vault<Ty0>)
117ImmBorrowFieldGeneric[0](Vault.acc_reserving_rate: Rate)
118ReadRef
119CopyLoc[1](Arg1: &mut Symbol)
120ImmBorrowField[3](Symbol.acc_funding_rate: SRate)
121ReadRef
122MoveLoc[12](Arg12: Rate)
123Call position::liquidate_position<Ty0>(&mut Position<Ty0>, &AggPrice, &AggPrice, bool, Rate, SRate, Rate): u64 * u64 * u64 * u64 * Decimal * Decimal * Decimal * SDecimal * u64 * Decimal * Balance<Ty0> * Balance<Ty0> * Balance<Ty0>
124StLoc[27](loc13: Balance<Ty0>)
125StLoc[26](loc12: Balance<Ty0>)
126StLoc[28](loc14: Balance<Ty0>)
127StLoc[19](loc5: Decimal)
128StLoc[18](loc4: u64)
129StLoc[17](loc3: SDecimal)
130StLoc[25](loc11: Decimal)
131StLoc[24](loc10: Decimal)
132StLoc[22](loc8: Decimal)
133StLoc[23](loc9: u64)
134StLoc[21](loc7: u64)
135StLoc[29](loc15: u64)
136StLoc[20](loc6: u64)
137CopyLoc[0](Arg0: &mut Vault<Ty0>)
138ImmBorrowFieldGeneric[8](Vault.reserved_amount: u64)
139ReadRef
140MoveLoc[23](loc9: u64)
141Sub
142CopyLoc[0](Arg0: &mut Vault<Ty0>)
143MutBorrowFieldGeneric[8](Vault.reserved_amount: u64)
144WriteRef
145CopyLoc[0](Arg0: &mut Vault<Ty0>)
146ImmBorrowFieldGeneric[1](Vault.unrealised_reserving_fee_amount: Decimal)
147ReadRef
148MoveLoc[24](loc10: Decimal)
149Call decimal::sub(Decimal, Decimal): Decimal
150CopyLoc[0](Arg0: &mut Vault<Ty0>)
151MutBorrowFieldGeneric[1](Vault.unrealised_reserving_fee_amount: Decimal)
152WriteRef
153MoveLoc[0](Arg0: &mut Vault<Ty0>)
154MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
155MoveLoc[28](loc14: Balance<Ty0>)
156Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
157Pop
158CopyLoc[1](Arg1: &mut Symbol)
159ImmBorrowField[19](Symbol.opening_size: Decimal)
160ReadRef
161CopyLoc[22](loc8: Decimal)
162Call decimal::sub(Decimal, Decimal): Decimal
163CopyLoc[1](Arg1: &mut Symbol)
164MutBorrowField[19](Symbol.opening_size: Decimal)
165WriteRef
166CopyLoc[1](Arg1: &mut Symbol)
167ImmBorrowField[18](Symbol.opening_amount: u64)
168ReadRef
169CopyLoc[21](loc7: u64)
170Sub
171CopyLoc[1](Arg1: &mut Symbol)
172MutBorrowField[18](Symbol.opening_amount: u64)
173WriteRef
174CopyLoc[1](Arg1: &mut Symbol)
175ImmBorrowField[4](Symbol.unrealised_funding_fee_value: SDecimal)
176ReadRef
177CopyLoc[17](loc3: SDecimal)
178Call sdecimal::sub(SDecimal, SDecimal): SDecimal
179CopyLoc[1](Arg1: &mut Symbol)
180MutBorrowField[4](Symbol.unrealised_funding_fee_value: SDecimal)
181WriteRef
182LdTrue
183CopyLoc[5](Arg5: &AggPrice)
184CopyLoc[29](loc15: u64)
185Call agg_price::coins_to_value(&AggPrice, u64): Decimal
186Call sdecimal::from_decimal(bool, Decimal): SDecimal
187CopyLoc[25](loc11: Decimal)
188Call sdecimal::sub_with_decimal(SDecimal, Decimal): SDecimal
189StLoc[14](loc0: SDecimal)
190CopyLoc[1](Arg1: &mut Symbol)
191ImmBorrowField[20](Symbol.realised_pnl: SDecimal)
192ReadRef
193CopyLoc[14](loc0: SDecimal)
194Call sdecimal::add(SDecimal, SDecimal): SDecimal
195MoveLoc[1](Arg1: &mut Symbol)
196MutBorrowField[20](Symbol.realised_pnl: SDecimal)
197WriteRef
198CopyLoc[18](loc4: u64)
199LdU64(0)
200Gt
201BrFalse(207)
B16:
202MoveLoc[18](loc4: u64)
203MoveLoc[19](loc5: Decimal)
204MoveLoc[13](Arg13: address)
205Pack[14](LiquidationFeeEvent)
206Call event::emit<LiquidationFeeEvent>(LiquidationFeeEvent)
B17:
207MoveLoc[10](Arg10: address)
208MoveLoc[5](Arg5: &AggPrice)
209Call agg_price::price_of(&AggPrice): Decimal
210MoveLoc[6](Arg6: &AggPrice)
211Call agg_price::price_of(&AggPrice): Decimal
212MoveLoc[22](loc8: Decimal)
213MoveLoc[25](loc11: Decimal)
214MoveLoc[17](loc3: SDecimal)
215MoveLoc[14](loc0: SDecimal)
216MoveLoc[29](loc15: u64)
217MoveLoc[20](loc6: u64)
218MoveLoc[21](loc7: u64)
219Pack[13](LiquidatePositionEvent)
220StLoc[16](loc2: LiquidatePositionEvent)
221MoveLoc[26](loc12: Balance<Ty0>)
222MoveLoc[27](loc13: Balance<Ty0>)
223MoveLoc[16](loc2: LiquidatePositionEvent)
224Ret
}
public(friend) liquidate_position_v1_with_loss_protection<Ty0>(Arg0: &mut Vault<Ty0>, Arg1: &mut Symbol, Arg2: &mut Position<Ty0>, Arg3: &ReservingFeeModel, Arg4: &FundingFeeModel, Arg5: &AggPrice, Arg6: &AggPrice, Arg7: bool, Arg8: Decimal, Arg9: u64, Arg10: address, Arg11: bool, Arg12: &mut LossProtectionVault<Ty0>, Arg13: Rate, Arg14: Rate, Arg15: address): Balance<Ty0> * Balance<Ty0> * LiquidatePositionEvent {
L16: loc0: u64
L17: loc1: u64
L18: loc2: SDecimal
L19: loc3: SDecimal
L20: loc4: LiquidatePositionEvent
L21: loc5: SDecimal
L22: loc6: u64
L23: loc7: Decimal
L24: loc8: u64
L25: loc9: u64
L26: loc10: Balance<Ty0>
L27: loc11: u64
L28: loc12: Decimal
L29: loc13: u64
L30: loc14: Decimal
L31: loc15: Decimal
L32: loc16: Balance<Ty0>
L33: loc17: Balance<Ty0>
L34: loc18: Balance<Ty0>
L35: loc19: u64
L36: loc20: u64
B0:
0CopyLoc[0](Arg0: &mut Vault<Ty0>)
1ImmBorrowFieldGeneric[3](Vault.enabled: bool)
2ReadRef
3BrFalse(5)
B1:
4Branch(23)
B2:
5MoveLoc[0](Arg0: &mut Vault<Ty0>)
6Pop
7MoveLoc[1](Arg1: &mut Symbol)
8Pop
9MoveLoc[3](Arg3: &ReservingFeeModel)
10Pop
11MoveLoc[2](Arg2: &mut Position<Ty0>)
12Pop
13MoveLoc[12](Arg12: &mut LossProtectionVault<Ty0>)
14Pop
15MoveLoc[6](Arg6: &AggPrice)
16Pop
17MoveLoc[4](Arg4: &FundingFeeModel)
18Pop
19MoveLoc[5](Arg5: &AggPrice)
20Pop
21LdConst[0](u64: 100)
22Abort
B3:
23CopyLoc[1](Arg1: &mut Symbol)
24ImmBorrowField[14](Symbol.liquidate_enabled: bool)
25ReadRef
26BrFalse(28)
B4:
27Branch(46)
B5:
28MoveLoc[0](Arg0: &mut Vault<Ty0>)
29Pop
30MoveLoc[1](Arg1: &mut Symbol)
31Pop
32MoveLoc[3](Arg3: &ReservingFeeModel)
33Pop
34MoveLoc[2](Arg2: &mut Position<Ty0>)
35Pop
36MoveLoc[12](Arg12: &mut LossProtectionVault<Ty0>)
37Pop
38MoveLoc[6](Arg6: &AggPrice)
39Pop
40MoveLoc[4](Arg4: &FundingFeeModel)
41Pop
42MoveLoc[5](Arg5: &AggPrice)
43Pop
44LdConst[6](u64: 106)
45Abort
B6:
46CopyLoc[3](Arg3: &ReservingFeeModel)
47Call object::id<ReservingFeeModel>(&ReservingFeeModel): ID
48CopyLoc[0](Arg0: &mut Vault<Ty0>)
49ImmBorrowFieldGeneric[5](Vault.reserving_fee_model: ID)
50ReadRef
51Eq
52BrFalse(54)
B7:
53Branch(72)
B8:
54MoveLoc[0](Arg0: &mut Vault<Ty0>)
55Pop
56MoveLoc[1](Arg1: &mut Symbol)
57Pop
58MoveLoc[3](Arg3: &ReservingFeeModel)
59Pop
60MoveLoc[2](Arg2: &mut Position<Ty0>)
61Pop
62MoveLoc[12](Arg12: &mut LossProtectionVault<Ty0>)
63Pop
64MoveLoc[6](Arg6: &AggPrice)
65Pop
66MoveLoc[4](Arg4: &FundingFeeModel)
67Pop
68MoveLoc[5](Arg5: &AggPrice)
69Pop
70LdConst[12](u64: 112)
71Abort
B9:
72CopyLoc[4](Arg4: &FundingFeeModel)
73Call object::id<FundingFeeModel>(&FundingFeeModel): ID
74CopyLoc[1](Arg1: &mut Symbol)
75ImmBorrowField[16](Symbol.funding_fee_model: ID)
76ReadRef
77Eq
78BrFalse(80)
B10:
79Branch(98)
B11:
80MoveLoc[0](Arg0: &mut Vault<Ty0>)
81Pop
82MoveLoc[1](Arg1: &mut Symbol)
83Pop
84MoveLoc[3](Arg3: &ReservingFeeModel)
85Pop
86MoveLoc[2](Arg2: &mut Position<Ty0>)
87Pop
88MoveLoc[12](Arg12: &mut LossProtectionVault<Ty0>)
89Pop
90MoveLoc[6](Arg6: &AggPrice)
91Pop
92MoveLoc[4](Arg4: &FundingFeeModel)
93Pop
94MoveLoc[5](Arg5: &AggPrice)
95Pop
96LdConst[13](u64: 113)
97Abort
B12:
98CopyLoc[0](Arg0: &mut Vault<Ty0>)
99MoveLoc[3](Arg3: &ReservingFeeModel)
100CopyLoc[9](Arg9: u64)
101Call refresh_vault<Ty0>(&mut Vault<Ty0>, &ReservingFeeModel, u64)
102MoveLoc[11](Arg11: bool)
103Not
104BrFalse(118)
B13:
105CopyLoc[1](Arg1: &mut Symbol)
106FreezeRef
107CopyLoc[6](Arg6: &AggPrice)
108CopyLoc[7](Arg7: bool)
109Call symbol_delta_size(&Symbol, &AggPrice, bool): SDecimal
110StLoc[19](loc3: SDecimal)
111CopyLoc[1](Arg1: &mut Symbol)
112MoveLoc[4](Arg4: &FundingFeeModel)
113MoveLoc[19](loc3: SDecimal)
114MoveLoc[8](Arg8: Decimal)
115MoveLoc[9](Arg9: u64)
116Call refresh_symbol(&mut Symbol, &FundingFeeModel, SDecimal, Decimal, u64)
117Branch(120)
B14:
118MoveLoc[4](Arg4: &FundingFeeModel)
119Pop
B15:
120MoveLoc[2](Arg2: &mut Position<Ty0>)
121CopyLoc[5](Arg5: &AggPrice)
122CopyLoc[6](Arg6: &AggPrice)
123MoveLoc[7](Arg7: bool)
124CopyLoc[0](Arg0: &mut Vault<Ty0>)
125ImmBorrowFieldGeneric[0](Vault.acc_reserving_rate: Rate)
126ReadRef
127CopyLoc[1](Arg1: &mut Symbol)
128ImmBorrowField[3](Symbol.acc_funding_rate: SRate)
129ReadRef
130MoveLoc[14](Arg14: Rate)
131Call position::liquidate_position<Ty0>(&mut Position<Ty0>, &AggPrice, &AggPrice, bool, Rate, SRate, Rate): u64 * u64 * u64 * u64 * Decimal * Decimal * Decimal * SDecimal * u64 * Decimal * Balance<Ty0> * Balance<Ty0> * Balance<Ty0>
132StLoc[33](loc17: Balance<Ty0>)
133StLoc[32](loc16: Balance<Ty0>)
134StLoc[34](loc18: Balance<Ty0>)
135StLoc[23](loc7: Decimal)
136StLoc[22](loc6: u64)
137StLoc[21](loc5: SDecimal)
138StLoc[31](loc15: Decimal)
139StLoc[30](loc14: Decimal)
140StLoc[28](loc12: Decimal)
141StLoc[29](loc13: u64)
142StLoc[27](loc11: u64)
143StLoc[36](loc20: u64)
144StLoc[24](loc8: u64)
145CopyLoc[0](Arg0: &mut Vault<Ty0>)
146ImmBorrowFieldGeneric[8](Vault.reserved_amount: u64)
147ReadRef
148MoveLoc[29](loc13: u64)
149Sub
150CopyLoc[0](Arg0: &mut Vault<Ty0>)
151MutBorrowFieldGeneric[8](Vault.reserved_amount: u64)
152WriteRef
153CopyLoc[0](Arg0: &mut Vault<Ty0>)
154ImmBorrowFieldGeneric[1](Vault.unrealised_reserving_fee_amount: Decimal)
155ReadRef
156MoveLoc[30](loc14: Decimal)
157Call decimal::sub(Decimal, Decimal): Decimal
158CopyLoc[0](Arg0: &mut Vault<Ty0>)
159MutBorrowFieldGeneric[1](Vault.unrealised_reserving_fee_amount: Decimal)
160WriteRef
161CopyLoc[36](loc20: u64)
162Call decimal::from_u64(u64): Decimal
163MoveLoc[13](Arg13: Rate)
164Call decimal::mul_with_rate(Decimal, Rate): Decimal
165Call decimal::floor_u64(Decimal): u64
166StLoc[25](loc9: u64)
167ImmBorrowLoc[34](loc18: Balance<Ty0>)
168Call balance::value<Ty0>(&Balance<Ty0>): u64
169StLoc[35](loc19: u64)
170CopyLoc[25](loc9: u64)
171CopyLoc[35](loc19: u64)
172Gt
173BrFalse(177)
B16:
174MoveLoc[35](loc19: u64)
175StLoc[16](loc0: u64)
176Branch(179)
B17:
177MoveLoc[25](loc9: u64)
178StLoc[16](loc0: u64)
B18:
179MoveLoc[16](loc0: u64)
180StLoc[17](loc1: u64)
181CopyLoc[17](loc1: u64)
182LdU64(0)
183Gt
184BrFalse(197)
B19:
185MutBorrowLoc[34](loc18: Balance<Ty0>)
186CopyLoc[17](loc1: u64)
187Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
188StLoc[26](loc10: Balance<Ty0>)
189MoveLoc[12](Arg12: &mut LossProtectionVault<Ty0>)
190MoveLoc[26](loc10: Balance<Ty0>)
191Call deposit_to_loss_protection_vault<Ty0>(&mut LossProtectionVault<Ty0>, Balance<Ty0>)
192MoveLoc[17](loc1: u64)
193LdU64(0)
194PackGeneric[4](LossProtectionVaultChangeEvent<Ty0>)
195Call event::emit<LossProtectionVaultChangeEvent<Ty0>>(LossProtectionVaultChangeEvent<Ty0>)
196Branch(199)
B20:
197MoveLoc[12](Arg12: &mut LossProtectionVault<Ty0>)
198Pop
B21:
199MoveLoc[0](Arg0: &mut Vault<Ty0>)
200MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
201MoveLoc[34](loc18: Balance<Ty0>)
202Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
203Pop
204CopyLoc[1](Arg1: &mut Symbol)
205ImmBorrowField[19](Symbol.opening_size: Decimal)
206ReadRef
207CopyLoc[28](loc12: Decimal)
208Call decimal::sub(Decimal, Decimal): Decimal
209CopyLoc[1](Arg1: &mut Symbol)
210MutBorrowField[19](Symbol.opening_size: Decimal)
211WriteRef
212CopyLoc[1](Arg1: &mut Symbol)
213ImmBorrowField[18](Symbol.opening_amount: u64)
214ReadRef
215CopyLoc[27](loc11: u64)
216Sub
217CopyLoc[1](Arg1: &mut Symbol)
218MutBorrowField[18](Symbol.opening_amount: u64)
219WriteRef
220CopyLoc[1](Arg1: &mut Symbol)
221ImmBorrowField[4](Symbol.unrealised_funding_fee_value: SDecimal)
222ReadRef
223CopyLoc[21](loc5: SDecimal)
224Call sdecimal::sub(SDecimal, SDecimal): SDecimal
225CopyLoc[1](Arg1: &mut Symbol)
226MutBorrowField[4](Symbol.unrealised_funding_fee_value: SDecimal)
227WriteRef
228LdTrue
229CopyLoc[5](Arg5: &AggPrice)
230CopyLoc[36](loc20: u64)
231Call agg_price::coins_to_value(&AggPrice, u64): Decimal
232Call sdecimal::from_decimal(bool, Decimal): SDecimal
233CopyLoc[31](loc15: Decimal)
234Call sdecimal::sub_with_decimal(SDecimal, Decimal): SDecimal
235StLoc[18](loc2: SDecimal)
236CopyLoc[1](Arg1: &mut Symbol)
237ImmBorrowField[20](Symbol.realised_pnl: SDecimal)
238ReadRef
239CopyLoc[18](loc2: SDecimal)
240Call sdecimal::add(SDecimal, SDecimal): SDecimal
241MoveLoc[1](Arg1: &mut Symbol)
242MutBorrowField[20](Symbol.realised_pnl: SDecimal)
243WriteRef
244CopyLoc[22](loc6: u64)
245LdU64(0)
246Gt
247BrFalse(253)
B22:
248MoveLoc[22](loc6: u64)
249MoveLoc[23](loc7: Decimal)
250MoveLoc[15](Arg15: address)
251Pack[14](LiquidationFeeEvent)
252Call event::emit<LiquidationFeeEvent>(LiquidationFeeEvent)
B23:
253MoveLoc[10](Arg10: address)
254MoveLoc[5](Arg5: &AggPrice)
255Call agg_price::price_of(&AggPrice): Decimal
256MoveLoc[6](Arg6: &AggPrice)
257Call agg_price::price_of(&AggPrice): Decimal
258MoveLoc[28](loc12: Decimal)
259MoveLoc[31](loc15: Decimal)
260MoveLoc[21](loc5: SDecimal)
261MoveLoc[18](loc2: SDecimal)
262MoveLoc[36](loc20: u64)
263MoveLoc[24](loc8: u64)
264MoveLoc[27](loc11: u64)
265Pack[13](LiquidatePositionEvent)
266StLoc[20](loc4: LiquidatePositionEvent)
267MoveLoc[32](loc16: Balance<Ty0>)
268MoveLoc[33](loc17: Balance<Ty0>)
269MoveLoc[20](loc4: LiquidatePositionEvent)
270Ret
}
public(friend) force_settle_position<Ty0>(Arg0: &AdminCap, Arg1: &mut Vault<Ty0>, Arg2: &mut Symbol, Arg3: &mut Position<Ty0>): Balance<Ty0> {
L4: loc0: Balance<Ty0>
L5: loc1: SDecimal
L6: loc2: u64
L7: loc3: Decimal
L8: loc4: Balance<Ty0>
L9: loc5: u64
L10: loc6: Decimal
B0:
0MoveLoc[0](Arg0: &AdminCap)
1MoveLoc[3](Arg3: &mut Position<Ty0>)
2CopyLoc[1](Arg1: &mut Vault<Ty0>)
3ImmBorrowFieldGeneric[0](Vault.acc_reserving_rate: Rate)
4ReadRef
5CopyLoc[2](Arg2: &mut Symbol)
6ImmBorrowField[3](Symbol.acc_funding_rate: SRate)
7ReadRef
8Call position::force_settle<Ty0>(&AdminCap, &mut Position<Ty0>, Rate, SRate): Balance<Ty0> * u64 * Decimal * SDecimal * Balance<Ty0> * u64 * Decimal
9StLoc[7](loc3: Decimal)
10StLoc[6](loc2: u64)
11StLoc[4](loc0: Balance<Ty0>)
12StLoc[5](loc1: SDecimal)
13StLoc[10](loc6: Decimal)
14StLoc[9](loc5: u64)
15StLoc[8](loc4: Balance<Ty0>)
16CopyLoc[2](Arg2: &mut Symbol)
17ImmBorrowField[19](Symbol.opening_size: Decimal)
18ReadRef
19MoveLoc[7](loc3: Decimal)
20Call decimal::sub(Decimal, Decimal): Decimal
21CopyLoc[2](Arg2: &mut Symbol)
22MutBorrowField[19](Symbol.opening_size: Decimal)
23WriteRef
24CopyLoc[2](Arg2: &mut Symbol)
25ImmBorrowField[18](Symbol.opening_amount: u64)
26ReadRef
27MoveLoc[6](loc2: u64)
28Sub
29CopyLoc[2](Arg2: &mut Symbol)
30MutBorrowField[18](Symbol.opening_amount: u64)
31WriteRef
32CopyLoc[2](Arg2: &mut Symbol)
33ImmBorrowField[4](Symbol.unrealised_funding_fee_value: SDecimal)
34ReadRef
35MoveLoc[5](loc1: SDecimal)
36Call sdecimal::sub(SDecimal, SDecimal): SDecimal
37MoveLoc[2](Arg2: &mut Symbol)
38MutBorrowField[4](Symbol.unrealised_funding_fee_value: SDecimal)
39WriteRef
40CopyLoc[1](Arg1: &mut Vault<Ty0>)
41ImmBorrowFieldGeneric[8](Vault.reserved_amount: u64)
42ReadRef
43MoveLoc[9](loc5: u64)
44Sub
45CopyLoc[1](Arg1: &mut Vault<Ty0>)
46MutBorrowFieldGeneric[8](Vault.reserved_amount: u64)
47WriteRef
48CopyLoc[1](Arg1: &mut Vault<Ty0>)
49ImmBorrowFieldGeneric[1](Vault.unrealised_reserving_fee_amount: Decimal)
50ReadRef
51MoveLoc[10](loc6: Decimal)
52Call decimal::sub(Decimal, Decimal): Decimal
53CopyLoc[1](Arg1: &mut Vault<Ty0>)
54MutBorrowFieldGeneric[1](Vault.unrealised_reserving_fee_amount: Decimal)
55WriteRef
56MoveLoc[1](Arg1: &mut Vault<Ty0>)
57MutBorrowFieldGeneric[7](Vault.liquidity: Balance<Ty0>)
58MoveLoc[8](loc4: Balance<Ty0>)
59Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
60Pop
61MoveLoc[4](loc0: Balance<Ty0>)
62Ret
}
public(friend) valuate_vault<Ty0>(Arg0: &mut Vault<Ty0>, Arg1: &ReservingFeeModel, Arg2: &AggPrice, Arg3: u64): Decimal {
B0:
0CopyLoc[0](Arg0: &mut Vault<Ty0>)
1ImmBorrowFieldGeneric[3](Vault.enabled: bool)
2ReadRef
3BrFalse(5)
B1:
4Branch(13)
B2:
5MoveLoc[0](Arg0: &mut Vault<Ty0>)
6Pop
7MoveLoc[1](Arg1: &ReservingFeeModel)
8Pop
9MoveLoc[2](Arg2: &AggPrice)
10Pop
11LdConst[0](u64: 100)
12Abort
B3:
13CopyLoc[1](Arg1: &ReservingFeeModel)
14Call object::id<ReservingFeeModel>(&ReservingFeeModel): ID
15CopyLoc[0](Arg0: &mut Vault<Ty0>)
16ImmBorrowFieldGeneric[5](Vault.reserving_fee_model: ID)
17ReadRef
18Eq
19BrFalse(21)
B4:
20Branch(29)
B5:
21MoveLoc[0](Arg0: &mut Vault<Ty0>)
22Pop
23MoveLoc[1](Arg1: &ReservingFeeModel)
24Pop
25MoveLoc[2](Arg2: &AggPrice)
26Pop
27LdConst[12](u64: 112)
28Abort
B6:
29CopyLoc[0](Arg0: &mut Vault<Ty0>)
30MoveLoc[1](Arg1: &ReservingFeeModel)
31MoveLoc[3](Arg3: u64)
32Call refresh_vault<Ty0>(&mut Vault<Ty0>, &ReservingFeeModel, u64)
33MoveLoc[2](Arg2: &AggPrice)
34MoveLoc[0](Arg0: &mut Vault<Ty0>)
35FreezeRef
36Call vault_supply_amount<Ty0>(&Vault<Ty0>): Decimal
37Call decimal::floor_u64(Decimal): u64
38Call agg_price::coins_to_value(&AggPrice, u64): Decimal
39Ret
}
public(friend) valuate_symbol(Arg0: &mut Symbol, Arg1: &FundingFeeModel, Arg2: &AggPrice, Arg3: bool, Arg4: Decimal, Arg5: u64): SDecimal {
L6: loc0: SDecimal
B0:
0CopyLoc[1](Arg1: &FundingFeeModel)
1Call object::id<FundingFeeModel>(&FundingFeeModel): ID
2CopyLoc[0](Arg0: &mut Symbol)
3ImmBorrowField[16](Symbol.funding_fee_model: ID)
4ReadRef
5Eq
6BrFalse(8)
B1:
7Branch(16)
B2:
8MoveLoc[0](Arg0: &mut Symbol)
9Pop
10MoveLoc[2](Arg2: &AggPrice)
11Pop
12MoveLoc[1](Arg1: &FundingFeeModel)
13Pop
14LdConst[13](u64: 113)
15Abort
B3:
16CopyLoc[0](Arg0: &mut Symbol)
17FreezeRef
18MoveLoc[2](Arg2: &AggPrice)
19MoveLoc[3](Arg3: bool)
20Call symbol_delta_size(&Symbol, &AggPrice, bool): SDecimal
21StLoc[6](loc0: SDecimal)
22CopyLoc[0](Arg0: &mut Symbol)
23MoveLoc[1](Arg1: &FundingFeeModel)
24MoveLoc[6](loc0: SDecimal)
25MoveLoc[4](Arg4: Decimal)
26MoveLoc[5](Arg5: u64)
27Call refresh_symbol(&mut Symbol, &FundingFeeModel, SDecimal, Decimal, u64)
28MoveLoc[0](Arg0: &mut Symbol)
29ImmBorrowField[4](Symbol.unrealised_funding_fee_value: SDecimal)
30ReadRef
31Ret
}
public(friend) valuate_symbol_after_oi_funding_update(Arg0: &Symbol): SDecimal {
B0:
0MoveLoc[0](Arg0: &Symbol)
1ImmBorrowField[4](Symbol.unrealised_funding_fee_value: SDecimal)
2ReadRef
3Ret
}
Constants [
0 => u64: 100
1 => u64: 101
2 => u64: 102
3 => u64: 103
4 => u64: 104
5 => u64: 105
6 => u64: 106
7 => u64: 107
8 => u64: 108
9 => u64: 109
10 => u64: 110
11 => u64: 111
12 => u64: 112
13 => u64: 113
14 => u64: 117
15 => u64: 118
]
}