main.aleo
1 program token.aleo; 2 3 record token: 4 owner as address.private; 5 amount as u64.private; 6 7 8 mapping account: 9 key as address.public; 10 value as u64.public; 11 12 function mint_public: 13 input r0 as address.public; 14 input r1 as u64.public; 15 async mint_public r0 r1 into r2; 16 output r2 as token.aleo/mint_public.future; 17 18 finalize mint_public: 19 input r0 as address.public; 20 input r1 as u64.public; 21 get.or_use account[r0] 0u64 into r2; 22 add r2 r1 into r3; 23 set r3 into account[r0]; 24 25 26 function mint_private: 27 input r0 as address.private; 28 input r1 as u64.private; 29 cast r0 r1 into r2 as token.record; 30 output r2 as token.record; 31 32 33 function transfer_public: 34 input r0 as address.public; 35 input r1 as u64.public; 36 async transfer_public self.caller r0 r1 into r2; 37 output r2 as token.aleo/transfer_public.future; 38 39 finalize transfer_public: 40 input r0 as address.public; 41 input r1 as address.public; 42 input r2 as u64.public; 43 get.or_use account[r0] 0u64 into r3; 44 sub r3 r2 into r4; 45 set r4 into account[r0]; 46 get.or_use account[r1] 0u64 into r5; 47 add r5 r2 into r6; 48 set r6 into account[r1]; 49 50 51 function transfer_private: 52 input r0 as token.record; 53 input r1 as address.private; 54 input r2 as u64.private; 55 sub r0.amount r2 into r3; 56 cast r0.owner r3 into r4 as token.record; 57 cast r1 r2 into r5 as token.record; 58 output r4 as token.record; 59 output r5 as token.record; 60 61 62 function transfer_private_to_public: 63 input r0 as token.record; 64 input r1 as address.public; 65 input r2 as u64.public; 66 sub r0.amount r2 into r3; 67 cast r0.owner r3 into r4 as token.record; 68 async transfer_private_to_public r1 r2 into r5; 69 output r4 as token.record; 70 output r5 as token.aleo/transfer_private_to_public.future; 71 72 finalize transfer_private_to_public: 73 input r0 as address.public; 74 input r1 as u64.public; 75 get.or_use account[r0] 0u64 into r2; 76 add r2 r1 into r3; 77 set r3 into account[r0]; 78 79 80 function transfer_public_to_private: 81 input r0 as address.public; 82 input r1 as u64.public; 83 cast r0 r1 into r2 as token.record; 84 async transfer_public_to_private self.caller r1 into r3; 85 output r2 as token.record; 86 output r3 as token.aleo/transfer_public_to_private.future; 87 88 finalize transfer_public_to_private: 89 input r0 as address.public; 90 input r1 as u64.public; 91 get.or_use account[r0] 0u64 into r2; 92 sub r2 r1 into r3; 93 set r3 into account[r0];