> For the complete documentation index, see [llms.txt](https://docs.bitsafe.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bitsafe.finance/beth/guides/redeem-beth.md).

# Redeem BETH

[BETH overview](/beth/overview.md) · [BETH environments and prerequisites](/beth/get-started/environments-and-prerequisites.md)

### Outcome

Create or select a withdrawal account, redeem BETH, and verify delivery of ETH to the intended Ethereum address.

### Before you start

* Complete the BETH environment preflight.
* Confirm the party holds enough BETH for the intended test.
* [Install and validate the DAR packages](/beth/get-started/install-and-validate-dars.md) required for redemption.
* Confirm the required Minter credential.
* Configure the approved BitSafe API.
* Obtain a valid Ethereum destination address for the selected network. The address must accept native ETH.
* Understand the approved minimums, limits, fees, and recovery path.

### 1. Validate the Ethereum destination

Before creating a withdrawal account:

* Confirm the destination address format and Ethereum network.
* Confirm that the address can receive native ETH. A contract address that rejects ETH makes the redemption fail.
* Confirm ownership or authorization under the organization’s controls.
* Use a second-person or system control for production destinations where required.

The account owner can change the destination address after account creation. A change does not affect a redemption that is already in progress.

A wrong-network or wrong-recipient destination may be irreversible.

### 2. Retrieve current withdrawal rules

Retrieve the current account rules from the BitSafe API of the selected environment:

```http
GET /beth/v1/account-contract-rules
```

Use the `wa_rules` entry for withdrawal accounts. Confirm that the response matches the selected environment, current DAR set, and intended operation.

### 3. Create or select a withdrawal account

Create a withdrawal account using the authenticated party, approved credential, current rules, and verified Ethereum destination. If reusing an existing account, confirm its destination and current status before selecting it.

A withdrawal account allows one withdrawal at a time. A second redemption from the same account fails until the first one is processed.

Created deposit and withdrawal accounts stay on the ledger until someone closes them. Do not create duplicate accounts as an automatic retry strategy.

### 4. Select BETH holdings

Query current BETH holdings and select sufficient inputs to cover the requested redemption according to the approved holding-selection policy.

Before submission:

* Confirm the total selected amount.
* Confirm the requested withdrawal amount.
* Check applicable limits.
* Preserve enough information for reconciliation.
* Avoid using holdings involved in another pending operation.

### 5. Submit the withdrawal

Submit the redemption through the supported BETH interface. Use a unique request or command identifier where available and retain the resulting Canton update or contract identifiers securely.

{% hint style="info" %}
Do not retry blindly after a timeout. First determine whether the original command committed, failed, or remains pending.
{% endhint %}

### 6. Monitor the lifecycle

Monitor the authoritative states for:

* Withdrawal submitted.
* BETH burned or otherwise consumed by the approved contract flow.
* Withdrawal account pending balance updated.
* Ethereum redemption transaction submitted.
* Ethereum block finalized.
* Completed, failed, cancelled, or escalated.

### 7. Verify and reconcile

A successful redemption should show:

1. The intended BETH amount no longer appears in the party’s available holdings.
2. The withdrawal account reflects the approved state transition.
3. ETH is delivered to the verified destination.
4. The Canton and Ethereum records reconcile to one redemption request.

The ETH arrives as an internal transfer from the bridge contract. The outer Ethereum transaction shows zero ETH value. Check the bridge `Withdraw` event or the internal transfers of the transaction.

### Source example

```bash
cargo run --example beth_credentials
cargo run --example beth_redeem_flow
```

### Troubleshooting

| Symptom                               | Check                                                                                  | Safe next action                                                      |
| ------------------------------------- | -------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| Destination rejected                  | Network, format, rule set, and account state                                           | Stop; do not substitute an address without repeating validation.      |
| Insufficient selectable holdings      | Available balance, pending operations, UTXO layout, and limits                         | Reconcile holdings before consolidating or splitting.                 |
| Second redemption fails               | Whether the account has a redemption in progress                                       | Wait until the first redemption is processed.                         |
| Submission times out                  | Canton update status and withdrawal-account state                                      | Determine commitment before retrying.                                 |
| BETH decreases but ETH is pending     | Withdrawal state, bridge pause state and limits, Ethereum finality, and service health | Follow the approved pending-withdrawal escalation path.               |
| ETH arrives with an unexpected amount | Requested amount, approved fees, bridge `Withdraw` event, and reconciliation record    | Escalate; do not make an offsetting transaction automatically.        |
| Destination does not accept ETH       | Whether the destination is a contract that rejects ETH                                 | Escalate with sanitized account, transaction, and update identifiers. |

### Technical sources

* [Redeem flow example](https://github.com/DLC-link/bitsafe-token-lib/blob/v0.2.0/examples/beth/redeem_flow.rs)
* [Examples guide](https://github.com/DLC-link/bitsafe-token-lib/blob/v0.2.0/examples/README.md)
* [Ethereum bridge contract](https://github.com/DLC-link/evm-asset-bridge)

### Related pages

* [Install and validate BETH DARs](/beth/get-started/install-and-validate-dars.md)
* [BETH authentication](/beth/get-started/authentication.md)
* [BETH batch transfers and UTXO management](/beth/guides/batch-transfers-and-management.md)
* [BETH errors, retries, and troubleshooting](/beth/concepts-and-reference/errors-retries-and-troubleshooting.md)
* [BETH compatibility and release notes](/beth/concepts-and-reference/compatibility-and-release-notes.md)

### Next step

👉 **Prepare for failures safely:** [BETH errors, retries, and troubleshooting](/beth/concepts-and-reference/errors-retries-and-troubleshooting.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.bitsafe.finance/beth/guides/redeem-beth.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
