> For the complete documentation index, see [llms.txt](https://docs.bloxchain.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bloxchain.app/platform-bloxchain.app/use-cases/treasury.md).

# Treasury & transfers

**Audience:** Admin · **Time:** \~45 min (testnet)

Outbound ETH or ERC20 with **separation of duties**: one wallet requests, another approves. Use for treasury payouts, payroll-style batches (repeat submit per payee), or vendor payments.

## What you build

| Piece         | Recommendation                                               |
| ------------- | ------------------------------------------------------------ |
| **Operation** | Native transfer and/or ERC20 transfer                        |
| **Roles**     | `Treasury Requester`, `Treasury Approver` (new custom roles) |
| **Workflow**  | Meta request + approve                                       |
| **Allowlist** | Recipients (native) and/or contract targets (token)          |

## Prerequisites

* [Import](/platform-bloxchain.app/contracts/import.md) or [deploy](/platform-bloxchain.app/contracts/deploy.md) an Account workspace (contract tab).
* Owner wallet connected on the contract network.
* Two test wallets (requester + approver) in [Saved wallets](/platform-bloxchain.app/account/saved-wallets.md).

***

## Step 1 — Security baseline

**Deployment → Security** ([Security settings](/platform-bloxchain.app/overview-1/security-settings.md))

| Setting         | Recommendation                                                                          |
| --------------- | --------------------------------------------------------------------------------------- |
| **Owner**       | Your admin wallet (already set on deploy)                                               |
| **Broadcaster** | Optional — add if approver signs off-chain and a separate wallet pays gas to finalize   |
| **Recovery**    | Optional testnet practice — [Recovery & incidents](/platform-bloxchain.app/recovery.md) |
| **Timelock**    | Skip for first testnet run; use **Time-delay** preset later for production              |

***

## Step 2 — Register transfer operation(s)

**Deployment → Operations → Register** ([Operations](/platform-bloxchain.app/overview-1/operations.md))

### Option A — Native ETH (recommended first)

| Field                 | Value                             |
| --------------------- | --------------------------------- |
| Operation name        | `Native Transfer`                 |
| Function signature    | `__bloxchain_native_transfer__()` |
| Workflow capabilities | **Meta request + approve**        |

Then **Sign** → **Execute**.

> **Already registered?** Native transfer (`0xd8cb519d`) is often pre-registered on deploy. If it appears in the list, skip registration and go to Step 3.

### Option B — ERC20 transfer

| Field                 | Value                       |
| --------------------- | --------------------------- |
| Operation name        | `ERC20 Transfer`            |
| Function signature    | `transfer(address,uint256)` |
| Workflow capabilities | **Meta request + approve**  |

**Sign** → **Execute**.

***

## Step 3 — Create roles

**Deployment → Roles** ([Roles & members](/platform-bloxchain.app/overview-1/roles-and-members.md))

| Role name            | Create?      | Notes                                              |
| -------------------- | ------------ | -------------------------------------------------- |
| `Treasury Requester` | **Add role** | Payroll / ops wallets                              |
| `Treasury Approver`  | **Add role** | Finance / admin — not the same wallet as requester |
| Owner                | Protected    | Do not rename — use for admin config only          |

**Deployment → Members** — assign wallet addresses to each role.

***

## Step 4 — Grant permissions

Open **Policy by operation** or **Permissions** from the operation detail ([Permissions](/platform-bloxchain.app/overview-1/permissions.md)).

### Native Transfer

| Role               | Pending Request | Sign and approve request | Finalize approved request |
| ------------------ | :-------------: | :----------------------: | :-----------------------: |
| Treasury Requester |        ✓        |             —            |             —             |
| Treasury Approver  |        —        |             ✓            |             ✓             |

If you use a **Broadcaster**, grant **Finalize approved request** to Broadcaster instead of the approver wallet.

### ERC20 Transfer

Same matrix as native transfer.

**Sign** → **Execute** role-config changes when prompted.

***

## Step 5 — Allowlists

**Allowlists** ([Allowlists](/platform-bloxchain.app/overview-1/allowlists.md))

| List                 | Operation / selector | Add                               |
| -------------------- | -------------------- | --------------------------------- |
| **Recipients**       | Native Transfer      | Each payee EOA (employee, vendor) |
| **Contract targets** | ERC20 Transfer       | Your token contract address       |

Empty list = **deny all** for that path. Add every address you expect to pay before testing.

***

## Step 6 — Connect your application

* Point SDK / integrations at the **Account workspace** address ([Connect your application](/platform-bloxchain.app/overview-1/connect-your-application.md)).
* Whitelist token contracts for ERC20 payouts.
* Assign automation wallets to `Treasury Requester` only if they should submit — never both request and approve on one production wallet.

***

## Step 7 — Test as members

1. Connect **requester** wallet → [Submit request](/platform-bloxchain.app/overview/submit-request.md).
   * Operation: **Native Transfer**
   * Recipient: allowlisted address
   * Amount: small test value
2. Connect **approver** wallet → [Approve and sign](/platform-bloxchain.app/overview/approve-and-sign.md) → finalize if required.
3. Confirm **COMPLETED** in [Transaction history](/platform-bloxchain.app/overview/history.md) and balance on explorer.
4. **Batch / payroll:** repeat submit for each payee (same allowlist).

Verify [My access](/platform-bloxchain.app/overview/my-access.md) on each wallet matches the permission matrix above.

***

## Checklist

* [ ] Transfer operation registered (or native already present)
* [ ] Requester ≠ approver wallet
* [ ] Payees on recipient allowlist
* [ ] Token contract on contract-target allowlist (ERC20)
* [ ] End-to-end test on testnet
* [ ] [Production readiness](/developers/production-readiness.md) before mainnet volume

## Related

* [Use cases](/platform-bloxchain.app/use-cases.md) · [Configure overview](/platform-bloxchain.app/overview-1.md) · [RBAC best practices](/developers/rbac-best-practices.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 dynamically by asking a question.

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

```
GET https://docs.bloxchain.app/platform-bloxchain.app/use-cases/treasury.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
