mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-23 06:38:35 +02:00
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:
@@ -41,6 +41,7 @@ class _DesktopWalletSelectionDropDownState extends State<DesktopWalletSelectionD
|
||||
final bitcoinCashIcon = Image.asset('assets/images/crypto/bitcoin-cash.webp', height: 24, width: 24);
|
||||
final baseIcon = Image.asset('assets/images/crypto/base_icon.webp', height: 24, width: 24);
|
||||
final arbitrumIcon = Image.asset('assets/images/crypto/arbitrum.webp', height: 24, width: 24);
|
||||
final bscIcon = Image.asset('assets/images/crypto/BNB.webp', height: 24, width: 24);
|
||||
final nanoIcon = Image.asset('assets/images/crypto/nano.webp', height: 24, width: 24);
|
||||
final bananoIcon = Image.asset('assets/images/crypto/nano.webp', height: 24, width: 24);
|
||||
final solanaIcon = Image.asset('assets/images/crypto/solana.webp', height: 24, width: 24);
|
||||
@@ -192,6 +193,8 @@ class _DesktopWalletSelectionDropDownState extends State<DesktopWalletSelectionD
|
||||
return baseIcon;
|
||||
case WalletType.arbitrum:
|
||||
return arbitrumIcon;
|
||||
case WalletType.bsc:
|
||||
return bscIcon;
|
||||
case WalletType.zcash:
|
||||
return zcashIcon;
|
||||
case WalletType.none:
|
||||
|
||||
@@ -5,7 +5,6 @@ import 'package:flutter/material.dart';
|
||||
import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
|
||||
import 'package:cw_core/wallet_type.dart';
|
||||
import 'package:flutter_mobx/flutter_mobx.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
|
||||
class MenuWidget extends StatefulWidget {
|
||||
MenuWidget(this.dashboardViewModel, Key? key);
|
||||
@@ -36,6 +35,7 @@ class MenuWidgetState extends State<MenuWidget> {
|
||||
this.polygonIcon = Image.asset('assets/images/crypto/polygon.webp'),
|
||||
this.baseIcon = Image.asset('assets/images/crypto/base_icon.webp'),
|
||||
this.arbitrumIcon = Image.asset('assets/images/crypto/arbitrum.webp'),
|
||||
this.bscIcon = Image.asset('assets/images/crypto/BNB.webp'),
|
||||
this.solanaIcon = Image.asset('assets/images/crypto/solana.webp'),
|
||||
this.tronIcon = Image.asset('assets/images/crypto/tron.webp'),
|
||||
this.wowneroIcon = Image.asset('assets/images/crypto/wownero.webp'),
|
||||
@@ -66,6 +66,7 @@ class MenuWidgetState extends State<MenuWidget> {
|
||||
Image polygonIcon;
|
||||
Image baseIcon;
|
||||
Image arbitrumIcon;
|
||||
Image bscIcon;
|
||||
Image solanaIcon;
|
||||
Image tronIcon;
|
||||
Image wowneroIcon;
|
||||
@@ -258,6 +259,8 @@ class MenuWidgetState extends State<MenuWidget> {
|
||||
return baseIcon;
|
||||
case WalletType.arbitrum:
|
||||
return arbitrumIcon;
|
||||
case WalletType.bsc:
|
||||
return bscIcon;
|
||||
case WalletType.tron:
|
||||
return tronIcon;
|
||||
case WalletType.wownero:
|
||||
|
||||
@@ -142,6 +142,14 @@ class PrivacyPage extends BasePage {
|
||||
_privacySettingsViewModel.setUseArbiScan(value);
|
||||
},
|
||||
),
|
||||
if (_privacySettingsViewModel.canUseBscScan)
|
||||
SettingsSwitcherCell(
|
||||
title: S.current.bscscan_history,
|
||||
value: _privacySettingsViewModel.useBscScan,
|
||||
onValueChange: (BuildContext _, bool value) {
|
||||
_privacySettingsViewModel.setUseBscScan(value);
|
||||
},
|
||||
),
|
||||
if (_privacySettingsViewModel.canUseTronGrid)
|
||||
SettingsSwitcherCell(
|
||||
title: S.current.trongrid_history,
|
||||
|
||||
@@ -5,6 +5,7 @@ enum EVMChainId {
|
||||
polygon,
|
||||
base,
|
||||
arbitrum,
|
||||
bsc,
|
||||
}
|
||||
|
||||
extension EVMChainIdX on EVMChainId {
|
||||
@@ -22,6 +23,7 @@ extension EVMChainIdX on EVMChainId {
|
||||
EVMChainId.polygon => 137,
|
||||
EVMChainId.base => 8453,
|
||||
EVMChainId.arbitrum => 42161,
|
||||
EVMChainId.bsc => 56,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ class KeyServiceImpl implements WalletConnectKeyService {
|
||||
case WalletType.polygon:
|
||||
case WalletType.base:
|
||||
case WalletType.arbitrum:
|
||||
case WalletType.bsc:
|
||||
return evm!.getPrivateKey(wallet);
|
||||
case WalletType.solana:
|
||||
return solana!.getPrivateKey(wallet);
|
||||
@@ -36,6 +37,7 @@ class KeyServiceImpl implements WalletConnectKeyService {
|
||||
case WalletType.polygon:
|
||||
case WalletType.base:
|
||||
case WalletType.arbitrum:
|
||||
case WalletType.bsc:
|
||||
return evm!.getPublicKey(wallet);
|
||||
case WalletType.solana:
|
||||
return solana!.getPublicKey(wallet);
|
||||
|
||||
@@ -14,52 +14,26 @@ class EvmSwitcherDataItem {
|
||||
required this.svgPath,
|
||||
required this.chainId,
|
||||
});
|
||||
|
||||
static const ethereum = EvmSwitcherDataItem(
|
||||
name: 'Ethereum',
|
||||
svgPath: 'assets/images/evm_switcher_icons/ethereum.svg',
|
||||
chainId: 1,
|
||||
);
|
||||
|
||||
static const polygon = EvmSwitcherDataItem(
|
||||
name: 'Polygon',
|
||||
svgPath: 'assets/images/evm_switcher_icons/polygon.svg',
|
||||
chainId: 137,
|
||||
);
|
||||
|
||||
static const arbitrum = EvmSwitcherDataItem(
|
||||
name: 'Arbitrum',
|
||||
svgPath: 'assets/images/evm_switcher_icons/arbitrum.svg',
|
||||
chainId: 42161,
|
||||
);
|
||||
|
||||
static const base = EvmSwitcherDataItem(
|
||||
name: 'Base',
|
||||
svgPath: 'assets/images/evm_switcher_icons/base.svg',
|
||||
chainId: 8453,
|
||||
);
|
||||
|
||||
static const items = [
|
||||
ethereum,
|
||||
polygon,
|
||||
arbitrum,
|
||||
base,
|
||||
];
|
||||
}
|
||||
|
||||
String _getSvgPathForChain(String chainName) {
|
||||
final name = chainName.toLowerCase();
|
||||
if (name.contains('ethereum')) {
|
||||
return 'assets/images/evm_switcher_icons/ethereum.svg';
|
||||
} else if (name.contains('polygon')) {
|
||||
return 'assets/images/evm_switcher_icons/polygon.svg';
|
||||
} else if (name.contains('arbitrum')) {
|
||||
return 'assets/images/evm_switcher_icons/arbitrum.svg';
|
||||
} else if (name.contains('base')) {
|
||||
return 'assets/images/evm_switcher_icons/base.svg';
|
||||
|
||||
switch (name) {
|
||||
case 'ethereum':
|
||||
return 'assets/images/crypto/ethereum.webp';
|
||||
case 'polygon':
|
||||
return 'assets/images/crypto/polygon.webp';
|
||||
case 'arbitrum':
|
||||
return 'assets/images/crypto/arbitrum.webp';
|
||||
case 'base':
|
||||
return 'assets/images/crypto/base_icon.webp';
|
||||
case 'bnb':
|
||||
case 'bsc':
|
||||
return 'assets/images/crypto/BNB.webp';
|
||||
default:
|
||||
return 'assets/images/crypto/ethereum.webp';
|
||||
}
|
||||
// Default to ethereum if unknown
|
||||
return 'assets/images/evm_switcher_icons/ethereum.svg';
|
||||
}
|
||||
|
||||
class EvmSwitcher extends StatefulWidget {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:cake_wallet/src/widgets/cake_image_widget.dart';
|
||||
import 'package:cake_wallet/src/widgets/evm_switcher.dart';
|
||||
import 'package:cake_wallet/src/widgets/standard_switch.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
|
||||
class EvmSwitcherRow extends StatelessWidget {
|
||||
const EvmSwitcherRow({
|
||||
@@ -45,23 +45,24 @@ class EvmSwitcherRow extends StatelessWidget {
|
||||
Row(
|
||||
spacing: 8.0,
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
data.svgPath,
|
||||
CakeImageWidget(
|
||||
imageUrl: data.svgPath,
|
||||
width: 16,
|
||||
height: 16,
|
||||
colorFilter: ColorFilter.mode(
|
||||
resolvedForegroundColor, BlendMode.srcIn),
|
||||
),
|
||||
Text(data.name,
|
||||
style: TextStyle(
|
||||
color: resolvedForegroundColor, fontSize: 14)),
|
||||
Text(
|
||||
data.name,
|
||||
style: TextStyle(color: resolvedForegroundColor, fontSize: 14),
|
||||
),
|
||||
if (selected && !editMode)
|
||||
SvgPicture.asset("assets/images/evm_switcher_checkmark.svg",
|
||||
width: 18, height: 18),
|
||||
CakeImageWidget(
|
||||
imageUrl: "assets/images/evm_switcher_checkmark.svg",
|
||||
width: 18,
|
||||
height: 18,
|
||||
),
|
||||
],
|
||||
),
|
||||
if (editMode)
|
||||
StandardSwitch(value: editSwitchValue, onTapped: onTap)
|
||||
if (editMode) StandardSwitch(value: editSwitchValue, onTapped: onTap)
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user