For the complete documentation index, see llms.txt. This page is also available as Markdown.

Personal security account

Set up a smart account for one person where any transfer you did not mean can be cancelled while it is still waiting to settle.

Where: Discover → Personal security, then Policies and On-chain access · You need: a daily wallet and a hardware (cold) wallet, both on Sepolia, with test ETH in the daily wallet

Goal

Your daily wallet can start a transfer, but nothing leaves the account until a time lock has passed and you approve it with a second wallet. If a phishing site or a compromised browser starts a transfer, you see it in Approvals as Blocked and cancel it before it can execute.

Who is involved

Duty
Wallet
Example

Owner (approves or cancels)

Hardware wallet

0x3B9d…A41e

Requester (starts transfers)

Daily browser wallet

0x8C4e…21bB

Broadcaster (submits signed transactions)

A separate hot wallet

0x5E60…c7D1

Recovery (takes ownership in an emergency)

A second cold wallet or a trusted person

0xF01c…9aB4

Time: about 30 minutes on Sepolia.

Before you start

  • Get Sepolia test ETH into the wallet that will deploy (the owner wallet pays gas for the deploy).

  • Decide your time lock. One day is a good default: long enough to notice a transfer, short enough for daily use.

  • Owner and Recovery must be different addresses. Broadcasters must also be different from the owner.

Phase 1: Deploy the account

  1. Open Discover and choose Personal security. Select Set up Personal Security.

  2. In Deploy Smart Account, enter an Account name (for example Personal Vault). The Network is read from your connected wallet. Select Continue.

  3. On Protocol Security, set:

    • Owner: your hardware wallet address.

    • Broadcaster addresses: your separate hot wallet. Use + Add another only if you want more than one.

    • Recovery: your cold-wallet or trusted-party address.

    • Time-lock 1 and Unit Days.

  4. Leave Advanced as it is. Select Deploy Smart Account and confirm in your wallet.

Deploy Smart Account step 2, Protocol Security, with Owner, Broadcaster addresses, Recovery and Time-lock fields
Protocol Security: the three protected roles and the time lock are set at deploy.

The account lands as a Vault. It can receive assets but cannot send anything yet. That is the intended starting state (why).

Phase 2: Check Security

  1. Inside the account, open Policies → Security.

  2. Confirm Owner, Recovery, Time lock (1d) and Broadcasters are what you set.

  3. If you skipped Recovery at deploy, select Set recovery now and sign.

Policies Security page showing Owner, Recovery, Time lock and Broadcasters
Security is the baseline every other policy builds on.

Phase 3: Confirm the transfer actions

  1. Open Policies → Actions.

  2. Confirm NATIVE_TRANSFER (__bloxchain_native_transfer__()) is listed. It is registered on every account at deploy, so there is nothing to add.

  3. If you hold ERC-20 tokens, confirm ERC20_TRANSFER (transfer(address,uint256)) is listed too. It is registered at deploy as well.

  4. Both rows read Flow incomplete. That is expected on a new account: the functions exist, but no role may use them and no recipient is allowed yet. Permissions, gates and the allowlist are the next three phases.

Add action is only for functions of your own, such as mint(address,uint256) on a token you govern. You do not need it here.

Phase 4: Create a requester role

  1. Open On-chain access → Roles and select Create role.

  2. Role name Daily Requester, Max wallets 1. Save and sign.

  3. Open the new role and select Manage role signers. Add your daily wallet 0x8C4e…21bB.

Keep the Owner role on your hardware wallet. It does not need a custom role: the owner approves and cancels delayed requests.

Phase 5: Assign permissions and gates

  1. Back in Policies → Actions, open NATIVE_TRANSFER and select Manage permissions.

  2. On the Delayed release tab, at the Request step select Assign role and choose Daily Requester. Leave the Approval steps with Owner. Do not assign anything on the Signed approval or One signature tabs.

  3. Review and sign. Repeat for ERC20_TRANSFER if you hold tokens.

  4. Open Policies → Gates. Under Needs attention, select Edit, grant the gate for Daily Requester, then confirm in Update gates and sign.

Gates are permanent for a role. If you ever want to revoke the daily wallet completely, remove the Daily Requester role in Roles; that clears its gates.

Phase 6: Allowlist recipients

  1. Open Policies → Allowed recipients and select Add recipient.

  2. Add the addresses you actually pay: your exchange deposit address, a friend, your other wallet. Sign the batch.

An empty list means no transfer can be requested at all. Only allowlisted addresses appear in the Recipient picker of a new request.

Phase 7: Test it with the daily wallet

  1. Send a little Sepolia ETH to the account (Assets → Receive).

  2. Connect the daily wallet. Select New request → Transfer, pick the native asset, a small Amount, and an allowlisted Recipient. Select Submit request (the Wallet path) and confirm.

  3. Open Approvals. The row shows Blocked 1d in the State column. This is the window in which you would notice a transfer you did not start.

Approvals list with one pending transfer in the Blocked state
A delayed request waits in Approvals until the time lock passes.
  1. Now practise cancelling. Switch to the hardware wallet, open the row, and in Approve request select Cancel. Confirm in your wallet. The request moves to History as Cancelled.

Approve request dialog with Approve and Cancel buttons and the TIMELOCK status
Cancel is available while the request is blocked; Approve unlocks when the time lock has passed.
  1. Repeat step 2 with the daily wallet. For the test you can shorten the wait: in Security → Change time lock set 15 Minutes, sign, and wait. When the row reads Ready, open it with the hardware wallet and select Approve. The transfer executes and appears in History as Executed.

  2. Set the time lock back to 1 Days before you fund the account for real.

Checklist

Last updated

Was this helpful?