flash_loan
Module0x7713…9f9d
- Move path
- 0xaec9…5faa::flash_loan
- Functions
- 53 public, 0 entry
- Structs
- 2
- Friend modules
- router
flash_loan
Bytecode344 lines
The on-chain disassembly. Offsets are bytecode positions within each function.
// Move bytecode v6
module aec914fe1ed3be0aa3fc3cc610cccba02ace491ab45589035f657e1097c75faa.flash_loan {
use aec914fe1ed3be0aa3fc3cc610cccba02ace491ab45589035f657e1097c75faa::admin;
use aec914fe1ed3be0aa3fc3cc610cccba02ace491ab45589035f657e1097c75faa::events;
use aec914fe1ed3be0aa3fc3cc610cccba02ace491ab45589035f657e1097c75faa::nft;
use aec914fe1ed3be0aa3fc3cc610cccba02ace491ab45589035f657e1097c75faa::protocol_fee;
use aec914fe1ed3be0aa3fc3cc610cccba02ace491ab45589035f657e1097c75faa::treasury;
use aec914fe1ed3be0aa3fc3cc610cccba02ace491ab45589035f657e1097c75faa::utils;
use aec914fe1ed3be0aa3fc3cc610cccba02ace491ab45589035f657e1097c75faa::version;
use 0000000000000000000000000000000000000000000000000000000000000001::option;
use 0000000000000000000000000000000000000000000000000000000000000002::balance;
use 0000000000000000000000000000000000000000000000000000000000000002::clock;
use 0000000000000000000000000000000000000000000000000000000000000002::coin;
use 0000000000000000000000000000000000000000000000000000000000000002::object;
use 0000000000000000000000000000000000000000000000000000000000000002::tx_context;
use 0000000000000000000000000000000000000000000000000000000000000002::types;
struct FlashLoanGlobalConfig has store, key {
id: UID,
version: u64,
protocol_fee_percent_base_18: u64,
staker_interest_percent_base_18: u64,
total_staked: u64
}
struct Receipt<phantom Ty0> {
user: address,
amount: u64,
typeName: vector<u8>,
protocol_fee_percent_base_18: u64,
staker_interest_percent_base_18: u64
}
public change_fee_percentages(Arg0: &AdminCap, Arg1: &mut FlashLoanGlobalConfig, Arg2: &mut Option<u64>, Arg3: &mut Option<u64>, Arg4: &mut Option<u64>) {
B0:
0CopyLoc[2](Arg2: &mut Option<u64>)
1FreezeRef
2Call option::is_some<u64>(&Option<u64>): bool
3BrFalse(10)
B1:
4MoveLoc[2](Arg2: &mut Option<u64>)
5Call option::extract<u64>(&mut Option<u64>): u64
6CopyLoc[1](Arg1: &mut FlashLoanGlobalConfig)
7MutBorrowField[0](FlashLoanGlobalConfig.version: u64)
8WriteRef
9Branch(12)
B2:
10MoveLoc[2](Arg2: &mut Option<u64>)
11Pop
B3:
12CopyLoc[3](Arg3: &mut Option<u64>)
13FreezeRef
14Call option::is_some<u64>(&Option<u64>): bool
15BrFalse(22)
B4:
16MoveLoc[3](Arg3: &mut Option<u64>)
17Call option::extract<u64>(&mut Option<u64>): u64
18CopyLoc[1](Arg1: &mut FlashLoanGlobalConfig)
19MutBorrowField[1](FlashLoanGlobalConfig.protocol_fee_percent_base_18: u64)
20WriteRef
21Branch(24)
B5:
22MoveLoc[3](Arg3: &mut Option<u64>)
23Pop
B6:
24CopyLoc[4](Arg4: &mut Option<u64>)
25FreezeRef
26Call option::is_some<u64>(&Option<u64>): bool
27BrFalse(34)
B7:
28MoveLoc[4](Arg4: &mut Option<u64>)
29Call option::extract<u64>(&mut Option<u64>): u64
30MoveLoc[1](Arg1: &mut FlashLoanGlobalConfig)
31MutBorrowField[2](FlashLoanGlobalConfig.staker_interest_percent_base_18: u64)
32WriteRef
33Branch(38)
B8:
34MoveLoc[4](Arg4: &mut Option<u64>)
35Pop
36MoveLoc[1](Arg1: &mut FlashLoanGlobalConfig)
37Pop
B9:
38Ret
}
public(friend) create_config<Ty0: drop>(Arg0: &Ty0, Arg1: &mut TxContext): FlashLoanGlobalConfig {
B0:
0MoveLoc[0](Arg0: &Ty0)
1Call types::is_one_time_witness<Ty0>(&Ty0): bool
2BrFalse(4)
B1:
3Branch(8)
B2:
4MoveLoc[1](Arg1: &mut TxContext)
5Pop
6LdU64(1)
7Abort
B3:
8MoveLoc[1](Arg1: &mut TxContext)
9Call object::new(&mut TxContext): UID
10Call version::current_version(): u64
11LdU64(0)
12LdU64(0)
13LdU64(0)
14Pack[0](FlashLoanGlobalConfig)
15Ret
}
public loan<Ty0>(Arg0: &FlashLoanGlobalConfig, Arg1: &NftConfig, Arg2: &mut Treasury, Arg3: u64, Arg4: &Clock, Arg5: &mut TxContext): Receipt<Ty0> * Coin<Ty0> {
L6: loc0: address
L7: loc1: vector<u8>
L8: loc2: u64
L9: loc3: u64
L10: loc4: u64
L11: loc5: bool
L12: loc6: bool
L13: loc7: Balance<Ty0>
L14: loc8: Receipt<Ty0>
L15: loc9: u64
L16: loc10: u64
B0:
0CopyLoc[0](Arg0: &FlashLoanGlobalConfig)
1Call check_version(&FlashLoanGlobalConfig)
2CopyLoc[5](Arg5: &mut TxContext)
3FreezeRef
4Call tx_context::sender(&TxContext): address
5StLoc[6](loc0: address)
6Call utils::type_to_bytes<Ty0>(): vector<u8>
7StLoc[7](loc1: vector<u8>)
8CopyLoc[3](Arg3: u64)
9StLoc[8](loc2: u64)
10CopyLoc[0](Arg0: &FlashLoanGlobalConfig)
11ImmBorrowField[1](FlashLoanGlobalConfig.protocol_fee_percent_base_18: u64)
12ReadRef
13StLoc[9](loc3: u64)
14MoveLoc[0](Arg0: &FlashLoanGlobalConfig)
15ImmBorrowField[2](FlashLoanGlobalConfig.staker_interest_percent_base_18: u64)
16ReadRef
17StLoc[10](loc4: u64)
18MoveLoc[6](loc0: address)
19MoveLoc[8](loc2: u64)
20MoveLoc[7](loc1: vector<u8>)
21MoveLoc[9](loc3: u64)
22MoveLoc[10](loc4: u64)
23PackGeneric[0](Receipt<Ty0>)
24StLoc[14](loc8: Receipt<Ty0>)
25CopyLoc[1](Arg1: &NftConfig)
26CopyLoc[4](Arg4: &Clock)
27Call nft::check_before_tge(&NftConfig, &Clock): bool
28BrFalse(80)
B1:
29CopyLoc[3](Arg3: u64)
30LdU64(25)
31Div
32LdU64(1000000000)
33Div
34StLoc[15](loc9: u64)
35CopyLoc[15](loc9: u64)
36LdU64(0)
37Eq
38BrFalse(45)
B2:
39CopyLoc[1](Arg1: &NftConfig)
40CopyLoc[2](Arg2: &mut Treasury)
41LdU64(10)
42CopyLoc[4](Arg4: &Clock)
43CopyLoc[5](Arg5: &mut TxContext)
44Call nft::zero_obj_mint_with_points(&NftConfig, &mut Treasury, u64, &Clock, &mut TxContext)
B3:
45CopyLoc[15](loc9: u64)
46LdU64(0)
47Gt
48BrFalse(54)
B4:
49CopyLoc[15](loc9: u64)
50LdU64(50)
51Le
52StLoc[11](loc5: bool)
53Branch(56)
B5:
54LdFalse
55StLoc[11](loc5: bool)
B6:
56MoveLoc[11](loc5: bool)
57BrFalse(64)
B7:
58CopyLoc[1](Arg1: &NftConfig)
59CopyLoc[2](Arg2: &mut Treasury)
60CopyLoc[15](loc9: u64)
61CopyLoc[4](Arg4: &Clock)
62CopyLoc[5](Arg5: &mut TxContext)
63Call nft::zero_obj_mint_with_points(&NftConfig, &mut Treasury, u64, &Clock, &mut TxContext)
B8:
64MoveLoc[15](loc9: u64)
65LdU64(50)
66Ge
67BrFalse(75)
B9:
68MoveLoc[1](Arg1: &NftConfig)
69CopyLoc[2](Arg2: &mut Treasury)
70LdU64(50)
71MoveLoc[4](Arg4: &Clock)
72CopyLoc[5](Arg5: &mut TxContext)
73Call nft::zero_obj_mint_with_points(&NftConfig, &mut Treasury, u64, &Clock, &mut TxContext)
74Branch(118)
B10:
75MoveLoc[1](Arg1: &NftConfig)
76Pop
77MoveLoc[4](Arg4: &Clock)
78Pop
79Branch(118)
B11:
80MoveLoc[1](Arg1: &NftConfig)
81Pop
82MoveLoc[4](Arg4: &Clock)
83Pop
84CopyLoc[3](Arg3: u64)
85LdU64(25)
86Div
87StLoc[16](loc10: u64)
88CopyLoc[16](loc10: u64)
89LdU64(0)
90Eq
91BrFalse(95)
B12:
92LdU64(10)
93CopyLoc[5](Arg5: &mut TxContext)
94Call nft::zero_obj_mint_with_no_points(u64, &mut TxContext)
B13:
95CopyLoc[16](loc10: u64)
96LdU64(0)
97Gt
98BrFalse(104)
B14:
99CopyLoc[16](loc10: u64)
100LdU64(50)
101Le
102StLoc[12](loc6: bool)
103Branch(106)
B15:
104LdFalse
105StLoc[12](loc6: bool)
B16:
106MoveLoc[12](loc6: bool)
107BrFalse(111)
B17:
108CopyLoc[16](loc10: u64)
109CopyLoc[5](Arg5: &mut TxContext)
110Call nft::zero_obj_mint_with_no_points(u64, &mut TxContext)
B18:
111MoveLoc[16](loc10: u64)
112LdU64(50)
113Ge
114BrFalse(118)
B19:
115LdU64(50)
116CopyLoc[5](Arg5: &mut TxContext)
117Call nft::zero_obj_mint_with_no_points(u64, &mut TxContext)
B20:
118MoveLoc[2](Arg2: &mut Treasury)
119Call treasury::borrow_from_treasury<Ty0>(&mut Treasury): &mut Balance<Ty0>
120MoveLoc[3](Arg3: u64)
121Call balance::split<Ty0>(&mut Balance<Ty0>, u64): Balance<Ty0>
122StLoc[13](loc7: Balance<Ty0>)
123MoveLoc[14](loc8: Receipt<Ty0>)
124MoveLoc[13](loc7: Balance<Ty0>)
125MoveLoc[5](Arg5: &mut TxContext)
126Call coin::from_balance<Ty0>(Balance<Ty0>, &mut TxContext): Coin<Ty0>
127Ret
}
public repay<Ty0>(Arg0: &mut Treasury, Arg1: Receipt<Ty0>, Arg2: Coin<Ty0>, Arg3: &mut TxContext): Coin<Ty0> {
L4: loc0: u64
L5: loc1: u64
L6: loc2: Coin<Ty0>
L7: loc3: Coin<Ty0>
L8: loc4: u64
B0:
0MoveLoc[2](Arg2: Coin<Ty0>)
1StLoc[6](loc2: Coin<Ty0>)
2ImmBorrowLoc[1](Arg1: Receipt<Ty0>)
3ImmBorrowFieldGeneric[0](Receipt.amount: u64)
4ReadRef
5ImmBorrowLoc[1](Arg1: Receipt<Ty0>)
6ImmBorrowFieldGeneric[1](Receipt.protocol_fee_percent_base_18: u64)
7ReadRef
8Call protocol_fee::take_percent_base_18(u64, u64): u64
9StLoc[8](loc4: u64)
10ImmBorrowLoc[1](Arg1: Receipt<Ty0>)
11ImmBorrowFieldGeneric[0](Receipt.amount: u64)
12ReadRef
13MoveLoc[8](loc4: u64)
14Add
15StLoc[5](loc1: u64)
16ImmBorrowLoc[6](loc2: Coin<Ty0>)
17Call coin::value<Ty0>(&Coin<Ty0>): u64
18CopyLoc[5](loc1: u64)
19Ge
20BrFalse(22)
B1:
21Branch(28)
B2:
22MoveLoc[0](Arg0: &mut Treasury)
23Pop
24MoveLoc[3](Arg3: &mut TxContext)
25Pop
26LdU64(0)
27Abort
B3:
28MutBorrowLoc[6](loc2: Coin<Ty0>)
29MoveLoc[5](loc1: u64)
30CopyLoc[3](Arg3: &mut TxContext)
31Call coin::split<Ty0>(&mut Coin<Ty0>, u64, &mut TxContext): Coin<Ty0>
32StLoc[7](loc3: Coin<Ty0>)
33MoveLoc[0](Arg0: &mut Treasury)
34MoveLoc[7](loc3: Coin<Ty0>)
35Call treasury::deposit<Ty0>(&mut Treasury, Coin<Ty0>)
36MoveLoc[1](Arg1: Receipt<Ty0>)
37UnpackGeneric[0](Receipt<Ty0>)
38Pop
39Pop
40Pop
41StLoc[4](loc0: u64)
42Pop
43Call utils::type_to_bytes<Ty0>(): vector<u8>
44MoveLoc[4](loc0: u64)
45MoveLoc[3](Arg3: &mut TxContext)
46FreezeRef
47Call events::emit_flashloan_event(vector<u8>, u64, &TxContext)
48MoveLoc[6](loc2: Coin<Ty0>)
49Ret
}
check_version(Arg0: &FlashLoanGlobalConfig) {
B0:
0MoveLoc[0](Arg0: &FlashLoanGlobalConfig)
1ImmBorrowField[0](FlashLoanGlobalConfig.version: u64)
2ReadRef
3Call version::check_version(u64)
4Ret
}
}