From 719ab18b9fa72c2899e1e85a3c92de2ae1d50d76 Mon Sep 17 00:00:00 2001 From: Oleg Makarenko Date: Tue, 4 Oct 2022 21:16:51 +0300 Subject: [PATCH 1/2] [wallet/mobile] task: remove opt-in module --- src/Router.js | 36 -- .../settings/SettingsNIS1NodeSelector.js | 70 --- src/components/settings/index.js | 1 - src/locales/translations/en.json | 165 ------- src/locales/translations/es.json | 104 ----- src/locales/translations/it.json | 104 ----- src/locales/translations/ja.json | 104 ----- src/locales/translations/ru.json | 165 ------- src/locales/translations/uk.json | 102 ----- src/locales/translations/zh.json | 104 ----- src/screens/Home.js | 6 - .../PostLaunchOptIn/NIS1AccountDetails.js | 57 --- .../PostLaunchOptIn/OptInAccountDetails.js | 245 ----------- src/screens/PostLaunchOptIn/OptInReview.js | 220 ---------- .../OptInSelectSymbolAccount.js | 116 ----- .../OptInSelectSymbolMultisigDestination.js | 120 ------ src/screens/PostLaunchOptIn/Presentation.js | 187 -------- src/screens/PostLaunchOptIn/Welcome.js | 406 ------------------ src/screens/Settings/index.js | 2 - src/services/OptInService.js | 191 -------- .../persistence/NIS1AccountSecureStorage.js | 56 --- src/store/index.js | 2 - src/store/optin.js | 166 ------- 23 files changed, 2729 deletions(-) delete mode 100644 src/components/settings/SettingsNIS1NodeSelector.js delete mode 100644 src/screens/PostLaunchOptIn/NIS1AccountDetails.js delete mode 100644 src/screens/PostLaunchOptIn/OptInAccountDetails.js delete mode 100644 src/screens/PostLaunchOptIn/OptInReview.js delete mode 100644 src/screens/PostLaunchOptIn/OptInSelectSymbolAccount.js delete mode 100644 src/screens/PostLaunchOptIn/OptInSelectSymbolMultisigDestination.js delete mode 100644 src/screens/PostLaunchOptIn/Presentation.js delete mode 100644 src/screens/PostLaunchOptIn/Welcome.js delete mode 100644 src/services/OptInService.js delete mode 100644 src/storage/persistence/NIS1AccountSecureStorage.js delete mode 100644 src/store/optin.js diff --git a/src/Router.js b/src/Router.js index 69391f2..cd6ade3 100644 --- a/src/Router.js +++ b/src/Router.js @@ -32,12 +32,6 @@ import ScanGenericQRCode from '@src/screens/ScanGenericQRCode'; import CustomFlashMessage from '@src/components/organisms/CustomFlashMessage'; import { showMessage } from 'react-native-flash-message'; import LinkedKeysDetails from '@src/screens/LinkedKeysDetails'; -import Welcome from '@src/screens/PostLaunchOptIn/Welcome'; -import OptInAccountDetails from '@src/screens/PostLaunchOptIn/OptInAccountDetails'; -import OptInSelectSymbolAccount from '@src/screens/PostLaunchOptIn/OptInSelectSymbolAccount'; -import OptInReview from '@src/screens/PostLaunchOptIn/OptInReview'; -import NIS1AccountDetails from '@src/screens/PostLaunchOptIn/NIS1AccountDetails'; -import OptInSelectSymbolMultisigDestination from '@src/screens/PostLaunchOptIn/OptInSelectSymbolMultisigDestination'; export const BASE_SCREEN_NAME = 'com.nemgroup.wallet'; export const CUSTOM_FLASH_MESSAGE = `${BASE_SCREEN_NAME}.CUSTOM_FLASH_MESSAGE`; @@ -70,12 +64,6 @@ export const ACCOUNT_DETAILS_SCREEN = `${BASE_SCREEN_NAME}.ACCOUNT_DETAILS_SCREE export const CREATE_ACCOUNT_SCREEN = `${BASE_SCREEN_NAME}.CREATE_ACCOUNT_SCREEN`; export const QR_SCANNER_SCREEN = `${BASE_SCREEN_NAME}.QR_SCANNER_SCREEN`; export const SHOW_LINKED_KEYS_SCREEN = `${BASE_SCREEN_NAME}.SHOW_LINKED_KEYS_SCREEN`; -export const OPTIN_WELCOME = `${BASE_SCREEN_NAME}.OPTIN_WELCOME`; -export const OPTIN_ACCOUNT_DETAIL = `${BASE_SCREEN_NAME}.OPTIN_ACCOUNT_DETAIL`; -export const OPTIN_SYMBOL_ACCOUNT = `${BASE_SCREEN_NAME}.OPTIN_SYMBOL_ACCOUNT`; -export const OPTIN_FINISH = `${BASE_SCREEN_NAME}.OPTIN_FINISH`; -export const NIS1_ACCOUNT_DETAILS = `${BASE_SCREEN_NAME}.NIS1_ACCOUNT_DETAILS`; -export const OPTIN_SELECT_MULTISIG_DESTINATION = `${BASE_SCREEN_NAME}.OPTIN_SELECT_MULTISIG_DESTINATION`; interface MessageProps { message: string; @@ -115,12 +103,6 @@ export class Router { [CONTACT_PROFILE_SCREEN, ContactProfile], [QR_SCANNER_SCREEN, QRScanner], [SHOW_LINKED_KEYS_SCREEN, LinkedKeysDetails], - [OPTIN_WELCOME, Welcome], - [OPTIN_ACCOUNT_DETAIL, OptInAccountDetails], - [OPTIN_SYMBOL_ACCOUNT, OptInSelectSymbolAccount], - [OPTIN_FINISH, OptInReview], - [NIS1_ACCOUNT_DETAILS, NIS1AccountDetails], - [OPTIN_SELECT_MULTISIG_DESTINATION, OptInSelectSymbolMultisigDestination], ]; static registerScreens() { @@ -218,24 +200,6 @@ export class Router { static goToShowLinkedKeys(passProps, parentComponent?) { return Router.goToScreen(SHOW_LINKED_KEYS_SCREEN, passProps, parentComponent); } - static goToOptInWelcome(passProps, parentComponent?) { - return Router.goToScreen(OPTIN_WELCOME, passProps, parentComponent); - } - static goToOptInAccountDetails(passProps, parentComponent?) { - return Router.goToScreen(OPTIN_ACCOUNT_DETAIL, passProps, parentComponent); - } - static goToOptInSelectSymbolAccount(passProps, parentComponent?) { - return Router.goToScreen(OPTIN_SYMBOL_ACCOUNT, passProps, parentComponent); - } - static goToOptInFinish(passProps, parentComponent?) { - return Router.goToScreen(OPTIN_FINISH, passProps, parentComponent); - } - static goToNIS1AccountDetails(passProps, parentComponent?) { - return Router.goToScreen(NIS1_ACCOUNT_DETAILS, passProps, parentComponent); - } - static goToOptinSelectSymbolMultisigDestination(passProps, parentComponent?) { - return Router.goToScreen(OPTIN_SELECT_MULTISIG_DESTINATION, passProps, parentComponent); - } static goToScreen(screen: string, passProps, parentComponent?) { setDefaultNavOptions(); diff --git a/src/components/settings/SettingsNIS1NodeSelector.js b/src/components/settings/SettingsNIS1NodeSelector.js deleted file mode 100644 index 5ea8efa..0000000 --- a/src/components/settings/SettingsNIS1NodeSelector.js +++ /dev/null @@ -1,70 +0,0 @@ -import React, { Component } from 'react'; -import { View } from 'react-native'; -import SettingsListItem from '@src/components/settings/SettingsListItem'; -import { Dropdown } from '@src/components'; -import translate from '@src/locales/i18n'; -import store from '@src/store'; -import { connect } from 'react-redux'; -import { getNISNodes } from '@src/config/environment'; - -class SettingsNIS1NodeSelector extends Component { - constructor(props) { - super(props); - this.state = { - data: getNISNodes(props.network.type), - isBoxOpen: false, - }; - } - - closeModal = () => { - this.setState({ - isBoxOpen: false, - }); - }; - - openModal = () => { - this.setState({ - isBoxOpen: true, - }); - }; - - onSelect = node => { - console.log(node); - store - .dispatchAction({ - type: 'settings/saveSetSelectedNISNode', - payload: node, - }) - .then(() => { - this.closeModal(); - }); - }; - - render() { - const { data } = this.state; - const { selectedNISNode } = this.props.settings; - const parsedData = data.map(data => ({ - label: data, - value: data, - })); - return ( - - - - - - ); - } -} - -export default connect(state => ({ - settings: state.settings, - network: state.network.selectedNetwork, -}))(SettingsNIS1NodeSelector); diff --git a/src/components/settings/index.js b/src/components/settings/index.js index be76e86..3b533e7 100644 --- a/src/components/settings/index.js +++ b/src/components/settings/index.js @@ -6,4 +6,3 @@ export SettingsBackup from '@src/components/settings/SettingsBackup'; export SettingsAboutNem from '@src/components/settings/SettingsAboutNem'; export SettingsLogout from '@src/components/settings/SettingsLogout'; export SettingsNodeSelector from '@src/components/settings/SettingsNodeSelector'; -export SettingsNIS1NodeSelector from '@src/components/settings/SettingsNIS1NodeSelector'; diff --git a/src/locales/translations/en.json b/src/locales/translations/en.json index 20df431..1d1d3dc 100644 --- a/src/locales/translations/en.json +++ b/src/locales/translations/en.json @@ -267,108 +267,6 @@ "retryButton": "Retry" } }, - "OptIn": { - "DashboardModalTitle": "Mainnet has not launched yet", - "DashboardModalDescription": "You can Opt-in funds from NEM NIS1 to Symbol this account", - "DashboardModalButton": "GO TO Opt-in", - "WelcomeTitle": "Opt-in to Symbol", - "WelcomeDescription": "By completing Opt-in, you are expressing your intention to participate in the launch of Symbol public blockchain. This will enable you to claim XYM funds equivalent to your XEM account balance at the time of the Snapshot (your XEM on the NEM NIS1 blockchain will not be affected). You can also re-register your NEM NIS1 namespaces (if you have one) starting at the first Symbol block. You can make changes to the balance of your XEM account, it is the balance at the time of the Snapshot that will determine the amount of XYM you receive.", - "StoppedDescription": "Opt-in has finished. You should update your application to get the latest news", - "NoAccountsImported": "You have not imported an XEM account. To start, please import one.", - "SelectNISAccount": "Please, select a XEM account:", - "NormalOptIn": "Opt-in", - "MultisigOptIn": "Multisig Opt-in", - "ReviewNormalOptIn": "Review Opt-in", - "CosignMultisigOptIn": "Cosign Multisig Opt-in", - "SelectAccountTitle": "Select XEM account", - "NISAccountListTitle": "Your XEM accounts", - "ConfigureAccount": "Select an account(s) you would like to Opt-in", - "EmptyAccountList": "No imported accounts found. Please import a XEM account using the buttons below. Then you can Opt-in or cosign the Opt-in of a multisig account by selecting one from the list.", - "AccountIsNotOptedIn": "This account is not Opted-in yet!", - "AccountIsOptedIn": "This account is successfully Opted-in", - "AccountIsNotOptedInList": "Press to Opt-in!", - "AccountIsOptedInList": "Opted-in", - "AccountIsOptedInMultisigList": "Cosign multisig", - "SelectMultisigAccountTitle": "Select multisig XEM account", - "ImportNISAccount": "Import new account", - "ChangeNISAccount": "Change account", - "PrivateKey": "Private Key", - "QR": "QR", - "ImportAccountPrivateKey": "Add account via Private Key", - "ImportAccountQR": "Add account via QR", - "ImportNISPrivateKey": "Import private key", - "EnterNISPrivateKey": "Enter private key", - "InvalidPrivateKey": "Invalid private key", - "EnterNISPassword": "Enter QR password", - "Import": "Import", - "NoNISAccounts": "You haven't imported a XEM account yet", - "ImportQR": "Import using QR", - "InvalidQRErrorText": "Invalid QR code", - "Balance": "Balance:", - "CurrentBalance": "Current balance:", - "StartOptInTitle": "Start Opt-in", - "ReviewOptInTitle": "Review Opt-in", - "Next": "Next", - "HowToMultisig": "This account is multisig cosignatory. You should complete Opt-in for this account first to unlock cosign multisig Opt-in.", - "BalanceWarning": "Only the funds in this account during the snapshot block are the funds that will be included in Symbol account at launch.", - "StartOptInDescription": "You are going to start the Opt-in process for regular non-multisig account. By doing this, you will Opt-in namespaces to a destination account. This process involves the following steps:", - "StartOptInStep1": "Select namespaces to Opt-in", - "StartOptInStep2": "Step 2: Create a symbol account", - "StartOptInStep3": "Step 3: Backup the symbol account", - "StartOptInStepFinal": "Final: Review and complete Opt-in", - "NamespacesOptInTitle": "Select namespaces", - "NamespacesOptInDescription": "Now you can Opt-in the Namespace(s) you own on NEM NIS1. This provides a placeholder for the same Namespace(s) on the Symbol blockchain. Each namespace chosen will increase the fee of the opt-in process.", - "SetupVrf": "Go to setup VRF", - "VrfOptInTitle": "Include VRF keys", - "VrfOptInDescription": "VRF keys allow your account to harvest block rewards. If you plan to hold over 10,000 XYM in your account after launch and would like to harvest on the Symbol blockchain, you need to add VRF keys to the Opt-in process.", - "VrfOptInCheck": "Include VRF keys for harvesting", - "VRFPublicKey": "VRF Public key", - "VRFPrivateKey": "VRF Private key", - "ReviewSymbolAccount": "Review Symbol Account", - "ReviewSymbolAccountTitle": "Step 2: Review Symbol account", - "ReviewSymbolAccountDescription": "This is your Symbol account, the only way to recover it is by knowing the mnemonics. Please write in a safe place all of them and then backup the QR code.", - "ReviewSymbolAddress": "Your Symbol address:", - "ReviewSymbolMnemonics": "Your Symbol mnemonics:", - "BackupSymbolAccountTitle": "Step 3: Backup Symbol account", - "NotEnoughBalance": "Account doesn't have enough balance", - "SendingOptIn": "Sending Opt-in", - "FinishOptIn": "Complete Opt-in", - "FinishOptInDescription": "This is the final data for Opt-in. Please review it carefully and press complete to end the process.", - "NISAddress": "XEM Account Address:", - "SymbolAccount": "Symbol Account Address:", - "Namespaces": "Namespaces:", - "NoNamespacesIncluded": "No namespaces included", - "VRFPublicKeyLabel": "VRF Public Key:", - "CostOfOperation": "Cost of operation:", - "Understand1": "I have backed up my mnemonic passphrase for the Opt-in process and understand it is my responsibility to save and back it up", - "Understand2": "I understand that only XEM funds that I hold in my XEM account at the snapshot will be included in my Symbol XYM account at launch. I understand that any changes I make to my XEM account between now and the snapshot will be reflected in my XYM balance at Symbol launch.", - "Send": "Confirm Opt-in", - "ConfirmOptInTitle": "Confirm Opt-in", - "ConfirmButton": "Confirm", - "SuccessOptInTitle": "Success", - "SuccessOptInDescription": "This account is Opted-in!", - "SummaryTitle": "Opt-in Summary", - "SummaryDescription": "You have completed the Opt-in, here is the information of it", - "MultisigOptInDescription": "To start the Opt-in for a Multisig Account, one of the cosigantories must initiate it via NEM Desktop Wallet (Nano Wallet). After that you can find this account in dropdown list below and sign Opt-in. Opt-in for a Multisig Account is completed when all cosignatories have signed it", - "SelectMultisigAccount": "Please select the multisig account to Opt-in", - "OptInNotInitiated": "Opt-in for this Multisig Account hasn't been initiated yet. Please do it using the NEM Desktop Wallet (Nano Wallet)", - "CosignerSignatures": "Cosigner signatures", - "BalanceToBeIncluded": "Balance to be included", - "CosigningOptIn": "Cosigning Opt-in", - "CosignOptIn": "Cosign Opt-in", - "EnterPasswordToDecryptQR": "Enter the password to decrypt the QR", - "Decrypt": "Decrypt", - "GoBack": "Go Back", - "OkButton": "Ok", - "OptInDoneStatus": "Opt-in Completed", - "MultisigIsCosignedStatus": "You have signed", - "PendingAnotherSignaturesStatus": "Waiting for signatures from another cosigners", - "ImportErrorAccountAlreadyImported": "Account already imported", - "ImportErrorMultisigAccountNotAllowed": "Your multi-signature opt-in request must be issued with cosigner accounts", - "ImportErrorWrongOptedInAccount": "The account has already opted-in, but the Symbol account is not the one in this wallet. Please import the correct Symbol account or use another XEM account private key", - "ErrorCreatingAccount": "Failed to create account", - "NamespaceUnavailable": "Unavailable" - }, "menu": { "news": "News", "mosaics": "Mosaics", @@ -587,8 +485,6 @@ "blockExplorerNamespace": "Show namespace in the Block Explorer" }, "home": { - "optInTitle": "Post-launch Opt-in", - "optInDescription": "Press here to access the dashboard", "pendingSignatureTitle": "Pending signature", "pendingSignatureDescription": "There is a transaction pending awaiting signature", "alertTitle":"Error", @@ -755,66 +651,5 @@ "currentAddress": "Your address", "alertNewVersionAppStoreTitle": "The new version of Symbol Wallet is available in the App Store", "alertNewVersionAppStoreBody": "We strongly recommend that you update to the latest version!" - }, - "optin": { - "title": "Post-launch opt-in", - "welcomeDescription": "List of imported NIS1 accounts. Choose one or import it to check its status and start the opt-in process", - "importQR": "Import using QR", - "importPrivateKey": "Import using private key", - "qrPassword": "Decrypt QR code", - "decryptQRPlaceholder": "Enter password", - "decryptQR": "QR password", - "invalidDecryptPassword": "Invalid QR password", - "importAccount": "Import account", - "importPrivateKeyTitle": "Import private key", - "importPrivateKeyPlaceholder": "Enter private key", - "privateKey": "Private key", - "invalidPrivateKey": "Invalid private key", - "statusTitle": "Opt-in status", - "status1": "Opt-in not done. You can start claiming XYM", - "status2": "Opt-in pending. Your opt-in request has been successfully created.", - "status3": "Multisig opt-in not started", - "status4": "Multisig opt-in pending signatures. You can claim XYM for the multisig account", - "status4signed": "Multisig opt-in has pending signatures", - "status5signed": "Multisig opt-in pending. Your opt-in request has been successfully created.", - "status6": "Opt-in done", - "start": "Start opt-in", - "review": "Review opt-in", - "selectSymbolAccountTitle": "Select symbol account", - "selectSymbolAccountDescription": "Select a symbol account to receive the opt-in funds. Here is the list the accounts inside your wallet:", - "selectCosignerSymbolDescription": "Select a symbol account that is a cosigner of the account above:", - "destinationMultisigAccount": "Symbol destination multisig address:", - "enterDestinationMultisigAccount": "Enter your destination Symbol account's public key. This account must be a multisig and must have the same amount of cosigners as the current NIS1 multisig account.", - "reviewTitle": "Review opt-in", - "send": "Send opt-in", - "selectedNISAddress": "Selected NIS1 address", - "selectMultisigSymbolAccountTitle": "Select multisig account", - "selectedNISMultisigAddress": "Multisig address", - "optInStatus": "Opt-in Status", - "optInAmount": "Opt-in Amount", - "optInDetailsDescription": "Post-launch opt-in details for the selected account", - "fee": "NIS1 transaction fee", - "removeModalTitle": "Are you sure?", - "removeModalDescription": "Are you sure that you want to remove NIS1 account", - "destination": "Symbol destination account", - "error0": "Invalid payload signature", - "error1": "Invalid destination account", - "error2": "Invalid destination account cosignatories", - "lastOptInFailed": "Last opt-in failed with message", - "NISNode": "NIS1 node", - "selectAccount": "Select Account", - "next": "Next", - "getStarted": "Get Started", - "presentationSlide1Title": "Welcome!", - "presentationSlide1Text": "Missed out on Symbol's opt-in? Don't worry! Your coins are still waiting for you.", - "presentationSlide2Title": "Eligible Account", - "presentationSlide2Text": "You can receive equivalent XYM for each XEM held during the snapshot at block height #3,105,500.", - "presentationSlide3Title": "Claim Your XYM", - "presentationSlide3Text": "Import your accounts now to check their eligibility or start the opt-in process.", - "presentationSlide3Note": "Note: it can take up to thirty (30) days for your XYM to successfully appear in your wallet.", - "noBalance": "You didn't have enough XEM in Snapshot or you already claimed them in a pre-launch opt-in.", - "postLaunchTransactionText": "The amount you have received:", - "postLaunchTransactionTextUnconfirmed": "The amount you will receive:", - "publicKeyPlaceholder": "Public key must be 64 hexadecimal characters long." } } diff --git a/src/locales/translations/es.json b/src/locales/translations/es.json index 565a736..8daa993 100644 --- a/src/locales/translations/es.json +++ b/src/locales/translations/es.json @@ -267,108 +267,6 @@ "retryButton": "Reintentar" } }, - "OptIn": { - "DashboardModalTitle": "La Mainnet no está al aire aún", - "DashboardModalDescription": "Puedes hacer Opt-in de tus fondos en NEM NIS1 a Symbol desde esta cuenta", - "DashboardModalButton": "IR A Opt-in", - "WelcomeTitle": "Opt-in a Symbol", - "WelcomeDescription": "Al completar la suscripción al Opt-in, expresas tu intención de participar en el lanzamiento de la cadena de bloques pública Symbol. Esto te permitirá reclamar fondos XYM equivalentes al saldo de tu cuenta XEM al momento de la instantánea, o Snapshot (tu saldo XEM en la cadena de bloques NEM NIS1 no se verá afectado). También podrás volver a registrar los namespaces NEM NIS1 (si tienes alguno) a partir del primer bloque Symbol. Mientras tanto puedes realizar cambios en el saldo de tu cuenta XEM normalmente; es el saldo al momento de la instantánea el que determinará la cantidad de XYM que recibes.", - "StoppedDescription": "El Opt-in ha terminado. Debes actualizar tu aplicación para obtener las últimas noticias", - "NoAccountsImported": "No has importado una cuenta XEM. Para empezar, por favor, importa una.", - "SelectNISAccount": "Por favor, selecciona una cuenta XEM:", - "NormalOptIn": "Opt-in", - "MultisigOptIn": "Opt-in para cuenta Multisig", - "ReviewNormalOptIn": "Revisar Opt-in", - "CosignMultisigOptIn": "Opt-in Multisig Cofirmante", - "SelectAccountTitle": "Seleccionar cuenta XEM", - "NISAccountListTitle": "Tus cuentas XEM", - "ConfigureAccount": "Por favor, selecciona la(s)cuenta(s) XEM para hacer tu Opt-in", - "EmptyAccountList": "No se han encontrado cuentas importadas. Por favor, importa una cuenta XEM usando los botones de abajo. A continuación, puedes inscribir o cofirmar el Opt-in de una cuenta multisig seleccionando una de la lista", - "AccountIsNotOptedIn": "¡Esta aún no ha hecho Opt-in aún!", - "AccountIsOptedIn": "Esta cuenta se ha añadido correctamente", - "AccountIsNotOptedInList": "Presiona aquí para realizar tu Opt-in", - "AccountIsOptedInList": "Inscrita", - "AccountIsOptedInMultisigList": "Multisig Cofirma", - "SelectMultisigAccountTitle": "Selecciona cuenta Multisig XEM", - "ImportNISAccount": "Importa la cuenta nueva", - "ChangeNISAccount": "Cambiar cuenta", - "PrivateKey": "Llave Privada", - "QR": "QR", - "ImportAccountPrivateKey": "Agregar cuenta con Llave Privada", - "ImportAccountQR": "Agregar cuenta con QR", - "ImportNISPrivateKey": "Importar Llave Privada", - "EnterNISPrivateKey": "Ingresar Llave Privada", - "InvalidPrivateKey": "Invalidar Llave Privada", - "EnterNISPassword": "Ingresar contraseña de QR", - "Import": "", - "NoNISAccounts": "Aún no has importado una cuenta XEM", - "ImportQR": "Importar usando QR", - "InvalidQRErrorText": "Código QR inválido", - "Balance": "Balance", - "CurrentBalance": "Balance actual", - "StartOptInTitle": "Iniciar Opt-in", - "ReviewOptInTitle": "Revisar Opt-in", - "Next": "Próximo", - "HowToMultisig": "Esta cuenta es cosignataria multisig. Debes primero completar el Opt-in de esta cuenta para desbloquear la opción cofirmante de Opt-in multisig.", - "BalanceWarning": "Solo los fondos de esta cuenta se incluirán en la cuenta de Symbol durante el bloque de instantánea al momento del lanzamiento", - "StartOptInDescription": "Vas a iniciar el proceso de Opt-in para cuenta individual, sin función multisig. Al hacer esto, se inscribirán los namespaces a una cuenta de destino. Este proceso implica los siguientes pasos:", - "StartOptInStep1": "Selecciona los namespaces que quieras incluir", - "StartOptInStep2": "Paso 2: Crea tu cuenta Symbol", - "StartOptInStep3": "Paso 3: Respalda tu cuenta Symbol", - "StartOptInStepFinal": "Final: Revisa y completa tu Opt-in", - "NamespacesOptInTitle": "Selecciona los namespaces", - "NamespacesOptInDescription": "Ahora puedes inscribir los namespaces que poseas en NEM NIS1. Esto proporciona un marcador de posición para los namespaces en la Blockchain de Symbol. Cada namespace elegido aumentará la tarifa del proceso de suscripción.", - "SetupVrf": "Ir a los ajustes de VRF", - "VrfOptInTitle": "Incluir Llaves VRF", - "VrfOptInDescription": "Las Llaves VRF permiten que tu cuenta coseche recompensas de bloque. Si planeas tener más de 10.000 XYMs en su cuenta después del lanzamiento y deseas cosechar en la cadena de bloques Symbol, debes agregar las claves VRF al proceso de Opt-in", - "VrfOptInCheck": "Incluir llaves VRF para cosechar", - "VRFPublicKey": "Llave VRF pública", - "VRFPrivateKey": "Llave VRF privada", - "ReviewSymbolAccount": "Revisar cuenta Symbol", - "ReviewSymbolAccountTitle": "Paso 2: Revisar cuenta Symbol", - "ReviewSymbolAccountDescription": "Esta es tu cuenta Symbol, la única manera de recuperarla es conociendo a los datos nemónicos. Por favor, guárdalos en un lugar seguro y haz una copia de seguridad del código QR", - "ReviewSymbolAddress": "Tu dirección Symbol:", - "ReviewSymbolMnemonics": "Tus datos nemónicos Symbol:", - "BackupSymbolAccountTitle": "Paso 3: Respalda tu cuenta Symbol", - "NotEnoughBalance": "Saldo de cuenta insuficiente", - "SendingOptIn": "Enviando Opt-in", - "FinishOptIn": "Opt-in completo", - "FinishOptInDescription": "Estos son los datos finales de tu Opt-in. Por favor, revísalos cuidadosamente y presiona Completar para terminar el proceso", - "NISAddress": "Dirección de la cuenta XEM:", - "SymbolAccount": "Dirección de la cuenta Symbol:", - "Namespaces": "Namespaces:", - "NoNamespacesIncluded": "No se incluyen namespaces", - "VRFPublicKeyLabel": "Llave VRF pública:", - "CostOfOperation": "Costo de operación:", - "Understand1": "He respaldado mi contraseña nemónica para el proceso de Opt-in y entiendo que es mi responsabilidad guardarla y respaldarla", - "Understand2": "Entiendo que solo los fondos XEM que tengo en mi cuenta XEM al momento de la Instantánea se incluirán en mi cuenta XYM de Symbol al momento del lanzamiento. Entiendo que cualquier cambio que realice en mi cuenta XEM de aquí a la instantánea se reflejará en mi saldo XYM en el lanzamiento del Symbol.", - "Send": "Confirmar Opt-in", - "ConfirmOptInTitle": "Confirmar Opt-in", - "ConfirmButton": "Confirmar", - "SuccessOptInTitle": "¡Exito!", - "SuccessOptInDescription": "Esta cuenta ha realizado su Opt-in", - "SummaryTitle": "Resumen del Opt-in", - "SummaryDescription": "Has completado el Opt-in normal; aquí está la información del procedimiento", - "MultisigOptInDescription": "Para iniciar el Opt-in de una cuenta Multisig, uno de los cosignatarios debe iniciarlo a través de la Wallet NEM (versión de escritorio). Después de eso, puede encontrar esta cuenta en la lista desplegable a continuación e iniciar sesión para el Opt-in. La suscripción a una cuenta Multisig se completa cuando todos los cofirmantes la han firmado", - "SelectMultisigAccount": "Seleccione la cuenta multisig para inscribir", - "OptInNotInitiated": "La suscripción a esta cuenta Multisig aún no se ha iniciado. Por favor, hazlo usando la versión escritorio de Wallet NEM", - "CosignerSignatures": "Firma(s) de cofirmante(s)", - "BalanceToBeIncluded": "Saldo a incluir", - "CosigningOptIn": "Cofirmando Opt-in", - "CosignOptIn": "Cofirmar Opt-in", - "EnterPasswordToDecryptQR": "Introduce la contraseña para descifrar el QR", - "Decrypt": "Descifrar", - "GoBack": "Ir atrás", - "OkButton": "Ok", - "OptInDoneStatus": "Opt-in completo", - "MultisigIsCosignedStatus": "Has firmado tu opción", - "PendingAnotherSignaturesStatus": "Esperando por firmas de cosignatarios restantes", - "ImportErrorAccountAlreadyImported": "Cuenta ya importada", - "ImportErrorMultisigAccountNotAllowed": "Tu solicitud de Opt-in multifirma debe emitirse con la cuenta de cofirmantes", - "ImportErrorWrongOptedInAccount": "Esta cuenta ya realizó su Opt-in, pero la cuenta Symbol no es la que está en esta Wallet. Por favor, importa la cuenta Symbol correcta o usa otra llave privada XEM", - "ErrorCreatingAccount": "Creación de cuenta fallida", - "NamespaceUnavailable": "No disponible" - }, "menu": { "news": "Noticias", "mosaics": "Mosaics", @@ -579,8 +477,6 @@ "blockExplorerNamespace": "Mostrar namespace en el Explorador de bloques" }, "home": { - "optInTitle": "Opt-in", - "optInDescription": "El proceso de opt-in post lanzamiento se abirá pronto. Por favor comprueba nuevas versiones después del lanzamiento de Symbol.", "pendingSignatureTitle": "Firma pendiente", "pendingSignatureDescription": "Hay una transacción pendiente a la espera de la firma", "alertTitle": "Error", diff --git a/src/locales/translations/it.json b/src/locales/translations/it.json index 46f104e..3a0de65 100644 --- a/src/locales/translations/it.json +++ b/src/locales/translations/it.json @@ -267,108 +267,6 @@ "retryButton": "Ripetere" } }, - "OptIn": { - "DashboardModalTitle": "Mainnet non è ancora stata avviata", - "DashboardModalDescription": "Puoi depositare fondi da NEM NIS1 nell'account Symbol", - "DashboardModalButton": "VAI A Opt-in", - "WelcomeTitle": "Opt-In Symbol", - "WelcomeDescription": "Confermando il processo di opt-in, esprimi la tua intenzione di partecipare al lancio della rete blockchain pubblica di Symbol. Ciò ti consentirà di ricevere token XYM equivalenti al saldo dell'account XEM al momento dell'istantanea (il tuo saldo XEM sulla blockchain NEM NIS1 non sarà interessato). Puoi registrare nuovamente i tuoi spazi dei nomi NEM NIS1 (se li hai) a partire dal primo blocco di Symbol. Puoi anche apportare modifiche al tuo saldo per l'account XEM, poiché è il saldo al momento dell'istantanea che determinerà il numero di token XYM che ricevi.", - "StoppedDescription": "Opt-In completato. Dovresti aggiornare la tua app per ricevere le ultime notizie", - "NoAccountsImported": "Non hai importato il tuo account XEM. Fallo prima.", - "SelectNISAccount": "Seleziona un account XEM:", - "NormalOptIn": "Opt-in", - "MultisigOptIn": "Multisig Opt-in", - "ReviewNormalOptIn": "Rivedi Opt-in", - "CosignMultisigOptIn": "Firmatari Multisig Opt-In", - "SelectAccountTitle": "Seleziona il tuo account XEM", - "NISAccountListTitle": "I tuoi account XEM", - "ConfigureAccount": "Seleziona gli account per i quali desideri effettuare il processo di Opt-In", - "EmptyAccountList": "Nessun account importato trovato. Importa il tuo account XEM utilizzando i pulsanti di seguito. Quindi puoi eseguire il processo di opt-in per il tuo multisig account dall'elenco.", - "AccountIsNotOptedIn": "Questo account non è ancora stato sottoposto al processo di Opt-In!", - "AccountIsOptedIn": "Questo account ha superato con successo la procedura di attivazione", - "AccountIsNotOptedInList": "Fai clic per completare il processo di Opt-In!", - "AccountIsOptedInList": "Opt-in completato", - "AccountIsOptedInMultisigList": "Firmatari Multisig", - "SelectMultisigAccountTitle": "Seleziona account multisig XEM", - "ImportNISAccount": "Importa il nuovo account", - "ChangeNISAccount": "Cambia account", - "PrivateKey": "Chiave privata", - "QR": "QR", - "ImportAccountPrivateKey": "Aggiungi account tramite chiave privata", - "ImportAccountQR": "Aggiungi account tramite QR", - "ImportNISPrivateKey": "Importa chiave privata", - "EnterNISPrivateKey": "Immettere la chiave privata", - "InvalidPrivateKey": "", - "EnterNISPassword": "Immettere la password QR", - "Import": "Importare", - "NoNISAccounts": "Non hai ancora importato il tuo account XEM", - "ImportQR": "Importa utilizzando QR", - "InvalidQRErrorText": "Codice QR non valido", - "Balance": "Bilancio", - "CurrentBalance": "Bilancio corrente", - "StartOptInTitle": "Avvia opt-in", - "ReviewOptInTitle": "Visualizza opt-in", - "Next": "Passo successivo", - "HowToMultisig": "Questo account ha più firmatari. È necessario prima completare la procedura di attivazione per questo account per sbloccare l'opzione di attivazione per un account multisig.", - "BalanceWarning": "Gli unici fondi in questo account durante l'istantanea della rete sono i fondi che verranno aggiunti all'account Symbol all'avvio della rete.", - "StartOptInDescription": "Stai per avviare il processo di attivazione per un singolo account (non multisig). In questo modo, aggiungerai spazi dei nomi per l'account di destinazione. Questo processo include i seguenti passaggi:", - "StartOptInStep1": "Seleziona gli spazi dei nomi per l'attivazione", - "StartOptInStep2": "Passaggio 2. Crea un account Symbol", - "StartOptInStep3": "Passaggio 3. Eseguire il backup del proprio account Symbol", - "StartOptInStepFinal": "Passaggio 4: verifica e completa il processo di Opt-In", - "NamespacesOptInTitle": "Seleziona gli spazi dei nomi", - "NamespacesOptInDescription": "È ora possibile selezionare il proprio spazio dei nomi su NEM NIS1. Ogni spazio dei nomi scelto aumenta la tariffa per il processo di partecipazione.", - "SetupVrf": "Vai alla configurazione dei tasti VRF", - "VrfOptInTitle": "Aggiungi chiavi VRF", - "VrfOptInDescription": "Le chiavi VRF consentono al tuo account di raccogliere premi in blocco tramite la raccolta. Se prevedi di memorizzare più di 10.000 XYM nel tuo account dopo il lancio e desideri utilizzare la blockchain di Symbol, devi aggiungere le chiavi VRF al processo di Opt-In.", - "VrfOptInCheck": "Aggiungi chiavi VRF per la harvesting", - "VRFPublicKey": "Chiavi pubbliche VRF", - "VRFPrivateKey": "Chiavi private VRF", - "ReviewSymbolAccount": "Visualizza account Symbol", - "ReviewSymbolAccountTitle": "Passaggio 2. Controlla il tuo account Symbol", - "ReviewSymbolAccountDescription": "Per recuperare il tuo account Symbol, devi conoscere la tua passphrase mnemonica. Scrivilo e conservalo in un luogo sicuro, quindi esegui il backup del codice QR.", - "ReviewSymbolAddress": "Il tuo indirizzo Symbol:", - "ReviewSymbolMnemonics": "Il tuo Symbol mnemonico:", - "BackupSymbolAccountTitle": "Passaggio 3. Backup del tuo account Symbol", - "NotEnoughBalance": "Non ci sono fondi sufficienti nel tuo account", - "SendingOptIn": "Invio di opt-in", - "FinishOptIn": "Opt-In completa", - "FinishOptInDescription": "Questi sono i dati finali per il processo di opt-in. Controllali attentamente e fai clic sul pulsante Fine per completare il processo.", - "NISAddress": "Indirizzo account XEM:", - "SymbolAccount": "Indirizzo account Symbol:", - "Namespaces": "Spazi dei nomi:", - "NoNamespacesIncluded": "Spazi dei nomi non inclusi", - "VRFPublicKeyLabel": "Chiave pubblica VRF:", - "CostOfOperation": "Costo della commissione:", - "Understand1": "Ho eseguito il backup della mia passphrase mnemonica per il processo di Opt-In e comprendo che è mia responsabilità salvare e creare un backup", - "Understand2": "Comprendo che quando viene avviata la rete Symbol, solo i fondi XYM che detengo nel mio account XEM al momento dell'istantanea verranno trasferiti al mio account Symbol. Sono consapevole che qualsiasi modifica apportata al mio account XEM da ora fino all'istantanea si rifletterà nel mio saldo XYM all'avvio di Symbol.", - "Send": "Conferma opt-in", - "ConfirmOptInTitle": "Conferma opt-in", - "ConfirmButton": "Conferma", - "SuccessOptInTitle": "Successo", - "SuccessOptInDescription": "Questo account ha superato con successo il processo di Opt-In.", - "SummaryTitle": "Informazioni generali sul processo di Opt-In", - "SummaryDescription": "Hai completato il solito Opt-In (abbonamento), ecco le informazioni a riguardo", - "MultisigOptInDescription": "Per avviare l'Opt-In per gli account multisig, una delle parti correlate deve avviarlo tramite Nem Wallet (portafoglio desktop). Successivamente, puoi trovare questo account nell'elenco a discesa di seguito e chiamare il processo di Opt-In. Il processo di Opt-In per un account Multisig è completato quando tutte le parti firmatarie lo hanno firmato.", - "SelectMultisigAccount": "Seleziona Multisig per Opt-In", - "OptInNotInitiated": "Opt-In per questo account Multisig non è stata ancora avviata. Fallo con Nem Wallet", - "CosignerSignatures": "Firme dei firmatari", - "BalanceToBeIncluded": "Saldo da includere", - "CosigningOptIn": "Firma congiunta di Opt-In", - "CosignOptIn": "Cosign Opt-in", - "EnterPasswordToDecryptQR": "Immettere la password per decrittografare QR", - "Decrypt": "Decrypt", - "GoBack": "Torna indietro", - "OkButton": "Ок", - "OptInDoneStatus": "Opt-In confermato", - "MultisigIsCosignedStatus": "Ti sei autenticato", - "PendingAnotherSignaturesStatus": "Attendi le firme di altri co-firmatari", - "ImportErrorAccountAlreadyImported": "Account già importato", - "ImportErrorMultisigAccountNotAllowed": "La tua richiesta di aggiungere un account multisig deve essere completata insieme ad altri co-firmatari.", - "ImportErrorWrongOptedInAccount": "L'account è già incluso nel processo di attivazione, ma questo portafoglio non dispone di un account Symbol. Importare l'account Symbol corretto o utilizzare una chiave privata dell'account XEM diverso", - "ErrorCreatingAccount": "Impossibile creare l'account", - "NamespaceUnavailable": "Non disponibile" - }, "menu": { "news": "Notizia", "mosaics": "Mosaici", @@ -579,8 +477,6 @@ "blockExplorerNamespace": "Mostra lo spazio dei nomi in Blockchain Explorer" }, "home": { - "optInTitle": "Opt-In", - "optInDescription": "Il processo di attivazione (Opt-in) si aprirà dopo il lancio della blockchain di Symbol. Attendi la nuova versione del portafoglio.", "pendingSignatureTitle": "In attesa di firma", "pendingSignatureDescription": "C'è una transazione in attesa di firma", "alertTitle": "Errore", diff --git a/src/locales/translations/ja.json b/src/locales/translations/ja.json index 50b5a27..ab46d7b 100644 --- a/src/locales/translations/ja.json +++ b/src/locales/translations/ja.json @@ -267,108 +267,6 @@ "retryButton": "もう一度試す" } }, - "OptIn": { - "DashboardModalTitle": "メインネットはまだローンチしていません", - "DashboardModalDescription": "このアカウントは、NEM NIS1からの資金をSymbolにオプトインすることができます", - "DashboardModalButton": "オプトインに進む", - "WelcomeTitle": "Symbolへのオプトイン", - "WelcomeDescription": "オプトインの完了により、Symbolパブリック・ブロックチェーンのローンチにご参加いただく意思を表明したものとみなされます。これにより、スナップショット時のXEMアカウント残高と同数のXYM資金をご請求いただけるようになります(NEM NIS1ブロックチェーン上にお持ちのXEM残高は変わりません)。また、NEM NIS1のネームスペースを再度ご登録いただけば(すでにお持ちの場合)、Symbolの最初のブロックから使用を開始することができます。XEMアカウント残高の変更も可能で、お受け取りいただくXYMの数量はスナップショット時の残高により決定されます。", - "StoppedDescription": "オプトインが完了しました。アプリを更新して、最新ニュースを受け取りましょう。", - "NoAccountsImported": "まだXEMアカウントのインポートが完了していません。開始するには、アカウントをインポートしてください。", - "SelectNISAccount": "XEMアカウントを選択してください:", - "NormalOptIn": "オプトイン", - "MultisigOptIn": "マルチシグアカウントのオプトイン", - "ReviewNormalOptIn": "オプトインの再確認", - "CosignMultisigOptIn": "マルチシグアカウントのオプトインに連署する", - "SelectAccountTitle": "XEMアカウントの選択", - "NISAccountListTitle": "あなたのXEMアカウント", - "ConfigureAccount": "オプトインしたいアカウント(複数可)を選択してください", - "EmptyAccountList": "インポートしたアカウントがありません。下のボタンで、XEMアカウントをインポートしてください。その後、リストから選択したアカウントをオプトインするか、マルチシグアカウントの場合はオプトインに連署することができます。", - "AccountIsNotOptedIn": "このアカウントはまだオプトインされていません!", - "AccountIsOptedIn": "このアカウントは正常にオプトインされました。", - "AccountIsNotOptedInList": "ボタンを押してオプトインしてください!", - "AccountIsOptedInList": "オプトイン済", - "AccountIsOptedInMultisigList": "マルチシグアカウントの連署", - "SelectMultisigAccountTitle": "マルチシグXEMアカウントを選択", - "ImportNISAccount": "新しいアカウントのインポート", - "ChangeNISAccount": "アカウントの変更", - "PrivateKey": "プライベートキー", - "QR": " QRコード", - "ImportAccountPrivateKey": "プライベートキーでアカウントを追加", - "ImportAccountQR": "QRコードでアカウントを追加", - "ImportNISPrivateKey": "プライベートキーのインポート", - "EnterNISPrivateKey": "プライベートキーを入力", - "InvalidPrivateKey": "プライベートキーが無効です", - "EnterNISPassword": "QRパスワードを入力", - "Import": "インポート", - "NoNISAccounts": "まだXEMアカウントをインポートしていません", - "ImportQR": "QRコードを使用してインポート", - "InvalidQRErrorText": "QRコードが無効です", - "Balance": "残高:", - "CurrentBalance": "現在の残高:", - "StartOptInTitle": "オプトインの開始", - "ReviewOptInTitle": "オプトインの再確認", - "Next": "次へ", - "HowToMultisig": "このアカウントは、マルチシグの連署人アカウントです。まず、このアカウント用のオプトインを完了して、マルチシグアカウントのオプトイン連署のロックを解除してください。", - "BalanceWarning": "ローンチ時にSymbolアカウントに入る資金は、スナップショット時のブロック上に存在するこのアカウント内の資金のみに限られます。", - "StartOptInDescription": "これから始めるのは、マルチシグではなく通常のアカウントのオプトインプロセスです。これを実行すると、対象アカウントにネームスペースをオプトインすることになります。このプロセスは、以下の手順で行います:", - "StartOptInStep1": "オプトインするネームスペースを選択する", - "StartOptInStep2": "ステップ2:Symbolアカウントを作成する", - "StartOptInStep3": "ステップ3:Symbolアカウントをバックアップする", - "StartOptInStepFinal": "最終ステップ:オプトインを再確認して完了する", - "NamespacesOptInTitle": "ネームスペースの選択", - "NamespacesOptInDescription": "ここでは、NEM NIS1上に所有するネームスペース(複数可)をオプトインすることができます。これにより、Symbolブロックチェーン上に同一のネームスペース(複数可)のプレースホルダーを確保します。ネームスペースを1つ選択するごとに、オプトインプロセスの手数料がかかります。", - "SetupVrf": "VRFのセットアップへ", - "VrfOptInTitle": "VRFキーを含めるには", - "VrfOptInDescription": "VRFキーで、ブロックをハーベストして報酬を受けることができます。ローンチ後、アカウントに10,000 XYM以上を保有する予定があり、Symbolブロックチェーンでハーベストを行いたい場合は、VRFキーをオプトインプロセスに追加する必要があります。", - "VrfOptInCheck": "ハーベスト用のVRFキーを含める", - "VRFPublicKey": "VRFパブリックキー", - "VRFPrivateKey": "VRFプライベートキー", - "ReviewSymbolAccount": "Symbolアカウントの再確認", - "ReviewSymbolAccountTitle": "ステップ2:Symbolアカウントの再確認", - "ReviewSymbolAccountDescription": "これがあなたのSymbolアカウントです。このアカウントを復元する唯一の方法は、ニーモニックを使うことです。すべて書き取って安全な場所に保管してから、QRコードをバックアップしてください。", - "ReviewSymbolAddress": "あなたのSymbolアドレス:", - "ReviewSymbolMnemonics": "あなたのSymbol用ニーモニック:", - "BackupSymbolAccountTitle": "ステップ3:Symbolアカウントのバックアップ", - "NotEnoughBalance": "アカウントの残高が足りません", - "SendingOptIn": "オプトインの送信", - "FinishOptIn": "オプトインの完了", - "FinishOptInDescription": "これがオプトイン用の最終データです。注意深く再確認してから、完了を押してプロセスを終了してください。", - "NISAddress": "XEMアカウントのアドレス:", - "SymbolAccount": "Symbolアカウントのアドレス:", - "Namespaces": "ネームスペース:", - "NoNamespacesIncluded": "ネームスペースが含まれていません", - "VRFPublicKeyLabel": "VRFパブリックキー:", - "CostOfOperation": "操作費用:", - "Understand1": "私は、オプトインプロセスで使用したニーモニックによるパスフレーズのバックアップを取りました。また、それを保存してバックアップするのは自分の責任だということを理解しました。", - "Understand2": "私は、ローンチ時にSymbolのXYMアカウント残高に入る資金は、スナップショットの時点で自分のXEMアカウントに保有する資金のみだということを理解しました。また、これからスナップショットまでの間に自分のXEMアカウントに変更を加えた場合、Symbolのローンチ時に自分のXYMアカウント残高に反映されることを理解しました。", - "Send": "オプトインを確定", - "ConfirmOptInTitle": "オプトインの確定", - "ConfirmButton": "確定", - "SuccessOptInTitle": "成功しました", - "SuccessOptInDescription": "このアカウントはオプトインされました!", - "SummaryTitle": "オプトインのサマリー", - "SummaryDescription": "通常のオプトインを完了しました。こちらでご確認ください。", - "MultisigOptInDescription": "マルチシグアカウントのオプトインは、連署人の一人がNEMデスクトップウォレット(旧名称Nano Wallet)から開始しなければなりません。その後、下のドロップダウンリストにそのアカウントが表示され、オプトインの署名ができるようになります。マルチシグアカウントのオプトインは、連署人全員が署名した時点で完了します。", - "SelectMultisigAccount": "オプトインするマルチシグアカウントを選択してください。", - "OptInNotInitiated": "このマルチシグアカウントのオプトインは、まだ開始されていません。NEMデスクトップウォレット(旧名称Nano Wallet)を使用して開始してください。", - "CosignerSignatures": "連署人の署名", - "BalanceToBeIncluded": "含める残高", - "CosigningOptIn": "オプトインの連署", - "CosignOptIn": "オプトインに連署する", - "EnterPasswordToDecryptQR": "QRコードの解読用パスワードを入力", - "Decrypt": "解読", - "GoBack": "戻る", - "OkButton": "OK", - "OptInDoneStatus": "オプトインが完了しました", - "MultisigIsCosignedStatus": "ログインしました", - "PendingAnotherSignaturesStatus": "他の連署人の署名を待っています", - "ImportErrorAccountAlreadyImported": "アカウントはすでにインポートされています", - "ImportErrorMultisigAccountNotAllowed": "マルチシグアカウントのオプトイン申請は、連署人のアカウントと一緒に発行しなければなりません。", - "ImportErrorWrongOptedInAccount": "このアカウントはすでにオプトイン済です。ただし、このウォレット内のSymbolアカウントではありません。正しいSymbolアカウントをインポートするか、別のXEMアカウント用のプライベートキーを使用してください。", - "ErrorCreatingAccount": "アカウントを作成できませんでした", - "NamespaceUnavailable": "利用できません" - }, "menu": { "news": "ニュース", "mosaics": "モザイク", @@ -583,8 +481,6 @@ "blockExplorerNamespace": "ブロックエクスプローラでネームスペースを表示" }, "home": { - "optInTitle": "オプトイン", - "optInDescription": "Symbolローンチ後のオプトインはこちらから", "pendingSignatureTitle": "ペンディング署名", "pendingSignatureDescription": "署名待ちのペンディングトランザクションがありま", "alertTitle": "エラーが発生しました", diff --git a/src/locales/translations/ru.json b/src/locales/translations/ru.json index e349b33..8e210c7 100644 --- a/src/locales/translations/ru.json +++ b/src/locales/translations/ru.json @@ -267,108 +267,6 @@ "retryButton": "Повторить" } }, - "OptIn": { - "DashboardModalTitle": "Основная сеть (Mainnet) еще не запущена", - "DashboardModalDescription": "Вы можете внести средства с NEM NIS1 в Symbol аккаунт", - "DashboardModalButton": "ПЕРЕЙТИ К Опт-ин", - "WelcomeTitle": "Symbol Опт-ин", - "WelcomeDescription": "Выполнив процедуру Опт-ин, Вы выражаете своё желание участвовать в проекте Symbol с момента запуска основной сети. У Вас есть возможность получить средства XYM в эквиваленте баланса Вашего XEM-кошелька в момент Cнапшота (XEM средства не будут списаны). Также Вы можете перерегистрировать Ваши пространства имён NEM NIS1 (если Вы таковы имеете), начиная с первого блока Symbol. Вы можете вносить изменения в баланс XEM-кошелька, в процедуре Опт-ин имеет значение баланс на момент Снапшота.", - "StoppedDescription": "Опт-ин завершен. Вам следует обновить приложение, чтобы получать последние новости", - "NoAccountsImported": "Вы не импортировали аккаунт XEM. Для начала сделайте это.", - "SelectNISAccount": "Пожалуйста, выберите аккаунт XEM:", - "NormalOptIn": "Начать Опт-ин", - "MultisigOptIn": "Мультисиг Опт-ин", - "ReviewNormalOptIn": "Детали Опт-ин", - "CosignMultisigOptIn": "Подписать Мультисиг Опт-ин", - "SelectAccountTitle": "Выберите аккаунт XEM", - "NISAccountListTitle": "Ваши аккаунты XEM", - "ConfigureAccount": "Выберите аккаунты, для которых Вы хотите сделать Опт-ин процесс", - "EmptyAccountList": "Пожалуйста, импортируйте свой аккаунт XEM, используя кнопки ниже. Затем Вы можете произвести Опт-ин процесс или мультисиг Опт-ин процесс (если Ваш аккаунт подписант мультисиг аккаунта), выбрав аккаунт из списка.", - "AccountIsNotOptedIn": "Этот аккаунт еще не прошел Опт-ин процесс!", - "AccountIsOptedIn": "Этот аккаунт успешно прошел Опт-ин процесс", - "AccountIsNotOptedInList": "Нажмите, чтобы пройти Опт-ин!", - "AccountIsOptedInList": "Произведен Опт-ин", - "AccountIsOptedInMultisigList": "Подписать Мультсиг", - "SelectMultisigAccountTitle": "Выберите мультсиг аккаунт XEM", - "ImportNISAccount": "Импортируйте новый аккаунт", - "ChangeNISAccount": "Смените аккаунт", - "PrivateKey": "Приватный ключ", - "QR": "QR", - "ImportAccountPrivateKey": "Добавить аккаунт введя приватный ключ", - "ImportAccountQR": "Добавить аккаунт через QR", - "ImportNISPrivateKey": "Импортировать приватный ключ", - "EnterNISPrivateKey": "Введите приватный ключ", - "InvalidPrivateKey": "Неверный приватный ключ", - "EnterNISPassword": "Введите пароль QR", - "Import": "Импортировать", - "NoNISAccounts": "Вы еще не импортировали свой аккаунт XEM", - "ImportQR": "Импорт с использованием QR", - "InvalidQRErrorText": "Неверный QR-код", - "Balance": "Баланс", - "CurrentBalance": "Текущий баланс", - "StartOptInTitle": "Начать Опт-ин", - "ReviewOptInTitle": "Просмотр Опт-ин", - "Next": "Следующий Шаг", - "HowToMultisig": "Этот аккаунт подписант мультисиг аккаунта. Вы должны сначала завершить Опт-ин процесс для этого аккаунта, чтобы разблокировать Опт-ин для мультисиг аккаунта.", - "BalanceWarning": "Только средства на этом аккаунте во время снапшота - это средства, которые будут добавлены в аккаунт Symbol при запуске сети.", - "StartOptInDescription": "Вы собираетесь начать Опт-ин процесс, для одиночного аккаунта (не мультсиг). Сделав это, Вы добавите пространства имен для целевого аккаунта. Этот процесс включает следующие шаги:", - "StartOptInStep1": "Выберите пространства имен для Опт-ин", - "StartOptInStep2": "Шаг 2. Создайте Symbol аккаунт", - "StartOptInStep3": "Шаг 3. Создайте резервную копию Symbol аккаунта", - "StartOptInStepFinal": "Шаг 4: проверьте и завершите Опт-ин процесс", - "NamespacesOptInTitle": "Пространства имен", - "NamespacesOptInDescription": "Теперь Вы можете выбрать принадлежащие Вам пространства имен на NEM NIS1. Эти пространства имён будут перерегистрированы с первого блока Symbol. Каждое выбранное пространство имен увеличивает комиссию за Опт-ин процесс.", - "SetupVrf": "Далее", - "VrfOptInTitle": "VRF ключи", - "VrfOptInDescription": "VRF ключи позволяют Вашему аккаунту получать вознаграждение за новые блоки, с помощью харвестинга. Если Вы планируете хранить в своем аккаунте более 10 000 XYM после запуска и участвовать в харвестинге с первого блока, Вам необходимо добавить ключи VRF в процесс Опт-ин.", - "VrfOptInCheck": "Добавьте ключи VRF для харвестинга", - "VRFPublicKey": "Публичный ключ VRF", - "VRFPrivateKey": "Приватный ключ VRF", - "ReviewSymbolAccount": "Просмотреть аккаунт Symbol", - "ReviewSymbolAccountTitle": "Шаг 2. Проверьте аккаунт Symbol", - "ReviewSymbolAccountDescription": "Чтобы восстановить Ваш аккаунт Symbol, Вам необходимо знать Вашу мнемоническую кодовую фразу. Запишите ее и храните в безопасном месте, а затем сделайте резервную копию QR-кода.", - "ReviewSymbolAddress": "Ваш адрес Symbol:", - "ReviewSymbolMnemonics": "Ваша Symbol Мнемоника:", - "BackupSymbolAccountTitle": "Шаг 3. Резервное копирование аккаунта Symbol", - "NotEnoughBalance": "На Вашем счете недостаточно средств", - "SendingOptIn": "Отправка Отп-Ин", - "FinishOptIn": "Готово", - "FinishOptInDescription": "Это окончательные данные для Опт-ин процесса. Внимательно проверьте их и нажмите кнопку «Готово», чтобы завершить процесс.", - "NISAddress": "Адрес аккаунта XEM:", - "SymbolAccount": "Адрес аккаунта Symbol:", - "Namespaces": "Пространства имен:", - "NoNamespacesIncluded": "Отсутствуют", - "VRFPublicKeyLabel": "Публичный ключ VRF:", - "CostOfOperation": "Комиссия:", - "Understand1": "Я создал резервную копию своей кодовой фразы (мнемоники) для кошелька Symbol и я понимаю, что это моя обязанность сохранить и создать резервную копию", - "Understand2": "Я понимаю, что при запуске сети Symbol на мой аккаунт Symbol поступя средства XYM, которые я храню в моем аккаунте XEM на момент снапшота. Я понимаю, что любые изменения, которые я внесу в свой аккаунт XEM с этого момента и до снапшота, будут отражены в моем балансе XYM при запуске Symbol.", - "Send": "Подтверждаю", - "ConfirmOptInTitle": "Подтвердите Опт-ин", - "ConfirmButton": "Подтвердить", - "SuccessOptInTitle": "Успешно", - "SuccessOptInDescription": "Этот аккаунт прошел Опт-ин процесс.", - "SummaryTitle": "Детали Опт-ин", - "SummaryDescription": "Вы выполнили обычную Опт-ин (Подписку), вот информация о ней", - "MultisigOptInDescription": "Чтобы начать Опт-ин процесс для мультсиг аккаунтов, один из подписантов должен инициировать его через Nem Wallet (десктопный кошелек). После этого Вы можете подписать Опт-ин с Вашей стороны, найдя мультисиг аккаунт в раскрывающемся списке ниже. Процесс Опт-ин для Мультисиг аккаунта завершен, когда все подписанты подписали его.", - "SelectMultisigAccount": "Выберите Мультисиг аккаунт", - "OptInNotInitiated": "Опт-ин на этот Мультисиг акканут еще не инициирован. Пожалуйста, сделайте это с помощью Nem Wallet", - "CosignerSignatures": "Подписи подписантов", - "BalanceToBeIncluded": "Баланс", - "CosigningOptIn": "Подписание мультисиг Опт-ин", - "CosignOptIn": "Подписать Опт-ин", - "EnterPasswordToDecryptQR": "Введите пароль, чтобы расшифровать QR", - "Decrypt": "Расшифровать", - "GoBack": "Вернуться назад", - "OkButton": "Ок", - "OptInDoneStatus": "Опт-ин выполнен", - "MultisigIsCosignedStatus": "Вы подписали", - "PendingAnotherSignaturesStatus": "Ожидаются подписи от других соподписантов", - "ImportErrorAccountAlreadyImported": "Аккаунт уже импортирован", - "ImportErrorMultisigAccountNotAllowed": "Мультисиг Опт-ин инициируется с аккаунтов подписантов", - "ImportErrorWrongOptedInAccount": "Аккаунт уже включен в процесс Опт-ин, но он связан с другим кошельком Symbol. Войдите в правильный кошелёк Symbol или используйте другой приватный ключ аккаунта XEM", - "ErrorCreatingAccount": "Не удалось создать аккаунт", - "NamespaceUnavailable": "Недоступно" - }, "menu": { "news": "Новости", "mosaics": "Мозаики", @@ -585,8 +483,6 @@ "blockExplorerNamespace": "Показать пространство имен в Блокчейн Эксплорере" }, "home": { - "optInTitle": "Пост Лаунч Опт-Ин", - "optInDescription": "Нажмите здесь, чтобы получить доступ к главной панели", "pendingSignatureTitle": "Ожидает подписания", "pendingSignatureDescription": "Имеется транзакция, которая ожидает подписи", "alertTitle": "Ошибка", @@ -753,66 +649,5 @@ "currentAddress": "Ваш адрес", "alertNewVersionAppStoreTitle": "В App Store доступна новая версия мобильного кошелька Symbol", "alertNewVersionAppStoreBody": "Мы настоятельно рекомендуем Вам обновиться до последней версии!" - }, - "optin": { - "title": "Пост Лаунч Опт-Ин", - "welcomeDescription": "Список импортированных аккаунтов NIS1. Выберите один аккаунт или импортируйте свой аккаунт, чтобы проверить его статус и начать процесс опт-ин", - "importQR": "Импорт с использованием QR", - "importPrivateKey": "Импорт с использованием приватного ключа", - "qrPassword": "Расшифровать QR-код", - "decryptQRPlaceholder": "Введите пароль", - "decryptQR": "QR-пароль", - "invalidDecryptPassword": "Недействительный QR пароль", - "importAccount": "Импортировать аккаунт", - "importPrivateKeyTitle": "Импортировать приватный ключ", - "importPrivateKeyPlaceholder": "Введите свой приватный ключ", - "privateKey": "Приватный ключ", - "invalidPrivateKey": "Неверный приватный ключ", - "statusTitle": "Опт-Ин Статус", - "status1": "Опт-Ин не сделан. Вы можете начать требовать XYM", - "status2": "Опт-Ин в Ожидании. Ваш запрос на Опт-Ин был успешно создан.", - "status3": "Мультисиг Опт-ин не начат", - "status4": "Мультисиг опт-ин, ожидает подписи. Вы можете потребовать XYM для мультисиг аккаунта ", - "status4signed": "Мультисиг опт-ин ожидает подписи", - "status5signed": "Ожидание Мультисиг Опт-Ин. Ваш запрос на опт-ин был успешно создан.", - "status6": "Опт-Ин выполнен", - "start": "Начать Опт-Ин", - "review": "Обзор Опт-Ин", - "selectSymbolAccountTitle": "Выберите Symbol аккаунт", - "selectSymbolAccountDescription": "Выберите Symbol аккаунт для прохождения Опт-Ин процесса. Вот список аккаунтов в вашем кошельке:", - "selectCosignerSymbolDescription": "Выберите Symbol аккаунт, который совпадает с указанным выше аккаунтом:", - "destinationMultisigAccount": "Мультисиг адрес Symbol назначения:", - "enterDestinationMultisigAccount": "Введите публичный ключ целевой аккаунта Symbol. Этот аккаунт должна быть мультисиг и иметь такое же количество соподписантов, что и текущий мультисиг аккаунт NIS1 (NEM).", - "reviewTitle": "Обзор Опт-Ин", - "send": "Инициализация Опт-Ин процесса", - "selectedNISAddress": "Выбранный NIS1 адрес", - "selectMultisigSymbolAccountTitle": "Выбранный мультисиг аккаунт", - "selectedNISMultisigAddress": "Мультисиг адрес", - "optInStatus": "Статус Опт-Ин", - "optInAmount": "Количество Опт-Ин", - "optInDetailsDescription": "Пост Лаунч Опт-Ин для выбранного аккаунта", - "fee": "Комиссия за транзакцию NIS1 (NEM)", - "removeModalTitle": "Вы уверены?", - "removeModalDescription": "Вы уверены, что хотите удалить аккаунт NIS1 (NEM)", - "destination": "Назначение аккаунта Symbol", - "error0": "Неверная подпись полезной нагрузки", - "error1": "Недействительный целевой аккаунт", - "error2": "Недействительный целевой аккаунт со-подписанта", - "lastOptInFailed": "Последний Опт-Ин процесс был неудачным ", - "NISNode": "Ноды NIS1", - "selectAccount": "Выберите аккаунт", - "next": "Следующий шаг", - "getStarted": "Начать", - "presentationSlide1Title": "Добро пожаловать!", - "presentationSlide1Text": "Пропустили Опт-Ин Symbol? Не волнуйтесь! Ваши монеты все еще ждут вас.", - "presentationSlide2Title": "Приемлемый аккаунт", - "presentationSlide2Text": "Вы можете получить эквивалентное количество XYM для каждого утилити токена XEM, который находился во время снапшота сети на высоте блока #3,105,500.", - "presentationSlide3Title": "Получите свой XYM", - "presentationSlide3Text": "Импортируйте свои аккаунты сейчас, чтобы проверить их на соответствие требованиям; или запустите опт-ин процесс.", - "presentationSlide3Note": "Примечание: для успешного появления вашего XYM в вашем кошельке может потребоваться до тридцати (30) дней.", - "noBalance": "Вероятнее у вас было недостаточно XEM, когда был снапшот сети NIS1 (NEM) или вы уже получили свои монеты XYM, через предварительную опт-ин подписку.", - "postLaunchTransactionText": "Сумма, которую вы получили:", - "postLaunchTransactionTextUnconfirmed": "Сумма, которую вы получите:", - "publicKeyPlaceholder": "Публичный ключ должен состоять из 64 шестнадцатеричных символов." } } diff --git a/src/locales/translations/uk.json b/src/locales/translations/uk.json index 21888e2..0090303 100644 --- a/src/locales/translations/uk.json +++ b/src/locales/translations/uk.json @@ -266,107 +266,5 @@ "connectionError": "Помилка підключення", "retryButton": "Повторити" } - }, - "OptIn": { - "DashboardModalTitle": "Основна мережа Mainnet ще не запущена", - "DashboardModalDescription": "Ви можете внести активи з NEM NIS1 в Symbol аккаунт", - "DashboardModalButton": "ПЕРЕЙТИ ДО Опт-ін", - "WelcomeTitle": "Symbol Опт-ін", - "WelcomeDescription": "Виконавши процедуру Опт-ін, Ви висловлюєте своє бажання брати участь у проекті Symbol з моменту запуску основної мережі. У Вас є можливість отримати активи XYM в еквіваленті балансу Вашого XEM-гаманця в момент Cнапшота (XEM активи не будуть списані). Також Ви можете перереєструвати Ваші простори імен NEM NIS1 (якщо Ви такі маєте), починаючи з першого блоку Symbol. Ви можете вносити зміни в баланс XEM-гаманця, в процедурі Опт-ін має значення баланс на момент Снапшоту.", - "StoppedDescription": "Опт-ін завершено. Вам слід оновити додаток, щоб отримувати останні новини", - "NoAccountsImported": "Ви не імпортували аккаунт XEM. Для початку зробіть це.", - "SelectNISAccount": "Будь ласка, виберіть аккаунт XEM:", - "NormalOptIn": "Почати Опт-ін", - "MultisigOptIn": "Мультісіг Опт-ін", - "ReviewNormalOptIn": "Деталі Опт-ін", - "CosignMultisigOptIn": "Підписати Мультісіг Опт-ін", - "SelectAccountTitle": "Виберіть аккаунт XEM", - "NISAccountListTitle": "Ваші облікові записи XEM", - "ConfigureAccount": "Виберіть акаунти, для яких Ви хочете зробити Опт-ін процес", - "EmptyAccountList": "Будь ласка, імпортуйте свої аккаунти XEM, використовуючи кнопки нижче. Потім Ви можете зробити Опт-ін процес (або мультісіг Опт-ін процес, якщо Ваш акаунт підписант мультісіг аккаунта), вибравши акаунт зі списку.", - "AccountIsNotOptedIn": "Цей аккаунт ще не пройшов Опт-ін процес!", - "AccountIsOptedIn": "Цей аккаунт успішно пройшов Опт-ін процес", - "AccountIsNotOptedInList": "Натисніть, щоб пройти Опт-ін!", - "AccountIsOptedInList": "Зроблено Опт-ін процес", - "AccountIsOptedInMultisigList": "Підписати Мультсіг", - "SelectMultisigAccountTitle": "Виберіть мультсіг аккаунт XEM", - "ImportNISAccount": "Імпорт нового акаунту", - "ChangeNISAccount": "Змініть аккаунт", - "PrivateKey": "Приватний ключ", - "QR": "QR", - "ImportAccountPrivateKey": "Додати аккаунт через приватний ключ", - "ImportAccountQR": "Додати аккаунт через QR", - "ImportNISPrivateKey": "Імпортувати приватний ключ", - "EnterNISPrivateKey": "Введіть приватний ключ", - "InvalidPrivateKey": "Неправильний приватний ключ", - "EnterNISPassword": "Введіть пароль QR", - "Import": "Імпортувати", - "NoNISAccounts": "Ви ще не імпортували свій аккаунт XEM", - "ImportQR": "Імпорт з використанням QR", - "InvalidQRErrorText": "Неправильний QR-код", - "Balance": "Баланс", - "CurrentBalance": "Поточний баланс", - "StartOptInTitle": "Почати Опт-ін", - "ReviewOptInTitle": "Перегляд Опт-ін", - "Next": "Наступний Крок", - "HowToMultisig": "Цей аккаунт підписант мультісік аккаунта. Ви повинні спочатку завершити Опт-ін процес для цього облікового запису, щоб розблокувати Опт-ін для мультісіг аккаунта.", - "BalanceWarning": "Тільки баланс цього акаунта під час Снапшоту - це баланс, який буде додано в акаунт Symbol під час запуску мережі.", - "StartOptInDescription": "Ви збираєтеся почати Опт-ін процес, для одиночного аккаунта (НЕ мультсіг). Зробивши це, Ви додасте простору імен для цільового облікового запису. Цей процес включає наступні кроки:", - "StartOptInStep1": "Виберіть простору імен для Опт-ін", - "StartOptInStep2": "Крок 2. Створіть Symbol аккаунт", - "StartOptInStep3": "Крок 3. Створіть резервну копію Symbol аккаунта", - "StartOptInStepFinal": "Крок 4: перевірте і завершите Опт-ін процес", - "NamespacesOptInTitle": "Простору імен", - "NamespacesOptInDescription": "Тепер Ви можете вибрати належать Вам простору імен на NEM NIS1. Ці простору імен будуть перереєстровані з першого блоку Symbol. Кожне вбрання простір імен збільшує комісію за Опт-ін процес.", - "SetupVrf": "Далі", - "VrfOptInTitle": "VRF ключі", - "VrfOptInDescription": "VRF ключі дозволяють Вашому акаунту отримувати винагороду за нові блоки, за допомогою харвестінгу. Якщо Ви плануєте зберігати в своєму акаунті більше 10 000 XYM після запуску і приймати участь в харвестінгу з першого блоку, Вам необхідно додати ключі VRF в процес Опт- ін.", - "VrfOptInCheck": "Додайти ключі VRF для харвестінга", - "VRFPublicKey": "Публічний ключ VRF", - "VRFPrivateKey": "Приватний ключ VRF", - "ReviewSymbolAccount": "Переглянути аккаунт Symbol", - "ReviewSymbolAccountTitle": "Крок 2. Перевірте акаунт Symbol", - "ReviewSymbolAccountDescription": "Щоб відновити Ваш аккаунт Symbol, Вам необхідно знати Вашу мнемонічну кодову фразу. Запишіть її та зберігайте в безпечному місці, а потім зробіть резервну копію QR-коду.", - "ReviewSymbolAddress": "Ваша адреса Symbol:", - "ReviewSymbolMnemonics": "Ваша Symbol Мнемоніка:", - "BackupSymbolAccountTitle": "Крок 3. Створення резервних копій аккаунта Symbol", - "NotEnoughBalance": "На Вашому рахунку недостатньо коштів", - "SendingOptIn": "Відправлення ОТП-Ін", - "FinishOptIn": "Готово", - "FinishOptInDescription": "Це остаточні дані по Опт-ін процесу. Уважно перевірте їх і натисніть кнопку «Готово», щоб завершити процес.", - "NISAddress": "Аккаунт XEM:", - "SymbolAccount": "Аккаунт Symbol:", - "Namespaces": "Простори імен:", - "NoNamespacesIncluded": "Відсутні", - "VRFPublicKeyLabel": "Публічний ключ VRF:", - "CostOfOperation": "Комісія:", - "Understand1": "Я створив резервну копію своєї кодової фрази (мнемоніки) для гаманця Symbol і я розумію, що це мій обов'язок зберегти і створити резервну копію", - "Understand2": "Я розумію, що при запуску мережі Symbol на мій акаунт Symbol надійшли активи XYM, які я зберігаю в моєму акаунті XEM на момент Снапшоту. Я розумію, що будь-які зміни, які я внесу до свого облікового запису XEM з цього моменту і до Снапшоту, будуть відображені в моєму балансі XYM при запуску Symbol.", - "Send": "Підтверджую", - "ConfirmOptInTitle": "Підтвердіть Опт-ін", - "ConfirmButton": "Підтвердити", - "SuccessOptInTitle": "Успішно", - "SuccessOptInDescription": "Цей аккаунт пройшов Опт-ін процес.", - "SummaryTitle": "Деталі Опт-ін", - "SummaryDescription": "Ви виконали Опт-ін для цього аккаунту, нижче Ви можете знайти деталі", - "MultisigOptInDescription": "Щоб почати Опт-ін процес для мультсіг акаунтів, один з підписантів повинен ініціювати його через Nem Wallet (десктопний гаманець). Після цього Ви можете підписати Опт-ін з Вашого боку, знайшовши мультісіг аккаунт в списку нижче. Процес Опт-ін для Мультісіг аккаунта завершений, коли всі підписанти підписали його.", - "SelectMultisigAccount": "Виберіть Мультісіг аккаунт", - "OptInNotInitiated": "Опт-ін на цей Мультісіг акканут ще не ініційований. Будь ласка, зробіть це за допомогою Nem Wallet", - "CosignerSignatures": "Підписи підписантів", - "BalanceToBeIncluded": "Баланс", - "CosigningOptIn": "Підписання мультісіг Опт-ін", - "CosignOptIn": "Підписати Опт-ін", - "EnterPasswordToDecryptQR": "Введіть пароль, щоб розшифрувати QR", - "Decrypt": "Розшифрувати", - "GoBack": "Повернутися назад", - "OkButton": "Ок", - "OptInDoneStatus": "Опт-ін виконано", - "MultisigIsCosignedStatus": "Ви підписали", - "PendingAnotherSignaturesStatus": "Очікуються підписи від інших підписантів", - "ImportErrorAccountAlreadyImported": "Аккаунт вже імпортовано", - "ImportErrorMultisigAccountNotAllowed": "Мультісіг Опт-ін ініціюється з акаунтів підписантів", - "ImportErrorWrongOptedInAccount": "Аккаунт вже включений в процес Опт-ін, але він пов'язаний з іншим гаманцем Symbol. Увійдіть в правильний гаманець Symbol або використовуйте інший приватний ключ аккаунта XEM", - "ErrorCreatingAccount": "Не вдалося створити аккаунт", - "NamespaceUnavailable": "Недоступно" } } diff --git a/src/locales/translations/zh.json b/src/locales/translations/zh.json index cabd11f..585ea9e 100644 --- a/src/locales/translations/zh.json +++ b/src/locales/translations/zh.json @@ -267,108 +267,6 @@ "retryButton": "重试" } }, - "OptIn": { - "DashboardModalTitle": "主网尚未发布", - "DashboardModalDescription": "您可以用本账户从 NEM NIS1 将资金选择加入到 Symbol", - "DashboardModalButton": "转到选择加入", - "WelcomeTitle": "选择加入 Symbol", - "WelcomeDescription": "完成选择加入,即表示您有意参与到Symbol公共区块链发布之中。这将让您能申领相当于您XEM 账户在快照时的余额的 XYM 资金(NEM NIS1 区块链上您的 XEM 不会受到影响)。您还可以从第一个Symbol区块起重新注册您的 NEM NIS1 命名空间(如果有的话)。您还可以更改 XEM 帐户的余额,该帐户在快照时的余额将决定您能收到的 XYM 金额。", - "StoppedDescription": "选择加入已完成。请您更新应用程序以获取最新消息", - "NoAccountsImported": "您尚未导入 XEM 帐户。要开始,请导入一个XEM 帐户。", - "SelectNISAccount": "请选择一个 XEM 帐户:", - "NormalOptIn": "选择加入", - "MultisigOptIn": "多签名选择加入", - "ReviewNormalOptIn": "查看选择加入", - "CosignMultisigOptIn": "共同签名的多签名选择加入", - "SelectAccountTitle": "选择 XEM 帐户", - "NISAccountListTitle": "您的 XEM 帐户", - "ConfigureAccount": "选择您想要选择加入的帐户", - "EmptyAccountList": "未找到已导入的帐户。请用以下按钮导入 XEM 帐户。然后,您可通过从列表中选择一个多签名帐户,以选择加入它,或为之进行共同签署。", - "AccountIsNotOptedIn": "此帐户尚未选择加入!", - "AccountIsOptedIn": "此帐户已成功选择加入", - "AccountIsNotOptedInList": "点击以选择加入!", - "AccountIsOptedInList": "已选择加入", - "AccountIsOptedInMultisigList": "共同签署的多签名账户", - "SelectMultisigAccountTitle": "选择多签名 XEM 帐户", - "ImportNISAccount": "导入新帐户", - "ChangeNISAccount": "更改帐户", - "PrivateKey": "私钥", - "QR": "二维码", - "ImportAccountPrivateKey": "通过私钥添加帐户", - "ImportAccountQR": "通过二维码添加帐户", - "ImportNISPrivateKey": "导入私钥", - "EnterNISPrivateKey": "输入私钥", - "InvalidPrivateKey": "私钥无效", - "EnterNISPassword": "输入二维密码", - "Import": "导入", - "NoNISAccounts": "您尚未导入 XEM 帐户", - "ImportQR": "用二维码导入", - "InvalidQRErrorText": "二维码无效", - "Balance": "余额:", - "CurrentBalance": "当前余额:", - "StartOptInTitle": "开始选择加入", - "ReviewOptInTitle": "查看选择加入", - "Next": "下一个", - "HowToMultisig": "此帐户是多签名账户的同签署者。您应先完成此帐户的\"选择加入\",以解锁共同签名的多签名账户的选择加入。", - "BalanceWarning": "只有快照期间在此帐户中的资金会在Symbol发布时打入Symbol帐户中。", - "StartOptInDescription": "您将为常规的非多签名帐户启动选择加入过程。这样做之后,您将把命名空间选择加入到目标帐户。此过程涉及以下步骤:", - "StartOptInStep1": "选择要选择加入的命名空间", - "StartOptInStep2": "第 2 步:创建 Symbol帐户", - "StartOptInStep3": "第 3 步:备份 Symbol帐户", - "StartOptInStepFinal": "最终:查看并完成选择加入", - "NamespacesOptInTitle": "选择命名空间", - "NamespacesOptInDescription": "现在,您可将 NEM NIS1 拥有的命名空间进行选择加入。这就在 Symbol区块链上为相同的命名空间提供了一个占位符。所选择的每个命名空间都会增加选择加入所需的费用。", - "SetupVrf": "转到设置 VRF ", - "VrfOptInTitle": "包括 VRF 密钥", - "VrfOptInDescription": " VRF 密钥让您的帐户可以收获区块奖励。如果您打算在Symbol发布后在您帐户中持有超过 10000 个 XYM,并希望在 Symbol区块链上进行收获,则需将 VRF 密钥添加到选择加入流程中。", - "VrfOptInCheck": "包括用于收获的 VRF 密钥", - "VRFPublicKey": "VRF 公钥", - "VRFPrivateKey": "VRF 私钥", - "ReviewSymbolAccount": "查看 Symbol帐户", - "ReviewSymbolAccountTitle": "第 2 步:查看 Symbol帐户", - "ReviewSymbolAccountDescription": "这是您的 Symbol帐户,唯有知道助记词才能恢复账户。请在安全的地方写入全部助记词,然后备份二维码。", - "ReviewSymbolAddress": "您的 Symbol地址:", - "ReviewSymbolMnemonics": "您的 Symbol助记词:", - "BackupSymbolAccountTitle": "第 3 步:备份 Symbol帐户", - "NotEnoughBalance": "帐户没有足够的余额", - "SendingOptIn": "发送选择加入", - "FinishOptIn": "完成选择加入", - "FinishOptInDescription": "这是选择加入的最终数据。请仔细查看并点击\"完成\"以结束该过程。", - "NISAddress": "XEM 帐户地址:", - "SymbolAccount": "Symbol帐户地址:", - "Namespaces": "命名空间:", - "NoNamespacesIncluded": "没有包括命名空间", - "VRFPublicKeyLabel": " VRF 公钥:", - "CostOfOperation": "运营成本:", - "Understand1": "我已经备份了用于选择加入过程的助记词密码, 我已知道保存和备份助记词是我自己的责任", - "Understand2": "我知道,只有快照时我XEM帐户中持有的XEM资金将在Symbol发布时打入我的XYM帐户里。我知道,从现在起到快照之时,我对我 XEM 帐户所做的任何更改都将在 Symbol发布时反映在我的 XYM 余额中。", - "Send": "确认选择加入", - "ConfirmOptInTitle": "确认选择加入", - "ConfirmButton": "确认", - "SuccessOptInTitle": "成功", - "SuccessOptInDescription": "此帐户已选择加入!", - "SummaryTitle": "选择加入信息摘要", - "SummaryDescription": "您已完成正常的选择加入,这里是有关信息", - "MultisigOptInDescription": "要启动多签名帐户的\"选择加入\",其中一个共同签名帐户必须通过 Nano 钱包(桌面钱包)来启动。之后,您可在下面的下拉列表中找到此帐户,并签署\"选择加入\"。当所有共同签名人都签名后,多签名帐户的选择加入即可完成", - "SelectMultisigAccount": "请选择要加入的多签名帐户", - "OptInNotInitiated": "此多签名帐户的选择加入尚未启动。请用Nano钱包来启动", - "CosignerSignatures": "共同签名人的签名", - "BalanceToBeIncluded": "要包括的余额", - "CosigningOptIn": "共同签署选择加入", - "CosignOptIn": "共同签名的选择加入", - "EnterPasswordToDecryptQR": "输入密码以解密二维码", - "Decrypt": "解密", - "GoBack": "返回", - "OkButton": "确认", - "OptInDoneStatus": "选择加入已完成", - "MultisigIsCosignedStatus": "您已登录", - "PendingAnotherSignaturesStatus": "正在等待其他共同签名人的签名", - "ImportErrorAccountAlreadyImported": "已导入的帐户", - "ImportErrorMultisigAccountNotAllowed": "多签名选择加入请求必须与共同签名者帐户一起发出", - "ImportErrorWrongOptedInAccount": "该帐户已选择加入,但该 Symbol帐户不是此钱包中的帐户。请导入正确的 Symbol帐户或使用另一个 XEM 帐户私钥", - "ErrorCreatingAccount": "创建帐户失败", - "NamespaceUnavailable": "不可用" - }, "menu": { "news": "新闻", "mosaics": "马赛克", @@ -574,8 +472,6 @@ "blockExplorerNamespace": "在区块资源管理器中显示命名空间" }, "home": { - "optInTitle": "选择加入", - "optInDescription": "发布后的Opt-in即将开放。 Symbol启动后,请重新检查是否有新版本", "pendingSignatureTitle": "待定签名", "pendingSignatureDescription": "有一笔交易正在等待签名", "alertTitle": "错误", diff --git a/src/screens/Home.js b/src/screens/Home.js index 31d0deb..ecf0453 100644 --- a/src/screens/Home.js +++ b/src/screens/Home.js @@ -102,12 +102,6 @@ class Home extends Component { const { showWarning } = this.state; const notifications = []; - notifications.push({ - title: translate('home.optInTitle'), - description: translate('home.optInDescription'), - handler: () => Router.goToOptInWelcome({}, this.props.componentId), - }); - //notifications.push({ title: translate('home.optInTitle'), description: translate('home.optInDescription' )}); if (pendingSignature && !isMultisig) { notifications.push({ title: translate('home.pendingSignatureTitle'), diff --git a/src/screens/PostLaunchOptIn/NIS1AccountDetails.js b/src/screens/PostLaunchOptIn/NIS1AccountDetails.js deleted file mode 100644 index 9d58b8a..0000000 --- a/src/screens/PostLaunchOptIn/NIS1AccountDetails.js +++ /dev/null @@ -1,57 +0,0 @@ -import React, { Component } from 'react'; -import { StyleSheet } from 'react-native'; -import { GradientBackground, Section, TableView, TitleBar } from '@src/components'; -import { Router } from '@src/Router'; -import { connect } from 'react-redux'; -import GlobalStyles from '@src/styles/GlobalStyles'; - -const styles = StyleSheet.create({ - textButton: { - color: GlobalStyles.color.PRIMARY, - }, - qr: { - marginTop: 8, - marginBottom: 8, - padding: 8, - width: 120, - height: 120, - }, -}); - -type Props = {}; - -type State = { - loading: boolean, - networkKeys: { - vrf: any, - linked: any, - node: any, - }, -}; - -class NIS1AccountDetails extends Component { - state = {}; - - render = () => { - const { selectedAccount, componentId } = this.props; - - const data = { - address: selectedAccount.address, - publicKey: selectedAccount.publicKey, - privateKey: selectedAccount.privateKey, - }; - - return ( - - Router.goBack(this.props.componentId)} title="NIS1 Account Details" /> -
- -
-
- ); - }; -} - -export default connect(state => ({ - selectedAccount: state.optin.selectedNIS1Account, -}))(NIS1AccountDetails); diff --git a/src/screens/PostLaunchOptIn/OptInAccountDetails.js b/src/screens/PostLaunchOptIn/OptInAccountDetails.js deleted file mode 100644 index 1d31811..0000000 --- a/src/screens/PostLaunchOptIn/OptInAccountDetails.js +++ /dev/null @@ -1,245 +0,0 @@ -import React, { Component } from 'react'; -import { StyleSheet } from 'react-native'; -import { Button, Dropdown, GradientBackground, Icon, Row, Section, TitleBar, Trunc } from '@src/components'; -import { connect } from 'react-redux'; -import translate from '@src/locales/i18n'; -import Text from '@src/components/controls/Text'; -import store from '@src/store'; -import { Router } from '@src/Router'; -import NetworkService from '@src/services/NetworkService'; -import { PublicAccount } from 'symbol-sdk'; -import GlobalStyles from '@src/styles/GlobalStyles'; -import CopyView from '@src/components/controls/CopyView'; - -const styles = StyleSheet.create({ - list: { - marginBottom: 10, - }, - error: { - backgroundColor: 'red', - padding: 15, - borderRadius: 10, - marginTop: 5, - }, - status: { - padding: 15, - borderRadius: 10, - marginTop: 5, - }, - status1: { - backgroundColor: GlobalStyles.color.GREY4, - }, - status2: { - backgroundColor: GlobalStyles.color.ORANGE, - }, - status3: { - backgroundColor: GlobalStyles.color.GREY4, - }, - status4: { - backgroundColor: GlobalStyles.color.ORANGE, - }, - status5: { - backgroundColor: GlobalStyles.color.ORANGE, - }, - status6: { - backgroundColor: GlobalStyles.color.GREEN, - }, - amount: { - color: GlobalStyles.color.GREEN, - }, - mosaic: { - backgroundColor: GlobalStyles.color.WHITE, - borderRadius: 5, - paddingVertical: 8, - paddingHorizontal: 16, - }, -}); - -type Props = { - componentId: string, -}; - -type State = {}; - -class OptInAccountDetails extends Component { - state = {}; - - onChangeOptInAccount = account => { - const { selectedNIS1Account } = this.props; - if (account !== selectedNIS1Account.address) { - store.dispatchAction({ - type: 'optin/loadNIS1MultisigAccount', - payload: account, - }); - } else { - const { nis1Accounts } = this.props; - store.dispatchAction({ - type: 'optin/loadNIS1Account', - payload: nis1Accounts.map(account => account.address).indexOf(account), - }); - } - }; - - start = () => { - const { selectedOptInStatus } = this.props; - if (!selectedOptInStatus.isMultisig) - Router.goToOptInSelectSymbolAccount({ welcomeComponentId: this.props.welcomeComponentId }, this.props.componentId); - else if (!selectedOptInStatus.destination) - Router.goToOptinSelectSymbolMultisigDestination({ welcomeComponentId: this.props.welcomeComponentId }, this.props.componentId); - else Router.goToOptInFinish({ welcomeComponentId: this.props.welcomeComponentId }, this.props.componentId); - }; - - hasUserSigned = () => { - const { selectedOptInStatus, selectedNIS1Account } = this.props; - if (!selectedOptInStatus.isMultisig) return false; - const multisigDTOs = selectedOptInStatus.multisigDTOs; - return !!multisigDTOs[selectedNIS1Account.publicKey]; - }; - - render() { - const { - isLoading, - componentId, - selectedNIS1Account, - selectedNIS1MultisigAccount, - selectedOptInStatus, - optinAddresses, - network, - } = this.props; - const dataManager = { isLoading }; - const addresses = optinAddresses.map((address, index) => ({ - label: address + (index === 0 ? ' - Primary' : ' - Multisig'), - value: address, - })); - const networkType = NetworkService.getNetworkTypeFromModel({ - type: network, - }); - const publicAccount = selectedOptInStatus.destination - ? PublicAccount.createFromPublicKey(selectedOptInStatus.destination, networkType) - : null; - return ( - - Router.goBack(componentId)} /> - - {translate('optin.optInDetailsDescription')} - -
- {optinAddresses.length > 1 && ( -
- - {translate('optin.selectedNISAddress')} - - this.onChangeOptInAccount(address)} - /> -
- )} - {optinAddresses.length === 1 && ( -
- - {translate('optin.selectedNISAddress')} - - {selectedNIS1Account.address} -
- )} - {!!selectedOptInStatus.destination && ( -
- - {translate('optin.destination')} - - {publicAccount.address.plain()} -
- )} -
- - {translate('optin.optInStatus')} - - - {translate( - 'optin.status' + - selectedOptInStatus.status + - (this.hasUserSigned() && selectedOptInStatus.status !== 6 ? 'signed' : '') - )} - -
- {selectedOptInStatus.error != null && - (selectedOptInStatus.status === 1 || selectedOptInStatus.status === 3 || selectedOptInStatus.status === 4) && ( -
- - {translate('optin.lastOptInFailed')} - - - {translate('optin.error' + selectedOptInStatus.error)} - -
- )} -
- - {translate('optin.optInAmount')} - - - - - - {'symbol.xym'} - - - - {selectedOptInStatus.balance} - - -
- {selectedOptInStatus.balance < 2 && ( -
- - {translate('optin.noBalance')} - -
- )} - {(selectedOptInStatus.status === 1 || selectedOptInStatus.status === 3 || selectedOptInStatus.status === 4) && - !this.hasUserSigned() && - selectedOptInStatus.balance >= 2 && ( -
-
- )} -
-
- // - ); - } -} - -export default connect(state => ({ - nis1Accounts: state.optin.nis1Accounts, - optinAddresses: state.optin.optinAddresses, - selectedNIS1Account: state.optin.selectedNIS1Account, - selectedNIS1MultisigAccount: state.optin.selectedNIS1MultisigAccount, - selectedOptInStatus: state.optin.selectedOptInStatus, - isLoading: state.optin.loading, - network: state.network.selectedNetwork.type, -}))(OptInAccountDetails); diff --git a/src/screens/PostLaunchOptIn/OptInReview.js b/src/screens/PostLaunchOptIn/OptInReview.js deleted file mode 100644 index e532916..0000000 --- a/src/screens/PostLaunchOptIn/OptInReview.js +++ /dev/null @@ -1,220 +0,0 @@ -import React, { Component } from 'react'; -import { BackHandler, Linking, StyleSheet } from 'react-native'; -import { Button, Col, GradientBackground, Icon, Row, Section, TableView, TitleBar, Trunc } from '@src/components'; -import { connect } from 'react-redux'; -import translate from '@src/locales/i18n'; -import Text from '@src/components/controls/Text'; -import { Router } from '@src/Router'; -import AccountService from '@src/services/AccountService'; -import store from '@src/store'; -import { showPasscode } from '@src/utils/passcode'; -import GlobalStyles from '@src/styles/GlobalStyles'; -import NetworkService from '@src/services/NetworkService'; -import { PublicAccount } from 'symbol-sdk'; -import CheckableTextLink from '@src/components/molecules/CheckableTextLink'; - -const styles = StyleSheet.create({ - list: { - marginBottom: 10, - }, - amount: { - color: GlobalStyles.color.GREEN, - }, - amountNegative: { - color: GlobalStyles.color.RED, - }, - mosaic: { - backgroundColor: GlobalStyles.color.WHITE, - borderRadius: 5, - paddingVertical: 8, - paddingHorizontal: 16, - }, -}); - -type Props = { - componentId: string, -}; - -type State = {}; - -class OptInReview extends Component { - state = { - sent: false, - }; - - backHandler = BackHandler.addEventListener('hardwareBackPress', () => { - this.goBack(); - this.backHandler.remove(); - return true; - }); - - finish = () => { - store.dispatchAction({ type: 'optin/doOptIn' }); - this.setState({ sent: true }); - }; - - goBack = () => { - const { sent } = this.state; - if (!sent) { - Router.goBack(this.props.componentId); - } else { - Router.popTo(this.props.welcomeComponentId); - } - }; - - onOpenUrl = () => { - Linking.openURL('https://symbolplatform.com/terms-conditions/'); - }; - - render() { - const { - componentId, - selectedNIS1MultisigAccount, - selectedMultisigDestinationAccount, - selectedNIS1Account, - selectedOptInStatus, - selectedSymbolAccount, - network, - isLoading, - isError, - } = this.props; - const { sent, isTacAccepted } = this.state; - let data = {}; - if (selectedOptInStatus.isMultisig) { - const networkType = NetworkService.getNetworkTypeFromModel({ - type: network, - }); - const publicAccount = PublicAccount.createFromPublicKey(selectedMultisigDestinationAccount, networkType); - data = { - optinAddress: selectedNIS1Account.address, - optinNIS1Multisig: selectedNIS1MultisigAccount, - optinMultisigDestination: publicAccount.address.plain(), - // optinCosigner: AccountService.getAddressByAccountModelAndNetwork(selectedSymbolAccount, network), - }; - } else { - data = { - optinAddress: selectedNIS1Account.address, - optinDestination: AccountService.getAddressByAccountModelAndNetwork(selectedSymbolAccount, network), - }; - } - const hardCodedDataManager = { - isLoading, - isError: !!isError, - errorMessage: isError, - }; - - const termsConfirmText = translate('TERMS_agreeText'); - const links = { - terms: { - text: translate('TERMS_button'), - active: true, - href: this.onOpenUrl, - }, - privacy: { - text: translate('PRIVACY_button'), - active: true, - href: this.onOpenUrl, - }, - }; - - return ( - - this.goBack()} /> - {!sent && ( -
- -
- - {translate('optin.optInAmount')} - - - - - - {'symbol.xym'} - - - - {selectedOptInStatus.balance} - - -
-
- - {translate('optin.fee')} - - - - - {'XEM'} - - - - -{selectedOptInStatus.isMultisig ? 0.35 : 0.2} - - -
-
- - this.setState({ - isTacAccepted: !isTacAccepted, - }) - } - linksMap={links} - > - {termsConfirmText} - -
-
-
-
- )} - {sent && ( -
- -
- - - Success! - - - -
-
- - Opt In successfully sent - -
-
- - -
-
-
- )} -
- // - ); - } -} - -export default connect(state => ({ - selectedNIS1Account: state.optin.selectedNIS1Account, - selectedOptInStatus: state.optin.selectedOptInStatus, - selectedSymbolAccount: state.optin.selectedSymbolAccount, - selectedNIS1MultisigAccount: state.optin.selectedNIS1MultisigAccount, - selectedMultisigDestinationAccount: state.optin.selectedMultisigDestinationAccount, - symbolAccounts: state.wallet.accounts, - network: state.network.selectedNetwork.type, - isLoading: state.optin.loading, - isError: state.optin.error, -}))(OptInReview); diff --git a/src/screens/PostLaunchOptIn/OptInSelectSymbolAccount.js b/src/screens/PostLaunchOptIn/OptInSelectSymbolAccount.js deleted file mode 100644 index 487d0fb..0000000 --- a/src/screens/PostLaunchOptIn/OptInSelectSymbolAccount.js +++ /dev/null @@ -1,116 +0,0 @@ -import React, { Component } from 'react'; -import { FlatList, Image, StyleSheet, TouchableOpacity, View } from 'react-native'; -import { GradientBackground, Icon, ListContainer, ListItem, TitleBar, Trunc } from '@src/components'; -import { connect } from 'react-redux'; -import translate from '@src/locales/i18n'; -import Text from '@src/components/controls/Text'; -import store from '@src/store'; -import { Router } from '@src/Router'; -import NetworkService from '@src/services/NetworkService'; -import { PublicAccount } from 'symbol-sdk'; -import AccountService from '@src/services/AccountService'; - -const styles = StyleSheet.create({ - list: { - marginBottom: 10, - }, - icon: { - width: 30, - height: 30, - marginRight: 10, - }, - accountList: { - flexDirection: 'row', - alignItems: 'center', - }, - optionsIcon: { - width: 15, - height: 15, - paddingTop: 4, - }, - titleText: { paddingLeft: 30, paddingRight: 30, marginBottom: 20 }, -}); - -type Props = { - componentId: string, -}; - -type State = {}; - -class OptInSelectSymbolAccount extends Component { - state = {}; - - renderAccountItem = ({ item }) => { - const { network } = this.props; - return ( - - this.finish(item)} style={styles.accountList}> - - - {item.name} - {AccountService.getAddressByAccountModelAndNetwork(item, network)} - - - - - ); - }; - - finish = (account: string) => { - store.dispatch({ - type: 'optin/setSelectedSymbolAccount', - payload: account, - }); - Router.goToOptInFinish({ welcomeComponentId: this.props.welcomeComponentId }, this.props.componentId); - }; - - render() { - const { componentId, symbolAccounts, selectedOptInStatus, selectedMultisigDestinationAccount, network } = this.props; - const networkType = NetworkService.getNetworkTypeFromModel({ - type: network, - }); - const publicAccount = selectedOptInStatus.isMultisig - ? PublicAccount.createFromPublicKey(selectedMultisigDestinationAccount, networkType) - : null; - return ( - - Router.goBack(componentId)} /> - {!selectedOptInStatus.isMultisig && ( - - {translate('optin.selectSymbolAccountDescription')} - - )} - {selectedOptInStatus.isMultisig && ( - - - {translate('optin.destinationMultisigAccount')} - - - {publicAccount.address.plain()} - - - {translate('optin.selectCosignerSymbolDescription')} - - - )} - - '' + index + 'account'} - /> - - - // - ); - } -} - -export default connect(state => ({ - selectedNIS1Account: state.optin.selectedNIS1Account, - selectedMultisigDestinationAccount: state.optin.selectedMultisigDestinationAccount, - selectedOptInStatus: state.optin.selectedOptInStatus, - symbolAccounts: state.wallet.accounts, - network: state.network.selectedNetwork.type, - isLoading: state.optin.loading, -}))(OptInSelectSymbolAccount); diff --git a/src/screens/PostLaunchOptIn/OptInSelectSymbolMultisigDestination.js b/src/screens/PostLaunchOptIn/OptInSelectSymbolMultisigDestination.js deleted file mode 100644 index e4a12b9..0000000 --- a/src/screens/PostLaunchOptIn/OptInSelectSymbolMultisigDestination.js +++ /dev/null @@ -1,120 +0,0 @@ -import React, { Component } from 'react'; -import { StyleSheet } from 'react-native'; -import { Button, GradientBackground, Input, Section, TitleBar } from '@src/components'; -import { connect } from 'react-redux'; -import translate from '@src/locales/i18n'; -import Text from '@src/components/controls/Text'; -import store from '@src/store'; -import { Router } from '@src/Router'; -import NetworkService from '@src/services/NetworkService'; -import { PublicAccount } from 'symbol-sdk'; -import CopyView from '@src/components/controls/CopyView'; - -const styles = StyleSheet.create({ - list: { - marginBottom: 10, - }, - icon: { - width: 30, - height: 30, - marginRight: 10, - }, - accountList: { - flexDirection: 'row', - alignItems: 'center', - }, - optionsIcon: { - width: 15, - height: 15, - paddingTop: 4, - }, - titleText: { paddingLeft: 30, paddingRight: 30 }, -}); - -type Props = { - componentId: string, -}; - -type State = {}; - -class OptInSelectSymbolMultisigDestination extends Component { - state = {}; - - finish = () => { - const { multisigAccount } = this.state; - store.dispatch({ - type: 'optin/setSelectedMultisigDestinationAccount', - payload: multisigAccount.publicKey, - }); - // Router.goToOptInSelectSymbolAccount({ welcomeComponentId: this.props.welcomeComponentId }, this.props.componentId); - Router.goToOptInFinish({ welcomeComponentId: this.props.welcomeComponentId }, this.props.componentId); - }; - - onChangePubKey = pubkey => { - this.setState({ destination: pubkey }); - let publicAccount; - try { - const { selectedNetworkType } = this.props; - const networkType = NetworkService.getNetworkTypeFromModel({ - type: selectedNetworkType, - }); - publicAccount = PublicAccount.createFromPublicKey(pubkey, networkType); - } catch (e) {} - if (publicAccount && pubkey.length === 64) { - this.setState({ - multisigAccount: { - address: publicAccount.address.plain(), - publicKey: publicAccount.publicKey, - }, - }); - } else { - this.setState({ - multisigAccount: null, - }); - } - }; - - render() { - const { componentId } = this.props; - const { multisigAccount, destination } = this.state; - - return ( - - Router.goBack(componentId)} - /> -
-
- - {translate('optin.enterDestinationMultisigAccount')} - - this.onChangePubKey(v)} - nativePlaceholder={translate('optin.publicKeyPlaceholder')} - /> -
- {multisigAccount && ( -
- - {translate('optin.selectedNISMultisigAddress')} - - {multisigAccount.address} -
- )} -
-
-
-
- // - ); - } -} - -export default connect(state => ({ - selectedNetworkType: state.network.selectedNetwork.type, -}))(OptInSelectSymbolMultisigDestination); diff --git a/src/screens/PostLaunchOptIn/Presentation.js b/src/screens/PostLaunchOptIn/Presentation.js deleted file mode 100644 index b0fa44c..0000000 --- a/src/screens/PostLaunchOptIn/Presentation.js +++ /dev/null @@ -1,187 +0,0 @@ -import React, { Component } from 'react'; -import { Image, StyleSheet, View } from 'react-native'; -import { Button, Section, Text } from '@src/components'; -import Slider from '@src/components/molecules/Slider'; -import translate from '@src/locales/i18n'; - -const styles = StyleSheet.create({ - root: { - paddingLeft: 0, - paddingRight: 0, - }, - slider: { - flex: 1, - }, - - slide: { - flex: 0.8, - justifyContent: 'center', - alignItems: 'center', - width: '100%', - flexDirection: 'column', - }, - - content: { - justifyContent: 'center', - alignItems: 'center', - alignSelf: 'center', - flex: 0.8, - }, - - image: { - flex: 0.4, - alignSelf: 'center', - width: 200, - height: 200, - bottom: 0, - marginBottom: 16, - resizeMode: 'contain', - }, - - textContainer: { - flex: 0.4, - }, - - title: { - fontSize: 24, - fontFamily: 'NotoSans-SemiBold', - fontWeight: '600', - textAlign: 'center', - marginBottom: 16, - flexWrap: 'wrap', - paddingHorizontal: 32, - }, - - text: { - fontSize: 14, - fontWeight: '400', - textAlign: 'center', - paddingLeft: 32, - paddingRight: 32, - flexWrap: 'wrap', - marginBottom: 16, - }, - - note: { - fontSize: 10, - fontWeight: '400', - textAlign: 'center', - paddingLeft: 32, - paddingRight: 32, - flexWrap: 'wrap', - }, - - bottomContaner: { - flex: 0.2, - justifyContent: 'center', - alignItems: 'center', - padding: 16, - }, -}); - -type Props = { - componentId: string, -}; - -type State = {}; - -class Welcome extends Component { - constructor(props) { - super(props); - this.slider = React.createRef(); - } - - state = { - step: 0, - }; - - slides = [ - { - key: 'slide_1', - title: translate('optin.presentationSlide1Title'), - text: translate('optin.presentationSlide1Text'), - image: require('@src/assets/optin.png'), - }, - { - key: 'slide_2', - title: translate('optin.presentationSlide2Title'), - text: translate('optin.presentationSlide2Text'), - image: require('@src/assets/snapshot.png'), - }, - { - key: 'slide_3', - title: translate('optin.presentationSlide3Title'), - text: translate('optin.presentationSlide3Text'), - note: translate('optin.presentationSlide3Note'), - image: require('@src/assets/claim.png'), - }, - ]; - - componentDidMount() { - this.setState({ - step: 0, - }); - } - - onButtonPress() { - if (this.state.step < this.slides.length - 1) this.slider.current?.onNextPress(); - else this.props.onFinish(); - } - - getButtonText() { - return this.state.step < this.slides.length - 1 ? translate('optin.next') : translate('optin.getStarted'); - } - - onSlideChange(index) { - this.setState({ step: index }); - } - - renderItem = props => { - const { image, title, text, note = '' } = props; - - return ( - - - - - - {title} - - - {text} - - - {note} - - - - - ); - }; - - render() { - return ( -
- this.onSlideChange(index)} - showNextButton={false} - showDoneButton={false} - autoScrollInterval={60000} - hidePagination - /> -
-
-
-
-
- ); - } -} - -export default Welcome; diff --git a/src/screens/PostLaunchOptIn/Welcome.js b/src/screens/PostLaunchOptIn/Welcome.js deleted file mode 100644 index 1bc7697..0000000 --- a/src/screens/PostLaunchOptIn/Welcome.js +++ /dev/null @@ -1,406 +0,0 @@ -import React, { Component } from 'react'; -import { FlatList, Image, StyleSheet, TouchableOpacity, View } from 'react-native'; -import { - Button, - FadeView, - GradientBackground, - Icon, - Input, - ListContainer, - ListItem, - OptionsMenu, - Section, - TitleBar, -} from '@src/components'; -import { connect } from 'react-redux'; -import translate from '@src/locales/i18n'; -import Text from '@src/components/controls/Text'; -import Presentation from '@src/screens/PostLaunchOptIn/Presentation'; -import store from '@src/store'; -import { Router } from '@src/Router'; -import BasicModal from '@src/components/molecules/BasicModal'; -import nem from 'nem-sdk'; -import Trunc from '@src/components/organisms/Trunc'; -import GlobalStyles from '@src/styles/GlobalStyles'; -import ConfirmModal from '@src/components/molecules/ConfirmModal'; - -const styles = StyleSheet.create({ - list: { - marginBottom: 10, - marginTop: 10, - }, - content: { - flex: 1, - }, - icon: { - width: 30, - height: 30, - marginRight: 10, - }, - accountList: { - flexDirection: 'row', - alignItems: 'center', - }, - warning: { - color: GlobalStyles.color.RED, - fontSize: 10, - marginTop: 5, - marginLeft: 5, - }, - optionsIcon: { - width: 34, - height: 40, - alignSelf: 'flex-end', - paddingTop: 4, - paddingRight: 10, - marginRight: -16, - }, -}); - -type Props = { - componentId: string, -}; - -type State = {}; - -class Welcome extends Component { - state = { - importPrivateKey: '', - validPrivateKey: false, - isPrivateKeyModalOpen: false, - isImportQRModalOpen: false, - importQRPassword: '', - validQRPassword: false, - encryptedQRWallet: null, - loadingQRPassword: false, - isRemoveModalOpen: false, - removeSelectedAccount: null, - isPresentationShown: false, - }; - - componentDidMount() { - store.dispatchAction({ type: 'optin/load' }).then(() => { - this.setState({ - isPresentationShown: this.props.nis1Accounts.length > 0, - }); - }); - } - - onPresentationFinish() { - this.setState({ isPresentationShown: true }); - } - - handleOpenShowDetails = item => { - store.dispatch({ type: 'optin/setSelectedNIS1Account', payload: item }); - Router.goToNIS1AccountDetails({}, this.props.componentId); - }; - - handleDeleteAccount = () => { - const { removeSelectedAccount } = this.state; - store.dispatchAction({ - type: 'optin/removeNIS1Account', - payload: removeSelectedAccount, - }); - this.setState({ - isRemoveModalOpen: false, - removeSelectedAccount: null, - }); - }; - - renderAccountItem = ({ item, index }) => { - const options = [ - { - iconName: 'wallet_filled_light', - label: translate('sidebar.details'), - onPress: () => this.handleOpenShowDetails(item), - }, - { - iconName: 'delete_light', - label: translate('sidebar.remove'), - onPress: () => - this.setState({ - isRemoveModalOpen: true, - removeSelectedAccount: item, - }), - }, - ]; - return ( - - this.goToOptIn(index)} style={styles.accountList}> - - - {item.address} - - - - - - - ); - }; - - goToOptIn = async (index: number) => { - const result = await store.dispatchAction({ - type: 'optin/loadNIS1Account', - payload: index, - }); - if (result) Router.goToOptInAccountDetails({ welcomeComponentId: this.props.componentId }, this.props.componentId); - }; - - onPrivateKeyChange = (text: string) => { - const valid = (text.length === 64 || (text.length === 66 && text.startsWith('00'))) && nem.utils.helpers.isPrivateKeyValid(text); - this.setState({ - importPrivateKey: text, - validPrivateKey: valid, - }); - }; - - onQRPasswordChange = (text: string) => { - this.setState({ - loadingQRPassword: true, - }); - const { encryptedQRWallet } = this.state; - const encryptedData = encryptedQRWallet.data; - const salt = nem.crypto.js.enc.Hex.parse(encryptedData.salt); - const encrypted = encryptedData.priv_key; - // generate key - const key = nem.crypto.js - .PBKDF2(text, salt, { - keySize: 256 / 32, - iterations: 2000, - }) - .toString(); - // separated from priv_key iv and cipherdata - const iv = encrypted.substring(0, 32); - const encryptedPrvKey = encrypted.substring(32, 128); - // separated vh from priv_key iv and cipherdata - const obj = { - ciphertext: nem.crypto.js.enc.Hex.parse(encryptedPrvKey), - iv: nem.utils.convert.hex2ua(iv), - key: nem.utils.convert.hex2ua(key.toString()), - }; - const decrypt = nem.crypto.helpers.decrypt(obj); - const valid = !(decrypt === '' || (decrypt.length !== 64 && decrypt.length !== 66)); - this.setState({ - loadingQRPassword: false, - importQRPassword: text, - validQRPassword: valid, - importPrivateKey: decrypt, - }); - }; - - onImportPrivateKey = async () => { - const { importPrivateKey } = this.state; - await store.dispatchAction({ - type: 'optin/addPrivateKey', - payload: importPrivateKey, - }); - this.setState({ - isPrivateKeyModalOpen: false, - importPrivateKey: '', - validPrivateKey: false, - }); - }; - - onImportQRPassword = async () => { - const { importPrivateKey } = this.state; - await store.dispatchAction({ - type: 'optin/addPrivateKey', - payload: importPrivateKey, - }); - this.setState({ - importPrivateKey: '', - isImportQRModalOpen: false, - importQRPassword: '', - validQRPassword: false, - encryptedQRWallet: null, - }); - }; - - onPrivateKeyQRScanned = async res => { - try { - const data = JSON.parse(res.data); - if (data.v && data.type && data.data.name && data.data.priv_key && data.data.salt) { - this.setState({ - encryptedQRWallet: data, - isImportQRModalOpen: true, - }); - } else { - Router.showMessage({ - message: 'Invalid QR code', - type: 'danger', - }); - } - } catch (e) { - Router.showMessage({ - message: 'Invalid QR code', - type: 'danger', - }); - } - }; - - render() { - const { nis1Accounts, isLoading, componentId, error } = this.props; - const dataManager = { - isLoading, - errorMessage: error, - isError: error !== null, - }; - const { - isPrivateKeyModalOpen, - importPrivateKey, - validPrivateKey, - isImportQRModalOpen, - importQRPassword, - validQRPassword, - loadingQRPassword, - isRemoveModalOpen, - isPresentationShown, - } = this.state; - - return ( - - Router.goBack(componentId)} /> - {isPresentationShown && ( - - - {translate('optin.welcomeDescription')} - - - '' + index + 'account'} - /> - - -
-
-
-
-
-
- )} - {!isPresentationShown && this.onPresentationFinish()} />} - - this.setState({ - isImportQRModalOpen: false, - importPrivateKey: '', - importQRPassword: '', - }) - } - > -
-
- this.onQRPasswordChange(pw)} - /> - {!validQRPassword && ( - - {translate('optin.invalidDecryptPassword')} - - )} -
-
-
-
-
- - this.setState({ - isPrivateKeyModalOpen: false, - importPrivateKey: '', - }) - } - > -
-
- this.onPrivateKeyChange(pk)} - /> - {!validPrivateKey && ( - - {translate('optin.invalidPrivateKey')} - - )} -
-
-
-
-
- this.setState({ isRemoveModalOpen: false })} - onSuccess={() => this.handleDeleteAccount()} - /> -
- // - ); - } -} - -export default connect(state => ({ - error: state.optin.error, - nis1Accounts: state.optin.nis1Accounts, - isLoading: state.optin.loading, -}))(Welcome); diff --git a/src/screens/Settings/index.js b/src/screens/Settings/index.js index 2f02eb6..240721b 100644 --- a/src/screens/Settings/index.js +++ b/src/screens/Settings/index.js @@ -13,7 +13,6 @@ import { SettingsPasscodeSelector, SymbolPageView, } from '@src/components'; -import SettingsNIS1NodeSelector from '@src/components/settings/SettingsNIS1NodeSelector'; export default class Settings extends Component { render() { @@ -31,7 +30,6 @@ export default class Settings extends Component { > - diff --git a/src/services/OptInService.js b/src/services/OptInService.js deleted file mode 100644 index 7d07c92..0000000 --- a/src/services/OptInService.js +++ /dev/null @@ -1,191 +0,0 @@ -import nem from 'nem-sdk'; -import { NIS1AccountSecureStorage } from '@src/storage/persistence/NIS1AccountSecureStorage'; -import type { AppNetworkType } from '@src/storage/models/NetworkModel'; -import { - MultisigCache, - NormalCache, - OptinConfig, - StatusCode, - broadcastDTO, - buildMultisigDTO, - buildSimpleDTO, - status, -} from 'symbol-post-launch-optin-module'; -import { NetworkType } from 'symbol-sdk'; -import type { AccountModel } from '@src/storage/models/AccountModel'; -import store from '@src/store'; - -export type NIS1Account = { - privateKey: string, - publicKey: string, - address: string, -}; - -export default class OptInService { - /** - * Get NIS1 account private keys - */ - static async getNISAccounts(network: AppNetworkType): Promise { - const privateKeys = (await NIS1AccountSecureStorage.retrieveAccounts()) || []; - return privateKeys.map(privateKey => { - const keyPair = nem.crypto.keyPair.create(privateKey); - const publicKey = keyPair.publicKey.toString(); - const address = nem.utils.format.pubToAddress( - publicKey, - network === 'testnet' ? nem.model.network.data.testnet.id : nem.model.network.data.mainnet.id - ); - return { - address: address, - privateKey: privateKey, - publicKey: publicKey, - }; - }); - } - - /** - * Add nis account - * @param privateKey - * @returns {Promise} - */ - static async addNISAccount(privateKey: string): Promise { - return NIS1AccountSecureStorage.saveAccount(privateKey); - } - - /** - * Add nis account - * @returns {Promise} - * @param account - */ - static async removeNIS1Account(account: NIS1Account): Promise { - return NIS1AccountSecureStorage.removeAccount(account.privateKey); - } - - /** - * Get NIS1 account balance - */ - static async getNISAccountOptInBalance(address: string): Promise { - return new Promise(resolve => { - fetch(this.getOptInConfig('mainnet').snapshotInfoApi + 'balance?address=' + address) - .then(rawBalance => { - rawBalance.json().then(res => { - resolve(res.amount); - }); - }) - .catch(() => { - resolve(0); - }); - }); - } - - static async fetchNIS1Data(address: string, network: AppNetworkType): Promise { - return nem.com.requests.account.data(this.getOptInConfig(network).NIS.endpoint, address); - } - - /** - * Get NIS1 account balance - */ - static async getOptInStatus( - address: string, - network: AppNetworkType - ): Promise<{ - balance: number, - status: StatusCode, - error: string | null, - destination: string | null, - }> { - const balance = await this.getNISAccountOptInBalance(address); - const accountData = await this.fetchNIS1Data(address, network); - if (accountData.meta.cosignatories.length > 0) { - const cache = new MultisigCache(accountData, this.getOptInConfig(network)); - await cache.loadFromChain(); - const statusCode = await status(accountData, this.getOptInConfig(network), cache); - const destination = cache.multisigDestinationPublicKey; - return { - isMultisig: true, - balance: balance, - status: statusCode, - error: cache.errorDTO ? cache.errorDTO.code : null, - destination: destination, - multisigDTOs: cache.multisigDTOs, - }; - } else { - const cache = new NormalCache(accountData, this.getOptInConfig(network)); - await cache.loadFromChain(); - const statusCode = await status(accountData, this.getOptInConfig(network), cache); - return { - isMultisig: false, - balance: balance, - status: statusCode, - error: cache.errorDTO ? cache.errorDTO.code : null, - destination: cache.simpleDTO ? cache.simpleDTO.destination : null, - }; - } - } - - /** - * Get NIS1 account balance - */ - static async doSimpleOptIn(nis1Account: NIS1Account, destination: AccountModel, network: AppNetworkType): Promise { - const simpleDTO = buildSimpleDTO(destination.id); - const result = await broadcastDTO(nis1Account.privateKey, simpleDTO, this.getOptInConfig(network)); - if (result !== 'SUCCESS') { - throw new Error(result); - } - } - - /** - * Get NIS1 account balance - */ - static async doMultisigOptIn( - origin: string, - destination: string, - cosigner: string, - nis1CosignerPrivateKey: string, - network: AppNetworkType - ): Promise { - const multisigDTO = buildMultisigDTO(origin, destination); - const result = await broadcastDTO(nis1CosignerPrivateKey, multisigDTO, this.getOptInConfig(network)); - if (result !== 'SUCCESS') { - throw new Error(result); - } - } - - static getOptInConfig(network: AppNetworkType): OptinConfig { - switch (network) { - case 'testnet': - return { - NIS: { - endpoint: { - host: store.getState().settings.selectedNISNode, - port: 7890, - }, - network: nem.model.network.data.testnet.id, - configAddress: 'TAXF5HUGBKGSC3MOJCRXN5LLKFBY43LXI3DE2YLS', - errorAccountPublicKey: 'dd215238aab71f375fc79455e2fe0e3c4f96ba7dadd5f3c102979c6958b9c337', - }, - SYM: { - network: NetworkType.TEST_NET, - generationHash: '57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6', - }, - snapshotInfoApi: 'http://post-optin.symboldev.com/', - }; - case 'mainnet': - return { - NIS: { - endpoint: { - host: store.getState().settings.selectedNISNode, - port: 7890, - }, - network: nem.model.network.data.mainnet.id, - configAddress: 'NAQ7RCYM4PRUAKA7AMBLN4NPBJEJMRCHHJYAVA72', - errorAccountPublicKey: 'dd215238aab71f375fc79455e2fe0e3c4f96ba7dadd5f3c102979c6958b9c337', - }, - SYM: { - network: NetworkType.MAIN_NET, - generationHash: '57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6', - }, - snapshotInfoApi: 'http://post-optin.symboldev.com/', - }; - } - } -} diff --git a/src/storage/persistence/NIS1AccountSecureStorage.js b/src/storage/persistence/NIS1AccountSecureStorage.js deleted file mode 100644 index b3b7d2f..0000000 --- a/src/storage/persistence/NIS1AccountSecureStorage.js +++ /dev/null @@ -1,56 +0,0 @@ -import { BaseSecureStorage } from '@src/storage/persistence/BaseSecureStorage'; - -export class NIS1AccountSecureStorage extends BaseSecureStorage { - /** NIS1ACCOUNTS KEY **/ - static NIS1ACCOUNTS_KEY = 'nisaccounts'; - - /** - * Save account - * @returns {Promise} - * @param privateKey - */ - static async saveAccount(privateKey: string): Promise { - let accounts = []; - try { - const raw = await this.secureRetrieveAsync(this.NIS1ACCOUNTS_KEY); - accounts = JSON.parse(raw); - } catch (e) {} - if (!accounts) accounts = []; - if (accounts.find(account => account.privateKey === privateKey)) return accounts; - accounts.push({ privateKey: privateKey, address: '' }); - await this.secureSaveAsync(this.NIS1ACCOUNTS_KEY, JSON.stringify(accounts)); - return accounts; - } - - /** - * Retrieves accounts - * @returns {Promise} - */ - static async removeAccount(privateKey: string): Promise { - const privateKeys = await this.retrieveAccounts(); - const filtered = privateKeys.filter(pk => pk !== privateKey); - const accountsFiltered = filtered.map(pk => ({ privateKey: pk })); - await this.secureSaveAsync(this.NIS1ACCOUNTS_KEY, JSON.stringify(accountsFiltered)); - } - - /** - * Retrieves accounts - * @returns {Promise} - */ - static async retrieveAccounts(): Promise { - try { - const accounts = JSON.parse(await this.secureRetrieveAsync(this.NIS1ACCOUNTS_KEY)); - return accounts.map(account => account.privateKey); - } catch (e) { - return []; - } - } - - /** - * Clear all keys - * @returns {Promise} - */ - static clear() { - return this.removeKey(this.NIS1ACCOUNTS_KEY); - } -} diff --git a/src/store/index.js b/src/store/index.js index ec04285..aaf0ef9 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -10,7 +10,6 @@ import harvesting from '@src/store/harvesting'; import addressBook from '@src/store/addressBook'; import ListenerService from '@src/services/ListenerService'; import transaction from '@src/store/transaction'; -import optin from '@src/store/optin'; const modules = { // market, @@ -23,7 +22,6 @@ const modules = { harvesting, addressBook, transaction, - optin, }; const createModuleReducer = (module, state = {}, action) => { diff --git a/src/store/optin.js b/src/store/optin.js deleted file mode 100644 index f979541..0000000 --- a/src/store/optin.js +++ /dev/null @@ -1,166 +0,0 @@ -import OptInService from '@src/services/OptInService'; - -export default { - namespace: 'optin', - state: { - nis1Accounts: [], - nisAddressOptInBalance: {}, - selectedNIS1Account: null, - optinAddresses: [], - selectedNIS1MultisigAccount: null, - selectedOptInStatus: { - isMultisig: undefined, - balance: undefined, - status: undefined, - error: undefined, - destination: undefined, - }, - selectedSymbolAccount: null, - selectedMultisigDestinationAccount: null, - error: null, - loading: true, - }, - mutations: { - setNisAddressOptInBalance(state, payload) { - state.optin.nisAddressOptInBalance = payload; - return state; - }, - setNisAccounts(state, payload) { - state.optin.nis1Accounts = payload; - return state; - }, - setOptinAddresses(state, payload) { - state.optin.optinAddresses = payload; - return state; - }, - setSelectedNIS1MultisigAccount(state, payload) { - state.optin.selectedNIS1MultisigAccount = payload; - return state; - }, - setSelectedMultisigDestinationAccount(state, payload) { - state.optin.selectedMultisigDestinationAccount = payload; - return state; - }, - setLoading(state, payload) { - state.optin.loading = payload; - return state; - }, - setError(state, payload) { - state.optin.error = payload; - return state; - }, - setSelectedNIS1Account(state, payload) { - state.optin.selectedNIS1Account = payload; - return state; - }, - setSelectedOptInStatus(state, payload) { - state.optin.selectedOptInStatus = payload; - return state; - }, - setSelectedSymbolAccount(state, payload) { - state.optin.selectedSymbolAccount = payload; - return state; - }, - }, - actions: { - load: async ({ commit, state }) => { - commit({ type: 'optin/setError', payload: null }); - commit({ type: 'optin/setLoading', payload: true }); - const nis1Accounts = await OptInService.getNISAccounts(state.network.selectedNetwork.type); - commit({ type: 'optin/setNisAccounts', payload: nis1Accounts }); - commit({ type: 'optin/setLoading', payload: false }); - }, - addPrivateKey: async ({ dispatchAction }, payload) => { - await OptInService.addNISAccount(payload); - await dispatchAction({ type: 'optin/load' }); - }, - removeNIS1Account: async ({ dispatchAction }, payload) => { - await OptInService.removeNIS1Account(payload); - await dispatchAction({ type: 'optin/load' }); - }, - loadNIS1Account: async ({ commit, state }, payload) => { - commit({ type: 'optin/setLoading', payload: true }); - commit({ type: 'optin/setError', payload: null }); - const selectedAccount = state.optin.nis1Accounts[payload]; - commit({ - type: 'optin/setSelectedNIS1Account', - payload: selectedAccount, - }); - commit({ - type: 'optin/setSelectedNIS1MultisigAccount', - payload: null, - }); - const accountData = await OptInService.fetchNIS1Data(selectedAccount.address, state.network.selectedNetwork.type); - if (accountData.meta.cosignatories.length > 0) { - commit({ type: 'optin/setLoading', payload: false }); - commit({ - type: 'optin/setError', - payload: 'This account is multisig, in order to do multisig opt-in you must use the cosigner accounts', - }); - return false; - } - const optinAddresses = [selectedAccount.address, ...accountData.meta.cosignatoryOf.map(data => data.address)]; - commit({ - type: 'optin/setOptinAddresses', - payload: optinAddresses, - }); - const optinData = await OptInService.getOptInStatus(selectedAccount.address, state.network.selectedNetwork.type); - commit({ - type: 'optin/setSelectedOptInStatus', - payload: optinData, - }); - commit({ type: 'optin/setLoading', payload: false }); - return true; - }, - loadNIS1MultisigAccount: async ({ commit, state }, payload) => { - commit({ type: 'optin/setLoading', payload: true }); - commit({ type: 'optin/setError', payload: null }); - commit({ - type: 'optin/setSelectedNIS1MultisigAccount', - payload: payload, - }); - const optinData = await OptInService.getOptInStatus(payload, state.network.selectedNetwork.type); - commit({ - type: 'optin/setSelectedMultisigDestinationAccount', - payload: optinData.destination, - }); - commit({ - type: 'optin/setSelectedOptInStatus', - payload: optinData, - }); - commit({ type: 'optin/setLoading', payload: false }); - }, - doOptIn: async ({ commit, state }) => { - commit({ type: 'optin/setLoading', payload: true }); - try { - if (state.optin.selectedOptInStatus.isMultisig) { - const accountData = await OptInService.fetchNIS1Data( - state.optin.selectedNIS1MultisigAccount, - state.network.selectedNetwork.type - ); - const nis1MultisigPublicKey = accountData.account.publicKey; - const multisigDestinationPublicKey = state.optin.selectedMultisigDestinationAccount; - const cosignerDestinationPublicKey = ''; - const nis1CosignerPrivateKey = state.optin.selectedNIS1Account; - await OptInService.doMultisigOptIn( - nis1MultisigPublicKey, - multisigDestinationPublicKey, - cosignerDestinationPublicKey, - nis1CosignerPrivateKey.privateKey, - state.network.selectedNetwork.type - ); - } else { - await OptInService.doSimpleOptIn( - state.optin.selectedNIS1Account, - state.optin.selectedSymbolAccount, - state.network.selectedNetwork.type - ); - } - commit({ type: 'optin/setError', payload: null }); - } catch (e) { - commit({ type: 'optin/setError', payload: e.toString() }); - } - commit({ type: 'optin/setLoading', payload: false }); - }, - }, -}; From fe6a0d56cc8bf972ea000225e857bece41b74d22 Mon Sep 17 00:00:00 2001 From: Oleg Makarenko Date: Wed, 5 Oct 2022 20:58:53 +0300 Subject: [PATCH 2/2] [wallet/mobile] task: remove unused components and RealmDB --- .../atoms/BottomModal/BottomModal.js | 24 -- .../atoms/BottomModal/BottomModal.styl | 23 -- .../atoms/CompoundButton/compoundbutton.styl | 93 ------ src/components/atoms/CompoundButton/index.js | 164 ---------- src/components/controls/Image.js | 0 src/components/old/StepViewTitleBar/index.js | 107 ------ .../old/StepViewTitleBar/titlebar.styl | 40 --- src/components/organisms/ModalSelector.js | 50 --- src/components/organisms/ModalSelector.styl | 72 ----- src/components/organisms/SymbolPageView.js | 34 +- src/components/organisms/WizardStepView.js | 305 ------------------ src/components/template.js | 16 - src/screens/ShowQRCode/index.js | 8 +- src/utils/storage/RealmDB.js | 170 ---------- src/utils/storage/models/Account.js | 297 ----------------- .../storage/models/AccountMosaicBalance.js | 36 --- src/utils/storage/models/Address.js | 16 - src/utils/storage/models/AddressBook.js | 70 ---- src/utils/storage/models/Block.js | 18 -- src/utils/storage/models/Mosaic.js | 77 ----- src/utils/storage/models/MosaicAlias.js | 19 -- .../storage/models/MultisigAccountInfo.js | 21 -- src/utils/storage/models/Network.js | 106 ------ src/utils/storage/models/PublicAccount.js | 17 - src/utils/storage/models/Transaction.js | 27 -- src/utils/storage/models/TransactionMosaic.js | 32 -- src/utils/storage/models/User.js | 17 - src/utils/storage/models/Wallet.js | 160 --------- 28 files changed, 6 insertions(+), 2013 deletions(-) delete mode 100644 src/components/atoms/BottomModal/BottomModal.js delete mode 100644 src/components/atoms/BottomModal/BottomModal.styl delete mode 100644 src/components/atoms/CompoundButton/compoundbutton.styl delete mode 100644 src/components/atoms/CompoundButton/index.js delete mode 100644 src/components/controls/Image.js delete mode 100644 src/components/old/StepViewTitleBar/index.js delete mode 100644 src/components/old/StepViewTitleBar/titlebar.styl delete mode 100644 src/components/organisms/ModalSelector.js delete mode 100644 src/components/organisms/ModalSelector.styl delete mode 100644 src/components/organisms/WizardStepView.js delete mode 100644 src/components/template.js delete mode 100644 src/utils/storage/RealmDB.js delete mode 100644 src/utils/storage/models/Account.js delete mode 100644 src/utils/storage/models/AccountMosaicBalance.js delete mode 100644 src/utils/storage/models/Address.js delete mode 100644 src/utils/storage/models/AddressBook.js delete mode 100644 src/utils/storage/models/Block.js delete mode 100644 src/utils/storage/models/Mosaic.js delete mode 100644 src/utils/storage/models/MosaicAlias.js delete mode 100644 src/utils/storage/models/MultisigAccountInfo.js delete mode 100644 src/utils/storage/models/Network.js delete mode 100644 src/utils/storage/models/PublicAccount.js delete mode 100644 src/utils/storage/models/Transaction.js delete mode 100644 src/utils/storage/models/TransactionMosaic.js delete mode 100644 src/utils/storage/models/User.js delete mode 100644 src/utils/storage/models/Wallet.js diff --git a/src/components/atoms/BottomModal/BottomModal.js b/src/components/atoms/BottomModal/BottomModal.js deleted file mode 100644 index b8aa590..0000000 --- a/src/components/atoms/BottomModal/BottomModal.js +++ /dev/null @@ -1,24 +0,0 @@ -import React, { Component } from 'react'; -import { Modal, View } from 'react-native'; -import styles from './BottomModal.styl'; -import Card from '@src/components/atoms/Card'; - -type Props = { - isModalOpen: boolean, - onClose: () => {}, -}; - -export default class BottomModal extends Component { - render() { - const { isModalOpen, onClose, children } = this.props; - - return ( - - - - {children} - - - ); - } -} diff --git a/src/components/atoms/BottomModal/BottomModal.styl b/src/components/atoms/BottomModal/BottomModal.styl deleted file mode 100644 index a39234e..0000000 --- a/src/components/atoms/BottomModal/BottomModal.styl +++ /dev/null @@ -1,23 +0,0 @@ -.bottomCardWrapper { - flex: 1; - flex-direction: column; - justify-content: flex-end; - align-items: center; -} - -.modalOverlay { - position: absolute; - left: 0; - right: 0; - bottom: 0; - top: 0; -} - -.bottomCard { - min-height: 300px; - padding: 20px 0px 28px; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - flex: 0.6; - width: 100%; -} diff --git a/src/components/atoms/CompoundButton/compoundbutton.styl b/src/components/atoms/CompoundButton/compoundbutton.styl deleted file mode 100644 index 2e71d22..0000000 --- a/src/components/atoms/CompoundButton/compoundbutton.styl +++ /dev/null @@ -1,93 +0,0 @@ -.wrapper { - overflow: hidden; - flex-direction: row; - justify-content: space-around; - //background-color: #f005; -} - -.buttonContainer { - flex-direction: column; - align-items: center; - //background-color: #00f5; -} - -.buttonGroup { - width: 60px; - height: 60px; - border-radius: 30px; - //background-color: #0f05; -} - -.button { - border-radius: 28px; - padding-top: 6px; - padding-bottom: 6px; - padding-left: 4px; - padding-right: 4px; - flex: 1; - width: 100%; - opacity: 0.6; - justify-content: center; - - &__disabled { - elevation: 0px; - background-color: #30B4B5; - } -} - -.gradient { - &__start { - x: 0; - y: 0; - } - - &__end { - x: 1; - y: 0; - } - - &__colors { - start: #d7caf0; - center: #eeedf4; - end: #f3f4f8; - } -} - -.text { - font-size: 12px; - //font-family: 'NotoSans-Bold'; - //background-color: #0f05; - color: #ffffff; - text-align: center; - padding: 12px; - //text-transform: uppercase; - line-height: 12px; - max-width: 120px; - - &__disabled { - color: #CDCDCD; - } -} - -.loading { - padding: 12px; -} - -.icon { - max-width: 16px; - max-height: 16px; - resize-mode: contain; -} - -.buttonContent { - flex-direction: row; - justify-content: center; - align-items: center; - flex: 1; -} - -.divider { - background-color: #ffffff; - width: 1px; - align-self: stretch; -} \ No newline at end of file diff --git a/src/components/atoms/CompoundButton/index.js b/src/components/atoms/CompoundButton/index.js deleted file mode 100644 index ce706bd..0000000 --- a/src/components/atoms/CompoundButton/index.js +++ /dev/null @@ -1,164 +0,0 @@ -/** - * @format - * @flow - */ - -import React from 'react'; -import { ActivityIndicator, Image, Platform, Text, TouchableNativeFeedback, TouchableOpacity, View } from 'react-native'; -import LinearGradient from 'react-native-linear-gradient'; - -import styles from './compoundbutton.styl'; - -type Props = { - titleLeft: string, - titleRight: string, - loading?: boolean, - accessibilityLabelLeft?: string, - accessibilityLabelRight?: string, - disabled?: boolean, - onPressLeft?: () => void, - onPressRight?: () => void, - testIDLeft?: string, - testIDRight?: string, - style?: [], - iconLeft?: any, - iconRight?: any, -}; - -const CompoundButton = (props: Props) => { - const { - titleLeft, - titleRight, - loading, - accessibilityLabelLeft, - accessibilityLabelRight, - disabled, - onPressLeft, - onPressRight, - style, - iconLeft, - iconRight, - testIDLeft, - testIDRight, - } = props; - const buttonStyles = [styles.button]; - const { gradient__colors: gradientColorsObj, gradient__start: gradientStart, gradient__end: gradientEnd } = styles; - const gradientColors = [gradientColorsObj.start, gradientColorsObj.end]; - const textStyles = [styles.text]; - - const accessibilityTraits = ['button']; - - if (disabled) { - buttonStyles.push(styles.button__disabled); - textStyles.push(styles.text__disabled); - accessibilityTraits.push('disabled'); - } - - let Touchable; - let otherNativeProps = null; - if (Platform.OS === 'android' && Platform.Version >= 21) { - Touchable = TouchableNativeFeedback; - otherNativeProps = { useForeground: true }; - } else { - Touchable = TouchableOpacity; - otherNativeProps = { activeOpacity: 0.6 }; - } - - return ( - - - - {/* $FlowFixMe :useForeground props not available for TouchableOpacity */} - - {loading ? ( - - ) : ( - - - - )} - - - - {titleLeft} - - - - {/* $FlowFixMe :useForeground props not available for TouchableOpacity */} - - {loading ? ( - - ) : ( - - - - )} - - - {titleRight} - - - ); -}; - -CompoundButton.defaultProps = { - accessibilityLabelLeft: '', - accessibilityLabelRight: '', - disabled: false, - onPressLeft: () => {}, - onPressRight: () => {}, - testIDLeft: '', - testIDRight: '', - style: [], - iconLeft: null, - iconRight: null, - loading: false, -}; - -export default CompoundButton; diff --git a/src/components/controls/Image.js b/src/components/controls/Image.js deleted file mode 100644 index e69de29..0000000 diff --git a/src/components/old/StepViewTitleBar/index.js b/src/components/old/StepViewTitleBar/index.js deleted file mode 100644 index 29f5ad5..0000000 --- a/src/components/old/StepViewTitleBar/index.js +++ /dev/null @@ -1,107 +0,0 @@ -/** - * @format - * @flow - */ - -import React from 'react'; -import { Image, Text, TouchableOpacity, View } from 'react-native'; -import type { ViewStyleProp } from 'react-native/Libraries/StyleSheet/StyleSheet'; -import type { ElementProps } from 'react'; -import GlobalStyles from '@src/styles/GlobalStyles'; - -import styles from './titlebar.styl'; - -export type titleTheme = { - textColor: string, - backIconRes: string, - closeIconRes: string, -}; - -const lightTheme: titleTheme = { - textColor: GlobalStyles.color.onLight.TITLE, - backIconRes: require('@src/assets/icons/ic-back-black.png'), - closeIconRes: require('@src/assets/icons/close_light.png'), -}; - -const darkTheme: titleTheme = { - textColor: GlobalStyles.color.onDark.TITLE, - backIconRes: require('@src/assets/icons/ic-back-white.png'), - closeIconRes: require('@src/assets/icons/close_dark.png'), -}; - -const themeMap = new Map(); -themeMap.set('light', lightTheme); -themeMap.set('dark', darkTheme); - -type Props = { - ...ElementProps, - title?: ?string, - theme?: 'light' | 'dark', - showBack?: boolean, - showClose?: boolean, - titleTextStyle?: ViewStyleProp, - onBack?: () => ?boolean, - onClose?: () => ?boolean, - alignLeft: boolean, -}; - -const generateIconButton = ( - testID: string, - touchableStyle: View.propTypes.style, - iconRes: string, - iconStyle: View.propTypes.style, - onPress: () => void -) => { - return ( - - - - ); -}; - -function TitleBar(props: Props) { - const { title, children, titleTextStyle, showBack, onBack, showClose, onClose, style, theme, alignLeft } = props; - - const barTheme: titleTheme = themeMap.get(theme) || lightTheme; - - let backButton = null; - if (showBack) { - backButton = generateIconButton('back-button', styles.leftIconContainer, barTheme.backIconRes, styles.icon, onBack); - } - - let closeButton = null; - if (showClose) { - closeButton = generateIconButton('close-button', styles.rightIconContainer, barTheme.closeIconRes, styles.icon, onClose); - } - - let titleBarContent = children; - // Show title only if there are no children - if (titleBarContent === undefined || titleBarContent === null) { - const titleStyle = { color: barTheme.textColor, ...titleTextStyle }; - titleBarContent = ( - - {title} - - ); - } - - return ( - - {backButton} - {titleBarContent} - {closeButton} - - ); -} - -TitleBar.defaultProps = { - title: null, - theme: 'light', - showBack: false, - showClose: false, - titleTextStyle: null, - onBack: () => {}, - onClose: () => {}, -}; - -export default TitleBar; diff --git a/src/components/old/StepViewTitleBar/titlebar.styl b/src/components/old/StepViewTitleBar/titlebar.styl deleted file mode 100644 index 931691b..0000000 --- a/src/components/old/StepViewTitleBar/titlebar.styl +++ /dev/null @@ -1,40 +0,0 @@ -.titleBarContainer { - padding: 10px; - padding-top: 0; - align-items: center; - justify-content: center; - width: 100%; -} - -.iconContainer { - position: absolute; - top: -8px; - bottom: 0px; - padding: 4px 0px; - z-index: 1; -} - -.leftIconContainer { - @extend .iconContainer; - left: 0; -} - -.rightIconContainer { - @extend .iconContainer; - right: 0; -} - -.icon { - width: 16px; - margin: auto; -} - -.title { - font-weight: 500; - font-size: 20px; -} - -.titleAlignLeft { - font-size: 16px; - margin-top: 1px; -} \ No newline at end of file diff --git a/src/components/organisms/ModalSelector.js b/src/components/organisms/ModalSelector.js deleted file mode 100644 index 31fa435..0000000 --- a/src/components/organisms/ModalSelector.js +++ /dev/null @@ -1,50 +0,0 @@ -import React, { Component } from 'react'; -import { FlatList, Image, Text, TouchableOpacity, View } from 'react-native'; -import GlobalStyles from '@src/styles/GlobalStyles'; -import Card from '@src/components/atoms/Card'; -import translate from '@src/locales/i18n'; -import styles from './ModalSelector.styl'; -import BottomModal from '@src/components/atoms/BottomModal/BottomModal'; - -type Props = { - data: any[], - selectedItem: any, - isModalOpen: boolean, - onClose: () => {}, - onSelect: () => {}, -}; - -export default class ModalSelector extends Component { - renderItem = ({ item }: { item: string }) => { - const { selectedItem, onSelect } = this.props; - - return ( - onSelect(item)} - style={[styles.selectItem, selectedItem === item ? styles.selectItemActive : '']} - > - {item} - - ); - }; - - keyExtractor = (item: string) => item; - - render() { - const { isModalOpen, data, onClose } = this.props; - - return ( - - - - - - - {translate('Settings.currency.selectBoxTitle')} - - - - - ); - } -} diff --git a/src/components/organisms/ModalSelector.styl b/src/components/organisms/ModalSelector.styl deleted file mode 100644 index 57a6e35..0000000 --- a/src/components/organisms/ModalSelector.styl +++ /dev/null @@ -1,72 +0,0 @@ -.bottomCardWrapper { - flex: 1; - flex-direction: column; - justify-content: flex-end; - align-items: center; -} - -.modalOverlay { - position: absolute; - left: 0; - right: 0; - bottom: 0; - top: 0; -} - -.bottomCard { - min-height: 300px; - padding: 20px 0px 28px; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - flex: 0.6; - width: 100%; -} - -.titleContainer { - flex-direction: row; - justify-content: center; - align-items: center; - padding-bottom: 16px; -} - -.title { - padding-left: 8px; - font-size: 16px; - font-weight: bold; - color: #000000; -} - -.input { - color: #000000; -} - -.closeButton { - justify-content: flex-end; - align-items: flex-start; - padding: 0px 20px; - flex-direction: row; -} - -.closeIcon { - width: 18px; - height: 18px; -} - -.selectItem { - justify-content: space-between; - border-bottom-width: 1px; - border-bottom-color: #D8D8D8; - padding: 16px 20px; -} - -.selectItemActive { - border-left-width: 4px; - border-left-color: #1AB5AC; - background-color: #F6F6F6; -} - -.itemText { - font-size: 16px; - color: #000000; - text-transform: uppercase; -} \ No newline at end of file diff --git a/src/components/organisms/SymbolPageView.js b/src/components/organisms/SymbolPageView.js index 46d59ac..9349253 100644 --- a/src/components/organisms/SymbolPageView.js +++ b/src/components/organisms/SymbolPageView.js @@ -5,7 +5,6 @@ import SymbolGradientContainer from '@src/components/organisms/SymbolGradientCon import FadeView from '@src/components/organisms/FadeView'; import GradientButton from '@src/components/atoms/GradientButton'; import GradientButtonLight from '@src/components/atoms/GradientButtonLight'; -import CompoundButton from '@src/components/atoms/CompoundButton'; import LoadingAnimation from '@src/components/organisms/LoadingAnimation'; const styles = StyleSheet.create({ @@ -239,8 +238,6 @@ type Props = { buttons: Button[], errorButtons: Button[], - separateButtons: boolean, - separateErrorButtons: boolean, footer: Node, footerTitle: string, @@ -266,8 +263,6 @@ const WizardStepView = (props: Props) => { noScroll, buttons, errorButtons, - separateButtons, - separateErrorButtons, footer, footerTitle, @@ -477,20 +472,7 @@ const WizardStepView = (props: Props) => { onPress={buttons[0].onPress} /> )} - {!separateButtons && !isLoading && !isError && buttons && buttons.length === 2 && ( - - )} - {separateButtons && !isLoading && !isError && buttons && buttons.length === 2 && ( + {!isLoading && !isError && buttons && buttons.length === 2 && (