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

Move path
0xce7f…4db2::reservoir
Functions
127 public, 0 entry
Structs
3
Friend modules
buck
reservoir

Bytecode341 lines

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

// Move bytecode v7
module ce7ff77a83ea0cb6fd39bd8748e2ec89a3f41e8efdc3f4eb123e0ca37b184db2.reservoir {
use ce7ff77a83ea0cb6fd39bd8748e2ec89a3f41e8efdc3f4eb123e0ca37b184db2::math;
use ce7ff77a83ea0cb6fd39bd8748e2ec89a3f41e8efdc3f4eb123e0ca37b184db2::reservoir_events;
use 0000000000000000000000000000000000000000000000000000000000000001::type_name;
use 0000000000000000000000000000000000000000000000000000000000000002::balance;
use 0000000000000000000000000000000000000000000000000000000000000002::dynamic_field;
use 0000000000000000000000000000000000000000000000000000000000000002::object;
use 0000000000000000000000000000000000000000000000000000000000000002::tx_context;
use 0000000000000000000000000000000000000000000000000000000000000002::vec_map;
 
struct Reservoir<phantom Ty0> has store, key {
id: UID,
conversion_rate: u64,
charge_fee_rate: u64,
discharge_fee_rate: u64,
pool: Balance<Ty0>,
buck_minted_amount: u64
}
 
struct FeeConfigKey has copy, drop, store {
dummy_field: bool
}
 
struct FeeConfig has copy, drop, store {
charge_fee_rate: u64,
discharge_fee_rate: u64
}
 
public(friend) new<Ty0>(Arg0: u64, Arg1: u64, Arg2: u64, Arg3: &mut TxContext): Reservoir<Ty0> {
B0:
0MoveLoc[3](Arg3: &mut TxContext)
1Call object::new(&mut TxContext): UID
2MoveLoc[0](Arg0: u64)
3MoveLoc[1](Arg1: u64)
4MoveLoc[2](Arg2: u64)
5Call balance::zero<Ty0>(): Balance<Ty0>
6LdU64(0)
7PackGeneric[0](Reservoir<Ty0>)
8Ret
}
 
public(friend) handle_charge<Ty0>(Arg0: &mut Reservoir<Ty0>, Arg1: Balance<Ty0>): u64 {
L2: loc0: u64
L3: loc1: u64
B0:
0ImmBorrowLoc[1](Arg1: Balance<Ty0>)
1Call balance::value<Ty0>(&Balance<Ty0>): u64
2StLoc[3](loc1: u64)
3CopyLoc[3](loc1: u64)
4CopyLoc[0](Arg0: &mut Reservoir<Ty0>)
5ImmBorrowFieldGeneric[0](Reservoir.conversion_rate: u64)
6ReadRef
7LdConst[0](u64: 1000..)
8Call math::mul_div(u64, u64, u64): u64
9StLoc[2](loc0: u64)
10MoveLoc[3](loc1: u64)
11CopyLoc[2](loc0: u64)
12Call reservoir_events::emit_charge_reservoir<Ty0>(u64, u64)
13CopyLoc[0](Arg0: &mut Reservoir<Ty0>)
14MutBorrowFieldGeneric[1](Reservoir.pool: Balance<Ty0>)
15MoveLoc[1](Arg1: Balance<Ty0>)
16Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
17Pop
18CopyLoc[0](Arg0: &mut Reservoir<Ty0>)
19ImmBorrowFieldGeneric[2](Reservoir.buck_minted_amount: u64)
20ReadRef
21CopyLoc[2](loc0: u64)
22Add
23MoveLoc[0](Arg0: &mut Reservoir<Ty0>)
24MutBorrowFieldGeneric[2](Reservoir.buck_minted_amount: u64)
25WriteRef
26MoveLoc[2](loc0: u64)
27Ret
}
 
public(friend) handle_discharge<Ty0>(Arg0: &mut Reservoir<Ty0>, Arg1: u64): Balance<Ty0> {
L2: loc0: u64
B0:
0CopyLoc[1](Arg1: u64)
1LdConst[0](u64: 1000..)
2CopyLoc[0](Arg0: &mut Reservoir<Ty0>)
3ImmBorrowFieldGeneric[0](Reservoir.conversion_rate: u64)
4ReadRef
5Call math::mul_div(u64, u64, u64): u64
6StLoc[2](loc0: u64)
7CopyLoc[2](loc0: u64)
8CopyLoc[0](Arg0: &mut Reservoir<Ty0>)
9FreezeRef
10Call pool_balance<Ty0>(&Reservoir<Ty0>): u64
11Le
12BrFalse(14)
B1:
13Branch(18)
B2:
14MoveLoc[0](Arg0: &mut Reservoir<Ty0>)
15Pop
16LdConst[1](u64: 0)
17Abort
B3:
18CopyLoc[2](loc0: u64)
19CopyLoc[1](Arg1: u64)
20Call reservoir_events::emit_discharge_reservoir<Ty0>(u64, u64)
21CopyLoc[0](Arg0: &mut Reservoir<Ty0>)
22ImmBorrowFieldGeneric[2](Reservoir.buck_minted_amount: u64)
23ReadRef
24MoveLoc[1](Arg1: u64)
25Sub
26CopyLoc[0](Arg0: &mut Reservoir<Ty0>)
27MutBorrowFieldGeneric[2](Reservoir.buck_minted_amount: u64)
28WriteRef
29MoveLoc[0](Arg0: &mut Reservoir<Ty0>)
30MutBorrowFieldGeneric[1](Reservoir.pool: Balance<Ty0>)
31MoveLoc[2](loc0: u64)
32Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
33Ret
}
 
public(friend) update_fee_rate<Ty0>(Arg0: &mut Reservoir<Ty0>, Arg1: u64, Arg2: u64) {
B0:
0MoveLoc[1](Arg1: u64)
1CopyLoc[0](Arg0: &mut Reservoir<Ty0>)
2MutBorrowFieldGeneric[3](Reservoir.charge_fee_rate: u64)
3WriteRef
4MoveLoc[2](Arg2: u64)
5MoveLoc[0](Arg0: &mut Reservoir<Ty0>)
6MutBorrowFieldGeneric[4](Reservoir.discharge_fee_rate: u64)
7WriteRef
8Ret
}
 
public(friend) set_fee_config<Ty0, Ty1: drop>(Arg0: &mut Reservoir<Ty0>, Arg1: u64, Arg2: u64) {
L3: loc0: &TypeName
L4: loc1: &mut FeeConfig
L5: loc2: &mut VecMap<TypeName, FeeConfig>
L6: loc3: VecMap<TypeName, FeeConfig>
L7: loc4: FeeConfigKey
L8: loc5: TypeName
B0:
0LdFalse
1Pack[1](FeeConfigKey)
2StLoc[7](loc4: FeeConfigKey)
3Call type_name::with_defining_ids<Ty1>(): TypeName
4StLoc[8](loc5: TypeName)
5CopyLoc[0](Arg0: &mut Reservoir<Ty0>)
6ImmBorrowFieldGeneric[5](Reservoir.id: UID)
7CopyLoc[7](loc4: FeeConfigKey)
8Call dynamic_field::exists_with_type<FeeConfigKey, VecMap<TypeName, FeeConfig>>(&UID, FeeConfigKey): bool
9BrFalse(42)
B1:
10MoveLoc[0](Arg0: &mut Reservoir<Ty0>)
11MutBorrowFieldGeneric[5](Reservoir.id: UID)
12MoveLoc[7](loc4: FeeConfigKey)
13Call dynamic_field::borrow_mut<FeeConfigKey, VecMap<TypeName, FeeConfig>>(&mut UID, FeeConfigKey): &mut VecMap<TypeName, FeeConfig>
14StLoc[5](loc2: &mut VecMap<TypeName, FeeConfig>)
15CopyLoc[5](loc2: &mut VecMap<TypeName, FeeConfig>)
16ImmBorrowLoc[8](loc5: TypeName)
17StLoc[3](loc0: &TypeName)
18FreezeRef
19MoveLoc[3](loc0: &TypeName)
20Call vec_map::contains<TypeName, FeeConfig>(&VecMap<TypeName, FeeConfig>, &TypeName): bool
21BrFalse(35)
B2:
22MoveLoc[5](loc2: &mut VecMap<TypeName, FeeConfig>)
23ImmBorrowLoc[8](loc5: TypeName)
24Call vec_map::get_mut<TypeName, FeeConfig>(&mut VecMap<TypeName, FeeConfig>, &TypeName): &mut FeeConfig
25StLoc[4](loc1: &mut FeeConfig)
26MoveLoc[1](Arg1: u64)
27CopyLoc[4](loc1: &mut FeeConfig)
28MutBorrowField[6](FeeConfig.charge_fee_rate: u64)
29WriteRef
30MoveLoc[2](Arg2: u64)
31MoveLoc[4](loc1: &mut FeeConfig)
32MutBorrowField[7](FeeConfig.discharge_fee_rate: u64)
33WriteRef
34Branch(41)
B3:
35MoveLoc[5](loc2: &mut VecMap<TypeName, FeeConfig>)
36MoveLoc[8](loc5: TypeName)
37MoveLoc[1](Arg1: u64)
38MoveLoc[2](Arg2: u64)
39Pack[2](FeeConfig)
40Call vec_map::insert<TypeName, FeeConfig>(&mut VecMap<TypeName, FeeConfig>, TypeName, FeeConfig)
B4:
41Branch(55)
B5:
42Call vec_map::empty<TypeName, FeeConfig>(): VecMap<TypeName, FeeConfig>
43StLoc[6](loc3: VecMap<TypeName, FeeConfig>)
44MutBorrowLoc[6](loc3: VecMap<TypeName, FeeConfig>)
45MoveLoc[8](loc5: TypeName)
46MoveLoc[1](Arg1: u64)
47MoveLoc[2](Arg2: u64)
48Pack[2](FeeConfig)
49Call vec_map::insert<TypeName, FeeConfig>(&mut VecMap<TypeName, FeeConfig>, TypeName, FeeConfig)
50MoveLoc[0](Arg0: &mut Reservoir<Ty0>)
51MutBorrowFieldGeneric[5](Reservoir.id: UID)
52MoveLoc[7](loc4: FeeConfigKey)
53MoveLoc[6](loc3: VecMap<TypeName, FeeConfig>)
54Call dynamic_field::add<FeeConfigKey, VecMap<TypeName, FeeConfig>>(&mut UID, FeeConfigKey, VecMap<TypeName, FeeConfig>)
B6:
55Ret
}
 
public charge_fee_rate<Ty0>(Arg0: &Reservoir<Ty0>): u64 {
B0:
0MoveLoc[0](Arg0: &Reservoir<Ty0>)
1ImmBorrowFieldGeneric[3](Reservoir.charge_fee_rate: u64)
2ReadRef
3Ret
}
 
public discharge_fee_rate<Ty0>(Arg0: &Reservoir<Ty0>): u64 {
B0:
0MoveLoc[0](Arg0: &Reservoir<Ty0>)
1ImmBorrowFieldGeneric[4](Reservoir.discharge_fee_rate: u64)
2ReadRef
3Ret
}
 
public conversion_rate<Ty0>(Arg0: &Reservoir<Ty0>): u64 {
B0:
0MoveLoc[0](Arg0: &Reservoir<Ty0>)
1ImmBorrowFieldGeneric[0](Reservoir.conversion_rate: u64)
2ReadRef
3Ret
}
 
public pool_balance<Ty0>(Arg0: &Reservoir<Ty0>): u64 {
B0:
0MoveLoc[0](Arg0: &Reservoir<Ty0>)
1ImmBorrowFieldGeneric[1](Reservoir.pool: Balance<Ty0>)
2Call balance::value<Ty0>(&Balance<Ty0>): u64
3Ret
}
 
public is_partner<Ty0, Ty1: drop>(Arg0: &Reservoir<Ty0>): bool {
L1: loc0: bool
L2: loc1: FeeConfigKey
L3: loc2: TypeName
B0:
0LdFalse
1Pack[1](FeeConfigKey)
2StLoc[2](loc1: FeeConfigKey)
3Call type_name::with_defining_ids<Ty1>(): TypeName
4StLoc[3](loc2: TypeName)
5CopyLoc[0](Arg0: &Reservoir<Ty0>)
6ImmBorrowFieldGeneric[5](Reservoir.id: UID)
7CopyLoc[2](loc1: FeeConfigKey)
8Call dynamic_field::exists_with_type<FeeConfigKey, VecMap<TypeName, FeeConfig>>(&UID, FeeConfigKey): bool
9BrFalse(18)
B1:
10MoveLoc[0](Arg0: &Reservoir<Ty0>)
11ImmBorrowFieldGeneric[5](Reservoir.id: UID)
12MoveLoc[2](loc1: FeeConfigKey)
13Call dynamic_field::borrow<FeeConfigKey, VecMap<TypeName, FeeConfig>>(&UID, FeeConfigKey): &VecMap<TypeName, FeeConfig>
14ImmBorrowLoc[3](loc2: TypeName)
15Call vec_map::contains<TypeName, FeeConfig>(&VecMap<TypeName, FeeConfig>, &TypeName): bool
16StLoc[1](loc0: bool)
17Branch(22)
B2:
18MoveLoc[0](Arg0: &Reservoir<Ty0>)
19Pop
20LdFalse
21StLoc[1](loc0: bool)
B3:
22MoveLoc[1](loc0: bool)
23Ret
}
 
public charge_fee_rate_for_partner<Ty0, Ty1: drop>(Arg0: &Reservoir<Ty0>): u64 {
L1: loc0: TypeName
L2: loc1: &VecMap<TypeName, FeeConfig>
L3: loc2: u64
B0:
0CopyLoc[0](Arg0: &Reservoir<Ty0>)
1Call is_partner<Ty0, Ty1>(&Reservoir<Ty0>): bool
2BrFalse(18)
B1:
3MoveLoc[0](Arg0: &Reservoir<Ty0>)
4ImmBorrowFieldGeneric[5](Reservoir.id: UID)
5LdFalse
6Pack[1](FeeConfigKey)
7Call dynamic_field::borrow<FeeConfigKey, VecMap<TypeName, FeeConfig>>(&UID, FeeConfigKey): &VecMap<TypeName, FeeConfig>
8StLoc[2](loc1: &VecMap<TypeName, FeeConfig>)
9Call type_name::with_defining_ids<Ty1>(): TypeName
10StLoc[1](loc0: TypeName)
11MoveLoc[2](loc1: &VecMap<TypeName, FeeConfig>)
12ImmBorrowLoc[1](loc0: TypeName)
13Call vec_map::get<TypeName, FeeConfig>(&VecMap<TypeName, FeeConfig>, &TypeName): &FeeConfig
14ImmBorrowField[6](FeeConfig.charge_fee_rate: u64)
15ReadRef
16StLoc[3](loc2: u64)
17Branch(21)
B2:
18MoveLoc[0](Arg0: &Reservoir<Ty0>)
19Call charge_fee_rate<Ty0>(&Reservoir<Ty0>): u64
20StLoc[3](loc2: u64)
B3:
21MoveLoc[3](loc2: u64)
22Ret
}
 
public discharge_fee_rate_for_partner<Ty0, Ty1: drop>(Arg0: &Reservoir<Ty0>): u64 {
L1: loc0: TypeName
L2: loc1: &VecMap<TypeName, FeeConfig>
L3: loc2: u64
B0:
0CopyLoc[0](Arg0: &Reservoir<Ty0>)
1Call is_partner<Ty0, Ty1>(&Reservoir<Ty0>): bool
2BrFalse(18)
B1:
3MoveLoc[0](Arg0: &Reservoir<Ty0>)
4ImmBorrowFieldGeneric[5](Reservoir.id: UID)
5LdFalse
6Pack[1](FeeConfigKey)
7Call dynamic_field::borrow<FeeConfigKey, VecMap<TypeName, FeeConfig>>(&UID, FeeConfigKey): &VecMap<TypeName, FeeConfig>
8StLoc[2](loc1: &VecMap<TypeName, FeeConfig>)
9Call type_name::with_defining_ids<Ty1>(): TypeName
10StLoc[1](loc0: TypeName)
11MoveLoc[2](loc1: &VecMap<TypeName, FeeConfig>)
12ImmBorrowLoc[1](loc0: TypeName)
13Call vec_map::get<TypeName, FeeConfig>(&VecMap<TypeName, FeeConfig>, &TypeName): &FeeConfig
14ImmBorrowField[7](FeeConfig.discharge_fee_rate: u64)
15ReadRef
16StLoc[3](loc2: u64)
17Branch(21)
B2:
18MoveLoc[0](Arg0: &Reservoir<Ty0>)
19Call discharge_fee_rate<Ty0>(&Reservoir<Ty0>): u64
20StLoc[3](loc2: u64)
B3:
21MoveLoc[3](loc2: u64)
22Ret
}
 
Constants [
0 => u64: 1000000000
1 => u64: 0
]
}