# Asset Controller Program

## Overview

The Asset Controller Program (ACP) serves as the control unit for the protocol. For permissioned assets to exist, a central program needs to be responsible for distribution, managing data, and maintaining the registry of identity information.

## Technical Overview

The ACP program mints a new asset using the [Token-2022](https://spl.solana.com/token-2022#:~:text=A%20token%20program%20on%20the,provided%20by%20the%20Token%20Program.) standard with transfer hook extension. It delegates authority functions to a PDA generated from an asset identifier and issuer identifier. All transactions that modify the distribution of tokens (mints, burns, transfers) undergo a transaction approval check. This check is performed by a PDA written to by a delegated account to ensure compliance with external requirements.[ The Transfer Hook](https://solana.com/developers/guides/token-extensions/transfer-hook) extension interface introduces the ability to create mint accounts that execute custom instruction logic on every token transfer and therefore enabling standardized policy checks. Policy checks are a crucial component to maintain the composability of newly issued assets that come with a variety of transfer restrictions.

## Understanding RWA Standard Transfer

As previously mentioned, the program implements the [Transfer Hook Interface](https://github.com/solana-labs/solana-program-library/tree/master/token/transfer-hook/interface). Therefore, on every transfer the handler function processes asset transfers, incorporating identity checks, data validation, and policy evaluation. It verifies user identity levels to potentially skip policy enforcement, iterates over policies to enforce rules, and updates transfer history accordingly. It ensures secure and efficient asset transfers while maintaining integrity and compliance with defined policies.&#x20;

At a high level, the following image is what the transfer looks like.

<figure><img src="/files/J4DUny6wv2S9kIM3cbgn" alt=""><figcaption><p>Overview of Medici Transfers</p></figcaption></figure>

For more technical specifications, the following section highlights important information regarding how the transfer hook specifically works.

## Understanding RWA Standard Transfer Cont.

Below is a more detailed diagram of how transfers work.

<figure><img src="/files/Kh2PMBLko4VTo2JucUGt" alt=""><figcaption><p>Detailed Overview of Medici Transfers</p></figcaption></figure>

For even more detail, please reference the [program](https://github.com/bridgesplit/rwa-token/blob/main/programs/asset_controller/src/instructions/execute.rs).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://medici-docs.bridgesplit.com/programs/program-overview/asset-controller-program.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
