Skip to content

docs(b20): align Tokenize Assets and Stablecoin guides with base-std guides - #1999

Merged
roethke merged 16 commits into
masterfrom
feat/b20-guides
Sep 25, 2026
Merged

roethke merged 16 commits into
masterfrom
feat/b20-guides

Conversation

@soheimam

Copy link
Copy Markdown
Contributor

What changed? Why?

Aligns the Build on Base B20 guides (Tokenize Assets, Issue Stablecoins) with the guides in base/base-std/docs/guides. Principle: Build on Base keeps its page shape (intro, Vibenet demo, verified TS/Solidity/CLI code group, See Also); base-std supplies the content (Before You Start, steps, verify signal, check-order error tables). Language follows the Legal B20 guidance doc: asset-agnostic framing, stock token as one worked example, no "security"/"equity" phrasing, multiplier framing retained.

Pages

  • Recover Funds: rewritten around seizeWithMemo (the base-std path) instead of deprecated burnBlocked + mint. totalSupply unchanged, Seized event, memo for case reference.
  • Cancel Blocked Units → Seize and Cancel Units: seize to treasury, then burnWithMemo. Redirect added.
  • Announce a Distribution → Announce a Corporate Action: asset-agnostic intro, base-std four scenarios (additional issuance, multiplier update, treasury burn, notice). Dividend remains the worked example. Redirect added.
  • Apply a Multiplier: title kept per Legal; adds Before You Start, the one-pending-update lifecycle, effectiveAt() > block.timestamp rule, pause guidance as a note.
  • New: Restrict Who Can Initiate Transfers (TRANSFER_EXECUTOR_POLICY), transfer agent as one example. No demo flow exists for it.
  • Block an Account: new section on attaching the blocklist to SEIZE_EXEMPT_POLICY so a hold is also recoverable.
  • Cobalt warning on both seize pages (live on Vibenet, mainnet after the hard fork).

Correctness

  • SEIZE_HOLDER_POLICY → SEIZE_EXEMPT_POLICY (post-Cobalt name) in concepts/policies.mdx, reference/constants.mdx, reference/errors.mdx, with the correct hash. Note: the upstream base-std seize guide still uses the old name.

Demos (only the two flows whose pages changed)

  • Vibenet engine v4: seize helper, SEIZE_* scopes, SEIZE_ROLE, AccountNotSeizable/InvalidReceiver/InvalidSender decoding.
  • Asset cancel flow: Fund → Block → Seize → Cancel. Stablecoin recover flow: Setup → Seize → Reissue. Live and offline mock paths both updated. All other flows untouched.

Samples and tooling

  • New verified fixtures stock-seize-*, stock-executor-*; stablecoin-recover-* rewritten. stock-cancel-* removed.
  • base-std pin moved from be6d045 to 1505323 in verify-doc-samples.sh and page notes (the old pin does not contain seizeWithMemo; the previously vendored lib did not compile the existing multiplier sample either).
  • Nav, redirects, base-std sync route-table.json (renamed pages plus a rule for restricting-transfer-initiators.md) and its test updated.

Notes to reviewers

  • Legal: titles and prose were checked against the B20 language guidance. "Schedule a Stock Split" was deliberately not adopted as a title; the multiplier framing stays. "Corporate action" is used only with asset-agnostic context and multiple examples, per that guidance.
  • The Asset "cancel" and Stablecoin "recover" demo flows should be clicked through on the preview; they compile and the engine unit test passes, but I could not exercise the live path headlessly. A live Vibenet B20 token was confirmed to answer SEIZE_ROLE() and SEIZE_EXEMPT_POLICY().
  • SEIZE_ROLE is now granted at demo token creation for all flows (one extra role grant); happy to narrow it to the two seize flows if preferred.
  • Live-evidence hashes in verification-manifest.json still reference the earlier Base Sepolia runs; regenerating needs a funded key.
  • One pre-existing failure in base-std-routing.test.mjs (errors.md → events.mdx expectation) exists on master and is unrelated.

How has it been tested?

  • node scripts/verify-doc-samples.js: 73 samples in sync.
  • npx tsc --noEmit (typescript samples) and forge build (solidity samples, base-std@1505323): clean.
  • node scripts/test-vibenet-engine.mjs: pass.
  • npm test: 85 pass, 0 fail.
  • JSX snippets compiled with esbuild; every internal link and nav entry in the changed sections resolves to a file.

Screenshots

Pending: preview build of the changed pages.

Generated with Toshi

…guides

- Rewrite Recover Funds around seizeWithMemo; replace Cancel Blocked Units
  with Seize and Cancel Units (seize to treasury, then burnWithMemo)
- Rename Announce a Distribution to Announce a Corporate Action and adopt
  the base-std four-scenario structure (issuance, multiplier, burn, notice)
- Restructure Apply a Multiplier with Before You Start, schedule lifecycle,
  and integrator rules from base-std; keep multiplier framing per Legal
