From a24db292b0228e84628ace7785bf07a7b5bbe633 Mon Sep 17 00:00:00 2001 From: Alastair Ong Date: Fri, 14 Aug 2026 15:03:47 -0700 Subject: [PATCH 1/2] =?UTF-8?q?Pin=20tCBRS=20on=20Base=20=E2=80=94=2041=20?= =?UTF-8?q?->=2042?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cerebras Systems deployed on Base 2026-08-14 via `sft-ops create-sft`, wired onto the shared V4 authoriser and handed to the Base token-owner Safe. receipt 0xAe8aD2340aa19749A0b935C7F2245823fC4F14FB receiptVault 0xBeB0c2011bd5520A0998b69132E9245E39Ac5D1D wrappedTokenVault 0xB457cfBF31995d3aAAa704dA9999cC0b011820ca Base only for now; the Ethereum and HyperEVM tables stay at 41 so a dispatch of `20260807-deploy-missing-tokens` against this branch selects exactly CBRS. Their pins follow in the next commit once the runs land. Verified against live Base on 42 rows: testConfigMatchesLiveBase, testWrappedDerivationHoldsOnBase, testConfigAlignsWithBaseTokenTable, testProdReceiptVaultsUniformOwnership and ...ShareUniformAuthoriser all pass, as do the 22 copy-script selection tests. The single expected failure is the 41 != 42 length divergence. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01H5q7zVya3CF5RWAkD3EYea --- src/lib/LibProdTokenConfig.sol | 7 ++++--- src/lib/LibTokenInvariants.sol | 18 +++++++++++++++--- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/lib/LibProdTokenConfig.sol b/src/lib/LibProdTokenConfig.sol index 6e100ff5..2581ca97 100644 --- a/src/lib/LibProdTokenConfig.sol +++ b/src/lib/LibProdTokenConfig.sol @@ -24,7 +24,7 @@ struct TokenConfig { } /// @title LibProdTokenConfig -/// @notice The canonical name/symbol table for the 41 ST0x production +/// @notice The canonical name/symbol table for the 42 ST0x production /// tokens, captured verbatim from the live Base receipt vaults so a new /// chain's token set can be deployed byte-identical to Base. This is the /// deploy-input companion to `LibTokenInvariants` (which holds the deployed @@ -42,10 +42,10 @@ struct TokenConfig { /// means carrying that space forward; the parity pin would flag it as a /// divergence otherwise. library LibProdTokenConfig { - /// @notice The 41 production token deploy configs, Base table order. + /// @notice The 42 production token deploy configs, Base table order. /// @return configs The name/symbol table. function productionTokenConfigs() internal pure returns (TokenConfig[] memory configs) { - configs = new TokenConfig[](41); + configs = new TokenConfig[](42); configs[0] = TokenConfig("MSTR", "MicroStrategy Incorporated ST0x", "tMSTR"); configs[1] = TokenConfig("TSLA", "Tesla Inc ST0x", "tTSLA"); configs[2] = TokenConfig("COIN", "Coinbase Global Inc ST0x", "tCOIN"); @@ -88,5 +88,6 @@ library LibProdTokenConfig { configs[38] = TokenConfig("BABA", "Alibaba Group Holding Limited ADR ST0x", "tBABA"); configs[39] = TokenConfig("TQQQ", "ProShares UltraPro QQQ ST0x", "tTQQQ"); configs[40] = TokenConfig("FTF", "Franklin Limited Duration Income Trust ST0x", "tFTF"); + configs[41] = TokenConfig("CBRS", "Cerebras Systems Inc. ST0x", "tCBRS"); } } diff --git a/src/lib/LibTokenInvariants.sol b/src/lib/LibTokenInvariants.sol index 21debd43..43c3061d 100644 --- a/src/lib/LibTokenInvariants.sol +++ b/src/lib/LibTokenInvariants.sol @@ -389,14 +389,22 @@ library LibTokenInvariants { /// https://basescan.org/address/0x9bDe199Ac6E7E050334306D9267c93e3D6d38333 address internal constant FTF_WRAPPED_TOKEN_VAULT = address(0x9bDe199Ac6E7E050334306D9267c93e3D6d38333); - /// @notice Returns the 41 production token instance triples on Base, in + // ---- tCBRS / wtCBRS — Cerebras Systems Inc. ST0x ---- + /// https://basescan.org/address/0xAe8aD2340aa19749A0b935C7F2245823fC4F14FB + address internal constant CBRS_RECEIPT = address(0xAe8aD2340aa19749A0b935C7F2245823fC4F14FB); + /// https://basescan.org/address/0xBeB0c2011bd5520A0998b69132E9245E39Ac5D1D + address internal constant CBRS_RECEIPT_VAULT = address(0xBeB0c2011bd5520A0998b69132E9245E39Ac5D1D); + /// https://basescan.org/address/0xB457cfBF31995d3aAAa704dA9999cC0b011820ca + address internal constant CBRS_WRAPPED_TOKEN_VAULT = address(0xB457cfBF31995d3aAAa704dA9999cC0b011820ca); + + /// @notice Returns the 42 production token instance triples on Base, in /// the order they were deployed. This is the structured source of truth /// the flat `productionReceiptVaults()` accessor derives from; consumers /// that need the receipt / wrapped-vault legs or the underlying join key /// (cross-chain parity, per-token config checks) iterate this instead. - /// @return tokens The 41 production token instances on Base. + /// @return tokens The 42 production token instances on Base. function productionTokensBase() internal pure returns (TokenInstance[] memory tokens) { - tokens = new TokenInstance[](41); + tokens = new TokenInstance[](42); tokens[0] = TokenInstance("MSTR", MSTR_RECEIPT, MSTR_RECEIPT_VAULT, MSTR_WRAPPED_TOKEN_VAULT); tokens[1] = TokenInstance("TSLA", TSLA_RECEIPT, TSLA_RECEIPT_VAULT, TSLA_WRAPPED_TOKEN_VAULT); tokens[2] = TokenInstance("COIN", COIN_RECEIPT, COIN_RECEIPT_VAULT, COIN_WRAPPED_TOKEN_VAULT); @@ -448,6 +456,10 @@ library LibTokenInvariants { tokens[38] = TokenInstance("BABA", BABA_RECEIPT, BABA_RECEIPT_VAULT, BABA_WRAPPED_TOKEN_VAULT); tokens[39] = TokenInstance("TQQQ", TQQQ_RECEIPT, TQQQ_RECEIPT_VAULT, TQQQ_WRAPPED_TOKEN_VAULT); tokens[40] = TokenInstance("FTF", FTF_RECEIPT, FTF_RECEIPT_VAULT, FTF_WRAPPED_TOKEN_VAULT); + // Deployed on Base 2026-08-14 by `sft-ops create-sft`. Missing on + // Ethereum and HyperEVM until `20260807-deploy-missing-tokens` is + // dispatched against each — cross-chain parity is red until then. + tokens[41] = TokenInstance("CBRS", CBRS_RECEIPT, CBRS_RECEIPT_VAULT, CBRS_WRAPPED_TOKEN_VAULT); } /// @notice Returns the production token instance triples on Ethereum From 77cb124fe8732afa7a93a3e31d2c41beb63e7821 Mon Sep 17 00:00:00 2001 From: Alastair Ong Date: Fri, 14 Aug 2026 15:17:37 -0700 Subject: [PATCH 2/2] =?UTF-8?q?Pin=20tCBRS=20on=20Ethereum=20and=20HyperEV?= =?UTF-8?q?M=20=E2=80=94=20all=20three=20tables=2042?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `20260807-deploy-missing-tokens` dispatched against both chains from this branch, selecting exactly one token each: Ethereum run 31845108154 "Copying 1 Base tokens onto chain id 1" HyperEVM run 31845492796 "Copying 1 Base tokens onto chain id 999" receipt 0x8Ea1ba9Fc0CF7338B41DdDa5B778a9118274AEA8 receiptVault 0x75E0d127794b9C26eE35c55fbaBcc41c53Ccb37C wrappedTokenVault 0x15925E1c19c0F0d392F6FCb40FdE9144Dd823962 Both chains landed on identical addresses, as FTF and the 2026-08-12 batch did. Verified on chain on both before pinning: name "Cerebras Systems Inc. ST0x", symbol tCBRS, owner the token-owner Safe 0x3840aeDa...0329, authorizer the V4 clone 0x66566cc9...8157, receipt() matching the pin. LibTokenInvariants suite is fully green at 42 rows. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01H5q7zVya3CF5RWAkD3EYea --- src/lib/LibTokenInvariants.sol | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/lib/LibTokenInvariants.sol b/src/lib/LibTokenInvariants.sol index 43c3061d..960b95ff 100644 --- a/src/lib/LibTokenInvariants.sol +++ b/src/lib/LibTokenInvariants.sol @@ -465,7 +465,7 @@ library LibTokenInvariants { /// @notice Returns the production token instance triples on Ethereum /// mainnet — Base's underlyings in Base row order, so the tables pair by /// index as well as by key. - /// @return tokens The 41 production token instances on Ethereum. + /// @return tokens The 42 production token instances on Ethereum. function productionTokensEthereum() internal pure returns (TokenInstance[] memory tokens) { // Deployed on Ethereum mainnet 2026-07-22 by // `20260706-deploy-tokens-ethereum` (manual-broadcast run @@ -475,7 +475,7 @@ library LibTokenInvariants { // run's logged (underlying, receipt, receiptVault, wrapped) tuples. // Order and underlyings match Base row-for-row (the cross-chain // parity pin asserts this). - tokens = new TokenInstance[](41); + tokens = new TokenInstance[](42); tokens[0] = TokenInstance( "MSTR", address(0xE3772C8695c2cf3dcAA2Dd29759f4Bb91a342763), @@ -738,12 +738,22 @@ library LibTokenInvariants { address(0x334ccaD2e7D774F5e6A13437977dD0878926deF8), address(0x710A14a41a8Ea2e25376124C48bf9cAdc1E69be5) ); + // CBRS, deployed 2026-08-14 by `20260807-deploy-missing-tokens` (run + // 31845108154) — the sole token the dispatch selected. Wired onto this + // chain's V4 authoriser and handed to its token-owner Safe in the same + // broadcast. + tokens[41] = TokenInstance( + "CBRS", + address(0x8Ea1ba9Fc0CF7338B41DdDa5B778a9118274AEA8), + address(0x75E0d127794b9C26eE35c55fbaBcc41c53Ccb37C), + address(0x15925E1c19c0F0d392F6FCb40FdE9144Dd823962) + ); } - /// @notice Returns the 41 production token instance triples on HyperEVM, + /// @notice Returns the 42 production token instance triples on HyperEVM, /// in the same row order as `productionTokensBase()` (the cross-chain /// parity pin asserts the alignment). - /// @return tokens The 41 production token instances on HyperEVM. + /// @return tokens The 42 production token instances on HyperEVM. function productionTokensHyperEvm() internal pure returns (TokenInstance[] memory tokens) { // Deployed on HyperEVM 2026-07-24 (manual-broadcast run 30114307165): // all 29 tokens via the 0.1.1 unified deployer, each wired onto the @@ -752,7 +762,7 @@ library LibTokenInvariants { // (underlying, receipt, receiptVault, wrapped) tuples. The script that // ran it was per-chain and has since been superseded by // `20260807-deploy-missing-tokens`, so this is the record of the run. - tokens = new TokenInstance[](41); + tokens = new TokenInstance[](42); tokens[0] = TokenInstance( "MSTR", 0xE3772C8695c2cf3dcAA2Dd29759f4Bb91a342763, @@ -1010,6 +1020,16 @@ library LibTokenInvariants { 0x334ccaD2e7D774F5e6A13437977dD0878926deF8, 0x710A14a41a8Ea2e25376124C48bf9cAdc1E69be5 ); + // CBRS, deployed 2026-08-14 by `20260807-deploy-missing-tokens` (run + // 31845492796) — the sole token the dispatch selected. Wired onto this + // chain's V4 authoriser and handed to its token-owner Safe in the same + // broadcast. + tokens[41] = TokenInstance( + "CBRS", + 0x8Ea1ba9Fc0CF7338B41DdDa5B778a9118274AEA8, + 0x75E0d127794b9C26eE35c55fbaBcc41c53Ccb37C, + 0x15925E1c19c0F0d392F6FCb40FdE9144Dd823962 + ); } /// @notice Returns the 29 production receipt vault addresses on Base, in