session
Module0x2b7f…2e29
- Move path
- 0x2b7f…2e29::session
- Functions
- 2115 public, 0 entry
- Structs
- 3
- Friend modules
- None
Bytecode1362 lines
The on-chain disassembly. Offsets are bytecode positions within each function.
// Move bytecode v7
module 2b7fcb0b9c562da0597fb65b3c137a9c076012faf245584812a63f9e9ddd2e29.session {
use 2b7fcb0b9c562da0597fb65b3c137a9c076012faf245584812a63f9e9ddd2e29::search;
use 0000000000000000000000000000000000000000000000000000000000000001::option;
use 0000000000000000000000000000000000000000000000000000000000000001::vector;
use 0000000000000000000000000000000000000000000000000000000000000002::balance;
use 0000000000000000000000000000000000000000000000000000000000000002::clock;
use 0000000000000000000000000000000000000000000000000000000000000002::coin;
use 0000000000000000000000000000000000000000000000000000000000000002::event;
use 0000000000000000000000000000000000000000000000000000000000000002::object;
use 0000000000000000000000000000000000000000000000000000000000000002::tx_context;
struct Leg has copy, drop, store {
pool: ID,
a2b: bool
}
struct Session<phantom Ty0> {
phase: u8,
fixed: bool,
legs: u64,
route: vector<Leg>,
search: Option<Search>,
inputs: vector<u64>,
amounts: vector<u64>,
costs: vector<u64>,
returned: vector<u64>,
quoted: u64,
evaluations: u64,
amount: u64,
quoted_output: u64,
minimums: vector<u64>,
executed: u64,
cost: u64,
carry: Balance<Ty0>,
min_surplus: u64,
deadline_ms: u64,
clock_ms: u64
}
struct Result<phantom Ty0> has copy, drop {
fixed: bool,
legs: u64,
evaluations: u64,
selected_input: u64,
quoted_output: u64,
surplus: u64,
min_surplus: u64,
cost: u64,
gas_price: u64,
epoch: u64,
deadline_ms: u64,
clock_ms: u64
}
check_context(Arg0: u64, Arg1: u64, Arg2: u64, Arg3: &Clock, Arg4: &TxContext): u64 {
L5: loc0: bool
L6: loc1: bool
L7: loc2: u64
B0:
0MoveLoc[1](Arg1: u64)
1CopyLoc[4](Arg4: &TxContext)
2Call tx_context::gas_price(&TxContext): u64
3Eq
4BrFalse(11)
B1:
5MoveLoc[2](Arg2: u64)
6MoveLoc[4](Arg4: &TxContext)
7Call tx_context::epoch(&TxContext): u64
8Eq
9StLoc[5](loc0: bool)
10Branch(15)
B2:
11MoveLoc[4](Arg4: &TxContext)
12Pop
13LdFalse
14StLoc[5](loc0: bool)
B3:
15MoveLoc[5](loc0: bool)
16BrFalse(18)
B4:
17Branch(22)
B5:
18MoveLoc[3](Arg3: &Clock)
19Pop
20LdConst[0](u64: 1)
21Abort
B6:
22MoveLoc[3](Arg3: &Clock)
23Call clock::timestamp_ms(&Clock): u64
24StLoc[7](loc2: u64)
25CopyLoc[7](loc2: u64)
26CopyLoc[0](Arg0: u64)
27Le
28BrFalse(36)
B7:
29MoveLoc[0](Arg0: u64)
30CopyLoc[7](loc2: u64)
31Sub
32LdConst[12](u64: 60000)
33Le
34StLoc[6](loc1: bool)
35Branch(38)
B8:
36LdFalse
37StLoc[6](loc1: bool)
B9:
38MoveLoc[6](loc1: bool)
39BrFalse(41)
B10:
40Branch(43)
B11:
41LdConst[1](u64: 2)
42Abort
B12:
43MoveLoc[7](loc2: u64)
44Ret
}
zeros(Arg0: u64): vector<u64> {
L1: loc0: u64
L2: loc1: u64
L3: loc2: u64
L4: loc3: vector<u64>
B0:
0LdConst[13](vector<u64>: 00)
1StLoc[4](loc3: vector<u64>)
2MoveLoc[0](Arg0: u64)
3StLoc[1](loc0: u64)
4LdU64(0)
5StLoc[2](loc1: u64)
6MoveLoc[1](loc0: u64)
7StLoc[3](loc2: u64)
B1:
8CopyLoc[2](loc1: u64)
9CopyLoc[3](loc2: u64)
10Lt
11BrFalse(22)
B2:
12CopyLoc[2](loc1: u64)
13Pop
14MutBorrowLoc[4](loc3: vector<u64>)
15LdU64(0)
16VecPushBack(1)
17MoveLoc[2](loc1: u64)
18LdU64(1)
19Add
20StLoc[2](loc1: u64)
21Branch(8)
B3:
22MoveLoc[4](loc3: vector<u64>)
23Ret
}
new_session<Ty0>(Arg0: bool, Arg1: u64, Arg2: u64, Arg3: u64, Arg4: u64): Session<Ty0> {
L5: loc0: bool
B0:
0CopyLoc[1](Arg1: u64)
1LdConst[1](u64: 2)
2Ge
3BrFalse(16)
B1:
4CopyLoc[1](Arg1: u64)
5LdConst[4](u64: 5)
6Le
7BrFalse(13)
B2:
8CopyLoc[2](Arg2: u64)
9LdU64(0)
10Gt
11StLoc[5](loc0: bool)
12Branch(18)
B3:
13LdFalse
14StLoc[5](loc0: bool)
15Branch(18)
B4:
16LdFalse
17StLoc[5](loc0: bool)
B5:
18MoveLoc[5](loc0: bool)
19BrFalse(21)
B6:
20Branch(23)
B7:
21LdConst[0](u64: 1)
22Abort
B8:
23LdConst[8](u8: 0)
24MoveLoc[0](Arg0: bool)
25MoveLoc[1](Arg1: u64)
26VecPack(27, 0)
27Call option::none<Search>(): Option<Search>
28LdConst[13](vector<u64>: 00)
29LdConst[13](vector<u64>: 00)
30LdConst[13](vector<u64>: 00)
31LdConst[13](vector<u64>: 00)
32LdU64(0)
33LdU64(0)
34LdU64(0)
35LdU64(0)
36LdConst[13](vector<u64>: 00)
37LdU64(0)
38LdU64(0)
39Call balance::zero<Ty0>(): Balance<Ty0>
40MoveLoc[2](Arg2: u64)
41MoveLoc[3](Arg3: u64)
42MoveLoc[4](Arg4: u64)
43PackGeneric[0](Session<Ty0>)
44Ret
}
public start_search<Ty0>(Arg0: vector<u64>, Arg1: &Clock, Arg2: &TxContext): Session<Ty0> {
L3: loc0: vector<u64>
L4: loc1: u64
L5: loc2: Session<Ty0>
L6: loc3: Search
B0:
0ImmBorrowLoc[0](Arg0: vector<u64>)
1VecLen(1)
2LdU64(9)
3Eq
4BrFalse(6)
B1:
5Branch(12)
B2:
6MoveLoc[2](Arg2: &TxContext)
7Pop
8MoveLoc[1](Arg1: &Clock)
9Pop
10LdConst[0](u64: 1)
11Abort
B3:
12ImmBorrowLoc[0](Arg0: vector<u64>)
13LdU64(5)
14VecImmBorrow(1)
15ReadRef
16ImmBorrowLoc[0](Arg0: vector<u64>)
17LdU64(6)
18VecImmBorrow(1)
19ReadRef
20ImmBorrowLoc[0](Arg0: vector<u64>)
21LdU64(7)
22VecImmBorrow(1)
23ReadRef
24MoveLoc[1](Arg1: &Clock)
25MoveLoc[2](Arg2: &TxContext)
26Call check_context(u64, u64, u64, &Clock, &TxContext): u64
27StLoc[4](loc1: u64)
28LdFalse
29ImmBorrowLoc[0](Arg0: vector<u64>)
30LdU64(8)
31VecImmBorrow(1)
32ReadRef
33ImmBorrowLoc[0](Arg0: vector<u64>)
34LdU64(4)
35VecImmBorrow(1)
36ReadRef
37ImmBorrowLoc[0](Arg0: vector<u64>)
38LdU64(5)
39VecImmBorrow(1)
40ReadRef
41MoveLoc[4](loc1: u64)
42Call new_session<Ty0>(bool, u64, u64, u64, u64): Session<Ty0>
43StLoc[5](loc2: Session<Ty0>)
44ImmBorrowLoc[0](Arg0: vector<u64>)
45LdU64(1)
46VecImmBorrow(1)
47ReadRef
48ImmBorrowLoc[0](Arg0: vector<u64>)
49LdU64(2)
50VecImmBorrow(1)
51ReadRef
52ImmBorrowLoc[0](Arg0: vector<u64>)
53LdU64(0)
54VecImmBorrow(1)
55ReadRef
56ImmBorrowLoc[0](Arg0: vector<u64>)
57LdU64(3)
58VecImmBorrow(1)
59ReadRef
60Call search::new(u64, u64, u64, u64): Search
61StLoc[6](loc3: Search)
62ImmBorrowLoc[6](loc3: Search)
63Call search::candidates(&Search): vector<u64>
64StLoc[3](loc0: vector<u64>)
65ImmBorrowLoc[3](loc0: vector<u64>)
66VecLen(1)
67Call zeros(u64): vector<u64>
68MutBorrowLoc[5](loc2: Session<Ty0>)
69MutBorrowFieldGeneric[0](Session.costs: vector<u64>)
70WriteRef
71ImmBorrowLoc[3](loc0: vector<u64>)
72VecLen(1)
73Call zeros(u64): vector<u64>
74MutBorrowLoc[5](loc2: Session<Ty0>)
75MutBorrowFieldGeneric[1](Session.returned: vector<u64>)
76WriteRef
77CopyLoc[3](loc0: vector<u64>)
78MutBorrowLoc[5](loc2: Session<Ty0>)
79MutBorrowFieldGeneric[2](Session.amounts: vector<u64>)
80WriteRef
81MoveLoc[3](loc0: vector<u64>)
82MutBorrowLoc[5](loc2: Session<Ty0>)
83MutBorrowFieldGeneric[3](Session.inputs: vector<u64>)
84WriteRef
85MutBorrowLoc[5](loc2: Session<Ty0>)
86MutBorrowFieldGeneric[4](Session.search: Option<Search>)
87MoveLoc[6](loc3: Search)
88Call option::fill<Search>(&mut Option<Search>, Search)
89MoveLoc[5](loc2: Session<Ty0>)
90Ret
}
public start_fixed<Ty0>(Arg0: vector<u64>, Arg1: vector<ID>, Arg2: vector<bool>, Arg3: vector<u64>, Arg4: &Clock, Arg5: &TxContext): Session<Ty0> {
L6: loc0: bool
L7: loc1: bool
L8: loc2: u64
L9: loc3: u64
L10: loc4: u64
L11: loc5: Session<Ty0>
B0:
0ImmBorrowLoc[0](Arg0: vector<u64>)
1VecLen(1)
2LdU64(5)
3Eq
4BrFalse(6)
B1:
5Branch(12)
B2:
6MoveLoc[5](Arg5: &TxContext)
7Pop
8MoveLoc[4](Arg4: &Clock)
9Pop
10LdConst[0](u64: 1)
11Abort
B3:
12ImmBorrowLoc[0](Arg0: vector<u64>)
13LdU64(2)
14VecImmBorrow(1)
15ReadRef
16ImmBorrowLoc[0](Arg0: vector<u64>)
17LdU64(3)
18VecImmBorrow(1)
19ReadRef
20ImmBorrowLoc[0](Arg0: vector<u64>)
21LdU64(4)
22VecImmBorrow(1)
23ReadRef
24MoveLoc[4](Arg4: &Clock)
25MoveLoc[5](Arg5: &TxContext)
26Call check_context(u64, u64, u64, &Clock, &TxContext): u64
27StLoc[10](loc4: u64)
28ImmBorrowLoc[1](Arg1: vector<ID>)
29VecLen(37)
30StLoc[9](loc3: u64)
31LdTrue
32CopyLoc[9](loc3: u64)
33ImmBorrowLoc[0](Arg0: vector<u64>)
34LdU64(1)
35VecImmBorrow(1)
36ReadRef
37ImmBorrowLoc[0](Arg0: vector<u64>)
38LdU64(2)
39VecImmBorrow(1)
40ReadRef
41MoveLoc[10](loc4: u64)
42Call new_session<Ty0>(bool, u64, u64, u64, u64): Session<Ty0>
43StLoc[11](loc5: Session<Ty0>)
44ImmBorrowLoc[2](Arg2: vector<bool>)
45VecLen(26)
46CopyLoc[9](loc3: u64)
47Eq
48BrFalse(63)
B4:
49ImmBorrowLoc[3](Arg3: vector<u64>)
50Call vector::is_empty<u64>(&vector<u64>): bool
51BrFalse(55)
B5:
52LdTrue
53StLoc[7](loc1: bool)
54Branch(60)
B6:
55ImmBorrowLoc[3](Arg3: vector<u64>)
56VecLen(1)
57CopyLoc[9](loc3: u64)
58Eq
59StLoc[7](loc1: bool)
B7:
60MoveLoc[7](loc1: bool)
61StLoc[6](loc0: bool)
62Branch(65)
B8:
63LdFalse
64StLoc[6](loc0: bool)
B9:
65MoveLoc[6](loc0: bool)
66BrFalse(68)
B10:
67Branch(70)
B11:
68LdConst[0](u64: 1)
69Abort
B12:
70ImmBorrowLoc[0](Arg0: vector<u64>)
71LdU64(0)
72VecImmBorrow(1)
73ReadRef
74ImmBorrowLoc[0](Arg0: vector<u64>)
75LdU64(0)
76VecImmBorrow(1)
77ReadRef
78ImmBorrowLoc[0](Arg0: vector<u64>)
79LdU64(0)
80VecImmBorrow(1)
81ReadRef
82LdU64(1)
83Call search::new(u64, u64, u64, u64): Search
84Pop
85LdU64(0)
86StLoc[8](loc2: u64)
B13:
87CopyLoc[8](loc2: u64)
88CopyLoc[9](loc3: u64)
89Lt
90BrFalse(108)
B14:
91MutBorrowLoc[11](loc5: Session<Ty0>)
92MutBorrowFieldGeneric[5](Session.route: vector<Leg>)
93ImmBorrowLoc[1](Arg1: vector<ID>)
94CopyLoc[8](loc2: u64)
95VecImmBorrow(37)
96ReadRef
97ImmBorrowLoc[2](Arg2: vector<bool>)
98CopyLoc[8](loc2: u64)
99VecImmBorrow(26)
100ReadRef
101Pack[0](Leg)
102VecPushBack(27)
103MoveLoc[8](loc2: u64)
104LdU64(1)
105Add
106StLoc[8](loc2: u64)
107Branch(87)
B15:
108MoveLoc[3](Arg3: vector<u64>)
109MutBorrowLoc[11](loc5: Session<Ty0>)
110MutBorrowFieldGeneric[6](Session.minimums: vector<u64>)
111WriteRef
112ImmBorrowLoc[0](Arg0: vector<u64>)
113LdU64(0)
114VecImmBorrow(1)
115ReadRef
116MutBorrowLoc[11](loc5: Session<Ty0>)
117MutBorrowFieldGeneric[7](Session.amount: u64)
118WriteRef
119LdConst[9](u8: 1)
120MutBorrowLoc[11](loc5: Session<Ty0>)
121MutBorrowFieldGeneric[8](Session.phase: u8)
122WriteRef
123MoveLoc[11](loc5: Session<Ty0>)
124Ret
}
public quote_inputs<Ty0>(Arg0: &Session<Ty0>): vector<u64> {
B0:
0CopyLoc[0](Arg0: &Session<Ty0>)
1ImmBorrowFieldGeneric[8](Session.phase: u8)
2ReadRef
3LdConst[8](u8: 0)
4Eq
5BrFalse(7)
B1:
6Branch(11)
B2:
7MoveLoc[0](Arg0: &Session<Ty0>)
8Pop
9LdConst[2](u64: 3)
10Abort
B3:
11MoveLoc[0](Arg0: &Session<Ty0>)
12ImmBorrowFieldGeneric[2](Session.amounts: vector<u64>)
13ReadRef
14Ret
}
public candidate_inputs<Ty0>(Arg0: &Session<Ty0>): vector<u64> {
B0:
0CopyLoc[0](Arg0: &Session<Ty0>)
1ImmBorrowFieldGeneric[8](Session.phase: u8)
2ReadRef
3LdConst[8](u8: 0)
4Eq
5BrFalse(7)
B1:
6Branch(11)
B2:
7MoveLoc[0](Arg0: &Session<Ty0>)
8Pop
9LdConst[2](u64: 3)
10Abort
B3:
11MoveLoc[0](Arg0: &Session<Ty0>)
12ImmBorrowFieldGeneric[3](Session.inputs: vector<u64>)
13ReadRef
14Ret
}
add_costs<Ty0>(Arg0: &mut Session<Ty0>, Arg1: &vector<u64>) {
L2: loc0: u64
L3: loc1: u64
B0:
0CopyLoc[0](Arg0: &mut Session<Ty0>)
1ImmBorrowFieldGeneric[3](Session.inputs: vector<u64>)
2VecLen(1)
3StLoc[3](loc1: u64)
4CopyLoc[1](Arg1: &vector<u64>)
5VecLen(1)
6CopyLoc[3](loc1: u64)
7Eq
8BrFalse(10)
B1:
9Branch(16)
B2:
10MoveLoc[0](Arg0: &mut Session<Ty0>)
11Pop
12MoveLoc[1](Arg1: &vector<u64>)
13Pop
14LdConst[0](u64: 1)
15Abort
B3:
16LdU64(0)
17StLoc[2](loc0: u64)
B4:
18CopyLoc[2](loc0: u64)
19CopyLoc[3](loc1: u64)
20Lt
21BrFalse(42)
B5:
22CopyLoc[0](Arg0: &mut Session<Ty0>)
23ImmBorrowFieldGeneric[0](Session.costs: vector<u64>)
24CopyLoc[2](loc0: u64)
25VecImmBorrow(1)
26ReadRef
27CopyLoc[1](Arg1: &vector<u64>)
28CopyLoc[2](loc0: u64)
29VecImmBorrow(1)
30ReadRef
31Call search::checked_sum(u64, u64): u64
32CopyLoc[0](Arg0: &mut Session<Ty0>)
33MutBorrowFieldGeneric[0](Session.costs: vector<u64>)
34CopyLoc[2](loc0: u64)
35VecMutBorrow(1)
36WriteRef
37MoveLoc[2](loc0: u64)
38LdU64(1)
39Add
40StLoc[2](loc0: u64)
41Branch(18)
B6:
42MoveLoc[0](Arg0: &mut Session<Ty0>)
43Pop
44MoveLoc[1](Arg1: &vector<u64>)
45Pop
46Ret
}
public charge_quote<Ty0>(Arg0: &mut Session<Ty0>, Arg1: vector<u64>) {
B0:
0CopyLoc[0](Arg0: &mut Session<Ty0>)
1ImmBorrowFieldGeneric[8](Session.phase: u8)
2ReadRef
3LdConst[8](u8: 0)
4Eq
5BrFalse(7)
B1:
6Branch(11)
B2:
7MoveLoc[0](Arg0: &mut Session<Ty0>)
8Pop
9LdConst[2](u64: 3)
10Abort
B3:
11MoveLoc[0](Arg0: &mut Session<Ty0>)
12ImmBorrowLoc[1](Arg1: vector<u64>)
13Call add_costs<Ty0>(&mut Session<Ty0>, &vector<u64>)
14Ret
}
public record_quote<Ty0>(Arg0: &mut Session<Ty0>, Arg1: ID, Arg2: bool, Arg3: vector<u64>, Arg4: vector<u64>, Arg5: vector<u64>) {
L6: loc0: bool
L7: loc1: bool
L8: loc2: bool
L9: loc3: u64
L10: loc4: Leg
L11: loc5: u64
B0:
0CopyLoc[0](Arg0: &mut Session<Ty0>)
1ImmBorrowFieldGeneric[8](Session.phase: u8)
2ReadRef
3LdConst[8](u8: 0)
4Eq
5BrFalse(7)
B1:
6Branch(11)
B2:
7MoveLoc[0](Arg0: &mut Session<Ty0>)
8Pop
9LdConst[2](u64: 3)
10Abort
B3:
11CopyLoc[0](Arg0: &mut Session<Ty0>)
12ImmBorrowFieldGeneric[2](Session.amounts: vector<u64>)
13VecLen(1)
14StLoc[11](loc5: u64)
15ImmBorrowLoc[3](Arg3: vector<u64>)
16VecLen(1)
17CopyLoc[11](loc5: u64)
18Eq
19BrFalse(50)
B4:
20ImmBorrowLoc[4](Arg4: vector<u64>)
21Call vector::is_empty<u64>(&vector<u64>): bool
22BrFalse(26)
B5:
23LdTrue
24StLoc[8](loc2: bool)
25Branch(31)
B6:
26ImmBorrowLoc[4](Arg4: vector<u64>)
27VecLen(1)
28CopyLoc[11](loc5: u64)
29Eq
30StLoc[8](loc2: bool)
B7:
31MoveLoc[8](loc2: bool)
32BrFalse(47)
B8:
33ImmBorrowLoc[5](Arg5: vector<u64>)
34Call vector::is_empty<u64>(&vector<u64>): bool
35BrFalse(39)
B9:
36LdTrue
37StLoc[7](loc1: bool)
38Branch(44)
B10:
39ImmBorrowLoc[5](Arg5: vector<u64>)
40VecLen(1)
41CopyLoc[11](loc5: u64)
42Eq
43StLoc[7](loc1: bool)
B11:
44MoveLoc[7](loc1: bool)
45StLoc[6](loc0: bool)
46Branch(52)
B12:
47LdFalse
48StLoc[6](loc0: bool)
49Branch(52)
B13:
50LdFalse
51StLoc[6](loc0: bool)
B14:
52MoveLoc[6](loc0: bool)
53BrFalse(55)
B15:
54Branch(59)
B16:
55MoveLoc[0](Arg0: &mut Session<Ty0>)
56Pop
57LdConst[0](u64: 1)
58Abort
B17:
59MoveLoc[1](Arg1: ID)
60MoveLoc[2](Arg2: bool)
61Pack[0](Leg)
62StLoc[10](loc4: Leg)
63CopyLoc[0](Arg0: &mut Session<Ty0>)
64ImmBorrowFieldGeneric[5](Session.route: vector<Leg>)
65VecLen(27)
66CopyLoc[0](Arg0: &mut Session<Ty0>)
67ImmBorrowFieldGeneric[9](Session.legs: u64)
68ReadRef
69Lt
70BrFalse(89)
B18:
71CopyLoc[0](Arg0: &mut Session<Ty0>)
72ImmBorrowFieldGeneric[5](Session.route: vector<Leg>)
73VecLen(27)
74CopyLoc[0](Arg0: &mut Session<Ty0>)
75ImmBorrowFieldGeneric[10](Session.quoted: u64)
76ReadRef
77Eq
78BrFalse(80)
B19:
79Branch(84)
B20:
80MoveLoc[0](Arg0: &mut Session<Ty0>)
81Pop
82LdConst[3](u64: 4)
83Abort
B21:
84CopyLoc[0](Arg0: &mut Session<Ty0>)
85MutBorrowFieldGeneric[5](Session.route: vector<Leg>)
86MoveLoc[10](loc4: Leg)
87VecPushBack(27)
88Branch(104)
B22:
89CopyLoc[0](Arg0: &mut Session<Ty0>)
90ImmBorrowFieldGeneric[5](Session.route: vector<Leg>)
91CopyLoc[0](Arg0: &mut Session<Ty0>)
92ImmBorrowFieldGeneric[10](Session.quoted: u64)
93ReadRef
94VecImmBorrow(27)
95ReadRef
96MoveLoc[10](loc4: Leg)
97Eq
98BrFalse(100)
B23:
99Branch(104)
B24:
100MoveLoc[0](Arg0: &mut Session<Ty0>)
101Pop
102LdConst[3](u64: 4)
103Abort
B25:
104ImmBorrowLoc[4](Arg4: vector<u64>)
105Call vector::is_empty<u64>(&vector<u64>): bool
106Not
107BrFalse(111)
B26:
108CopyLoc[0](Arg0: &mut Session<Ty0>)
109ImmBorrowLoc[4](Arg4: vector<u64>)
110Call add_costs<Ty0>(&mut Session<Ty0>, &vector<u64>)
B27:
111ImmBorrowLoc[5](Arg5: vector<u64>)
112Call vector::is_empty<u64>(&vector<u64>): bool
113Not
114BrFalse(141)
B28:
115LdU64(0)
116StLoc[9](loc3: u64)
B29:
117CopyLoc[9](loc3: u64)
118CopyLoc[11](loc5: u64)
119Lt
120BrFalse(141)
B30:
121CopyLoc[0](Arg0: &mut Session<Ty0>)
122ImmBorrowFieldGeneric[1](Session.returned: vector<u64>)
123CopyLoc[9](loc3: u64)
124VecImmBorrow(1)
125ReadRef
126ImmBorrowLoc[5](Arg5: vector<u64>)
127CopyLoc[9](loc3: u64)
128VecImmBorrow(1)
129ReadRef
130Call search::checked_sum(u64, u64): u64
131CopyLoc[0](Arg0: &mut Session<Ty0>)
132MutBorrowFieldGeneric[1](Session.returned: vector<u64>)
133CopyLoc[9](loc3: u64)
134VecMutBorrow(1)
135WriteRef
136MoveLoc[9](loc3: u64)
137LdU64(1)
138Add
139StLoc[9](loc3: u64)
140Branch(117)
B31:
141MoveLoc[3](Arg3: vector<u64>)
142CopyLoc[0](Arg0: &mut Session<Ty0>)
143MutBorrowFieldGeneric[2](Session.amounts: vector<u64>)
144WriteRef
145CopyLoc[0](Arg0: &mut Session<Ty0>)
146ImmBorrowFieldGeneric[10](Session.quoted: u64)
147ReadRef
148LdU64(1)
149Add
150CopyLoc[0](Arg0: &mut Session<Ty0>)
151MutBorrowFieldGeneric[10](Session.quoted: u64)
152WriteRef
153CopyLoc[0](Arg0: &mut Session<Ty0>)
154ImmBorrowFieldGeneric[10](Session.quoted: u64)
155ReadRef
156CopyLoc[0](Arg0: &mut Session<Ty0>)
157ImmBorrowFieldGeneric[9](Session.legs: u64)
158ReadRef
159Eq
160BrFalse(164)
B32:
161MoveLoc[0](Arg0: &mut Session<Ty0>)
162Call close_round<Ty0>(&mut Session<Ty0>)
163Branch(166)
B33:
164MoveLoc[0](Arg0: &mut Session<Ty0>)
165Pop
B34:
166Ret
}
close_round<Ty0>(Arg0: &mut Session<Ty0>) {
L1: loc0: bool
L2: loc1: u64
L3: loc2: u64
L4: loc3: vector<u64>
L5: loc4: u64
L6: loc5: vector<u64>
L7: loc6: u64
L8: loc7: vector<u64>
L9: loc8: u64
L10: loc9: u64
L11: loc10: vector<u64>
L12: loc11: vector<u64>
L13: loc12: &mut Search
B0:
0CopyLoc[0](Arg0: &mut Session<Ty0>)
1ImmBorrowFieldGeneric[3](Session.inputs: vector<u64>)
2ReadRef
3StLoc[6](loc5: vector<u64>)
4CopyLoc[0](Arg0: &mut Session<Ty0>)
5ImmBorrowFieldGeneric[2](Session.amounts: vector<u64>)
6ReadRef
7StLoc[11](loc10: vector<u64>)
8CopyLoc[0](Arg0: &mut Session<Ty0>)
9ImmBorrowFieldGeneric[0](Session.costs: vector<u64>)
10ReadRef
11StLoc[4](loc3: vector<u64>)
12CopyLoc[0](Arg0: &mut Session<Ty0>)
13ImmBorrowFieldGeneric[1](Session.returned: vector<u64>)
14ReadRef
15StLoc[12](loc11: vector<u64>)
16CopyLoc[0](Arg0: &mut Session<Ty0>)
17MutBorrowFieldGeneric[4](Session.search: Option<Search>)
18Call option::borrow_mut<Search>(&mut Option<Search>): &mut Search
19StLoc[13](loc12: &mut Search)
20ImmBorrowLoc[6](loc5: vector<u64>)
21VecLen(1)
22StLoc[7](loc6: u64)
23LdU64(0)
24StLoc[5](loc4: u64)
B1:
25CopyLoc[5](loc4: u64)
26CopyLoc[7](loc6: u64)
27Lt
28BrFalse(62)
B2:
29Branch(30)
B3:
30ImmBorrowLoc[11](loc10: vector<u64>)
31CopyLoc[5](loc4: u64)
32VecImmBorrow(1)
33ReadRef
34ImmBorrowLoc[12](loc11: vector<u64>)
35CopyLoc[5](loc4: u64)
36VecImmBorrow(1)
37ReadRef
38Call search::checked_sum(u64, u64): u64
39StLoc[9](loc8: u64)
40CopyLoc[13](loc12: &mut Search)
41ImmBorrowLoc[6](loc5: vector<u64>)
42CopyLoc[5](loc4: u64)
43VecImmBorrow(1)
44ReadRef
45MoveLoc[9](loc8: u64)
46ImmBorrowLoc[4](loc3: vector<u64>)
47CopyLoc[5](loc4: u64)
48VecImmBorrow(1)
49ReadRef
50ImmBorrowLoc[11](loc10: vector<u64>)
51CopyLoc[5](loc4: u64)
52VecImmBorrow(1)
53ReadRef
54LdU64(0)
55Gt
56Call search::record(&mut Search, u64, u64, u64, bool)
57MoveLoc[5](loc4: u64)
58LdU64(1)
59Add
60StLoc[5](loc4: u64)
61Branch(25)
B4:
62CopyLoc[13](loc12: &mut Search)
63Call search::advance(&mut Search)
64CopyLoc[0](Arg0: &mut Session<Ty0>)
65ImmBorrowFieldGeneric[11](Session.evaluations: u64)
66ReadRef
67MoveLoc[7](loc6: u64)
68Add
69CopyLoc[0](Arg0: &mut Session<Ty0>)
70MutBorrowFieldGeneric[11](Session.evaluations: u64)
71WriteRef
72CopyLoc[13](loc12: &mut Search)
73FreezeRef
74Call search::finished(&Search): bool
75BrFalse(118)
B5:
76MoveLoc[13](loc12: &mut Search)
77FreezeRef
78Call search::result(&Search): u64 * u64 * u64 * u64
79Pop
80StLoc[3](loc2: u64)
81StLoc[10](loc9: u64)
82StLoc[2](loc1: u64)
83CopyLoc[2](loc1: u64)
84LdU64(0)
85Gt
86BrFalse(96)
B6:
87CopyLoc[2](loc1: u64)
88CopyLoc[10](loc9: u64)
89MoveLoc[3](loc2: u64)
90CopyLoc[0](Arg0: &mut Session<Ty0>)
91ImmBorrowFieldGeneric[12](Session.min_surplus: u64)
92ReadRef
93Call search::qualifies(u64, u64, u64, u64): bool
94StLoc[1](loc0: bool)
95Branch(98)
B7:
96LdFalse
97StLoc[1](loc0: bool)
B8:
98MoveLoc[1](loc0: bool)
99BrFalse(101)
B9:
100Branch(105)
B10:
101MoveLoc[0](Arg0: &mut Session<Ty0>)
102Pop
103LdConst[7](u64: 8)
104Abort
B11:
105MoveLoc[2](loc1: u64)
106CopyLoc[0](Arg0: &mut Session<Ty0>)
107MutBorrowFieldGeneric[7](Session.amount: u64)
108WriteRef
109MoveLoc[10](loc9: u64)
110CopyLoc[0](Arg0: &mut Session<Ty0>)
111MutBorrowFieldGeneric[13](Session.quoted_output: u64)
112WriteRef
113LdConst[9](u8: 1)
114MoveLoc[0](Arg0: &mut Session<Ty0>)
115MutBorrowFieldGeneric[8](Session.phase: u8)
116WriteRef
117Branch(146)
B12:
118MoveLoc[13](loc12: &mut Search)
119FreezeRef
120Call search::candidates(&Search): vector<u64>
121StLoc[8](loc7: vector<u64>)
122ImmBorrowLoc[8](loc7: vector<u64>)
123VecLen(1)
124Call zeros(u64): vector<u64>
125CopyLoc[0](Arg0: &mut Session<Ty0>)
126MutBorrowFieldGeneric[0](Session.costs: vector<u64>)
127WriteRef
128ImmBorrowLoc[8](loc7: vector<u64>)
129VecLen(1)
130Call zeros(u64): vector<u64>
131CopyLoc[0](Arg0: &mut Session<Ty0>)
132MutBorrowFieldGeneric[1](Session.returned: vector<u64>)
133WriteRef
134CopyLoc[8](loc7: vector<u64>)
135CopyLoc[0](Arg0: &mut Session<Ty0>)
136MutBorrowFieldGeneric[2](Session.amounts: vector<u64>)
137WriteRef
138MoveLoc[8](loc7: vector<u64>)
139CopyLoc[0](Arg0: &mut Session<Ty0>)
140MutBorrowFieldGeneric[3](Session.inputs: vector<u64>)
141WriteRef
142LdU64(0)
143MoveLoc[0](Arg0: &mut Session<Ty0>)
144MutBorrowFieldGeneric[10](Session.quoted: u64)
145WriteRef
B13:
146Ret
}
public open_loan<Ty0>(Arg0: &mut Session<Ty0>): u64 {
B0:
0CopyLoc[0](Arg0: &mut Session<Ty0>)
1ImmBorrowFieldGeneric[8](Session.phase: u8)
2ReadRef
3LdConst[9](u8: 1)
4Eq
5BrFalse(7)
B1:
6Branch(11)
B2:
7MoveLoc[0](Arg0: &mut Session<Ty0>)
8Pop
9LdConst[2](u64: 3)
10Abort
B3:
11LdConst[10](u8: 2)
12CopyLoc[0](Arg0: &mut Session<Ty0>)
13MutBorrowFieldGeneric[8](Session.phase: u8)
14WriteRef
15MoveLoc[0](Arg0: &mut Session<Ty0>)
16ImmBorrowFieldGeneric[7](Session.amount: u64)
17ReadRef
18Ret
}
public record_leg<Ty0>(Arg0: &mut Session<Ty0>, Arg1: ID, Arg2: bool, Arg3: u64) {
L4: loc0: bool
L5: loc1: u64
B0:
0CopyLoc[0](Arg0: &mut Session<Ty0>)
1ImmBorrowFieldGeneric[8](Session.phase: u8)
2ReadRef
3LdConst[10](u8: 2)
4Eq
5BrFalse(7)
B1:
6Branch(11)
B2:
7MoveLoc[0](Arg0: &mut Session<Ty0>)
8Pop
9LdConst[2](u64: 3)
10Abort
B3:
11CopyLoc[0](Arg0: &mut Session<Ty0>)
12ImmBorrowFieldGeneric[14](Session.executed: u64)
13ReadRef
14StLoc[5](loc1: u64)
15CopyLoc[5](loc1: u64)
16CopyLoc[0](Arg0: &mut Session<Ty0>)
17ImmBorrowFieldGeneric[9](Session.legs: u64)
18ReadRef
19Lt
20BrFalse(32)
B4:
21CopyLoc[0](Arg0: &mut Session<Ty0>)
22ImmBorrowFieldGeneric[5](Session.route: vector<Leg>)
23CopyLoc[5](loc1: u64)
24VecImmBorrow(27)
25ReadRef
26MoveLoc[1](Arg1: ID)
27MoveLoc[2](Arg2: bool)
28Pack[0](Leg)
29Eq
30StLoc[4](loc0: bool)
31Branch(34)
B5:
32LdFalse
33StLoc[4](loc0: bool)
B6:
34MoveLoc[4](loc0: bool)
35BrFalse(37)
B7:
36Branch(41)
B8:
37MoveLoc[0](Arg0: &mut Session<Ty0>)
38Pop
39LdConst[3](u64: 4)
40Abort
B9:
41CopyLoc[0](Arg0: &mut Session<Ty0>)
42ImmBorrowFieldGeneric[6](Session.minimums: vector<u64>)
43Call vector::is_empty<u64>(&vector<u64>): bool
44Not
45BrFalse(59)
B10:
46MoveLoc[3](Arg3: u64)
47CopyLoc[0](Arg0: &mut Session<Ty0>)
48ImmBorrowFieldGeneric[6](Session.minimums: vector<u64>)
49CopyLoc[5](loc1: u64)
50VecImmBorrow(1)
51ReadRef
52Ge
53BrFalse(55)
B11:
54Branch(59)
B12:
55MoveLoc[0](Arg0: &mut Session<Ty0>)
56Pop
57LdConst[4](u64: 5)
58Abort
B13:
59MoveLoc[5](loc1: u64)
60LdU64(1)
61Add
62MoveLoc[0](Arg0: &mut Session<Ty0>)
63MutBorrowFieldGeneric[14](Session.executed: u64)
64WriteRef
65Ret
}
public keep<Ty0>(Arg0: &mut Session<Ty0>, Arg1: Balance<Ty0>) {
B0:
0CopyLoc[0](Arg0: &mut Session<Ty0>)
1ImmBorrowFieldGeneric[8](Session.phase: u8)
2ReadRef
3LdConst[10](u8: 2)
4Eq
5BrFalse(7)
B1:
6Branch(11)
B2:
7MoveLoc[0](Arg0: &mut Session<Ty0>)
8Pop
9LdConst[2](u64: 3)
10Abort
B3:
11MoveLoc[0](Arg0: &mut Session<Ty0>)
12MutBorrowFieldGeneric[15](Session.carry: Balance<Ty0>)
13MoveLoc[1](Arg1: Balance<Ty0>)
14Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
15Pop
16Ret
}
public add_cost<Ty0>(Arg0: &mut Session<Ty0>, Arg1: u64) {
B0:
0CopyLoc[0](Arg0: &mut Session<Ty0>)
1ImmBorrowFieldGeneric[8](Session.phase: u8)
2ReadRef
3LdConst[10](u8: 2)
4Eq
5BrFalse(7)
B1:
6Branch(11)
B2:
7MoveLoc[0](Arg0: &mut Session<Ty0>)
8Pop
9LdConst[2](u64: 3)
10Abort
B3:
11CopyLoc[0](Arg0: &mut Session<Ty0>)
12ImmBorrowFieldGeneric[16](Session.cost: u64)
13ReadRef
14MoveLoc[1](Arg1: u64)
15Call search::checked_sum(u64, u64): u64
16MoveLoc[0](Arg0: &mut Session<Ty0>)
17MutBorrowFieldGeneric[16](Session.cost: u64)
18WriteRef
19Ret
}
public close_loan<Ty0>(Arg0: &mut Session<Ty0>, Arg1: &mut Balance<Ty0>): u64 {
L2: loc0: bool
B0:
0CopyLoc[0](Arg0: &mut Session<Ty0>)
1ImmBorrowFieldGeneric[8](Session.phase: u8)
2ReadRef
3LdConst[10](u8: 2)
4Eq
5BrFalse(15)
B1:
6CopyLoc[0](Arg0: &mut Session<Ty0>)
7ImmBorrowFieldGeneric[14](Session.executed: u64)
8ReadRef
9CopyLoc[0](Arg0: &mut Session<Ty0>)
10ImmBorrowFieldGeneric[9](Session.legs: u64)
11ReadRef
12Eq
13StLoc[2](loc0: bool)
14Branch(17)
B2:
15LdFalse
16StLoc[2](loc0: bool)
B3:
17MoveLoc[2](loc0: bool)
18BrFalse(20)
B4:
19Branch(26)
B5:
20MoveLoc[0](Arg0: &mut Session<Ty0>)
21Pop
22MoveLoc[1](Arg1: &mut Balance<Ty0>)
23Pop
24LdConst[2](u64: 3)
25Abort
B6:
26CopyLoc[1](Arg1: &mut Balance<Ty0>)
27CopyLoc[0](Arg0: &mut Session<Ty0>)
28MutBorrowFieldGeneric[15](Session.carry: Balance<Ty0>)
29Call balance::withdraw_all<Ty0>(&mut Balance<Ty0>): Balance<Ty0>
30Call balance::join<Ty0>(&mut Balance<Ty0>, Balance<Ty0>): u64
31Pop
32MoveLoc[1](Arg1: &mut Balance<Ty0>)
33FreezeRef
34Call balance::value<Ty0>(&Balance<Ty0>): u64
35CopyLoc[0](Arg0: &mut Session<Ty0>)
36ImmBorrowFieldGeneric[7](Session.amount: u64)
37ReadRef
38Ge
39BrFalse(41)
B7:
40Branch(45)
B8:
41MoveLoc[0](Arg0: &mut Session<Ty0>)
42Pop
43LdConst[5](u64: 6)
44Abort
B9:
45LdConst[11](u8: 3)
46CopyLoc[0](Arg0: &mut Session<Ty0>)
47MutBorrowFieldGeneric[8](Session.phase: u8)
48WriteRef
49MoveLoc[0](Arg0: &mut Session<Ty0>)
50ImmBorrowFieldGeneric[7](Session.amount: u64)
51ReadRef
52Ret
}
settle<Ty0>(Arg0: Session<Ty0>, Arg1: u64, Arg2: &TxContext) {
L3: loc0: u64
L4: loc1: Balance<Ty0>
L5: loc2: u64
L6: loc3: u64
L7: loc4: u64
L8: loc5: u64
L9: loc6: bool
L10: loc7: u64
L11: loc8: u64
L12: loc9: u64
B0:
0MoveLoc[0](Arg0: Session<Ty0>)
1UnpackGeneric[0](Session<Ty0>)
2StLoc[5](loc2: u64)
3StLoc[7](loc4: u64)
4StLoc[11](loc8: u64)
5StLoc[4](loc1: Balance<Ty0>)
6StLoc[6](loc3: u64)
7Pop
8Pop
9StLoc[12](loc9: u64)
10StLoc[3](loc0: u64)
11StLoc[8](loc5: u64)
12Pop
13Pop
14Pop
15Pop
16Pop
17Pop
18Pop
19StLoc[10](loc7: u64)
20StLoc[9](loc6: bool)
21LdConst[11](u8: 3)
22Eq
23BrFalse(25)
B1:
24Branch(29)
B2:
25MoveLoc[2](Arg2: &TxContext)
26Pop
27LdConst[2](u64: 3)
28Abort
B3:
29MoveLoc[4](loc1: Balance<Ty0>)
30Call balance::destroy_zero<Ty0>(Balance<Ty0>)
31CopyLoc[1](Arg1: u64)
32CastU128
33CopyLoc[11](loc8: u64)
34CastU128
35CopyLoc[6](loc3: u64)
36CastU128
37Add
38Ge
39BrFalse(41)
B4:
40Branch(45)
B5:
41MoveLoc[2](Arg2: &TxContext)
42Pop
43LdConst[6](u64: 7)
44Abort
B6:
45MoveLoc[9](loc6: bool)
46MoveLoc[10](loc7: u64)
47MoveLoc[8](loc5: u64)
48MoveLoc[3](loc0: u64)
49MoveLoc[12](loc9: u64)
50MoveLoc[1](Arg1: u64)
51MoveLoc[11](loc8: u64)
52MoveLoc[6](loc3: u64)
53CopyLoc[2](Arg2: &TxContext)
54Call tx_context::gas_price(&TxContext): u64
55MoveLoc[2](Arg2: &TxContext)
56Call tx_context::epoch(&TxContext): u64
57MoveLoc[7](loc4: u64)
58MoveLoc[5](loc2: u64)
59PackGeneric[1](Result<Ty0>)
60Call event::emit<Result<Ty0>>(Result<Ty0>)
61Ret
}
public finish<Ty0>(Arg0: Session<Ty0>, Arg1: Balance<Ty0>, Arg2: &mut TxContext): Coin<Ty0> {
B0:
0MoveLoc[0](Arg0: Session<Ty0>)
1ImmBorrowLoc[1](Arg1: Balance<Ty0>)
2Call balance::value<Ty0>(&Balance<Ty0>): u64
3CopyLoc[2](Arg2: &mut TxContext)
4FreezeRef
5Call settle<Ty0>(Session<Ty0>, u64, &TxContext)
6MoveLoc[1](Arg1: Balance<Ty0>)
7MoveLoc[2](Arg2: &mut TxContext)
8Call coin::from_balance<Ty0>(Balance<Ty0>, &mut TxContext): Coin<Ty0>
9Ret
}
public finish_to_sender<Ty0>(Arg0: Session<Ty0>, Arg1: Balance<Ty0>, Arg2: &TxContext) {
B0:
0MoveLoc[0](Arg0: Session<Ty0>)
1ImmBorrowLoc[1](Arg1: Balance<Ty0>)
2Call balance::value<Ty0>(&Balance<Ty0>): u64
3CopyLoc[2](Arg2: &TxContext)
4Call settle<Ty0>(Session<Ty0>, u64, &TxContext)
5MoveLoc[1](Arg1: Balance<Ty0>)
6MoveLoc[2](Arg2: &TxContext)
7Call tx_context::sender(&TxContext): address
8Call balance::send_funds<Ty0>(Balance<Ty0>, address)
9Ret
}
public refund<Ty0>(Arg0: Balance<Ty0>, Arg1: &TxContext) {
B0:
0ImmBorrowLoc[0](Arg0: Balance<Ty0>)
1Call balance::value<Ty0>(&Balance<Ty0>): u64
2LdU64(0)
3Eq
4BrFalse(10)
B1:
5MoveLoc[1](Arg1: &TxContext)
6Pop
7MoveLoc[0](Arg0: Balance<Ty0>)
8Call balance::destroy_zero<Ty0>(Balance<Ty0>)
9Branch(14)
B2:
10MoveLoc[0](Arg0: Balance<Ty0>)
11MoveLoc[1](Arg1: &TxContext)
12Call tx_context::sender(&TxContext): address
13Call balance::send_funds<Ty0>(Balance<Ty0>, address)
B3:
14Ret
}
public no_opportunity_code(): u64 {
B0:
0LdConst[7](u64: 8)
1Ret
}
Constants [
0 => u64: 1
1 => u64: 2
2 => u64: 3
3 => u64: 4
4 => u64: 5
5 => u64: 6
6 => u64: 7
7 => u64: 8
8 => u8: 0
9 => u8: 1
10 => u8: 2
11 => u8: 3
12 => u64: 60000
13 => vector<u64>: 00
]
}