# Minting/Redemption

### ➕ **BTC Deposit a.k.a. Minting**

1. **A user registers** their Ethereum address in the UserActivator smart contract via an on-chain transaction.
2. A unique Bitcoin **Taproot deposit address** is generated using the validators' joint public key + user’s ETH address. The generated address can be double-checked by the user in the UserActivator smart contract.
3. The user sends BTC to this deposit address.
4. Validators detect the BTC deposit, based on Bitcoin on-chain data independently from each other, approve the minting operation, and construct a **minting message** containing:
   * Incoming Bitcoin transaction hash
   * Transaction output index
   * Amount
   * Users Ethereum address
5. Validators sign the message using FROST and send it to the user.
6. The user submits the message + signature to the `strBTC` smart contract.
7. Contract verifies the signature and **mints an `strBTC` token** to the user's wallet.

📌 All Bitcoin transaction details (transaction hash + output) are marked as “used” to prevent double minting.

***

### ➖ **Redemption a.k.a. BTC Withdrawal**

1. A user burns `strBTC`, specifying their Bitcoin payout address. The validity of a Bitcoin address is checked in the `strBTC` Smart Contract during a burning transaction.
2. The burn transaction is recorded with a **unique redemption ID**.
3. Validators detect the burn, independently of each other, validate the transaction, and prepare a BTC payout transaction.
4. The redemption ID is inserted in the Bitcoin transaction sequence number to prevent duplicate payouts for the same redemption.
5. A FROST signature is produced and used to sign the Bitcoin transaction.
6. All validators post the resulting payout transaction to the Bitcoin network.


---

# 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.stroom.network/stroom/phase-1-native-staking/minting-redemption.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.
