diff --git a/CHANGELOG.md b/CHANGELOG.md index 60c265b435..a7a1bcb9cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ Changelog ========= -## vNext +## 2.0.1 ### Features @@ -9,6 +9,7 @@ Changelog ### Fixes +- Improved wallet delegation error messages ([PR 2111](https://github.com/input-output-hk/daedalus/pull/2111)) - Fixed Daedalus logo animation on the "Loading" screen ([PR 2124](https://github.com/input-output-hk/daedalus/pull/2124)) - Fixed text copy on the "Delegation center" screen ([PR 2125](https://github.com/input-output-hk/daedalus/pull/2125)) diff --git a/installer-clusters.cfg b/installer-clusters.cfg index c39e6a72b1..44e1b19691 100644 --- a/installer-clusters.cfg +++ b/installer-clusters.cfg @@ -1 +1 @@ -shelley_testnet_v6 shelley_qa mainnet_flight testnet mainnet staging +mainnet mainnet_flight testnet shelley_testnet_v6 shelley_qa staging diff --git a/package.json b/package.json index 84a88b9aad..3ad3ca8aa5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "daedalus", "productName": "Daedalus", - "version": "2.0.0", + "version": "2.0.1", "description": "Cryptocurrency Wallet", "main": "./dist/main/index.js", "scripts": { diff --git a/source/renderer/app/api/api.js b/source/renderer/app/api/api.js index 67db28e282..dd3d9cce67 100644 --- a/source/renderer/app/api/api.js +++ b/source/renderer/app/api/api.js @@ -13,6 +13,7 @@ import { WalletTransaction, TransactionTypes, TransactionStates, + TransactionWithdrawal, } from '../domains/WalletTransaction'; import WalletAddress from '../domains/WalletAddress'; @@ -225,7 +226,6 @@ export default class AdaApi { this.config ); logger.debug('AdaApi::getWallets success', { wallets, legacyWallets }); - map(legacyWallets, legacyAdaWallet => { const extraLegacyWalletProps = { address_pool_gap: 0, // Not needed for legacy wallets @@ -633,6 +633,7 @@ export default class AdaApi { }, ], passphrase, + withdrawal: TransactionWithdrawal, }; let response: Transaction; @@ -694,6 +695,7 @@ export default class AdaApi { }, }, ], + withdrawal: TransactionWithdrawal, }; let response: TransactionFee; diff --git a/source/renderer/app/api/transactions/requests/createTransaction.js b/source/renderer/app/api/transactions/requests/createTransaction.js index 80396ae8ac..f49f84db6c 100644 --- a/source/renderer/app/api/transactions/requests/createTransaction.js +++ b/source/renderer/app/api/transactions/requests/createTransaction.js @@ -1,16 +1,8 @@ // @flow import type { RequestConfig } from '../../common/types'; -import type { Transaction, TransactionPaymentData } from '../types'; +import type { Transaction, TransactionParams } from '../types'; import { request } from '../../utils/request'; -export type TransactionParams = { - walletId: string, - data: { - payments: Array, - passphrase: string, - }, -}; - export const createTransaction = ( config: RequestConfig, { walletId, data }: TransactionParams @@ -21,6 +13,6 @@ export const createTransaction = ( path: `/v2/wallets/${walletId}/transactions/`, ...config, }, - { withdrawRewards: 'self' }, + {}, data ); diff --git a/source/renderer/app/api/transactions/requests/getTransactionFee.js b/source/renderer/app/api/transactions/requests/getTransactionFee.js index 1db8063e49..5384d06c24 100644 --- a/source/renderer/app/api/transactions/requests/getTransactionFee.js +++ b/source/renderer/app/api/transactions/requests/getTransactionFee.js @@ -1,15 +1,8 @@ // @flow import type { RequestConfig } from '../../common/types'; -import type { TransactionPaymentData, TransactionFee } from '../types'; +import type { TransactionFee, GetTransactionFeeParams } from '../types'; import { request } from '../../utils/request'; -export type GetTransactionFeeParams = { - walletId: string, - data: { - payments: Array, - }, -}; - export const getTransactionFee = ( config: RequestConfig, { walletId, data }: GetTransactionFeeParams @@ -20,6 +13,6 @@ export const getTransactionFee = ( path: `/v2/wallets/${walletId}/payment-fees`, ...config, }, - { withdrawRewards: 'self' }, + {}, data ); diff --git a/source/renderer/app/api/transactions/types.js b/source/renderer/app/api/transactions/types.js index eb7235ff6f..6d6691d536 100644 --- a/source/renderer/app/api/transactions/types.js +++ b/source/renderer/app/api/transactions/types.js @@ -61,6 +61,7 @@ export type TransactionWithdrawals = { stake_address: string, amount: TransactionAmount, }; +export type TransactionWithdrawalType = 'self'; export type TransactionState = 'pending' | 'in_ledger'; @@ -117,11 +118,28 @@ export type GetTransactionsResponse = { total: number, }; +export type TransactionParams = { + walletId: string, + data: { + payments: Array, + passphrase: string, + withdrawal: TransactionWithdrawalType, + }, +}; + export type TransactionFeeAmount = { quantity: number, unit: WalletUnits.LOVELACE, }; +export type GetTransactionFeeParams = { + walletId: string, + data: { + payments: Array, + withdrawal: TransactionWithdrawalType, + }, +}; + export type TransactionPaymentData = { address: string, amount: TransactionFeeAmount, diff --git a/source/renderer/app/components/loading/syncing-connecting/SyncingConnecting.js b/source/renderer/app/components/loading/syncing-connecting/SyncingConnecting.js index 45da17ad0b..1a66b0d2d8 100644 --- a/source/renderer/app/components/loading/syncing-connecting/SyncingConnecting.js +++ b/source/renderer/app/components/loading/syncing-connecting/SyncingConnecting.js @@ -63,7 +63,8 @@ export default class SyncingConnecting extends Component { }; componentDidMount() { - this._defensivelyStartTimers(this.props.isConnected); + const { isConnected, isVerifyingBlockchain } = this.props; + this._defensivelyStartTimers(isConnected, isVerifyingBlockchain); } componentDidUpdate() { @@ -79,9 +80,12 @@ export default class SyncingConnecting extends Component { isFlight, isVerifyingBlockchain, } = this.props; - const canResetConnecting = this._connectingTimerShouldStop(isConnected); + const canResetConnecting = this._connectingTimerShouldStop( + isConnected, + isVerifyingBlockchain + ); - this._defensivelyStartTimers(isConnected); + this._defensivelyStartTimers(isConnected, isVerifyingBlockchain); if (canResetConnecting) { this._resetConnectingTime(); } @@ -108,14 +112,26 @@ export default class SyncingConnecting extends Component { this._resetConnectingTime(); } - _connectingTimerShouldStart = (isConnected: boolean): boolean => - !isConnected && connectingInterval === null; + _connectingTimerShouldStart = ( + isConnected: boolean, + isVerifyingBlockchain: boolean + ): boolean => + !isConnected && !isVerifyingBlockchain && connectingInterval === null; - _connectingTimerShouldStop = (isConnected: boolean): boolean => - isConnected && connectingInterval !== null; + _connectingTimerShouldStop = ( + isConnected: boolean, + isVerifyingBlockchain: boolean + ): boolean => + (isConnected || isVerifyingBlockchain) && connectingInterval !== null; - _defensivelyStartTimers = (isConnected: boolean) => { - const needConnectingTimer = this._connectingTimerShouldStart(isConnected); + _defensivelyStartTimers = ( + isConnected: boolean, + isVerifyingBlockchain: boolean + ) => { + const needConnectingTimer = this._connectingTimerShouldStart( + isConnected, + isVerifyingBlockchain + ); if (needConnectingTimer) { connectingInterval = setInterval(this._incrementConnectingTime, 1000); } diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseWalletDialog.js b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseWalletDialog.js index f91f8fc0b3..65b222ca5c 100644 --- a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseWalletDialog.js +++ b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseWalletDialog.js @@ -59,14 +59,6 @@ const messages = defineMessages({ description: 'errorMinDelegationFunds Error Label on the delegation setup "choose wallet" step dialog.', }, - errorMinDelegationFundsHasRewards: { - id: - 'staking.delegationSetup.chooseWallet.step.dialog.errorMinDelegationFundsHasRewards', - defaultMessage: - '!!!This wallet does not contain the minimum amount of {minDelegationFunds} ADA which is required for delegation to be available.', - description: - 'errorMinDelegationFundsHasRewards Error Label on the delegation setup "choose wallet" step dialog.', - }, errorMinDelegationFundsRewardsOnly: { id: 'staking.delegationSetup.chooseWallet.step.dialog.errorMinDelegationFundsRewardsOnly', @@ -155,11 +147,6 @@ export default class DelegationStepsChooseWalletDialog extends Component< // Wallet only has Reward balance else if (!amount.isZero() && amount.equals(reward)) errorMessage = messages.errorMinDelegationFundsRewardsOnly; - // Wallet balance - rewards < min delegation funds - /* - else if (!reward.isZero()) - errorMessage = messages.errorMinDelegationFundsHasRewards; - */ // Wallet balance < min delegation funds else errorMessage = messages.errorMinDelegationFunds; } diff --git a/source/renderer/app/components/wallet/wallet-restore/WalletTypeDialog.js b/source/renderer/app/components/wallet/wallet-restore/WalletTypeDialog.js index fdcd958b16..f5ea755578 100644 --- a/source/renderer/app/components/wallet/wallet-restore/WalletTypeDialog.js +++ b/source/renderer/app/components/wallet/wallet-restore/WalletTypeDialog.js @@ -196,7 +196,9 @@ export default class WalletTypeDialog extends Component { } return { key: kind, - disabled: !isShelleyActivated && kind.includes('Shelley'), + disabled: + (!isShelleyActivated && kind.includes('Shelley')) || + kind === WALLET_YOROI_KINDS.SHELLEY_15_WORD, label: , selected: value === kind, onChange: () => this.props.onSetWalletKind(kind, kindParam), diff --git a/source/renderer/app/containers/staking/dialogs/DelegationSetupWizardDialogContainer.js b/source/renderer/app/containers/staking/dialogs/DelegationSetupWizardDialogContainer.js index b55083095d..3ea31f1777 100644 --- a/source/renderer/app/containers/staking/dialogs/DelegationSetupWizardDialogContainer.js +++ b/source/renderer/app/containers/staking/dialogs/DelegationSetupWizardDialogContainer.js @@ -66,7 +66,8 @@ export default class DelegationSetupWizardDialogContainer extends Component< walletReward?: BigNumber = 0 ) => walletAmount && - walletAmount.minus(walletReward).gte(new BigNumber(MIN_DELEGATION_FUNDS)); + walletAmount.gte(new BigNumber(MIN_DELEGATION_FUNDS)) && + !walletAmount.equals(walletReward); get selectedWalletId() { return get( diff --git a/source/renderer/app/domains/WalletTransaction.js b/source/renderer/app/domains/WalletTransaction.js index a84de6293f..68dd568fe4 100644 --- a/source/renderer/app/domains/WalletTransaction.js +++ b/source/renderer/app/domains/WalletTransaction.js @@ -6,6 +6,7 @@ import type { TransactionType, TransactionDepth, TransactionState, + TransactionWithdrawalType, } from '../api/transactions/types'; export const TransactionStates: EnumMap = { @@ -21,6 +22,8 @@ export const TransactionTypes: EnumMap = { EXCHANGE: 'exchange', }; +export const TransactionWithdrawal: TransactionWithdrawalType = 'self'; + export class WalletTransaction { @observable id: string = ''; @observable type: TransactionType; diff --git a/source/renderer/app/i18n/locales/defaultMessages.json b/source/renderer/app/i18n/locales/defaultMessages.json index b1b838777e..33105a5f7a 100644 --- a/source/renderer/app/i18n/locales/defaultMessages.json +++ b/source/renderer/app/i18n/locales/defaultMessages.json @@ -3550,32 +3550,18 @@ "line": 54 } }, - { - "defaultMessage": "!!!This wallet does not contain the minimum amount of {minDelegationFunds} ADA which is required for delegation to be available.", - "description": "errorMinDelegationFundsHasRewards Error Label on the delegation setup \"choose wallet\" step dialog.", - "end": { - "column": 3, - "line": 69 - }, - "file": "source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseWalletDialog.js", - "id": "staking.delegationSetup.chooseWallet.step.dialog.errorMinDelegationFundsHasRewards", - "start": { - "column": 37, - "line": 62 - } - }, { "defaultMessage": "!!!This wallet contains only rewards balances so it cannot be delegated.", "description": "errorMinDelegationFundsRewardsOnly Error Label on the delegation setup \"choose wallet\" step dialog.", "end": { "column": 3, - "line": 77 + "line": 69 }, "file": "source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseWalletDialog.js", "id": "staking.delegationSetup.chooseWallet.step.dialog.errorMinDelegationFundsRewardsOnly", "start": { "column": 38, - "line": 70 + "line": 62 } }, { @@ -3583,13 +3569,13 @@ "description": "RestoringWallet Error Label on the delegation setup \"choose wallet\" step dialog.", "end": { "column": 3, - "line": 84 + "line": 76 }, "file": "source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseWalletDialog.js", "id": "staking.delegationSetup.chooseWallet.step.dialog.errorRestoringWallet", "start": { "column": 24, - "line": 78 + "line": 70 } }, { @@ -3597,13 +3583,13 @@ "description": "Label for continue button on the delegation setup \"choose wallet\" step dialog.", "end": { "column": 3, - "line": 90 + "line": 82 }, "file": "source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseWalletDialog.js", "id": "staking.delegationSetup.chooseWallet.step.dialog.continueButtonLabel", "start": { "column": 23, - "line": 85 + "line": 77 } } ], diff --git a/source/renderer/app/i18n/locales/en-US.json b/source/renderer/app/i18n/locales/en-US.json index 4fa9f699dc..514147e0b8 100755 --- a/source/renderer/app/i18n/locales/en-US.json +++ b/source/renderer/app/i18n/locales/en-US.json @@ -336,7 +336,6 @@ "staking.delegationSetup.chooseWallet.step.dialog.continueButtonLabel": "Continue", "staking.delegationSetup.chooseWallet.step.dialog.description": "Choose a wallet that holds the funds you want to delegate. The selected wallet must contain a minimum amount of {minDelegationFunds} ADA for delegation to be an option.", "staking.delegationSetup.chooseWallet.step.dialog.errorMinDelegationFunds": "This wallet does not contain the minimum amount of {minDelegationFunds} ADA which is required for delegation to be available. Please select a wallet with a minimum amount of {minDelegationFunds} ADA and click continue.", - "staking.delegationSetup.chooseWallet.step.dialog.errorMinDelegationFundsHasRewards": "This wallet does not contain the minimum amount of {minDelegationFunds} ADA which is required for delegation to be available. Rewards cannot be used for this purpose. Please select a wallet with a minimum amount of {minDelegationFunds} ADA and click continue.", "staking.delegationSetup.chooseWallet.step.dialog.errorMinDelegationFundsRewardsOnly": "This wallet contains only rewards balances so it cannot be delegated.", "staking.delegationSetup.chooseWallet.step.dialog.errorRestoringWallet": "This wallet can’t be used for delegation while it’s being synced.", "staking.delegationSetup.chooseWallet.step.dialog.selectWalletInputLabel": "Wallet", diff --git a/source/renderer/app/i18n/locales/ja-JP.json b/source/renderer/app/i18n/locales/ja-JP.json index 2a38a6e51b..f08251b567 100755 --- a/source/renderer/app/i18n/locales/ja-JP.json +++ b/source/renderer/app/i18n/locales/ja-JP.json @@ -336,7 +336,6 @@ "staking.delegationSetup.chooseWallet.step.dialog.continueButtonLabel": "続ける", "staking.delegationSetup.chooseWallet.step.dialog.description": "このウォレットには委任を有効にするために必要な最低額{minDelegationFunds}ADAが入っていません。{minDelegationFunds}ADA以上入っているウォレットを選択して、[続ける]をクリックしてください。", "staking.delegationSetup.chooseWallet.step.dialog.errorMinDelegationFunds": "選択されたウォレットには委任を有効にするために必要な最低額{minDelegationFunds}ADAが入っていません。{minDelegationFunds}ADA以上入っているウォレットを選択して、[続ける]をクリックしてください。", - "staking.delegationSetup.chooseWallet.step.dialog.errorMinDelegationFundsHasRewards": "このウォレットには委任を有効にするために必要な最低額{minDelegationFunds}ADAが入っていません。Rewards cannot be used for this purpose. {minDelegationFunds}ADA以上{minDelegationFunds}ADA以上入っているウォレットを選択して、[続ける]をクリックしてください。", "staking.delegationSetup.chooseWallet.step.dialog.errorMinDelegationFundsRewardsOnly": "このウォレットに含まれているのは報酬残高のみであるため、委任はできません。", "staking.delegationSetup.chooseWallet.step.dialog.errorRestoringWallet": "このウォレットは現在同期中のため委任に使用することができません。", "staking.delegationSetup.chooseWallet.step.dialog.selectWalletInputLabel": "ウォレット",