You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: arc-0022/README.md
+1-69Lines changed: 1 addition & 69 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,7 +14,7 @@ ARC-22 defines a compliant fungible token interface for Aleo. It modifies [ARC-2
14
14
15
15
## Motivation
16
16
17
-
ARC-20 provides a minimal token standard but lacks regulatory compliance features required by many real-world token deployments. Regulated tokens compliance mechanisms such as:
17
+
ARC-20 provides a minimal token standard but lacks regulatory compliance features required by many real-world token deployments. Regulated tokens need compliance mechanisms such as:
18
18
19
19
1.**Freeze lists** to block sanctioned or compromised addresses from transacting
20
20
2.**Audit trails** for private transfers, enabling authorized investigators to review token movements without exposing sender identity to the public
@@ -34,74 +34,6 @@ The ARC-22 standard provides a library ([`IARC22`](./IARC22)), which is composed
34
34
35
35
The compliant token surface adds freeze-list enforcement (via Merkle non-inclusion proofs on private sends) and investigator-visible **`ComplianceRecord`** outputs on every transition that materially changes a balance. Mappings and storage variables are intentionally **not** part of the interface; only function signatures and the records (**`Token`**, **`ComplianceRecord`**) form the contract.
36
36
37
-
```leo
38
-
interface IARC22 {
39
-
record Token {
40
-
owner: address,
41
-
amount: u128,
42
-
..
43
-
}
44
-
45
-
record ComplianceRecord {
46
-
owner: address, // INVESTIGATOR_ADDRESS
47
-
amount: u128,
48
-
sender: address, // ZERO_ADDRESS for mint paths
49
-
recipient: address, // ZERO_ADDRESS for burn paths
**Merkle non-inclusion proofs** are required only on transitions where the sender is private -- **`transfer_private`** and **`transfer_private_to_public`**. Transitions where the sender is public -- **`transfer_public_to_private`** and **`transfer_from_public_to_private`** -- check the sender against the freeze list directly via **`is_frozen_address`** (or the equivalent **`verify_non_inclusion_pub`** helper).
106
38
107
39
**Compliance coverage.** Every transition that moves balances on a private path -- **`transfer_private`**, **`transfer_private_to_public`**, **`transfer_public_to_private`**, and **`transfer_from_public_to_private`** -- emits a **`ComplianceRecord`** owned by **`INVESTIGATOR_ADDRESS`**, so the investigator can decrypt the full sender / recipient / amount tuple whenever at least one side is private.
0 commit comments