mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-06-28 12:29:51 +00:00
v5.1.0 Release Candidate (#2332)
* v5.1.0 Release Candidate * update app versions [skip ci] * separate secrets for Monero.com [skip ci] * fix: amount getting wiped when pasting address * update Trocador Monero api key [skip ci] * move fiat api key to headers [skip ci] * latest Release candidate
This commit is contained in:
parent
5aeb6b7522
commit
c2cca1ff37
20 changed files with 95 additions and 70 deletions
|
@ -153,8 +153,8 @@ jobs:
|
||||||
echo "const shortKey = '${{ secrets.SHORT_KEY }}';" >> lib/.secrets.g.dart
|
echo "const shortKey = '${{ secrets.SHORT_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const backupSalt = '${{ secrets.BACKUP_SALT }}';" >> lib/.secrets.g.dart
|
echo "const backupSalt = '${{ secrets.BACKUP_SALT }}';" >> lib/.secrets.g.dart
|
||||||
echo "const backupKeychainSalt = '${{ secrets.BACKUP_KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
|
echo "const backupKeychainSalt = '${{ secrets.BACKUP_KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
|
||||||
echo "const changeNowApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
|
echo "const changeNowCakeWalletApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const changeNowApiKeyDesktop = '${{ secrets.CHANGE_NOW_API_KEY_DESKTOP }}';" >> lib/.secrets.g.dart
|
echo "const changeNowMoneroApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const wyreSecretKey = '${{ secrets.WYRE_SECRET_KEY }}';" >> lib/.secrets.g.dart
|
echo "const wyreSecretKey = '${{ secrets.WYRE_SECRET_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const wyreApiKey = '${{ secrets.WYRE_API_KEY }}';" >> lib/.secrets.g.dart
|
echo "const wyreApiKey = '${{ secrets.WYRE_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const wyreAccountId = '${{ secrets.WYRE_ACCOUNT_ID }}';" >> lib/.secrets.g.dart
|
echo "const wyreAccountId = '${{ secrets.WYRE_ACCOUNT_ID }}';" >> lib/.secrets.g.dart
|
||||||
|
@ -168,6 +168,7 @@ jobs:
|
||||||
echo "const ioniaClientId = '${{ secrets.IONIA_CLIENT_ID }}';" >> lib/.secrets.g.dart
|
echo "const ioniaClientId = '${{ secrets.IONIA_CLIENT_ID }}';" >> lib/.secrets.g.dart
|
||||||
echo "const twitterBearerToken = '${{ secrets.TWITTER_BEARER_TOKEN }}';" >> lib/.secrets.g.dart
|
echo "const twitterBearerToken = '${{ secrets.TWITTER_BEARER_TOKEN }}';" >> lib/.secrets.g.dart
|
||||||
echo "const trocadorApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
|
echo "const trocadorApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
|
echo "const trocadorMoneroApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const trocadorExchangeMarkup = '${{ secrets.TROCADOR_EXCHANGE_MARKUP }}';" >> lib/.secrets.g.dart
|
echo "const trocadorExchangeMarkup = '${{ secrets.TROCADOR_EXCHANGE_MARKUP }}';" >> lib/.secrets.g.dart
|
||||||
echo "const anonPayReferralCode = '${{ secrets.ANON_PAY_REFERRAL_CODE }}';" >> lib/.secrets.g.dart
|
echo "const anonPayReferralCode = '${{ secrets.ANON_PAY_REFERRAL_CODE }}';" >> lib/.secrets.g.dart
|
||||||
echo "const fiatApiKey = '${{ secrets.FIAT_API_KEY }}';" >> lib/.secrets.g.dart
|
echo "const fiatApiKey = '${{ secrets.FIAT_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
|
@ -178,7 +179,8 @@ jobs:
|
||||||
echo "const etherScanApiKey = '${{ secrets.ETHER_SCAN_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
|
echo "const etherScanApiKey = '${{ secrets.ETHER_SCAN_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
|
||||||
echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
|
echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
|
||||||
echo "const chatwootWebsiteToken = '${{ secrets.CHATWOOT_WEBSITE_TOKEN }}';" >> lib/.secrets.g.dart
|
echo "const chatwootWebsiteToken = '${{ secrets.CHATWOOT_WEBSITE_TOKEN }}';" >> lib/.secrets.g.dart
|
||||||
echo "const exolixApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
|
echo "const exolixCakeWalletApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
|
echo "const exolixMoneroApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const robinhoodApplicationId = '${{ secrets.ROBINHOOD_APPLICATION_ID }}';" >> lib/.secrets.g.dart
|
echo "const robinhoodApplicationId = '${{ secrets.ROBINHOOD_APPLICATION_ID }}';" >> lib/.secrets.g.dart
|
||||||
echo "const exchangeHelperApiKey = '${{ secrets.ROBINHOOD_CID_CLIENT_SECRET }}';" >> lib/.secrets.g.dart
|
echo "const exchangeHelperApiKey = '${{ secrets.ROBINHOOD_CID_CLIENT_SECRET }}';" >> lib/.secrets.g.dart
|
||||||
echo "const walletConnectProjectId = '${{ secrets.WALLET_CONNECT_PROJECT_ID }}';" >> lib/.secrets.g.dart
|
echo "const walletConnectProjectId = '${{ secrets.WALLET_CONNECT_PROJECT_ID }}';" >> lib/.secrets.g.dart
|
||||||
|
|
8
.github/workflows/pr_test_build_android.yml
vendored
8
.github/workflows/pr_test_build_android.yml
vendored
|
@ -98,8 +98,8 @@ jobs:
|
||||||
else
|
else
|
||||||
echo "const backupKeychainSalt = '${{ secrets.BACKUP_KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
|
echo "const backupKeychainSalt = '${{ secrets.BACKUP_KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
|
||||||
fi
|
fi
|
||||||
echo "const changeNowApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
|
echo "const changeNowCakeWalletApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const changeNowApiKeyDesktop = '${{ secrets.CHANGE_NOW_API_KEY_DESKTOP }}';" >> lib/.secrets.g.dart
|
echo "const changeNowMoneroApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const wyreSecretKey = '${{ secrets.WYRE_SECRET_KEY }}';" >> lib/.secrets.g.dart
|
echo "const wyreSecretKey = '${{ secrets.WYRE_SECRET_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const wyreApiKey = '${{ secrets.WYRE_API_KEY }}';" >> lib/.secrets.g.dart
|
echo "const wyreApiKey = '${{ secrets.WYRE_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const wyreAccountId = '${{ secrets.WYRE_ACCOUNT_ID }}';" >> lib/.secrets.g.dart
|
echo "const wyreAccountId = '${{ secrets.WYRE_ACCOUNT_ID }}';" >> lib/.secrets.g.dart
|
||||||
|
@ -113,6 +113,7 @@ jobs:
|
||||||
echo "const ioniaClientId = '${{ secrets.IONIA_CLIENT_ID }}';" >> lib/.secrets.g.dart
|
echo "const ioniaClientId = '${{ secrets.IONIA_CLIENT_ID }}';" >> lib/.secrets.g.dart
|
||||||
echo "const twitterBearerToken = '${{ secrets.TWITTER_BEARER_TOKEN }}';" >> lib/.secrets.g.dart
|
echo "const twitterBearerToken = '${{ secrets.TWITTER_BEARER_TOKEN }}';" >> lib/.secrets.g.dart
|
||||||
echo "const trocadorApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
|
echo "const trocadorApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
|
echo "const trocadorMoneroApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const trocadorExchangeMarkup = '${{ secrets.TROCADOR_EXCHANGE_MARKUP }}';" >> lib/.secrets.g.dart
|
echo "const trocadorExchangeMarkup = '${{ secrets.TROCADOR_EXCHANGE_MARKUP }}';" >> lib/.secrets.g.dart
|
||||||
echo "const anonPayReferralCode = '${{ secrets.ANON_PAY_REFERRAL_CODE }}';" >> lib/.secrets.g.dart
|
echo "const anonPayReferralCode = '${{ secrets.ANON_PAY_REFERRAL_CODE }}';" >> lib/.secrets.g.dart
|
||||||
echo "const fiatApiKey = '${{ secrets.FIAT_API_KEY }}';" >> lib/.secrets.g.dart
|
echo "const fiatApiKey = '${{ secrets.FIAT_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
|
@ -124,7 +125,8 @@ jobs:
|
||||||
echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
|
echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
|
||||||
echo "const nowNodesApiKey = '${{ secrets.EVM_NOWNODES_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
|
echo "const nowNodesApiKey = '${{ secrets.EVM_NOWNODES_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
|
||||||
echo "const chatwootWebsiteToken = '${{ secrets.CHATWOOT_WEBSITE_TOKEN }}';" >> lib/.secrets.g.dart
|
echo "const chatwootWebsiteToken = '${{ secrets.CHATWOOT_WEBSITE_TOKEN }}';" >> lib/.secrets.g.dart
|
||||||
echo "const exolixApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
|
echo "const exolixCakeWalletApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
|
echo "const exolixMoneroApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const robinhoodApplicationId = '${{ secrets.ROBINHOOD_APPLICATION_ID }}';" >> lib/.secrets.g.dart
|
echo "const robinhoodApplicationId = '${{ secrets.ROBINHOOD_APPLICATION_ID }}';" >> lib/.secrets.g.dart
|
||||||
echo "const exchangeHelperApiKey = '${{ secrets.ROBINHOOD_CID_CLIENT_SECRET }}';" >> lib/.secrets.g.dart
|
echo "const exchangeHelperApiKey = '${{ secrets.ROBINHOOD_CID_CLIENT_SECRET }}';" >> lib/.secrets.g.dart
|
||||||
echo "const walletConnectProjectId = '${{ secrets.WALLET_CONNECT_PROJECT_ID }}';" >> lib/.secrets.g.dart
|
echo "const walletConnectProjectId = '${{ secrets.WALLET_CONNECT_PROJECT_ID }}';" >> lib/.secrets.g.dart
|
||||||
|
|
8
.github/workflows/pr_test_build_linux.yml
vendored
8
.github/workflows/pr_test_build_linux.yml
vendored
|
@ -91,8 +91,8 @@ jobs:
|
||||||
else
|
else
|
||||||
echo "const backupKeychainSalt = '${{ secrets.BACKUP_KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
|
echo "const backupKeychainSalt = '${{ secrets.BACKUP_KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
|
||||||
fi
|
fi
|
||||||
echo "const changeNowApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
|
echo "const changeNowCakeWalletApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const changeNowApiKeyDesktop = '${{ secrets.CHANGE_NOW_API_KEY_DESKTOP }}';" >> lib/.secrets.g.dart
|
echo "const changeNowMoneroApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const wyreSecretKey = '${{ secrets.WYRE_SECRET_KEY }}';" >> lib/.secrets.g.dart
|
echo "const wyreSecretKey = '${{ secrets.WYRE_SECRET_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const wyreApiKey = '${{ secrets.WYRE_API_KEY }}';" >> lib/.secrets.g.dart
|
echo "const wyreApiKey = '${{ secrets.WYRE_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const wyreAccountId = '${{ secrets.WYRE_ACCOUNT_ID }}';" >> lib/.secrets.g.dart
|
echo "const wyreAccountId = '${{ secrets.WYRE_ACCOUNT_ID }}';" >> lib/.secrets.g.dart
|
||||||
|
@ -106,6 +106,7 @@ jobs:
|
||||||
echo "const ioniaClientId = '${{ secrets.IONIA_CLIENT_ID }}';" >> lib/.secrets.g.dart
|
echo "const ioniaClientId = '${{ secrets.IONIA_CLIENT_ID }}';" >> lib/.secrets.g.dart
|
||||||
echo "const twitterBearerToken = '${{ secrets.TWITTER_BEARER_TOKEN }}';" >> lib/.secrets.g.dart
|
echo "const twitterBearerToken = '${{ secrets.TWITTER_BEARER_TOKEN }}';" >> lib/.secrets.g.dart
|
||||||
echo "const trocadorApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
|
echo "const trocadorApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
|
echo "const trocadorMoneroApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const trocadorExchangeMarkup = '${{ secrets.TROCADOR_EXCHANGE_MARKUP }}';" >> lib/.secrets.g.dart
|
echo "const trocadorExchangeMarkup = '${{ secrets.TROCADOR_EXCHANGE_MARKUP }}';" >> lib/.secrets.g.dart
|
||||||
echo "const anonPayReferralCode = '${{ secrets.ANON_PAY_REFERRAL_CODE }}';" >> lib/.secrets.g.dart
|
echo "const anonPayReferralCode = '${{ secrets.ANON_PAY_REFERRAL_CODE }}';" >> lib/.secrets.g.dart
|
||||||
echo "const fiatApiKey = '${{ secrets.FIAT_API_KEY }}';" >> lib/.secrets.g.dart
|
echo "const fiatApiKey = '${{ secrets.FIAT_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
|
@ -117,7 +118,8 @@ jobs:
|
||||||
echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
|
echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
|
||||||
echo "const nowNodesApiKey = '${{ secrets.EVM_NOWNODES_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
|
echo "const nowNodesApiKey = '${{ secrets.EVM_NOWNODES_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
|
||||||
echo "const chatwootWebsiteToken = '${{ secrets.CHATWOOT_WEBSITE_TOKEN }}';" >> lib/.secrets.g.dart
|
echo "const chatwootWebsiteToken = '${{ secrets.CHATWOOT_WEBSITE_TOKEN }}';" >> lib/.secrets.g.dart
|
||||||
echo "const exolixApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
|
echo "const exolixCakeWalletApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
|
echo "const exolixMoneroApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
|
||||||
echo "const robinhoodApplicationId = '${{ secrets.ROBINHOOD_APPLICATION_ID }}';" >> lib/.secrets.g.dart
|
echo "const robinhoodApplicationId = '${{ secrets.ROBINHOOD_APPLICATION_ID }}';" >> lib/.secrets.g.dart
|
||||||
echo "const exchangeHelperApiKey = '${{ secrets.ROBINHOOD_CID_CLIENT_SECRET }}';" >> lib/.secrets.g.dart
|
echo "const exchangeHelperApiKey = '${{ secrets.ROBINHOOD_CID_CLIENT_SECRET }}';" >> lib/.secrets.g.dart
|
||||||
echo "const walletConnectProjectId = '${{ secrets.WALLET_CONNECT_PROJECT_ID }}';" >> lib/.secrets.g.dart
|
echo "const walletConnectProjectId = '${{ secrets.WALLET_CONNECT_PROJECT_ID }}';" >> lib/.secrets.g.dart
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
New themes and UI/UX improvements
|
Add built-in Tor support (experimental)
|
||||||
Ledger flow enhancements
|
Ledger improvements
|
||||||
|
UI/UX improvements
|
||||||
Bug fixes
|
Bug fixes
|
|
@ -1,4 +1,9 @@
|
||||||
New themes and UI/UX improvements
|
Add built-in Tor support (experimental)
|
||||||
Payjoin enhancements
|
Add dEuro investments
|
||||||
Ledger flow enhancements
|
Solana fixes/enhancements
|
||||||
|
Polygon fixes/enhancements
|
||||||
|
WalletConnect improvements
|
||||||
|
Ledger improvements
|
||||||
|
Payjoin improvements
|
||||||
|
UI/UX improvements
|
||||||
Bug fixes
|
Bug fixes
|
|
@ -76,7 +76,7 @@ PODS:
|
||||||
- path_provider_foundation (0.0.1):
|
- path_provider_foundation (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- payjoin_flutter (0.20.0)
|
- payjoin_flutter (0.23.0)
|
||||||
- permission_handler_apple (9.3.0):
|
- permission_handler_apple (9.3.0):
|
||||||
- Flutter
|
- Flutter
|
||||||
- reown_yttrium (0.0.1):
|
- reown_yttrium (0.0.1):
|
||||||
|
@ -235,7 +235,7 @@ SPEC CHECKSUMS:
|
||||||
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
|
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
|
||||||
package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4
|
package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4
|
||||||
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
||||||
payjoin_flutter: 6397d7b698cdad6453be4949ab6aca1863f6c5e5
|
payjoin_flutter: d9d4c8aa16bd5dfedb9b21d0edc8199e0187d96e
|
||||||
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
|
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
|
||||||
reown_yttrium: c0e87e5965fa60a3559564cc35cffbba22976089
|
reown_yttrium: c0e87e5965fa60a3559564cc35cffbba22976089
|
||||||
SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8
|
SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8
|
||||||
|
|
|
@ -6,6 +6,7 @@ import 'package:cake_wallet/anonpay/anonpay_status_response.dart';
|
||||||
import 'package:cake_wallet/core/fiat_conversion_service.dart';
|
import 'package:cake_wallet/core/fiat_conversion_service.dart';
|
||||||
import 'package:cake_wallet/entities/fiat_currency.dart';
|
import 'package:cake_wallet/entities/fiat_currency.dart';
|
||||||
import 'package:cake_wallet/exchange/limits.dart';
|
import 'package:cake_wallet/exchange/limits.dart';
|
||||||
|
import 'package:cake_wallet/wallet_type_utils.dart';
|
||||||
import 'package:cw_core/utils/proxy_wrapper.dart';
|
import 'package:cw_core/utils/proxy_wrapper.dart';
|
||||||
import 'package:cw_core/wallet_base.dart';
|
import 'package:cw_core/wallet_base.dart';
|
||||||
import 'package:cw_core/crypto_currency.dart';
|
import 'package:cw_core/crypto_currency.dart';
|
||||||
|
@ -27,7 +28,7 @@ class AnonPayApi {
|
||||||
static const anonPayPath = '/anonpay';
|
static const anonPayPath = '/anonpay';
|
||||||
static const anonPayStatus = '/anonpay/status';
|
static const anonPayStatus = '/anonpay/status';
|
||||||
static const coinPath = 'api/coin';
|
static const coinPath = 'api/coin';
|
||||||
static const apiKey = secrets.trocadorApiKey;
|
static final apiKey = isMoneroOnly ? secrets.trocadorMoneroApiKey : secrets.trocadorApiKey;
|
||||||
|
|
||||||
Future<AnonpayStatusResponse> paymentStatus(String id) async {
|
Future<AnonpayStatusResponse> paymentStatus(String id) async {
|
||||||
final response = await ProxyWrapper().get(
|
final response = await ProxyWrapper().get(
|
||||||
|
|
|
@ -14,7 +14,6 @@ Future<double> _fetchPrice(String crypto, String fiat, bool torOnly) async {
|
||||||
'interval_count': '1',
|
'interval_count': '1',
|
||||||
'base': crypto.split(".").first,
|
'base': crypto.split(".").first,
|
||||||
'quote': fiat,
|
'quote': fiat,
|
||||||
'key': secrets.fiatApiKey,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
num price = 0.0;
|
num price = 0.0;
|
||||||
|
@ -26,6 +25,9 @@ Future<double> _fetchPrice(String crypto, String fiat, bool torOnly) async {
|
||||||
final response = await ProxyWrapper().get(
|
final response = await ProxyWrapper().get(
|
||||||
onionUri: onionUri,
|
onionUri: onionUri,
|
||||||
clearnetUri: torOnly ? onionUri : clearnetUri,
|
clearnetUri: torOnly ? onionUri : clearnetUri,
|
||||||
|
headers: {
|
||||||
|
"x-api-key": secrets.fiatApiKey,
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,13 +11,12 @@ import 'package:cake_wallet/exchange/trade_request.dart';
|
||||||
import 'package:cake_wallet/exchange/trade_state.dart';
|
import 'package:cake_wallet/exchange/trade_state.dart';
|
||||||
import 'package:cake_wallet/exchange/utils/currency_pairs_utils.dart';
|
import 'package:cake_wallet/exchange/utils/currency_pairs_utils.dart';
|
||||||
import 'package:cake_wallet/store/settings_store.dart';
|
import 'package:cake_wallet/store/settings_store.dart';
|
||||||
import 'package:cake_wallet/utils/device_info.dart';
|
|
||||||
import 'package:cake_wallet/utils/distribution_info.dart';
|
import 'package:cake_wallet/utils/distribution_info.dart';
|
||||||
import 'package:cw_core/utils/proxy_wrapper.dart';
|
import 'package:cw_core/utils/proxy_wrapper.dart';
|
||||||
import 'package:cake_wallet/wallet_type_utils.dart';
|
import 'package:cake_wallet/wallet_type_utils.dart';
|
||||||
import 'package:cw_core/crypto_currency.dart';
|
import 'package:cw_core/crypto_currency.dart';
|
||||||
import 'package:cw_core/utils/print_verbose.dart';
|
import 'package:cw_core/utils/print_verbose.dart';
|
||||||
import 'package:cw_core/utils/proxy_wrapper.dart';
|
|
||||||
class ChangeNowExchangeProvider extends ExchangeProvider {
|
class ChangeNowExchangeProvider extends ExchangeProvider {
|
||||||
ChangeNowExchangeProvider({required SettingsStore settingsStore})
|
ChangeNowExchangeProvider({required SettingsStore settingsStore})
|
||||||
: _settingsStore = settingsStore,
|
: _settingsStore = settingsStore,
|
||||||
|
@ -30,7 +29,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
|
||||||
];
|
];
|
||||||
|
|
||||||
static final apiKey =
|
static final apiKey =
|
||||||
DeviceInfo.instance.isMobile ? secrets.changeNowApiKey : secrets.changeNowApiKeyDesktop;
|
isMoneroOnly ? secrets.changeNowMoneroApiKey : secrets.changeNowCakeWalletApiKey;
|
||||||
static const apiAuthority = 'api.changenow.io';
|
static const apiAuthority = 'api.changenow.io';
|
||||||
static const createTradePath = '/v2/exchange';
|
static const createTradePath = '/v2/exchange';
|
||||||
static const findTradeByIdPath = '/v2/exchange/by-id';
|
static const findTradeByIdPath = '/v2/exchange/by-id';
|
||||||
|
@ -75,7 +74,6 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
|
||||||
final uri = Uri.https(apiAuthority, rangePath, params);
|
final uri = Uri.https(apiAuthority, rangePath, params);
|
||||||
final response = await ProxyWrapper().get(clearnetUri: uri, headers: headers);
|
final response = await ProxyWrapper().get(clearnetUri: uri, headers: headers);
|
||||||
|
|
||||||
|
|
||||||
if (response.statusCode == 400) {
|
if (response.statusCode == 400) {
|
||||||
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
|
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
|
||||||
final error = responseJSON['error'] as String;
|
final error = responseJSON['error'] as String;
|
||||||
|
@ -185,7 +183,6 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
|
||||||
body: json.encode(body),
|
body: json.encode(body),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
if (response.statusCode == 400) {
|
if (response.statusCode == 400) {
|
||||||
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
|
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
|
||||||
final error = responseJSON['error'] as String;
|
final error = responseJSON['error'] as String;
|
||||||
|
@ -229,7 +226,6 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
|
||||||
final uri = Uri.https(apiAuthority, findTradeByIdPath, params);
|
final uri = Uri.https(apiAuthority, findTradeByIdPath, params);
|
||||||
final response = await ProxyWrapper().get(clearnetUri: uri, headers: headers);
|
final response = await ProxyWrapper().get(clearnetUri: uri, headers: headers);
|
||||||
|
|
||||||
|
|
||||||
if (response.statusCode == 404) throw TradeNotFoundException(id, provider: description);
|
if (response.statusCode == 404) throw TradeNotFoundException(id, provider: description);
|
||||||
|
|
||||||
if (response.statusCode == 400) {
|
if (response.statusCode == 400) {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import 'package:cake_wallet/exchange/trade_not_found_exception.dart';
|
||||||
import 'package:cake_wallet/exchange/trade_request.dart';
|
import 'package:cake_wallet/exchange/trade_request.dart';
|
||||||
import 'package:cake_wallet/exchange/trade_state.dart';
|
import 'package:cake_wallet/exchange/trade_state.dart';
|
||||||
import 'package:cake_wallet/exchange/utils/currency_pairs_utils.dart';
|
import 'package:cake_wallet/exchange/utils/currency_pairs_utils.dart';
|
||||||
|
import 'package:cake_wallet/wallet_type_utils.dart';
|
||||||
import 'package:cw_core/utils/proxy_wrapper.dart';
|
import 'package:cw_core/utils/proxy_wrapper.dart';
|
||||||
import 'package:cw_core/crypto_currency.dart';
|
import 'package:cw_core/crypto_currency.dart';
|
||||||
import 'package:cw_core/utils/print_verbose.dart';
|
import 'package:cw_core/utils/print_verbose.dart';
|
||||||
|
@ -16,7 +17,7 @@ import 'package:cw_core/utils/print_verbose.dart';
|
||||||
class ExolixExchangeProvider extends ExchangeProvider {
|
class ExolixExchangeProvider extends ExchangeProvider {
|
||||||
ExolixExchangeProvider() : super(pairList: supportedPairs(_notSupported));
|
ExolixExchangeProvider() : super(pairList: supportedPairs(_notSupported));
|
||||||
|
|
||||||
static final apiKey = secrets.exolixApiKey;
|
static final apiKey = isMoneroOnly ? secrets.exolixMoneroApiKey : secrets.exolixCakeWalletApiKey;
|
||||||
static const apiBaseUrl = 'exolix.com';
|
static const apiBaseUrl = 'exolix.com';
|
||||||
static const transactionsPath = '/api/v2/transactions';
|
static const transactionsPath = '/api/v2/transactions';
|
||||||
static const ratePath = '/api/v2/rate';
|
static const ratePath = '/api/v2/rate';
|
||||||
|
|
|
@ -8,6 +8,7 @@ import 'package:cake_wallet/exchange/trade.dart';
|
||||||
import 'package:cake_wallet/exchange/trade_request.dart';
|
import 'package:cake_wallet/exchange/trade_request.dart';
|
||||||
import 'package:cake_wallet/exchange/trade_state.dart';
|
import 'package:cake_wallet/exchange/trade_state.dart';
|
||||||
import 'package:cake_wallet/exchange/utils/currency_pairs_utils.dart';
|
import 'package:cake_wallet/exchange/utils/currency_pairs_utils.dart';
|
||||||
|
import 'package:cake_wallet/wallet_type_utils.dart';
|
||||||
import 'package:cw_core/utils/proxy_wrapper.dart';
|
import 'package:cw_core/utils/proxy_wrapper.dart';
|
||||||
import 'package:cw_core/crypto_currency.dart';
|
import 'package:cw_core/crypto_currency.dart';
|
||||||
import 'package:cw_core/utils/print_verbose.dart';
|
import 'package:cw_core/utils/print_verbose.dart';
|
||||||
|
@ -51,7 +52,7 @@ class TrocadorExchangeProvider extends ExchangeProvider {
|
||||||
CryptoCurrency.zaddr,
|
CryptoCurrency.zaddr,
|
||||||
];
|
];
|
||||||
|
|
||||||
static const apiKey = secrets.trocadorApiKey;
|
static final apiKey = isMoneroOnly ? secrets.trocadorMoneroApiKey : secrets.trocadorApiKey;
|
||||||
static const clearNetAuthority = 'api.trocador.app';
|
static const clearNetAuthority = 'api.trocador.app';
|
||||||
static const onionApiAuthority = clearNetAuthority;
|
static const onionApiAuthority = clearNetAuthority;
|
||||||
// static const onionApiAuthority = 'trocadorfyhlu27aefre5u7zri66gudtzdyelymftvr4yjwcxhfaqsid.onion';
|
// static const onionApiAuthority = 'trocadorfyhlu27aefre5u7zri66gudtzdyelymftvr4yjwcxhfaqsid.onion';
|
||||||
|
|
|
@ -10,11 +10,11 @@ import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
|
||||||
import 'package:cw_core/utils/print_verbose.dart';
|
import 'package:cw_core/utils/print_verbose.dart';
|
||||||
import 'package:cw_core/wallet_type.dart';
|
import 'package:cw_core/wallet_type.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_mobx/flutter_mobx.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
class CakeFeaturesPage extends StatelessWidget {
|
class CakeFeaturesPage extends StatelessWidget {
|
||||||
CakeFeaturesPage(
|
CakeFeaturesPage({required this.dashboardViewModel, required this.cakeFeaturesViewModel});
|
||||||
{required this.dashboardViewModel, required this.cakeFeaturesViewModel});
|
|
||||||
|
|
||||||
final DashboardViewModel dashboardViewModel;
|
final DashboardViewModel dashboardViewModel;
|
||||||
final CakeFeaturesViewModel cakeFeaturesViewModel;
|
final CakeFeaturesViewModel cakeFeaturesViewModel;
|
||||||
|
@ -59,13 +59,13 @@ class CakeFeaturesPage extends StatelessWidget {
|
||||||
fit: BoxFit.cover,
|
fit: BoxFit.cover,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (dashboardViewModel.type == WalletType.ethereum) ...[
|
Observer(builder: (_) {
|
||||||
DashBoardRoundedCardWidget(
|
if (dashboardViewModel.type == WalletType.ethereum) {
|
||||||
|
return DashBoardRoundedCardWidget(
|
||||||
isDarkTheme: dashboardViewModel.isDarkTheme,
|
isDarkTheme: dashboardViewModel.isDarkTheme,
|
||||||
shadowBlur: dashboardViewModel.getShadowBlur(),
|
shadowBlur: dashboardViewModel.getShadowBlur(),
|
||||||
shadowSpread: dashboardViewModel.getShadowSpread(),
|
shadowSpread: dashboardViewModel.getShadowSpread(),
|
||||||
onTap: () =>
|
onTap: () => Navigator.of(context).pushNamed(Routes.dEuroSavings),
|
||||||
Navigator.of(context).pushNamed(Routes.dEuroSavings),
|
|
||||||
title: S.of(context).deuro_savings,
|
title: S.of(context).deuro_savings,
|
||||||
subTitle: S.of(context).deuro_savings_subtitle,
|
subTitle: S.of(context).deuro_savings_subtitle,
|
||||||
image: Image.asset(
|
image: Image.asset(
|
||||||
|
@ -74,8 +74,11 @@ class CakeFeaturesPage extends StatelessWidget {
|
||||||
width: 80,
|
width: 80,
|
||||||
fit: BoxFit.cover,
|
fit: BoxFit.cover,
|
||||||
),
|
),
|
||||||
),
|
);
|
||||||
],
|
}
|
||||||
|
|
||||||
|
return const SizedBox();
|
||||||
|
}),
|
||||||
DashBoardRoundedCardWidget(
|
DashBoardRoundedCardWidget(
|
||||||
isDarkTheme: dashboardViewModel.isDarkTheme,
|
isDarkTheme: dashboardViewModel.isDarkTheme,
|
||||||
shadowBlur: dashboardViewModel.getShadowBlur(),
|
shadowBlur: dashboardViewModel.getShadowBlur(),
|
||||||
|
|
|
@ -302,7 +302,8 @@ class ExchangeCardState<T extends Currency> extends State<ExchangeCard<T>> {
|
||||||
final paymentRequest = PaymentRequest.fromUri(uri);
|
final paymentRequest = PaymentRequest.fromUri(uri);
|
||||||
addressController.text = paymentRequest.address;
|
addressController.text = paymentRequest.address;
|
||||||
|
|
||||||
if (amountController.text.isNotEmpty) {
|
if (amountController.text.isNotEmpty &&
|
||||||
|
paymentRequest.amount.isNotEmpty) {
|
||||||
_showAmountPopup(context, paymentRequest);
|
_showAmountPopup(context, paymentRequest);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -263,6 +263,9 @@ class AddressTextField<T extends Currency> extends StatelessWidget {
|
||||||
final address = clipboard?.text ?? '';
|
final address = clipboard?.text ?? '';
|
||||||
|
|
||||||
if (address.isNotEmpty) {
|
if (address.isNotEmpty) {
|
||||||
|
// if it has query parameters then it's a valid uri
|
||||||
|
// added because Uri.parse(address) can parse a normal address string and would still be valid
|
||||||
|
if (address.contains("=")) {
|
||||||
try {
|
try {
|
||||||
final uri = Uri.parse(address);
|
final uri = Uri.parse(address);
|
||||||
controller?.text = uri.path;
|
controller?.text = uri.path;
|
||||||
|
@ -270,6 +273,9 @@ class AddressTextField<T extends Currency> extends StatelessWidget {
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
controller?.text = address;
|
controller?.text = address;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
controller?.text = address;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onPushPasteButton?.call(context);
|
onPushPasteButton?.call(context);
|
||||||
|
|
|
@ -14,15 +14,15 @@ TYPES=($MONERO_COM $CAKEWALLET)
|
||||||
APP_ANDROID_TYPE=$1
|
APP_ANDROID_TYPE=$1
|
||||||
|
|
||||||
MONERO_COM_NAME="Monero.com"
|
MONERO_COM_NAME="Monero.com"
|
||||||
MONERO_COM_VERSION="5.0.0"
|
MONERO_COM_VERSION="5.1.0"
|
||||||
MONERO_COM_BUILD_NUMBER=125
|
MONERO_COM_BUILD_NUMBER=127
|
||||||
MONERO_COM_BUNDLE_ID="com.monero.app"
|
MONERO_COM_BUNDLE_ID="com.monero.app"
|
||||||
MONERO_COM_PACKAGE="com.monero.app"
|
MONERO_COM_PACKAGE="com.monero.app"
|
||||||
MONERO_COM_SCHEME="monero.com"
|
MONERO_COM_SCHEME="monero.com"
|
||||||
|
|
||||||
CAKEWALLET_NAME="Cake Wallet"
|
CAKEWALLET_NAME="Cake Wallet"
|
||||||
CAKEWALLET_VERSION="5.0.1"
|
CAKEWALLET_VERSION="5.1.0"
|
||||||
CAKEWALLET_BUILD_NUMBER=264
|
CAKEWALLET_BUILD_NUMBER=267
|
||||||
CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet"
|
CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet"
|
||||||
CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet"
|
CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet"
|
||||||
CAKEWALLET_SCHEME="cakewallet"
|
CAKEWALLET_SCHEME="cakewallet"
|
||||||
|
|
|
@ -12,13 +12,13 @@ TYPES=($MONERO_COM $CAKEWALLET)
|
||||||
APP_IOS_TYPE=$1
|
APP_IOS_TYPE=$1
|
||||||
|
|
||||||
MONERO_COM_NAME="Monero.com"
|
MONERO_COM_NAME="Monero.com"
|
||||||
MONERO_COM_VERSION="5.0.0"
|
MONERO_COM_VERSION="5.1.0"
|
||||||
MONERO_COM_BUILD_NUMBER=125
|
MONERO_COM_BUILD_NUMBER=127
|
||||||
MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
|
MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
|
||||||
|
|
||||||
CAKEWALLET_NAME="Cake Wallet"
|
CAKEWALLET_NAME="Cake Wallet"
|
||||||
CAKEWALLET_VERSION="5.0.1"
|
CAKEWALLET_VERSION="5.1.0"
|
||||||
CAKEWALLET_BUILD_NUMBER=322
|
CAKEWALLET_BUILD_NUMBER=324
|
||||||
CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"
|
CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ if [ -n "$1" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CAKEWALLET_NAME="Cake Wallet"
|
CAKEWALLET_NAME="Cake Wallet"
|
||||||
CAKEWALLET_VERSION="5.0.0"
|
CAKEWALLET_VERSION="5.1.0"
|
||||||
CAKEWALLET_BUILD_NUMBER=56
|
CAKEWALLET_BUILD_NUMBER=58
|
||||||
|
|
||||||
if ! [[ " ${TYPES[*]} " =~ " ${APP_LINUX_TYPE} " ]]; then
|
if ! [[ " ${TYPES[*]} " =~ " ${APP_LINUX_TYPE} " ]]; then
|
||||||
echo "Wrong app type."
|
echo "Wrong app type."
|
||||||
|
|
|
@ -16,13 +16,13 @@ if [ -n "$1" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
MONERO_COM_NAME="Monero.com"
|
MONERO_COM_NAME="Monero.com"
|
||||||
MONERO_COM_VERSION="5.0.0"
|
MONERO_COM_VERSION="5.1.0"
|
||||||
MONERO_COM_BUILD_NUMBER=54
|
MONERO_COM_BUILD_NUMBER=56
|
||||||
MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
|
MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
|
||||||
|
|
||||||
CAKEWALLET_NAME="Cake Wallet"
|
CAKEWALLET_NAME="Cake Wallet"
|
||||||
CAKEWALLET_VERSION="5.0.0"
|
CAKEWALLET_VERSION="5.1.0"
|
||||||
CAKEWALLET_BUILD_NUMBER=116
|
CAKEWALLET_BUILD_NUMBER=119
|
||||||
CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"
|
CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"
|
||||||
|
|
||||||
if ! [[ " ${TYPES[*]} " =~ " ${APP_MACOS_TYPE} " ]]; then
|
if ! [[ " ${TYPES[*]} " =~ " ${APP_MACOS_TYPE} " ]]; then
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#define MyAppName "Cake Wallet"
|
#define MyAppName "Cake Wallet"
|
||||||
#define MyAppVersion "5.0.0"
|
#define MyAppVersion "5.1.0"
|
||||||
#define MyAppPublisher "Cake Labs LLC"
|
#define MyAppPublisher "Cake Labs LLC"
|
||||||
#define MyAppURL "https://cakewallet.com/"
|
#define MyAppURL "https://cakewallet.com/"
|
||||||
#define MyAppExeName "CakeWallet.exe"
|
#define MyAppExeName "CakeWallet.exe"
|
||||||
|
|
|
@ -12,8 +12,8 @@ class SecretKey {
|
||||||
SecretKey('shortKey', () => hex.encode(encrypt.Key.fromSecureRandom(12).bytes)),
|
SecretKey('shortKey', () => hex.encode(encrypt.Key.fromSecureRandom(12).bytes)),
|
||||||
SecretKey('backupSalt', () => hex.encode(encrypt.Key.fromSecureRandom(8).bytes)),
|
SecretKey('backupSalt', () => hex.encode(encrypt.Key.fromSecureRandom(8).bytes)),
|
||||||
SecretKey('backupKeychainSalt', () => hex.encode(encrypt.Key.fromSecureRandom(12).bytes)),
|
SecretKey('backupKeychainSalt', () => hex.encode(encrypt.Key.fromSecureRandom(12).bytes)),
|
||||||
SecretKey('changeNowApiKey', () => ''),
|
SecretKey('changeNowCakeWalletApiKey', () => ''),
|
||||||
SecretKey('changeNowApiKeyDesktop', () => ''),
|
SecretKey('changeNowMoneroApiKey', () => ''),
|
||||||
SecretKey('wyreSecretKey', () => ''),
|
SecretKey('wyreSecretKey', () => ''),
|
||||||
SecretKey('wyreApiKey', () => ''),
|
SecretKey('wyreApiKey', () => ''),
|
||||||
SecretKey('wyreAccountId', () => ''),
|
SecretKey('wyreAccountId', () => ''),
|
||||||
|
@ -26,12 +26,14 @@ class SecretKey {
|
||||||
SecretKey('onramperApiKey', () => ''),
|
SecretKey('onramperApiKey', () => ''),
|
||||||
SecretKey('ioniaClientId', () => ''),
|
SecretKey('ioniaClientId', () => ''),
|
||||||
SecretKey('trocadorApiKey', () => ''),
|
SecretKey('trocadorApiKey', () => ''),
|
||||||
|
SecretKey('trocadorMoneroApiKey', () => ''),
|
||||||
SecretKey('trocadorExchangeMarkup', () => ''),
|
SecretKey('trocadorExchangeMarkup', () => ''),
|
||||||
SecretKey('twitterBearerToken', () => ''),
|
SecretKey('twitterBearerToken', () => ''),
|
||||||
SecretKey('anonPayReferralCode', () => ''),
|
SecretKey('anonPayReferralCode', () => ''),
|
||||||
SecretKey('fiatApiKey', () => ''),
|
SecretKey('fiatApiKey', () => ''),
|
||||||
SecretKey('chatwootWebsiteToken', () => ''),
|
SecretKey('chatwootWebsiteToken', () => ''),
|
||||||
SecretKey('exolixApiKey', () => ''),
|
SecretKey('exolixCakeWalletApiKey', () => ''),
|
||||||
|
SecretKey('exolixMoneroApiKey', () => ''),
|
||||||
SecretKey('robinhoodApplicationId', () => ''),
|
SecretKey('robinhoodApplicationId', () => ''),
|
||||||
SecretKey('exchangeHelperApiKey', () => ''),
|
SecretKey('exchangeHelperApiKey', () => ''),
|
||||||
SecretKey('walletConnectProjectId', () => ''),
|
SecretKey('walletConnectProjectId', () => ''),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue