Search by name, SuiNS, address, digest, object ID, coin type or checkpoint.

Move path
0x7fd8…1fec::position
Functions
3922 public, 0 entry
Structs
6
Friend modules
marketpool
position

Bytecode1890 lines

The on-chain disassembly. Offsets are instruction numbers within each function.

// Move bytecode v7
module 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec.position {
use 0000000000000000000000000000000000000000000000000000000000000002::balance;
use 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec::admin;
use 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec::agg_price;
use 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec::decimal;
use 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec::rate;
use 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec::sdecimal;
use 7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec::srate;
 
struct PositionConfig has copy, drop, store {
max_leverage: u64,
min_holding_duration: u64,
max_reserved_multiplier: u64,
min_collateral_value: Decimal,
min_order_fee_value: Decimal,
open_fee_bps: Rate,
decrease_fee_bps: Rate,
liquidation_threshold: Rate,
liquidation_bonus: Rate
}
 
struct PositionInstantExitFeeConfig has copy, drop, store {
instant_exit_tier_1_duration_threshold: u64,
instant_exit_tier_1_fee_bps: Rate,
instant_exit_tier_1_fee_enabled: bool,
instant_exit_tier_2_duration_threshold: u64,
instant_exit_tier_2_fee_bps: Rate,
instant_exit_tier_2_fee_enabled: bool,
instant_exit_tier_3_duration_threshold: u64,
instant_exit_tier_3_fee_bps: Rate,
instant_exit_tier_3_fee_enabled: bool
}
 
struct Position<phantom Ty0> has store {
closed: bool,
config: PositionConfig,
open_timestamp: u64,
position_amount: u64,
position_size: Decimal,
reserving_fee_amount: Decimal,
funding_fee_value: SDecimal,
last_reserving_rate: Rate,
last_funding_rate: SRate,
reserved: Balance<Ty0>,
collateral: Balance<Ty0>
}
 
struct OpenPositionResult<phantom Ty0> {
position: Position<Ty0>,
open_fee: Balance<Ty0>,
open_fee_amount: Decimal
}
 
struct DecreasePositionResult<phantom Ty0> {
closed: bool,
has_profit: bool,
settled_amount: u64,
decreased_reserved_amount: u64,
decrease_size: Decimal,
reserving_fee_amount: Decimal,
decrease_fee_value: Decimal,
reserving_fee_value: Decimal,
funding_fee_value: SDecimal,
to_vault: Balance<Ty0>,
to_trader: Balance<Ty0>
}
 
struct DecreasePositionResultV1<phantom Ty0> {
closed: bool,
has_profit: bool,
settled_amount: u64,
decreased_reserved_amount: u64,
decrease_size: Decimal,
reserving_fee_amount: Decimal,
decrease_fee_value: Decimal,
reserving_fee_value: Decimal,
funding_fee_value: SDecimal,
instant_exit_fee_value: Decimal,
instant_exit_fee_tier: u8,
to_vault: Balance<Ty0>,
to_trader: Balance<Ty0>
}
 
public config_max_leverage(Arg0: &PositionConfig): u64 {
B0:
0MoveLoc[0](Arg0: &PositionConfig)
1ImmBorrowField[0](PositionConfig.max_leverage: u64)
2ReadRef
3Ret
}
 
public config_min_holding_duration(Arg0: &PositionConfig): u64 {
B0:
0MoveLoc[0](Arg0: &PositionConfig)
1ImmBorrowField[1](PositionConfig.min_holding_duration: u64)
2ReadRef
3Ret
}
 
public config_max_reserved_multiplier(Arg0: &PositionConfig): u64 {
B0:
0MoveLoc[0](Arg0: &PositionConfig)
1ImmBorrowField[2](PositionConfig.max_reserved_multiplier: u64)
2ReadRef
3Ret
}
 
public config_min_collateral_value(Arg0: &PositionConfig): Decimal {
B0:
0MoveLoc[0](Arg0: &PositionConfig)
1ImmBorrowField[3](PositionConfig.min_collateral_value: Decimal)
2ReadRef
3Ret
}
 
public config_min_order_fee_value(Arg0: &PositionConfig): Decimal {
B0:
0MoveLoc[0](Arg0: &PositionConfig)
1ImmBorrowField[4](PositionConfig.min_order_fee_value: Decimal)
2ReadRef
3Ret
}
 
public config_open_fee_bps(Arg0: &PositionConfig): Rate {
B0:
0MoveLoc[0](Arg0: &PositionConfig)
1ImmBorrowField[5](PositionConfig.open_fee_bps: Rate)
2ReadRef
3Ret
}
 
public config_decrease_fee_bps(Arg0: &PositionConfig): Rate {
B0:
0MoveLoc[0](Arg0: &PositionConfig)
1ImmBorrowField[6](PositionConfig.decrease_fee_bps: Rate)
2ReadRef
3Ret
}
 
public config_liquidation_threshold(Arg0: &PositionConfig): Rate {
B0:
0MoveLoc[0](Arg0: &PositionConfig)
1ImmBorrowField[7](PositionConfig.liquidation_threshold: Rate)
2ReadRef
3Ret
}
 
public config_liquidation_bonus(Arg0: &PositionConfig): Rate {
B0:
0MoveLoc[0](Arg0: &PositionConfig)
1ImmBorrowField[8](PositionConfig.liquidation_bonus: Rate)
2ReadRef
3Ret
}
 
public closed<Ty0>(Arg0: &Position<Ty0>): bool {
B0:
0MoveLoc[0](Arg0: &Position<Ty0>)
1ImmBorrowFieldGeneric[0](Position.closed: bool)
2ReadRef
3Ret
}
 
public position_config<Ty0>(Arg0: &Position<Ty0>): &PositionConfig {
B0:
0MoveLoc[0](Arg0: &Position<Ty0>)
1ImmBorrowFieldGeneric[1](Position.config: PositionConfig)
2Ret
}
 
public open_timestamp<Ty0>(Arg0: &Position<Ty0>): u64 {
B0:
0MoveLoc[0](Arg0: &Position<Ty0>)
1ImmBorrowFieldGeneric[2](Position.open_timestamp: u64)
2ReadRef
3Ret
}
 
public position_amount<Ty0>(Arg0: &Position<Ty0>): u64 {
B0:
0MoveLoc[0](Arg0: &Position<Ty0>)
1ImmBorrowFieldGeneric[3](Position.position_amount: u64)
2ReadRef
3Ret
}
 
public position_size<Ty0>(Arg0: &Position<Ty0>): Decimal {
B0:
0MoveLoc[0](Arg0: &Position<Ty0>)
1ImmBorrowFieldGeneric[4](Position.position_size: Decimal)
2ReadRef
3Ret
}
 
public collateral_amount<Ty0>(Arg0: &Position<Ty0>): u64 {
B0:
0MoveLoc[0](Arg0: &Position<Ty0>)
1ImmBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
2Call balance::value<Ty0>(&Balance<Ty0>): u64
3Ret
}
 
public reserved_amount<Ty0>(Arg0: &Position<Ty0>): u64 {
B0:
0MoveLoc[0](Arg0: &Position<Ty0>)
1ImmBorrowFieldGeneric[6](Position.reserved: Balance<Ty0>)
2Call balance::value<Ty0>(&Balance<Ty0>): u64
3Ret
}
 
public compute_reserving_fee_amount<Ty0>(Arg0: &Position<Ty0>, Arg1: Rate): Decimal {
L2: loc0: Decimal
B0:
0CopyLoc[0](Arg0: &Position<Ty0>)
1ImmBorrowFieldGeneric[6](Position.reserved: Balance<Ty0>)
2Call balance::value<Ty0>(&Balance<Ty0>): u64
3Call decimal::from_u64(u64): Decimal
4MoveLoc[1](Arg1: Rate)
5CopyLoc[0](Arg0: &Position<Ty0>)
6ImmBorrowFieldGeneric[7](Position.last_reserving_rate: Rate)
7ReadRef
8Call rate::sub(Rate, Rate): Rate
9Call decimal::mul_with_rate(Decimal, Rate): Decimal
10StLoc[2](loc0: Decimal)
11MoveLoc[0](Arg0: &Position<Ty0>)
12ImmBorrowFieldGeneric[8](Position.reserving_fee_amount: Decimal)
13ReadRef
14MoveLoc[2](loc0: Decimal)
15Call decimal::add(Decimal, Decimal): Decimal
16Ret
}
 
public compute_funding_fee_value<Ty0>(Arg0: &Position<Ty0>, Arg1: SRate): SDecimal {
L2: loc0: SDecimal
L3: loc1: SRate
B0:
0MoveLoc[1](Arg1: SRate)
1CopyLoc[0](Arg0: &Position<Ty0>)
2ImmBorrowFieldGeneric[9](Position.last_funding_rate: SRate)
3ReadRef
4Call srate::sub(SRate, SRate): SRate
5StLoc[3](loc1: SRate)
6ImmBorrowLoc[3](loc1: SRate)
7Call srate::is_positive(&SRate): bool
8CopyLoc[0](Arg0: &Position<Ty0>)
9ImmBorrowFieldGeneric[4](Position.position_size: Decimal)
10ReadRef
11ImmBorrowLoc[3](loc1: SRate)
12Call srate::value(&SRate): Rate
13Call decimal::mul_with_rate(Decimal, Rate): Decimal
14Call sdecimal::from_decimal(bool, Decimal): SDecimal
15StLoc[2](loc0: SDecimal)
16MoveLoc[0](Arg0: &Position<Ty0>)
17ImmBorrowFieldGeneric[10](Position.funding_fee_value: SDecimal)
18ReadRef
19MoveLoc[2](loc0: SDecimal)
20Call sdecimal::add(SDecimal, SDecimal): SDecimal
21Ret
}
 
public compute_delta_size<Ty0>(Arg0: &Position<Ty0>, Arg1: &AggPrice, Arg2: bool): SDecimal {
L3: loc0: bool
L4: loc1: Decimal
L5: loc2: Decimal
B0:
0MoveLoc[1](Arg1: &AggPrice)
1CopyLoc[0](Arg0: &Position<Ty0>)
2ImmBorrowFieldGeneric[3](Position.position_amount: u64)
3ReadRef
4Call agg_price::coins_to_value(&AggPrice, u64): Decimal
5StLoc[5](loc2: Decimal)
6ImmBorrowLoc[5](loc2: Decimal)
7CopyLoc[0](Arg0: &Position<Ty0>)
8ImmBorrowFieldGeneric[4](Position.position_size: Decimal)
9Call decimal::gt(&Decimal, &Decimal): bool
10BrFalse(20)
B1:
11MoveLoc[2](Arg2: bool)
12MoveLoc[5](loc2: Decimal)
13MoveLoc[0](Arg0: &Position<Ty0>)
14ImmBorrowFieldGeneric[4](Position.position_size: Decimal)
15ReadRef
16Call decimal::sub(Decimal, Decimal): Decimal
17StLoc[4](loc1: Decimal)
18StLoc[3](loc0: bool)
19Branch(29)
B2:
20MoveLoc[2](Arg2: bool)
21Not
22MoveLoc[0](Arg0: &Position<Ty0>)
23ImmBorrowFieldGeneric[4](Position.position_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 check_holding_duration<Ty0>(Arg0: &Position<Ty0>, Arg1: &SDecimal, Arg2: u64): bool {
L3: loc0: bool
B0:
0MoveLoc[1](Arg1: &SDecimal)
1Call sdecimal::is_positive(&SDecimal): bool
2Not
3BrFalse(9)
B1:
4MoveLoc[0](Arg0: &Position<Ty0>)
5Pop
6LdTrue
7StLoc[3](loc0: bool)
8Branch(20)
B2:
9CopyLoc[0](Arg0: &Position<Ty0>)
10ImmBorrowFieldGeneric[2](Position.open_timestamp: u64)
11ReadRef
12MoveLoc[0](Arg0: &Position<Ty0>)
13ImmBorrowFieldGeneric[1](Position.config: PositionConfig)
14ImmBorrowField[1](PositionConfig.min_holding_duration: u64)
15ReadRef
16Add
17MoveLoc[2](Arg2: u64)
18Le
19StLoc[3](loc0: bool)
B3:
20MoveLoc[3](loc0: bool)
21Ret
}
 
public check_leverage(Arg0: &PositionConfig, Arg1: Decimal, Arg2: u64, Arg3: &AggPrice): bool {
L4: loc0: Decimal
L5: loc1: Decimal
B0:
0MoveLoc[1](Arg1: Decimal)
1MoveLoc[0](Arg0: &PositionConfig)
2ImmBorrowField[0](PositionConfig.max_leverage: u64)
3ReadRef
4Call decimal::mul_with_u64(Decimal, u64): Decimal
5StLoc[5](loc1: Decimal)
6MoveLoc[3](Arg3: &AggPrice)
7MoveLoc[2](Arg2: u64)
8Call agg_price::coins_to_value(&AggPrice, u64): Decimal
9StLoc[4](loc0: Decimal)
10ImmBorrowLoc[5](loc1: Decimal)
11ImmBorrowLoc[4](loc0: Decimal)
12Call decimal::ge(&Decimal, &Decimal): bool
13Ret
}
 
public check_liquidation(Arg0: &PositionConfig, Arg1: Decimal, Arg2: &SDecimal): bool {
L3: loc0: Decimal
L4: loc1: Decimal
L5: loc2: &Decimal
L6: loc3: bool
B0:
0CopyLoc[2](Arg2: &SDecimal)
1Call sdecimal::is_positive(&SDecimal): bool
2BrFalse(10)
B1:
3MoveLoc[2](Arg2: &SDecimal)
4Pop
5MoveLoc[0](Arg0: &PositionConfig)
6Pop
7LdFalse
8StLoc[6](loc3: bool)
9Branch(25)
B2:
10MoveLoc[1](Arg1: Decimal)
11MoveLoc[0](Arg0: &PositionConfig)
12ImmBorrowField[7](PositionConfig.liquidation_threshold: Rate)
13ReadRef
14Call decimal::mul_with_rate(Decimal, Rate): Decimal
15StLoc[4](loc1: Decimal)
16ImmBorrowLoc[4](loc1: Decimal)
17StLoc[5](loc2: &Decimal)
18MoveLoc[2](Arg2: &SDecimal)
19Call sdecimal::value(&SDecimal): Decimal
20StLoc[3](loc0: Decimal)
21MoveLoc[5](loc2: &Decimal)
22ImmBorrowLoc[3](loc0: Decimal)
23Call decimal::le(&Decimal, &Decimal): bool
24StLoc[6](loc3: bool)
B3:
25MoveLoc[6](loc3: bool)
26Ret
}
 
public(friend) new_position_instant_exit_fee_config(Arg0: u64, Arg1: Rate, Arg2: bool, Arg3: u64, Arg4: Rate, Arg5: bool, Arg6: u64, Arg7: Rate, Arg8: bool): PositionInstantExitFeeConfig {
B0:
0MoveLoc[0](Arg0: u64)
1MoveLoc[1](Arg1: Rate)
2MoveLoc[2](Arg2: bool)
3MoveLoc[3](Arg3: u64)
4MoveLoc[4](Arg4: Rate)
5MoveLoc[5](Arg5: bool)
6MoveLoc[6](Arg6: u64)
7MoveLoc[7](Arg7: Rate)
8MoveLoc[8](Arg8: bool)
9Pack[1](PositionInstantExitFeeConfig)
10Ret
}
 
public(friend) set_position_instant_exit_fee_config(Arg0: &mut PositionInstantExitFeeConfig, Arg1: u64, Arg2: bool, Arg3: Rate, Arg4: u64, Arg5: bool, Arg6: Rate, Arg7: u64, Arg8: bool, Arg9: Rate): PositionInstantExitFeeConfig {
B0:
0MoveLoc[1](Arg1: u64)
1CopyLoc[0](Arg0: &mut PositionInstantExitFeeConfig)
2MutBorrowField[20](PositionInstantExitFeeConfig.instant_exit_tier_1_duration_threshold: u64)
3WriteRef
4MoveLoc[3](Arg3: Rate)
5CopyLoc[0](Arg0: &mut PositionInstantExitFeeConfig)
6MutBorrowField[21](PositionInstantExitFeeConfig.instant_exit_tier_1_fee_bps: Rate)
7WriteRef
8MoveLoc[2](Arg2: bool)
9CopyLoc[0](Arg0: &mut PositionInstantExitFeeConfig)
10MutBorrowField[22](PositionInstantExitFeeConfig.instant_exit_tier_1_fee_enabled: bool)
11WriteRef
12MoveLoc[4](Arg4: u64)
13CopyLoc[0](Arg0: &mut PositionInstantExitFeeConfig)
14MutBorrowField[23](PositionInstantExitFeeConfig.instant_exit_tier_2_duration_threshold: u64)
15WriteRef
16MoveLoc[6](Arg6: Rate)
17CopyLoc[0](Arg0: &mut PositionInstantExitFeeConfig)
18MutBorrowField[24](PositionInstantExitFeeConfig.instant_exit_tier_2_fee_bps: Rate)
19WriteRef
20MoveLoc[5](Arg5: bool)
21CopyLoc[0](Arg0: &mut PositionInstantExitFeeConfig)
22MutBorrowField[25](PositionInstantExitFeeConfig.instant_exit_tier_2_fee_enabled: bool)
23WriteRef
24MoveLoc[7](Arg7: u64)
25CopyLoc[0](Arg0: &mut PositionInstantExitFeeConfig)
26MutBorrowField[26](PositionInstantExitFeeConfig.instant_exit_tier_3_duration_threshold: u64)
27WriteRef
28MoveLoc[9](Arg9: Rate)
29CopyLoc[0](Arg0: &mut PositionInstantExitFeeConfig)
30MutBorrowField[27](PositionInstantExitFeeConfig.instant_exit_tier_3_fee_bps: Rate)
31WriteRef
32MoveLoc[8](Arg8: bool)
33CopyLoc[0](Arg0: &mut PositionInstantExitFeeConfig)
34MutBorrowField[28](PositionInstantExitFeeConfig.instant_exit_tier_3_fee_enabled: bool)
35WriteRef
36MoveLoc[0](Arg0: &mut PositionInstantExitFeeConfig)
37ReadRef
38Ret
}
 
public(friend) default_position_instant_exit_fee_config(): PositionInstantExitFeeConfig {
B0:
0LdU64(0)
1Call rate::zero(): Rate
2LdFalse
3LdU64(0)
4Call rate::zero(): Rate
5LdFalse
6LdU64(0)
7Call rate::zero(): Rate
8LdFalse
9Pack[1](PositionInstantExitFeeConfig)
10Ret
}
 
public(friend) clone_position_instant_exit_fee_config(Arg0: &PositionInstantExitFeeConfig): PositionInstantExitFeeConfig {
B0:
0CopyLoc[0](Arg0: &PositionInstantExitFeeConfig)
1ImmBorrowField[20](PositionInstantExitFeeConfig.instant_exit_tier_1_duration_threshold: u64)
2ReadRef
3CopyLoc[0](Arg0: &PositionInstantExitFeeConfig)
4ImmBorrowField[21](PositionInstantExitFeeConfig.instant_exit_tier_1_fee_bps: Rate)
5ReadRef
6CopyLoc[0](Arg0: &PositionInstantExitFeeConfig)
7ImmBorrowField[22](PositionInstantExitFeeConfig.instant_exit_tier_1_fee_enabled: bool)
8ReadRef
9CopyLoc[0](Arg0: &PositionInstantExitFeeConfig)
10ImmBorrowField[23](PositionInstantExitFeeConfig.instant_exit_tier_2_duration_threshold: u64)
11ReadRef
12CopyLoc[0](Arg0: &PositionInstantExitFeeConfig)
13ImmBorrowField[24](PositionInstantExitFeeConfig.instant_exit_tier_2_fee_bps: Rate)
14ReadRef
15CopyLoc[0](Arg0: &PositionInstantExitFeeConfig)
16ImmBorrowField[25](PositionInstantExitFeeConfig.instant_exit_tier_2_fee_enabled: bool)
17ReadRef
18CopyLoc[0](Arg0: &PositionInstantExitFeeConfig)
19ImmBorrowField[26](PositionInstantExitFeeConfig.instant_exit_tier_3_duration_threshold: u64)
20ReadRef
21CopyLoc[0](Arg0: &PositionInstantExitFeeConfig)
22ImmBorrowField[27](PositionInstantExitFeeConfig.instant_exit_tier_3_fee_bps: Rate)
23ReadRef
24MoveLoc[0](Arg0: &PositionInstantExitFeeConfig)
25ImmBorrowField[28](PositionInstantExitFeeConfig.instant_exit_tier_3_fee_enabled: bool)
26ReadRef
27Pack[1](PositionInstantExitFeeConfig)
28Ret
}
 
public(friend) new_position_config(Arg0: u64, Arg1: u64, Arg2: u64, Arg3: u256, Arg4: u256, Arg5: u128, Arg6: u128, Arg7: u128, Arg8: u128): PositionConfig {
B0:
0MoveLoc[0](Arg0: u64)
1MoveLoc[1](Arg1: u64)
2MoveLoc[2](Arg2: u64)
3MoveLoc[3](Arg3: u256)
4Call decimal::from_raw(u256): Decimal
5MoveLoc[4](Arg4: u256)
6Call decimal::from_raw(u256): Decimal
7MoveLoc[5](Arg5: u128)
8Call rate::from_raw(u128): Rate
9MoveLoc[6](Arg6: u128)
10Call rate::from_raw(u128): Rate
11MoveLoc[7](Arg7: u128)
12Call rate::from_raw(u128): Rate
13MoveLoc[8](Arg8: u128)
14Call rate::from_raw(u128): Rate
15Pack[0](PositionConfig)
16Ret
}
 
public(friend) open_position<Ty0>(Arg0: &PositionConfig, Arg1: &AggPrice, Arg2: &AggPrice, Arg3: &mut Balance<Ty0>, Arg4: &mut Balance<Ty0>, Arg5: Decimal, Arg6: u64, Arg7: u64, Arg8: Rate, Arg9: SRate, Arg10: u64): OpenPositionResult<Ty0> {
L11: loc0: Decimal
L12: loc1: Decimal
L13: loc2: Balance<Ty0>
L14: loc3: u64
L15: loc4: Decimal
L16: loc5: Decimal
L17: loc6: Decimal
B0:
0CopyLoc[4](Arg4: &mut Balance<Ty0>)
1FreezeRef
2Call balance::value<Ty0>(&Balance<Ty0>): u64
3LdU64(0)
4Gt
5BrFalse(7)
B1:
6Branch(19)
B2:
7MoveLoc[3](Arg3: &mut Balance<Ty0>)
8Pop
9MoveLoc[2](Arg2: &AggPrice)
10Pop
11MoveLoc[0](Arg0: &PositionConfig)
12Pop
13MoveLoc[1](Arg1: &AggPrice)
14Pop
15MoveLoc[4](Arg4: &mut Balance<Ty0>)
16Pop
17LdConst[2](u64: 403)
18Abort
B3:
19CopyLoc[1](Arg1: &AggPrice)
20Call agg_price::price_of(&AggPrice): Decimal
21StLoc[11](loc0: Decimal)
22ImmBorrowLoc[11](loc0: Decimal)
23ImmBorrowLoc[5](Arg5: Decimal)
24Call decimal::ge(&Decimal, &Decimal): bool
25BrFalse(27)
B4:
26Branch(39)
B5:
27MoveLoc[3](Arg3: &mut Balance<Ty0>)
28Pop
29MoveLoc[2](Arg2: &AggPrice)
30Pop
31MoveLoc[0](Arg0: &PositionConfig)
32Pop
33MoveLoc[1](Arg1: &AggPrice)
34Pop
35MoveLoc[4](Arg4: &mut Balance<Ty0>)
36Pop
37LdConst[14](u64: 415)
38Abort
B6:
39CopyLoc[6](Arg6: u64)
40LdU64(0)
41Gt
42BrFalse(44)
B7:
43Branch(56)
B8:
44MoveLoc[3](Arg3: &mut Balance<Ty0>)
45Pop
46MoveLoc[2](Arg2: &AggPrice)
47Pop
48MoveLoc[0](Arg0: &PositionConfig)
49Pop
50MoveLoc[1](Arg1: &AggPrice)
51Pop
52MoveLoc[4](Arg4: &mut Balance<Ty0>)
53Pop
54LdConst[4](u64: 405)
55Abort
B9:
56CopyLoc[7](Arg7: u64)
57CopyLoc[4](Arg4: &mut Balance<Ty0>)
58FreezeRef
59Call balance::value<Ty0>(&Balance<Ty0>): u64
60CopyLoc[0](Arg0: &PositionConfig)
61ImmBorrowField[2](PositionConfig.max_reserved_multiplier: u64)
62ReadRef
63Mul
64Le
65BrFalse(67)
B10:
66Branch(79)
B11:
67MoveLoc[3](Arg3: &mut Balance<Ty0>)
68Pop
69MoveLoc[2](Arg2: &AggPrice)
70Pop
71MoveLoc[0](Arg0: &PositionConfig)
72Pop
73MoveLoc[1](Arg1: &AggPrice)
74Pop
75MoveLoc[4](Arg4: &mut Balance<Ty0>)
76Pop
77LdConst[13](u64: 414)
78Abort
B12:
79CopyLoc[2](Arg2: &AggPrice)
80CopyLoc[6](Arg6: u64)
81Call agg_price::coins_to_value(&AggPrice, u64): Decimal
82StLoc[17](loc6: Decimal)
83CopyLoc[17](loc6: Decimal)
84CopyLoc[0](Arg0: &PositionConfig)
85ImmBorrowField[5](PositionConfig.open_fee_bps: Rate)
86ReadRef
87Call decimal::mul_with_rate(Decimal, Rate): Decimal
88StLoc[16](loc5: Decimal)
89CopyLoc[1](Arg1: &AggPrice)
90MoveLoc[16](loc5: Decimal)
91Call agg_price::value_to_coins(&AggPrice, Decimal): Decimal
92StLoc[15](loc4: Decimal)
93CopyLoc[15](loc4: Decimal)
94Call decimal::ceil_u64(Decimal): u64
95StLoc[14](loc3: u64)
96CopyLoc[4](Arg4: &mut Balance<Ty0>)
97FreezeRef
98Call balance::value<Ty0>(&Balance<Ty0>): u64
99CopyLoc[14](loc3: u64)
100Ge
101BrFalse(103)
B13:
102Branch(115)
B14:
103MoveLoc[3](Arg3: &mut Balance<Ty0>)
104Pop
105MoveLoc[2](Arg2: &AggPrice)
106Pop
107MoveLoc[0](Arg0: &PositionConfig)
108Pop
109MoveLoc[1](Arg1: &AggPrice)
110Pop
111MoveLoc[4](Arg4: &mut Balance<Ty0>)
112Pop
113LdConst[6](u64: 407)
114Abort
B15:
115MoveLoc[1](Arg1: &AggPrice)
116CopyLoc[4](Arg4: &mut Balance<Ty0>)
117FreezeRef
118Call balance::value<Ty0>(&Balance<Ty0>): u64
119CopyLoc[14](loc3: u64)
120Sub
121Call agg_price::coins_to_value(&AggPrice, u64): Decimal
122StLoc[12](loc1: Decimal)
123ImmBorrowLoc[12](loc1: Decimal)
124CopyLoc[0](Arg0: &PositionConfig)
125ImmBorrowField[3](PositionConfig.min_collateral_value: Decimal)
126Call decimal::ge(&Decimal, &Decimal): bool
127BrFalse(129)
B16:
128Branch(139)
B17:
129MoveLoc[3](Arg3: &mut Balance<Ty0>)
130Pop
131MoveLoc[2](Arg2: &AggPrice)
132Pop
133MoveLoc[0](Arg0: &PositionConfig)
134Pop
135MoveLoc[4](Arg4: &mut Balance<Ty0>)
136Pop
137LdConst[8](u64: 409)
138Abort
B18:
139CopyLoc[0](Arg0: &PositionConfig)
140MoveLoc[12](loc1: Decimal)
141CopyLoc[6](Arg6: u64)
142MoveLoc[2](Arg2: &AggPrice)
143Call check_leverage(&PositionConfig, Decimal, u64, &AggPrice): bool
144BrFalse(146)
B19:
145Branch(154)
B20:
146MoveLoc[3](Arg3: &mut Balance<Ty0>)
147Pop
148MoveLoc[0](Arg0: &PositionConfig)
149Pop
150MoveLoc[4](Arg4: &mut Balance<Ty0>)
151Pop
152LdConst[10](u64: 411)
153Abort
B21:
154CopyLoc[4](Arg4: &mut Balance<Ty0>)
155MoveLoc[14](loc3: u64)
156Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
157StLoc[13](loc2: Balance<Ty0>)
158LdFalse
159MoveLoc[0](Arg0: &PositionConfig)
160ReadRef
161MoveLoc[10](Arg10: u64)
162MoveLoc[6](Arg6: u64)
163MoveLoc[17](loc6: Decimal)
164Call decimal::zero(): Decimal
165Call sdecimal::zero(): SDecimal
166MoveLoc[8](Arg8: Rate)
167MoveLoc[9](Arg9: SRate)
168MoveLoc[3](Arg3: &mut Balance<Ty0>)
169MoveLoc[7](Arg7: u64)
170Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
171MoveLoc[4](Arg4: &mut Balance<Ty0>)
172Call balance::withdraw_all<Ty0>(&mut Balance<Ty0>): Balance<Ty0>
173PackGeneric[0](Position<Ty0>)
174MoveLoc[13](loc2: Balance<Ty0>)
175MoveLoc[15](loc4: Decimal)
176PackGeneric[1](OpenPositionResult<Ty0>)
177Ret
}
 
public(friend) unwrap_open_position_result<Ty0>(Arg0: OpenPositionResult<Ty0>): Position<Ty0> * Balance<Ty0> * Decimal {
B0:
0MoveLoc[0](Arg0: OpenPositionResult<Ty0>)
1UnpackGeneric[1](OpenPositionResult<Ty0>)
2Ret
}
 
public(friend) decrease_position_v1<Ty0>(Arg0: &mut Position<Ty0>, Arg1: &AggPrice, Arg2: &AggPrice, Arg3: Decimal, Arg4: bool, Arg5: u64, Arg6: Rate, Arg7: SRate, Arg8: &PositionInstantExitFeeConfig, Arg9: u64): DecreasePositionResultV1<Ty0> {
L10: loc0: Decimal
L11: loc1: bool
L12: loc2: u64
L13: loc3: u64
L14: loc4: u64
L15: loc5: u64
L16: loc6: &AggPrice
L17: loc7: Balance<Ty0>
L18: loc8: Balance<Ty0>
L19: loc9: bool
L20: loc10: Decimal
L21: loc11: Decimal
L22: loc12: Decimal
L23: loc13: u64
L24: loc14: SDecimal
L25: loc15: SDecimal
L26: loc16: bool
L27: loc17: u64
L28: loc18: u8
L29: loc19: Decimal
L30: loc20: u64
L31: loc21: u64
L32: loc22: Decimal
L33: loc23: u64
L34: loc24: Decimal
L35: loc25: Decimal
L36: loc26: Decimal
L37: loc27: u64
L38: loc28: SDecimal
L39: loc29: Balance<Ty0>
L40: loc30: Balance<Ty0>
B0:
0CopyLoc[0](Arg0: &mut Position<Ty0>)
1ImmBorrowFieldGeneric[0](Position.closed: bool)
2ReadRef
3Not
4BrFalse(6)
B1:
5Branch(16)
B2:
6MoveLoc[0](Arg0: &mut Position<Ty0>)
7Pop
8MoveLoc[8](Arg8: &PositionInstantExitFeeConfig)
9Pop
10MoveLoc[2](Arg2: &AggPrice)
11Pop
12MoveLoc[1](Arg1: &AggPrice)
13Pop
14LdConst[0](u64: 401)
15Abort
B3:
16CopyLoc[1](Arg1: &AggPrice)
17Call agg_price::price_of(&AggPrice): Decimal
18StLoc[10](loc0: Decimal)
19ImmBorrowLoc[10](loc0: Decimal)
20ImmBorrowLoc[3](Arg3: Decimal)
21Call decimal::ge(&Decimal, &Decimal): bool
22BrFalse(24)
B4:
23Branch(34)
B5:
24MoveLoc[0](Arg0: &mut Position<Ty0>)
25Pop
26MoveLoc[8](Arg8: &PositionInstantExitFeeConfig)
27Pop
28MoveLoc[2](Arg2: &AggPrice)
29Pop
30MoveLoc[1](Arg1: &AggPrice)
31Pop
32LdConst[14](u64: 415)
33Abort
B6:
34CopyLoc[5](Arg5: u64)
35LdU64(0)
36Gt
37BrFalse(45)
B7:
38CopyLoc[5](Arg5: u64)
39CopyLoc[0](Arg0: &mut Position<Ty0>)
40ImmBorrowFieldGeneric[3](Position.position_amount: u64)
41ReadRef
42Le
43StLoc[11](loc1: bool)
44Branch(47)
B8:
45LdFalse
46StLoc[11](loc1: bool)
B9:
47MoveLoc[11](loc1: bool)
48BrFalse(50)
B10:
49Branch(60)
B11:
50MoveLoc[0](Arg0: &mut Position<Ty0>)
51Pop
52MoveLoc[8](Arg8: &PositionInstantExitFeeConfig)
53Pop
54MoveLoc[2](Arg2: &AggPrice)
55Pop
56MoveLoc[1](Arg1: &AggPrice)
57Pop
58LdConst[5](u64: 406)
59Abort
B12:
60CopyLoc[0](Arg0: &mut Position<Ty0>)
61ImmBorrowFieldGeneric[4](Position.position_size: Decimal)
62ReadRef
63CopyLoc[5](Arg5: u64)
64Call decimal::from_u64(u64): Decimal
65CopyLoc[0](Arg0: &mut Position<Ty0>)
66ImmBorrowFieldGeneric[3](Position.position_amount: u64)
67ReadRef
68Call decimal::mul_div_by_64(Decimal, Decimal, u64): Decimal
69StLoc[22](loc12: Decimal)
70CopyLoc[0](Arg0: &mut Position<Ty0>)
71FreezeRef
72CopyLoc[2](Arg2: &AggPrice)
73MoveLoc[4](Arg4: bool)
74Call compute_delta_size<Ty0>(&Position<Ty0>, &AggPrice, bool): SDecimal
75StLoc[24](loc14: SDecimal)
76CopyLoc[24](loc14: SDecimal)
77CopyLoc[5](Arg5: u64)
78Call sdecimal::mul_with_u64(SDecimal, u64): SDecimal
79CopyLoc[0](Arg0: &mut Position<Ty0>)
80ImmBorrowFieldGeneric[3](Position.position_amount: u64)
81ReadRef
82Call sdecimal::div_by_u64(SDecimal, u64): SDecimal
83StLoc[38](loc28: SDecimal)
84MoveLoc[24](loc14: SDecimal)
85CopyLoc[38](loc28: SDecimal)
86Call sdecimal::sub(SDecimal, SDecimal): SDecimal
87StLoc[24](loc14: SDecimal)
88CopyLoc[0](Arg0: &mut Position<Ty0>)
89FreezeRef
90ImmBorrowLoc[38](loc28: SDecimal)
91CopyLoc[9](Arg9: u64)
92Call check_holding_duration<Ty0>(&Position<Ty0>, &SDecimal, u64): bool
93BrFalse(95)
B13:
94Branch(105)
B14:
95MoveLoc[0](Arg0: &mut Position<Ty0>)
96Pop
97MoveLoc[8](Arg8: &PositionInstantExitFeeConfig)
98Pop
99MoveLoc[2](Arg2: &AggPrice)
100Pop
101MoveLoc[1](Arg1: &AggPrice)
102Pop
103LdConst[9](u64: 410)
104Abort
B15:
105CopyLoc[0](Arg0: &mut Position<Ty0>)
106FreezeRef
107CopyLoc[6](Arg6: Rate)
108Call compute_reserving_fee_amount<Ty0>(&Position<Ty0>, Rate): Decimal
109StLoc[34](loc24: Decimal)
110CopyLoc[1](Arg1: &AggPrice)
111CopyLoc[34](loc24: Decimal)
112Call decimal::ceil_u64(Decimal): u64
113Call agg_price::coins_to_value(&AggPrice, u64): Decimal
114StLoc[35](loc25: Decimal)
115CopyLoc[0](Arg0: &mut Position<Ty0>)
116FreezeRef
117CopyLoc[7](Arg7: SRate)
118Call compute_funding_fee_value<Ty0>(&Position<Ty0>, SRate): SDecimal
119StLoc[25](loc15: SDecimal)
120CopyLoc[22](loc12: Decimal)
121CopyLoc[0](Arg0: &mut Position<Ty0>)
122ImmBorrowFieldGeneric[1](Position.config: PositionConfig)
123ImmBorrowField[6](PositionConfig.decrease_fee_bps: Rate)
124ReadRef
125Call decimal::mul_with_rate(Decimal, Rate): Decimal
126StLoc[21](loc11: Decimal)
127MoveLoc[9](Arg9: u64)
128CopyLoc[0](Arg0: &mut Position<Ty0>)
129ImmBorrowFieldGeneric[2](Position.open_timestamp: u64)
130ReadRef
131Sub
132StLoc[27](loc17: u64)
133CopyLoc[22](loc12: Decimal)
134MoveLoc[27](loc17: u64)
135CopyLoc[38](loc28: SDecimal)
136MoveLoc[8](Arg8: &PositionInstantExitFeeConfig)
137Call calculate_instant_exit_fee(Decimal, u64, SDecimal, &PositionInstantExitFeeConfig): Decimal * u8
138StLoc[28](loc18: u8)
139StLoc[29](loc19: Decimal)
140MoveLoc[38](loc28: SDecimal)
141CopyLoc[25](loc15: SDecimal)
142CopyLoc[21](loc11: Decimal)
143CopyLoc[35](loc25: Decimal)
144Call decimal::add(Decimal, Decimal): Decimal
145CopyLoc[29](loc19: Decimal)
146Call decimal::add(Decimal, Decimal): Decimal
147Call sdecimal::add_with_decimal(SDecimal, Decimal): SDecimal
148Call sdecimal::sub(SDecimal, SDecimal): SDecimal
149StLoc[38](loc28: SDecimal)
150CopyLoc[5](Arg5: u64)
151CopyLoc[0](Arg0: &mut Position<Ty0>)
152ImmBorrowFieldGeneric[3](Position.position_amount: u64)
153ReadRef
154Eq
155StLoc[19](loc9: bool)
156ImmBorrowLoc[38](loc28: SDecimal)
157Call sdecimal::is_positive(&SDecimal): bool
158StLoc[26](loc16: bool)
159CopyLoc[1](Arg1: &AggPrice)
160ImmBorrowLoc[38](loc28: SDecimal)
161Call sdecimal::value(&SDecimal): Decimal
162Call agg_price::value_to_coins(&AggPrice, Decimal): Decimal
163StLoc[36](loc26: Decimal)
164CopyLoc[26](loc16: bool)
165BrFalse(184)
B16:
166MoveLoc[36](loc26: Decimal)
167Call decimal::floor_u64(Decimal): u64
168StLoc[33](loc23: u64)
169CopyLoc[33](loc23: u64)
170CopyLoc[0](Arg0: &mut Position<Ty0>)
171ImmBorrowFieldGeneric[6](Position.reserved: Balance<Ty0>)
172Call balance::value<Ty0>(&Balance<Ty0>): u64
173Ge
174BrFalse(181)
B17:
175LdTrue
176StLoc[19](loc9: bool)
177CopyLoc[0](Arg0: &mut Position<Ty0>)
178ImmBorrowFieldGeneric[6](Position.reserved: Balance<Ty0>)
179Call balance::value<Ty0>(&Balance<Ty0>): u64
180StLoc[33](loc23: u64)
B18:
181MoveLoc[33](loc23: u64)
182StLoc[12](loc2: u64)
183Branch(201)
B19:
184MoveLoc[36](loc26: Decimal)
185Call decimal::ceil_u64(Decimal): u64
186StLoc[30](loc20: u64)
187CopyLoc[30](loc20: u64)
188CopyLoc[0](Arg0: &mut Position<Ty0>)
189ImmBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
190Call balance::value<Ty0>(&Balance<Ty0>): u64
191Ge
192BrFalse(199)
B20:
193LdTrue
194StLoc[19](loc9: bool)
195CopyLoc[0](Arg0: &mut Position<Ty0>)
196ImmBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
197Call balance::value<Ty0>(&Balance<Ty0>): u64
198StLoc[30](loc20: u64)
B21:
199MoveLoc[30](loc20: u64)
200StLoc[12](loc2: u64)
B22:
201MoveLoc[12](loc2: u64)
202StLoc[37](loc27: u64)
203CopyLoc[19](loc9: bool)
204BrFalse(210)
B23:
205CopyLoc[0](Arg0: &mut Position<Ty0>)
206ImmBorrowFieldGeneric[6](Position.reserved: Balance<Ty0>)
207Call balance::value<Ty0>(&Balance<Ty0>): u64
208StLoc[14](loc4: u64)
209Branch(219)
B24:
210CopyLoc[26](loc16: bool)
211BrFalse(215)
B25:
212CopyLoc[37](loc27: u64)
213StLoc[13](loc3: u64)
214Branch(217)
B26:
215LdU64(0)
216StLoc[13](loc3: u64)
B27:
217MoveLoc[13](loc3: u64)
218StLoc[14](loc4: u64)
B28:
219MoveLoc[14](loc4: u64)
220StLoc[23](loc13: u64)
221CopyLoc[0](Arg0: &mut Position<Ty0>)
222ImmBorrowFieldGeneric[3](Position.position_amount: u64)
223ReadRef
224MoveLoc[5](Arg5: u64)
225Sub
226StLoc[31](loc21: u64)
227CopyLoc[0](Arg0: &mut Position<Ty0>)
228ImmBorrowFieldGeneric[4](Position.position_size: Decimal)
229ReadRef
230CopyLoc[22](loc12: Decimal)
231Call decimal::sub(Decimal, Decimal): Decimal
232StLoc[32](loc22: Decimal)
233CopyLoc[19](loc9: bool)
234Not
235BrFalse(292)
B29:
236MoveLoc[1](Arg1: &AggPrice)
237StLoc[16](loc6: &AggPrice)
238CopyLoc[26](loc16: bool)
239BrFalse(245)
B30:
240CopyLoc[0](Arg0: &mut Position<Ty0>)
241ImmBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
242Call balance::value<Ty0>(&Balance<Ty0>): u64
243StLoc[15](loc5: u64)
244Branch(251)
B31:
245CopyLoc[0](Arg0: &mut Position<Ty0>)
246ImmBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
247Call balance::value<Ty0>(&Balance<Ty0>): u64
248CopyLoc[37](loc27: u64)
249Sub
250StLoc[15](loc5: u64)
B32:
251MoveLoc[16](loc6: &AggPrice)
252MoveLoc[15](loc5: u64)
253Call agg_price::coins_to_value(&AggPrice, u64): Decimal
254StLoc[20](loc10: Decimal)
255ImmBorrowLoc[20](loc10: Decimal)
256CopyLoc[0](Arg0: &mut Position<Ty0>)
257ImmBorrowFieldGeneric[1](Position.config: PositionConfig)
258ImmBorrowField[3](PositionConfig.min_collateral_value: Decimal)
259Call decimal::ge(&Decimal, &Decimal): bool
260BrFalse(262)
B33:
261Branch(268)
B34:
262MoveLoc[0](Arg0: &mut Position<Ty0>)
263Pop
264MoveLoc[2](Arg2: &AggPrice)
265Pop
266LdConst[8](u64: 409)
267Abort
B35:
268CopyLoc[0](Arg0: &mut Position<Ty0>)
269ImmBorrowFieldGeneric[1](Position.config: PositionConfig)
270CopyLoc[20](loc10: Decimal)
271CopyLoc[31](loc21: u64)
272MoveLoc[2](Arg2: &AggPrice)
273Call check_leverage(&PositionConfig, Decimal, u64, &AggPrice): bool
274BrFalse(276)
B36:
275Branch(280)
B37:
276MoveLoc[0](Arg0: &mut Position<Ty0>)
277Pop
278LdConst[10](u64: 411)
279Abort
B38:
280CopyLoc[0](Arg0: &mut Position<Ty0>)
281ImmBorrowFieldGeneric[1](Position.config: PositionConfig)
282MoveLoc[20](loc10: Decimal)
283ImmBorrowLoc[24](loc14: SDecimal)
284Call check_liquidation(&PositionConfig, Decimal, &SDecimal): bool
285Not
286BrFalse(288)
B39:
287Branch(296)
B40:
288MoveLoc[0](Arg0: &mut Position<Ty0>)
289Pop
290LdConst[11](u64: 412)
291Abort
B41:
292MoveLoc[2](Arg2: &AggPrice)
293Pop
294MoveLoc[1](Arg1: &AggPrice)
295Pop
B42:
296CopyLoc[19](loc9: bool)
297CopyLoc[0](Arg0: &mut Position<Ty0>)
298MutBorrowFieldGeneric[0](Position.closed: bool)
299WriteRef
300MoveLoc[31](loc21: u64)
301CopyLoc[0](Arg0: &mut Position<Ty0>)
302MutBorrowFieldGeneric[3](Position.position_amount: u64)
303WriteRef
304MoveLoc[32](loc22: Decimal)
305CopyLoc[0](Arg0: &mut Position<Ty0>)
306MutBorrowFieldGeneric[4](Position.position_size: Decimal)
307WriteRef
308Call decimal::zero(): Decimal
309CopyLoc[0](Arg0: &mut Position<Ty0>)
310MutBorrowFieldGeneric[8](Position.reserving_fee_amount: Decimal)
311WriteRef
312Call sdecimal::zero(): SDecimal
313CopyLoc[0](Arg0: &mut Position<Ty0>)
314MutBorrowFieldGeneric[10](Position.funding_fee_value: SDecimal)
315WriteRef
316MoveLoc[7](Arg7: SRate)
317CopyLoc[0](Arg0: &mut Position<Ty0>)
318MutBorrowFieldGeneric[9](Position.last_funding_rate: SRate)
319WriteRef
320MoveLoc[6](Arg6: Rate)
321CopyLoc[0](Arg0: &mut Position<Ty0>)
322MutBorrowFieldGeneric[7](Position.last_reserving_rate: Rate)
323WriteRef
324CopyLoc[26](loc16: bool)
325BrFalse(334)
B43:
326Call balance::zero<Ty0>(): Balance<Ty0>
327CopyLoc[0](Arg0: &mut Position<Ty0>)
328MutBorrowFieldGeneric[6](Position.reserved: Balance<Ty0>)
329CopyLoc[37](loc27: u64)
330Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
331StLoc[18](loc8: Balance<Ty0>)
332StLoc[17](loc7: Balance<Ty0>)
333Branch(341)
B44:
334CopyLoc[0](Arg0: &mut Position<Ty0>)
335MutBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
336CopyLoc[37](loc27: u64)
337Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
338Call balance::zero<Ty0>(): Balance<Ty0>
339StLoc[18](loc8: Balance<Ty0>)
340StLoc[17](loc7: Balance<Ty0>)
B45:
341MoveLoc[17](loc7: Balance<Ty0>)
342MoveLoc[18](loc8: Balance<Ty0>)
343StLoc[39](loc29: Balance<Ty0>)
344StLoc[40](loc30: Balance<Ty0>)
345CopyLoc[19](loc9: bool)
346BrFalse(360)
B46:
347MutBorrowLoc[40](loc30: Balance<Ty0>)
348CopyLoc[0](Arg0: &mut Position<Ty0>)
349MutBorrowFieldGeneric[6](Position.reserved: Balance<Ty0>)
350Call balance::withdraw_all<Ty0>(&mut Balance<Ty0>): Balance<Ty0>
351Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
352Pop
353MutBorrowLoc[39](loc29: Balance<Ty0>)
354MoveLoc[0](Arg0: &mut Position<Ty0>)
355MutBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
356Call balance::withdraw_all<Ty0>(&mut Balance<Ty0>): Balance<Ty0>
357Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
358Pop
359Branch(362)
B47:
360MoveLoc[0](Arg0: &mut Position<Ty0>)
361Pop
B48:
362MoveLoc[19](loc9: bool)
363MoveLoc[26](loc16: bool)
364MoveLoc[37](loc27: u64)
365MoveLoc[23](loc13: u64)
366MoveLoc[22](loc12: Decimal)
367MoveLoc[34](loc24: Decimal)
368MoveLoc[21](loc11: Decimal)
369MoveLoc[35](loc25: Decimal)
370MoveLoc[25](loc15: SDecimal)
371MoveLoc[29](loc19: Decimal)
372MoveLoc[28](loc18: u8)
373MoveLoc[40](loc30: Balance<Ty0>)
374MoveLoc[39](loc29: Balance<Ty0>)
375PackGeneric[2](DecreasePositionResultV1<Ty0>)
376Ret
}
 
public(friend) unwrap_decrease_position_result_v1<Ty0>(Arg0: DecreasePositionResultV1<Ty0>): bool * bool * u64 * u64 * Decimal * Decimal * Decimal * Decimal * SDecimal * Decimal * u8 * Balance<Ty0> * Balance<Ty0> {
B0:
0MoveLoc[0](Arg0: DecreasePositionResultV1<Ty0>)
1UnpackGeneric[2](DecreasePositionResultV1<Ty0>)
2Ret
}
 
public(friend) decrease_reserved_from_position<Ty0>(Arg0: &mut Position<Ty0>, Arg1: u64, Arg2: Rate): Balance<Ty0> {
B0:
0CopyLoc[0](Arg0: &mut Position<Ty0>)
1ImmBorrowFieldGeneric[0](Position.closed: bool)
2ReadRef
3Not
4BrFalse(6)
B1:
5Branch(10)
B2:
6MoveLoc[0](Arg0: &mut Position<Ty0>)
7Pop
8LdConst[0](u64: 401)
9Abort
B3:
10CopyLoc[1](Arg1: u64)
11CopyLoc[0](Arg0: &mut Position<Ty0>)
12ImmBorrowFieldGeneric[6](Position.reserved: Balance<Ty0>)
13Call balance::value<Ty0>(&Balance<Ty0>): u64
14Lt
15BrFalse(17)
B4:
16Branch(21)
B5:
17MoveLoc[0](Arg0: &mut Position<Ty0>)
18Pop
19LdConst[7](u64: 408)
20Abort
B6:
21CopyLoc[0](Arg0: &mut Position<Ty0>)
22FreezeRef
23CopyLoc[2](Arg2: Rate)
24Call compute_reserving_fee_amount<Ty0>(&Position<Ty0>, Rate): Decimal
25CopyLoc[0](Arg0: &mut Position<Ty0>)
26MutBorrowFieldGeneric[8](Position.reserving_fee_amount: Decimal)
27WriteRef
28MoveLoc[2](Arg2: Rate)
29CopyLoc[0](Arg0: &mut Position<Ty0>)
30MutBorrowFieldGeneric[7](Position.last_reserving_rate: Rate)
31WriteRef
32MoveLoc[0](Arg0: &mut Position<Ty0>)
33MutBorrowFieldGeneric[6](Position.reserved: Balance<Ty0>)
34MoveLoc[1](Arg1: u64)
35Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
36Ret
}
 
public(friend) pledge_in_position<Ty0>(Arg0: &mut Position<Ty0>, Arg1: Balance<Ty0>) {
B0:
0CopyLoc[0](Arg0: &mut Position<Ty0>)
1ImmBorrowFieldGeneric[0](Position.closed: bool)
2ReadRef
3Not
4BrFalse(6)
B1:
5Branch(10)
B2:
6MoveLoc[0](Arg0: &mut Position<Ty0>)
7Pop
8LdConst[0](u64: 401)
9Abort
B3:
10ImmBorrowLoc[1](Arg1: Balance<Ty0>)
11Call balance::value<Ty0>(&Balance<Ty0>): u64
12LdU64(0)
13Gt
14BrFalse(16)
B4:
15Branch(20)
B5:
16MoveLoc[0](Arg0: &mut Position<Ty0>)
17Pop
18LdConst[2](u64: 403)
19Abort
B6:
20MoveLoc[0](Arg0: &mut Position<Ty0>)
21MutBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
22MoveLoc[1](Arg1: Balance<Ty0>)
23Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
24Pop
25Ret
}
 
public(friend) redeem_from_position<Ty0>(Arg0: &mut Position<Ty0>, Arg1: &AggPrice, Arg2: &AggPrice, Arg3: bool, Arg4: u64, Arg5: Rate, Arg6: SRate, Arg7: u64): Balance<Ty0> {
L8: loc0: bool
L9: loc1: Decimal
L10: loc2: SDecimal
L11: loc3: SDecimal
L12: loc4: Balance<Ty0>
L13: loc5: Decimal
L14: loc6: Decimal
B0:
0CopyLoc[0](Arg0: &mut Position<Ty0>)
1ImmBorrowFieldGeneric[0](Position.closed: bool)
2ReadRef
3Not
4BrFalse(6)
B1:
5Branch(14)
B2:
6MoveLoc[0](Arg0: &mut Position<Ty0>)
7Pop
8MoveLoc[2](Arg2: &AggPrice)
9Pop
10MoveLoc[1](Arg1: &AggPrice)
11Pop
12LdConst[0](u64: 401)
13Abort
B3:
14CopyLoc[4](Arg4: u64)
15LdU64(0)
16Gt
17BrFalse(25)
B4:
18CopyLoc[4](Arg4: u64)
19CopyLoc[0](Arg0: &mut Position<Ty0>)
20ImmBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
21Call balance::value<Ty0>(&Balance<Ty0>): u64
22Lt
23StLoc[8](loc0: bool)
24Branch(27)
B5:
25LdFalse
26StLoc[8](loc0: bool)
B6:
27MoveLoc[8](loc0: bool)
28BrFalse(30)
B7:
29Branch(38)
B8:
30MoveLoc[0](Arg0: &mut Position<Ty0>)
31Pop
32MoveLoc[2](Arg2: &AggPrice)
33Pop
34MoveLoc[1](Arg1: &AggPrice)
35Pop
36LdConst[3](u64: 404)
37Abort
B9:
38CopyLoc[0](Arg0: &mut Position<Ty0>)
39FreezeRef
40CopyLoc[2](Arg2: &AggPrice)
41MoveLoc[3](Arg3: bool)
42Call compute_delta_size<Ty0>(&Position<Ty0>, &AggPrice, bool): SDecimal
43StLoc[10](loc2: SDecimal)
44CopyLoc[0](Arg0: &mut Position<Ty0>)
45FreezeRef
46ImmBorrowLoc[10](loc2: SDecimal)
47MoveLoc[7](Arg7: u64)
48Call check_holding_duration<Ty0>(&Position<Ty0>, &SDecimal, u64): bool
49BrFalse(51)
B10:
50Branch(59)
B11:
51MoveLoc[0](Arg0: &mut Position<Ty0>)
52Pop
53MoveLoc[2](Arg2: &AggPrice)
54Pop
55MoveLoc[1](Arg1: &AggPrice)
56Pop
57LdConst[9](u64: 410)
58Abort
B12:
59CopyLoc[0](Arg0: &mut Position<Ty0>)
60FreezeRef
61CopyLoc[5](Arg5: Rate)
62Call compute_reserving_fee_amount<Ty0>(&Position<Ty0>, Rate): Decimal
63StLoc[13](loc5: Decimal)
64CopyLoc[1](Arg1: &AggPrice)
65CopyLoc[13](loc5: Decimal)
66Call decimal::ceil_u64(Decimal): u64
67Call agg_price::coins_to_value(&AggPrice, u64): Decimal
68StLoc[14](loc6: Decimal)
69CopyLoc[0](Arg0: &mut Position<Ty0>)
70FreezeRef
71CopyLoc[6](Arg6: SRate)
72Call compute_funding_fee_value<Ty0>(&Position<Ty0>, SRate): SDecimal
73StLoc[11](loc3: SDecimal)
74MoveLoc[10](loc2: SDecimal)
75CopyLoc[11](loc3: SDecimal)
76MoveLoc[14](loc6: Decimal)
77Call sdecimal::add_with_decimal(SDecimal, Decimal): SDecimal
78Call sdecimal::sub(SDecimal, SDecimal): SDecimal
79StLoc[10](loc2: SDecimal)
80MoveLoc[13](loc5: Decimal)
81CopyLoc[0](Arg0: &mut Position<Ty0>)
82MutBorrowFieldGeneric[8](Position.reserving_fee_amount: Decimal)
83WriteRef
84MoveLoc[11](loc3: SDecimal)
85CopyLoc[0](Arg0: &mut Position<Ty0>)
86MutBorrowFieldGeneric[10](Position.funding_fee_value: SDecimal)
87WriteRef
88MoveLoc[5](Arg5: Rate)
89CopyLoc[0](Arg0: &mut Position<Ty0>)
90MutBorrowFieldGeneric[7](Position.last_reserving_rate: Rate)
91WriteRef
92MoveLoc[6](Arg6: SRate)
93CopyLoc[0](Arg0: &mut Position<Ty0>)
94MutBorrowFieldGeneric[9](Position.last_funding_rate: SRate)
95WriteRef
96CopyLoc[0](Arg0: &mut Position<Ty0>)
97MutBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
98MoveLoc[4](Arg4: u64)
99Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
100StLoc[12](loc4: Balance<Ty0>)
101MoveLoc[1](Arg1: &AggPrice)
102CopyLoc[0](Arg0: &mut Position<Ty0>)
103ImmBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
104Call balance::value<Ty0>(&Balance<Ty0>): u64
105Call agg_price::coins_to_value(&AggPrice, u64): Decimal
106StLoc[9](loc1: Decimal)
107ImmBorrowLoc[9](loc1: Decimal)
108CopyLoc[0](Arg0: &mut Position<Ty0>)
109ImmBorrowFieldGeneric[1](Position.config: PositionConfig)
110ImmBorrowField[3](PositionConfig.min_collateral_value: Decimal)
111Call decimal::ge(&Decimal, &Decimal): bool
112BrFalse(114)
B13:
113Branch(120)
B14:
114MoveLoc[0](Arg0: &mut Position<Ty0>)
115Pop
116MoveLoc[2](Arg2: &AggPrice)
117Pop
118LdConst[8](u64: 409)
119Abort
B15:
120CopyLoc[0](Arg0: &mut Position<Ty0>)
121ImmBorrowFieldGeneric[1](Position.config: PositionConfig)
122CopyLoc[9](loc1: Decimal)
123CopyLoc[0](Arg0: &mut Position<Ty0>)
124ImmBorrowFieldGeneric[3](Position.position_amount: u64)
125ReadRef
126MoveLoc[2](Arg2: &AggPrice)
127Call check_leverage(&PositionConfig, Decimal, u64, &AggPrice): bool
128BrFalse(130)
B16:
129Branch(134)
B17:
130MoveLoc[0](Arg0: &mut Position<Ty0>)
131Pop
132LdConst[10](u64: 411)
133Abort
B18:
134MoveLoc[0](Arg0: &mut Position<Ty0>)
135ImmBorrowFieldGeneric[1](Position.config: PositionConfig)
136MoveLoc[9](loc1: Decimal)
137ImmBorrowLoc[10](loc2: SDecimal)
138Call check_liquidation(&PositionConfig, Decimal, &SDecimal): bool
139Not
140BrFalse(142)
B19:
141Branch(144)
B20:
142LdConst[11](u64: 412)
143Abort
B21:
144MoveLoc[12](loc4: Balance<Ty0>)
145Ret
}
 
public(friend) liquidate_position<Ty0>(Arg0: &mut Position<Ty0>, Arg1: &AggPrice, Arg2: &AggPrice, Arg3: bool, Arg4: Rate, Arg5: SRate, Arg6: Rate): u64 * u64 * u64 * u64 * Decimal * Decimal * Decimal * SDecimal * u64 * Decimal * Balance<Ty0> * Balance<Ty0> * Balance<Ty0> {
L7: loc0: u64
L8: loc1: u64
L9: loc2: Decimal
L10: loc3: SDecimal
L11: loc4: SDecimal
L12: loc5: u64
L13: loc6: Decimal
L14: loc7: u64
L15: loc8: Decimal
L16: loc9: u64
L17: loc10: Decimal
L18: loc11: Decimal
L19: loc12: Balance<Ty0>
L20: loc13: Balance<Ty0>
L21: loc14: Balance<Ty0>
B0:
0CopyLoc[0](Arg0: &mut Position<Ty0>)
1ImmBorrowFieldGeneric[0](Position.closed: bool)
2ReadRef
3Not
4BrFalse(6)
B1:
5Branch(14)
B2:
6MoveLoc[0](Arg0: &mut Position<Ty0>)
7Pop
8MoveLoc[2](Arg2: &AggPrice)
9Pop
10MoveLoc[1](Arg1: &AggPrice)
11Pop
12LdConst[0](u64: 401)
13Abort
B3:
14CopyLoc[0](Arg0: &mut Position<Ty0>)
15FreezeRef
16MoveLoc[2](Arg2: &AggPrice)
17MoveLoc[3](Arg3: bool)
18Call compute_delta_size<Ty0>(&Position<Ty0>, &AggPrice, bool): SDecimal
19StLoc[10](loc3: SDecimal)
20CopyLoc[0](Arg0: &mut Position<Ty0>)
21FreezeRef
22CopyLoc[4](Arg4: Rate)
23Call compute_reserving_fee_amount<Ty0>(&Position<Ty0>, Rate): Decimal
24StLoc[17](loc10: Decimal)
25CopyLoc[1](Arg1: &AggPrice)
26CopyLoc[17](loc10: Decimal)
27Call decimal::ceil_u64(Decimal): u64
28Call agg_price::coins_to_value(&AggPrice, u64): Decimal
29StLoc[18](loc11: Decimal)
30CopyLoc[0](Arg0: &mut Position<Ty0>)
31FreezeRef
32CopyLoc[5](Arg5: SRate)
33Call compute_funding_fee_value<Ty0>(&Position<Ty0>, SRate): SDecimal
34StLoc[11](loc4: SDecimal)
35MoveLoc[10](loc3: SDecimal)
36CopyLoc[11](loc4: SDecimal)
37CopyLoc[18](loc11: Decimal)
38Call sdecimal::add_with_decimal(SDecimal, Decimal): SDecimal
39Call sdecimal::sub(SDecimal, SDecimal): SDecimal
40StLoc[10](loc3: SDecimal)
41CopyLoc[1](Arg1: &AggPrice)
42CopyLoc[0](Arg0: &mut Position<Ty0>)
43ImmBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
44Call balance::value<Ty0>(&Balance<Ty0>): u64
45Call agg_price::coins_to_value(&AggPrice, u64): Decimal
46StLoc[9](loc2: Decimal)
47CopyLoc[0](Arg0: &mut Position<Ty0>)
48ImmBorrowFieldGeneric[1](Position.config: PositionConfig)
49MoveLoc[9](loc2: Decimal)
50ImmBorrowLoc[10](loc3: SDecimal)
51Call check_liquidation(&PositionConfig, Decimal, &SDecimal): bool
52BrFalse(54)
B4:
53Branch(60)
B5:
54MoveLoc[0](Arg0: &mut Position<Ty0>)
55Pop
56MoveLoc[1](Arg1: &AggPrice)
57Pop
58LdConst[12](u64: 413)
59Abort
B6:
60CopyLoc[0](Arg0: &mut Position<Ty0>)
61ImmBorrowFieldGeneric[3](Position.position_amount: u64)
62ReadRef
63StLoc[14](loc7: u64)
64CopyLoc[0](Arg0: &mut Position<Ty0>)
65ImmBorrowFieldGeneric[4](Position.position_size: Decimal)
66ReadRef
67StLoc[15](loc8: Decimal)
68CopyLoc[0](Arg0: &mut Position<Ty0>)
69ImmBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
70Call balance::value<Ty0>(&Balance<Ty0>): u64
71StLoc[8](loc1: u64)
72CopyLoc[0](Arg0: &mut Position<Ty0>)
73ImmBorrowFieldGeneric[6](Position.reserved: Balance<Ty0>)
74Call balance::value<Ty0>(&Balance<Ty0>): u64
75StLoc[16](loc9: u64)
76LdTrue
77CopyLoc[0](Arg0: &mut Position<Ty0>)
78MutBorrowFieldGeneric[0](Position.closed: bool)
79WriteRef
80LdU64(0)
81CopyLoc[0](Arg0: &mut Position<Ty0>)
82MutBorrowFieldGeneric[3](Position.position_amount: u64)
83WriteRef
84Call decimal::zero(): Decimal
85CopyLoc[0](Arg0: &mut Position<Ty0>)
86MutBorrowFieldGeneric[4](Position.position_size: Decimal)
87WriteRef
88Call decimal::zero(): Decimal
89CopyLoc[0](Arg0: &mut Position<Ty0>)
90MutBorrowFieldGeneric[8](Position.reserving_fee_amount: Decimal)
91WriteRef
92Call sdecimal::zero(): SDecimal
93CopyLoc[0](Arg0: &mut Position<Ty0>)
94MutBorrowFieldGeneric[10](Position.funding_fee_value: SDecimal)
95WriteRef
96MoveLoc[5](Arg5: SRate)
97CopyLoc[0](Arg0: &mut Position<Ty0>)
98MutBorrowFieldGeneric[9](Position.last_funding_rate: SRate)
99WriteRef
100MoveLoc[4](Arg4: Rate)
101CopyLoc[0](Arg0: &mut Position<Ty0>)
102MutBorrowFieldGeneric[7](Position.last_reserving_rate: Rate)
103WriteRef
104CopyLoc[8](loc1: u64)
105Call decimal::from_u64(u64): Decimal
106MoveLoc[6](Arg6: Rate)
107Call decimal::mul_with_rate(Decimal, Rate): Decimal
108Call decimal::floor_u64(Decimal): u64
109StLoc[12](loc5: u64)
110MoveLoc[1](Arg1: &AggPrice)
111CopyLoc[12](loc5: u64)
112Call agg_price::coins_to_value(&AggPrice, u64): Decimal
113StLoc[13](loc6: Decimal)
114CopyLoc[8](loc1: u64)
115Call decimal::from_u64(u64): Decimal
116CopyLoc[0](Arg0: &mut Position<Ty0>)
117ImmBorrowFieldGeneric[1](Position.config: PositionConfig)
118ImmBorrowField[8](PositionConfig.liquidation_bonus: Rate)
119ReadRef
120Call decimal::mul_with_rate(Decimal, Rate): Decimal
121Call decimal::floor_u64(Decimal): u64
122StLoc[7](loc0: u64)
123CopyLoc[12](loc5: u64)
124CopyLoc[7](loc0: u64)
125Add
126CopyLoc[8](loc1: u64)
127Lt
128BrFalse(130)
B7:
129Branch(134)
B8:
130MoveLoc[0](Arg0: &mut Position<Ty0>)
131Pop
132LdConst[15](u64: 416)
133Abort
B9:
134CopyLoc[0](Arg0: &mut Position<Ty0>)
135MutBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
136CopyLoc[12](loc5: u64)
137Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
138StLoc[19](loc12: Balance<Ty0>)
139CopyLoc[0](Arg0: &mut Position<Ty0>)
140MutBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
141CopyLoc[7](loc0: u64)
142Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
143StLoc[20](loc13: Balance<Ty0>)
144CopyLoc[0](Arg0: &mut Position<Ty0>)
145MutBorrowFieldGeneric[6](Position.reserved: Balance<Ty0>)
146Call balance::withdraw_all<Ty0>(&mut Balance<Ty0>): Balance<Ty0>
147StLoc[21](loc14: Balance<Ty0>)
148MutBorrowLoc[21](loc14: Balance<Ty0>)
149MoveLoc[0](Arg0: &mut Position<Ty0>)
150MutBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
151Call balance::withdraw_all<Ty0>(&mut Balance<Ty0>): Balance<Ty0>
152Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
153Pop
154MoveLoc[7](loc0: u64)
155MoveLoc[8](loc1: u64)
156MoveLoc[14](loc7: u64)
157MoveLoc[16](loc9: u64)
158MoveLoc[15](loc8: Decimal)
159MoveLoc[17](loc10: Decimal)
160MoveLoc[18](loc11: Decimal)
161MoveLoc[11](loc4: SDecimal)
162MoveLoc[12](loc5: u64)
163MoveLoc[13](loc6: Decimal)
164MoveLoc[21](loc14: Balance<Ty0>)
165MoveLoc[19](loc12: Balance<Ty0>)
166MoveLoc[20](loc13: Balance<Ty0>)
167Ret
}
 
public(friend) destroy_position<Ty0>(Arg0: Position<Ty0>) {
L1: loc0: Balance<Ty0>
L2: loc1: Balance<Ty0>
B0:
0MoveLoc[0](Arg0: Position<Ty0>)
1UnpackGeneric[0](Position<Ty0>)
2StLoc[1](loc0: Balance<Ty0>)
3StLoc[2](loc1: Balance<Ty0>)
4Pop
5Pop
6Pop
7Pop
8Pop
9Pop
10Pop
11Pop
12BrFalse(14)
B1:
13Branch(16)
B2:
14LdConst[1](u64: 402)
15Abort
B3:
16MoveLoc[2](loc1: Balance<Ty0>)
17Call balance::destroy_zero<Ty0>(Balance<Ty0>)
18MoveLoc[1](loc0: Balance<Ty0>)
19Call balance::destroy_zero<Ty0>(Balance<Ty0>)
20Ret
}
 
public(friend) force_settle<Ty0>(Arg0: &AdminCap, Arg1: &mut Position<Ty0>, Arg2: Rate, Arg3: SRate): Balance<Ty0> * u64 * Decimal * SDecimal * Balance<Ty0> * u64 * Decimal {
L4: loc0: Balance<Ty0>
L5: loc1: SDecimal
L6: loc2: u64
L7: loc3: Decimal
L8: loc4: Balance<Ty0>
L9: loc5: u64
L10: loc6: Decimal
B0:
0CopyLoc[1](Arg1: &mut Position<Ty0>)
1FreezeRef
2CopyLoc[2](Arg2: Rate)
3Call compute_reserving_fee_amount<Ty0>(&Position<Ty0>, Rate): Decimal
4StLoc[10](loc6: Decimal)
5CopyLoc[1](Arg1: &mut Position<Ty0>)
6FreezeRef
7CopyLoc[3](Arg3: SRate)
8Call compute_funding_fee_value<Ty0>(&Position<Ty0>, SRate): SDecimal
9StLoc[5](loc1: SDecimal)
10CopyLoc[1](Arg1: &mut Position<Ty0>)
11MutBorrowFieldGeneric[6](Position.reserved: Balance<Ty0>)
12Call balance::withdraw_all<Ty0>(&mut Balance<Ty0>): Balance<Ty0>
13StLoc[8](loc4: Balance<Ty0>)
14ImmBorrowLoc[8](loc4: Balance<Ty0>)
15Call balance::value<Ty0>(&Balance<Ty0>): u64
16StLoc[9](loc5: u64)
17CopyLoc[1](Arg1: &mut Position<Ty0>)
18MutBorrowFieldGeneric[5](Position.collateral: Balance<Ty0>)
19Call balance::withdraw_all<Ty0>(&mut Balance<Ty0>): Balance<Ty0>
20StLoc[4](loc0: Balance<Ty0>)
21CopyLoc[1](Arg1: &mut Position<Ty0>)
22ImmBorrowFieldGeneric[3](Position.position_amount: u64)
23ReadRef
24StLoc[6](loc2: u64)
25CopyLoc[1](Arg1: &mut Position<Ty0>)
26ImmBorrowFieldGeneric[4](Position.position_size: Decimal)
27ReadRef
28StLoc[7](loc3: Decimal)
29LdTrue
30CopyLoc[1](Arg1: &mut Position<Ty0>)
31MutBorrowFieldGeneric[0](Position.closed: bool)
32WriteRef
33LdU64(0)
34CopyLoc[1](Arg1: &mut Position<Ty0>)
35MutBorrowFieldGeneric[3](Position.position_amount: u64)
36WriteRef
37Call decimal::zero(): Decimal
38CopyLoc[1](Arg1: &mut Position<Ty0>)
39MutBorrowFieldGeneric[4](Position.position_size: Decimal)
40WriteRef
41Call decimal::zero(): Decimal
42CopyLoc[1](Arg1: &mut Position<Ty0>)
43MutBorrowFieldGeneric[8](Position.reserving_fee_amount: Decimal)
44WriteRef
45Call sdecimal::zero(): SDecimal
46CopyLoc[1](Arg1: &mut Position<Ty0>)
47MutBorrowFieldGeneric[10](Position.funding_fee_value: SDecimal)
48WriteRef
49MoveLoc[3](Arg3: SRate)
50CopyLoc[1](Arg1: &mut Position<Ty0>)
51MutBorrowFieldGeneric[9](Position.last_funding_rate: SRate)
52WriteRef
53MoveLoc[2](Arg2: Rate)
54MoveLoc[1](Arg1: &mut Position<Ty0>)
55MutBorrowFieldGeneric[7](Position.last_reserving_rate: Rate)
56WriteRef
57MoveLoc[8](loc4: Balance<Ty0>)
58MoveLoc[9](loc5: u64)
59MoveLoc[10](loc6: Decimal)
60MoveLoc[5](loc1: SDecimal)
61MoveLoc[4](loc0: Balance<Ty0>)
62MoveLoc[6](loc2: u64)
63MoveLoc[7](loc3: Decimal)
64Ret
}
 
calculate_instant_exit_fee(Arg0: Decimal, Arg1: u64, Arg2: SDecimal, Arg3: &PositionInstantExitFeeConfig): Decimal * u8 {
L4: loc0: bool
L5: loc1: bool
L6: loc2: bool
B0:
0ImmBorrowLoc[2](Arg2: SDecimal)
1Call sdecimal::is_positive(&SDecimal): bool
2Not
3BrFalse(9)
B1:
4MoveLoc[3](Arg3: &PositionInstantExitFeeConfig)
5Pop
6Call decimal::zero(): Decimal
7LdU8(0)
8Ret
B2:
9CopyLoc[3](Arg3: &PositionInstantExitFeeConfig)
10ImmBorrowField[22](PositionInstantExitFeeConfig.instant_exit_tier_1_fee_enabled: bool)
11ReadRef
12BrFalse(20)
B3:
13CopyLoc[1](Arg1: u64)
14CopyLoc[3](Arg3: &PositionInstantExitFeeConfig)
15ImmBorrowField[20](PositionInstantExitFeeConfig.instant_exit_tier_1_duration_threshold: u64)
16ReadRef
17Le
18StLoc[4](loc0: bool)
19Branch(22)
B4:
20LdFalse
21StLoc[4](loc0: bool)
B5:
22MoveLoc[4](loc0: bool)
23BrFalse(31)
B6:
24MoveLoc[0](Arg0: Decimal)
25MoveLoc[3](Arg3: &PositionInstantExitFeeConfig)
26ImmBorrowField[21](PositionInstantExitFeeConfig.instant_exit_tier_1_fee_bps: Rate)
27ReadRef
28Call decimal::mul_with_rate(Decimal, Rate): Decimal
29LdU8(1)
30Ret
B7:
31CopyLoc[3](Arg3: &PositionInstantExitFeeConfig)
32ImmBorrowField[25](PositionInstantExitFeeConfig.instant_exit_tier_2_fee_enabled: bool)
33ReadRef
34BrFalse(42)
B8:
35CopyLoc[1](Arg1: u64)
36CopyLoc[3](Arg3: &PositionInstantExitFeeConfig)
37ImmBorrowField[23](PositionInstantExitFeeConfig.instant_exit_tier_2_duration_threshold: u64)
38ReadRef
39Le
40StLoc[5](loc1: bool)
41Branch(44)
B9:
42LdFalse
43StLoc[5](loc1: bool)
B10:
44MoveLoc[5](loc1: bool)
45BrFalse(53)
B11:
46MoveLoc[0](Arg0: Decimal)
47MoveLoc[3](Arg3: &PositionInstantExitFeeConfig)
48ImmBorrowField[24](PositionInstantExitFeeConfig.instant_exit_tier_2_fee_bps: Rate)
49ReadRef
50Call decimal::mul_with_rate(Decimal, Rate): Decimal
51LdU8(2)
52Ret
B12:
53CopyLoc[3](Arg3: &PositionInstantExitFeeConfig)
54ImmBorrowField[28](PositionInstantExitFeeConfig.instant_exit_tier_3_fee_enabled: bool)
55ReadRef
56BrFalse(64)
B13:
57MoveLoc[1](Arg1: u64)
58CopyLoc[3](Arg3: &PositionInstantExitFeeConfig)
59ImmBorrowField[26](PositionInstantExitFeeConfig.instant_exit_tier_3_duration_threshold: u64)
60ReadRef
61Le
62StLoc[6](loc2: bool)
63Branch(66)
B14:
64LdFalse
65StLoc[6](loc2: bool)
B15:
66MoveLoc[6](loc2: bool)
67BrFalse(75)
B16:
68MoveLoc[0](Arg0: Decimal)
69MoveLoc[3](Arg3: &PositionInstantExitFeeConfig)
70ImmBorrowField[27](PositionInstantExitFeeConfig.instant_exit_tier_3_fee_bps: Rate)
71ReadRef
72Call decimal::mul_with_rate(Decimal, Rate): Decimal
73LdU8(3)
74Ret
B17:
75MoveLoc[3](Arg3: &PositionInstantExitFeeConfig)
76Pop
77Call decimal::zero(): Decimal
78LdU8(0)
79Ret
}
 
Constants [
0 => u64: 401
1 => u64: 402
2 => u64: 403
3 => u64: 404
4 => u64: 405
5 => u64: 406
6 => u64: 407
7 => u64: 408
8 => u64: 409
9 => u64: 410
10 => u64: 411
11 => u64: 412
12 => u64: 413
13 => u64: 414
14 => u64: 415
15 => u64: 416
]
}