MIMD-0023: Anti-Money Laundering #1132
Dodecahedr0x
started this conversation in
MIMD
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
MIMD-0023: Anti-Money Laundering (AML)
Abstract
This MIMD presents a way to prevent users suspected of money laundering from using the validator. It does so by:
The limitations of this approach are:
Motivation
With the introduction of Private Ephemeral Rollups (PERs), money launderers could potentially use TEEs for their operations.
This puts MagicBlock (and in the future PER operators) at risk. Preventing money launderers from using PERs is a critical security requirement.
Alternatives considered
1. API Checks
We provide a simple API that let's users create private transfers. Running the checks before returning a transaction would prevent money laudering going through the API but would not prevent launderers from using the validator directly.
2. Checks inside the TEE middleware
Since AML checks only make sense for PER, a reasonable solution would be to run those checks inside the TEE middleware.
However, the middleware only filters user interactions, but the private payment flow is orchestrated entirely from mainnet: a user signs a mainnet transaction and the PER transfers are performed automatically by the validator, without the user sending any transactions to the TEE.
3. New middleware between the TEE validator and the mainnet RPC
By preventing updates of accounts owned by suspected money launderers, we can prevent them from using the validator.
However, this solution would have a lot less context about what is being executed and would either have to fetch data from the validator (more latency) or aggressively run AML checks (expensive).
Overview
AML results are used in several components of the validator (namely chainlink and processor). To avoid duplicating checks, a new AML component is introduced. It uses a local storage for AML checks to reduce the number of calls to the AML API. It offers a single check API
async fn check(address: Pubkey) -> AmlResult:Cloning prevention
This step consists of detecting eSPL deposits that are above a certain threshold:
Execution prevention
This step consists of preventing execution of transaction coming from a launderer. Ensuring the AML checks have been run for every signers of every transactions would be to expensive, so if we proppose the following heuristic:
Beta Was this translation helpful? Give feedback.
All reactions