# Agent instructions

You are advising on UX and product design for **ERC-6147: Guard of NFT/SBT**.
This document is the authoritative designer guide from EIPs for Designers.

- Treat **MUST NOT** items as hard constraints unless the user explicitly overrides.
- Use the **Vocabulary** section for UI copy; do not use avoided terms.
- Cite the canonical source URL when giving recommendations.
- Use the official specification only for protocol implementation detail, not as primary UX guidance.

---

# ERC-6147: Guard of NFT/SBT

Source: https://www.eipsfordesigners.com/standards/ERC-6147
Agent brief: https://www.eipsfordesigners.com/standards/ERC-6147/agent.md
Machine-readable JSON: https://www.eipsfordesigners.com/api/standards/ERC-6147
Last reviewed: 2026-04-05
Last updated: 2026-04-05

| Field | Value |
| --- | --- |
| Status | Final |
| Chain | both |
| Category | Security & Trust |
| Journey stages | Asset Management |
| Detailed guide | Yes |
| Official specification | https://eips.ethereum.org/EIPS/eip-6147 |
| Discussion search | https://ethereum-magicians.org/search?q=ERC-6147 |

## UX Impact

NFT owners can set a 'guard' address that controls transfers — enables anti-theft (cold wallet guard), lending collateral, SBT recovery. Design implications: show 'Protected by Guard' indicator, display guard expiry, add guard management UI for setting/removing. Design decisions: how to communicate transfer restrictions — warning when guard active, explain why transfer button disabled, guard vs owner permission clarity.

## Summary

ERC-6147 adds a "guard" role to NFTs that can prevent transfers even by the owner. Think of it as a freeze switch that protects against theft, enables recovery mechanisms, and supports safe lending. The guard can allow or block transfers without taking ownership, perfect for custodians, security services, or recovery systems.

## For Designers

- You can design UI that delivers guard blocks transfers, gives owner time to recover.
- You can design UI that delivers guard can freeze while owner retains full ownership.
- You can design UI that delivers set yourself as guard.

## Applicability

### When to Use

- Your product addresses: stolen NFT can be transferred before owner reacts.
- Your product addresses: no way to freeze NFT without giving up ownership.
- The flow should deliver: guard blocks transfers, gives owner time to recover.
- You are designing a guard status display experience with visible states and recovery paths.

### When to Avoid

- Explain: "Guard can block ALL transfers but cannot take ownership".
- Require expiration or backup recovery mechanism.
- Prominent warning: "This NFT has transfer restrictions".
- Wrong-address or approval mistakes are not recoverable in your product context.

## Problems It Solves

### Stolen NFT can be transferred before owner reacts

Impact: critical

Old way: Thief immediately sells or transfers stolen NFT, owner loses it

New way: Guard blocks transfers, gives owner time to recover

### No way to freeze NFT without giving up ownership

Impact: high

Old way: To prevent transfers, must transfer to custodian (lose ownership)

New way: Guard can freeze while owner retains full ownership

### Lending NFT risks losing it to bad actor

Impact: high

Old way: Lend to friend, they refuse to return it

New way: Set yourself as guard, can always recover even if "owner" changes

### No recovery mechanism for lost access

Impact: medium

Old way: Lost wallet key = lost NFTs forever

New way: Trusted guard can facilitate recovery to new wallet

## MUST NOT (Anti-Patterns)

- **Not explaining what guard role means** (critical)
  - Why: Users don't understand the power they're granting
  - Instead: Explain: "Guard can block ALL transfers but cannot take ownership"

- **Setting guard without recovery option** (critical)
  - Why: If guard address is lost, NFT stuck forever
  - Instead: Require expiration or backup recovery mechanism

- **Hiding guard status on marketplaces** (critical)
  - Why: Buyer doesn't know they can't transfer after purchase
  - Instead: Prominent warning: "This NFT has transfer restrictions"

- **Making transfer requests confusing** (high)
  - Why: Users don't understand the approval process
  - Instead: Clear step-by-step: request → verification → approval → transfer

- **No emergency lock for theft situations** (high)
  - Why: Guard can't react fast enough to theft
  - Instead: Instant lock capability for guards, unlock requires verification

## UX Patterns

### Guard Status Display

Show protection status on NFT

User flow:

- User views guarded NFT
- See protection status prominently
- View who the guard is
- Understand transfer restrictions
- Can request transfer (guard must approve)
- Feel secure against theft

Mockup registry key: `concept/nft-gallery` (React UI on the live standard page).

### Set Guard Interface

Enable protection by assigning guard

User flow:

- User wants to protect valuable NFT
- Choose guard type
- Select protection service or enter address
- Review service details
- Enable protection on-chain
- NFT now requires guard approval for transfers

Mockup registry key: `concept/wallet` (React UI on the live standard page).

### Transfer Request Flow

Request guard approval for transfer

User flow:

- Owner initiates transfer of guarded NFT
- System submits request to guard
- Guard verifies ownership
- Optional cooldown period
- Guard approves or denies
- Transfer completes if approved

Mockup registry key: `concept/nft-gallery` (React UI on the live standard page).

### Guard Dashboard

Guard manages protected NFTs

User flow:

- Guard opens dashboard
- See all protected NFTs
- Review pending transfer requests
- Approve legitimate transfers
- Emergency lock if theft reported
- Manage protection settings

Mockup registry key: `concept/nft-gallery` (React UI on the live standard page).

## UI Components

### GuardStatusIndicator

Shows protection status on NFT
States: unguarded, guarded, locked, pending-transfer
Props: guard, expiration, status

### SetGuardForm

UI for assigning guard to NFT
States: selecting, confirming, setting, active
Props: nft, guardOptions, onSetGuard

### TransferRequestFlow

Request and track transfer approval
States: requesting, pending, approved, denied
Props: nft, recipient, guard, status

### GuardControlPanel

Guard manages protected assets
States: idle, reviewing, locking, unlocking
Props: guardedNFTs, pendingRequests, onAction

## On Monad

### Guard Actions

Ethereum: Lock/unlock takes 15+ seconds

Monad: Sub-second guard actions

Design implication: Emergency locks can be truly instant

### Transfer Approval

Ethereum: Approval + transfer = 2 slow transactions

Monad: Both actions feel instant

Design implication: Smoother transfer request flow

### Status Queries

Ethereum: Checking guard status can be slow

Monad: Instant guard status checks

Design implication: Real-time protection status in all views

### Batch Protection

Ethereum: Guarding multiple NFTs is expensive/slow

Monad: Batch guard assignment practical

Design implication: Protect entire collection with one action

## Key Takeaways

- ERC-6147 = guard role can block transfers without ownership
- Perfect for theft protection and recovery
- Always explain guard powers clearly to users
- Show guard status prominently on marketplaces
- On Monad: instant emergency locks for theft response

## Technical Notes

ERC-6147 extends ERC-721 with setGuard(tokenId, guard) and getGuard(tokenId). When a guard is set, transferFrom checks guard approval before executing. Guard can call approve transfers or remove themselves. The standard includes an optional expires field for time-limited guard assignments. Works with soulbound tokens for permanent non-transferability.

## Official specification (reference only)

https://eips.ethereum.org/EIPS/eip-6147
