diff --git a/CHANGELOG.md b/CHANGELOG.md index 42673682ae..27a7405cbb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ Changelog ### Features +- Added rewards address in Rewards Delegation Screen ([PR 2475](https://github.com/input-output-hk/daedalus/pull/2475)) - Added absolute slot number to Catalyst voting registration transaction metadata ([PR 2476](https://github.com/input-output-hk/daedalus/pull/2476)) - Improved the transactions and rewards CSV export contents ([PR 2451](https://github.com/input-output-hk/daedalus/pull/2451)) - Implement Trezor passphrase handling ([PR 2284](https://github.com/input-output-hk/daedalus/pull/2284)) diff --git a/source/renderer/app/api/staking/types.js b/source/renderer/app/api/staking/types.js index 6eba284f7d..f304bb4c72 100644 --- a/source/renderer/app/api/staking/types.js +++ b/source/renderer/app/api/staking/types.js @@ -65,6 +65,7 @@ export type RewardForIncentivizedTestnet = { date?: string, wallet: string, reward: BigNumber, + rewardsAddress: string, pool?: StakePool, }; diff --git a/source/renderer/app/components/staking/rewards/StakingRewards.js b/source/renderer/app/components/staking/rewards/StakingRewards.js index b3e514bad1..c8f18f686f 100644 --- a/source/renderer/app/components/staking/rewards/StakingRewards.js +++ b/source/renderer/app/components/staking/rewards/StakingRewards.js @@ -54,7 +54,7 @@ const messages = defineMessages({ }, tableHeaderReward: { id: 'staking.rewards.tableHeader.reward', - defaultMessage: '!!!Reward', + defaultMessage: '!!!Total rewards earned', description: 'Table header "Reward" label on staking rewards page', }, learnMoreButtonLabel: { diff --git a/source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.js b/source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.js index 943669cc0c..f1a2efcaf5 100644 --- a/source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.js +++ b/source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.js @@ -8,6 +8,7 @@ import classNames from 'classnames'; import { PopOver } from 'react-polymorph/lib/components/PopOver'; import { Button } from 'react-polymorph/lib/components/Button'; import { ButtonSkin } from 'react-polymorph/lib/skins/simple/ButtonSkin'; +import CopyToClipboard from 'react-copy-to-clipboard'; import { DECIMAL_PLACES_IN_ADA } from '../../../config/numbersConfig'; import { StakingPageScrollContext } from '../layouts/StakingWithNavigation'; import { @@ -21,6 +22,8 @@ import downloadIcon from '../../../assets/images/download-ic.inline.svg'; import type { RewardForIncentivizedTestnet } from '../../../api/staking/types'; import styles from './StakingRewardsForIncentivizedTestnet.scss'; import globalMessages from '../../../i18n/global-messages'; +import iconCopy from '../../../assets/images/clipboard-ic.inline.svg'; +import ButtonLink from '../../widgets/ButtonLink'; const messages = defineMessages({ title: { @@ -53,19 +56,19 @@ const messages = defineMessages({ }, tableHeaderReward: { id: 'staking.rewards.tableHeader.reward', - defaultMessage: '!!!Reward', + defaultMessage: '!!!Total rewards earned (ADA)', description: 'Table header "Reward" label on staking rewards page', }, + tableHeaderRewardsAddress: { + id: 'staking.rewards.tableHeader.rewardsAddress', + defaultMessage: '!!!Rewards address', + description: 'Table header "Rewards address" label on staking rewards page', + }, tableHeaderDate: { id: 'staking.rewards.tableHeader.date', defaultMessage: '!!!Date', description: 'Table header "Date" label in exported csv file', }, - learnMoreButtonLabel: { - id: 'staking.rewards.learnMore.ButtonLabel', - defaultMessage: '!!!Learn more', - description: 'Label for "Learn more" button on staking rewards page', - }, note: { id: 'staking.rewards.note', defaultMessage: @@ -77,6 +80,11 @@ const messages = defineMessages({ defaultMessage: '!!!Syncing {syncingProgress}%', description: 'unknown stake pool label on staking rewards page.', }, + actionViewInExplorer: { + id: 'staking.rewards.actionViewInExplorer', + defaultMessage: '!!!View in explorer', + description: 'View in explorer button label on staking rewards page.', + }, }); const REWARD_FIELDS = { @@ -84,6 +92,7 @@ const REWARD_FIELDS = { IS_RESTORING: 'isRestoring', SYNCING_PROGRESS: 'syncingProgress', REWARD: 'reward', + REWARDS_ADDRESS: 'rewardsAddress', }; const REWARD_ORDERS = { @@ -91,11 +100,15 @@ const REWARD_ORDERS = { DESCENDING: 'desc', }; +const IS_EXPLORER_LINK_BUTTON_ENABLED = false; + type Props = { rewards: Array, isLoading: boolean, isExporting: boolean, onExportCsv: Function, + onCopyAddress: Function, + onOpenExternalLink: Function, }; type State = { @@ -142,7 +155,13 @@ export default class StakingRewardsForIncentivizedTestnet extends Component< const rewardAmount = get(reward, REWARD_FIELDS.REWARD).toFormat( DECIMAL_PLACES_IN_ADA ); - return [rewardWallet, isRestoring ? '-' : rewardAmount, date]; + const rewardsAddress = get(reward, REWARD_FIELDS.REWARDS_ADDRESS); + return [ + rewardWallet, + rewardsAddress, + isRestoring ? '-' : rewardAmount, + date, + ]; }); const exportedContent = [exportedHeader, ...exportedBody]; @@ -172,18 +191,41 @@ export default class StakingRewardsForIncentivizedTestnet extends Component< rewardB.wallet, rewardsOrder === REWARD_ORDERS.ASCENDING ); + const walletAddressCompareResult = stringComparator( + rewardA.rewardsAddress, + rewardB.rewardsAddress, + rewardsOrder === REWARD_ORDERS.ASCENDING + ); if (rewardsSortBy === REWARD_FIELDS.REWARD) { - if (rewardCompareResult === 0) { + if (rewardCompareResult === 0 && walletAddressCompareResult === 0) { return walletNameCompareResult; } + if (rewardCompareResult === 0 && walletNameCompareResult === 0) { + return walletAddressCompareResult; + } return rewardCompareResult; } if (rewardsSortBy === REWARD_FIELDS.WALLET_NAME) { - if (walletNameCompareResult === 0) { + if (walletNameCompareResult === 0 && walletAddressCompareResult) { return rewardCompareResult; } + if (rewardCompareResult === 0 && walletNameCompareResult === 0) { + return walletAddressCompareResult; + } return walletNameCompareResult; } + if (rewardsSortBy === REWARD_FIELDS.REWARDS_ADDRESS) { + if (walletAddressCompareResult === 0 && rewardCompareResult === 0) { + return walletNameCompareResult; + } + if ( + walletAddressCompareResult === 0 && + walletNameCompareResult === 0 + ) { + return rewardCompareResult; + } + return walletAddressCompareResult; + } return 0; } ); @@ -194,7 +236,8 @@ export default class StakingRewardsForIncentivizedTestnet extends Component< rewards, isLoading, isExporting, - // onLearnMoreClick, + onCopyAddress, + onOpenExternalLink, } = this.props; const { rewardsOrder, rewardsSortBy } = this.state; const { intl } = this.context; @@ -206,6 +249,10 @@ export default class StakingRewardsForIncentivizedTestnet extends Component< name: REWARD_FIELDS.WALLET_NAME, title: intl.formatMessage(messages.tableHeaderWallet), }, + { + name: REWARD_FIELDS.REWARDS_ADDRESS, + title: intl.formatMessage(messages.tableHeaderRewardsAddress), + }, { name: REWARD_FIELDS.REWARD, title: `${intl.formatMessage( @@ -232,6 +279,11 @@ export default class StakingRewardsForIncentivizedTestnet extends Component< ctx.scrollTop > 10 ? styles.actionButtonFaded : null, ]); + const explorerButtonClasses = classNames([ + 'flat', + styles.actionExplorerLink, + ]); + return ( {(context) => ( @@ -307,11 +359,56 @@ export default class StakingRewardsForIncentivizedTestnet extends Component< reward, REWARD_FIELDS.REWARD ).toFormat(DECIMAL_PLACES_IN_ADA); + const rewardsAddress = get( + reward, + REWARD_FIELDS.REWARDS_ADDRESS + ); return ( - {rewardWallet} - + + {rewardWallet} + + + {rewardsAddress && ( +
+ onCopyAddress(rewardsAddress)} + > +
+ + {rewardsAddress} + + + + +
+
+ {IS_EXPLORER_LINK_BUTTON_ENABLED && ( + + onOpenExternalLink(rewardsAddress) + } + skin={ButtonSkin} + label={intl.formatMessage( + messages.actionViewInExplorer + )} + linkProps={{ + className: styles.externalLink, + hasIconBefore: false, + hasIconAfter: true, + }} + /> + )} +
+ )} + + {isRestoring ? '-' : rewardAmount} {isRestoring && (
diff --git a/source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.scss b/source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.scss index 356aa47176..e5edec080c 100644 --- a/source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.scss +++ b/source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.scss @@ -82,6 +82,7 @@ &:hover { border-bottom: 1px solid var(--theme-staking-link-color); color: var(--theme-staking-link-color); + svg { g { stroke: var(--theme-staking-link-color); @@ -149,18 +150,22 @@ & > .sortIcon { margin-left: 6px; visibility: hidden; + & > svg { height: 7.5px; width: 7px; + & > path { fill: var(--theme-staking-font-color-regular); } } + &.ascending { & > svg { transform: rotateX(150deg); } } + &.sorted { opacity: 1; visibility: visible; @@ -179,7 +184,6 @@ -webkit-user-select: none; -ms-user-select: none; user-select: none; - width: 25%; p { -webkit-box-orient: vertical; @@ -201,6 +205,115 @@ :global .LoadingSpinner_component.LoadingSpinner_medium { margin: 10px auto !important; + + .LoadingSpinner_icon svg path { + fill: var(--theme-loading-spinner-color); + opacity: 0.3; + } + } + } + + .copyAddress { + cursor: pointer; + display: flex; + white-space: nowrap; + } + + .copyIcon { + cursor: pointer; + margin-left: 6px; + object-fit: contain; + opacity: 0; + + & > svg { + height: 10px; + width: 8px; + + path { + fill: var(--theme-icon-copy-address-color); + } + } + } + + .actionExplorerLink { + align-items: center; + border-radius: 3px; + display: flex; + height: 16px; + justify-content: center; + line-height: 16px; + margin-left: 15px; + padding: 3px 8px; + white-space: nowrap; + width: auto; + } + + .externalLink { + font-size: 8px; + font-weight: bold; + line-height: 1.25; + text-transform: uppercase; + + &:after { + height: 8px !important; + -webkit-mask-size: 8px, 8px !important; + mask-size: 8px, 8px !important; + width: 8px !important; + } + } + + &.rewardWallet { + max-width: 200px; + min-width: 200px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + &.rewardAmount { + min-width: 250px; + } + + &.rewardsAddress { + min-width: 100px; + + > div { + align-items: center; + display: flex; + justify-content: space-between; + } + + .addressContainer { + align-items: center; + display: flex; + + .address { + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 237px; + + &:hover { + cursor: pointer; + } + + @media screen and (min-width: 992px) { + width: 297px; + } + @media screen and (min-width: 1024px) { + width: 355px; + } + @media screen and (min-width: 1098px) { + width: auto; + } + } + + &:hover { + .copyIcon { + opacity: 1; + } + } } } } diff --git a/source/renderer/app/components/voting/VotingInfo.js b/source/renderer/app/components/voting/VotingInfo.js index e8fe68d05f..474e2683c9 100644 --- a/source/renderer/app/components/voting/VotingInfo.js +++ b/source/renderer/app/components/voting/VotingInfo.js @@ -23,18 +23,18 @@ import downloadPlayStoreIcon from '../../assets/images/voting/download-play-stor const messages = defineMessages({ heading: { id: 'voting.info.heading', - defaultMessage: '!!!Register to vote on Fund3', + defaultMessage: '!!!Register to vote on Fund4', description: 'Headline for voting registration steps', }, headingForEndedRegistration: { id: 'voting.info.headingForEndedRegistration', - defaultMessage: '!!!Fund3 Voting Registration Ended', + defaultMessage: '!!!Fund4 Voting Registration Ended', description: 'Headline for ended voting registration', }, descriptionForEndedRegistration: { id: 'voting.info.descriptionForEndedRegistration', defaultMessage: - '!!!

Voting registration for Project Catalyst Fund3 has been completed. The voting snapshot took place on {snapshotDate}.

If you have registered to vote on Fund3, you can cast your vote using the Catalyst Voting mobile app between {castStartDate} and {castEndDate}.

Fund3 registration will start on {newRegistrationStartDate}.

', + '!!!

Voting registration for Project Catalyst Fund4 has been completed. The voting snapshot took place on {snapshotDate}.

If you have registered to vote on Fund4, you can cast your vote using the Catalyst Voting mobile app between {castStartDate} and {castEndDate}.

Fund4 registration will start on {newRegistrationStartDate}.

', description: 'Description for ended voting registration', }, stepTitle1: { @@ -66,7 +66,7 @@ const messages = defineMessages({ }, learnMoreLinkLabelForEndedRegistration: { id: 'voting.info.learnMoreLinkLabelForEndedRegistration', - defaultMessage: '!!!Fund3 FAQs', + defaultMessage: '!!!Fund4 FAQs', description: 'Learn more link label for ended registration', }, learnMoreLinkUrl: { @@ -88,13 +88,13 @@ const messages = defineMessages({ bottomContentDescription: { id: 'voting.info.bottomContentDescription', defaultMessage: - '!!!To register to vote for Catalyst Fund3 you first need to download the Catalyst Voting app on your Android or iOS smartphone.', + '!!!To register to vote for Catalyst Fund4 you first need to download the Catalyst Voting app on your Android or iOS smartphone.', description: 'bottomContentDescription for voting registration steps', }, bottomContentDescriptionForEndedRegistration: { id: 'voting.info.bottomContentDescriptionForEndedRegistration', defaultMessage: - '!!!To cast your vote on Project Catalyst Fund3 proposals, you need to download the Catalyst Voting app on your Android or iOS smartphone.', + '!!!To cast your vote on Project Catalyst Fund4 proposals, you need to download the Catalyst Voting app on your Android or iOS smartphone.', description: 'bottomContentDescription for ended registration', }, checkboxLabel: { diff --git a/source/renderer/app/components/voting/VotingNoWallets.js b/source/renderer/app/components/voting/VotingNoWallets.js index 31134145f2..5b83a15fd8 100644 --- a/source/renderer/app/components/voting/VotingNoWallets.js +++ b/source/renderer/app/components/voting/VotingNoWallets.js @@ -12,7 +12,7 @@ const messages = defineMessages({ headLine: { id: 'voting.info.noWallets.headLine', defaultMessage: - '!!!Voting registration for Fund3 is not available as you currently do not have any Shelley-compatible wallets.', + '!!!Voting registration for Fund4 is not available as you currently do not have any Shelley-compatible wallets.', description: '"No wallets" headLine on the voting info page.', }, instructions: { diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsEnterPinCode.js b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsEnterPinCode.js index 339f7ae5da..bcf319259d 100644 --- a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsEnterPinCode.js +++ b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsEnterPinCode.js @@ -18,7 +18,7 @@ const messages = defineMessages({ description: { id: 'voting.votingRegistration.enterPinCode.step.description', defaultMessage: - '!!!Please enter a PIN for your Fund3 voting registration. The PIN you set here, and the QR code which you will get in the next step, will be required for you to vote using the Catalyst Voting app on your smartphone.', + '!!!Please enter a PIN for your Fund4 voting registration. The PIN you set here, and the QR code which you will get in the next step, will be required for you to vote using the Catalyst Voting app on your smartphone.', description: 'Description on the voting registration "enter pin code" step.', }, diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsQrCode.js b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsQrCode.js index 6e4a5702a0..a4f5c0f0af 100644 --- a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsQrCode.js +++ b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsQrCode.js @@ -37,7 +37,7 @@ const messages = defineMessages({ checkbox2Label: { id: 'voting.votingRegistration.qrCode.step.checkbox2Label', defaultMessage: - '!!!I acknowledge that I must have the downloaded PDF with the QR code, to vote with Fund3.', + '!!!I acknowledge that I must have the downloaded PDF with the QR code, to vote with Fund4.', description: 'Second checkbox label on the voting registration "qr code" step.', }, diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsRegister.js b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsRegister.js index 2da842bdeb..9d42eb2fbd 100644 --- a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsRegister.js +++ b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsRegister.js @@ -22,7 +22,7 @@ const messages = defineMessages({ description: { id: 'voting.votingRegistration.register.step.description', defaultMessage: - '!!!Please sign the voting registration transaction. This transaction links your wallet balance with your Fund3 voting registration, as a proof of your voting power. Funds will not leave your wallet, but registration requires paying transaction fees, as displayed on-screen.', + '!!!Please sign the voting registration transaction. This transaction links your wallet balance with your Fund4 voting registration, as a proof of your voting power. Funds will not leave your wallet, but registration requires paying transaction fees, as displayed on-screen.', description: 'Description on the voting registration "sign" step.', }, continueButtonLabel: { diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/ConfirmationDialog.js b/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/ConfirmationDialog.js index b184f3fe8a..07b4c0b5c0 100644 --- a/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/ConfirmationDialog.js +++ b/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/ConfirmationDialog.js @@ -9,14 +9,14 @@ import styles from './ConfirmationDialog.scss'; const messages = defineMessages({ headline: { id: 'voting.votingRegistration.dialog.confirmation.headline', - defaultMessage: '!!!Cancel Fund3 voting registration?', + defaultMessage: '!!!Cancel Fund4 voting registration?', description: 'Headline for the voting registration cancellation confirmation dialog.', }, content: { id: 'voting.votingRegistration.dialog.confirmation.content', defaultMessage: - '!!!Are you sure that you want to cancel Fund3 voting registration? The transaction fee you paid for the voting registration transaction will be lost and you will need to repeat the registration from the beginning.', + '!!!Are you sure that you want to cancel Fund4 voting registration? The transaction fee you paid for the voting registration transaction will be lost and you will need to repeat the registration from the beginning.', description: 'Content for the voting registration cancellation confirmation dialog.', }, diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/VotingRegistrationDialog.js b/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/VotingRegistrationDialog.js index e65bbf02c1..0e8f96543d 100644 --- a/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/VotingRegistrationDialog.js +++ b/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/VotingRegistrationDialog.js @@ -15,7 +15,7 @@ import type { DialogActions } from '../../../widgets/Dialog'; const messages = defineMessages({ dialogTitle: { id: 'voting.votingRegistration.dialog.dialogTitle', - defaultMessage: '!!!Register for Fund3 voting', + defaultMessage: '!!!Register for Fund4 voting', description: 'Tile "Register to vote" for voting registration', }, subtitle: { diff --git a/source/renderer/app/config/stakingRewards.dummy.json b/source/renderer/app/config/stakingRewards.dummy.json index 6aefa1f13d..e2b0ab5c7a 100644 --- a/source/renderer/app/config/stakingRewards.dummy.json +++ b/source/renderer/app/config/stakingRewards.dummy.json @@ -3,6 +3,7 @@ "date": "15.01.2019", "wallet": "Main Wallet", "reward": 0.2, + "rewardsAddress": "stake1u8v3renevakp4w3rgfd7629qz8ynzpd96chfh2eddytsvwg069gh4", "pool": { "id": "a476343dd1dd57d680656224886ad9c11b5c44f6331bf029e9008a702713eda4", "ranking": 1, @@ -20,6 +21,7 @@ "date": "15.01.2019", "wallet": "Spending Money", "reward": 1.003, + "rewardsAddress": "stake1u8v3renevakp4w3rgfd7629qz8ynzpd96chfh2eddytsvwg123kg9", "pool": { "id": "afd042672ed0212d074c5814771dc0f9d696b0fe3ca00c6bf613c1843f70419d", "ranking": 2, @@ -37,6 +39,7 @@ "date": "10.01.2019", "wallet": "Spending Money", "reward": 2, + "rewardsAddress": "stake1u8v3renevakp4w3rgfd7629qz8ynzpd96chfh2eddytsvwgpt83k9", "pool": { "id": "4484e2076b4604250f63032644acf37f0630e208b5d03378d546f747f9b7d3ff", "ranking": 3, @@ -54,6 +57,7 @@ "date": "10.01.2019", "wallet": "Saving", "reward": 0.9, + "rewardsAddress": "stake1u8v3renevakp4w3rgfd7629qz8ynzpd96chfh2eddytsvwgklo341", "pool": { "id": "b537af120298162372fc393d87e35803a8573a654786838e7a34b8d2354ec2fb", "ranking": 4, @@ -71,6 +75,7 @@ "date": "10.01.2019", "wallet": "Main Wallet", "reward": 0.2, + "rewardsAddress": "stake1u8v3renevakp4w3rgfd7629qz8ynzpd96chfh2eddytsvwgbhs6f8", "pool": { "id": "9438c572026bf8a7019ae1733e4c6a1b4208fc12291e4788a7db70891d6bdb97", "ranking": 5, @@ -88,6 +93,7 @@ "date": "05.01.2019", "wallet": "Main Wallet", "reward": 1.6, + "rewardsAddress": "stake1u8v3renevakp4w3rgfd7629qz8ynzpd96chfh2eddytsvwgkf873g", "pool": { "id": "9eebf901e2ab6ee31eddd54b9725df5b59f23a531f5cb6d547b69f3fa880df89", "ranking": 6, diff --git a/source/renderer/app/config/votingConfig.js b/source/renderer/app/config/votingConfig.js index 8295cc5cf5..f57c0ff37a 100644 --- a/source/renderer/app/config/votingConfig.js +++ b/source/renderer/app/config/votingConfig.js @@ -1,20 +1,20 @@ // @flow const { isDev } = global.environment; -export const VOTING_FUND_NUMBER = 3; -export const VOTING_REGISTRATION_MIN_WALLET_FUNDS = 2950; // 2950 ADA | unit: ADA +export const VOTING_FUND_NUMBER = 4; +export const VOTING_REGISTRATION_MIN_WALLET_FUNDS = 500; // 500 ADA | unit: ADA export const VOTING_REGISTRATION_FEE_CALCULATION_AMOUNT = 1; // 1 ADA | unit: ADA export const VOTING_REGISTRATION_PIN_CODE_LENGTH = 4; export const VOTING_REGISTRATION_MIN_TRANSACTION_CONFIRMATIONS = isDev ? 2 : 10; -export const VOTING_REGISTRATION_TRANSACTION_POLLING_INTERVAL = 5000; // 5 seconds | unit: milliseconds -export const VOTING_REGISTRATION_END_DATE = new Date('Mar 3, 2021, 19:00 UTC'); +export const VOTING_REGISTRATION_TRANSACTION_POLLING_INTERVAL = 1000; // 1 second | unit: milliseconds +export const VOTING_REGISTRATION_END_DATE = new Date('Apr 13, 2021, 19:00 UTC'); export const VOTING_REGISTRATION_END_CHECK_INTERVAL = 3000; // 3 seconds | unit: milliseconds export const VOTING_REGISTRATION_CAST_START_DATE = new Date( - 'Mar 5, 2021, 19:00 UTC' + 'Apr 15, 2021, 19:00 UTC' ); export const VOTING_REGISTRATION_CAST_END_DATE = new Date( - 'Mar 24, 2021, 19:00 UTC' + 'May 5, 2021, 19:00 UTC' ); export const VOTING_REGISTRATION_NEW_START_DATE = new Date( - 'Apr 7, 2021, 19:00 UTC' + 'May 18, 2021, 19:00 UTC' ); diff --git a/source/renderer/app/containers/staking/StakingRewardsPage.js b/source/renderer/app/containers/staking/StakingRewardsPage.js index d95a0f3488..9d2a7c0bd6 100644 --- a/source/renderer/app/containers/staking/StakingRewardsPage.js +++ b/source/renderer/app/containers/staking/StakingRewardsPage.js @@ -5,6 +5,8 @@ import { defineMessages, intlShape } from 'react-intl'; import StakingRewards from '../../components/staking/rewards/StakingRewards'; import StakingRewardsForIncentivizedTestnet from '../../components/staking/rewards/StakingRewardsForIncentivizedTestnet'; import type { InjectedProps } from '../../types/injectedPropsType'; +import { ellipsis } from '../../utils/strings'; +import { getNetworkExplorerUrl } from '../../utils/network'; const messages = defineMessages({ learnMoreLinkUrl: { @@ -32,6 +34,23 @@ export default class StakingRewardsPage extends Component { this.props.stores.app.openExternalLink(learnMoreLinkUrl); }; + onOpenExternalLink = (rewardsAddress: string) => { + const { app } = this.props.stores; + const { + environment: { network, rawNetwork }, + } = app; + const cardanoExplorerLink = `${getNetworkExplorerUrl( + network, + rawNetwork + )}/address/${rewardsAddress}`; + this.props.stores.app.openExternalLink(cardanoExplorerLink); + }; + + handleCopyAddress = (copiedAddress: string) => { + const address = ellipsis(copiedAddress, 15, 15); + this.props.actions.wallets.copyAddress.trigger({ address }); + }; + render() { const { staking: { rewards, rewardsForIncentivizedTestnet }, @@ -64,6 +83,8 @@ export default class StakingRewardsPage extends Component { isExporting={wallets.generatingRewardsCsvInProgress} onLearnMoreClick={this.handleLearnMoreClick} onExportCsv={requestCSVFile.trigger} + onCopyAddress={this.handleCopyAddress} + onOpenExternalLink={this.onOpenExternalLink} /> ); } diff --git a/source/renderer/app/i18n/locales/defaultMessages.json b/source/renderer/app/i18n/locales/defaultMessages.json index d4c06b2de7..25147eb790 100644 --- a/source/renderer/app/i18n/locales/defaultMessages.json +++ b/source/renderer/app/i18n/locales/defaultMessages.json @@ -5507,7 +5507,7 @@ } }, { - "defaultMessage": "!!!Reward", + "defaultMessage": "!!!Total rewards earned", "description": "Table header \"Reward\" label on staking rewards page", "end": { "column": 3, @@ -5558,13 +5558,13 @@ "description": "Title \"Earned delegation rewards\" label on the staking rewards page.", "end": { "column": 3, - "line": 31 + "line": 34 }, "file": "source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.js", "id": "staking.rewards.title", "start": { "column": 9, - "line": 26 + "line": 29 } }, { @@ -5572,13 +5572,13 @@ "description": "Filename prefix for the \"Export CSV\" on the staking rewards page.", "end": { "column": 3, - "line": 37 + "line": 40 }, "file": "source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.js", "id": "staking.rewards.csvFilenamePrefix", "start": { "column": 21, - "line": 32 + "line": 35 } }, { @@ -5586,13 +5586,13 @@ "description": "Label for the \"Export CSV\" button on the staking rewards page.", "end": { "column": 3, - "line": 43 + "line": 46 }, "file": "source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.js", "id": "staking.rewards.exportButtonLabel", "start": { "column": 21, - "line": 38 + "line": 41 } }, { @@ -5600,13 +5600,13 @@ "description": "\"No rewards\" rewards label on staking rewards page.", "end": { "column": 3, - "line": 48 + "line": 51 }, "file": "source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.js", "id": "staking.rewards.no.rewards", "start": { "column": 13, - "line": 44 + "line": 47 } }, { @@ -5614,55 +5614,55 @@ "description": "Table header \"Wallet\" label on staking rewards page", "end": { "column": 3, - "line": 53 + "line": 56 }, "file": "source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.js", "id": "staking.rewards.tableHeader.wallet", "start": { "column": 21, - "line": 49 + "line": 52 } }, { - "defaultMessage": "!!!Reward", + "defaultMessage": "!!!Total rewards earned (ADA)", "description": "Table header \"Reward\" label on staking rewards page", "end": { "column": 3, - "line": 58 + "line": 61 }, "file": "source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.js", "id": "staking.rewards.tableHeader.reward", "start": { "column": 21, - "line": 54 + "line": 57 } }, { - "defaultMessage": "!!!Date", - "description": "Table header \"Date\" label in exported csv file", + "defaultMessage": "!!!Rewards address", + "description": "Table header \"Rewards address\" label on staking rewards page", "end": { "column": 3, - "line": 63 + "line": 66 }, "file": "source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.js", - "id": "staking.rewards.tableHeader.date", + "id": "staking.rewards.tableHeader.rewardsAddress", "start": { - "column": 19, - "line": 59 + "column": 29, + "line": 62 } }, { - "defaultMessage": "!!!Learn more", - "description": "Label for \"Learn more\" button on staking rewards page", + "defaultMessage": "!!!Date", + "description": "Table header \"Date\" label in exported csv file", "end": { "column": 3, - "line": 68 + "line": 71 }, "file": "source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.js", - "id": "staking.rewards.learnMore.ButtonLabel", + "id": "staking.rewards.tableHeader.date", "start": { - "column": 24, - "line": 64 + "column": 19, + "line": 67 } }, { @@ -5670,13 +5670,13 @@ "description": "Rewards description text on staking rewards page", "end": { "column": 3, - "line": 74 + "line": 77 }, "file": "source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.js", "id": "staking.rewards.note", "start": { "column": 8, - "line": 69 + "line": 72 } }, { @@ -5684,13 +5684,27 @@ "description": "unknown stake pool label on staking rewards page.", "end": { "column": 3, - "line": 79 + "line": 82 }, "file": "source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.js", "id": "staking.delegationCenter.syncingTooltipLabel", "start": { "column": 23, - "line": 75 + "line": 78 + } + }, + { + "defaultMessage": "!!!View in explorer", + "description": "View in explorer button label on staking rewards page.", + "end": { + "column": 3, + "line": 87 + }, + "file": "source/renderer/app/components/staking/rewards/StakingRewardsForIncentivizedTestnet.js", + "id": "staking.rewards.actionViewInExplorer", + "start": { + "column": 24, + "line": 83 } } ], @@ -7956,7 +7970,7 @@ { "descriptors": [ { - "defaultMessage": "!!!Please enter a PIN for your Fund3 voting registration. The PIN you set here, and the QR code which you will get in the next step, will be required for you to vote using the Catalyst Voting app on your smartphone.", + "defaultMessage": "!!!Please enter a PIN for your Fund4 voting registration. The PIN you set here, and the QR code which you will get in the next step, will be required for you to vote using the Catalyst Voting app on your smartphone.", "description": "Description on the voting registration \"enter pin code\" step.", "end": { "column": 3, @@ -8115,7 +8129,7 @@ } }, { - "defaultMessage": "!!!I acknowledge that I must have the downloaded PDF with the QR code, to vote with Fund3.", + "defaultMessage": "!!!I acknowledge that I must have the downloaded PDF with the QR code, to vote with Fund4.", "description": "Second checkbox label on the voting registration \"qr code\" step.", "end": { "column": 3, @@ -8162,7 +8176,7 @@ { "descriptors": [ { - "defaultMessage": "!!!Please sign the voting registration transaction. This transaction links your wallet balance with your Fund3 voting registration, as a proof of your voting power. Funds will not leave your wallet, but registration requires paying transaction fees, as displayed on-screen.", + "defaultMessage": "!!!Please sign the voting registration transaction. This transaction links your wallet balance with your Fund4 voting registration, as a proof of your voting power. Funds will not leave your wallet, but registration requires paying transaction fees, as displayed on-screen.", "description": "Description on the voting registration \"sign\" step.", "end": { "column": 3, @@ -8279,7 +8293,7 @@ { "descriptors": [ { - "defaultMessage": "!!!Cancel Fund3 voting registration?", + "defaultMessage": "!!!Cancel Fund4 voting registration?", "description": "Headline for the voting registration cancellation confirmation dialog.", "end": { "column": 3, @@ -8293,7 +8307,7 @@ } }, { - "defaultMessage": "!!!Are you sure that you want to cancel Fund3 voting registration? The transaction fee you paid for the voting registration transaction will be lost and you will need to repeat the registration from the beginning.", + "defaultMessage": "!!!Are you sure that you want to cancel Fund4 voting registration? The transaction fee you paid for the voting registration transaction will be lost and you will need to repeat the registration from the beginning.", "description": "Content for the voting registration cancellation confirmation dialog.", "end": { "column": 3, @@ -8340,7 +8354,7 @@ { "descriptors": [ { - "defaultMessage": "!!!Register for Fund3 voting", + "defaultMessage": "!!!Register for Fund4 voting", "description": "Tile \"Register to vote\" for voting registration", "end": { "column": 3, @@ -8373,7 +8387,7 @@ { "descriptors": [ { - "defaultMessage": "!!!Register to vote on Fund3", + "defaultMessage": "!!!Register to vote on Fund4", "description": "Headline for voting registration steps", "end": { "column": 3, @@ -8387,7 +8401,7 @@ } }, { - "defaultMessage": "!!!Fund3 Voting Registration Ended", + "defaultMessage": "!!!Fund4 Voting Registration Ended", "description": "Headline for ended voting registration", "end": { "column": 3, @@ -8401,7 +8415,7 @@ } }, { - "defaultMessage": "!!!

Voting registration for Project Catalyst Fund3 has been completed. The voting snapshot took place on {snapshotDate}.

If you have registered to vote on Fund3, you can cast your vote using the Catalyst Voting mobile app between {castStartDate} and {castEndDate}.

Fund3 registration will start on {newRegistrationStartDate}.

", + "defaultMessage": "!!!

Voting registration for Project Catalyst Fund4 has been completed. The voting snapshot took place on {snapshotDate}.

If you have registered to vote on Fund4, you can cast your vote using the Catalyst Voting mobile app between {castStartDate} and {castEndDate}.

Fund4 registration will start on {newRegistrationStartDate}.

", "description": "Description for ended voting registration", "end": { "column": 3, @@ -8485,7 +8499,7 @@ } }, { - "defaultMessage": "!!!Fund3 FAQs", + "defaultMessage": "!!!Fund4 FAQs", "description": "Learn more link label for ended registration", "end": { "column": 3, @@ -8541,7 +8555,7 @@ } }, { - "defaultMessage": "!!!To register to vote for Catalyst Fund3 you first need to download the Catalyst Voting app on your Android or iOS smartphone.", + "defaultMessage": "!!!To register to vote for Catalyst Fund4 you first need to download the Catalyst Voting app on your Android or iOS smartphone.", "description": "bottomContentDescription for voting registration steps", "end": { "column": 3, @@ -8555,7 +8569,7 @@ } }, { - "defaultMessage": "!!!To cast your vote on Project Catalyst Fund3 proposals, you need to download the Catalyst Voting app on your Android or iOS smartphone.", + "defaultMessage": "!!!To cast your vote on Project Catalyst Fund4 proposals, you need to download the Catalyst Voting app on your Android or iOS smartphone.", "description": "bottomContentDescription for ended registration", "end": { "column": 3, @@ -8630,7 +8644,7 @@ { "descriptors": [ { - "defaultMessage": "!!!Voting registration for Fund3 is not available as you currently do not have any Shelley-compatible wallets.", + "defaultMessage": "!!!Voting registration for Fund4 is not available as you currently do not have any Shelley-compatible wallets.", "description": "\"No wallets\" headLine on the voting info page.", "end": { "column": 3, @@ -16762,13 +16776,13 @@ "description": "\"Learn more\" link URL in the staking rewards page", "end": { "column": 3, - "line": 14 + "line": 16 }, "file": "source/renderer/app/containers/staking/StakingRewardsPage.js", "id": "staking.rewards.learnMore.linkUrl", "start": { "column": 20, - "line": 10 + "line": 12 } } ], diff --git a/source/renderer/app/i18n/locales/en-US.json b/source/renderer/app/i18n/locales/en-US.json index 082c827b5f..9fc25bdda8 100755 --- a/source/renderer/app/i18n/locales/en-US.json +++ b/source/renderer/app/i18n/locales/en-US.json @@ -467,6 +467,7 @@ "staking.redeemItnRewards.step3.success.downloadPDFButtonLabel": "Download PDF certificate", "staking.redeemItnRewards.step3.success.openWalletButtonLabel": "Open the wallet", "staking.redeemItnRewards.step3.success.title": "Incentivized Testnet rewards redeemed!", + "staking.rewards.actionViewInExplorer": "View in explorer", "staking.rewards.csvFilenamePrefix": "Rewards", "staking.rewards.exportButtonLabel": "Export CSV", "staking.rewards.learnMore.ButtonLabel": "Learn more", @@ -475,7 +476,8 @@ "staking.rewards.note": "Rewards earned by delegating your stake are automatically collected into your reward account and added to your wallet balance.", "staking.rewards.tableHeader.date": "Date", "staking.rewards.tableHeader.pool": "Stake pool", - "staking.rewards.tableHeader.reward": "Reward", + "staking.rewards.tableHeader.reward": "Total rewards earned", + "staking.rewards.tableHeader.rewardsAddress": "Rewards address", "staking.rewards.tableHeader.wallet": "Wallet", "staking.rewards.title": "Earned delegation rewards", "staking.stakePools.delegatingListTitle": "Staking pools you are delegating to", @@ -613,22 +615,22 @@ "test.environment.testnetLabel": "Testnet", "voting.info.androidAppButtonUrl": "https://play.google.com/store/apps/details?id=io.iohk.vitvoting", "voting.info.appleAppButtonUrl": "https://apps.apple.com/in/app/catalyst-voting/id1517473397", - "voting.info.bottomContentDescription": "To register to vote for Catalyst Fund3 you first need to download the Catalyst Voting app on your Android or iOS smartphone.", - "voting.info.bottomContentDescriptionForEndedRegistration": "To cast your vote on Project Catalyst Fund3 proposals, you need to download the Catalyst Voting app on your Android or iOS smartphone.", + "voting.info.bottomContentDescription": "To register to vote for Catalyst Fund4 you first need to download the Catalyst Voting app on your Android or iOS smartphone.", + "voting.info.bottomContentDescriptionForEndedRegistration": "To cast your vote on Project Catalyst Fund4 proposals, you need to download the Catalyst Voting app on your Android or iOS smartphone.", "voting.info.bottomContentTitle": "Download the Catalyst Voting app on your smartphone", "voting.info.buttonLabel": "Register to vote", "voting.info.checkboxLabel": "I have installed the Catalyst Voting app", - "voting.info.descriptionForEndedRegistration": "

Voting registration for Project Catalyst Fund3 has been completed. The voting snapshot took place on {snapshotDate}.

If you have registered to vote on Fund3, you can cast your vote using the Catalyst Voting mobile app between {castStartDate} and {castEndDate}.

Fund4 registration will start on {newRegistrationStartDate}.

", - "voting.info.heading": "Register to vote on Fund3", - "voting.info.headingForEndedRegistration": "Fund3 Voting Registration Ended", + "voting.info.descriptionForEndedRegistration": "

Voting registration for Project Catalyst Fund4 has been completed. The voting snapshot took place on {snapshotDate}.

If you have registered to vote on Fund4, you can cast your vote using the Catalyst Voting mobile app between {castStartDate} and {castEndDate}.

Fund5 registration will start on {newRegistrationStartDate}.

", + "voting.info.heading": "Register to vote on Fund4", + "voting.info.headingForEndedRegistration": "Fund4 Voting Registration Ended", "voting.info.learnMoreLinkLabel": "Learn more", - "voting.info.learnMoreLinkLabelForEndedRegistration": "Fund3 FAQs", + "voting.info.learnMoreLinkLabelForEndedRegistration": "Fund4 FAQs", "voting.info.learnMoreLinkUrl": "https://cardano.ideascale.com/a/index", "voting.info.learnMoreLinkUrlForEndedRegistration": "https://iohk.zendesk.com/hc/en-us/articles/900004448046", "voting.info.learnMoreNextLabel": "for more information.", "voting.info.learnMorePreviousLabel": "Please read the", "voting.info.noWallets.createWalletButtonLabel": "Create wallet", - "voting.info.noWallets.headLine": "Voting registration for Fund3 is not available as you currently do not have any Shelley-compatible wallets.", + "voting.info.noWallets.headLine": "Voting registration for Fund4 is not available as you currently do not have any Shelley-compatible wallets.", "voting.info.noWallets.instructions": "Create a new wallet and transfer a minimum of {minVotingFunds} ADA (or restore an existing wallet with funds), then return here to register for voting.", "voting.info.stepTitle1": "Decide which innovative ideas for Cardano will receive funding.", "voting.info.stepTitle2": "$140.000 worth of ada rewards will be distributed between ada holders who register their vote.", @@ -652,12 +654,12 @@ "voting.votingRegistration.confirm.step.waitingForConfirmationsLabel": "Waiting for confirmation...", "voting.votingRegistration.dialog.confirmation.button.cancelButtonLabel": "Cancel registration", "voting.votingRegistration.dialog.confirmation.button.confirmButtonLabel": "Continue registration", - "voting.votingRegistration.dialog.confirmation.content": "Are you sure that you want to cancel Fund3 voting registration? The transaction fee you paid for the voting registration transaction will be lost and you will need to repeat the registration from the beginning.", - "voting.votingRegistration.dialog.confirmation.headline": "Cancel Fund3 voting registration?", - "voting.votingRegistration.dialog.dialogTitle": "Register for Fund3 voting", + "voting.votingRegistration.dialog.confirmation.content": "Are you sure that you want to cancel Fund4 voting registration? The transaction fee you paid for the voting registration transaction will be lost and you will need to repeat the registration from the beginning.", + "voting.votingRegistration.dialog.confirmation.headline": "Cancel Fund4 voting registration?", + "voting.votingRegistration.dialog.dialogTitle": "Register for Fund4 voting", "voting.votingRegistration.dialog.subtitle": "Step {step} of {stepCount}", "voting.votingRegistration.enterPinCode.step.continueButtonLabel": "Continue", - "voting.votingRegistration.enterPinCode.step.description": "Please enter a PIN for your Fund3 voting registration. The PIN you set here, and the QR code which you will get in the next step, will be required for you to vote using the Catalyst Voting app on your smartphone.", + "voting.votingRegistration.enterPinCode.step.description": "Please enter a PIN for your Fund4 voting registration. The PIN you set here, and the QR code which you will get in the next step, will be required for you to vote using the Catalyst Voting app on your smartphone.", "voting.votingRegistration.enterPinCode.step.enterPinCodeLabel": "Enter PIN", "voting.votingRegistration.enterPinCode.step.errors.invalidPinCode": "Invalid PIN", "voting.votingRegistration.enterPinCode.step.errors.invalidRepeatPinCode": "PIN doesn't match", @@ -669,7 +671,7 @@ "voting.votingRegistration.pdf.title": "Fund{fundNumber} Voting Registration", "voting.votingRegistration.pdf.walletNameLabel": "Wallet name", "voting.votingRegistration.qrCode.step.checkbox1Label": "I understand that I will not be able to retrieve this QR code again after closing this window.", - "voting.votingRegistration.qrCode.step.checkbox2Label": "I acknowledge that I must have the downloaded PDF with the QR code, to vote with Fund3.", + "voting.votingRegistration.qrCode.step.checkbox2Label": "I acknowledge that I must have the downloaded PDF with the QR code, to vote with Fund4.", "voting.votingRegistration.qrCode.step.closeButtonLabel": "Close", "voting.votingRegistration.qrCode.step.qrCodeDescription": "Open the Catalyst Voting app on your smartphone, scan the QR code, and use the PIN to complete the voting registration process.", "voting.votingRegistration.qrCode.step.qrCodeTitle": "Please complete your registration now.", @@ -677,7 +679,7 @@ "voting.votingRegistration.qrCode.step.saveAsPdfButtonLabel": "Save as PDF", "voting.votingRegistration.register.step.calculatingFees": "Calculating fees", "voting.votingRegistration.register.step.continueButtonLabel": "Submit registration transaction", - "voting.votingRegistration.register.step.description": "Please sign the voting registration transaction. This transaction links your wallet balance with your Fund3 voting registration, as a proof of your voting power. Funds will not leave your wallet, but registration requires paying transaction fees, as displayed on-screen.", + "voting.votingRegistration.register.step.description": "Please sign the voting registration transaction. This transaction links your wallet balance with your Fund4 voting registration, as a proof of your voting power. Funds will not leave your wallet, but registration requires paying transaction fees, as displayed on-screen.", "voting.votingRegistration.register.step.feesLabel": "Fees", "voting.votingRegistration.register.step.learnMoreLink": "Learn more", "voting.votingRegistration.register.step.learntMoreLinkUrl": "https://cardano.ideascale.com/a/index", diff --git a/source/renderer/app/i18n/locales/ja-JP.json b/source/renderer/app/i18n/locales/ja-JP.json index dd3aa9c112..e3b4b88949 100755 --- a/source/renderer/app/i18n/locales/ja-JP.json +++ b/source/renderer/app/i18n/locales/ja-JP.json @@ -467,6 +467,7 @@ "staking.redeemItnRewards.step3.success.downloadPDFButtonLabel": "PDF証明書をダウンロードする", "staking.redeemItnRewards.step3.success.openWalletButtonLabel": "ウォレットを開く", "staking.redeemItnRewards.step3.success.title": "インセンティブ付きテストネットの報酬は還元されました", + "staking.rewards.actionViewInExplorer": "エクスプローラーで表示", "staking.rewards.csvFilenamePrefix": "報酬", "staking.rewards.exportButtonLabel": "CSV形式でエキスポートする", "staking.rewards.learnMore.ButtonLabel": "もっと知る", @@ -475,7 +476,8 @@ "staking.rewards.note": "ステークを委任することにより得た報酬は自動的に報酬アカウントに振り込まれ、ウォレット残高に追加されます。", "staking.rewards.tableHeader.date": "日付", "staking.rewards.tableHeader.pool": "ステークプール", - "staking.rewards.tableHeader.reward": "報酬", + "staking.rewards.tableHeader.reward": "獲得した報酬の合計", + "staking.rewards.tableHeader.rewardsAddress": "報酬アドレス", "staking.rewards.tableHeader.wallet": "ウォレット", "staking.rewards.title": "獲得した委任報酬", "staking.stakePools.delegatingListTitle": "現在委任しているステークプール", @@ -613,22 +615,22 @@ "test.environment.testnetLabel": "テストネット", "voting.info.androidAppButtonUrl": "https://play.google.com/store/apps/details?id=io.iohk.vitvoting", "voting.info.appleAppButtonUrl": "https://apps.apple.com/in/app/catalyst-voting/id1517473397", - "voting.info.bottomContentDescription": "Catalyst Fund3に有権者登録を行うためには、まずAndroidまたはiOSのスマートフォンにCatalyst Votingアプリをダウンロードする必要があります。", - "voting.info.bottomContentDescriptionForEndedRegistration": "Project Catalyst Fund3の提案に投票するには、AndroidまたはiOSのスマートフォンにCatalyst Votingアプリをダウンロードする必要があります。", + "voting.info.bottomContentDescription": "Catalyst Fund4に有権者登録を行うためには、まずAndroidまたはiOSのスマートフォンにCatalyst Votingアプリをダウンロードする必要があります。", + "voting.info.bottomContentDescriptionForEndedRegistration": "Project Catalyst Fund4の提案に投票するには、AndroidまたはiOSのスマートフォンにCatalyst Votingアプリをダウンロードする必要があります。", "voting.info.bottomContentTitle": "スマートフォンにCatalyst Votingアプリをダウンロードします", "voting.info.buttonLabel": "有権者登録をする", "voting.info.checkboxLabel": "Catalyst Votingアプリをインストールしました", - "voting.info.descriptionForEndedRegistration": "

Project Catalyst Fund3の有権者登録は完了しました。投票スナップショットは日本時間{snapshotDate}に実施されます。

Fund3への有権者登録を済ませている場合は、日本時間{castStartDate}から{castEndDate}の間に、携帯デバイスのCatalyst Votingアプリを使用して投票することができます。

Fund4の登録は日本時間{newRegistrationStartDate}に開始されます。

", - "voting.info.heading": "Fund3の有権者登録をする", - "voting.info.headingForEndedRegistration": "Fund3の有権者登録は終了しました", + "voting.info.descriptionForEndedRegistration": "

Project Catalyst Fund4の有権者登録は完了しました。投票スナップショットは日本時間{snapshotDate}に実施されます。

Fund4への有権者登録を済ませている場合は、日本時間{castStartDate}から{castEndDate}の間に、携帯デバイスのCatalyst Votingアプリを使用して投票することができます。

Fund5の登録は日本時間{newRegistrationStartDate}に開始されます。

", + "voting.info.heading": "Fund4の有権者登録をする", + "voting.info.headingForEndedRegistration": "Fund4の有権者登録は終了しました", "voting.info.learnMoreLinkLabel": "もっと知る", - "voting.info.learnMoreLinkLabelForEndedRegistration": "Fund3についてよくある質問", + "voting.info.learnMoreLinkLabelForEndedRegistration": "Fund4についてよくある質問", "voting.info.learnMoreLinkUrl": "https://cardano.ideascale.com/a/index", "voting.info.learnMoreLinkUrlForEndedRegistration": "https://iohk.zendesk.com/hc/ja/articles/900004448046", "voting.info.learnMoreNextLabel": "をご覧ください。", "voting.info.learnMorePreviousLabel": "詳細は", "voting.info.noWallets.createWalletButtonLabel": "ウォレットを作成する", - "voting.info.noWallets.headLine": "現在Shelley対応のウォレットがないため、Fund3の有権者登録はできません。", + "voting.info.noWallets.headLine": "現在Shelley対応のウォレットがないため、Fund4の有権者登録はできません。", "voting.info.noWallets.instructions": "ウォレットを作成し、そこに{minVotingFunds} ADA以上を移してから(または既存の資金入りウォレットを復元してから)、改めてここで有権者登録を行ってください。", "voting.info.stepTitle1": "Cardanoの革新的なアイデアの中で、どのアイデアに資金を提供するか決定します。", "voting.info.stepTitle2": "140,000米ドル相当のADA報酬が、有権者登録を行ったADA保有者に分配されます。", @@ -652,12 +654,12 @@ "voting.votingRegistration.confirm.step.waitingForConfirmationsLabel": "確認を待っています...", "voting.votingRegistration.dialog.confirmation.button.cancelButtonLabel": "登録をキャンセルする", "voting.votingRegistration.dialog.confirmation.button.confirmButtonLabel": "登録を続ける", - "voting.votingRegistration.dialog.confirmation.content": "Fund3の有権者登録をキャンセルしてもよろしいですか。有権者登録トランザクション用に支払ったトランザクション手数料は失われ、登録手続きは最初からやり直す必要があります。", - "voting.votingRegistration.dialog.confirmation.headline": "Fund3の有権者登録をキャンセルしますか", - "voting.votingRegistration.dialog.dialogTitle": "Fund3の有権者登録をする", + "voting.votingRegistration.dialog.confirmation.content": "Fund4の有権者登録をキャンセルしてもよろしいですか。有権者登録トランザクション用に支払ったトランザクション手数料は失われ、登録手続きは最初からやり直す必要があります。", + "voting.votingRegistration.dialog.confirmation.headline": "Fund4の有権者登録をキャンセルしますか", + "voting.votingRegistration.dialog.dialogTitle": "Fund4の有権者登録をする", "voting.votingRegistration.dialog.subtitle": "ステップ{step}/{stepCount}", "voting.votingRegistration.enterPinCode.step.continueButtonLabel": "続ける", - "voting.votingRegistration.enterPinCode.step.description": "Fund3有権者登録のPINコードを入力してください。ここで設定したPINコードと、次のステップで表示されるQRコードは、スマートフォンでCatalyst Votingアプリを使用して投票するときに必要となります。", + "voting.votingRegistration.enterPinCode.step.description": "Fund4有権者登録のPINコードを入力してください。ここで設定したPINコードと、次のステップで表示されるQRコードは、スマートフォンでCatalyst Votingアプリを使用して投票するときに必要となります。", "voting.votingRegistration.enterPinCode.step.enterPinCodeLabel": "PINコードを入力してください", "voting.votingRegistration.enterPinCode.step.errors.invalidPinCode": "!!!Invalid PIN", "voting.votingRegistration.enterPinCode.step.errors.invalidRepeatPinCode": "PINコードが一致しません", @@ -669,7 +671,7 @@ "voting.votingRegistration.pdf.title": "FUND{fundNumber}有権者登録", "voting.votingRegistration.pdf.walletNameLabel": "ウォレット名", "voting.votingRegistration.qrCode.step.checkbox1Label": "ウィンドウを閉じるとQRコードを表示できなくなることを理解しました。", - "voting.votingRegistration.qrCode.step.checkbox2Label": "Fund3に投票するためには、QRコードをPDFでダウンロードする必要があることを認識しています。", + "voting.votingRegistration.qrCode.step.checkbox2Label": "Fund4に投票するためには、QRコードをPDFでダウンロードする必要があることを認識しています。", "voting.votingRegistration.qrCode.step.closeButtonLabel": "閉じる", "voting.votingRegistration.qrCode.step.qrCodeDescription": "スマートフォンでCatalyst Votingアプリを開き、QRコードをスキャンし、PINコードを使用して有権者登録手続きを完了してください。", "voting.votingRegistration.qrCode.step.qrCodeTitle": "登録を完了してください", @@ -677,7 +679,7 @@ "voting.votingRegistration.qrCode.step.saveAsPdfButtonLabel": "PDFで保存する", "voting.votingRegistration.register.step.calculatingFees": "手数料を計算しています", "voting.votingRegistration.register.step.continueButtonLabel": "登録トランザクションを送信する", - "voting.votingRegistration.register.step.description": "有権者登録トランザクションに署名してください。このトランザクションは、ウォレット残高とFund3有権者登録を結びつけ、議決権を証明するものとなります。資金はウォレットに残されますが、登録には画面に表示されているトランザクション手数料が必要となります。", + "voting.votingRegistration.register.step.description": "有権者登録トランザクションに署名してください。このトランザクションは、ウォレット残高とFund4有権者登録を結びつけ、議決権を証明するものとなります。資金はウォレットに残されますが、登録には画面に表示されているトランザクション手数料が必要となります。", "voting.votingRegistration.register.step.feesLabel": "手数料", "voting.votingRegistration.register.step.learnMoreLink": "もっと知る", "voting.votingRegistration.register.step.learntMoreLinkUrl": "https://cardano.ideascale.com/a/index", diff --git a/source/renderer/app/stores/AddressesStore.js b/source/renderer/app/stores/AddressesStore.js index 661b3c340c..dec8a45657 100644 --- a/source/renderer/app/stores/AddressesStore.js +++ b/source/renderer/app/stores/AddressesStore.js @@ -1,11 +1,12 @@ // @flow -import { find, last, filter, findIndex } from 'lodash'; +import { has, find, last, filter, findIndex } from 'lodash'; import { observable, computed, action, runInAction } from 'mobx'; import Store from './lib/Store'; import CachedRequest from './lib/LocalizedCachedRequest'; import WalletAddress from '../domains/WalletAddress'; import Request from './lib/LocalizedRequest'; import LocalizableError from '../i18n/LocalizableError'; +import { getStakeAddressFromStakeKey } from '../utils/crypto'; import type { Address, InspectAddressResponse } from '../api/addresses/types'; export default class AddressesStore extends Store { @@ -15,12 +16,17 @@ export default class AddressesStore extends Store { isLegacy: boolean, allRequest: CachedRequest>, }> = []; + @observable stakeAddresses: { + [walletId: string]: string, + } = {}; @observable error: ?LocalizableError = null; // REQUESTS + @observable createByronWalletAddressRequest: Request
= new Request( this.api.ada.createAddress ); + @observable inspectAddressRequest: Request = new Request( this.api.ada.inspectAddress @@ -112,6 +118,34 @@ export default class AddressesStore extends Store { return addresses ? addresses.length : 0; } + @computed get stakeAddress(): string { + const wallet = this.stores.wallets.active; + if (!wallet) return ''; + return this.stakeAddresses[wallet.id] || ''; + } + + @action _getStakeAddress = async (walletId: string, isLegacy: boolean) => { + const hasStakeAddress = has(this.stakeAddresses, walletId); + if (!hasStakeAddress) { + if (isLegacy) { + this.stakeAddresses[walletId] = ''; + } else { + const getWalletStakeKeyRequest = new Request( + this.api.ada.getWalletPublicKey + ); + const stakeKeyBech32 = await getWalletStakeKeyRequest.execute({ + walletId, + role: 'mutable_account', + index: '0', + }); + const stakeAddress = getStakeAddressFromStakeKey(stakeKeyBech32); + runInAction('set stake address', () => { + this.stakeAddresses[walletId] = stakeAddress; + }); + } + } + }; + @action _refreshAddresses = () => { if (this.stores.networkStatus.isConnected) { const { all } = this.stores.wallets; @@ -120,6 +154,7 @@ export default class AddressesStore extends Store { const allRequest = this._getAddressesAllRequest(walletId); allRequest.invalidate({ immediately: false }); allRequest.execute({ walletId, isLegacy }); + this._getStakeAddress(walletId, isLegacy); } } }; diff --git a/source/renderer/app/stores/StakingStore.js b/source/renderer/app/stores/StakingStore.js index 7cd0b934a7..5a035db817 100644 --- a/source/renderer/app/stores/StakingStore.js +++ b/source/renderer/app/stores/StakingStore.js @@ -851,10 +851,12 @@ export default class StakingStore extends Store { reward: rewards, syncState, } = inputWallet; + const { stakeAddresses } = this.stores.addresses; const { withdrawals } = this.stores.transactions; const reward = rewards.plus(withdrawals[walletId]); + const rewardsAddress = stakeAddresses[walletId]; const syncingProgress = get(syncState, 'progress.quantity', ''); - return { wallet, reward, isRestoring, syncingProgress }; + return { wallet, reward, isRestoring, syncingProgress, rewardsAddress }; }; getStakePoolById = (stakePoolId: string) => diff --git a/source/renderer/app/stores/VotingStore.js b/source/renderer/app/stores/VotingStore.js index 120b90e4f4..c6ec47b9f4 100644 --- a/source/renderer/app/stores/VotingStore.js +++ b/source/renderer/app/stores/VotingStore.js @@ -192,12 +192,12 @@ export default class VotingStore extends Store { this.votingRegistrationKey.public().bytes() ); - let stakeKey = await this.getWalletPublicKeyRequest.execute({ + const stakeKeyBech32 = await this.getWalletPublicKeyRequest.execute({ walletId, role: 'mutable_account', index: '0', }); - stakeKey = await this._getHexFromBech32(stakeKey); + const stakeKey = await this._getHexFromBech32(stakeKeyBech32); const signature = await this.signMetadataRequest.execute({ addressHex, diff --git a/source/renderer/app/stores/WalletsStore.js b/source/renderer/app/stores/WalletsStore.js index 2688166d42..c716682835 100644 --- a/source/renderer/app/stores/WalletsStore.js +++ b/source/renderer/app/stores/WalletsStore.js @@ -225,10 +225,7 @@ export default class WalletsStore extends Store { setup() { setInterval(this._pollRefresh, this.WALLET_REFRESH_INTERVAL); - this.registerReactions([ - this._updateActiveWalletOnRouteChanges, - // this._updateWalletArraysOnRequestUpdate, - ]); + this.registerReactions([this._updateActiveWalletOnRouteChanges]); const { router, diff --git a/source/renderer/app/utils/crypto.js b/source/renderer/app/utils/crypto.js index 41551d1f01..51d865a39b 100644 --- a/source/renderer/app/utils/crypto.js +++ b/source/renderer/app/utils/crypto.js @@ -1,6 +1,8 @@ // @flow import * as bip39 from 'bip39'; import { Buffer } from 'safe-buffer'; +import { blake2b } from 'blakejs'; +import { bech32 } from 'bech32'; import crypto from 'crypto'; import { chunk } from 'lodash'; import { pbkdf2Sync as pbkdf2 } from 'pbkdf2'; @@ -93,3 +95,25 @@ export const mnemonicToSeedHex = (mnemonic: string, password: ?string) => { const saltBuffer = Buffer.from(salt, 'utf8'); return pbkdf2(mnemonicBuffer, saltBuffer, 2048, 32, 'sha512').toString('hex'); }; + +export const blake2b224 = (data: Buffer): Buffer => blake2b(data, null, 28); + +export const decodeBech32 = (data: string): Buffer => + Buffer.from(bech32.fromWords(bech32.decode(data).words)); + +export const encodeBech32 = (prefix: string, data: Buffer): string => + bech32.encode(prefix, bech32.toWords(data)); + +export const getStakeAddressFromStakeKey = (stakeKey: string): string => { + const { isMainnet, isStaging, isSelfnode } = global.environment; + const isMainnetLikeNetwork = isMainnet || isStaging || isSelfnode; + const stakeKeyHex: Buffer = decodeBech32(stakeKey); + const stakeKeyHash: Buffer = blake2b224(stakeKeyHex); + const networkPrefix = Buffer.from(isMainnetLikeNetwork ? 'e1' : 'e0', 'hex'); + const addressPrefix = isMainnetLikeNetwork ? 'stake' : 'stake_test'; + const stakeAddress = encodeBech32( + addressPrefix, + Buffer.from([...networkPrefix, ...stakeKeyHash]) + ); + return stakeAddress; +}; diff --git a/storybook/stories/staking/RewardsForIncentivizedTestnet.stories.js b/storybook/stories/staking/RewardsForIncentivizedTestnet.stories.js index 87e96d9e4a..6a05976c9c 100644 --- a/storybook/stories/staking/RewardsForIncentivizedTestnet.stories.js +++ b/storybook/stories/staking/RewardsForIncentivizedTestnet.stories.js @@ -24,5 +24,7 @@ export const StakingRewardsForIncentivizedTestnetStory = () => ( isExporting={false} onLearnMoreClick={action('onLearnMoreClick')} onExportCsv={action('onExportCsv')} + onCopyAddress={action('onCopyAddress')} + onOpenExternalLink={action('onOpenExternalLink')} /> ); diff --git a/tls/client/ca.crt b/tls/client/ca.crt index aa2d012a0c..7a4e60b4c5 100644 --- a/tls/client/ca.crt +++ b/tls/client/ca.crt @@ -1,20 +1,20 @@ -----BEGIN CERTIFICATE----- MIIDNjCCAh6gAwIBAgIBATANBgkqhkiG9w0BAQsFADA6MREwDwYDVQQKDAhEYWVk YWx1czElMCMGA1UEAwwcRGFlZGFsdXMgU2VsZi1TaWduZWQgUm9vdCBDQTAeFw0y -MDAzMzAwOTQwMzNaFw0zMDAzMjgwOTQxMzNaMDoxETAPBgNVBAoMCERhZWRhbHVz +MTAzMzAxNzIwMTBaFw0zMTAzMjgxNzIxMTBaMDoxETAPBgNVBAoMCERhZWRhbHVz MSUwIwYDVQQDDBxEYWVkYWx1cyBTZWxmLVNpZ25lZCBSb290IENBMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr4Pmvd5Dkh6MIn5o86yky9WCNj0QrYUg -IteAXlqA23YOVMnHrWMykP+zpviwlFMaOSsjgaBTD8Dped2Bsv5Pd2wHA6Krh6nY -bW8R24H/B3O1wYjIvnc8TPdG6inwYF2SrWYgPZsuGIUTZPxL4e0ERvz8YhDU+4lB -vFUDt4BozYeGknTdm7gKaL4ldVDDrKZF6XkIcyoiZ0NrTJjNY3y1LL6xiGJ+I1Rp -E4pfR45UCS3zKb556KgTO82/DYcARFlwoEoeiWbt8oIly0hHNwYd/I3Sl/wfn4jd -oQxJrvg7NwaLhxveQ5j+DNE3pI1VGMa2xFNbQLYarwIGiKWcVt3OVQIDAQABo0cw +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuIGJJKwYvhby2ib829IE8UU8irHEZ082 +J8XLgADEiG6UCs+aqn9w++27nlzMRMofF49rjfSjDjhzpML8e5Vug9djEz9s2B0u +uPtAzBBJyrA56IIDUO1r/X7AcQ+h86WXWzkmGjvRQLzN0L0rPU26S7RbasXc3FP0 +wCer3Uaw/3npkfZopNXzq16/9CuZB95gka4g/LJVSqvrrZFx4dcQ8mpHK9S/Uq2n +j1tRW8xzgFUg5NWdqhyRxvX4jtPUWMXJfn5ltOSk29Xj0Cra25ZVORtaCsqTargn +pinWLzlejHeGZR4NVPY+213ucyt6EWMf3HnlPxqES83m9rf/oPYHbwIDAQABo0cw RTAPBgNVHQ8BAf8EBQMDBwYAMBIGA1UdEwEB/wQIMAYBAf8CAQAwDQYDVR0OBAYE -BHBw0/IwDwYDVR0jBAgwBoAEcHDT8jANBgkqhkiG9w0BAQsFAAOCAQEAT+vCFFbC -eT3jTrxXaXrAmarEuSguds25+jT6UKcmlqS0Q2gnNwndh/OLVLKOMKY32fl5kGj/ -8MAh7BFzTjbZKkPARQ5IDPWeWQXizUfNWMelzNcSmSQGiVLciNKW/NVMTG5QukPF -zpD2O+aqW1s4p8c34RL4HmTrHY2rctjSSf5TyWorgE5lXnALDIhKBuc0DGU+nVya -zjpugWlwBHWYLRXJZROFqM/+tuBsrxaDjcNJJz77HR3odqgp2H7R3vL/4TW2F03G -HNgrYpj0lUsELCihI4A+o4CL+IsDk2WW2ORuNx8niOeSkmsxKsehHuTgIGU6bB70 -Vn2oS97NcVBsFQ== +BHBw0/IwDwYDVR0jBAgwBoAEcHDT8jANBgkqhkiG9w0BAQsFAAOCAQEAUlYcsa/F +xak3RO4YH4mdJOPDt7I16SoqH9EP8BTlOTgFU8Ql5MpG7VE+XWVc1D3NSp0y9iQk +bJH9MGaPLFbkJfwGq+pfpaS/0xI+KwRkG5rQVbpP+jOqGaADOVjuC2J3dNFg71ww +eozmKRjKU16DsFnQJ+N68kWoJ3t776/NzS7p7Oa7k4oijPhGtEAkrKOBzHXLILkZ +kUXYszN4pQGPPuWG2EZpTyAnvrDOwST1VrpGDFMdUy9ML891sMtuf5YM8dSF/WOS +pTmpP4xcb5HciFa+5Hv7242ATVrAirUB6pGA0A9ruxRQPWXwISBRtOIiqqOq2xIi +FX/3TGmzZn7kqw== -----END CERTIFICATE----- \ No newline at end of file diff --git a/tls/client/client.crt b/tls/client/client.crt index 79ee0b69cb..aa47de07b7 100644 --- a/tls/client/client.crt +++ b/tls/client/client.crt @@ -1,20 +1,20 @@ -----BEGIN CERTIFICATE----- MIIDOjCCAiKgAwIBAgIBAzANBgkqhkiG9w0BAQsFADA6MREwDwYDVQQKDAhEYWVk YWx1czElMCMGA1UEAwwcRGFlZGFsdXMgU2VsZi1TaWduZWQgUm9vdCBDQTAeFw0y -MDAzMzAwOTQwMzNaFw0yMTAzMzAwOTQxMzNaMC8xETAPBgNVBAoMCERhZWRhbHVz +MTAzMzAxNzIwMTFaFw0yMjAzMzAxNzIxMTFaMC8xETAPBgNVBAoMCERhZWRhbHVz MRowGAYDVQQDDBFEYWVkYWx1cyBGcm9udGVuZDCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAL4jYOyoxCBPcF0On5WNDsuU/fJWDZWEWoKOwRU/uW2AtMJf -hplsNO8vy4uRLQCSahAzN8Gz9crenUcA+QIJr9xq4nAh9TsjjJnGmpih/hWd5mD+ -+2E4v3w5loTceaLNwB0yCNufRQVL32SxlOEi0lm+5Rg3TlfdN/6V2R7TwMsnPmIk -AAYvx1Q7vi6IO54Dfn7wRraJC20M7HAnMqtZsoPB8ANd8TbKPPqobOw1AhONaQrI -OrjXS0V8fxuAl81mq6Q9EQu4TkZI0LYIRKe5SBMNPilfFnQKoS0eQihfAdfGc7Rn -le0NentS11WFjAap7CPqgJuE5GbuUG4jdwSFqP8CAwEAAaNWMFQwDwYDVR0PAQH/ +ggEPADCCAQoCggEBALMc2GWmO1fBqSm+1GR/f93fOusqn1XmhE5kJG48Y0lt1MWS +zpQ2hoynjpuwZ3UACpr6P/asxxboH7MWthDhygKw+dNdtg6R5DMapc8Z6oUQqQtq +UGLL9G8ds5x/jkV3C1VvklX2uy9e2qCKwnwvk1by/xich02G94pdFmsKZ5E1fqcb +x/oF+1dOa67wGFhILYVR0Ai8xdcwb/Yqpk+Zefw3gyQw+qvz0pZlIu0L62eP/5Xx +BtCcdSBK/6/sUIVEtZ9I9WTJuO1JrIgBDL7ZV1cA42qQ8GM+22xoYl+6AkOKo31r +9IAyE/ZhIHDkaRDsllUgDhStQrwWzE8Ef55QsTMCAwEAAaNWMFQwDwYDVR0PAQH/ BAUDAwegADATBgNVHSUEDDAKBggrBgEFBQcDAjAMBgNVHRMEBTADAQEAMA0GA1Ud -DgQGBATUMSd+MA8GA1UdIwQIMAaABHBw0/IwDQYJKoZIhvcNAQELBQADggEBAH5Z -svXrlXqZ910oV/V8xyjwlzXwsxW3HYIcPCCII3ezPw2PCvzPB6xATcdrE6/A6zfi -Spe9sW1qdzBhFJXfOVU0cRu4Y72aoX/EmD04t/KAIQfKyq6izC0eq5pwjpkE9RIC -ENJvXQt79nN1jRfSlVYQuO5ph3dvUVUoCLl5+R4+A2yQCuStQT3s24z9MgKEN/wE -p/49QmnHckhypnTvnpF/kfaGuWd8NDEyThtz0KS0KL5AShfjvkZ8EWZFkkLzWr0v -vth6ikYaugJUs+p+/Gt0W43kkR8k9I9lM/GH4ZbOzNnDL1iE40bRIi1PUs2+KUts -v+4H52EZFEWC7/daPKE= +DgQGBATUMSd+MA8GA1UdIwQIMAaABHBw0/IwDQYJKoZIhvcNAQELBQADggEBADN0 +viDwiJiPe5e0nGio2Ac9fXhR4Y5LfIPpTM6o8QYdoshC2BQ2mm8anIGxNd5jS2x7 +dZsBC3Dyhxud5QGzgccsyKGPnUxT3pRrBMIQGu2VjUAvnnfEQc1WhrRCRYEHyuHa +yFobD+78/ywB/yFr1tnjFKcLVi26WyiP1dSGUfNb5/6nLPOQIiKH1j7AcAjSUu2g +u5CVEb6CKo6ePqzyi29Np+SwECQvnw0jR27wdMYIKLpfOw2TccD7wCqaU4g8T0G0 +Y2kf+74kirfpAsiH8oy84uLJQtcmA4xeRM63rz1ieGGQppkzvYCr2ZGAIGkGPxva +wO77oyftSCMLkqP13vw= -----END CERTIFICATE----- \ No newline at end of file diff --git a/tls/client/client.key b/tls/client/client.key index 5293f853d3..0ccd0b70e0 100644 --- a/tls/client/client.key +++ b/tls/client/client.key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/tls/client/client.pem b/tls/client/client.pem index 2f461f967f..17c1f9c4a8 100644 --- a/tls/client/client.pem +++ b/tls/client/client.pem @@ -1,47 +1,47 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIDOjCCAiKgAwIBAgIBAzANBgkqhkiG9w0BAQsFADA6MREwDwYDVQQKDAhEYWVk YWx1czElMCMGA1UEAwwcRGFlZGFsdXMgU2VsZi1TaWduZWQgUm9vdCBDQTAeFw0y -MDAzMzAwOTQwMzNaFw0yMTAzMzAwOTQxMzNaMC8xETAPBgNVBAoMCERhZWRhbHVz +MTAzMzAxNzIwMTFaFw0yMjAzMzAxNzIxMTFaMC8xETAPBgNVBAoMCERhZWRhbHVz MRowGAYDVQQDDBFEYWVkYWx1cyBGcm9udGVuZDCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAL4jYOyoxCBPcF0On5WNDsuU/fJWDZWEWoKOwRU/uW2AtMJf -hplsNO8vy4uRLQCSahAzN8Gz9crenUcA+QIJr9xq4nAh9TsjjJnGmpih/hWd5mD+ -+2E4v3w5loTceaLNwB0yCNufRQVL32SxlOEi0lm+5Rg3TlfdN/6V2R7TwMsnPmIk -AAYvx1Q7vi6IO54Dfn7wRraJC20M7HAnMqtZsoPB8ANd8TbKPPqobOw1AhONaQrI -OrjXS0V8fxuAl81mq6Q9EQu4TkZI0LYIRKe5SBMNPilfFnQKoS0eQihfAdfGc7Rn -le0NentS11WFjAap7CPqgJuE5GbuUG4jdwSFqP8CAwEAAaNWMFQwDwYDVR0PAQH/ +ggEPADCCAQoCggEBALMc2GWmO1fBqSm+1GR/f93fOusqn1XmhE5kJG48Y0lt1MWS +zpQ2hoynjpuwZ3UACpr6P/asxxboH7MWthDhygKw+dNdtg6R5DMapc8Z6oUQqQtq +UGLL9G8ds5x/jkV3C1VvklX2uy9e2qCKwnwvk1by/xich02G94pdFmsKZ5E1fqcb +x/oF+1dOa67wGFhILYVR0Ai8xdcwb/Yqpk+Zefw3gyQw+qvz0pZlIu0L62eP/5Xx +BtCcdSBK/6/sUIVEtZ9I9WTJuO1JrIgBDL7ZV1cA42qQ8GM+22xoYl+6AkOKo31r +9IAyE/ZhIHDkaRDsllUgDhStQrwWzE8Ef55QsTMCAwEAAaNWMFQwDwYDVR0PAQH/ BAUDAwegADATBgNVHSUEDDAKBggrBgEFBQcDAjAMBgNVHRMEBTADAQEAMA0GA1Ud -DgQGBATUMSd+MA8GA1UdIwQIMAaABHBw0/IwDQYJKoZIhvcNAQELBQADggEBAH5Z -svXrlXqZ910oV/V8xyjwlzXwsxW3HYIcPCCII3ezPw2PCvzPB6xATcdrE6/A6zfi -Spe9sW1qdzBhFJXfOVU0cRu4Y72aoX/EmD04t/KAIQfKyq6izC0eq5pwjpkE9RIC -ENJvXQt79nN1jRfSlVYQuO5ph3dvUVUoCLl5+R4+A2yQCuStQT3s24z9MgKEN/wE -p/49QmnHckhypnTvnpF/kfaGuWd8NDEyThtz0KS0KL5AShfjvkZ8EWZFkkLzWr0v -vth6ikYaugJUs+p+/Gt0W43kkR8k9I9lM/GH4ZbOzNnDL1iE40bRIi1PUs2+KUts -v+4H52EZFEWC7/daPKE= +DgQGBATUMSd+MA8GA1UdIwQIMAaABHBw0/IwDQYJKoZIhvcNAQELBQADggEBADN0 +viDwiJiPe5e0nGio2Ac9fXhR4Y5LfIPpTM6o8QYdoshC2BQ2mm8anIGxNd5jS2x7 +dZsBC3Dyhxud5QGzgccsyKGPnUxT3pRrBMIQGu2VjUAvnnfEQc1WhrRCRYEHyuHa +yFobD+78/ywB/yFr1tnjFKcLVi26WyiP1dSGUfNb5/6nLPOQIiKH1j7AcAjSUu2g +u5CVEb6CKo6ePqzyi29Np+SwECQvnw0jR27wdMYIKLpfOw2TccD7wCqaU4g8T0G0 +Y2kf+74kirfpAsiH8oy84uLJQtcmA4xeRM63rz1ieGGQppkzvYCr2ZGAIGkGPxva +wO77oyftSCMLkqP13vw= -----END CERTIFICATE----- \ No newline at end of file diff --git a/tls/server/ca.crt b/tls/server/ca.crt index aa2d012a0c..7a4e60b4c5 100644 --- a/tls/server/ca.crt +++ b/tls/server/ca.crt @@ -1,20 +1,20 @@ -----BEGIN CERTIFICATE----- MIIDNjCCAh6gAwIBAgIBATANBgkqhkiG9w0BAQsFADA6MREwDwYDVQQKDAhEYWVk YWx1czElMCMGA1UEAwwcRGFlZGFsdXMgU2VsZi1TaWduZWQgUm9vdCBDQTAeFw0y -MDAzMzAwOTQwMzNaFw0zMDAzMjgwOTQxMzNaMDoxETAPBgNVBAoMCERhZWRhbHVz +MTAzMzAxNzIwMTBaFw0zMTAzMjgxNzIxMTBaMDoxETAPBgNVBAoMCERhZWRhbHVz MSUwIwYDVQQDDBxEYWVkYWx1cyBTZWxmLVNpZ25lZCBSb290IENBMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr4Pmvd5Dkh6MIn5o86yky9WCNj0QrYUg -IteAXlqA23YOVMnHrWMykP+zpviwlFMaOSsjgaBTD8Dped2Bsv5Pd2wHA6Krh6nY -bW8R24H/B3O1wYjIvnc8TPdG6inwYF2SrWYgPZsuGIUTZPxL4e0ERvz8YhDU+4lB -vFUDt4BozYeGknTdm7gKaL4ldVDDrKZF6XkIcyoiZ0NrTJjNY3y1LL6xiGJ+I1Rp -E4pfR45UCS3zKb556KgTO82/DYcARFlwoEoeiWbt8oIly0hHNwYd/I3Sl/wfn4jd -oQxJrvg7NwaLhxveQ5j+DNE3pI1VGMa2xFNbQLYarwIGiKWcVt3OVQIDAQABo0cw +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuIGJJKwYvhby2ib829IE8UU8irHEZ082 +J8XLgADEiG6UCs+aqn9w++27nlzMRMofF49rjfSjDjhzpML8e5Vug9djEz9s2B0u +uPtAzBBJyrA56IIDUO1r/X7AcQ+h86WXWzkmGjvRQLzN0L0rPU26S7RbasXc3FP0 +wCer3Uaw/3npkfZopNXzq16/9CuZB95gka4g/LJVSqvrrZFx4dcQ8mpHK9S/Uq2n +j1tRW8xzgFUg5NWdqhyRxvX4jtPUWMXJfn5ltOSk29Xj0Cra25ZVORtaCsqTargn +pinWLzlejHeGZR4NVPY+213ucyt6EWMf3HnlPxqES83m9rf/oPYHbwIDAQABo0cw RTAPBgNVHQ8BAf8EBQMDBwYAMBIGA1UdEwEB/wQIMAYBAf8CAQAwDQYDVR0OBAYE -BHBw0/IwDwYDVR0jBAgwBoAEcHDT8jANBgkqhkiG9w0BAQsFAAOCAQEAT+vCFFbC -eT3jTrxXaXrAmarEuSguds25+jT6UKcmlqS0Q2gnNwndh/OLVLKOMKY32fl5kGj/ -8MAh7BFzTjbZKkPARQ5IDPWeWQXizUfNWMelzNcSmSQGiVLciNKW/NVMTG5QukPF -zpD2O+aqW1s4p8c34RL4HmTrHY2rctjSSf5TyWorgE5lXnALDIhKBuc0DGU+nVya -zjpugWlwBHWYLRXJZROFqM/+tuBsrxaDjcNJJz77HR3odqgp2H7R3vL/4TW2F03G -HNgrYpj0lUsELCihI4A+o4CL+IsDk2WW2ORuNx8niOeSkmsxKsehHuTgIGU6bB70 -Vn2oS97NcVBsFQ== +BHBw0/IwDwYDVR0jBAgwBoAEcHDT8jANBgkqhkiG9w0BAQsFAAOCAQEAUlYcsa/F +xak3RO4YH4mdJOPDt7I16SoqH9EP8BTlOTgFU8Ql5MpG7VE+XWVc1D3NSp0y9iQk +bJH9MGaPLFbkJfwGq+pfpaS/0xI+KwRkG5rQVbpP+jOqGaADOVjuC2J3dNFg71ww +eozmKRjKU16DsFnQJ+N68kWoJ3t776/NzS7p7Oa7k4oijPhGtEAkrKOBzHXLILkZ +kUXYszN4pQGPPuWG2EZpTyAnvrDOwST1VrpGDFMdUy9ML891sMtuf5YM8dSF/WOS +pTmpP4xcb5HciFa+5Hv7242ATVrAirUB6pGA0A9ruxRQPWXwISBRtOIiqqOq2xIi +FX/3TGmzZn7kqw== -----END CERTIFICATE----- \ No newline at end of file diff --git a/tls/server/server.crt b/tls/server/server.crt index af0b276159..a9ad5e93b5 100644 --- a/tls/server/server.crt +++ b/tls/server/server.crt @@ -1,21 +1,21 @@ -----BEGIN CERTIFICATE----- MIIDhzCCAm+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA6MREwDwYDVQQKDAhEYWVk YWx1czElMCMGA1UEAwwcRGFlZGFsdXMgU2VsZi1TaWduZWQgUm9vdCBDQTAeFw0y -MDAzMzAwOTQwMzNaFw0yMTAzMzAwOTQxMzNaMDUxETAPBgNVBAoMCERhZWRhbHVz +MTAzMzAxNzIwMTFaFw0yMjAzMzAxNzIxMTFaMDUxETAPBgNVBAoMCERhZWRhbHVz MSAwHgYDVQQDDBdEYWVkYWx1cyBXYWxsZXQgQmFja2VuZDCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAJyhhqCO2pMk4uERiweyY74iWG3rHZi5lhPd42TB -plLRp/urNZkq3K/uFIESlgsrFJqFq/uNXOLcW1pm3rjo0CV5UNGvtzCyt26+l8Xw -GPpsrpC03lChdrVjaw2A2ohQ0V7ECFsxyBNqqN4uRh1tgeneknN7bR/tDZr1mApZ -DJ5zvxg29rFjzp8kFAetd91p7oUmY9VLBteTZANpc5TG/X7kXkhdDkOakEwqiYpG -i6W83a+SQ2cj4dDTBRjftZ6CSz7MIayrqrRjMHAVubiBzaPDAeHTQTQGIo5MwVrB -YHp493clk79CsVZ1f57BSfEjMo0CpOdzLEKG3kz9Rfl06ZsCAwEAAaOBnDCBmTBD +AQEBBQADggEPADCCAQoCggEBALzo7x6RHhLF8EGTBduhrMkhClkZ7LoJCkIJ7wQX +Ngyvw3O4BL45vizBSfXRG+Rm2PAHuIReD3bos/lRDM1z7cOi/iCEFguy3JltgXuB +uiPsOTjZGe+YKGLjQ+M4n/P+NBbkv7bFVVWs5GHGPwAHG94GMYSawKHW539zkTu9 +aF7vbKWdRS9iM5fC7r77cySM1wA/95r1bI63knO6wR7bNnlRH8oHjH+jJ5fv5qBz +JZo8O423/HaM14+d1Rh9THN0hM0f8FgFZC2ea3036u7kssiUAvLIkw2i8ZdrYDc8 +rVwzXPHFaaBGy+Ij5bJWssUYPhDgdG7jnyXUnRQgENWGrq8CAwEAAaOBnDCBmTBD BgNVHREEPDA6gglsb2NhbGhvc3SCFWxvY2FsaG9zdC5sb2NhbGRvbWFpbocEfwAA AYcQAAAAAAAAAAAAAAAAAAAAATAPBgNVHQ8BAf8EBQMDB6AAMBMGA1UdJQQMMAoG CCsGAQUFBwMBMAwGA1UdEwQFMAMBAQAwDQYDVR0OBAYEBGDOyHQwDwYDVR0jBAgw -BoAEcHDT8jANBgkqhkiG9w0BAQsFAAOCAQEAVtMNUPOSbQx2Dj0V+1d/FKmTVBGR -q8n2tRCv0L6GmJ3d3sSkyeexMmVCkZcObpTIMVoX3Of7IrQ927lbwmknn39D+9cB -K6LauMemTcUBbg2HVCj3Yv28QG/BnACnrQqjO1KRwMA6CY1wbz1YzabeUAhAGkgf -j/Tef+/EFYWKeseP5uOLgVR0Mixigy1wb2gP43RsI62Wza+bq0OB9NhFVekXJ973 -YUPbJSpDzb7aGmnzlZG/lPhaTD17QUMTZIUI4S7NTSOtaowwg+UFlWGT/iCKL2So -56eiViop5n8cfc+iTtqppXd88C2PdOIIX+nVhAbxnUFhYhfoCCUmYZn0/Q== +BoAEcHDT8jANBgkqhkiG9w0BAQsFAAOCAQEAiXibit6Uj75+JUCHfSEdFyDALtur +TKMGJuWluaEhvxFTkN6nRSoezpSsbp+jOVLXBqRSBLyAOWkPPBOnbUZuE+LCI2iD +IIzMwo7GWlaBu6IcNQuOOUblxMDhU4SuhSZM+t9FkUfx+n2bv9r51FfvU8FScJ+r +NEEyDMdI5aNpWiku8XVt0p5wkXeFhErmtNEv2gVOV/K7TZcvgbspY9V248dTazIT +myj6+xXEnV20aVlP0rXPvQKKM2yylmkLq1vxNZ1GbNn3vkt0rQtL6HUDVa++6RJY +Nx9qxj0C3SnpYK0lRml7pxjubt1PpVCaxGAjN4kU8HBMEw+I9UMx4/mlZw== -----END CERTIFICATE----- \ No newline at end of file diff --git a/tls/server/server.key b/tls/server/server.key index e662d7e32b..96566d11c0 100644 --- a/tls/server/server.key +++ b/tls/server/server.key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/tls/server/server.pem b/tls/server/server.pem index f0c37b94bb..dc93839d29 100644 --- a/tls/server/server.pem +++ b/tls/server/server.pem @@ -1,48 +1,48 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIDhzCCAm+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA6MREwDwYDVQQKDAhEYWVk YWx1czElMCMGA1UEAwwcRGFlZGFsdXMgU2VsZi1TaWduZWQgUm9vdCBDQTAeFw0y -MDAzMzAwOTQwMzNaFw0yMTAzMzAwOTQxMzNaMDUxETAPBgNVBAoMCERhZWRhbHVz +MTAzMzAxNzIwMTFaFw0yMjAzMzAxNzIxMTFaMDUxETAPBgNVBAoMCERhZWRhbHVz MSAwHgYDVQQDDBdEYWVkYWx1cyBXYWxsZXQgQmFja2VuZDCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAJyhhqCO2pMk4uERiweyY74iWG3rHZi5lhPd42TB -plLRp/urNZkq3K/uFIESlgsrFJqFq/uNXOLcW1pm3rjo0CV5UNGvtzCyt26+l8Xw -GPpsrpC03lChdrVjaw2A2ohQ0V7ECFsxyBNqqN4uRh1tgeneknN7bR/tDZr1mApZ -DJ5zvxg29rFjzp8kFAetd91p7oUmY9VLBteTZANpc5TG/X7kXkhdDkOakEwqiYpG -i6W83a+SQ2cj4dDTBRjftZ6CSz7MIayrqrRjMHAVubiBzaPDAeHTQTQGIo5MwVrB -YHp493clk79CsVZ1f57BSfEjMo0CpOdzLEKG3kz9Rfl06ZsCAwEAAaOBnDCBmTBD +AQEBBQADggEPADCCAQoCggEBALzo7x6RHhLF8EGTBduhrMkhClkZ7LoJCkIJ7wQX +Ngyvw3O4BL45vizBSfXRG+Rm2PAHuIReD3bos/lRDM1z7cOi/iCEFguy3JltgXuB +uiPsOTjZGe+YKGLjQ+M4n/P+NBbkv7bFVVWs5GHGPwAHG94GMYSawKHW539zkTu9 +aF7vbKWdRS9iM5fC7r77cySM1wA/95r1bI63knO6wR7bNnlRH8oHjH+jJ5fv5qBz +JZo8O423/HaM14+d1Rh9THN0hM0f8FgFZC2ea3036u7kssiUAvLIkw2i8ZdrYDc8 +rVwzXPHFaaBGy+Ij5bJWssUYPhDgdG7jnyXUnRQgENWGrq8CAwEAAaOBnDCBmTBD BgNVHREEPDA6gglsb2NhbGhvc3SCFWxvY2FsaG9zdC5sb2NhbGRvbWFpbocEfwAA AYcQAAAAAAAAAAAAAAAAAAAAATAPBgNVHQ8BAf8EBQMDB6AAMBMGA1UdJQQMMAoG CCsGAQUFBwMBMAwGA1UdEwQFMAMBAQAwDQYDVR0OBAYEBGDOyHQwDwYDVR0jBAgw -BoAEcHDT8jANBgkqhkiG9w0BAQsFAAOCAQEAVtMNUPOSbQx2Dj0V+1d/FKmTVBGR -q8n2tRCv0L6GmJ3d3sSkyeexMmVCkZcObpTIMVoX3Of7IrQ927lbwmknn39D+9cB -K6LauMemTcUBbg2HVCj3Yv28QG/BnACnrQqjO1KRwMA6CY1wbz1YzabeUAhAGkgf -j/Tef+/EFYWKeseP5uOLgVR0Mixigy1wb2gP43RsI62Wza+bq0OB9NhFVekXJ973 -YUPbJSpDzb7aGmnzlZG/lPhaTD17QUMTZIUI4S7NTSOtaowwg+UFlWGT/iCKL2So -56eiViop5n8cfc+iTtqppXd88C2PdOIIX+nVhAbxnUFhYhfoCCUmYZn0/Q== +BoAEcHDT8jANBgkqhkiG9w0BAQsFAAOCAQEAiXibit6Uj75+JUCHfSEdFyDALtur +TKMGJuWluaEhvxFTkN6nRSoezpSsbp+jOVLXBqRSBLyAOWkPPBOnbUZuE+LCI2iD +IIzMwo7GWlaBu6IcNQuOOUblxMDhU4SuhSZM+t9FkUfx+n2bv9r51FfvU8FScJ+r +NEEyDMdI5aNpWiku8XVt0p5wkXeFhErmtNEv2gVOV/K7TZcvgbspY9V248dTazIT +myj6+xXEnV20aVlP0rXPvQKKM2yylmkLq1vxNZ1GbNn3vkt0rQtL6HUDVa++6RJY +Nx9qxj0C3SnpYK0lRml7pxjubt1PpVCaxGAjN4kU8HBMEw+I9UMx4/mlZw== -----END CERTIFICATE----- \ No newline at end of file