Add Robinhood Chain (#3398)

* fix android CI

* feat: Add Robinhood Chain, all major flows done. minor issue now is our providers don't support it yet as its still pretty early, two weeks from launch

* feat: Add Robinhood Chain, all major flows done. minor issue now is our providers don't support it yet as its still pretty early, two weeks from launch

* Cleanup

* auto-reformat

* fix ui issue and contact listing for tokens

* fix: missing icons and crash for fee priority in settings

* chore: cleanup

* fixes from feedbacks

* fix: review issues and sync to latest dev
feat: switch history api to etherscan, add history toggle to privacy settings, exclude robETH from exchange pickers, skip tokens discovery for chains that moralis hasn't indexed, add tests

* fix: address Robinhood review comments

* fix: show Solana token icons in history

* fix: address review comments and default Robinhood to PublicNode

* fix:  revert filter and refuse unmapped networks in provider

---------

Co-authored-by: Robert Malikowski <malikowskirobert@gmail.com>
This commit is contained in:
David Adegoke
2026-10-04 13:22:05 +02:00
committed by GitHub
co-authored by Robert Malikowski
parent 77e4b946eb
commit 046e57c598
143 changed files with 1214 additions and 159 deletions
+12 -2
View File
@@ -35,8 +35,9 @@ Future<void> main(List<String> args) async {
final hasBase = args.contains('${prefix}base');
final hasArbitrum = args.contains('${prefix}arbitrum');
final hasBsc = args.contains('${prefix}bsc');
final hasRobinhood = args.contains("${prefix}robinhood");
final hasZcash = args.contains('${prefix}zcash');
final hasEVM = hasEthereum || hasPolygon || hasBase || hasArbitrum || hasBsc;
final hasEVM = hasEthereum || hasPolygon || hasBase || hasArbitrum || hasBsc || hasRobinhood;
final excludeFlutterSecureStorage = args.contains('${prefix}excludeFlutterSecureStorage');
await generateBitcoin(hasBitcoin);
@@ -71,6 +72,7 @@ Future<void> main(List<String> args) async {
hasBase: hasBase,
hasArbitrum: hasArbitrum,
hasBsc: hasBsc,
hasRobinhood: hasRobinhood,
hasZcash: hasZcash,
);
await generateWalletTypes(
@@ -90,6 +92,7 @@ Future<void> main(List<String> args) async {
hasBase: hasBase,
hasArbitrum: hasArbitrum,
hasBsc: hasBsc,
hasRobinhood: hasRobinhood,
hasZcash: hasZcash,
);
await injectSecureStorage(!excludeFlutterSecureStorage);
@@ -1599,6 +1602,7 @@ abstract class EVM {
WalletType? getWalletTypeByChainId(int chainId);
String getChainNameByChainId(int chainId);
String getTokenNameByChainId(int chainId);
String? getMoralisChainName(WalletBase wallet);
// Chain selection methods
List<ChainInfo> getAllChains();
ChainInfo? getCurrentChain(WalletBase wallet);
@@ -1849,6 +1853,7 @@ Future<void> generatePubspec({
required bool hasBase,
required bool hasArbitrum,
required bool hasBsc,
required bool hasRobinhood,
required bool hasZcash,
}) async {
const cwCore = """
@@ -1960,7 +1965,7 @@ Future<void> generatePubspec({
output += '\n$flutterSecureStorage\n';
}
if (hasEthereum || hasPolygon || hasBase || hasArbitrum || hasBsc) {
if (hasEthereum || hasPolygon || hasBase || hasArbitrum || hasBsc || hasRobinhood) {
output += '\n$cwEVM';
}
@@ -2009,6 +2014,7 @@ Future<void> generateWalletTypes({
required bool hasBase,
required bool hasArbitrum,
required bool hasBsc,
required bool hasRobinhood,
required bool hasZcash,
}) async {
final walletTypesFile = File(walletTypesPath);
@@ -2037,6 +2043,10 @@ Future<void> generateWalletTypes({
outputContent += '\tWalletType.bsc,\n';
}
if (hasRobinhood) {
outputContent += "\tWalletType.robinhood,\n";
}
if (hasSolana) {
outputContent += '\tWalletType.solana,\n';
}
+1
View File
@@ -112,6 +112,7 @@ class SecretKey {
SecretKey('moralisApiKey', () => ''),
SecretKey('nowNodesApiKey', () => ''),
SecretKey('blinkApiKey', () => ''),
SecretKey('alchemyApiKey', () => ''),
];
static final solanaSecrets = [