diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 73f02b777..99a45287f 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -166,6 +166,7 @@ jobs: echo "const quantexExchangeMarkup = '${{ secrets.QUANTEX_EXCHANGE_MARKUP }}';" >> lib/.secrets.g.dart echo "const nano2ApiKey = '${{ secrets.NANO2_API_KEY }}';" >> cw_nano/lib/.secrets.g.dart echo "const tronGridApiKey = '${{ secrets.TRON_GRID_API_KEY }}';" >> cw_tron/lib/.secrets.g.dart + echo "const tronNowNodesApiKey = '${{ secrets.TRON_NOW_NODES_API_KEY }}';" >> cw_tron/lib/.secrets.g.dart - name: Rename app run: | diff --git a/assets/tron_node_list.yml b/assets/tron_node_list.yml index b12a82dbe..f9fd91179 100644 --- a/assets/tron_node_list.yml +++ b/assets/tron_node_list.yml @@ -4,5 +4,9 @@ useSSL: true - uri: api.trongrid.io + is_default: false + useSSL: true +- + uri: trx.nownodes.io is_default: true useSSL: true \ No newline at end of file diff --git a/cw_tron/lib/tron_http_provider.dart b/cw_tron/lib/tron_http_provider.dart index 58d313378..8a3301f87 100644 --- a/cw_tron/lib/tron_http_provider.dart +++ b/cw_tron/lib/tron_http_provider.dart @@ -20,6 +20,7 @@ class TronHTTPProvider implements TronServiceProvider { final response = await client.get(Uri.parse(params.url(url)), headers: { 'Content-Type': 'application/json', if (url.contains("trongrid")) 'TRON-PRO-API-KEY': secrets.tronGridApiKey, + if (url.contains("nownodes")) 'api-key': secrets.tronNowNodesApiKey, }).timeout(timeout ?? defaultRequestTimeout); final data = json.decode(response.body) as Map; return data; @@ -32,6 +33,7 @@ class TronHTTPProvider implements TronServiceProvider { headers: { 'Content-Type': 'application/json', if (url.contains("trongrid")) 'TRON-PRO-API-KEY': secrets.tronGridApiKey, + if (url.contains("nownodes")) 'api-key': secrets.tronNowNodesApiKey, }, body: params.toRequestBody()) .timeout(timeout ?? defaultRequestTimeout); diff --git a/devtools_options.yaml b/devtools_options.yaml new file mode 100644 index 000000000..7e7e7f67d --- /dev/null +++ b/devtools_options.yaml @@ -0,0 +1 @@ +extensions: diff --git a/lib/entities/default_settings_migration.dart b/lib/entities/default_settings_migration.dart index ff0b0dc82..804a975a0 100644 --- a/lib/entities/default_settings_migration.dart +++ b/lib/entities/default_settings_migration.dart @@ -37,7 +37,7 @@ const cakeWalletBitcoinCashDefaultNodeUri = 'bitcoincash.stackwallet.com:50002'; const nanoDefaultNodeUri = 'rpc.nano.to'; const nanoDefaultPowNodeUri = 'rpc.nano.to'; const solanaDefaultNodeUri = 'rpc.ankr.com'; -const tronDefaultNodeUri = 'api.trongrid.io'; +const tronDefaultNodeUri = 'trx.nownodes.io'; const newCakeWalletBitcoinUri = 'btc-electrum.cakewallet.com:50002'; const wowneroDefaultNodeUri = 'node3.monerodevs.org:34568'; @@ -236,7 +236,11 @@ Future defaultSettingsMigration( await changeWowneroCurrentNodeToDefault(sharedPreferences: sharedPreferences, nodes: nodes); break; case 37: + await replaceTronDefaultNode(sharedPreferences: sharedPreferences, nodes: nodes); + break; + case 38: await fixBtcDerivationPaths(walletInfoSource); + break; default: break; } @@ -1189,3 +1193,29 @@ Future changeTronCurrentNodeToDefault( await sharedPreferences.setInt(PreferencesKey.currentTronNodeIdKey, nodeId); } + +Future replaceTronDefaultNode({ + required SharedPreferences sharedPreferences, + required Box nodes, +}) async { + // Get the currently active node + final currentTronNodeId = sharedPreferences.getInt(PreferencesKey.currentTronNodeIdKey); + final currentTronNode = + nodes.values.firstWhereOrNull((Node node) => node.key == currentTronNodeId); + + //Confirm if this node is part of the default nodes from CakeWallet + final tronDefaultNodeList = [ + 'tron-rpc.publicnode.com:443', + 'api.trongrid.io', + ]; + bool needsToBeReplaced = + currentTronNode == null ? true : tronDefaultNodeList.contains(currentTronNode.uriRaw); + + // If it's a custom node, return. We don't want to switch users from their custom nodes + if (!needsToBeReplaced) { + return; + } + + // If it's not, we switch user to the new default node: NowNodes + await changeTronCurrentNodeToDefault(sharedPreferences: sharedPreferences, nodes: nodes); +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 94bcecf28..8539ac803 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -203,7 +203,7 @@ Future initializeAppConfigs() async { transactionDescriptions: transactionDescriptions, secureStorage: secureStorage, anonpayInvoiceInfo: anonpayInvoiceInfo, - initialMigrationVersion: 37, + initialMigrationVersion: 38, ); } diff --git a/tool/utils/secret_key.dart b/tool/utils/secret_key.dart index 9559e83b3..7261478a6 100644 --- a/tool/utils/secret_key.dart +++ b/tool/utils/secret_key.dart @@ -39,6 +39,10 @@ class SecretKey { SecretKey('moralisApiKey', () => ''), SecretKey('ankrApiKey', () => ''), SecretKey('quantexExchangeMarkup', () => ''), + SecretKey('testCakePayApiKey', () => ''), + SecretKey('cakePayApiKey', () => ''), + SecretKey('CSRFToken', () => ''), + SecretKey('authorization', () => ''), ]; static final evmChainsSecrets = [ @@ -54,9 +58,10 @@ class SecretKey { static final nanoSecrets = [ SecretKey('nano2ApiKey', () => ''), ]; - + static final tronSecrets = [ SecretKey('tronGridApiKey', () => ''), + SecretKey('tronNowNodesApiKey', () => ''), ]; final String name;