Skip to content

docs: add B20 concept docs - #1773

Open
soheimam wants to merge 1 commit into
masterfrom
docs/b20-concepts
Open

docs: add B20 concept docs#1773
soheimam wants to merge 1 commit into
masterfrom
docs/b20-concepts

Conversation

@soheimam

@soheimam soheimam commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

What changed? Why?

Added b20 concepts

@mintlify

mintlify Bot commented Aug 5, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
base 🟢 Ready View Preview Aug 5, 2026, 7:21 PM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@cb-heimdall

Copy link
Copy Markdown
Collaborator

🟡 Heimdall Review Status

Requirement Status More Info
Reviews 🟡 0/1
Denominator calculation
Show calculation
1 if user is bot 0
1 if user is external 0
2 if repo is sensitive 0
From .codeflow.yml 1
Additional review requirements
Show calculation
Max 0
0
From CODEOWNERS 0
Global minimum 0
Max 1
1
1 if commit is unverified 0
Sum 1

@roethke roethke left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two issues, both from SEIZE_RECEIVER_POLICY (the 6th policy scope) being omitted. Inline with comments left in #1766.

Separately, on docs.json: there is no redirect for the exact old path /base-chain/specs/upgrades/beryl/b20 (the deleted single-page spec lived there). Redirects were added for /base-chain/b20, /base-chain/b20/*, and …/beryl/b20/{concepts,implementation,reference}/*, but not the bare …/beryl/b20, so that URL — and old deep links to its anchors (#multiplier, #policy-registry, #pause, #announcements), will 404 after merge.

| `TRANSFER_RECEIVER_POLICY` | `to` | `transfer`, `transferFrom`, and memo variants |
| `TRANSFER_EXECUTOR_POLICY` | `msg.sender` | `transferFrom` only when `msg.sender != from` |
| `MINT_RECEIVER_POLICY` | `to` | `mint` and `mintWithMemo` |
| `SEIZE_HOLDER_POLICY` | `from` | `seizeWithMemo`; the holder is seizable only when not authorized by this policy |

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing the 6th policy scope. B20Constants.sol / IB20.sol:274 define SEIZE_RECEIVER_POLICY (gates the seize to recipient), so there are 6 scopes, not 5. Add a row here and update the bytes32[5] array below (~line 75) to include it — as written the audit sample silently skips a real scope.


## Freeze and seize

`seizeWithMemo` transfers a holder's balance to a destination in one admin operation. It skips allowance and transfer policies; its membership check is `SEIZE_HOLDER_POLICY`.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seizeWithMemo's membership check isn't only SEIZE_HOLDER_POLICY — the recipient to is also gated by SEIZE_RECEIVER_POLICY (IB20.sol:460–467, reverts PolicyForbids(SEIZE_RECEIVER_POLICY, …)). Worth adding so the lifecycle description matches the current interface.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants