Skip to content

docs(changelog): add Cobalt B20 seize surface + burnBlocked deprecation entry - #199

Merged
stephancill merged 2 commits into
mainfrom
changelog/cobalt-b20-seize
Aug 11, 2026
Merged

docs(changelog): add Cobalt B20 seize surface + burnBlocked deprecation entry#199
stephancill merged 2 commits into
mainfrom
changelog/cobalt-b20-seize

Conversation

@stephancill

Copy link
Copy Markdown
Contributor

Summary

Stacked on #197 (the changelog/ dir + convention). Adds the second entry: the Beryl to Cobalt seize surface and the advisory deprecation of burnBlocked, on the shared IB20 surface (both B20 Asset and Stablecoin).

  • New entry: changelog/cobalt/b20-seize-surface.md
  • Index: linked from changelog/README.md

What lands at Cobalt (documented)

New, all dialable only once Cobalt activates:

  • seizeWithMemo(address,address,uint256,bytes32) 0xf916d81b — admin balance reassignment (a transfer, not a burn)
  • SEIZE_ROLE() 0x3c7e9ba5, SEIZE_HOLDER_POLICY() 0xb279d311, SEIZE_RECEIVER_POLICY() 0xb31da27f
  • Seized(address,address,address,uint256) event, AccountNotSeizable(address) 0x91dbbc8d error
  • PausableFeature.SEIZE (ordinal 3, bit 1 << 3)

burnBlocked(address,uint256) 0xec0cf3dc is deprecated but unchanged — same selector, events, and behavior; still callable. Migration is seize-to-treasury then burn, noting the distinct role / pause vector / policy scope.

Selectors, topic0s, and role/policy constant values were verified with cast sig / cast keccak against src/interfaces/IB20.sol + the frozen base/base ABIs (common/abi/v1.rs, common/abi/v2.rs).

Notes for reviewers

@github-actions

Copy link
Copy Markdown

Interface Coverage

✅ All interface functions have test coverage.

@github-actions

github-actions Bot commented Aug 11, 2026

Copy link
Copy Markdown

📊 Forge Coverage (src/lib/)

🟡 ≥95% across all metrics — some metrics below 99%.

File Lines Stmts Branches Funcs
🟡 B20FactoryLib.sol 97.70% 98.00% 100.00% 95.00%
🔴 test/lib/ForceFeeder.sol 0.00% 0.00% 100.00% 0.00%
🔴 test/lib/PrecompileProbe.sol 0.00% 0.00% 0.00% 0.00%
🟢 MockActivationRegistry.sol 100.00% 100.00% 100.00% 100.00%
🟢 MockActivationRegistryStorage.sol 100.00% 100.00% 100.00% 100.00%
🟢 MockB20.sol 100.00% 100.00% 100.00% 100.00%
🟢 MockB20Asset.sol 100.00% 100.00% 100.00% 100.00%
🟡 MockB20Factory.sol 98.96% 99.10% 100.00% 100.00%
🟢 MockB20Stablecoin.sol 100.00% 100.00% 100.00% 100.00%
🟢 MockB20Storage.sol 100.00% 100.00% 100.00% 100.00%
🟡 MockPolicyRegistry.sol 100.00% 99.54% 97.67% 100.00%
🟢 MockPolicyRegistryStorage.sol 100.00% 100.00% 100.00% 100.00%
Total 97.07% 97.52% 98.16% 97.00%

Full report: download artifact. To browse locally: make coverage (runs forge coverage + genhtml + opens the HTML report).

@github-actions

github-actions Bot commented Aug 11, 2026

Copy link
Copy Markdown

✅ Fork tests: all 721 passed

base/base is fully in sync with the base-std spec.

Base automatically changed from changelog/cobalt-b20-asset-scheduled-multiplier-updates to main August 11, 2026 16:12

@robriks robriks 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.

Nice work, just one Q

- **Role:** caller holds `SEIZE_ROLE` (else `AccessControlUnauthorizedAccount`).
- **Pause:** `SEIZE` not paused (else `ContractPaused(SEIZE)`).
- **Addresses:** `to != address(0)` and `from != to` (else `InvalidReceiver`); `from != address(0)`
(else `InvalidSender`).

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.

last I checked we are not explicitly checking that from != address(0), does it truly throw InvalidSender or does it fall through to some default like AccountNotSeizable || InsufficientBalance ?

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.

this is a change that was merged recently

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.

okay gotcha, thanks for clarifying!

stephancill and others added 2 commits August 11, 2026 21:06
…on entry

Adds changelog/cobalt/b20-seize-surface.md documenting the Beryl -> Cobalt seize surface (seizeWithMemo, SEIZE_ROLE, SEIZE_HOLDER_POLICY, SEIZE_RECEIVER_POLICY, Seized event, AccountNotSeizable error, SEIZE pause vector) shared by B20 Asset and Stablecoin, and the advisory deprecation of burnBlocked (unchanged and still dialable). Links it from the changelog index.

Co-authored-by: OpenCode <opencode-noreply@coinbase.com>
…ER_POLICY

Co-authored-by: OpenCode <opencode-noreply@coinbase.com>
@stephancill
stephancill force-pushed the changelog/cobalt-b20-seize branch from 2a4574f to 34fffce Compare August 11, 2026 19:08
@stephancill
stephancill requested a review from robriks August 11, 2026 19:27

@robriks robriks 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.

LGTM

@stephancill
stephancill merged commit caa41d6 into main Aug 11, 2026
10 checks passed
@stephancill
stephancill deleted the changelog/cobalt-b20-seize branch August 11, 2026 19:37
rayyan224 added a commit that referenced this pull request Aug 11, 2026
…e was squash-merged (#199) and deleted

Co-Authored-By: Claude <noreply@anthropic.com>

# Conflicts:
#	changelog/README.md
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.

2 participants