diff --git a/assets/images/collect_interest.png b/assets/images/collect_interest.png new file mode 100644 index 000000000..7bd853777 Binary files /dev/null and b/assets/images/collect_interest.png differ diff --git a/assets/images/deuro_hero.png b/assets/images/deuro_hero.png new file mode 100644 index 000000000..500a1c837 Binary files /dev/null and b/assets/images/deuro_hero.png differ diff --git a/assets/images/deuro_not_enough_eth.png b/assets/images/deuro_not_enough_eth.png new file mode 100644 index 000000000..beac29136 Binary files /dev/null and b/assets/images/deuro_not_enough_eth.png differ diff --git a/cw_ethereum/lib/deuro/deuro_savings.dart b/cw_ethereum/lib/deuro/deuro_savings.dart index b00d26fcd..2fa93b4ad 100644 --- a/cw_ethereum/lib/deuro/deuro_savings.dart +++ b/cw_ethereum/lib/deuro/deuro_savings.dart @@ -61,7 +61,7 @@ class DEuro { final requiredBalance = estimatedGasFee; if (currentBalance < requiredBalance) { - throw DeuroGasFeeException( + throw InsufficientGasFeeException( requiredGasFee: requiredBalance, currentBalance: currentBalance, ); @@ -99,9 +99,7 @@ class DEuro { } catch (e) { if (e.toString().contains('insufficient funds for gas')) { final ethBalance = await _wallet.getWeb3Client()!.getBalance(_address); - throw DeuroGasFeeException( - currentBalance: ethBalance.getInWei, - ); + throw InsufficientGasFeeException(currentBalance: ethBalance.getInWei); } rethrow; } @@ -122,7 +120,7 @@ class DEuro { contractAddress: _savingsGateway.self.address.hexEip55, receivingAddressHex: _savingsGateway.self.address.hexEip55, priority: priority, - data: _savingsGateway.self.abi.functions[17].encodeCall([amount, hexToBytes(frontendCode)]), + data: _savingsGateway.self.abi.functions[24].encodeCall([_address, amount, hexToBytes(frontendCode)]), ); final sendTransaction = () => _wallet.getWeb3Client()!.sendRawTransaction(signedTransaction); @@ -137,9 +135,42 @@ class DEuro { } catch (e) { if (e.toString().contains('insufficient funds for gas')) { final ethBalance = await _wallet.getWeb3Client()!.getBalance(_address); - throw DeuroGasFeeException( - currentBalance: ethBalance.getInWei, - ); + throw InsufficientGasFeeException(currentBalance: ethBalance.getInWei); + } + rethrow; + } + } + + Future reinvestInterest(EVMChainTransactionPriority priority) async { + try { + await _checkEthBalanceForGasFees(priority); + + final signedTransaction = await _savingsGateway.refreshBalance((owner: _address), + credentials: _wallet.evmChainPrivateKey, + ); + + final fee = await _wallet.calculateActualEstimatedFeeForCreateTransaction( + amount: BigInt.zero, + contractAddress: _savingsGateway.self.address.hexEip55, + receivingAddressHex: _savingsGateway.self.address.hexEip55, + priority: priority, + data: _savingsGateway.self.abi.functions[15].encodeCall([_address]), + ); + + final sendTransaction = () => _wallet.getWeb3Client()!.sendRawTransaction(signedTransaction); + + return PendingEVMChainTransaction( + feeCurrency: "ETH", + sendTransaction: sendTransaction, + signedTransaction: signedTransaction, + fee: BigInt.from(fee.estimatedGasFee), + amount: 0.toString(), + exponent: 18, + ); + } catch (e) { + if (e.toString().contains('insufficient funds for gas')) { + final ethBalance = await _wallet.getWeb3Client()!.getBalance(_address); + throw InsufficientGasFeeException(currentBalance: ethBalance.getInWei); } rethrow; } @@ -158,14 +189,12 @@ class DEuro { _savingsGateway.self.address.hexEip55, CryptoCurrency.deuro, priority, - "ETH" + "ETH", )) as PendingEVMChainTransaction; } catch (e) { if (e.toString().contains('insufficient funds for gas')) { final ethBalance = await _wallet.getWeb3Client()!.getBalance(_address); - throw DeuroGasFeeException( - currentBalance: ethBalance.getInWei, - ); + throw InsufficientGasFeeException(currentBalance: ethBalance.getInWei); } rethrow; } diff --git a/cw_ethereum/lib/deuro/deuro_savings_contract.dart b/cw_ethereum/lib/deuro/deuro_savings_contract.dart index ca2eb5dcc..77316f456 100644 --- a/cw_ethereum/lib/deuro/deuro_savings_contract.dart +++ b/cw_ethereum/lib/deuro/deuro_savings_contract.dart @@ -213,7 +213,7 @@ class SavingsGateway extends _i1.GeneratedContract { /// The optional [transaction] parameter can be used to override parameters /// like the gas price, nonce and max gas. The `data` and `to` fields will be /// set by the contract. - Future refreshBalance( + Future<_i2.Uint8List> refreshBalance( ({_i1.EthereumAddress owner}) args, { required _i1.Credentials credentials, _i1.Transaction? transaction, @@ -221,7 +221,7 @@ class SavingsGateway extends _i1.GeneratedContract { final function = self.abi.functions[15]; assert(checkSignature(function, 'b77cd1c7')); final params = [args.owner]; - return write( + return writeRaw( credentials, transaction, function, @@ -232,14 +232,14 @@ class SavingsGateway extends _i1.GeneratedContract { /// The optional [transaction] parameter can be used to override parameters /// like the gas price, nonce and max gas. The `data` and `to` fields will be /// set by the contract. - Future refreshMyBalance({ + Future<_i2.Uint8List> refreshMyBalance({ required _i1.Credentials credentials, _i1.Transaction? transaction, }) async { final function = self.abi.functions[16]; assert(checkSignature(function, '85bd12d1')); final params = []; - return write( + return writeRaw( credentials, transaction, function, diff --git a/cw_evm/lib/evm_chain_exceptions.dart b/cw_evm/lib/evm_chain_exceptions.dart index 19bb047ef..8d4e94d13 100644 --- a/cw_evm/lib/evm_chain_exceptions.dart +++ b/cw_evm/lib/evm_chain_exceptions.dart @@ -23,12 +23,12 @@ class EVMChainTransactionFeesException implements Exception { String toString() => exceptionMessage; } -class DeuroGasFeeException implements Exception { +class InsufficientGasFeeException implements Exception { final String exceptionMessage; final BigInt? requiredGasFee; final BigInt? currentBalance; - DeuroGasFeeException({ + InsufficientGasFeeException({ this.requiredGasFee, this.currentBalance, }) : exceptionMessage = _buildMessage(requiredGasFee, currentBalance); diff --git a/lib/ethereum/cw_ethereum.dart b/lib/ethereum/cw_ethereum.dart index 1e5530f8a..9f199443d 100644 --- a/lib/ethereum/cw_ethereum.dart +++ b/lib/ethereum/cw_ethereum.dart @@ -244,6 +244,11 @@ class CWEthereum extends Ethereum { DEuro(wallet as EthereumWallet) .withdrawSavings(amount, priority as EVMChainTransactionPriority); + @override + Future reinvestDEuroInterest( + WalletBase wallet, TransactionPriority priority) => + DEuro(wallet as EthereumWallet).reinvestInterest(priority as EVMChainTransactionPriority); + @override Future enableDEuroSaving(WalletBase wallet, TransactionPriority priority) => DEuro(wallet as EthereumWallet).enableSavings(priority as EVMChainTransactionPriority); diff --git a/lib/src/screens/integrations/deuro/savings_page.dart b/lib/src/screens/integrations/deuro/savings_page.dart index 232509c73..db2b3182a 100644 --- a/lib/src/screens/integrations/deuro/savings_page.dart +++ b/lib/src/screens/integrations/deuro/savings_page.dart @@ -1,6 +1,7 @@ import 'package:cake_wallet/core/execution_state.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; +import 'package:cake_wallet/src/screens/integrations/deuro/widgets/info_chip.dart'; import 'package:cake_wallet/src/screens/integrations/deuro/widgets/interest_card_widget.dart'; import 'package:cake_wallet/src/screens/integrations/deuro/widgets/savings_card_widget.dart'; import 'package:cake_wallet/src/screens/integrations/deuro/widgets/savings_edit_sheet.dart'; @@ -14,9 +15,11 @@ import 'package:cake_wallet/view_model/send/send_view_model_state.dart'; import 'package:cw_core/crypto_currency.dart'; import 'package:cw_core/pending_transaction.dart'; import 'package:cw_core/wallet_type.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:mobx/mobx.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class DEuroSavingsPage extends BasePage { final DEuroViewModel _dEuroViewModel; @@ -44,8 +47,7 @@ class DEuroSavingsPage extends BasePage { child: TextButton( style: TextButton.styleFrom( foregroundColor: Theme.of(context).colorScheme.onSurface, - overlayColor: WidgetStateColor.resolveWith( - (states) => Colors.transparent), + overlayColor: WidgetStateColor.resolveWith((states) => Colors.transparent), ), onPressed: _dEuroViewModel.reloadSavingsUserData, child: Icon( @@ -61,8 +63,7 @@ class DEuroSavingsPage extends BasePage { @override Widget body(BuildContext context) { - WidgetsBinding.instance - .addPostFrameCallback((_) => _setReactions(context, _dEuroViewModel)); + WidgetsBinding.instance.addPostFrameCallback((_) => _setReactions(context, _dEuroViewModel)); return Container( width: double.infinity, @@ -73,19 +74,50 @@ class DEuroSavingsPage extends BasePage { isDarkTheme: currentTheme.isDark, interestRate: "${_dEuroViewModel.interestRate}%", savingsBalance: _dEuroViewModel.savingsBalance, + fiatSavingsBalance: _dEuroViewModel.fiatSavingsBalance, currency: CryptoCurrency.deuro, + fiatCurrency: _dEuroViewModel.isFiatDisabled ? null : _dEuroViewModel.fiat, onAddSavingsPressed: () => _onSavingsAdd(context), onRemoveSavingsPressed: () => _onSavingsRemove(context), onApproveSavingsPressed: _dEuroViewModel.prepareApproval, + onTooltipPressed: () => _onSavingsTooltipPressed(context), isEnabled: _dEuroViewModel.isEnabled, + isLoading: _dEuroViewModel.isLoading, ), ), Observer( builder: (_) => InterestCardWidget( isDarkTheme: currentTheme.isDark, title: S.of(context).deuro_savings_collect_interest, - collectedInterest: _dEuroViewModel.accruedInterest, + fiatAccruedInterest: _dEuroViewModel.fiatAccruedInterest, + fiatCurrency: _dEuroViewModel.isFiatDisabled ? null : _dEuroViewModel.fiat, + accruedInterest: _dEuroViewModel.accruedInterest, onCollectInterest: _dEuroViewModel.prepareCollectInterest, + onReinvestInterest: _dEuroViewModel.prepareReinvestInterest, + onTooltipPressed: () => _onInterestTooltipPressed(context), + isEnabled: _dEuroViewModel.isEnabled, + ), + ), + Spacer(), + SafeArea( + child: Padding( + padding: EdgeInsets.only(bottom: 30), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + InfoChip( + label: S.of(context).deuro_about_deuro, + icon: CupertinoIcons.info, + onPressed: () => _showWelcomeTooltip(context), + ), + SizedBox(width: 10), + InfoChip( + label: S.of(context).website, + icon: CupertinoIcons.globe, + onPressed: () => launchUrlString("https://deuro.com/"), + ) + ], + ), ), ), ], @@ -94,14 +126,12 @@ class DEuroSavingsPage extends BasePage { } Future _onSavingsAdd(BuildContext context) async { - final amount = await Navigator.of(context).push(MaterialPageRoute( - builder: (BuildContext context) => SavingEditPage(isAdding: true))); + final amount = await _showEditBottomSheet(context, isAdding: true); if (amount != null) _dEuroViewModel.prepareSavingsEdit(amount, true); } Future _onSavingsRemove(BuildContext context) async { - final amount = await Navigator.of(context).push(MaterialPageRoute( - builder: (BuildContext context) => SavingEditPage(isAdding: false))); + final amount = await _showEditBottomSheet(context, isAdding: false); if (amount != null) _dEuroViewModel.prepareSavingsEdit(amount, false); } @@ -112,20 +142,41 @@ class DEuroSavingsPage extends BasePage { reaction((_) => dEuroViewModel.transaction, (PendingTransaction? tx) async { if (tx == null) return; + String title; + + switch (_dEuroViewModel.actionType) { + case DEuroActionType.deposit: + title = S.of(context).deuro_savings_add; + break; + case DEuroActionType.withdraw: + title = S.of(context).deuro_savings_remove; + break; + case DEuroActionType.reinvest: + title = S.of(context).deuro_reinvest_interest; + break; + default: + title = S.of(context).confirm_transaction; + break; + } + final result = await showModalBottomSheet( context: context, isDismissible: false, isScrollControlled: true, builder: (BuildContext bottomSheetContext) => ConfirmSendingBottomSheet( key: ValueKey('savings_page_confirm_sending_dialog_key'), - titleText: S.of(bottomSheetContext).confirm_transaction, + titleText: title, currentTheme: currentTheme, walletType: WalletType.ethereum, titleIconPath: CryptoCurrency.deuro.iconPath, currency: CryptoCurrency.deuro, amount: S.of(bottomSheetContext).send_amount, - amountValue: tx.amountFormatted, - fiatAmountValue: _dEuroViewModel.pendingTransactionFiatAmountFormatted, + amountValue: _dEuroViewModel.actionType == DEuroActionType.reinvest + ? _dEuroViewModel.accruedInterest + : tx.amountFormatted, + fiatAmountValue: _dEuroViewModel.actionType == DEuroActionType.reinvest + ? _dEuroViewModel.fiatAccruedInterest + : _dEuroViewModel.pendingTransactionFiatAmountFormatted, fee: S.of(bottomSheetContext).send_estimated_fee, feeValue: tx.feeFormatted, feeFiatAmount: _dEuroViewModel.pendingTransactionFeeFiatAmountFormatted, @@ -166,6 +217,7 @@ class DEuroSavingsPage extends BasePage { dEuroViewModel.commitApprovalTransaction(); }, change: tx.change, + explanation: S.of(context).deuro_savings_approve_app_description, ), ); @@ -186,27 +238,29 @@ class DEuroSavingsPage extends BasePage { contentImage: 'assets/images/birthday_cake.png', content: S.of(bottomSheetContext).deuro_tx_commited_content, actionButtonText: S.of(bottomSheetContext).close, - actionButtonKey: ValueKey('send_page_sent_dialog_ok_button_key'), + actionButtonKey: ValueKey('savings_page_sent_dialog_ok_button_key'), actionButton: () => Navigator.of(bottomSheetContext).pop(), ), ); }); } + if (state is NoEtherState) { + WidgetsBinding.instance.addPostFrameCallback((_) async => await _showNoEthTooltip(context)); + } + if (state is FailureState) { WidgetsBinding.instance.addPostFrameCallback((_) async { if (!context.mounted) return; await showPopUp( context: context, - builder: (BuildContext popupContext) { - return AlertWithOneAction( - alertTitle: S.of(popupContext).error, - alertContent: state.error, - buttonText: S.of(popupContext).ok, - buttonAction: () => Navigator.of(popupContext).pop(), - ); - }, + builder: (BuildContext popupContext) => AlertWithOneAction( + alertTitle: S.of(popupContext).error, + alertContent: state.error, + buttonText: S.of(popupContext).ok, + buttonAction: () => Navigator.of(popupContext).pop(), + ), ); }); } @@ -214,4 +268,107 @@ class DEuroSavingsPage extends BasePage { _isReactionsSet = true; } + + void _onSavingsTooltipPressed(BuildContext context) => _showTooltip( + context, + title: S.of(context).deuro_savings_balance, + content: S.of(context).deuro_savings_balance_tooltip, + key: 'savings_tooltip', + onLearnMorePressed: () {}, //ToDo + ); + + void _onInterestTooltipPressed(BuildContext context) => _showTooltip( + context, + title: S.of(context).deuro_savings_collect_interest, + content: S.of(context).deuro_savings_collect_interest_tooltip, + key: 'interest_tooltip', + onLearnMorePressed: () {}, //ToDo + ); + + void _showTooltip( + BuildContext context, { + required String title, + required String content, + required String key, + required VoidCallback onLearnMorePressed, + }) { + if (!context.mounted) return; + + showModalBottomSheet( + context: context, + builder: (BuildContext bottomSheetContext) => InfoBottomSheet( + currentTheme: currentTheme, + titleText: title, + titleIconPath: CryptoCurrency.deuro.iconPath, + content: content, + isTwoAction: true, + rightButtonText: S.of(context).close, + rightActionButtonKey: ValueKey('deuro_page_tooltip_dialog_${key}_ok_button_key'), + actionRightButton: () => Navigator.of(bottomSheetContext).pop(), + leftButtonText: S.of(context).learn_more, + leftActionButtonKey: ValueKey('deuro_page_tooltip_dialog_${key}_learn_more_button_key'), + actionLeftButton: onLearnMorePressed, + ), + ); + } + + Future _showWelcomeTooltip(BuildContext context) async { + if (!context.mounted) return; + + return showModalBottomSheet( + context: context, + isScrollControlled: true, + builder: (BuildContext bottomSheetContext) => InfoBottomSheet( + currentTheme: currentTheme, + height: 350, + titleText: "dEURO", + titleIconPath: CryptoCurrency.deuro.iconPath, + contentImage: 'assets/images/deuro_hero.png', + contentImageSize: 200, + content: S.of(context).deuro_savings_welcome_description, + isTwoAction: true, + rightButtonText: S.of(context).close, + rightActionButtonKey: ValueKey('deuro_page_tooltip_dialog_welcome_ok_button_key'), + actionRightButton: () => Navigator.of(bottomSheetContext).pop(), + leftButtonText: S.of(context).learn_more, + leftActionButtonKey: ValueKey('deuro_page_tooltip_dialog_welcome_learn_more_button_key'), + actionLeftButton: () => Navigator.of(bottomSheetContext).pop(), // ToDo + ), + ); + } + + Future _showNoEthTooltip(BuildContext context) async { + if (!context.mounted) return; + + return showModalBottomSheet( + context: context, + builder: (BuildContext bottomSheetContext) => InfoBottomSheet( + currentTheme: currentTheme, + titleText: title, + titleIconPath: CryptoCurrency.deuro.iconPath, + contentImage: 'assets/images/deuro_not_enough_eth.png', + content: S.of(context).deuro_tooltip_no_eth, + actionButtonKey: ValueKey('deuro_page_tooltip_dialog_no_eth_ok_button_key'), + actionButtonText: S.of(context).close, + actionButton: () => Navigator.of(bottomSheetContext).pop(), + ), + ); + } + + Future _showEditBottomSheet(BuildContext context, {bool isAdding = false}) async { + if (!context.mounted) return null; + + return showModalBottomSheet( + context: context, + isScrollControlled: true, + builder: (BuildContext bottomSheetContext) => SavingsEditSheet( + titleText: isAdding ? S.of(context).deuro_savings_add : S.of(context).deuro_savings_remove, + titleIconPath: CryptoCurrency.deuro.iconPath, + balanceTitle: isAdding + ? S.of(context).deuro_savings_available_to_add + : S.of(context).deuro_savings_available_to_remove, + balance: isAdding ? _dEuroViewModel.accountBalance : _dEuroViewModel.savingsBalance, + ), + ); + } } diff --git a/lib/src/screens/integrations/deuro/widgets/info_chip.dart b/lib/src/screens/integrations/deuro/widgets/info_chip.dart new file mode 100644 index 000000000..496b429f2 --- /dev/null +++ b/lib/src/screens/integrations/deuro/widgets/info_chip.dart @@ -0,0 +1,41 @@ +import 'package:flutter/material.dart'; + +class InfoChip extends StatelessWidget { + final String label; + final IconData icon; + final VoidCallback onPressed; + + const InfoChip({ + super.key, + required this.label, + required this.icon, + required this.onPressed, + }); + + @override + Widget build(BuildContext context) => Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(100), + color: Theme.of(context).colorScheme.surfaceContainer, + ), + padding: const EdgeInsets.fromLTRB(12, 6, 12, 6), + child: InkWell( + onTap: onPressed, + child: Row( + children: [ + Padding( + padding: const EdgeInsets.only(right: 5), + child: Icon( + icon, + color: Theme.of(context).colorScheme.onSurface, + ), + ), + Text( + label, + style: Theme.of(context).textTheme.bodyMedium, + ), + ], + ), + ), + ); +} diff --git a/lib/src/screens/integrations/deuro/widgets/interest_card_widget.dart b/lib/src/screens/integrations/deuro/widgets/interest_card_widget.dart index 03dd174f6..6d1852ec1 100644 --- a/lib/src/screens/integrations/deuro/widgets/interest_card_widget.dart +++ b/lib/src/screens/integrations/deuro/widgets/interest_card_widget.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/entities/fiat_currency.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/integrations/deuro/widgets/savings_card_widget.dart'; import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; @@ -5,63 +6,91 @@ import 'package:cw_core/crypto_currency.dart'; import 'package:flutter/material.dart'; class InterestCardWidget extends StatelessWidget { - InterestCardWidget({ + const InterestCardWidget({ required this.title, - required this.collectedInterest, - super.key, + required this.accruedInterest, required this.isDarkTheme, + required this.isEnabled, required this.onCollectInterest, + required this.onReinvestInterest, + required this.onTooltipPressed, + this.fiatAccruedInterest, + this.fiatCurrency, }); final String title; - final String collectedInterest; + final String accruedInterest; + final String? fiatAccruedInterest; + final FiatCurrency? fiatCurrency; final bool isDarkTheme; + final bool isEnabled; final VoidCallback onCollectInterest; + final VoidCallback onReinvestInterest; + final VoidCallback onTooltipPressed; @override - Widget build(BuildContext context) { - return Stack(children: [ - Container( - margin: EdgeInsets.symmetric(horizontal: 16), - width: double.infinity, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(15), - gradient: LinearGradient( - colors: [ - isDarkTheme - ? CustomThemeColors.cardGradientColorPrimaryDark - : CustomThemeColors.cardGradientColorPrimaryLight, - isDarkTheme - ? CustomThemeColors.cardGradientColorSecondaryDark - : CustomThemeColors.cardGradientColorSecondaryLight, - ], - begin: Alignment.topCenter, - end: Alignment.bottomCenter, + Widget build(BuildContext context) => Stack(children: [ + Container( + margin: EdgeInsets.symmetric(horizontal: 16), + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(15), + gradient: LinearGradient( + colors: [ + isDarkTheme + ? CustomThemeColors.cardGradientColorPrimaryDark + : CustomThemeColors.cardGradientColorPrimaryLight, + isDarkTheme + ? CustomThemeColors.cardGradientColorSecondaryDark + : CustomThemeColors.cardGradientColorSecondaryLight, + ], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), + ), + child: Padding( + padding: EdgeInsets.all(20), + child: Column( + children: [ + SavingsCard.getAssetBalanceRow( + context, + title: title, + amount: accruedInterest, + fiatAmount: fiatAccruedInterest, + currency: CryptoCurrency.deuro, + fiatCurrency: fiatCurrency, + hideSymbol: false, + onTooltipPressed: onTooltipPressed + ), + SizedBox(height: 10), + Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ + Expanded( + child: SavingsCard.getButton( + context, + imagePath: 'assets/images/collect_interest.png', + label: S.of(context).deuro_collect_interest, + onPressed: onCollectInterest, + backgroundColor: Theme.of(context).colorScheme.primary, + color: Theme.of(context).colorScheme.onPrimary, + enabled: isEnabled, + ), + ), + SizedBox(width: 12), + Expanded( + child: SavingsCard.getButton( + context, + label: S.of(context).deuro_reinvest_interest, + icon: Icons.account_balance_outlined, + onPressed: onReinvestInterest, + backgroundColor: Theme.of(context).colorScheme.surface, + color: Theme.of(context).colorScheme.onSecondaryContainer, + enabled: isEnabled, + ), + ), + ]), + ], + ), ), ), - child: Padding( - padding: EdgeInsets.all(20), - child: Column( - children: [ - SavingsCard.getAssetBalanceRow( - context, - title: title, - subtitle: collectedInterest, - currency: CryptoCurrency.deuro, - hideSymbol: true, - ), - SizedBox(height: 10), - SavingsCard.getButton( - context, - label: S.of(context).deuro_collect_interest, - onPressed: onCollectInterest, - backgroundColor: Theme.of(context).colorScheme.primary, - color: Theme.of(context).colorScheme.onPrimary, - ), - ], - ), - ), - ), - ]); - } + ]); } diff --git a/lib/src/screens/integrations/deuro/widgets/savings_card_widget.dart b/lib/src/screens/integrations/deuro/widgets/savings_card_widget.dart index 9196929c4..36b92b45b 100644 --- a/lib/src/screens/integrations/deuro/widgets/savings_card_widget.dart +++ b/lib/src/screens/integrations/deuro/widgets/savings_card_widget.dart @@ -1,21 +1,27 @@ import 'dart:math'; import 'package:auto_size_text/auto_size_text.dart'; +import 'package:cake_wallet/entities/fiat_currency.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/widgets/cake_image_widget.dart'; import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; import 'package:cw_core/crypto_currency.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class SavingsCard extends StatelessWidget { final bool isDarkTheme; final bool isEnabled; + final bool isLoading; final String interestRate; final String savingsBalance; + final String? fiatSavingsBalance; + final FiatCurrency? fiatCurrency; final CryptoCurrency currency; final VoidCallback onAddSavingsPressed; final VoidCallback onRemoveSavingsPressed; final VoidCallback onApproveSavingsPressed; + final VoidCallback onTooltipPressed; const SavingsCard({ super.key, @@ -26,162 +32,187 @@ class SavingsCard extends StatelessWidget { required this.onAddSavingsPressed, required this.onRemoveSavingsPressed, required this.onApproveSavingsPressed, + required this.onTooltipPressed, this.isEnabled = true, + this.isLoading = false, + this.fiatSavingsBalance, + this.fiatCurrency, }); @override Widget build(BuildContext context) => Container( - margin: const EdgeInsets.all(15), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(15), - gradient: LinearGradient( - colors: [ - isDarkTheme - ? CustomThemeColors.cardGradientColorPrimaryDark - : CustomThemeColors.cardGradientColorPrimaryLight, - isDarkTheme - ? CustomThemeColors.cardGradientColorSecondaryDark - : CustomThemeColors.cardGradientColorSecondaryLight, - ], - begin: Alignment.topCenter, - end: Alignment.bottomCenter, + margin: const EdgeInsets.all(15), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(15), + color: Theme.of(context).colorScheme.surfaceContainerLowest, ), - ), - child: Container( - padding: const EdgeInsets.all(20), - child: Column( - children: [ - getAssetBalanceRow(context, - title: S.of(context).deuro_savings_balance, - subtitle: savingsBalance, - currency: currency), - Padding( - padding: const EdgeInsets.symmetric(vertical: 10), - child: Row( - children: [ - Expanded( - child: Text( - 'Current APR', - style: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: - Theme.of(context).colorScheme.onSurfaceVariant, - fontWeight: FontWeight.w500, - ), - softWrap: true, - ), - ), - Text( - interestRate, + child: Column(children: [ + Padding( + padding: const EdgeInsets.only(top: 10, bottom: 10, left: 20, right: 20), + child: Row( + children: [ + Expanded( + child: Text( + 'Current APR', // ToDo: Localize style: Theme.of(context).textTheme.bodyMedium?.copyWith( color: Theme.of(context).colorScheme.onSurfaceVariant, fontWeight: FontWeight.w500, ), softWrap: true, ), - ], - ), - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: isEnabled - ? [ - Expanded( - child: getButton( - context, - label: S.of(context).deuro_savings_add, - imagePath: 'assets/images/received.png', - onPressed: onAddSavingsPressed, - backgroundColor: - Theme.of(context).colorScheme.primary, - color: Theme.of(context).colorScheme.onPrimary, - ), - ), - SizedBox(width: 12), - Expanded( - child: getButton( - context, - label: S.of(context).deuro_savings_remove, - imagePath: 'assets/images/upload.png', - onPressed: onRemoveSavingsPressed, - backgroundColor: - Theme.of(context).colorScheme.surface, - color: Theme.of(context) - .colorScheme - .onSecondaryContainer, - ), - ), - ] - : [ - Expanded( - child: getButton( - context, - label: S.of(context).deuro_savings_set_approval, - onPressed: onApproveSavingsPressed, - backgroundColor: - Theme.of(context).colorScheme.primary, - color: Theme.of(context).colorScheme.onPrimary, - ), - ) - ], - ), - ], - ), - )); - - static Widget getButton( - BuildContext context, { - required String label, - String? imagePath, - required VoidCallback onPressed, - required Color backgroundColor, - required Color color, - }) => - Semantics( - label: label, - child: OutlinedButton( - onPressed: onPressed, - style: OutlinedButton.styleFrom( - backgroundColor: backgroundColor, - side: BorderSide( - color: Theme.of(context).colorScheme.outlineVariant.withAlpha(0), - width: 0, - ), - shape: - RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), - ), - child: Container( - padding: const EdgeInsets.symmetric(vertical: 12), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - if (imagePath != null) ...[ - Image.asset( - imagePath, - height: 30, - width: 30, - color: color, - ), - const SizedBox(width: 8), - ], + ), Text( - label, + interestRate, style: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: color, - fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onSurfaceVariant, + fontWeight: FontWeight.w800, ), + softWrap: true, ), ], ), ), - ), + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(15), + gradient: LinearGradient( + colors: [ + isDarkTheme + ? CustomThemeColors.cardGradientColorPrimaryDark + : CustomThemeColors.cardGradientColorPrimaryLight, + isDarkTheme + ? CustomThemeColors.cardGradientColorSecondaryDark + : CustomThemeColors.cardGradientColorSecondaryLight, + ], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), + ), + padding: const EdgeInsets.all(20), + child: Column( + children: [ + Padding( + padding: const EdgeInsets.only(bottom: 20), + child: getAssetBalanceRow( + context, + title: S.of(context).deuro_savings_balance, + amount: savingsBalance, + fiatAmount: fiatSavingsBalance, + currency: currency, + fiatCurrency: fiatCurrency, + hideSymbol: false, + onTooltipPressed: onTooltipPressed, + ), + ), + isLoading + ? CupertinoActivityIndicator(color: Theme.of(context).colorScheme.onSurface) + : Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: isEnabled + ? [ + Expanded( + child: getButton( + context, + label: S.of(context).deuro_savings_add, + imagePath: 'assets/images/received.png', + onPressed: onAddSavingsPressed, + backgroundColor: Theme.of(context).colorScheme.primary, + color: Theme.of(context).colorScheme.onPrimary, + ), + ), + SizedBox(width: 12), + Expanded( + child: getButton( + context, + label: S.of(context).deuro_savings_remove, + imagePath: 'assets/images/upload.png', + onPressed: onRemoveSavingsPressed, + backgroundColor: Theme.of(context).colorScheme.surface, + color: Theme.of(context).colorScheme.onSecondaryContainer, + ), + ), + ] + : [ + Expanded( + child: getButton( + context, + label: S.of(context).deuro_savings_approve_app, + onPressed: onApproveSavingsPressed, + backgroundColor: Theme.of(context).colorScheme.primary, + color: Theme.of(context).colorScheme.onPrimary, + icon: Icons.check, + ), + ) + ], + ), + ], + ), + ), + ]), ); + static Widget getButton( + BuildContext context, { + required String label, + required VoidCallback onPressed, + required Color backgroundColor, + required Color color, + String? imagePath, + IconData? icon, + bool enabled = true, + double iconSize = 24, + }) { + backgroundColor = enabled ? backgroundColor : backgroundColor.withAlpha(130); + color = enabled ? color : color.withAlpha(130); + + return Semantics( + label: label, + child: OutlinedButton( + onPressed: enabled ? onPressed : null, + style: OutlinedButton.styleFrom( + backgroundColor: backgroundColor, + side: BorderSide( + color: Theme.of(context).colorScheme.outlineVariant.withAlpha(0), + width: 0, + ), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), + ), + child: Container( + padding: const EdgeInsets.symmetric(vertical: 12), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + if (imagePath != null) ...[ + Image.asset(imagePath, height: iconSize, width: iconSize, color: color), + const SizedBox(width: 8), + ], + if (icon != null) ...[ + Icon(icon, size: iconSize, color: color), + const SizedBox(width: 8), + ], + Text( + label, + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + color: color, + fontWeight: FontWeight.w700, + ), + ), + ], + ), + ), + ), + ); + } + static Widget getAssetBalanceRow( BuildContext context, { required String title, - required String subtitle, + required String amount, required CryptoCurrency currency, bool hideSymbol = true, + VoidCallback? onTooltipPressed, + FiatCurrency? fiatCurrency, + String? fiatAmount, }) => Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -190,16 +221,32 @@ class SavingsCard extends StatelessWidget { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - title, - style: Theme.of(context).textTheme.bodySmall?.copyWith( - color: Theme.of(context).colorScheme.onSurfaceVariant, - height: 1, + Row( + children: [ + Text( + title, + style: Theme.of(context).textTheme.bodySmall?.copyWith( + color: Theme.of(context).colorScheme.onSurfaceVariant, + height: 1, + ), + ), + if (onTooltipPressed != null) + Padding( + padding: EdgeInsets.only(left: 4), + child: InkWell( + onTap: onTooltipPressed, + child: Icon( + CupertinoIcons.question_circle, + size: 13, + color: Theme.of(context).colorScheme.onSurfaceVariant, + ), + ), ), + ], ), SizedBox(height: 6), AutoSizeText( - subtitle, + amount, style: Theme.of(context).textTheme.titleLarge?.copyWith( color: Theme.of(context).colorScheme.onSurface, fontWeight: FontWeight.w900, @@ -209,10 +256,21 @@ class SavingsCard extends StatelessWidget { maxLines: 1, textAlign: TextAlign.start, ), + if (fiatCurrency != null) + AutoSizeText( + "${fiatCurrency.title} $fiatAmount", + style: Theme.of(context).textTheme.titleLarge?.copyWith( + color: Theme.of(context).colorScheme.onSurfaceVariant, + fontWeight: FontWeight.w500, + fontSize: 16, + height: 1.5, + ), + maxLines: 1, + textAlign: TextAlign.start, + ), ], ), SizedBox( - //width: min(MediaQuery.of(context).size.width * 0.2, 100), child: Center( child: Column( children: [ @@ -225,15 +283,11 @@ class SavingsCard extends StatelessWidget { width: 30.0, child: Center( child: Text( - currency.title - .substring(0, min(currency.title.length, 2)), - style: - Theme.of(context).textTheme.bodySmall?.copyWith( - fontSize: 11, - color: Theme.of(context) - .colorScheme - .onSurfaceVariant, - ), + currency.title.substring(0, min(currency.title.length, 2)), + style: Theme.of(context).textTheme.bodySmall?.copyWith( + fontSize: 11, + color: Theme.of(context).colorScheme.onSurfaceVariant, + ), ), ), decoration: BoxDecoration( @@ -243,7 +297,7 @@ class SavingsCard extends StatelessWidget { ), ), if (!hideSymbol) ...[ - const SizedBox(height: 10), + const SizedBox(height: 3), Text( currency.title, style: Theme.of(context).textTheme.bodyMedium?.copyWith( diff --git a/lib/src/screens/integrations/deuro/widgets/savings_edit_sheet.dart b/lib/src/screens/integrations/deuro/widgets/savings_edit_sheet.dart index bb1733fb5..11feb27f7 100644 --- a/lib/src/screens/integrations/deuro/widgets/savings_edit_sheet.dart +++ b/lib/src/screens/integrations/deuro/widgets/savings_edit_sheet.dart @@ -1,24 +1,39 @@ import 'package:auto_size_text/auto_size_text.dart'; import 'package:cake_wallet/generated/i18n.dart'; -import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/screens/integrations/deuro/widgets/numpad.dart'; +import 'package:cake_wallet/src/widgets/bottom_sheet/base_bottom_sheet_widget.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:flutter/material.dart'; -class SavingEditPage extends BasePage { - final bool isAdding; +class SavingsEditSheet extends BaseBottomSheet { + final String? balance; + final String? balanceTitle; - SavingEditPage({required this.isAdding}); - - String get title => - isAdding ? S.current.deuro_savings_add : S.current.deuro_savings_remove; + const SavingsEditSheet({ + required super.titleText, + super.titleIconPath, + this.balance, + this.balanceTitle, + }); @override - Widget body(BuildContext context) => _SavingsEditBody(); + Widget contentWidget(BuildContext context) => SizedBox( + height: 600, + child: _SavingsEditBody( + balance: balance, + balanceTitle: balanceTitle, + ), + ); + + @override + Widget footerWidget(BuildContext context) => SizedBox.shrink(); } class _SavingsEditBody extends StatefulWidget { - const _SavingsEditBody(); + final String? balance; + final String? balanceTitle; + + const _SavingsEditBody({this.balance, this.balanceTitle}); @override State createState() => _SavingsEditBodyState(); @@ -27,8 +42,7 @@ class _SavingsEditBody extends StatefulWidget { class _SavingsEditBodyState extends State<_SavingsEditBody> { @override void initState() { - WidgetsBinding.instance - .addPostFrameCallback((_) => _numpadFocusNode.requestFocus()); + WidgetsBinding.instance.addPostFrameCallback((_) => _numpadFocusNode.requestFocus()); super.initState(); } @@ -51,31 +65,36 @@ class _SavingsEditBodyState extends State<_SavingsEditBody> { child: AutoSizeText( "${amount.toString()} dEuro", maxLines: 1, - maxFontSize: 60, + maxFontSize: 32, style: Theme.of(context).textTheme.headlineMedium?.copyWith( fontWeight: FontWeight.w600, - fontSize: 60, + fontSize: 32, color: Theme.of(context).colorScheme.onSurface, ), textAlign: TextAlign.center, ), ), )), + if (widget.balance != null && widget.balanceTitle != null) ...[ + Divider(), + AssetBalanceRow( + title: widget.balanceTitle!, + amount: widget.balance!, + onAllPressed: () => setState(() => amount = widget.balance!), + ), + ], NumberPad( focusNode: _numpadFocusNode, onNumberPressed: (i) => setState( () => amount = amount == '0' ? i.toString() : '${amount}${i}', ), onDeletePressed: () => setState( - () => amount = amount.length > 1 - ? amount.substring(0, amount.length - 1) - : '0', + () => amount = amount.length > 1 ? amount.substring(0, amount.length - 1) : '0', ), - onDecimalPressed: () => - setState(() => amount = '${amount.replaceAll('.', '')}.'), + onDecimalPressed: () => setState(() => amount = '${amount.replaceAll('.', '')}.'), ), Padding( - padding: const EdgeInsets.fromLTRB(16, 12, 16, 34), + padding: const EdgeInsets.fromLTRB(16, 12, 16, 0), child: LoadingPrimaryButton( onPressed: () => Navigator.pop(context, amount), text: S.of(context).confirm, @@ -88,3 +107,74 @@ class _SavingsEditBodyState extends State<_SavingsEditBody> { ]), ); } + +class AssetBalanceRow extends StatelessWidget { + final String title; + final String amount; + final VoidCallback onAllPressed; + + const AssetBalanceRow({ + super.key, + required this.title, + required this.amount, + required this.onAllPressed, + }); + + @override + Widget build(BuildContext context) => Padding( + padding: const EdgeInsets.fromLTRB(20, 10, 20, 10), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Text( + title, + style: Theme.of(context).textTheme.bodySmall?.copyWith( + color: Theme.of(context).colorScheme.onSurfaceVariant, + height: 1, + ), + ), + ], + ), + SizedBox(height: 6), + AutoSizeText( + amount, + style: Theme.of(context).textTheme.bodyLarge?.copyWith( + color: Theme.of(context).colorScheme.onSurface, + fontWeight: FontWeight.w400, + height: 1, + ), + maxLines: 1, + textAlign: TextAlign.start, + ), + ], + ), + SizedBox( + child: Center( + child: InkWell( + onTap: onAllPressed, + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + color: Theme.of(context).colorScheme.surfaceContainer, + ), + padding: EdgeInsets.fromLTRB(15, 10, 15, 10), + child: Text( + S.of(context).all, + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + color: Theme.of(context).colorScheme.onSurface, + ), + ), + ), + ), + ), + ), + ], + ), + ); +} diff --git a/lib/src/widgets/bottom_sheet/base_bottom_sheet_widget.dart b/lib/src/widgets/bottom_sheet/base_bottom_sheet_widget.dart index 2fbbf6284..bcd47b0bf 100644 --- a/lib/src/widgets/bottom_sheet/base_bottom_sheet_widget.dart +++ b/lib/src/widgets/bottom_sheet/base_bottom_sheet_widget.dart @@ -3,8 +3,9 @@ import 'package:flutter/material.dart'; abstract class BaseBottomSheet extends StatelessWidget { final String titleText; final String? titleIconPath; + final double maxHeight; - const BaseBottomSheet({required this.titleText, this.titleIconPath}); + const BaseBottomSheet({required this.titleText, this.titleIconPath, this.maxHeight = 900}); Widget headerWidget(BuildContext context) { return Column( @@ -59,7 +60,7 @@ abstract class BaseBottomSheet extends StatelessWidget { @override Widget build(BuildContext context) { return ConstrainedBox( - constraints: BoxConstraints(maxHeight: 600), + constraints: BoxConstraints(maxHeight: maxHeight), child: ClipRRect( borderRadius: const BorderRadius.only( topLeft: Radius.circular(30.0), topRight: Radius.circular(30.0)), diff --git a/lib/src/widgets/bottom_sheet/confirm_sending_bottom_sheet_widget.dart b/lib/src/widgets/bottom_sheet/confirm_sending_bottom_sheet_widget.dart index 48009d084..a7ed6e45f 100644 --- a/lib/src/widgets/bottom_sheet/confirm_sending_bottom_sheet_widget.dart +++ b/lib/src/widgets/bottom_sheet/confirm_sending_bottom_sheet_widget.dart @@ -22,6 +22,7 @@ class ConfirmSendingBottomSheet extends BaseBottomSheet { final String fee; final String feeValue; final String feeFiatAmount; + final String? explanation; final List outputs; final VoidCallback onSlideComplete; final WalletType walletType; @@ -46,6 +47,7 @@ class ConfirmSendingBottomSheet extends BaseBottomSheet { required this.onSlideComplete, required this.walletType, this.change, + this.explanation, this.isOpenCryptoPay = false, Key? key, }) : showScrollbar = outputs.length > 3, @@ -87,9 +89,18 @@ class ConfirmSendingBottomSheet extends BaseBottomSheet { tileBackgroundColor: tileBackgroundColor, ), ), + if (explanation != null) + Padding( + padding: const EdgeInsets.only(bottom: 8), + child: StandardInfoTile( + value: explanation!, + itemTitleTextStyle: itemTitleTextStyle, + tileBackgroundColor: tileBackgroundColor, + ), + ), StandardTile( itemTitle: amount, - itemValue: amountValue + ' ${currency.title}', + itemValue: '$amountValue ${currency.title}', itemTitleTextStyle: itemTitleTextStyle, itemSubTitle: fiatAmountValue, itemSubTitleTextStyle: itemSubTitleTextStyle, @@ -260,6 +271,34 @@ class StandardTile extends StatelessWidget { } } +class StandardInfoTile extends StatelessWidget { + const StandardInfoTile({ + super.key, + required this.value, + required this.itemTitleTextStyle, + required this.tileBackgroundColor, + }); + + final String value; + final TextStyle itemTitleTextStyle; + final Color tileBackgroundColor; + + @override + Widget build(BuildContext context) => Semantics( + container: true, + label: value, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 8), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: tileBackgroundColor, + ), + width: double.infinity, + child: Text(value, style: itemTitleTextStyle), + ), + ); +} + class AddressTile extends StatelessWidget { const AddressTile({ super.key, diff --git a/lib/src/widgets/bottom_sheet/info_bottom_sheet_widget.dart b/lib/src/widgets/bottom_sheet/info_bottom_sheet_widget.dart index 3a6403651..8b02b7fbb 100644 --- a/lib/src/widgets/bottom_sheet/info_bottom_sheet_widget.dart +++ b/lib/src/widgets/bottom_sheet/info_bottom_sheet_widget.dart @@ -39,6 +39,8 @@ class InfoBottomSheet extends BaseBottomSheet { final VoidCallback? actionRightButton; final Key? rightActionButtonKey; final Key? leftActionButtonKey; + final double height; + final double? contentImageSize; InfoBottomSheet({ required String titleText, @@ -46,9 +48,11 @@ class InfoBottomSheet extends BaseBottomSheet { required this.currentTheme, this.contentImage, this.contentImageColor, + this.contentImageSize, this.content, this.isTwoAction = false, this.showDontAskMeCheckbox = false, + this.height = 200, this.onCheckboxChanged, this.actionButtonText, this.actionButton, @@ -59,18 +63,22 @@ class InfoBottomSheet extends BaseBottomSheet { this.actionRightButton, this.rightActionButtonKey, this.leftActionButtonKey, - }) : super(titleText: titleText, titleIconPath: titleIconPath); + double maxHeight = 900, + }) : super(titleText: titleText, titleIconPath: titleIconPath, maxHeight: maxHeight); @override Widget contentWidget(BuildContext context) { return SizedBox( - height: 200, + height: height, child: Column( children: [ if (contentImage != null) Expanded( flex: 4, - child: getImage(contentImage!, imageColor: contentImageColor), + child: SizedBox( + width: contentImageSize, + child: getImage(contentImage!, imageColor: contentImageColor), + ), ) else Container(), diff --git a/lib/view_model/integrations/deuro_view_model.dart b/lib/view_model/integrations/deuro_view_model.dart index 925df1760..34376c610 100644 --- a/lib/view_model/integrations/deuro_view_model.dart +++ b/lib/view_model/integrations/deuro_view_model.dart @@ -1,4 +1,5 @@ import 'package:cake_wallet/core/execution_state.dart'; +import 'package:cake_wallet/core/utilities.dart'; import 'package:cake_wallet/entities/calculate_fiat_amount.dart'; import 'package:cake_wallet/entities/fiat_currency.dart'; import 'package:cake_wallet/ethereum/ethereum.dart'; @@ -8,10 +9,9 @@ import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/view_model/dashboard/balance_view_model.dart'; import 'package:cake_wallet/view_model/send/send_view_model_state.dart'; import 'package:cw_core/crypto_currency.dart'; -import 'package:cw_core/pending_transaction.dart'; -import 'package:cw_core/utils/print_verbose.dart'; -import 'package:cw_core/wallet_type.dart'; import 'package:cw_core/parse_fixed.dart'; +import 'package:cw_core/pending_transaction.dart'; +import 'package:cw_core/wallet_type.dart'; import 'package:mobx/mobx.dart'; part 'deuro_view_model.g.dart'; @@ -21,62 +21,47 @@ class DEuroViewModel = DEuroViewModelBase with _$DEuroViewModel; abstract class DEuroViewModelBase with Store { final AppStore _appStore; - DEuroViewModelBase(this._appStore, this.balanceViewModel, this._settingsStore, this._fiatConversationStore) { + DEuroViewModelBase( + this._appStore, + this.balanceViewModel, + this._settingsStore, + this._fiatConversationStore, + ) { reloadInterestRate(); reloadSavingsUserData(); } + final BalanceViewModel balanceViewModel; final SettingsStore _settingsStore; final FiatConversionStore _fiatConversationStore; - + @computed bool get isFiatDisabled => balanceViewModel.isFiatDisabled; @computed String get pendingTransactionFiatAmountFormatted => - isFiatDisabled ? '' : pendingTransactionFiatAmount + ' ' + fiat.title; + isFiatDisabled ? '' : '$pendingTransactionFiatAmount ${fiat.title}'; @computed String get pendingTransactionFeeFiatAmountFormatted => - isFiatDisabled ? '' : pendingTransactionFeeFiatAmount + ' ' + fiat.title; + isFiatDisabled ? '' : '$pendingTransactionFeeFiatAmount ${fiat.title}'; FiatCurrency get fiat => _settingsStore.fiatCurrency; - @computed - String get pendingTransactionFiatAmount { - if (transaction == null) { - return '0.00'; - } - - try { - final keys = _fiatConversationStore.prices.keys.toList(); - CryptoCurrency deuro = CryptoCurrency.deuro; - for (var i = 0; i < keys.length; i++) { - if (keys[i].title == "DEURO") { - deuro = keys[i]; - } - } - final fiat = calculateFiatAmount( - price: _fiatConversationStore.prices[deuro]!, - cryptoAmount: transaction!.amountFormatted); - return fiat; - } catch (e) { - printV(e); - return '0.02'; - } - } + String get pendingTransactionFiatAmount => + transaction == null ? '0.00' : _getDEuroFiatAmount(transaction!.amountFormatted); @computed String get pendingTransactionFeeFiatAmount { try { if (transaction != null) { final currency = CryptoCurrency.eth; - final fiat = calculateFiatAmount( - price: _fiatConversationStore.prices[currency]!, - cryptoAmount: transaction!.feeFormatted.substring(0, transaction!.feeFormatted.indexOf(" ")), - ); - return fiat; + return calculateFiatAmount( + price: _fiatConversationStore.prices[currency]!, + cryptoAmount: + transaction!.feeFormatted.substring(0, transaction!.feeFormatted.indexOf(" ")), + ); } else { return '0.00'; } @@ -85,9 +70,20 @@ abstract class DEuroViewModelBase with Store { } } + @computed + String get accountBalance { + final dEuroKey = balanceViewModel.balances.keys + .firstWhereOrNull((e) => e.title == CryptoCurrency.deuro.title); + if (dEuroKey == null) return '0.00'; + return balanceViewModel.balances[dEuroKey]?.availableBalance ?? '0.00'; + } + @observable String savingsBalance = '0.00'; + @computed + String get fiatSavingsBalance => _getDEuroFiatAmount(savingsBalance); + @observable ExecutionState state = InitialExecutionState(); @@ -97,12 +93,21 @@ abstract class DEuroViewModelBase with Store { @observable String accruedInterest = '0.00'; + @computed + String get fiatAccruedInterest => _getDEuroFiatAmount(accruedInterest); + @observable BigInt approvedTokens = BigInt.zero; @computed bool get isEnabled => approvedTokens > BigInt.zero; + @observable + bool isLoading = true; + + @observable + DEuroActionType actionType = DEuroActionType.none; + @observable PendingTransaction? transaction = null; @@ -122,6 +127,7 @@ abstract class DEuroViewModelBase with Store { accruedInterest = ethereum! .formatterEthereumAmountToDouble(amount: await accruedInterestRaw) .toStringAsFixed(6); + isLoading = false; } @action @@ -133,6 +139,11 @@ abstract class DEuroViewModelBase with Store { @action Future prepareApproval() async { + final ethBalance = balanceViewModel.balances[CryptoCurrency.eth]?.availableBalance ?? "0"; + if ((double.tryParse(ethBalance) ?? 0) == 0) { + state = NoEtherState(); + return; + } try { state = TransactionCommitting(); final priority = _appStore.settingsStore.priority[WalletType.ethereum]!; @@ -149,6 +160,7 @@ abstract class DEuroViewModelBase with Store { state = TransactionCommitting(); final amount = parseFixed(amountRaw, 18); final priority = _appStore.settingsStore.priority[WalletType.ethereum]!; + actionType = isAdding ? DEuroActionType.deposit : DEuroActionType.withdraw; transaction = await (isAdding ? ethereum!.addDEuroSaving(_appStore.wallet!, amount, priority) : ethereum!.removeDEuroSaving(_appStore.wallet!, amount, priority)); @@ -160,6 +172,18 @@ abstract class DEuroViewModelBase with Store { Future prepareCollectInterest() => prepareSavingsEdit(accruedInterest, false); + Future prepareReinvestInterest() async { + try { + state = TransactionCommitting(); + actionType = DEuroActionType.reinvest; + final priority = _appStore.settingsStore.priority[WalletType.ethereum]!; + transaction = await ethereum!.reinvestDEuroInterest(_appStore.wallet!, priority); + state = InitialExecutionState(); + } catch (e) { + state = FailureState(e.toString()); + } + } + @action Future commitTransaction() async { if (transaction != null) { @@ -167,6 +191,7 @@ abstract class DEuroViewModelBase with Store { state = TransactionCommitting(); await transaction!.commit(); transaction = null; + actionType = DEuroActionType.none; reloadSavingsUserData(); state = TransactionCommitted(); } catch (e) { @@ -194,6 +219,32 @@ abstract class DEuroViewModelBase with Store { void dismissTransaction() { transaction = null; approvalTransaction = null; + actionType = DEuroActionType.none; state = InitialExecutionState(); } + + String _getDEuroFiatAmount(String amount) { + try { + CryptoCurrency deuro = CryptoCurrency.deuro; + final keys = _fiatConversationStore.prices.keys.toList(); + for (final key in keys) { + if (key.title == "DEURO") deuro = key; + } + return calculateFiatAmount( + price: _fiatConversationStore.prices[deuro]!, + cryptoAmount: amount, + ); + } catch (_) { + return '0.00'; + } + } +} + +class NoEtherState extends ExecutionState {} + +enum DEuroActionType { + deposit, + withdraw, + reinvest, + none; } diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index 0a48d4da5..71562539d 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -245,14 +245,24 @@ "descending": "النزول", "description": "ﻒﺻﻭ", "destination_tag": "علامة الوجهة:", + "deuro_about_deuro": "حول ديورو", "deuro_collect_interest": "يجمع", + "deuro_reinvest_interest": "إعادة الاستثمار", "deuro_savings": "الادخار ديورو", "deuro_savings_add": "إيداع", + "deuro_savings_approve_app": "الموافقة على التطبيق", + "deuro_savings_approve_app_description": "اسمح لعقد Deuro Smart بإدارة رموز Deuro الخاصة بك من أجل الادخار ، ولكن ليس القدرة على إرسال أو أخذ Deuro الخاص بك.", + "deuro_savings_available_to_add": "متاح للإضافة", + "deuro_savings_available_to_remove": "متاح لإزالة", "deuro_savings_balance": "توازن الادخار", + "deuro_savings_balance_tooltip": "هذا يمثل رصيد مدخراتك الحالي ، والذي سيحقق الفائدة مع مرور الوقت. يمكنك إيداع أو سحب Deuro الخاص بك في أي وقت معين.", "deuro_savings_collect_interest": "جمع الاهتمام", + "deuro_savings_collect_interest_tooltip": "يمثل هذا اهتمامك الحالي المكتسب ، والذي يمكنك جمعه في رصيد Deuro الخاص بك في أي وقت.", "deuro_savings_remove": "ينسحب", "deuro_savings_set_approval": "تعيين الموافقة", "deuro_savings_subtitle": "كسب ما يصل إلى 10 ٪ فائدة على مقتنيات Deuro Stablecoin", + "deuro_savings_welcome_description": "Deuro هو stablecoin غير مركزي بالكامل ، مضمونة مربوطة إلى اليورو-آمنة ، متعددة الاستخدامات ، مقاومة للرقابة دون الاضطرار إلى الاعتماد على أوراكليس. 1 ديورو = 1 يورو.", + "deuro_tooltip_no_eth": "من أجل تمكين Deuro ، يجب أن يكون لديك ETH في محفظتك.", "deuro_tx_commited_content": "قد يستغرق الأمر بضع ثوانٍ حتى يتم تأكيد المعاملة وينعكس على الشاشة", "device_is_signing": "الجهاز يوقع", "dfx_option_description": "شراء التشفير مع EUR & CHF. لعملاء البيع بالتجزئة والشركات في أوروبا", @@ -1077,6 +1087,7 @@ "walletConnect": "WalletConnect", "wallets": "المحافظ", "warning": "تحذير", + "website": "موقع إلكتروني", "welcome": "مرحباً", "welcome_subtitle_new_wallet": "إذا كنت ترغب في البدء من جديد ، فانقر فوق إنشاء محفظة جديدة أدناه وستكون خارج السباقات.", "welcome_subtitle_restore_wallet": "إذا كان لديك محفظة موجودة تريد إحضارها إلى كعكة ، فما عليك سوى اختيار استعادة المحفظة الموجودة وسنمشيك خلال العملية.", diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb index c083b8297..f7edf0a1a 100644 --- a/res/values/strings_bg.arb +++ b/res/values/strings_bg.arb @@ -245,14 +245,24 @@ "descending": "Низходящ", "description": "Описание", "destination_tag": "Destination tag:", + "deuro_about_deuro": "За Деуро", "deuro_collect_interest": "Събиране", + "deuro_reinvest_interest": "Реинвестиране", "deuro_savings": "Спестявания на Деуро", "deuro_savings_add": "Депозит", + "deuro_savings_approve_app": "Одобрете приложението", + "deuro_savings_approve_app_description": "Позволете на интелигентния договор на Deuro да управлява вашите маркери Deuro за спестявания, но не и възможността да изпращате или вземете вашето Deuro.", + "deuro_savings_available_to_add": "На разположение за добавяне", + "deuro_savings_available_to_remove": "На разположение за премахване", "deuro_savings_balance": "Спестотен баланс", + "deuro_savings_balance_tooltip": "Това представлява текущия ви спестовен баланс, което ще натрупа лихва във времето. Можете да депозирате или изтеглите вашето Deuro във всеки даден момент.", "deuro_savings_collect_interest": "Събиране на интерес", + "deuro_savings_collect_interest_tooltip": "Това представлява настоящата ви спечелена лихва, която можете да съберете в баланса на Deuro по всяко време.", "deuro_savings_remove": "Оттегляне", "deuro_savings_set_approval": "Задайте одобрение", "deuro_savings_subtitle": "Печелете до 10% лихва за вашите Deuro Stablecoin Holdings", + "deuro_savings_welcome_description": "Deuro е напълно децентрализиран, колатерализиран стабилност, привързан към еврото-сигурно, универсално и резистентно на цензура, без да се налага да разчита на оракули. 1 Deuro = 1 евро.", + "deuro_tooltip_no_eth": "За да активирате Deuro, трябва да имате ETH в портфейла си.", "deuro_tx_commited_content": "Може да отнеме няколко секунди, за да може транзакцията да се потвърди и да бъде отразена на екрана", "device_is_signing": "Устройството подписва", "dfx_option_description": "Купете криптовалута с Eur & CHF. За търговски и корпоративни клиенти в Европа", @@ -1077,6 +1087,7 @@ "walletConnect": "WalletConnect", "wallets": "Портфейли", "warning": "Внимание", + "website": "Уебсайт", "welcome": "Добре дошли", "welcome_subtitle_new_wallet": "Ако искате да стартирате свеж, докоснете Създайте нов портфейл по -долу и ще се откажете от състезанията.", "welcome_subtitle_restore_wallet": "Ако имате съществуващ портфейл, който искате да внесете в тортата, просто изберете възстановяване на съществуващия портфейл и ще ви преведем през процеса.", diff --git a/res/values/strings_cs.arb b/res/values/strings_cs.arb index 49becb211..761fba73e 100644 --- a/res/values/strings_cs.arb +++ b/res/values/strings_cs.arb @@ -245,14 +245,24 @@ "descending": "Klesající", "description": "Popis", "destination_tag": "Destination Tag:", + "deuro_about_deuro": "O Deuro", "deuro_collect_interest": "Sbírat", + "deuro_reinvest_interest": "Reinvest", "deuro_savings": "dEuro úspory", "deuro_savings_add": "Vklad", + "deuro_savings_approve_app": "Schválit aplikaci", + "deuro_savings_approve_app_description": "Nechte deuro inteligentní smlouvu spravovat vaše deuro tokeny pro úspory, ale ne schopnost poslat nebo vzít svůj deuro.", + "deuro_savings_available_to_add": "K dispozici k přidání", + "deuro_savings_available_to_remove": "K dispozici k odstranění", "deuro_savings_balance": "Úspora zůstatek", + "deuro_savings_balance_tooltip": "To představuje váš současný zůstatek úspor, který v průběhu času narůstá úrok. Deuro můžete vložit nebo stáhnout v daném okamžiku.", "deuro_savings_collect_interest": "Sbírat zájem", + "deuro_savings_collect_interest_tooltip": "To představuje váš současný vydělaný úrok, který můžete kdykoli shromáždit do rovnováhy Deuro.", "deuro_savings_remove": "Odstoupit", "deuro_savings_set_approval": "Stanovit schválení", "deuro_savings_subtitle": "Získejte až 10% úrok z vašeho Deuro Stablecoin Holdings", + "deuro_savings_welcome_description": "Deuro je plně decentralizovaný, kolateralizovaný stablecoin navázaný na euro-bezpečný, všestranný a cenzurní odolný vůči, aniž by se musel spoléhat na věštcové. 1 deuro = 1 euro.", + "deuro_tooltip_no_eth": "Chcete -li povolit Deuro, musíte mít v peněžence ETH.", "deuro_tx_commited_content": "Transakce může trvat několik sekund, aby se potvrdila a odrážela se na obrazovce", "device_is_signing": "Zařízení se podpisu", "dfx_option_description": "Koupit krypto s EUR & CHF. Pro maloobchodní a firemní zákazníky v Evropě", @@ -1077,6 +1087,7 @@ "walletConnect": "WalletConnect", "wallets": "Peněženky", "warning": "Varování", + "website": "Web", "welcome": "Vítejte", "welcome_subtitle_new_wallet": "Pokud chcete začít čerstvě, klepněte na Vytvořit novou peněženku níže a budete na závodech.", "welcome_subtitle_restore_wallet": "Pokud máte existující peněženku, kterou chcete přinést do dortu, jednoduše si vyberte obnovení stávající peněženky a my vás projdeme procesem.", diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 4f5c3f87e..5f14b2562 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -245,14 +245,24 @@ "descending": "Absteigend", "description": "Beschreibung", "destination_tag": "Ziel-Tag:", + "deuro_about_deuro": "Über dEURO", "deuro_collect_interest": "Auszahlen", + "deuro_reinvest_interest": "Reinvestieren", "deuro_savings": "dEuro-Savings", "deuro_savings_add": "Einzahlen", + "deuro_savings_approve_app": "App genehmigen", + "deuro_savings_approve_app_description": "Erlauben Sie dem dEURO Smart Contract, Ihre dEURO-Token zu verwalten.", + "deuro_savings_available_to_add": "Verfügbar zum Hinzufügen", + "deuro_savings_available_to_remove": "Verfügbar zum Entfernen", "deuro_savings_balance": "Sparguthaben", + "deuro_savings_balance_tooltip": "Dies stellt Ihr aktuelles Sparbetrag dar, der im Laufe der Zeit Zinsen generiert. Sie können Ihren dEURO zu jedem Zeitpunkt ein- oder auszahlen.", "deuro_savings_collect_interest": "Interesse sammeln", + "deuro_savings_collect_interest_tooltip": "Dies stellt Ihre aktuell verdiente Zinsen dar, diese Sie können jederzeit auszahlen.", "deuro_savings_remove": "Auszahlen", "deuro_savings_set_approval": "Genehmigung festlegen", "deuro_savings_subtitle": "Verdienen Sie bis zu 10% Zinsen für Ihre dEuro Stablecoin Holdings", + "deuro_savings_welcome_description": "dEuro ist ein vollständig dezentraler, gesicherter Stablecoin, der an den Euro gebunden ist, vielseitig und zensurresistent, ohne sich auf Orakel verlassen zu müssen. 1 dEuro = 1 Euro.", + "deuro_tooltip_no_eth": "Um dEURO zu aktivieren, müssen Sie ETH in Ihrer Wallet haben.", "deuro_tx_commited_content": "Es kann ein paar Sekunden dauern, bis die Transaktion bestätigt und auf dem Bildschirm angezeigt", "device_is_signing": "Das Gerät unterschreibt", "dfx_option_description": "Kaufen Sie Krypto mit EUR & CHF. Für Einzelhandel und Unternehmenskunden in Europa", @@ -1080,6 +1090,7 @@ "walletConnect": "WalletConnect", "wallets": "Wallets", "warning": "Warnung", + "website": "Webseite", "welcome": "Willkommen", "welcome_subtitle_new_wallet": "Wenn Sie frisch anfangen möchten, tippen Sie unten neue Wallet und schon sind Sie bereit.", "welcome_subtitle_restore_wallet": "Wenn Sie über eine vorhandene Wallet verfügen, die Sie in Cake Wallet öffnen möchten, drücken Sie auf Vorhandene Wallet wiederherstellen und wir werden Sie durch den Prozess führen.", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 6b1539059..75096929a 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -245,14 +245,24 @@ "descending": "Descending", "description": "Description", "destination_tag": "Destination tag:", + "deuro_about_deuro": "About dEURO", "deuro_collect_interest": "Collect", + "deuro_reinvest_interest": "Reinvest", "deuro_savings": "dEuro Savings", "deuro_savings_add": "Deposit", + "deuro_savings_approve_app": "Approve App", + "deuro_savings_approve_app_description": "Allow the dEURO smart contract to manage your dEURO tokens for savings, but not the ability to send or take your dEURO.", + "deuro_savings_available_to_add": "Available to add", + "deuro_savings_available_to_remove": "Available to remove", "deuro_savings_balance": "Savings Balance", + "deuro_savings_balance_tooltip": "This represents your current savings balance, which will accrue interest over time. You can deposit or withdraw your dEURO at any given time.", "deuro_savings_collect_interest": "Collect interest", + "deuro_savings_collect_interest_tooltip": "This represents your current earned interest, which you can collect into your dEURO balance at any time.", "deuro_savings_remove": "Withdraw", "deuro_savings_set_approval": "Set approval", "deuro_savings_subtitle": "Earn up to 10% interest on your dEuro Stablecoin holdings", + "deuro_savings_welcome_description": "dEURO is a fully decentralized, collateralized stablecoin pegged to the Euro — secure, versatile, and censorship-resistant without having to rely on oracles. 1 dEURO = 1 EURO.", + "deuro_tooltip_no_eth": "In order to enable dEURO, you must have ETH in your wallet.", "deuro_tx_commited_content": "It might take a couple of seconds for the transaction to confirm and be reflected on screen", "device_is_signing": "Device is signing", "dfx_option_description": "Buy crypto with EUR & CHF. For retail and corporate customers in Europe", @@ -1078,6 +1088,7 @@ "walletConnect": "WalletConnect", "wallets": "Wallets", "warning": "Warning", + "website": "Website", "welcome": "Welcome", "welcome_subtitle_new_wallet": "If you want to start fresh, tap Create New Wallet below and you'll be off to the races.", "welcome_subtitle_restore_wallet": "If you have an existing wallet you want to bring into Cake, simply choose Restore Existing Wallet and we'll walk you through the process.", @@ -1114,4 +1125,4 @@ "you_will_send": "Convert from", "youCanGoBackToYourDapp": "You can go back to your dApp now", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 3d6e4e3f9..3532af6fd 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -245,14 +245,24 @@ "descending": "Descendente", "description": "Descripción", "destination_tag": "Etiqueta de destino:", + "deuro_about_deuro": "Sobre Deuro", "deuro_collect_interest": "Recolectar", + "deuro_reinvest_interest": "Reinvertir", "deuro_savings": "ahorros de deuro", "deuro_savings_add": "Depósito", + "deuro_savings_approve_app": "Aprobar la aplicación", + "deuro_savings_approve_app_description": "Permita que el contrato inteligente Deuro administre sus tokens Deuro para obtener ahorros, pero no la capacidad de enviar o tomar su Deuro.", + "deuro_savings_available_to_add": "Disponible para agregar", + "deuro_savings_available_to_remove": "Disponible para eliminar", "deuro_savings_balance": "Saldo de ahorro", + "deuro_savings_balance_tooltip": "Esto representa su saldo de ahorro actual, que acumulará interés con el tiempo. Puede depositar o retirar su Deuro en un momento dado.", "deuro_savings_collect_interest": "Cobrar interés", + "deuro_savings_collect_interest_tooltip": "Esto representa su interés ganado actual, que puede recolectar en su saldo Deuro en cualquier momento.", "deuro_savings_remove": "Retirar", "deuro_savings_set_approval": "Establecer aprobación", "deuro_savings_subtitle": "Gane hasta un 10% de interés en sus Holdings de Deuro Stablecoin", + "deuro_savings_welcome_description": "Deuro es un establo colateralizado totalmente descentralizado fijado al euro: seguro, versátil y resistente a la censura sin tener que confiar en los oráculos. 1 Deuro = 1 euro.", + "deuro_tooltip_no_eth": "Para habilitar a Deuro, debe tener ETH en su billetera.", "deuro_tx_commited_content": "La transacción puede tardar un par de segundos en confirmar y reflejarse en la pantalla", "device_is_signing": "El dispositivo está firmando", "dfx_option_description": "Compre cripto con EUR y CHF. Para clientes minoristas y corporativos en Europa", @@ -1078,6 +1088,7 @@ "walletConnect": "MonederoConectar", "wallets": "Carteras", "warning": "Advertencia", + "website": "Sitio web", "welcome": "Bienvenido", "welcome_only": "Bienvenido", "welcome_subtitle_new_wallet": "Si desea comenzar de nuevo, toque Crear nueva billetera a continuación y se irá a las carreras.", @@ -1115,4 +1126,4 @@ "you_will_send": "Convertir de", "youCanGoBackToYourDapp": "Puedes volver a tu dapp ahora", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 9056dbc49..e77081ab7 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -245,14 +245,24 @@ "descending": "Descendant", "description": "Description", "destination_tag": "Tag de destination :", + "deuro_about_deuro": "À propos de Deuro", "deuro_collect_interest": "Collecter", + "deuro_reinvest_interest": "Réinvestir", "deuro_savings": "Économies de deuro", "deuro_savings_add": "Dépôt", + "deuro_savings_approve_app": "Approuver l'application", + "deuro_savings_approve_app_description": "Autorisez le contrat intelligent Deuro pour gérer vos jetons deuro pour les économies, mais pas la possibilité d'envoyer ou de prendre votre deuro.", + "deuro_savings_available_to_add": "Disponible pour ajouter", + "deuro_savings_available_to_remove": "Disponible pour supprimer", "deuro_savings_balance": "Solde d'épargne", + "deuro_savings_balance_tooltip": "Cela représente votre solde d'épargne actuel, qui accusera l'intérêt au fil du temps. Vous pouvez déposer ou retirer votre deuro à tout moment.", "deuro_savings_collect_interest": "Percevoir l'intérêt", + "deuro_savings_collect_interest_tooltip": "Cela représente votre intérêt actuel gagné, que vous pouvez collecter dans votre solde de Deuro à tout moment.", "deuro_savings_remove": "Retirer", "deuro_savings_set_approval": "Établir l'approbation", "deuro_savings_subtitle": "Gagnez jusqu'à 10% d'intérêt sur vos avoirs de Deuro Stablecoin", + "deuro_savings_welcome_description": "Deuro est une stablecoin entièrement décentralisée et garantie fixée à l'euro - sécurisée, polyvalente et résistante à la censure sans avoir à compter sur des oracles. 1 DEURO = 1 EURO.", + "deuro_tooltip_no_eth": "Afin d'activer Deuro, vous devez avoir ETH dans votre portefeuille.", "deuro_tx_commited_content": "Il pourrait prendre quelques secondes pour que la transaction confirme et soit reflétée à l'écran", "device_is_signing": "L'appareil signale", "dfx_option_description": "Achetez de la crypto avec EUR & CHF. Pour les clients de la vente au détail et des entreprises en Europe", @@ -1077,6 +1087,7 @@ "walletConnect": "WalletConnect", "wallets": "Portefeuilles", "warning": "Avertissement", + "website": "Site web", "welcome": "Accueillir", "welcome_subtitle_new_wallet": "Si vous souhaitez repartir de zéro, appuyez sur Créer un nouveau portefeuille ci-dessous et vous serez prêt à commencer.", "welcome_subtitle_restore_wallet": "Si vous avez un portefeuille existant que vous souhaitez importer dans Cake, choisissez simplement Restaurer un portefeuille existant et nous vous guiderons à travers le processus.", diff --git a/res/values/strings_ha.arb b/res/values/strings_ha.arb index b5f77a1c0..29456991f 100644 --- a/res/values/strings_ha.arb +++ b/res/values/strings_ha.arb @@ -245,14 +245,24 @@ "descending": "Saukowa", "description": "Bayani", "destination_tag": "Tambarin makoma:", + "deuro_about_deuro": "Game da Deuro", "deuro_collect_interest": "Tara", + "deuro_reinvest_interest": "Sarkin m", "deuro_savings": "deuro tanadi", "deuro_savings_add": "Yi ajiya", + "deuro_savings_approve_app": "Amince da app", + "deuro_savings_approve_app_description": "Bada izinin kwangila Deuro Smart don sarrafa alamomin Deuro don tanadi, amma ba ikon aikawa ba ko ɗaukar deuro.", + "deuro_savings_available_to_add": "Akwai don ƙara", + "deuro_savings_available_to_remove": "Akwai don Cire", "deuro_savings_balance": "Ma'auni", + "deuro_savings_balance_tooltip": "Wannan yana wakiltar ma'aunin ajiyar ku na yanzu, wanda zai tarwatsa sha'awa akan lokaci. Kuna iya sakawa ko cire Deuro a kowane lokaci.", "deuro_savings_collect_interest": "Tattara amfani da sha'awa", + "deuro_savings_collect_interest_tooltip": "Wannan yana wakiltar sha'awar da kuka samu na yanzu, wanda zaku iya tattarawa cikin ma'aunin deuro a kowane lokaci.", "deuro_savings_remove": "Janye", "deuro_savings_set_approval": "Saita yarda", "deuro_savings_subtitle": "Sami har zuwa 10% sha'awa a kan Deuro Stovecoin Rike", + "deuro_savings_welcome_description": "Deuro cikakke ne mai kyau, haɗin gwiwa wanda aka haɗa zuwa Yuro - amintacce, ba tare da tsayayya da oracles ba. 1 deuro = 1 Yuro.", + "deuro_tooltip_no_eth": "Don kunna deuro, dole ne ku sami lafiyarku a cikin walat ɗinku.", "deuro_tx_commited_content": "Yana iya ɗaukar wasu secondsan seconds don ma'amala don tabbatarwa kuma a nuna shi a allon", "device_is_signing": "Na'urar tana shiga", "dfx_option_description": "Buy crypto tare da Eur & Chf. Don Retail da abokan ciniki na kamfanoni a Turai", @@ -1079,6 +1089,7 @@ "walletConnect": "WalletConnect", "wallets": "Wallets", "warning": "Gargadi", + "website": "Gidan yanar gizo", "welcome": "Barka da zuwa", "welcome_only": "Barka da zuwa", "welcome_subtitle_new_wallet": "Idan kana son farawa sabo ne, matsa Newirƙiri Sabuwar Wallow a ƙasa kuma za ka tafi da tsere.", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 79d25a1fb..7823df582 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -245,14 +245,24 @@ "descending": "अवरोही", "description": "विवरण", "destination_tag": "गंतव्य टैग:", + "deuro_about_deuro": "देउरो के बारे में", "deuro_collect_interest": "इकट्ठा करना", + "deuro_reinvest_interest": "पुनर्निवेश करना", "deuro_savings": "देउरो बचत", "deuro_savings_add": "जमा", + "deuro_savings_approve_app": "ऐप को अनुमोदित करें", + "deuro_savings_approve_app_description": "बचत के लिए अपने Deuro टोकन का प्रबंधन करने के लिए Deuro स्मार्ट अनुबंध की अनुमति दें, लेकिन अपने Deuro को भेजने या लेने की क्षमता नहीं।", + "deuro_savings_available_to_add": "जोड़ने के लिए उपलब्ध है", + "deuro_savings_available_to_remove": "निकालने के लिए उपलब्ध है", "deuro_savings_balance": "बचत शेष", + "deuro_savings_balance_tooltip": "यह आपके वर्तमान बचत संतुलन का प्रतिनिधित्व करता है, जो समय के साथ ब्याज अर्जित करेगा। आप किसी भी समय अपने ड्यूरो को जमा या वापस ले सकते हैं।", "deuro_savings_collect_interest": "ब्याज इकट्ठा करना", + "deuro_savings_collect_interest_tooltip": "यह आपके वर्तमान अर्जित ब्याज का प्रतिनिधित्व करता है, जिसे आप किसी भी समय अपने Deuro संतुलन में एकत्र कर सकते हैं।", "deuro_savings_remove": "निकालना", "deuro_savings_set_approval": "अनुमोदन निर्धारित करना", "deuro_savings_subtitle": "अपने Deuro Stablecoin होल्डिंग्स पर 10% ब्याज कमाएँ", + "deuro_savings_welcome_description": "Deuro एक पूरी तरह से विकेन्द्रीकृत, संपार्श्विक स्टैबेलकॉइन है जो यूरो के लिए पेग्ड है-सुरक्षित, बहुमुखी और सेंसरशिप-प्रतिरोधी के बिना oracles पर भरोसा किए बिना। 1 देउरो = 1 यूरो।", + "deuro_tooltip_no_eth": "Deuro को सक्षम करने के लिए, आपके पास अपने बटुए में ETH होना चाहिए।", "deuro_tx_commited_content": "लेन -देन की पुष्टि करने और स्क्रीन पर प्रतिबिंबित होने के लिए कुछ सेकंड लग सकते हैं", "device_is_signing": "उपकरण हस्ताक्षर कर रहा है", "dfx_option_description": "EUR और CHF के साथ क्रिप्टो खरीदें। यूरोप में खुदरा और कॉर्पोरेट ग्राहकों के लिए", @@ -1079,6 +1089,7 @@ "walletConnect": "वॉलेटकनेक्ट", "wallets": "पर्स", "warning": "चेतावनी", + "website": "वेबसाइट", "welcome": "स्वागत", "welcome_subtitle_new_wallet": "यदि आप ताजा शुरू करना चाहते हैं, तो नीचे नया बटुआ बनाएं और आप दौड़ से दूर हो जाएंगे।", "welcome_subtitle_restore_wallet": "यदि आपके पास एक मौजूदा बटुआ है जिसे आप केक में लाना चाहते हैं, तो बस मौजूदा बटुए को पुनर्स्थापित करें और हम आपको प्रक्रिया के माध्यम से चलेंगे।", diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index 6f94329ff..6e84ce97b 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -245,14 +245,24 @@ "descending": "Silazni", "description": "Opis", "destination_tag": "Odredišna oznaka:", + "deuro_about_deuro": "O deuru", "deuro_collect_interest": "Prikupiti", + "deuro_reinvest_interest": "Reinvestirati", "deuro_savings": "deuro ušteda", "deuro_savings_add": "Depozit", + "deuro_savings_approve_app": "Odobriti aplikaciju", + "deuro_savings_approve_app_description": "Dopustite pametnom ugovoru Deuro da upravljate svojim Deuro tokenima za uštedu, ali ne i mogućnost slanja ili uzimanja vašeg Deuroa.", + "deuro_savings_available_to_add": "Dostupno za dodavanje", + "deuro_savings_available_to_remove": "Dostupno za uklanjanje", "deuro_savings_balance": "Ravnoteža uštede", + "deuro_savings_balance_tooltip": "To predstavlja vaš trenutni saldo štednje, što će s vremenom prikupljati kamate. Možete položiti ili povući svoj deuro u bilo kojem trenutku.", "deuro_savings_collect_interest": "Prikupiti interes", + "deuro_savings_collect_interest_tooltip": "To predstavlja vaš trenutni zarađeni interes, koji u bilo kojem trenutku možete prikupiti u svoj deuro ravnoteža.", "deuro_savings_remove": "Povući", "deuro_savings_set_approval": "Odrediti odobrenje", "deuro_savings_subtitle": "Zaradite do 10% kamate na svoje Deuro Stablecoin Holdings", + "deuro_savings_welcome_description": "Deuro je potpuno decentralizirani, kolateralizirani stabblecoin privezani na euro-siguran, svestran i otporan na cenzuru, a da se nije morao oslanjati na orke. 1 deuro = 1 eura.", + "deuro_tooltip_no_eth": "Da biste omogućili Deuro, morate imati ETH u novčaniku.", "deuro_tx_commited_content": "Možda će trebati nekoliko sekundi da se transakcija potvrdi i odrazi na zaslonu", "device_is_signing": "Uređaj se potpisuje", "dfx_option_description": "Kupite kriptovalute s Eur & CHF. Za maloprodajne i korporativne kupce u Europi", @@ -1077,6 +1087,7 @@ "walletConnect": "WalletConnect", "wallets": "Novčanici", "warning": "Upozorenje", + "website": "Web stranica", "welcome": "Dobrodošli", "welcome_subtitle_new_wallet": "Ako želite započeti svježe, dodirnite Create New Wallet u nastavku i krenite na utrke.", "welcome_subtitle_restore_wallet": "Ako imate postojeći novčanik koji želite unijeti u tortu, jednostavno odaberite Vratite postojeći novčanik i prošetat ćemo vas kroz postupak.", diff --git a/res/values/strings_hy.arb b/res/values/strings_hy.arb index c54d6b5b8..b888a3838 100644 --- a/res/values/strings_hy.arb +++ b/res/values/strings_hy.arb @@ -245,14 +245,24 @@ "descending": "Նվազող", "description": "Նկարագրություն", "destination_tag": "Նպատակակետի պիտակ:", + "deuro_about_deuro": "Deuro- ի մասին", "deuro_collect_interest": "Հավաքել", + "deuro_reinvest_interest": "Վերազինել", "deuro_savings": "dEuro խնայողություններ", "deuro_savings_add": "Ավանդ", + "deuro_savings_approve_app": "Հաստատել ծրագիրը", + "deuro_savings_approve_app_description": "Թույլ տվեք Deuro Smart պայմանագիրը կառավարել ձեր Deuro Tokens- ը խնայողությունների համար, բայց ոչ ձեր Deuro ուղարկելու կամ վերցնելու կարողությունը:", + "deuro_savings_available_to_add": "Մատչելի է ավելացնել", + "deuro_savings_available_to_remove": "Մատչելի է հեռացնելու համար", "deuro_savings_balance": "Խնայողական հավասարակշռություն", + "deuro_savings_balance_tooltip": "Սա ներկայացնում է ձեր ընթացիկ խնայողությունների մնացորդը, որը ժամանակի ընթացքում կբարձրացնի հետաքրքրությունը: Դուք կարող եք ցանկացած պահի մեկնել կամ հանել ձեր Deuro- ն:", "deuro_savings_collect_interest": "Հավաքեք հետաքրքրություն", + "deuro_savings_collect_interest_tooltip": "Սա ներկայացնում է ձեր ներկայիս վաստակած տոկոսադրույքը, որը ցանկացած պահի կարող եք հավաքել ձեր Deuro հավասարակշռությունը:", "deuro_savings_remove": "Հեռացնել", "deuro_savings_set_approval": "Սահմանել հաստատում", "deuro_savings_subtitle": "Վաստակեք մինչեւ 10% տոկոսադրույքներ ձեր Deuro Stablecoin Holdings- ի համար", + "deuro_savings_welcome_description": "Deuro- ն լիովին ապակենտրոնացված է, գրավադրված Stablecoin- ը, որն ապահովում է եվրոն `անվտանգ, բազմակողմանի եւ գրաքննության դիմացկուն, առանց ապավինելու Oracles- ին: 1 deuro = 1 եվրո:", + "deuro_tooltip_no_eth": "Deuro- ին միացնելու համար դուք պետք է դնեք ձեր դրամապանակում:", "deuro_tx_commited_content": "Գործարքի հաստատման եւ արտացոլվելու համար գործարքի համար կարող է տեւել մի քանի վայրկյան", "device_is_signing": "Սարքը ստորագրում է", "dfx_option_description": "Գնեք կրիպտոարժույթ EUR և CHF: Կորպորատիվ և մանրածախ հաճախորդների համար Եվրոպայում", @@ -1075,6 +1085,7 @@ "walletConnect": "WalletConnect", "wallets": "Դրամապանակներ", "warning": "Զգուշացում", + "website": "Կայք", "welcome": "Ողջույն", "welcome_subtitle_new_wallet": "Եթե ​​ցանկանում եք սկսել թարմ, հպեք Ստեղծեք նոր դրամապանակ ներքեւում եւ դուրս կգաք ցեղերի:", "welcome_subtitle_restore_wallet": "Եթե ​​ունեք գոյություն ունեցող դրամապանակ, որը ցանկանում եք տորթի մեջ մտցնել, պարզապես ընտրեք վերականգնել առկա դրամապանակը, եւ մենք ձեզ քայլելու ենք գործընթացի միջոցով:", diff --git a/res/values/strings_id.arb b/res/values/strings_id.arb index 7682903fc..0caf6147f 100644 --- a/res/values/strings_id.arb +++ b/res/values/strings_id.arb @@ -245,14 +245,24 @@ "descending": "Menurun", "description": "Keterangan", "destination_tag": "Tag tujuan:", + "deuro_about_deuro": "Tentang Deuro", "deuro_collect_interest": "Mengumpulkan", + "deuro_reinvest_interest": "Berinvestasi kembali", "deuro_savings": "Tabungan dEuro", "deuro_savings_add": "Deposito", + "deuro_savings_approve_app": "Menyetujui aplikasi", + "deuro_savings_approve_app_description": "Izinkan kontrak pintar Deuro untuk mengelola token Deuro Anda untuk penghematan, tetapi bukan kemampuan untuk mengirim atau mengambil Deuro Anda.", + "deuro_savings_available_to_add": "Tersedia untuk ditambahkan", + "deuro_savings_available_to_remove": "Tersedia untuk dihapus", "deuro_savings_balance": "Keseimbangan tabungan", + "deuro_savings_balance_tooltip": "Ini mewakili saldo tabungan Anda saat ini, yang akan menghasilkan bunga dari waktu ke waktu. Anda dapat menyetor atau menarik deuro Anda pada waktu tertentu.", "deuro_savings_collect_interest": "Mengumpulkan minat", + "deuro_savings_collect_interest_tooltip": "Ini mewakili minat yang Anda peroleh saat ini, yang dapat Anda kumpulkan ke dalam saldo Deuro Anda kapan saja.", "deuro_savings_remove": "Menarik", "deuro_savings_set_approval": "Tetapkan persetujuan", "deuro_savings_subtitle": "Hasilkan hingga 10% bunga di Deuro Stablecoin Holdings Anda", + "deuro_savings_welcome_description": "Deuro adalah stablecoin yang sepenuhnya terdesentralisasi, dipatok ke euro-aman, serbaguna, dan tahan sensor tanpa harus bergantung pada nubuat. 1 Deuro = 1 Euro.", + "deuro_tooltip_no_eth": "Untuk mengaktifkan Deuro, Anda harus memiliki ETH di dompet Anda.", "deuro_tx_commited_content": "Mungkin butuh beberapa detik untuk transaksi untuk mengkonfirmasi dan direfleksikan di layar", "device_is_signing": "Perangkat sedang menandatangani", "dfx_option_description": "Beli crypto dengan EUR & CHF. Untuk pelanggan ritel dan perusahaan di Eropa", @@ -1080,6 +1090,7 @@ "walletConnect": "DompetConnect", "wallets": "Dompet", "warning": "Peringatan", + "website": "Situs web", "welcome": "Selamat datang", "welcome_subtitle_new_wallet": "Jika Anda ingin memulai segar, ketuk membuat dompet baru di bawah ini dan Anda akan pergi ke balapan.", "welcome_subtitle_restore_wallet": "Jika Anda memiliki dompet yang ada yang ingin Anda bawa ke dalam kue, cukup pilih kembalikan dompet yang ada dan kami akan memandu Anda melalui prosesnya.", diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index 9d03f7947..6aacff2c2 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -245,14 +245,24 @@ "descending": "Discendente", "description": "Descrizione", "destination_tag": "Tag destinazione:", + "deuro_about_deuro": "Su Deuro", "deuro_collect_interest": "Raccogliere", + "deuro_reinvest_interest": "Reinvest", "deuro_savings": "Risparmio di dEuro", "deuro_savings_add": "Depositare", + "deuro_savings_approve_app": "Approvare l'app", + "deuro_savings_approve_app_description": "Consenti al contratto Smart Deuro di gestire i tuoi token Deuro per risparmi, ma non la possibilità di inviare o prendere il tuo Deuro.", + "deuro_savings_available_to_add": "Disponibile per aggiungere", + "deuro_savings_available_to_remove": "Disponibile per rimuovere", "deuro_savings_balance": "Saldo di risparmio", + "deuro_savings_balance_tooltip": "Ciò rappresenta il tuo attuale saldo di risparmio, che maturerà l'interesse nel tempo. Puoi depositare o prelevare il tuo deuro in qualsiasi momento.", "deuro_savings_collect_interest": "Raccogliere interesse", + "deuro_savings_collect_interest_tooltip": "Questo rappresenta il tuo attuale interesse guadagnato, che puoi raccogliere nel tuo saldo Deuro in qualsiasi momento.", "deuro_savings_remove": "Ritirare", "deuro_savings_set_approval": "Impostare l'approvazione", "deuro_savings_subtitle": "Guadagna fino al 10% di interesse su Deuro StableCoin Holdings", + "deuro_savings_welcome_description": "Deuro è uno stablecoin completamente decentralizzato e collateralizzato con anco 1 deuro = 1 euro.", + "deuro_tooltip_no_eth": "Per abilitare Deuro, devi avere ETH nel tuo portafoglio.", "deuro_tx_commited_content": "Potrebbero essere necessari un paio di secondi per confermare la transazione ed essere riflessa sullo schermo", "device_is_signing": "Il dispositivo sta firmando", "dfx_option_description": "Acquista Crypto con EUR & CHF. Per i clienti al dettaglio e aziendali in Europa", @@ -1079,6 +1089,7 @@ "walletConnect": "WalletConnect", "wallets": "Portafogli", "warning": "Attenzione", + "website": "Sito web", "welcome": "Benvenuto", "welcome_only": "Benvenuto", "welcome_subtitle_new_wallet": "Se vuoi ricominciare da capo, premi Crea un nuovo portafoglio qui sotto.", diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index c92a6dab1..b807ce6ee 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -245,14 +245,24 @@ "descending": "下降", "description": "説明", "destination_tag": "宛先タグ:", + "deuro_about_deuro": "Deuroについて", "deuro_collect_interest": "集める", + "deuro_reinvest_interest": "再投資", "deuro_savings": "dEuro Savings", "deuro_savings_add": "デポジット", + "deuro_savings_approve_app": "アプリを承認します", + "deuro_savings_approve_app_description": "Deuro Smart ContractがDeuro Tokensを管理するために節約のために管理することはできますが、Deuroを送信または服用する能力は許可しません。", + "deuro_savings_available_to_add": "追加できる", + "deuro_savings_available_to_remove": "削除できます", "deuro_savings_balance": "貯蓄バランス", + "deuro_savings_balance_tooltip": "これは、現在の貯蓄残高を表しており、時間の経過とともに利息が生じます。 deuroをいつでも預け入れることができます。", "deuro_savings_collect_interest": "興味を集めます", + "deuro_savings_collect_interest_tooltip": "これは、現在の獲得された関心を表しており、いつでもデュロバランスに収集できます。", "deuro_savings_remove": "撤回する", "deuro_savings_set_approval": "承認を設定します", "deuro_savings_subtitle": "Deuro Stablecoin Holdingsで最大10%の利息を稼ぐ", + "deuro_savings_welcome_description": "Deuroは、オラクルに頼ることなく、安全で多目的で、検閲に耐えるユーロに固定された、完全に分散化された担保付きの安定した安定性です。 1 Deuro = 1ユーロ。", + "deuro_tooltip_no_eth": "Deuroを有効にするには、財布にETHが必要です。", "deuro_tx_commited_content": "トランザクションが確認され、画面に反映されるまでに数秒かかる場合があります", "device_is_signing": "デバイスが署名しています", "dfx_option_description": "EUR&CHFで暗号を購入します。ヨーロッパの小売および企業の顧客向け", @@ -1078,6 +1088,7 @@ "walletConnect": "ウォレットコネクト", "wallets": "財布", "warning": "警告", + "website": "Webサイト", "welcome": "いらっしゃいませ", "welcome_subtitle_new_wallet": "新鮮な開始したい場合は、以下の新しい財布を作成すると、レースに出かけることができます。", "welcome_subtitle_restore_wallet": "ケーキに持ち込みたい既存のウォレットがある場合は、既存のウォレットを復元するだけで、プロセスを説明します。", diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index 0184673d7..4c4efcb99 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -245,14 +245,24 @@ "descending": "내림차순", "description": "설명", "destination_tag": "목적지 태그:", + "deuro_about_deuro": "Deuro에 대해", "deuro_collect_interest": "모으다", + "deuro_reinvest_interest": "재투자", "deuro_savings": "도로 저축", "deuro_savings_add": "보증금", + "deuro_savings_approve_app": "승인 앱", + "deuro_savings_approve_app_description": "Deuro Smart Contract는 저축을 위해 Deuro 토큰을 관리 할 수 ​​있지만 Deuro를 보내거나 가져갈 수있는 능력은 없습니다.", + "deuro_savings_available_to_add": "추가 할 수 있습니다", + "deuro_savings_available_to_remove": "제거 할 수 있습니다", "deuro_savings_balance": "저축 잔고", + "deuro_savings_balance_tooltip": "이것은 현재 저축 잔액을 나타내며, 이는 시간이 지남에 따라이자가 발생합니다. 주어진 시간에 Deuro를 입금하거나 철회 할 수 있습니다.", "deuro_savings_collect_interest": "관심을 모으십시오", + "deuro_savings_collect_interest_tooltip": "이것은 현재의 이익을 나타내며 언제든지 Deuro 잔액으로 징수 할 수 있습니다.", "deuro_savings_remove": "철회하다", "deuro_savings_set_approval": "승인을 설정하십시오", "deuro_savings_subtitle": "Deuro Stablecoin Holdings에 최대 10%의이자를 받으십시오.", + "deuro_savings_welcome_description": "Deuro는 완전히 분산되고 담보 된 안정된 안정된 스타블 레코 인으로 유로에 푹 빠져 있습니다. 1 Deuro = 1 유로.", + "deuro_tooltip_no_eth": "Deuro를 활성화하려면 지갑에 ETH가 있어야합니다.", "deuro_tx_commited_content": "트랜잭션이 확인하고 화면에 반영되는 데 몇 초가 걸릴 수 있습니다.", "device_is_signing": "장치가 서명 중입니다", "dfx_option_description": "EUR 및 CHF로 암호화폐 구매. 유럽의 개인 및 기업 고객 대상", @@ -1078,6 +1088,7 @@ "walletConnect": "WalletConnect", "wallets": "지갑", "warning": "경고", + "website": "웹 사이트", "welcome": "환영", "welcome_subtitle_new_wallet": "새로 시작하려면 아래의 새 지갑 생성을 탭하면 바로 시작할 수 있습니다.", "welcome_subtitle_restore_wallet": "Cake로 가져오려는 기존 지갑이 있는 경우 기존 지갑 복구를 선택하면 과정을 안내해 드립니다.", diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb index 9b158be76..f5ceb28be 100644 --- a/res/values/strings_my.arb +++ b/res/values/strings_my.arb @@ -245,14 +245,24 @@ "descending": "ဆင်း", "description": "ဖော်ပြချက်", "destination_tag": "ခရီးဆုံးအမှတ်-", + "deuro_about_deuro": "Deurro အကြောင်း", "deuro_collect_interest": "စုဝေး", + "deuro_reinvest_interest": "အသစ်တီထွင်စိတ်ချဆုံး", "deuro_savings": "dEuro ငွေစု", "deuro_savings_add": "အပ်ငေှ", + "deuro_savings_approve_app": "App ကိုအတည်ပြုပါ", + "deuro_savings_approve_app_description": "Deurro Smart Contraction သည်သင်၏ Deuro Tokens ကိုငွေစုရန်အတွက် Deuro Tokens ကိုစီမံခန့်ခွဲရန်ခွင့်ပြုပါ။", + "deuro_savings_available_to_add": "ပေါင်းထည့်ရန်ရရှိနိုင်ပါသည်", + "deuro_savings_available_to_remove": "ဖယ်ရှားပစ်ရန်ရရှိနိုင်", "deuro_savings_balance": "ငွေစုချိန်ခွင်လျှာ", + "deuro_savings_balance_tooltip": "၎င်းသည်အချိန်ကြာလာတာနဲ့အမျှစိတ်ဝင်စားမှုကိုတိုးပွားစေမည့်သင်၏လက်ရှိငွေစုချိန်ခွင်လျှာမျှသာဖြစ်သည်။ မည်သည့်အချိန်တွင်မဆိုသင်၏ Deurro ကိုငွေသွင်းခြင်းသို့မဟုတ်ထုတ်ယူနိုင်သည်။", "deuro_savings_collect_interest": "အကျိုးစီးပွားစုဆောင်းပါ", + "deuro_savings_collect_interest_tooltip": "၎င်းသည်သင်၏လက်ရှိရရှိထားသောအကျိုးစီးပွားကိုကိုယ်စားပြုသည်။ ၎င်းသည်သင် Deuro Balance သို့မည်သည့်အချိန်တွင်မဆိုစုဆောင်းနိုင်သည်။", "deuro_savings_remove": "ဆုတ်ခွာ", "deuro_savings_set_approval": "အတည်ပြုချက်ကိုသတ်မှတ်ပါ", "deuro_savings_subtitle": "သင်၏ Deuro Stabloin Holdings တွင် 10% အထိစိတ်ဝင်စားပါ", + "deuro_savings_welcome_description": "Deurro သည်ဗဟိုချုပ်ကိုင်မှုလျှော့ချခြင်း, 1 Deuro = 1 ယူရို။", + "deuro_tooltip_no_eth": "Deurro ကို enable လုပ်ဖို့အတွက်သင့်ရဲ့ပိုက်ဆံအိတ်ထဲမှာ et et eth ရှိရမယ်။", "deuro_tx_commited_content": "၎င်းသည်ငွေပေးငွေယူကိုအတည်ပြုရန်နှင့်မျက်နှာပြင်ပေါ်တွင်ထင်ဟပ်ရန်စက္ကန့်အနည်းငယ်ကြာနိုင်သည်", "device_is_signing": "ကိရိယာလက်မှတ်ထိုးနေသည်", "dfx_option_description": "Crypto ကို EUR & CHF ဖြင့် 0 ယ်ပါ။ လက်လီရောင်းဝယ်မှုနှင့်ဥရောပရှိကော်ပိုရိတ်ဖောက်သည်များအတွက်", @@ -1077,6 +1087,7 @@ "walletConnect": "Wallet ချိတ်ဆက်မှု", "wallets": "ပိုက်ဆံအိတ်", "warning": "သတိပေးချက်", + "website": "ဝဘ်0င်းက္ပုဒ်စာတမ်း", "welcome": "ဝမ်းသာစွာနှုတ်ဆက်ခြင်း", "welcome_subtitle_new_wallet": "လတ်ဆတ်စွာစတင်လိုပါကအောက်ကပိုက်ဆံအိတ်အသစ်ကိုဖန်တီးပါ။", "welcome_subtitle_restore_wallet": "အကယ်. သင့်တွင်သင်ကိတ်မုန့်ထဲသို့ယူဆောင်လိုသောလက်ရှိပိုက်ဆံအိတ်ရှိပါက Restore Lestore Wallet ကိုရွေးပါ။", diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 948798b0a..c7318cefb 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -245,14 +245,24 @@ "descending": "Aflopend", "description": "Beschrijving", "destination_tag": "Bestemmingstag:", + "deuro_about_deuro": "Over Deuro", "deuro_collect_interest": "Verzamelen", + "deuro_reinvest_interest": "Herinvesteren", "deuro_savings": "dEuro -besparingen", "deuro_savings_add": "Borg", + "deuro_savings_approve_app": "Goedkeuren app", + "deuro_savings_approve_app_description": "Sta het Deuro Smart Contract toe om uw Deuro -tokens te beheren voor besparingen, maar niet de mogelijkheid om uw Deuro te verzenden of te nemen.", + "deuro_savings_available_to_add": "Beschikbaar om toe te voegen", + "deuro_savings_available_to_remove": "Beschikbaar om te verwijderen", "deuro_savings_balance": "Spaarbalans", + "deuro_savings_balance_tooltip": "Dit vertegenwoordigt uw huidige spaarbalans, dat rente in de loop van de tijd zal opleveren. U kunt uw deuro op elk moment deponeren of opnemen.", "deuro_savings_collect_interest": "Verzamel interesse", + "deuro_savings_collect_interest_tooltip": "Dit vertegenwoordigt uw huidige verdiende interesse, die u op elk gewenst moment in uw Deuro -saldo kunt verzamelen.", "deuro_savings_remove": "Terugtrekken", "deuro_savings_set_approval": "Goedkeuring instellen", "deuro_savings_subtitle": "Verdien tot 10% rente op uw Deuro Stablecoin Holdings", + "deuro_savings_welcome_description": "Deuro is een volledig gedecentraliseerde, onderpandstablecoin gekoppeld aan de euro-beveiligd, veelzijdig en censuurbestendig zonder te moeten vertrouwen op orakels. 1 deuro = 1 euro.", + "deuro_tooltip_no_eth": "Om Deuro in te schakelen, moet u ETH in uw portemonnee hebben.", "deuro_tx_commited_content": "Het kan een paar seconden duren voordat de transactie wordt bevestigd en weerspiegeld op het scherm", "device_is_signing": "Apparaat ondertekent", "dfx_option_description": "Koop crypto met EUR & CHF. Voor retail- en zakelijke klanten in Europa", @@ -1078,6 +1088,7 @@ "walletConnect": "WalletConnect", "wallets": "Portefeuilles", "warning": "Waarschuwing", + "website": "Website", "welcome": "Welkom", "welcome_subtitle_new_wallet": "Als u opnieuw wilt beginnen, tikt u op de nieuwe portemonnee hieronder en u bent op weg naar de races.", "welcome_subtitle_restore_wallet": "Als je een bestaande portemonnee hebt die je in cake wilt brengen, kies dan gewoon om de bestaande portemonnee te herstellen en we zullen je door het proces leiden.", diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 4b39a949b..d2c0a417a 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -245,14 +245,24 @@ "descending": "Malejąco", "description": "Opis", "destination_tag": "Tag docelowy:", + "deuro_about_deuro": "O Deuro", "deuro_collect_interest": "Zbierać", + "deuro_reinvest_interest": "Reinwestuj", "deuro_savings": "dEuro oszczędności", "deuro_savings_add": "Depozyt", + "deuro_savings_approve_app": "Zatwierdź aplikację", + "deuro_savings_approve_app_description": "Pozwól Deuro Smart kontrakt na zarządzanie tokenami Deuro na oszczędności, ale nie na możliwość wysyłania lub przyjmowania Deuro.", + "deuro_savings_available_to_add": "Dostępne do dodania", + "deuro_savings_available_to_remove": "Dostępne do usunięcia", "deuro_savings_balance": "Równowaga oszczędności", + "deuro_savings_balance_tooltip": "Reprezentuje to twoje bieżące saldo oszczędności, które z czasem naliczą odsetki. Możesz wpłacić lub wypłacić Deuro w danym momencie.", "deuro_savings_collect_interest": "Zbieraj zainteresowanie", + "deuro_savings_collect_interest_tooltip": "To reprezentuje twoje obecne odsetki, które w dowolnym momencie możesz zebrać w saldzie Deuro.", "deuro_savings_remove": "Wycofać", "deuro_savings_set_approval": "Ustaw zatwierdzenie", "deuro_savings_subtitle": "Zarabiaj do 10% odsetek od Deuro Stablecoin Holdings", + "deuro_savings_welcome_description": "Deuro jest w pełni zdecentralizowanym, zabezpieczonym Stablecoinem ustawionym na euro-bezpieczne, wszechstronne i odporne na cenzurę bez konieczności polegania na wyroczach. 1 deuro = 1 euro.", + "deuro_tooltip_no_eth": "Aby włączyć Deuro, musisz mieć ETH w portfelu.", "deuro_tx_commited_content": "Potwierdzenie i odbicie na ekranie może potrwać kilka sekund", "device_is_signing": "Urządzenie podpisuje", "dfx_option_description": "Kup krypto za EUR & CHF. Dla klientów prywatnych i korporacyjnych w Europie", @@ -922,6 +932,7 @@ "ton_extra_info": "Nie zapomnij określić identyfikatora notatki podczas wysyłania transakcji TON dla wymiany", "tor_connection": "Połączenie przez Tor", "tor_connection_timeout": "Tor Connection Timeout", + "tor_experimental": "Jest to funkcja eksperymentalna. Nie wszystkie połączenia wykonane z Cake Wallet korzystają z Tor, niektóre połączenia mogą korzystać z Clearnet, aby w pełni przekierować ruch skorzystaj z Tor w trybie VPN.", "tor_only": "Tylko sieć Tor", "total": "Całkowity", "total_saving": "Całkowite oszczędności", @@ -1076,6 +1087,7 @@ "walletConnect": "WalletConnect", "wallets": "Portfele", "warning": "Ostrzeżenie", + "website": "Strona internetowa", "welcome": "Powitanie", "welcome_subtitle_new_wallet": "Jeśli chcesz zacząć od nowa, dotknij Utwórz nowy portfel poniżej.", "welcome_subtitle_restore_wallet": "Jeśli masz istniejący portfel, który chcesz wnieść do ciasta, po prostu wybierz przywróć istniejący portfel, a my przeprowadzimy Cię przez proces.", @@ -1111,6 +1123,5 @@ "you_will_receive_estimated_amount": "Otrzymasz(oszacowane )", "you_will_send": "Konwertuj z", "youCanGoBackToYourDapp": "Możesz teraz wrócić do swojego dapp", - "yy": "RR", - "tor_experimental": "Jest to funkcja eksperymentalna. Nie wszystkie połączenia wykonane z Cake Wallet korzystają z Tor, niektóre połączenia mogą korzystać z Clearnet, aby w pełni przekierować ruch skorzystaj z Tor w trybie VPN." + "yy": "RR" } \ No newline at end of file diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index c2f0f209c..e5bc95a99 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -245,14 +245,24 @@ "descending": "descendente", "description": "Descrição", "destination_tag": "Tag de destino:", + "deuro_about_deuro": "Sobre Deuro", "deuro_collect_interest": "Coletar", + "deuro_reinvest_interest": "Reinvestir", "deuro_savings": "dEuro Savings", "deuro_savings_add": "Depósito", + "deuro_savings_approve_app": "Aprovar o aplicativo", + "deuro_savings_approve_app_description": "Permita que o contrato inteligente Deuro gerencie seus tokens Deuro para economizar, mas não a capacidade de enviar ou levar seu Deuro.", + "deuro_savings_available_to_add": "Disponível para adicionar", + "deuro_savings_available_to_remove": "Disponível para remover", "deuro_savings_balance": "Balanço de poupança", + "deuro_savings_balance_tooltip": "Isso representa seu equilíbrio atual de poupança, que acumulará juros ao longo do tempo. Você pode depositar ou retirar seu deuro a qualquer momento.", "deuro_savings_collect_interest": "Coletar juros", + "deuro_savings_collect_interest_tooltip": "Isso representa seu interesse atual ganhou, que você pode coletar em seu saldo de deuro a qualquer momento.", "deuro_savings_remove": "Retirar", "deuro_savings_set_approval": "Defina aprovação", "deuro_savings_subtitle": "Ganhe até 10% de juros em sua Deuro Stablecoin Holdings", + "deuro_savings_welcome_description": "Deuro é um Stablecoin totalmente descentralizado e colateralizado atrelado ao euro-seguro, versátil e resistente à censura sem ter que confiar em oráculos. 1 Deuro = 1 Euro.", + "deuro_tooltip_no_eth": "Para ativar Deuro, você deve ter ETH em sua carteira.", "deuro_tx_commited_content": "Pode levar alguns segundos para a transação confirmar e se refletir na tela", "device_is_signing": "O dispositivo está assinando", "dfx_option_description": "Compre criptografia com EUR & CHF. Para clientes de varejo e corporativo na Europa", @@ -1080,6 +1090,7 @@ "walletConnect": "CarteiraConectada", "wallets": "Carteiras", "warning": "Aviso", + "website": "Site", "welcome": "Bem-vindo", "welcome_subtitle_new_wallet": "Se você quiser começar de novo, toque em criar uma nova carteira abaixo e você estará nas corridas.", "welcome_subtitle_restore_wallet": "Se você tem uma carteira existente que deseja trazer para o bolo, basta escolher a carteira existente e nós o guiaremos pelo processo.", diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 1b59e84ab..536596b09 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -245,14 +245,24 @@ "descending": "Нисходящий", "description": "Описание", "destination_tag": "Целевой тег:", + "deuro_about_deuro": "О Deuro", "deuro_collect_interest": "Собирать", + "deuro_reinvest_interest": "Реинвестирование", "deuro_savings": "dEuro Savings", "deuro_savings_add": "Депозитный", + "deuro_savings_approve_app": "Утвердить приложение", + "deuro_savings_approve_app_description": "Позвольте Deuro Smart Contract управлять вашими токенами Deuro для сбережений, но не возможность отправлять или взять ваш Deuro.", + "deuro_savings_available_to_add": "Доступен для добавления", + "deuro_savings_available_to_remove": "Доступно для удаления", "deuro_savings_balance": "Сберегательный баланс", + "deuro_savings_balance_tooltip": "Это представляет ваш текущий баланс сбережений, который со временем начисляет проценты. Вы можете внести или снять свой Deuro в любой момент времени.", "deuro_savings_collect_interest": "Собирать интерес", + "deuro_savings_collect_interest_tooltip": "Это представляет ваш нынешний заработанный процент, который вы можете собрать в свой баланс Deuro в любое время.", "deuro_savings_remove": "Отзывать", "deuro_savings_set_approval": "Установить утверждение", "deuro_savings_subtitle": "Заработайте до 10% процентов на ваших Deuro Stablecoin Holdings", + "deuro_savings_welcome_description": "Deuro-это полностью децентрализованный, обеспеченный стабильный зал, привязанный к евро-безопасному, универсальному и цензуре, устойчивавшись к тому, чтобы полагаться на оракулы. 1 deuro = 1 евро.", + "deuro_tooltip_no_eth": "Чтобы включить Deuro, вы должны иметь ETH в своем кошельке.", "deuro_tx_commited_content": "Чтобы подтвердить, может потребоваться пару секунд, чтобы подтвердить и быть отраженным на экране", "device_is_signing": "Устройство подписывает", "dfx_option_description": "Купить крипто с Eur & CHF. Для розничных и корпоративных клиентов в Европе", @@ -1078,6 +1088,7 @@ "walletConnect": "КошелекПодключиться", "wallets": "Кошельки", "warning": "Предупреждение", + "website": "Веб -сайт", "welcome": "Добро пожаловать", "welcome_subtitle_new_wallet": "Если вы хотите начать Fresh, нажмите «Создать новый кошелек» ниже, и вы отправитесь на гонки.", "welcome_subtitle_restore_wallet": "Если у вас есть существующий кошелек, который вы хотите принести в торт, просто выберите «Восстановить существующий кошелек», и мы проведем вас через процесс.", diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 1fc8d81d5..13a909c1c 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -245,14 +245,24 @@ "descending": "ลงมา", "description": "คำอธิบาย", "destination_tag": "แท็กปลายทาง:", + "deuro_about_deuro": "เกี่ยวกับ Deuro", "deuro_collect_interest": "เก็บรวบรวม", + "deuro_reinvest_interest": "ลงทุนใหม่", "deuro_savings": "การออมของ dEuro", "deuro_savings_add": "เงินฝาก", + "deuro_savings_approve_app": "อนุมัติแอป", + "deuro_savings_approve_app_description": "อนุญาตให้ Deuro Smart Contract จัดการโทเค็น Deuro ของคุณสำหรับการออม แต่ไม่ใช่ความสามารถในการส่งหรือใช้ deuro ของคุณ", + "deuro_savings_available_to_add": "พร้อมใช้งาน", + "deuro_savings_available_to_remove": "สามารถลบออกได้", "deuro_savings_balance": "ยอดเงินออม", + "deuro_savings_balance_tooltip": "สิ่งนี้แสดงถึงยอดเงินออมปัจจุบันของคุณซึ่งจะได้รับดอกเบี้ยเมื่อเวลาผ่านไป คุณสามารถฝากหรือถอน Deuro ของคุณในเวลาใดก็ได้", "deuro_savings_collect_interest": "เก็บดอกเบี้ย", + "deuro_savings_collect_interest_tooltip": "สิ่งนี้แสดงถึงดอกเบี้ยที่ได้รับในปัจจุบันของคุณซึ่งคุณสามารถรวบรวมลงในยอดคงเหลือ deuro ของคุณได้ตลอดเวลา", "deuro_savings_remove": "ถอน", "deuro_savings_set_approval": "ตั้งค่าการอนุมัติ", "deuro_savings_subtitle": "รับดอกเบี้ยมากถึง 10% สำหรับ Deuro Stablecoin Holdings ของคุณ", + "deuro_savings_welcome_description": "Deuro เป็น stablecoin ที่มีการกระจายอำนาจอย่างเต็มที่และเป็นหลักประกันที่ยึดติดกับยูโร-ปลอดภัยอเนกประสงค์และทนต่อการเซ็นเซอร์โดยไม่ต้องพึ่งพา Oracles 1 Deuro = 1 ยูโร", + "deuro_tooltip_no_eth": "เพื่อที่จะเปิดใช้งาน Deuro คุณต้องมี ETH ในกระเป๋าเงินของคุณ", "deuro_tx_commited_content": "อาจใช้เวลาสองสามวินาทีในการทำธุรกรรมเพื่อยืนยันและสะท้อนบนหน้าจอ", "device_is_signing": "อุปกรณ์กำลังลงนาม", "dfx_option_description": "ซื้อ crypto ด้วย Eur & CHF สำหรับลูกค้ารายย่อยและลูกค้าในยุโรป", @@ -1077,6 +1087,7 @@ "walletConnect": "WalletConnect", "wallets": "กระเป๋า", "warning": "คำเตือน", + "website": "เว็บไซต์", "welcome": "ยินดีต้อนรับ", "welcome_subtitle_new_wallet": "หากคุณต้องการเริ่มต้นใหม่ให้แตะสร้างกระเป๋าเงินใหม่ด้านล่างและคุณจะออกจากการแข่งขัน", "welcome_subtitle_restore_wallet": "หากคุณมีกระเป๋าเงินที่มีอยู่ที่คุณต้องการนำเข้าเค้กให้เลือกคืนกระเป๋าเงินที่มีอยู่แล้วเราจะพาคุณผ่านกระบวนการ", diff --git a/res/values/strings_tl.arb b/res/values/strings_tl.arb index 2ca3b02e4..92549cb38 100644 --- a/res/values/strings_tl.arb +++ b/res/values/strings_tl.arb @@ -245,14 +245,24 @@ "descending": "Pababang", "description": "Paglalarawan", "destination_tag": "Tag ng patutunguhan:", + "deuro_about_deuro": "Tungkol kay Deuro", "deuro_collect_interest": "Mangolekta", + "deuro_reinvest_interest": "Muling mamuhunan", "deuro_savings": "Pagtipid ni dEuro", "deuro_savings_add": "Deposito", + "deuro_savings_approve_app": "Aprubahan ang app", + "deuro_savings_approve_app_description": "Payagan ang kontrata ng Deuro Smart na pamahalaan ang iyong mga token ng Deuro para sa pag -iimpok, ngunit hindi ang kakayahang magpadala o kunin ang iyong deuro.", + "deuro_savings_available_to_add": "Magagamit upang magdagdag", + "deuro_savings_available_to_remove": "Magagamit upang alisin", "deuro_savings_balance": "Balanse sa pagtitipid", + "deuro_savings_balance_tooltip": "Ito ay kumakatawan sa iyong kasalukuyang balanse sa pagtitipid, na makukuha ang interes sa paglipas ng panahon. Maaari kang magdeposito o bawiin ang iyong Deuro sa anumang oras.", "deuro_savings_collect_interest": "Mangolekta ng interes", + "deuro_savings_collect_interest_tooltip": "Ito ay kumakatawan sa iyong kasalukuyang nakuha na interes, na maaari mong kolektahin sa iyong balanse ng Deuro sa anumang oras.", "deuro_savings_remove": "Umatras", "deuro_savings_set_approval": "Itakda ang pag -apruba", "deuro_savings_subtitle": "Kumita ng hanggang sa 10% na interes sa iyong mga hawak na Deuro StableCoin", + "deuro_savings_welcome_description": "Ang Deuro ay isang ganap na desentralisado, collateralized stableCoin na naka-peg sa euro-secure, maraming nalalaman, at lumalaban sa censorship nang hindi kinakailangang umasa sa mga orakulo. 1 deuro = 1 euro.", + "deuro_tooltip_no_eth": "Upang paganahin ang Deuro, dapat kang magkaroon ng ETH sa iyong pitaka.", "deuro_tx_commited_content": "Maaaring tumagal ng ilang segundo para sa transaksyon upang kumpirmahin at maipakita sa screen", "device_is_signing": "Nag -sign ang aparato", "dfx_option_description": "Bumili ng crypto kasama ang EUR & CHF. Para sa mga retail customer at corporate customer sa Europe", @@ -1077,6 +1087,7 @@ "walletConnect": "WalletConnect", "wallets": "Mga Wallet", "warning": "Babala", + "website": "Website", "welcome": "Maligayang pagdating", "welcome_subtitle_new_wallet": "Kung nais mong simulan ang sariwa, tapikin ang Lumikha ng Bagong Wallet sa ibaba at pupunta ka sa mga karera.", "welcome_subtitle_restore_wallet": "Kung mayroon kang isang umiiral na pitaka na nais mong dalhin sa cake, piliin lamang ang ibalik ang umiiral na pitaka at lalakad ka namin sa proseso.", diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb index c5582b4ef..7391e952e 100644 --- a/res/values/strings_tr.arb +++ b/res/values/strings_tr.arb @@ -245,14 +245,24 @@ "descending": "Azalan", "description": "Tanım", "destination_tag": "Hedef Etiketi:", + "deuro_about_deuro": "Deuro hakkında", "deuro_collect_interest": "TOPLAMAK", + "deuro_reinvest_interest": "Yeniden yatırım yapmak", "deuro_savings": "dEuro Tasarruf", "deuro_savings_add": "Yatırmak", + "deuro_savings_approve_app": "Uygulamayı onaylayın", + "deuro_savings_approve_app_description": "Deuro Smart Sözleşmesinin Deuro Jetonlarınızı tasarruf için yönetmesine izin verin, ancak Deuro'nuzu gönderme veya alma yeteneği değil.", + "deuro_savings_available_to_add": "Eklenecek", + "deuro_savings_available_to_remove": "Kaldırma için kullanılabilir", "deuro_savings_balance": "Tasarruf Bakiyesi", + "deuro_savings_balance_tooltip": "Bu, zaman içinde faiz tahakkuk eden mevcut tasarruf bakiyenizi temsil eder. Deuro'nuzu herhangi bir zamanda yatırabilir veya çekebilirsiniz.", "deuro_savings_collect_interest": "İlgi toplamak", + "deuro_savings_collect_interest_tooltip": "Bu, herhangi bir zamanda Deuro dengenize toplayabileceğiniz mevcut kazandığınız faizi temsil eder.", "deuro_savings_remove": "Geri çekilmek", "deuro_savings_set_approval": "Onay ayarlamak", "deuro_savings_subtitle": "Deuro StableCoin Holdings'e% 10'a kadar faiz kazanın", + "deuro_savings_welcome_description": "Deuro, Euro'ya sabitlenmiş tamamen merkezi olmayan, teminatlı bir stablecoin-kehanetlere güvenmek zorunda kalmadan güvenli, çok yönlü ve sansür dirençli. 1 Deuro = 1 Euro.", + "deuro_tooltip_no_eth": "Deuro'yu etkinleştirmek için cüzdanınızda ETH olması gerekir.", "deuro_tx_commited_content": "İşlemin onaylaması ve ekrana yansıtılması birkaç saniye sürebilir", "device_is_signing": "Cihaz imzalıyor", "dfx_option_description": "Eur & chf ile kripto satın alın. Avrupa'daki perakende ve kurumsal müşteriler için", @@ -1077,6 +1087,7 @@ "walletConnect": "WalletConnect", "wallets": "Cüzdanlar", "warning": "Uyarı", + "website": "Web sitesi", "welcome": "Hoş geldin", "welcome_subtitle_new_wallet": "Taze başlamak istiyorsanız, aşağıda yeni cüzdan oluşturun ve yarışlara gidersiniz.", "welcome_subtitle_restore_wallet": "Mevcut bir cüzdanınız varsa, kek içine getirmek istediğiniz, mevcut cüzdanı geri yüklemeyi seçin ve bu süreç boyunca size yol gösterelim.", diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index cdfc91433..c02b853a7 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -245,14 +245,24 @@ "descending": "Низхідний", "description": "опис", "destination_tag": "Тег призначення:", + "deuro_about_deuro": "Про Deuro", "deuro_collect_interest": "Збирати", + "deuro_reinvest_interest": "Реінвестувати", "deuro_savings": "заощадження dEuro", "deuro_savings_add": "Депозит", + "deuro_savings_approve_app": "Затвердити додаток", + "deuro_savings_approve_app_description": "Дозвольте смарт -контракту Deuro керувати вашими жетонами Deuro для заощаджень, але не здатністю відправляти або приймати Deuro.", + "deuro_savings_available_to_add": "Доступно додати", + "deuro_savings_available_to_remove": "Доступно для видалення", "deuro_savings_balance": "Баланс заощаджень", + "deuro_savings_balance_tooltip": "Це являє собою поточний баланс заощаджень, який з часом отримає інтерес. Ви можете депозити або зняти свій Deuro в будь -який момент часу.", "deuro_savings_collect_interest": "Збирати інтерес", + "deuro_savings_collect_interest_tooltip": "Це представляє ваш поточний зароблений інтерес, який ви можете в будь -який час зібрати свій баланс Deuro.", "deuro_savings_remove": "Відступати", "deuro_savings_set_approval": "Встановити схвалення", "deuro_savings_subtitle": "Заробляйте до 10% відсотків на ваших Holdings Deuro StableCoin", + "deuro_savings_welcome_description": "Deuro-це повністю децентралізований, колатералізований стаблекуїн, прив’язаний до євро-безпечного, універсального та стійкого до цензури, не покладаючись на оракули. 1 Deuro = 1 євро.", + "deuro_tooltip_no_eth": "Для того, щоб увімкнути Deuro, ви повинні мати ETH у своєму гаманці.", "deuro_tx_commited_content": "Це може знадобитися кілька секунд, щоб транзакція підтвердила та відображалася на екрані", "device_is_signing": "Пристрій підписується", "dfx_option_description": "Купуйте криптовалюту з EUR & CHF. Для роздрібних та корпоративних клієнтів у Європі", @@ -1078,6 +1088,7 @@ "walletConnect": "WalletConnect", "wallets": "Гаманці", "warning": "УВАГА", + "website": "Веб -сайт", "welcome": "Вітати", "welcome_subtitle_new_wallet": "Якщо ви хочете почати спочатку, торкніться Створити новий гаманець нижче, і ви будете поза конкуренціею.", "welcome_subtitle_restore_wallet": "Якщо у вас є існуючий гаманець, який ви хочете ввести в торт, просто виберіть Відновити існуючий гаманець, і ми проведемо вас через процес.", diff --git a/res/values/strings_ur.arb b/res/values/strings_ur.arb index 42a2398c2..6bebc5027 100644 --- a/res/values/strings_ur.arb +++ b/res/values/strings_ur.arb @@ -245,14 +245,24 @@ "descending": "اترتے ہوئے", "description": "ﻞﯿﺼﻔﺗ", "destination_tag": "منزل کا ٹیگ:", + "deuro_about_deuro": "ڈیورو کے بارے میں", "deuro_collect_interest": "جمع کریں", + "deuro_reinvest_interest": "دوبارہ لگائیں", "deuro_savings": "ڈیورو کی بچت", "deuro_savings_add": "جمع کروائیں", + "deuro_savings_approve_app": "ایپ کو منظور کریں", + "deuro_savings_approve_app_description": "ڈیورو سمارٹ معاہدے کو بچت کے ل your اپنے ڈیورو ٹوکن کا انتظام کرنے کی اجازت دیں ، لیکن اپنے ڈورو بھیجنے یا لینے کی صلاحیت نہیں۔", + "deuro_savings_available_to_add": "شامل کرنے کے لئے دستیاب ہے", + "deuro_savings_available_to_remove": "ہٹانے کے لئے دستیاب ہے", "deuro_savings_balance": "بچت کا توازن", + "deuro_savings_balance_tooltip": "یہ آپ کے موجودہ بچت کے توازن کی نمائندگی کرتا ہے ، جو وقت کے ساتھ دلچسپی حاصل کرے گا۔ آپ کسی بھی وقت اپنے ڈیورو کو جمع کروا سکتے ہیں یا واپس لے سکتے ہیں۔", "deuro_savings_collect_interest": "دلچسپی جمع کریں", + "deuro_savings_collect_interest_tooltip": "یہ آپ کی موجودہ کمائی ہوئی دلچسپی کی نمائندگی کرتا ہے ، جسے آپ کسی بھی وقت اپنے ڈیورو بیلنس میں جمع کرسکتے ہیں۔", "deuro_savings_remove": "واپس لے لو", "deuro_savings_set_approval": "منظوری طے کریں", "deuro_savings_subtitle": "اپنے ڈیورو اسٹبل کوئن ہولڈنگز پر 10 ٪ سود حاصل کریں", + "deuro_savings_welcome_description": "ڈیورو ایک مکمل طور پر विकेंद्रीकृत ، خودکش حملہ اسٹیبلکوائن ہے جو یورو میں کھڑا ہوتا ہے-محفوظ ، ورسٹائل اور سنسرشپ سے مزاحم بغیر کسی پر بھروسہ کرنے کے۔ 1 ڈیورو = 1 یورو۔", + "deuro_tooltip_no_eth": "ڈیورو کو قابل بنانے کے ل you ، آپ کو اپنے بٹوے میں ETH ہونا ضروری ہے۔", "deuro_tx_commited_content": "لین دین کی تصدیق اور اسکرین پر عکاسی کرنے میں اس میں کچھ سیکنڈ لگ سکتے ہیں", "device_is_signing": "ڈیوائس پر دستخط کر رہے ہیں", "dfx_option_description": "یورو اور سی ایچ ایف کے ساتھ کرپٹو خریدیں۔ یورپ میں خوردہ اور کارپوریٹ صارفین کے لئے", @@ -1079,6 +1089,7 @@ "walletConnect": "WalletConnect", "wallets": "بٹوے", "warning": "وارننگ", + "website": "ویب سائٹ", "welcome": "خوش آمدید", "welcome_subtitle_new_wallet": "اگر آپ تازہ شروع کرنا چاہتے ہیں تو ، نیچے نیا پرس بنائیں پر تھپتھپائیں اور آپ ریسوں پر جائیں گے۔", "welcome_subtitle_restore_wallet": "اگر آپ کے پاس موجودہ پرس ہے تو آپ کیک میں لانا چاہتے ہیں تو ، موجودہ بٹوے کو بحال کریں کا انتخاب کریں اور ہم آپ کو اس عمل میں چلیں گے۔", diff --git a/res/values/strings_vi.arb b/res/values/strings_vi.arb index 5f76e666a..4fc15425e 100644 --- a/res/values/strings_vi.arb +++ b/res/values/strings_vi.arb @@ -244,14 +244,24 @@ "descending": "Giảm dần", "description": "Mô tả", "destination_tag": "Thẻ đích:", + "deuro_about_deuro": "Về Deuro", "deuro_collect_interest": "Sưu tầm", + "deuro_reinvest_interest": "Tái đầu tư", "deuro_savings": "Tiết kiệm dEuro", "deuro_savings_add": "Tiền gửi", + "deuro_savings_approve_app": "Ứng dụng phê duyệt", + "deuro_savings_approve_app_description": "Cho phép hợp đồng thông minh Deuro để quản lý mã thông báo Deuro của bạn để tiết kiệm, nhưng không phải là khả năng gửi hoặc lấy Deuro của bạn.", + "deuro_savings_available_to_add": "Có sẵn để thêm", + "deuro_savings_available_to_remove": "Có sẵn để loại bỏ", "deuro_savings_balance": "Số dư tiết kiệm", + "deuro_savings_balance_tooltip": "Điều này thể hiện số dư tiết kiệm hiện tại của bạn, sẽ tích lũy lãi theo thời gian. Bạn có thể gửi hoặc rút Deuro của bạn tại bất kỳ thời điểm nào.", "deuro_savings_collect_interest": "Thu tiền lãi", + "deuro_savings_collect_interest_tooltip": "Điều này thể hiện sự quan tâm kiếm được hiện tại của bạn, mà bạn có thể thu thập vào số dư Deuro của mình bất cứ lúc nào.", "deuro_savings_remove": "Rút", "deuro_savings_set_approval": "Đặt phê duyệt", "deuro_savings_subtitle": "Kiếm tới 10% tiền lãi cho Deuro Storcoin Holdings của bạn", + "deuro_savings_welcome_description": "Deuro là một stablecoin phi tập trung, tài sản thế chấp hoàn toàn được gắn với đồng euro-an toàn, linh hoạt và chống kiểm duyệt mà không phải dựa vào các nhà tiên tri. 1 Deuro = 1 Euro.", + "deuro_tooltip_no_eth": "Để cho phép Deuro, bạn phải có ETH trong ví của mình.", "deuro_tx_commited_content": "Có thể mất vài giây để giao dịch xác nhận và được phản ánh trên màn hình", "device_is_signing": "Thiết bị đang ký", "dfx_option_description": "Mua tiền điện tử bằng EUR & CHF. Dành cho khách hàng bán lẻ và doanh nghiệp tại Châu Âu", @@ -1074,6 +1084,7 @@ "walletConnect": "WalletConnect", "wallets": "Các ví", "warning": "Cảnh báo", + "website": "Trang web", "welcome": "Chào mừng", "welcome_subtitle_new_wallet": "Nếu bạn muốn bắt đầu mới, hãy nhấn Tạo ví mới bên dưới và bạn sẽ rời khỏi các cuộc đua.", "welcome_subtitle_restore_wallet": "Nếu bạn có một ví hiện có mà bạn muốn mang vào bánh, chỉ cần chọn khôi phục ví hiện có và chúng tôi sẽ hướng dẫn bạn qua quá trình này.", diff --git a/res/values/strings_yo.arb b/res/values/strings_yo.arb index 360fcd6b6..53695e326 100644 --- a/res/values/strings_yo.arb +++ b/res/values/strings_yo.arb @@ -245,14 +245,24 @@ "descending": "Sọkalẹ", "description": "Apejuwe", "destination_tag": "Orúkọ tí ìbí tó a ránṣẹ́ sí:", + "deuro_about_deuro": "Nipa deuro", "deuro_collect_interest": "Kojọ", + "deuro_reinvest_interest": "Reinvest", "deuro_savings": "dEuro Awọn ifowopamọ", "deuro_savings_add": "Owo ifipamọ", + "deuro_savings_approve_app": "Gba app app", + "deuro_savings_approve_app_description": "Gba adehun Deuro Smart Deur Lati Ṣakoso awọn ami-iwọle Dura rẹ fun awọn ifowopamọ, ṣugbọn kii ṣe agbara lati firanṣẹ tabi mu deuroo rẹ.", + "deuro_savings_available_to_add": "Wa lati ṣafikun", + "deuro_savings_available_to_remove": "Wa lati yọ kuro", "deuro_savings_balance": "Iwontunws.funfun ifowopamọ", + "deuro_savings_balance_tooltip": "Eyi duro fun iwọntunwọnsi awọn ifipamọ lọwọlọwọ, eyiti yoo gba anfani pupọ lori akoko. O le gbe okun sii tabi yọ fun deroo ni eyikeyi akoko ti a fun.", "deuro_savings_collect_interest": "Gba iwulo", + "deuro_savings_collect_interest_tooltip": "Eyi duro fun ifẹ ti o ni iṣiro lọwọlọwọ rẹ, eyiti o le gba sinu dọgbadọgba Durro rẹ nigbakugba.", "deuro_savings_remove": "Yọkuro", "deuro_savings_set_approval": "Ṣeto ifọwọsi", "deuro_savings_subtitle": "Jo'gun to 10% iwulo lori awọn idaduro Duroblockoin rẹ", + "deuro_savings_welcome_description": "Deurro jẹ iyọrisi ni kikun, stablecoin ti ko ni aabo si Euro - aabo, gbogbopọ, ati isọdọmọ-sooro laisi wọn lati gbekele awọn ipin. 1 deuro = 1 Euro.", + "deuro_tooltip_no_eth": "Ni ibere lati mu deur deuru, o gbọdọ ni o wa ninu apamọwọ rẹ.", "deuro_tx_commited_content": "O le gba tọkọtaya kan ti awọn aaya fun idunadura lati jẹrisi ati ṣe afihan loju iboju", "device_is_signing": "Ẹrọ n forukọsilẹ", "dfx_option_description": "Ra Crypto pẹlu EUR & CHF. Fun soobu ati awọn alabara ile-iṣẹ ni Yuroopu", @@ -1078,6 +1088,7 @@ "walletConnect": "Asopọmọra apamọwọ", "wallets": "Àwọn àpamọ́wọ́", "warning": "Ikilo", + "website": "Oju opo wẹẹbu", "welcome": "Kaabọ", "welcome_subtitle_new_wallet": "Ti o ba fẹ bẹrẹ alabapade, tẹ Ṣẹda apamọwọ tuntun ni isalẹ iwọ yoo wa ni pipa si awọn ere-ije.", "welcome_subtitle_restore_wallet": "Ti o ba ni apamọwọ ti o wa tẹlẹ ti o fẹ lati mu wa sinu akara oyinbo, yan omi apamọwọ wa tẹlẹ ati pe a yoo rin ọ nipasẹ ilana naa.", diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 3bf18677c..fc09bdc01 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -245,14 +245,24 @@ "descending": "下降", "description": "描述", "destination_tag": "目标Tag:", + "deuro_about_deuro": "关于Deuro", "deuro_collect_interest": "收集", + "deuro_reinvest_interest": "再投资", "deuro_savings": "dEuro储蓄", "deuro_savings_add": "订金", + "deuro_savings_approve_app": "批准应用程序", + "deuro_savings_approve_app_description": "允许Deuro Smart合同管理您的Deuro代币以节省,但不使用发送或拿出Deuro的能力。", + "deuro_savings_available_to_add": "可添加", + "deuro_savings_available_to_remove": "可删除", "deuro_savings_balance": "储蓄平衡", + "deuro_savings_balance_tooltip": "这代表您当前的储蓄余额,这将随着时间的推移产生利息。您可以在任何给定时间存入或撤回Deuro。", "deuro_savings_collect_interest": "收集兴趣", + "deuro_savings_collect_interest_tooltip": "这代表了您目前的利息,您可以随时收集到Deuro的余额中。", "deuro_savings_remove": "提取", "deuro_savings_set_approval": "设定批准", "deuro_savings_subtitle": "您的Deuro Stablecoin Holdings最多可赚取10%的利息", + "deuro_savings_welcome_description": "Deuro是一个完全分散的,抵押的STABLECOIN,与欧元固定在一起 - 安全,多功能和耐心制度,而不必依靠Oracles。 1 deuro = 1欧元。", + "deuro_tooltip_no_eth": "为了启用deuro,您必须在钱包里有ETH。", "deuro_tx_commited_content": "交易可能需要几秒钟才能确认并在屏幕上反射", "device_is_signing": "设备正在签名", "dfx_option_description": "用Eur&Chf购买加密货币。对于欧洲的零售和企业客户", @@ -1077,6 +1087,7 @@ "walletConnect": "钱包连接", "wallets": "钱包", "warning": "警告", + "website": "网站", "welcome": "欢迎", "welcome_subtitle_new_wallet": "如果您想开始新鲜,请点击下面的创建新钱包,您将参加比赛。", "welcome_subtitle_restore_wallet": "如果您有一个现有的钱包要把蛋糕带入蛋糕,只需选择还原现有的钱包,我们将带您完成整个过程。", diff --git a/tool/configure.dart b/tool/configure.dart index f6e1496de..ca56d1fce 100644 --- a/tool/configure.dart +++ b/tool/configure.dart @@ -755,6 +755,7 @@ abstract class Ethereum { Future getDEuroSavingsApproved(WalletBase wallet); Future addDEuroSaving(WalletBase wallet, BigInt amount, TransactionPriority priority); Future removeDEuroSaving(WalletBase wallet, BigInt amount, TransactionPriority priority); + Future reinvestDEuroInterest(WalletBase wallet, TransactionPriority priority); Future enableDEuroSaving(WalletBase wallet, TransactionPriority priority); void setLedgerConnection(WalletBase wallet, ledger.LedgerConnection connection);