From 2c030a729c01de99a9d9afde978e4ec4874fa6b0 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Wed, 15 Jul 2026 15:31:19 +0200 Subject: [PATCH] feat: add BSC chain helper --- registry/manual.json | 6 ++++++ scripts/templates/generated_named.rs | 6 ++++++ scripts/update-registry.py | 2 ++ src/chain.rs | 17 +++++++++++++++++ src/generated/named.rs | 6 ++++++ 5 files changed, 37 insertions(+) diff --git a/registry/manual.json b/registry/manual.json index a058ea5..930584a 100644 --- a/registry/manual.json +++ b/registry/manual.json @@ -398,6 +398,9 @@ ], "averageBlocktimeHint": 450, "supportsShanghai": true, + "tags": [ + "bsc" + ], "etherscanApiUrl": "https://api.etherscan.io/v2/api?chainid=56", "etherscanApiKeyName": "ETHERSCAN_API_KEY", "wrappedNativeToken": "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", @@ -418,6 +421,9 @@ "averageBlocktimeHint": 450, "supportsShanghai": true, "isTestnet": true, + "tags": [ + "bsc" + ], "nativeCurrencySymbol": "BNB", "etherscanApiUrl": "https://api.etherscan.io/v2/api?chainid=97", "etherscanApiKeyName": "ETHERSCAN_API_KEY", diff --git a/scripts/templates/generated_named.rs b/scripts/templates/generated_named.rs index 9a5cac4..79a91b5 100644 --- a/scripts/templates/generated_named.rs +++ b/scripts/templates/generated_named.rs @@ -86,6 +86,12 @@ impl NamedChain { %%gnosis_predicate } + /// Returns true if this chain is a BNB Smart Chain (BSC) network. + #[inline] + pub const fn is_bsc(&self) -> bool { + %%bsc_predicate + } + /// Returns true if the chain contains Polygon configuration. #[inline] pub const fn is_polygon(self) -> bool { diff --git a/scripts/update-registry.py b/scripts/update-registry.py index f1c3b41..65a0a29 100755 --- a/scripts/update-registry.py +++ b/scripts/update-registry.py @@ -39,6 +39,7 @@ class ChainFlag: ChainFlag("FLAG_ETHEREUM", "E", "ethereum", tag="ethereum"), ChainFlag("FLAG_OPTIMISM", "O", "optimism", tag="optimism"), ChainFlag("FLAG_GNOSIS", "G", "gnosis", tag="gnosis"), + ChainFlag("FLAG_BSC", "B", "bsc", tag="bsc"), ChainFlag("FLAG_POLYGON", "P", "polygon", tag="polygon"), ChainFlag("FLAG_ARBITRUM", "A", "arbitrum", tag="arbitrum"), ChainFlag("FLAG_ELASTIC", "X", "elastic", tag="elastic"), @@ -311,6 +312,7 @@ def generated_named(chains: list[Chain]) -> str: phf_maps=phf_maps, polygon_predicate=flag_predicates["polygon"], arbitrum_predicate=flag_predicates["arbitrum"], + bsc_predicate=flag_predicates["bsc"], serde_aliases=serde_aliases, string_table_data=string_table_data, shanghai_predicate=flag_predicates["supports_shanghai"], diff --git a/src/chain.rs b/src/chain.rs index 5049077..927c5a1 100644 --- a/src/chain.rs +++ b/src/chain.rs @@ -743,6 +743,12 @@ impl Chain { matches!(self.named(), Some(named) if named.is_gnosis()) } + /// Returns true if this chain is a BNB Smart Chain (BSC) network. + #[inline] + pub const fn is_bsc(&self) -> bool { + matches!(self.named(), Some(named) if named.is_bsc()) + } + /// Returns `true` if this chain is a Polygon chain. #[inline] pub const fn is_polygon(&self) -> bool { @@ -928,6 +934,17 @@ mod tests { assert_eq!(default, expected); } + #[test] + fn test_is_bsc() { + assert!(NamedChain::BinanceSmartChain.is_bsc()); + assert!(NamedChain::BinanceSmartChainTestnet.is_bsc()); + assert!(Chain::bsc_mainnet().is_bsc()); + assert!(Chain::bsc_testnet().is_bsc()); + + assert!(!NamedChain::Mainnet.is_bsc()); + assert!(!Chain::mainnet().is_bsc()); + } + #[cfg(feature = "rlp")] #[test] fn test_id_chain_encodable_length() { diff --git a/src/generated/named.rs b/src/generated/named.rs index 74af705..37f626b 100644 --- a/src/generated/named.rs +++ b/src/generated/named.rs @@ -886,6 +886,12 @@ impl NamedChain { matches!(self, Self::Gnosis | Self::Chiado) } + /// Returns true if this chain is a BNB Smart Chain (BSC) network. + #[inline] + pub const fn is_bsc(&self) -> bool { + matches!(self, Self::BinanceSmartChain | Self::BinanceSmartChainTestnet) + } + /// Returns true if the chain contains Polygon configuration. #[inline] pub const fn is_polygon(self) -> bool {