Sui mainnet
Verified source
0x9f6d…9789
0x9f6de0f9c1333cecfafed4fd51ecf445d237a6295bd6ae88754821c8f8189789
The pipeline is behind the chain tip0x9f6de0f9c1333cecfafed4fd51ecf445d237a6295bd6ae88754821c8f8189789
Everything already published is complete and correct; only newer blocks are missing. The chain summary reports this generation as behind the tip.
Verification
- Code hash
- 0x9f6de0f9c1333cecfafed4fd51ecf445d237a6295bd6ae88754821c8f8189789
- Status
- full match
- Provider
- disassembly of package 0x9f6de0f9c1333cecfafed4fd51ecf445d237a6295bd6ae88754821c8f8189789 as `sui replay` fetched it at the version that executed
- Compiler
- Language
- move-disassembly
- Bundle
- sha1:f4585f0f711db7d2350acf91443a48768c98a6e9
Sources
0x9f6de0f9c1333cecfafed4fd51ecf445d237a6295bd6ae88754821c8f8189789/bytecode/campaign.mvb564 lines
1// Move bytecode v6
2module 9f6de0f9c1333cecfafed4fd51ecf445d237a6295bd6ae88754821c8f8189789.campaign {
3use 0000000000000000000000000000000000000000000000000000000000000001::option;
4use 0000000000000000000000000000000000000000000000000000000000000001::string;
5use 0000000000000000000000000000000000000000000000000000000000000001::vector;
6use 0000000000000000000000000000000000000000000000000000000000000002::clock;
7use 0000000000000000000000000000000000000000000000000000000000000002::event;
8use 0000000000000000000000000000000000000000000000000000000000000002::object;
9use 0000000000000000000000000000000000000000000000000000000000000002::transfer;
10use 0000000000000000000000000000000000000000000000000000000000000002::tx_context;
11
12struct CAMPAIGN has drop {
13 dummy_field: bool
14}
15
16struct AdminCap has store, key {
17 id: UID
18}
19
20struct Campaign has store, key {
21 id: UID,
22 admin: address,
23 title: String,
24 about: String,
25 active: bool,
26 started_at: u64,
27 ended_at: Option<u64>
28}
29
30struct UserWhitelist has store, key {
31 id: UID,
32 user: address,
33 permission: bool,
34 referees_count: u64,
35 is_referee: bool
36}
37
38struct ReferralEvent has copy, drop {
39 referrer: address,
40 referee: address,
41 created_at: u64
42}
43
44struct LoginEvent has copy, drop {
45 user: address,
46 loggedin_at: u64
47}
48
49struct WhitelistRemovedEvent has copy, drop {
50 user: address,
51 removed_at: u64
52}
53
54init(Arg0: CAMPAIGN, Arg1: &mut TxContext) {
55B0:
56 0: MoveLoc[1](Arg1: &mut TxContext)
57 1: Call object::new(&mut TxContext): UID
58 2: Pack[1](AdminCap)
59 3: Call transfer::share_object<AdminCap>(AdminCap)
60 4: Ret
61}
62
63entry public create_campaign(Arg0: &AdminCap, Arg1: String, Arg2: String, Arg3: &Clock, Arg4: &mut TxContext) {
64B0:
65 0: CopyLoc[4](Arg4: &mut TxContext)
66 1: Call object::new(&mut TxContext): UID
67 2: MoveLoc[4](Arg4: &mut TxContext)
68 3: FreezeRef
69 4: Call tx_context::sender(&TxContext): address
70 5: MoveLoc[1](Arg1: String)
71 6: MoveLoc[2](Arg2: String)
72 7: LdTrue
73 8: MoveLoc[3](Arg3: &Clock)
74 9: Call clock::timestamp_ms(&Clock): u64
75 10: Call option::none<u64>(): Option<u64>
76 11: Pack[2](Campaign)
77 12: Call transfer::share_object<Campaign>(Campaign)
78 13: Ret
79}
80
81entry public end_campaign(Arg0: &AdminCap, Arg1: &mut Campaign, Arg2: &Clock, Arg3: &mut TxContext) {
82B0:
83 0: CopyLoc[1](Arg1: &mut Campaign)
84 1: ImmBorrowField[0](Campaign.admin: address)
85 2: ReadRef
86 3: MoveLoc[3](Arg3: &mut TxContext)
87 4: FreezeRef
88 5: Call tx_context::sender(&TxContext): address
89 6: Eq
90 7: BrFalse(9)
91B1:
92 8: Branch(15)
93B2:
94 9: MoveLoc[2](Arg2: &Clock)
95 10: Pop
96 11: MoveLoc[1](Arg1: &mut Campaign)
97 12: Pop
98 13: LdConst[6](u64: 100)
99 14: Abort
100B3:
101 15: CopyLoc[1](Arg1: &mut Campaign)
102 16: ImmBorrowField[1](Campaign.active: bool)
103 17: ReadRef
104 18: LdTrue
105 19: Eq
106 20: BrFalse(22)
107B4:
108 21: Branch(28)
109B5:
110 22: MoveLoc[2](Arg2: &Clock)
111 23: Pop
112 24: MoveLoc[1](Arg1: &mut Campaign)
113 25: Pop
114 26: LdConst[0](u64: 5)
115 27: Abort
116B6:
117 28: LdFalse
118 29: CopyLoc[1](Arg1: &mut Campaign)
119 30: MutBorrowField[1](Campaign.active: bool)
120 31: WriteRef
121 32: MoveLoc[2](Arg2: &Clock)
122 33: Call clock::timestamp_ms(&Clock): u64
123 34: Call option::some<u64>(u64): Option<u64>
124 35: MoveLoc[1](Arg1: &mut Campaign)
125 36: MutBorrowField[2](Campaign.ended_at: Option<u64>)
126 37: WriteRef
127 38: Ret
128}
129
130entry public delete_campaign(Arg0: &AdminCap, Arg1: Campaign, Arg2: &mut TxContext) {
131B0:
132 0: ImmBorrowLoc[1](Arg1: Campaign)
133 1: ImmBorrowField[0](Campaign.admin: address)
134 2: ReadRef
135 3: MoveLoc[2](Arg2: &mut TxContext)
136 4: FreezeRef
137 5: Call tx_context::sender(&TxContext): address
138 6: Eq
139 7: BrFalse(9)
140B1:
141 8: Branch(11)
142B2:
143 9: LdConst[6](u64: 100)
144 10: Abort
145B3:
146 11: MoveLoc[1](Arg1: Campaign)
147 12: Unpack[2](Campaign)
148 13: Pop
149 14: Pop
150 15: Pop
151 16: Pop
152 17: Pop
153 18: Pop
154 19: Call object::delete(UID)
155 20: Ret
156}
157
158entry public add_whitelist(Arg0: &Campaign, Arg1: address, Arg2: bool, Arg3: &mut TxContext) {
159B0:
160 0: MoveLoc[0](Arg0: &Campaign)
161 1: ImmBorrowField[0](Campaign.admin: address)
162 2: ReadRef
163 3: CopyLoc[3](Arg3: &mut TxContext)
164 4: FreezeRef
165 5: Call tx_context::sender(&TxContext): address
166 6: Eq
167 7: BrFalse(9)
168B1:
169 8: Branch(13)
170B2:
171 9: MoveLoc[3](Arg3: &mut TxContext)
172 10: Pop
173 11: LdConst[6](u64: 100)
174 12: Abort
175B3:
176 13: MoveLoc[3](Arg3: &mut TxContext)
177 14: Call object::new(&mut TxContext): UID
178 15: MoveLoc[1](Arg1: address)
179 16: MoveLoc[2](Arg2: bool)
180 17: LdU64(0)
181 18: LdFalse
182 19: Pack[3](UserWhitelist)
183 20: Call transfer::share_object<UserWhitelist>(UserWhitelist)
184 21: Ret
185}
186
187entry public update_permission_whitelist(Arg0: &Campaign, Arg1: &mut UserWhitelist, Arg2: bool, Arg3: &mut TxContext) {
188B0:
189 0: MoveLoc[0](Arg0: &Campaign)
190 1: ImmBorrowField[0](Campaign.admin: address)
191 2: ReadRef
192 3: MoveLoc[3](Arg3: &mut TxContext)
193 4: FreezeRef
194 5: Call tx_context::sender(&TxContext): address
195 6: Eq
196 7: BrFalse(9)
197B1:
198 8: Branch(13)
199B2:
200 9: MoveLoc[1](Arg1: &mut UserWhitelist)
201 10: Pop
202 11: LdConst[6](u64: 100)
203 12: Abort
204B3:
205 13: MoveLoc[2](Arg2: bool)
206 14: MoveLoc[1](Arg1: &mut UserWhitelist)
207 15: MutBorrowField[3](UserWhitelist.permission: bool)
208 16: WriteRef
209 17: Ret
210}
211
212entry public remove_whitelist(Arg0: &Campaign, Arg1: UserWhitelist, Arg2: &Clock, Arg3: &mut TxContext) {
213B0:
214 0: MoveLoc[0](Arg0: &Campaign)
215 1: ImmBorrowField[0](Campaign.admin: address)
216 2: ReadRef
217 3: MoveLoc[3](Arg3: &mut TxContext)
218 4: FreezeRef
219 5: Call tx_context::sender(&TxContext): address
220 6: Eq
221 7: BrFalse(9)
222B1:
223 8: Branch(13)
224B2:
225 9: MoveLoc[2](Arg2: &Clock)
226 10: Pop
227 11: LdConst[6](u64: 100)
228 12: Abort
229B3:
230 13: ImmBorrowLoc[1](Arg1: UserWhitelist)
231 14: ImmBorrowField[4](UserWhitelist.referees_count: u64)
232 15: ReadRef
233 16: LdU64(0)
234 17: Eq
235 18: BrFalse(20)
236B4:
237 19: Branch(24)
238B5:
239 20: MoveLoc[2](Arg2: &Clock)
240 21: Pop
241 22: LdConst[4](u64: 2)
242 23: Abort
243B6:
244 24: ImmBorrowLoc[1](Arg1: UserWhitelist)
245 25: ImmBorrowField[5](UserWhitelist.is_referee: bool)
246 26: ReadRef
247 27: Not
248 28: BrFalse(30)
249B7:
250 29: Branch(34)
251B8:
252 30: MoveLoc[2](Arg2: &Clock)
253 31: Pop
254 32: LdConst[5](u64: 3)
255 33: Abort
256B9:
257 34: ImmBorrowLoc[1](Arg1: UserWhitelist)
258 35: ImmBorrowField[6](UserWhitelist.user: address)
259 36: ReadRef
260 37: MoveLoc[2](Arg2: &Clock)
261 38: Call clock::timestamp_ms(&Clock): u64
262 39: Pack[6](WhitelistRemovedEvent)
263 40: Call event::emit<WhitelistRemovedEvent>(WhitelistRemovedEvent)
264 41: MoveLoc[1](Arg1: UserWhitelist)
265 42: Unpack[3](UserWhitelist)
266 43: Pop
267 44: Pop
268 45: Pop
269 46: Pop
270 47: Call object::delete(UID)
271 48: Ret
272}
273
274entry public batch_remove_whitelist(Arg0: &Campaign, Arg1: vector<UserWhitelist>, Arg2: &Clock, Arg3: &mut TxContext) {
275L4: loc0: UserWhitelist
276B0:
277 0: MoveLoc[0](Arg0: &Campaign)
278 1: ImmBorrowField[0](Campaign.admin: address)
279 2: ReadRef
280 3: MoveLoc[3](Arg3: &mut TxContext)
281 4: FreezeRef
282 5: Call tx_context::sender(&TxContext): address
283 6: Eq
284 7: BrFalse(9)
285B1:
286 8: Branch(13)
287B2:
288 9: MoveLoc[2](Arg2: &Clock)
289 10: Pop
290 11: LdConst[6](u64: 100)
291 12: Abort
292B3:
293 13: ImmBorrowLoc[1](Arg1: vector<UserWhitelist>)
294 14: Call vector::is_empty<UserWhitelist>(&vector<UserWhitelist>): bool
295 15: Not
296 16: BrFalse(35)
297B4:
298 17: MutBorrowLoc[1](Arg1: vector<UserWhitelist>)
299 18: VecPopBack(21)
300 19: StLoc[4](loc0: UserWhitelist)
301 20: ImmBorrowLoc[4](loc0: UserWhitelist)
302 21: ImmBorrowField[6](UserWhitelist.user: address)
303 22: ReadRef
304 23: CopyLoc[2](Arg2: &Clock)
305 24: Call clock::timestamp_ms(&Clock): u64
306 25: Pack[6](WhitelistRemovedEvent)
307 26: Call event::emit<WhitelistRemovedEvent>(WhitelistRemovedEvent)
308 27: MoveLoc[4](loc0: UserWhitelist)
309 28: Unpack[3](UserWhitelist)
310 29: Pop
311 30: Pop
312 31: Pop
313 32: Pop
314 33: Call object::delete(UID)
315 34: Branch(13)
316B5:
317 35: MoveLoc[2](Arg2: &Clock)
318 36: Pop
319 37: MoveLoc[1](Arg1: vector<UserWhitelist>)
320 38: VecUnpack(21, 0)
321 39: Ret
322}
323
324entry public log_user_activity(Arg0: &Campaign, Arg1: &UserWhitelist, Arg2: &Clock, Arg3: &mut TxContext) {
325L4: loc0: u64
326B0:
327 0: MoveLoc[0](Arg0: &Campaign)
328 1: ImmBorrowField[1](Campaign.active: bool)
329 2: ReadRef
330 3: LdTrue
331 4: Eq
332 5: BrFalse(7)
333B1:
334 6: Branch(15)
335B2:
336 7: MoveLoc[1](Arg1: &UserWhitelist)
337 8: Pop
338 9: MoveLoc[3](Arg3: &mut TxContext)
339 10: Pop
340 11: MoveLoc[2](Arg2: &Clock)
341 12: Pop
342 13: LdConst[0](u64: 5)
343 14: Abort
344B3:
345 15: CopyLoc[1](Arg1: &UserWhitelist)
346 16: ImmBorrowField[3](UserWhitelist.permission: bool)
347 17: ReadRef
348 18: LdTrue
349 19: Eq
350 20: BrFalse(22)
351B4:
352 21: Branch(30)
353B5:
354 22: MoveLoc[1](Arg1: &UserWhitelist)
355 23: Pop
356 24: MoveLoc[3](Arg3: &mut TxContext)
357 25: Pop
358 26: MoveLoc[2](Arg2: &Clock)
359 27: Pop
360 28: LdConst[2](u64: 8)
361 29: Abort
362B6:
363 30: CopyLoc[1](Arg1: &UserWhitelist)
364 31: ImmBorrowField[6](UserWhitelist.user: address)
365 32: ReadRef
366 33: MoveLoc[3](Arg3: &mut TxContext)
367 34: FreezeRef
368 35: Call tx_context::sender(&TxContext): address
369 36: Eq
370 37: BrFalse(39)
371B7:
372 38: Branch(45)
373B8:
374 39: MoveLoc[1](Arg1: &UserWhitelist)
375 40: Pop
376 41: MoveLoc[2](Arg2: &Clock)
377 42: Pop
378 43: LdConst[1](u64: 7)
379 44: Abort
380B9:
381 45: MoveLoc[2](Arg2: &Clock)
382 46: Call clock::timestamp_ms(&Clock): u64
383 47: StLoc[4](loc0: u64)
384 48: MoveLoc[1](Arg1: &UserWhitelist)
385 49: ImmBorrowField[6](UserWhitelist.user: address)
386 50: ReadRef
387 51: MoveLoc[4](loc0: u64)
388 52: Pack[5](LoginEvent)
389 53: Call event::emit<LoginEvent>(LoginEvent)
390 54: Ret
391}
392
393entry public create_referral(Arg0: &Campaign, Arg1: &mut UserWhitelist, Arg2: &mut UserWhitelist, Arg3: &Clock, Arg4: &mut TxContext) {
394L5: loc0: u64
395L6: loc1: address
396B0:
397 0: MoveLoc[0](Arg0: &Campaign)
398 1: ImmBorrowField[1](Campaign.active: bool)
399 2: ReadRef
400 3: LdTrue
401 4: Eq
402 5: BrFalse(7)
403B1:
404 6: Branch(17)
405B2:
406 7: MoveLoc[2](Arg2: &mut UserWhitelist)
407 8: Pop
408 9: MoveLoc[1](Arg1: &mut UserWhitelist)
409 10: Pop
410 11: MoveLoc[4](Arg4: &mut TxContext)
411 12: Pop
412 13: MoveLoc[3](Arg3: &Clock)
413 14: Pop
414 15: LdConst[0](u64: 5)
415 16: Abort
416B3:
417 17: MoveLoc[4](Arg4: &mut TxContext)
418 18: FreezeRef
419 19: Call tx_context::sender(&TxContext): address
420 20: StLoc[6](loc1: address)
421 21: CopyLoc[1](Arg1: &mut UserWhitelist)
422 22: ImmBorrowField[6](UserWhitelist.user: address)
423 23: ReadRef
424 24: CopyLoc[6](loc1: address)
425 25: Eq
426 26: BrFalse(28)
427B4:
428 27: Branch(36)
429B5:
430 28: MoveLoc[2](Arg2: &mut UserWhitelist)
431 29: Pop
432 30: MoveLoc[1](Arg1: &mut UserWhitelist)
433 31: Pop
434 32: MoveLoc[3](Arg3: &Clock)
435 33: Pop
436 34: LdConst[1](u64: 7)
437 35: Abort
438B6:
439 36: CopyLoc[1](Arg1: &mut UserWhitelist)
440 37: ImmBorrowField[3](UserWhitelist.permission: bool)
441 38: ReadRef
442 39: LdTrue
443 40: Eq
444 41: BrFalse(43)
445B7:
446 42: Branch(51)
447B8:
448 43: MoveLoc[2](Arg2: &mut UserWhitelist)
449 44: Pop
450 45: MoveLoc[1](Arg1: &mut UserWhitelist)
451 46: Pop
452 47: MoveLoc[3](Arg3: &Clock)
453 48: Pop
454 49: LdConst[2](u64: 8)
455 50: Abort
456B9:
457 51: CopyLoc[2](Arg2: &mut UserWhitelist)
458 52: ImmBorrowField[3](UserWhitelist.permission: bool)
459 53: ReadRef
460 54: LdTrue
461 55: Eq
462 56: BrFalse(58)
463B10:
464 57: Branch(66)
465B11:
466 58: MoveLoc[2](Arg2: &mut UserWhitelist)
467 59: Pop
468 60: MoveLoc[1](Arg1: &mut UserWhitelist)
469 61: Pop
470 62: MoveLoc[3](Arg3: &Clock)
471 63: Pop
472 64: LdConst[2](u64: 8)
473 65: Abort
474B12:
475 66: CopyLoc[6](loc1: address)
476 67: CopyLoc[2](Arg2: &mut UserWhitelist)
477 68: ImmBorrowField[6](UserWhitelist.user: address)
478 69: ReadRef
479 70: Neq
480 71: BrFalse(73)
481B13:
482 72: Branch(81)
483B14:
484 73: MoveLoc[2](Arg2: &mut UserWhitelist)
485 74: Pop
486 75: MoveLoc[1](Arg1: &mut UserWhitelist)
487 76: Pop
488 77: MoveLoc[3](Arg3: &Clock)
489 78: Pop
490 79: LdConst[3](u64: 1)
491 80: Abort
492B15:
493 81: CopyLoc[1](Arg1: &mut UserWhitelist)
494 82: ImmBorrowField[4](UserWhitelist.referees_count: u64)
495 83: ReadRef
496 84: LdU64(0)
497 85: Eq
498 86: BrFalse(88)
499B16:
500 87: Branch(96)
501B17:
502 88: MoveLoc[2](Arg2: &mut UserWhitelist)
503 89: Pop
504 90: MoveLoc[1](Arg1: &mut UserWhitelist)
505 91: Pop
506 92: MoveLoc[3](Arg3: &Clock)
507 93: Pop
508 94: LdConst[4](u64: 2)
509 95: Abort
510B18:
511 96: CopyLoc[1](Arg1: &mut UserWhitelist)
512 97: ImmBorrowField[5](UserWhitelist.is_referee: bool)
513 98: ReadRef
514 99: LdFalse
515 100: Eq
516 101: BrFalse(103)
517B19:
518 102: Branch(111)
519B20:
520 103: MoveLoc[2](Arg2: &mut UserWhitelist)
521 104: Pop
522 105: MoveLoc[1](Arg1: &mut UserWhitelist)
523 106: Pop
524 107: MoveLoc[3](Arg3: &Clock)
525 108: Pop
526 109: LdConst[5](u64: 3)
527 110: Abort
528B21:
529 111: LdTrue
530 112: MoveLoc[1](Arg1: &mut UserWhitelist)
531 113: MutBorrowField[5](UserWhitelist.is_referee: bool)
532 114: WriteRef
533 115: CopyLoc[2](Arg2: &mut UserWhitelist)
534 116: ImmBorrowField[4](UserWhitelist.referees_count: u64)
535 117: ReadRef
536 118: LdU64(1)
537 119: Add
538 120: CopyLoc[2](Arg2: &mut UserWhitelist)
539 121: MutBorrowField[4](UserWhitelist.referees_count: u64)
540 122: WriteRef
541 123: MoveLoc[3](Arg3: &Clock)
542 124: Call clock::timestamp_ms(&Clock): u64
543 125: StLoc[5](loc0: u64)
544 126: MoveLoc[2](Arg2: &mut UserWhitelist)
545 127: ImmBorrowField[6](UserWhitelist.user: address)
546 128: ReadRef
547 129: MoveLoc[6](loc1: address)
548 130: MoveLoc[5](loc0: u64)
549 131: Pack[4](ReferralEvent)
550 132: Call event::emit<ReferralEvent>(ReferralEvent)
551 133: Ret
552}
553
554Constants [
555 0 => u64: 5
556 1 => u64: 7
557 2 => u64: 8
558 3 => u64: 1
559 4 => u64: 2
560 5 => u64: 3
561 6 => u64: 100
562]
563}
564
This is a circuit, not a contract. It declares no ABI and no storage layout, so there is no interface list and no slot mapping to show. The source above is the whole of what it publishes.
Deployments
This code is deployed at one address. Any other address running the same bytecode would appear here too, already verified.