# TAP / ICP Overview

TAP Protocol supports account abstraction through authorities and therefore makes it possible to utilize programmability for platforms of your choice. Please see the extended functions for [Token Authorities ](https://docs.tap-protocol.com/functions/publish-your-docs/token-authority)and [Privilege Authorities](https://docs.tap-protocol.com/functions/publish-your-docs/privilege-authority) for details.

Through managing your authorities, you are able to apply algorithms and rule over the distribution of assets. Token Authorities are used to issue existing tokens, owned by the authority while Privilege Authorities manage the distribution of new assets.

### Why ICP?

While there are use-cases that allow for centralized programmability, we feel it is important to showcase how decentralized platforms can (and should) be utilized to allow for programmability with the TAP Protocol on Bitcoin L1.

One platform that is a good fit for the task is [ICP](https://internetcomputer.org/) (Internet Computer). Due to its integration with Bitcoin, you are able to directly enforce rules on the funds managed by your ICP smart contracts (called canisters).

The computation costs on ICP are extremely low, making it a very cost-effective way for users to interact with your dapps.

### Advantages

Bundling your smart contracts with TAP Readers as oracles, you'll have the currently most straightforward and most powerful tool to allow for programmability on Bitcoin L1.

Instead of modified Ord clients that try to mimic an EVM execution layer or overly complex rollup structures, this makes it possible to enable a frictionless experience for users, as there is nothing else required than a regular wallet with Ordinals support (no bridging, no L2 wallets).

Additionally, there is no need for bridging BTC. Users can transparently use their assets to perform actions on your smart contracts.

### Examples

Please check our [TAP / ICP Boilerplate](https://github.com/Trac-Systems/tap-icp-azle-boilerplate-canister) that utilizes Typescript integration and makes it even easier to create smart contracts compared to other solutions out there.&#x20;

See the diagram below that identifies the components that interact with your smart contracts:

<figure><img src="https://1414635864-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSnjwNnGYPLqSmi6ecvsO%2Fuploads%2FEwil5d0t40WfLetge22x%2Fimage.png?alt=media&#x26;token=74a9b8f6-4e94-45ed-944e-eac2d574baad" alt=""><figcaption></figcaption></figure>


---

# 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://docs.tap-protocol.com/smart-contracts/tap-icp-overview.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.
