CW-1368: Add Binance Smart Chain (#2836)

* feat: Add Binance Smart Chain support to wallet types and EVM chain registry

* feat: Add BSC node list and support in wallet type and chain ID mappings

* feat: Add BSC default tokens and update evm utility functions

* feat: Integrate BSC support in node settings and management

* feat: Add BSC support to config scripts and wallet type generation

* feat: Add BSC support to EVM chain ID and switcher

* feat: Extend BSC support in wallet utilities and chain type checks

* feat: Add BSC support to different wallet functions

* feat: Add BSCURI class and implement for uri handling

* feat: Update Android and iOS configurations to support BSC URL schemes

* feat: Add BSC support to different functionalities and settings

* refactor: Update wallet type name from'Binance Smart Chain' to BNB Smart Chain

* feat: Add switcher icon and updates token utils

* Review fixes

* More changes to BSC name, wallet listing and images

* Add more default tokens
This commit is contained in:
David Adegoke
2026-02-05 13:48:26 +01:00
committed by GitHub
parent d05a7a91d6
commit 308de0389d
103 changed files with 609 additions and 157 deletions
+22 -37
View File
@@ -1,26 +1,19 @@
import 'package:cake_wallet/reactions/wallet_connect.dart';
import 'package:cw_core/wallet_type.dart';
String getQrImage(WalletType type, {int? selectedChainId}) {
if (isEVMCompatibleChain(type) && selectedChainId != null) {
switch (selectedChainId) {
case 1:
return 'assets/images/eth_chain_qr.svg';
case 137:
return 'assets/images/pol_chain_qr.svg';
case 8453:
return 'assets/images/base_chain_QR.svg';
case 42161:
return 'assets/images/arbitrum_chain_QR.svg';
default:
return 'assets/images/eth_chain_qr.svg';
}
}
String getQrImage(WalletType type) {
switch (type) {
case WalletType.solana:
return 'assets/images/sol_chain_qr.svg';
case WalletType.ethereum:
return 'assets/images/eth_chain_qr.svg';
case WalletType.polygon:
return 'assets/images/pol_chain_qr.svg';
case WalletType.base:
return 'assets/images/base_chain_QR.svg';
case WalletType.arbitrum:
return 'assets/images/arbitrum_chain_QR.svg';
case WalletType.bsc:
return 'assets/images/bnb_chain_QR.svg';
case WalletType.solana:
return 'assets/images/sol_chain_qr.svg';
case WalletType.tron:
return 'assets/images/trx_chain_qr.svg';
case WalletType.zano:
@@ -46,32 +39,24 @@ String getQrImage(WalletType type, {int? selectedChainId}) {
case WalletType.banano:
case WalletType.haven:
case WalletType.none:
default:
return 'assets/images/qr-cake.png';
}
}
String getChainMonoImage(WalletType type, {int? selectedChainId}) {
if (isEVMCompatibleChain(type) && selectedChainId != null) {
switch (selectedChainId) {
case 1:
return 'assets/images/eth_chain_mono.svg';
case 137:
return 'assets/images/pol_chain_mono.svg';
case 8453:
return 'assets/images/base_chain_mono.svg';
case 42161:
return 'assets/images/arbitrum_chain_mono.svg';
default:
return 'assets/images/eth_chain_mono.svg';
}
}
String getChainMonoImage(WalletType type) {
switch (type) {
case WalletType.solana:
return 'assets/images/sol_chain_mono.svg';
case WalletType.ethereum:
return 'assets/images/eth_chain_mono.svg';
case WalletType.polygon:
return 'assets/images/pol_chain_mono.svg';
case WalletType.base:
return 'assets/images/base_chain_mono.svg';
case WalletType.arbitrum:
return 'assets/images/arbitrum_chain_mono.svg';
case WalletType.bsc:
return 'assets/images/bnb_chain_mono.svg';
case WalletType.solana:
return 'assets/images/sol_chain_mono.svg';
case WalletType.tron:
return 'assets/images/trx_chain_mono.svg';
case WalletType.zano:
+4 -6
View File
@@ -89,6 +89,7 @@ class TokenUtilities {
case WalletType.polygon:
case WalletType.base:
case WalletType.arbitrum:
case WalletType.bsc:
final tokens = await loadAllUniqueEvmTokens();
for (final t in tokens) {
if (t.contractAddress.toLowerCase() == lower) return t;
@@ -127,6 +128,7 @@ class TokenUtilities {
WalletType.polygon => '${walletKey}_${Erc20Token.polygonBoxName}',
WalletType.base => '${walletKey}_${Erc20Token.baseBoxName}',
WalletType.arbitrum => '${walletKey}_${Erc20Token.arbitrumBoxName}',
WalletType.bsc => '${walletKey}_${Erc20Token.bscBoxName}',
_ => '${walletKey}_${Erc20Token.ethereumBoxName}',
};
}
@@ -185,7 +187,8 @@ class TokenUtilities {
// Only check EVM registry for currencies that might be EVM-related
final isPotentialEVM = isNativeToken(currency) ||
(tag != null && (tag == 'ETH' || tag == 'POL' || tag == 'BASE' || tag == 'ARB'));
(tag != null &&
(tag == 'ETH' || tag == 'POL' || tag == 'BASE' || tag == 'ARB' || tag == 'BSC'));
if (isPotentialEVM) {
// Try by tag first if available (e.g., 'POL', 'BASE', 'ARB')
@@ -200,11 +203,6 @@ class TokenUtilities {
}
// Fallback to hardcoded values for chains not in registry yet
// BSC (Binance Smart Chain)
if (title == 'bsc' || title == 'bnb' || tag == 'BSC') {
return 56;
}
// Avalanche C-Chain
if (title == 'avalanche' || title == 'avax' || tag == 'AVALANCHE') {
return 43114;