/ .circleci / token / build / main.aleo
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];