xflx
Module0x65ed…90f6
- Move path
- 0x65ed…90f6::xflx
- Functions
- 117 public, 5 entry
- Structs
- 5
- Friend modules
- None
xflx
Bytecode474 lines
The on-chain disassembly. Offsets are bytecode positions within each function.
// Move bytecode v6
module 65ed6d4e666fcbc1afcd9d4b1d6d4af7def3eeeeaa663f5bebae8101112290f6.xflx {
use 6dae8ca14311574fdfe555524ea48558e3d1360d1607d1c7f98af867e3b7976c::flx;
use 0000000000000000000000000000000000000000000000000000000000000001::option;
use 0000000000000000000000000000000000000000000000000000000000000002::clock;
use 0000000000000000000000000000000000000000000000000000000000000002::coin;
use 0000000000000000000000000000000000000000000000000000000000000002::event;
use 0000000000000000000000000000000000000000000000000000000000000002::object;
use 0000000000000000000000000000000000000000000000000000000000000002::transfer;
use 0000000000000000000000000000000000000000000000000000000000000002::tx_context;
use 0000000000000000000000000000000000000000000000000000000000000002::url;
struct XFLX has drop {
dummy_field: bool
}
struct TreasuryManagement has store, key {
id: UID,
total_flx_locked: Coin<FLX>,
cap: TreasuryCap<XFLX>
}
struct Lock has store, key {
id: UID,
flx: Coin<FLX>,
xflx: Coin<XFLX>,
lock_time_ms: u64,
unlocked_at_ms: u64
}
struct Mint has copy, drop {
to: address,
amount: u64,
sender: address
}
struct Burn has copy, drop {
amount: u64,
lock_time_ms: u64,
sender: address
}
public value(Arg0: &Lock): u64 * u64 {
B0:
0CopyLoc[0](Arg0: &Lock)
1ImmBorrowField[0](Lock.flx: Coin<FLX>)
2Call coin::value<FLX>(&Coin<FLX>): u64
3MoveLoc[0](Arg0: &Lock)
4ImmBorrowField[1](Lock.xflx: Coin<XFLX>)
5Call coin::value<XFLX>(&Coin<XFLX>): u64
6Ret
}
public unlocked_at(Arg0: &Lock): u64 {
B0:
0MoveLoc[0](Arg0: &Lock)
1ImmBorrowField[2](Lock.unlocked_at_ms: u64)
2ReadRef
3Ret
}
create_lock(Arg0: &Clock, Arg1: Coin<FLX>, Arg2: Coin<XFLX>, Arg3: u64, Arg4: &mut TxContext): Lock {
B0:
0CopyLoc[3](Arg3: u64)
1LdConst[4](u64: 1844..)
2CopyLoc[0](Arg0: &Clock)
3Call clock::timestamp_ms(&Clock): u64
4Sub
5Lt
6BrFalse(8)
B1:
7Branch(14)
B2:
8MoveLoc[4](Arg4: &mut TxContext)
9Pop
10MoveLoc[0](Arg0: &Clock)
11Pop
12LdConst[8](u64: 3)
13Abort
B3:
14MoveLoc[4](Arg4: &mut TxContext)
15Call object::new(&mut TxContext): UID
16MoveLoc[1](Arg1: Coin<FLX>)
17MoveLoc[2](Arg2: Coin<XFLX>)
18CopyLoc[3](Arg3: u64)
19MoveLoc[0](Arg0: &Clock)
20Call clock::timestamp_ms(&Clock): u64
21MoveLoc[3](Arg3: u64)
22Add
23Pack[2](Lock)
24Ret
}
unlock_direct(Arg0: Lock): Coin<FLX> * Coin<XFLX> {
L1: loc0: Coin<FLX>
L2: loc1: Coin<XFLX>
B0:
0MoveLoc[0](Arg0: Lock)
1Unpack[2](Lock)
2Pop
3Pop
4StLoc[2](loc1: Coin<XFLX>)
5StLoc[1](loc0: Coin<FLX>)
6Call object::delete(UID)
7MoveLoc[1](loc0: Coin<FLX>)
8MoveLoc[2](loc1: Coin<XFLX>)
9Ret
}
init(Arg0: XFLX, Arg1: &mut TxContext) {
L2: loc0: CoinMetadata<XFLX>
L3: loc1: TreasuryCap<XFLX>
B0:
0MoveLoc[0](Arg0: XFLX)
1LdU8(8)
2LdConst[11](vector<u8>: "XFL..)
3LdConst[12](vector<u8>: "XFl..)
4LdConst[13](vector<u8>: "" /..)
5Call option::none<Url>(): Option<Url>
6CopyLoc[1](Arg1: &mut TxContext)
7Call coin::create_currency<XFLX>(XFLX, u8, vector<u8>, vector<u8>, vector<u8>, Option<Url>, &mut TxContext): TreasuryCap<XFLX> * CoinMetadata<XFLX>
8StLoc[2](loc0: CoinMetadata<XFLX>)
9StLoc[3](loc1: TreasuryCap<XFLX>)
10MoveLoc[2](loc0: CoinMetadata<XFLX>)
11Call transfer::public_freeze_object<CoinMetadata<XFLX>>(CoinMetadata<XFLX>)
12CopyLoc[1](Arg1: &mut TxContext)
13Call object::new(&mut TxContext): UID
14MoveLoc[1](Arg1: &mut TxContext)
15Call coin::zero<FLX>(&mut TxContext): Coin<FLX>
16MoveLoc[3](loc1: TreasuryCap<XFLX>)
17Pack[1](TreasuryManagement)
18Call transfer::share_object<TreasuryManagement>(TreasuryManagement)
19Ret
}
calculate_amount_to_receive(Arg0: u64, Arg1: u64): u64 {
L2: loc0: u256
B0:
0CopyLoc[1](Arg1: u64)
1CastU256
2MoveLoc[1](Arg1: u64)
3CastU256
4Mul
5LdConst[3](u256: 1000..)
6Mul
7StLoc[2](loc0: u256)
8CopyLoc[0](Arg0: u64)
9CastU256
10LdConst[3](u256: 1000..)
11Mul
12LdU256(10)
13Div
14MoveLoc[0](Arg0: u64)
15CastU256
16MoveLoc[2](loc0: u256)
17Mul
18LdConst[2](u256: 6718..)
19Div
20Add
21LdConst[3](u256: 1000..)
22Div
23CastU64
24Ret
}
entry public mint_and_transfer(Arg0: &mut TreasuryManagement, Arg1: Coin<FLX>, Arg2: address, Arg3: &mut TxContext) {
L4: loc0: u64
B0:
0CopyLoc[2](Arg2: address)
1LdConst[0](address: 0x00..)
2Neq
3BrFalse(5)
B1:
4Branch(11)
B2:
5MoveLoc[0](Arg0: &mut TreasuryManagement)
6Pop
7MoveLoc[3](Arg3: &mut TxContext)
8Pop
9LdConst[7](u64: 2)
10Abort
B3:
11ImmBorrowLoc[1](Arg1: Coin<FLX>)
12Call coin::value<FLX>(&Coin<FLX>): u64
13StLoc[4](loc0: u64)
14CopyLoc[4](loc0: u64)
15LdU64(0)
16Gt
17BrFalse(19)
B4:
18Branch(25)
B5:
19MoveLoc[0](Arg0: &mut TreasuryManagement)
20Pop
21MoveLoc[3](Arg3: &mut TxContext)
22Pop
23LdConst[5](u64: 0)
24Abort
B6:
25CopyLoc[0](Arg0: &mut TreasuryManagement)
26MutBorrowField[3](TreasuryManagement.total_flx_locked: Coin<FLX>)
27MoveLoc[1](Arg1: Coin<FLX>)
28Call coin::join<FLX>(&mut Coin<FLX>, Coin<FLX>)
29MoveLoc[0](Arg0: &mut TreasuryManagement)
30MutBorrowField[4](TreasuryManagement.cap: TreasuryCap<XFLX>)
31CopyLoc[4](loc0: u64)
32CopyLoc[3](Arg3: &mut TxContext)
33Call coin::mint<XFLX>(&mut TreasuryCap<XFLX>, u64, &mut TxContext): Coin<XFLX>
34CopyLoc[2](Arg2: address)
35Call transfer::public_transfer<Coin<XFLX>>(Coin<XFLX>, address)
36MoveLoc[2](Arg2: address)
37MoveLoc[4](loc0: u64)
38MoveLoc[3](Arg3: &mut TxContext)
39FreezeRef
40Call tx_context::sender(&TxContext): address
41Pack[3](Mint)
42Call event::emit<Mint>(Mint)
43Ret
}
entry public lazy_burn(Arg0: &mut TreasuryManagement, Arg1: &Clock, Arg2: Coin<XFLX>, Arg3: u64, Arg4: address, Arg5: &mut TxContext) {
L6: loc0: u64
L7: loc1: u64
L8: loc2: Coin<FLX>
L9: loc3: Lock
B0:
0ImmBorrowLoc[2](Arg2: Coin<XFLX>)
1Call coin::value<XFLX>(&Coin<XFLX>): u64
2StLoc[6](loc0: u64)
3CopyLoc[4](Arg4: address)
4LdConst[0](address: 0x00..)
5Neq
6BrFalse(8)
B1:
7Branch(16)
B2:
8MoveLoc[0](Arg0: &mut TreasuryManagement)
9Pop
10MoveLoc[5](Arg5: &mut TxContext)
11Pop
12MoveLoc[1](Arg1: &Clock)
13Pop
14LdConst[7](u64: 2)
15Abort
B3:
16CopyLoc[6](loc0: u64)
17LdU64(0)
18Gt
19BrFalse(21)
B4:
20Branch(29)
B5:
21MoveLoc[0](Arg0: &mut TreasuryManagement)
22Pop
23MoveLoc[5](Arg5: &mut TxContext)
24Pop
25MoveLoc[1](Arg1: &Clock)
26Pop
27LdConst[5](u64: 0)
28Abort
B6:
29CopyLoc[3](Arg3: u64)
30LdConst[1](u64: 7776..)
31Le
32BrFalse(34)
B7:
33Branch(42)
B8:
34MoveLoc[0](Arg0: &mut TreasuryManagement)
35Pop
36MoveLoc[5](Arg5: &mut TxContext)
37Pop
38MoveLoc[1](Arg1: &Clock)
39Pop
40LdConst[6](u64: 1)
41Abort
B9:
42MoveLoc[6](loc0: u64)
43CopyLoc[3](Arg3: u64)
44Call calculate_amount_to_receive(u64, u64): u64
45StLoc[7](loc1: u64)
46CopyLoc[0](Arg0: &mut TreasuryManagement)
47MutBorrowField[3](TreasuryManagement.total_flx_locked: Coin<FLX>)
48MoveLoc[7](loc1: u64)
49CopyLoc[5](Arg5: &mut TxContext)
50Call coin::split<FLX>(&mut Coin<FLX>, u64, &mut TxContext): Coin<FLX>
51StLoc[8](loc2: Coin<FLX>)
52CopyLoc[3](Arg3: u64)
53LdU64(0)
54Gt
55BrFalse(72)
B10:
56MoveLoc[0](Arg0: &mut TreasuryManagement)
57Pop
58MoveLoc[1](Arg1: &Clock)
59MoveLoc[8](loc2: Coin<FLX>)
60MoveLoc[2](Arg2: Coin<XFLX>)
61MoveLoc[3](Arg3: u64)
62MoveLoc[5](Arg5: &mut TxContext)
63Call create_lock(&Clock, Coin<FLX>, Coin<XFLX>, u64, &mut TxContext): Lock
64StLoc[9](loc3: Lock)
65ImmBorrowLoc[9](loc3: Lock)
66Call object::id<Lock>(&Lock): ID
67Pop
68MoveLoc[9](loc3: Lock)
69MoveLoc[4](Arg4: address)
70Call transfer::transfer<Lock>(Lock, address)
71Branch(84)
B11:
72MoveLoc[5](Arg5: &mut TxContext)
73Pop
74MoveLoc[1](Arg1: &Clock)
75Pop
76MoveLoc[8](loc2: Coin<FLX>)
77MoveLoc[4](Arg4: address)
78Call transfer::public_transfer<Coin<FLX>>(Coin<FLX>, address)
79MoveLoc[0](Arg0: &mut TreasuryManagement)
80MutBorrowField[4](TreasuryManagement.cap: TreasuryCap<XFLX>)
81MoveLoc[2](Arg2: Coin<XFLX>)
82Call coin::burn<XFLX>(&mut TreasuryCap<XFLX>, Coin<XFLX>): u64
83Pop
B12:
84Ret
}
entry public cancel_lazy_burn(Arg0: &mut TreasuryManagement, Arg1: &Clock, Arg2: Lock, Arg3: address) {
L4: loc0: Coin<FLX>
L5: loc1: Coin<XFLX>
B0:
0CopyLoc[3](Arg3: address)
1LdConst[0](address: 0x00..)
2Neq
3BrFalse(5)
B1:
4Branch(11)
B2:
5MoveLoc[0](Arg0: &mut TreasuryManagement)
6Pop
7MoveLoc[1](Arg1: &Clock)
8Pop
9LdConst[7](u64: 2)
10Abort
B3:
11MoveLoc[1](Arg1: &Clock)
12Call clock::timestamp_ms(&Clock): u64
13ImmBorrowLoc[2](Arg2: Lock)
14ImmBorrowField[2](Lock.unlocked_at_ms: u64)
15ReadRef
16Lt
17BrFalse(19)
B4:
18Branch(23)
B5:
19MoveLoc[0](Arg0: &mut TreasuryManagement)
20Pop
21LdConst[9](u64: 4)
22Abort
B6:
23MoveLoc[2](Arg2: Lock)
24Call unlock_direct(Lock): Coin<FLX> * Coin<XFLX>
25StLoc[5](loc1: Coin<XFLX>)
26StLoc[4](loc0: Coin<FLX>)
27MoveLoc[0](Arg0: &mut TreasuryManagement)
28MutBorrowField[3](TreasuryManagement.total_flx_locked: Coin<FLX>)
29MoveLoc[4](loc0: Coin<FLX>)
30Call coin::join<FLX>(&mut Coin<FLX>, Coin<FLX>)
31MoveLoc[5](loc1: Coin<XFLX>)
32MoveLoc[3](Arg3: address)
33Call transfer::public_transfer<Coin<XFLX>>(Coin<XFLX>, address)
34Ret
}
entry public burn(Arg0: &mut TreasuryManagement, Arg1: &Clock, Arg2: Lock, Arg3: address, Arg4: &mut TxContext) {
L5: loc0: u64
L6: loc1: u64
L7: loc2: Coin<XFLX>
B0:
0CopyLoc[3](Arg3: address)
1LdConst[0](address: 0x00..)
2Neq
3BrFalse(5)
B1:
4Branch(13)
B2:
5MoveLoc[0](Arg0: &mut TreasuryManagement)
6Pop
7MoveLoc[4](Arg4: &mut TxContext)
8Pop
9MoveLoc[1](Arg1: &Clock)
10Pop
11LdConst[7](u64: 2)
12Abort
B3:
13MoveLoc[1](Arg1: &Clock)
14Call clock::timestamp_ms(&Clock): u64
15ImmBorrowLoc[2](Arg2: Lock)
16ImmBorrowField[2](Lock.unlocked_at_ms: u64)
17ReadRef
18Ge
19BrFalse(21)
B4:
20Branch(27)
B5:
21MoveLoc[0](Arg0: &mut TreasuryManagement)
22Pop
23MoveLoc[4](Arg4: &mut TxContext)
24Pop
25LdConst[10](u64: 5)
26Abort
B6:
27ImmBorrowLoc[2](Arg2: Lock)
28ImmBorrowField[1](Lock.xflx: Coin<XFLX>)
29Call coin::value<XFLX>(&Coin<XFLX>): u64
30ImmBorrowLoc[2](Arg2: Lock)
31ImmBorrowField[5](Lock.lock_time_ms: u64)
32ReadRef
33StLoc[6](loc1: u64)
34StLoc[5](loc0: u64)
35MoveLoc[2](Arg2: Lock)
36Call unlock_direct(Lock): Coin<FLX> * Coin<XFLX>
37StLoc[7](loc2: Coin<XFLX>)
38MoveLoc[3](Arg3: address)
39Call transfer::public_transfer<Coin<FLX>>(Coin<FLX>, address)
40MoveLoc[0](Arg0: &mut TreasuryManagement)
41MutBorrowField[4](TreasuryManagement.cap: TreasuryCap<XFLX>)
42MoveLoc[7](loc2: Coin<XFLX>)
43Call coin::burn<XFLX>(&mut TreasuryCap<XFLX>, Coin<XFLX>): u64
44Pop
45MoveLoc[5](loc0: u64)
46MoveLoc[6](loc1: u64)
47MoveLoc[4](Arg4: &mut TxContext)
48FreezeRef
49Call tx_context::sender(&TxContext): address
50Pack[4](Burn)
51Call event::emit<Burn>(Burn)
52Ret
}
entry public transfer(Arg0: Coin<XFLX>, Arg1: address) {
B0:
0CopyLoc[1](Arg1: address)
1LdConst[0](address: 0x00..)
2Neq
3BrFalse(5)
B1:
4Branch(7)
B2:
5LdConst[7](u64: 2)
6Abort
B3:
7MoveLoc[0](Arg0: Coin<XFLX>)
8MoveLoc[1](Arg1: address)
9Call transfer::public_transfer<Coin<XFLX>>(Coin<XFLX>, address)
10Ret
}
Constants [
0 => address: 0x0000000000000000000000000000000000000000000000000000000000000000
1 => u64: 7776000000
2 => u256: 67184640000000000000
3 => u256: 1000000000000
4 => u64: 18446744073709551615
5 => u64: 0
6 => u64: 1
7 => u64: 2
8 => u64: 3
9 => u64: 4
10 => u64: 5
11 => vector<u8>: "XFLX" // interpreted as UTF8 string
12 => vector<u8>: "XFlowX" // interpreted as UTF8 string
13 => vector<u8>: "" // interpreted as UTF8 string
]
}