- Add Restrict Who Can Initiate Transfers (TRANSFER_EXECUTOR_POLICY)
- Block an Account: attach the blocklist to SEIZE_EXEMPT_POLICY
- Fix stale SEIZE_HOLDER_POLICY references (renamed SEIZE_EXEMPT_POLICY)
- Vibenet engine v4: seize helper, SEIZE scopes/role, new error names;
  Asset cancel and Stablecoin recover demo flows now use seize
- Verified samples: new seize/executor fixtures, base-std pin -> 1505323
- Redirects, nav, base-std sync route table and tests updated
@mintlify

mintlify Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

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

Project Status Preview Updated
base 🟢 Ready View Preview Sep 25, 2026, 4:47 PM

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

@cb-heimdall

cb-heimdall commented Sep 23, 2026 •

Copy link
Copy Markdown
Collaborator

✅ Heimdall Review Status

Requirement Status More Info
Reviews ✅ 1/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

- Apply a Multiplier: instant override emits UIMultiplierUpdated with
  block.timestamp; list multiplier() and scaledBalanceOf() aliases
- Announce a Corporate Action: scope intro to B20 Asset; note burnBlocked
  is deprecated for treasury burns
- Seize and Cancel Units / Recover Funds: add InvalidSender, PolicyNotFound,
  Unauthorized errors; note seize is unaffected by other pauses; document
  seizing a balance held at the token's own address

Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
soheimam and others added 3 commits September 23, 2026 16:35
… Change to Holders

Keep the live URL so no redirect is needed, and use an asset-neutral title
that covers all four announce scenarios (issuance, multiplier update,
treasury burn, notice). Refresh agents.md and llms.txt.

Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
Co-authored-by: Toshi <toshi-noreply@coinbase.com>

# Conflicts:
#	docs/llms-full.txt
#	docs/llms.txt

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

i think we can drop this page entirely? someone who is interested in the details can look at the actual implementation in the base/base repo

@soheimam soheimam Sep 25, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

deleted specifications/b20/architecture.mdx

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

would be curious if we could maybe just put this at the top of the overview page

@soheimam soheimam Sep 25, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Moved index.mdx's Concepts / Build on Base / Reference / Changelog cards to the top

Addresses PR review feedback from @stephancill:
- Drop specifications/b20/architecture.mdx entirely; implementation
  detail belongs in base/base, not the docs site. Fix inbound links
  from concepts/policies.mdx and concepts/token-types.mdx.
- Merge specifications/b20/index.mdx into the top of
  specification-overview.mdx so B20 has one Overview page instead of
  a landing hub plus a separate overview article.
- Add redirects for both removed page paths to specification-overview.
- Regenerate docs/llms.txt, docs/llms-full.txt, docs/AGENTS.md.
specification-overview.mdx no longer has the old subsections these
links targeted (#asset, #stablecoin, #factory, #policy-registry,
#policy-integration, #seize, #memos, #pause, #supply-cap,
#contract-uri-erc-7572, #roles-model, #burn). Retarget each to the
concept or reference page that actually documents it now:

- #asset, #stablecoin -> concepts/token-types.mdx
- #roles-model, #pause -> concepts/roles-and-pause.mdx
- #policy-registry, #policy-integration -> concepts/policies.mdx
- #factory, #seize, #memos, #supply-cap, #contract-uri-erc-7572,
  #burn -> the matching reference/interfaces/ib20* page

Affects changelog.mdx, RwaDisclaimer.mdx (rendered on 9 Tokenize
Assets pages), and 8 Build on Base / Get Started guides. Verified
with a one-off link/anchor checker (not committed) that every
markdown and JSX href under the B20 surface resolves to a real
page and a real heading slug.
@cb-heimdall

Copy link
Copy Markdown
Collaborator

Review Error for b40150650-design @ 2026-09-25 06:06:28 UTC
User failed mfa authentication, either user does not exist or public email is not set on your github profile. \ see go/mfa-help

@roethke
roethke self-requested a review September 25, 2026 16:42
Resolve conflicts with #2013 (B20 overview consolidated at /specifications/b20):
- Keep master's canonical URL: overview lives at specifications/b20/index.mdx
- Keep this PR's content: merged hub cards into the overview, Architecture page removed
- Redirect /specifications/b20/specification-overview and /architecture to /specifications/b20
- Keep this PR's guide content, base-std@1505323 pins, and concept-page anchors
- Regenerate AGENTS.md, llms.txt, llms-full.txt

Co-authored-by: Toshi <toshi-noreply@coinbase.com>
@roethke
roethke merged commit f5187c6 into master Sep 25, 2026
16 checks passed
@roethke
roethke deleted the feat/b20-guides branch September 25, 2026 17:29

This branch was successfully deployed

1 active deployment
staging - docs — 7ff859f6 Deployed Sep 25, 2026 by mintlify[bot]
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.

6 participants