From fce7b9167fa2916de4ec132ebaefe654bb388f70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bego=C3=B1a=20Alvarez?= Date: Wed, 18 Oct 2023 17:30:31 +0200 Subject: [PATCH 01/48] chore: bump version to 2.1.9-beta-1 --- packages/desktop/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 169e3031384..f9e20a1e184 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "desktop", "productName": "Firefly Shimmer", - "version": "2.1.8", + "version": "2.1.9-beta-1", "description": "Official wallet application of Shimmer", "main": "public/build/main.js", "repository": "git@github.com:iotaledger/firefly.git", From 2b617cae80eccc58934527da22541d162e154544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Esp=C3=ADn?= Date: Mon, 23 Oct 2023 15:06:46 +0200 Subject: [PATCH 02/48] feat: output serialization powered by the SDK (#7601) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: Output serialization powered by the SDK * fix --------- Co-authored-by: Begoña Álvarez de la Cruz --- .../shared/lib/core/layer-2/utils/index.ts | 1 + .../lib/core/layer-2/utils/outputHexBytes.ts | 6 + .../interfaces/api.interface.ts | 3 +- packages/shared/lib/core/utils/index.ts | 1 - .../shared/lib/core/utils/serializeOutput.ts | 343 ------------------ .../core/wallet/utils/getOutputParameters.ts | 14 +- 6 files changed, 18 insertions(+), 350 deletions(-) create mode 100644 packages/shared/lib/core/layer-2/utils/outputHexBytes.ts delete mode 100644 packages/shared/lib/core/utils/serializeOutput.ts diff --git a/packages/shared/lib/core/layer-2/utils/index.ts b/packages/shared/lib/core/layer-2/utils/index.ts index 8cdc77296fb..ee207d04204 100644 --- a/packages/shared/lib/core/layer-2/utils/index.ts +++ b/packages/shared/lib/core/layer-2/utils/index.ts @@ -11,3 +11,4 @@ export * from './parseLayer2MetadataForTransferV1' export * from './parseLayer2MetadataForTransferV2' export * from './parseLayer2MetadataForTransfer' export * from './specialNativeTokenAmountEncoding' +export * from './outputHexBytes' diff --git a/packages/shared/lib/core/layer-2/utils/outputHexBytes.ts b/packages/shared/lib/core/layer-2/utils/outputHexBytes.ts new file mode 100644 index 00000000000..96092720b52 --- /dev/null +++ b/packages/shared/lib/core/layer-2/utils/outputHexBytes.ts @@ -0,0 +1,6 @@ +import { api } from '@core/profile-manager' +import { HexEncodedString, Output } from '@iota/sdk/out/types' + +export function outputHexBytes(output: Output): Promise { + return api.outputHexBytes(output) +} diff --git a/packages/shared/lib/core/profile-manager/interfaces/api.interface.ts b/packages/shared/lib/core/profile-manager/interfaces/api.interface.ts index c8f997a63e8..9d44b7df24a 100644 --- a/packages/shared/lib/core/profile-manager/interfaces/api.interface.ts +++ b/packages/shared/lib/core/profile-manager/interfaces/api.interface.ts @@ -1,5 +1,5 @@ import { WalletOptions, CreateAccountPayload, TransactionId, OutputId } from '@iota/sdk/out/types' -import { AliasId, Client, FoundryId, NftId } from '@iota/sdk' +import { AliasId, Client, FoundryId, HexEncodedString, NftId, Output } from '@iota/sdk' import { IAuth } from '@core/network' import { INodeInfoResponse } from '@core/network/interfaces' @@ -36,4 +36,5 @@ export interface IApi { aliasIdToBech32(aliasId: string, bech32Hrp: string): string nftIdToBech32(nftId: string, bech32Hrp: string): string computeOutputId(id: TransactionId, index: number): Promise + outputHexBytes(output: Output): Promise } diff --git a/packages/shared/lib/core/utils/index.ts b/packages/shared/lib/core/utils/index.ts index 2ac0d8c1961..ccfaacd595d 100644 --- a/packages/shared/lib/core/utils/index.ts +++ b/packages/shared/lib/core/utils/index.ts @@ -19,7 +19,6 @@ export * from './number' export * from './object' export * from './os' export * from './random' -export * from './serializeOutput' export * from './sort' export * from './store' export * from './string' diff --git a/packages/shared/lib/core/utils/serializeOutput.ts b/packages/shared/lib/core/utils/serializeOutput.ts deleted file mode 100644 index 4a7d4e1ffde..00000000000 --- a/packages/shared/lib/core/utils/serializeOutput.ts +++ /dev/null @@ -1,343 +0,0 @@ -/* eslint-disable quotes */ -import { Converter, HexHelper, WriteStream } from '@iota/util.js' -import bigInt from 'big-integer' - -// Entrypoint for (iota.js) Output serialization -export function serializeOutput(object: IBasicOutput | INftOutput): string { - const writeStream = new WriteStream() - - if (object.type === BASIC_OUTPUT_TYPE) { - serializeBasicOutput(writeStream, object) - } else if (object.type === NFT_OUTPUT_TYPE) { - serializeNftOutput(writeStream, object) - } - - const finalBytes = writeStream.finalBytes() - return Converter.bytesToHex(finalBytes, true) -} - -function serializeBasicOutput(writeStream: WriteStream, object: IBasicOutput): void { - writeStream.writeUInt8('basicOutput.type', object.type) - - writeStream.writeUInt64('basicOutput.amount', bigInt(object.amount)) - serializeNativeTokens(writeStream, object.nativeTokens) - serializeUnlockConditions(writeStream, object.unlockConditions) - serializeFeatures(writeStream, object.features) -} - -function serializeNftOutput(writeStream: WriteStream, object: INftOutput): void { - writeStream.writeUInt8('nftOutput.type', object.type) - - writeStream.writeUInt64('nftOutput.amount', bigInt(object.amount)) - serializeNativeTokens(writeStream, object.nativeTokens) - writeStream.writeFixedHex('nftOutput.nftId', NFT_ID_LENGTH, object.nftId) - - serializeUnlockConditions(writeStream, object.unlockConditions) - serializeFeatures(writeStream, object.features) - serializeFeatures(writeStream, object.immutableFeatures) -} - -function serializeNativeTokens(writeStream: WriteStream, object: INativeToken[] | undefined): void { - writeStream.writeUInt8('nativeTokens.numNativeTokens', object?.length ?? 0) - - if (!object) { - return - } - - for (let i = 0; i < object.length; i++) { - serializeNativeToken(writeStream, object[i]) - } -} - -// Native tokens - -function serializeNativeToken(writeStream: WriteStream, object: INativeToken): void { - writeStream.writeFixedHex('nativeToken.id', NATIVE_TOKEN_ID_LENGTH, object.id) - writeStream.writeUInt256('nativeToken.amount', HexHelper.toBigInt256(object.amount)) -} - -function serializeUnlockConditions(writeStream: WriteStream, objects: UnlockConditionTypes[]): void { - writeStream.writeUInt8('unlockConditions.numUnlockConditions', objects.length) - - for (let i = 0; i < objects.length; i++) { - serializeUnlockCondition(writeStream, objects[i]) - } -} - -// Unlock conditions - -function serializeUnlockCondition(writeStream: WriteStream, object: ITypeBase): void { - if (object.type === ADDRESS_UNLOCK_CONDITION_TYPE) { - serializeAddressUnlockCondition(writeStream, object as IAddressUnlockCondition) - } else if (object.type === STORAGE_DEPOSIT_RETURN_UNLOCK_CONDITION_TYPE) { - serializeStorageDepositReturnUnlockCondition(writeStream, object as IStorageDepositReturnUnlockCondition) - } else if (object.type === TIMELOCK_UNLOCK_CONDITION_TYPE) { - serializeTimelockUnlockCondition(writeStream, object as ITimelockUnlockCondition) - } else if (object.type === EXPIRATION_UNLOCK_CONDITION_TYPE) { - serializeExpirationUnlockCondition(writeStream, object as IExpirationUnlockCondition) - } else if (object.type === STATE_CONTROLLER_ADDRESS_UNLOCK_CONDITION_TYPE) { - serializeStateControllerAddressUnlockCondition(writeStream, object as IStateControllerAddressUnlockCondition) - } else if (object.type === GOVERNOR_ADDRESS_UNLOCK_CONDITION_TYPE) { - serializeGovernorAddressUnlockCondition(writeStream, object as IGovernorAddressUnlockCondition) - } else if (object.type === IMMUTABLE_ALIAS_UNLOCK_CONDITION_TYPE) { - serializeImmutableAliasUnlockCondition(writeStream, object as IImmutableAliasUnlockCondition) - } else { - throw new Error(`Unrecognized unlock condition type ${object.type}`) - } -} - -function serializeAddressUnlockCondition(writeStream: WriteStream, object: IAddressUnlockCondition): void { - writeStream.writeUInt8('addressUnlockCondition.type', object.type) - serializeAddress(writeStream, object.address) -} - -function serializeExpirationUnlockCondition(writeStream: WriteStream, object: IExpirationUnlockCondition): void { - writeStream.writeUInt8('expirationUnlockCondition.type', object.type) - serializeAddress(writeStream, object.returnAddress) - writeStream.writeUInt32('expirationUnlockCondition.unixTime', object.unixTime) -} - -function serializeGovernorAddressUnlockCondition( - writeStream: WriteStream, - object: IGovernorAddressUnlockCondition -): void { - writeStream.writeUInt8('governorUnlockCondition.type', object.type) - serializeAddress(writeStream, object.address) -} - -function serializeImmutableAliasUnlockCondition( - writeStream: WriteStream, - object: IImmutableAliasUnlockCondition -): void { - writeStream.writeUInt8('immutableAliasUnlockCondition.type', object.type) - serializeAddress(writeStream, object.address) -} - -function serializeStateControllerAddressUnlockCondition( - writeStream: WriteStream, - object: IStateControllerAddressUnlockCondition -): void { - writeStream.writeUInt8('stateControllerAddressUnlockCondition.type', object.type) - serializeAddress(writeStream, object.address) -} - -function serializeStorageDepositReturnUnlockCondition( - writeStream: WriteStream, - object: IStorageDepositReturnUnlockCondition -): void { - writeStream.writeUInt8('storageDepositReturnUnlockCondition.type', object.type) - serializeAddress(writeStream, object.returnAddress) - writeStream.writeUInt64('storageDepositReturnUnlockCondition.amount', bigInt(object.amount)) -} - -function serializeTimelockUnlockCondition(writeStream: WriteStream, object: ITimelockUnlockCondition): void { - writeStream.writeUInt8('timelockUnlockCondition.type', object.type) - writeStream.writeUInt32('timelockUnlockCondition.unixTime', object.unixTime) -} - -// Features - -function serializeFeatures(writeStream: WriteStream, objects: FeatureTypes[] | undefined): void { - writeStream.writeUInt8('features.numFeatures', objects?.length ?? 0) - - if (!objects) { - return - } - - for (let i = 0; i < objects.length; i++) { - serializeFeature(writeStream, objects[i]) - } -} - -function serializeFeature(writeStream: WriteStream, object: ITypeBase): void { - if (object.type === SENDER_FEATURE_TYPE) { - serializeSenderFeature(writeStream, object as ISenderFeature) - } else if (object.type === ISSUER_FEATURE_TYPE) { - serializeIssuerFeature(writeStream, object as IIssuerFeature) - } else if (object.type === METADATA_FEATURE_TYPE) { - serializeMetadataFeature(writeStream, object as IMetadataFeature) - } else if (object.type === TAG_FEATURE_TYPE) { - serializeTagFeature(writeStream, object as ITagFeature) - } else { - throw new Error(`Unrecognized feature type ${object.type}`) - } -} - -function serializeIssuerFeature(writeStream: WriteStream, object: IIssuerFeature): void { - writeStream.writeUInt8('issuerFeature.type', object.type) - serializeAddress(writeStream, object.address) -} - -function serializeMetadataFeature(writeStream: WriteStream, object: IMetadataFeature): void { - writeStream.writeUInt8('metadataFeature.type', object.type) - const data = HexHelper.stripPrefix(object.data) - writeStream.writeUInt16('metadataFeature.dataLength', data.length / 2) - writeStream.writeFixedHex('metadataFeature.data', data.length / 2, data) -} - -function serializeSenderFeature(writeStream: WriteStream, object: ISenderFeature): void { - writeStream.writeUInt8('senderFeature.type', object.type) - serializeAddress(writeStream, object.address) -} - -function serializeTagFeature(writeStream: WriteStream, object: ITagFeature): void { - writeStream.writeUInt8('tagFeature.type', object.type) - const tag = HexHelper.stripPrefix(object.tag) - writeStream.writeUInt8('tagFeature.tagLength', tag.length / 2) - writeStream.writeFixedHex('tagFeature.tag', tag.length / 2, tag) -} - -// Addresses - -function serializeAddress(writeStream: WriteStream, object: ITypeBase): void { - if (object.type === ED25519_ADDRESS_TYPE) { - serializeEd25519Address(writeStream, object as IEd25519Address) - } else if (object.type === ALIAS_ADDRESS_TYPE) { - serializeAliasAddress(writeStream, object as IAliasAddress) - } else if (object.type === NFT_ADDRESS_TYPE) { - serializeNftAddress(writeStream, object as INftAddress) - } else { - throw new Error(`Unrecognized address type ${object.type}`) - } -} - -function serializeEd25519Address(writeStream: WriteStream, object: IEd25519Address): void { - writeStream.writeUInt8('ed25519Address.type', object.type) - writeStream.writeFixedHex('ed25519Address.pubKeyHash', 32, object.pubKeyHash) -} - -function serializeAliasAddress(writeStream: WriteStream, object: IAliasAddress): void { - writeStream.writeUInt8('aliasAddress.type', object.type) - writeStream.writeFixedHex('aliasAddress.aliasId', ALIAS_ID_LENGTH, object.aliasId) -} - -function serializeNftAddress(writeStream: WriteStream, object: INftAddress): void { - writeStream.writeUInt8('nftAddress.type', object.type) - writeStream.writeFixedHex('nftAddress.nftId', NFT_ID_LENGTH, object.nftId) -} - -// Models - -type HexEncodedString = string -type HexEncodedAmount = string - -interface ITypeBase { - type: T -} - -interface ICommonOutput { - nativeTokens?: INativeToken[] - unlockConditions: UnlockConditionTypes[] - features?: FeatureTypes[] -} - -export interface IBasicOutput extends ITypeBase<3>, ICommonOutput { - amount: string -} - -export interface INftOutput extends ITypeBase<6>, ICommonOutput { - amount: string - nftId: HexEncodedString - immutableFeatures?: FeatureTypes[] -} - -type UnlockConditionTypes = - | IAddressUnlockCondition - | IStorageDepositReturnUnlockCondition - | ITimelockUnlockCondition - | IExpirationUnlockCondition - | IStateControllerAddressUnlockCondition - | IGovernorAddressUnlockCondition - | IImmutableAliasUnlockCondition - -interface IAddressUnlockCondition extends ITypeBase<0> { - address: AddressTypes -} - -interface IExpirationUnlockCondition extends ITypeBase<3> { - returnAddress: AddressTypes - unixTime: number -} - -interface IGovernorAddressUnlockCondition extends ITypeBase<5> { - address: AddressTypes -} - -interface IImmutableAliasUnlockCondition extends ITypeBase<6> { - address: AddressTypes -} - -interface IStateControllerAddressUnlockCondition extends ITypeBase<4> { - address: AddressTypes -} - -interface IStorageDepositReturnUnlockCondition extends ITypeBase<1> { - returnAddress: AddressTypes - amount: string -} - -interface ITimelockUnlockCondition extends ITypeBase<2> { - unixTime: number -} - -type FeatureTypes = ISenderFeature | IIssuerFeature | IMetadataFeature | ITagFeature - -interface ISenderFeature extends ITypeBase<0> { - address: AddressTypes -} - -interface IIssuerFeature extends ITypeBase<1> { - address: AddressTypes -} - -interface IMetadataFeature extends ITypeBase<2> { - data: HexEncodedString -} - -interface ITagFeature extends ITypeBase<3> { - tag: HexEncodedString -} - -type AddressTypes = IEd25519Address | IAliasAddress | INftAddress - -interface IEd25519Address extends ITypeBase<0> { - pubKeyHash: HexEncodedString -} - -interface IAliasAddress extends ITypeBase<8> { - aliasId: HexEncodedString -} - -interface INftAddress extends ITypeBase<16> { - nftId: HexEncodedString -} - -interface INativeToken { - id: string - amount: HexEncodedAmount -} - -const BASIC_OUTPUT_TYPE = 3 -const NFT_OUTPUT_TYPE = 6 -const NFT_ID_LENGTH: number = 32 -const ALIAS_ID_LENGTH: number = 32 -const UINT8_SIZE: number = 1 -const UINT32_SIZE: number = 4 -const SMALL_TYPE_LENGTH: number = UINT8_SIZE -const MIN_ALIAS_ADDRESS_LENGTH: number = SMALL_TYPE_LENGTH + ALIAS_ID_LENGTH -const FOUNDRY_ID_LENGTH: number = MIN_ALIAS_ADDRESS_LENGTH + UINT32_SIZE + UINT8_SIZE -const NATIVE_TOKEN_ID_LENGTH: number = FOUNDRY_ID_LENGTH -const ADDRESS_UNLOCK_CONDITION_TYPE = 0 -const STORAGE_DEPOSIT_RETURN_UNLOCK_CONDITION_TYPE = 1 -const TIMELOCK_UNLOCK_CONDITION_TYPE = 2 -const EXPIRATION_UNLOCK_CONDITION_TYPE = 3 -const STATE_CONTROLLER_ADDRESS_UNLOCK_CONDITION_TYPE = 4 -const GOVERNOR_ADDRESS_UNLOCK_CONDITION_TYPE = 5 -const IMMUTABLE_ALIAS_UNLOCK_CONDITION_TYPE = 6 -const ED25519_ADDRESS_TYPE = 0 -const ALIAS_ADDRESS_TYPE = 8 -const NFT_ADDRESS_TYPE = 16 -const ISSUER_FEATURE_TYPE = 1 -const METADATA_FEATURE_TYPE = 2 -const SENDER_FEATURE_TYPE = 0 -const TAG_FEATURE_TYPE = 3 diff --git a/packages/shared/lib/core/wallet/utils/getOutputParameters.ts b/packages/shared/lib/core/wallet/utils/getOutputParameters.ts index d9ee8019dc8..4450facefe5 100644 --- a/packages/shared/lib/core/wallet/utils/getOutputParameters.ts +++ b/packages/shared/lib/core/wallet/utils/getOutputParameters.ts @@ -1,10 +1,14 @@ import { getSelectedAccount, prepareOutput } from '@core/account' -import { getEstimatedGasForTransferFromTransactionDetails, getLayer2MetadataForTransfer } from '@core/layer-2/utils' +import { + getEstimatedGasForTransferFromTransactionDetails, + getLayer2MetadataForTransfer, + outputHexBytes, +} from '@core/layer-2/utils' import { getCoinType } from '@core/profile' -import { Converter, IBasicOutput, INftOutput, convertDateToUnixTimestamp, serializeOutput } from '@core/utils' +import { Converter, convertDateToUnixTimestamp } from '@core/utils' import { NewTransactionDetails } from '@core/wallet/types' import { getAddressFromSubject } from '@core/wallet/utils' -import { Assets, OutputParams } from '@iota/sdk/out/types' +import { Assets, BasicOutput, NftOutput, OutputParams } from '@iota/sdk/out/types' import BigInteger from 'big-integer' import { ReturnStrategy } from '../enums' import { NewTransactionType, newTransactionDetails } from '../stores' @@ -87,8 +91,8 @@ async function buildOutputParametersForLayer2(transactionDetails: NewTransaction selectedAccount.index, outputParams, getDefaultTransactionOptions() - )) as unknown as IBasicOutput | INftOutput - const serializedOutput = serializeOutput(outputForEstimate) + )) as unknown as BasicOutput | NftOutput + const serializedOutput = await outputHexBytes(outputForEstimate) const gasEstimatePayload = await getEstimatedGasForTransferFromTransactionDetails(serializedOutput) // Now that we have the gasFeeCharged, update the amount & the tx details From fc24724456e492b15b1f6d09c6bf0e36227c5782 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Esp=C3=ADn?= Date: Mon, 23 Oct 2023 15:27:58 +0200 Subject: [PATCH 03/48] feat: Improved l2 estimated gas (#7604) * feat: Output serialization powered by the SDK * fix * feat: Improved L2 estimated gas --- .../core/wallet/utils/getOutputParameters.ts | 63 ++++++++++--------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/packages/shared/lib/core/wallet/utils/getOutputParameters.ts b/packages/shared/lib/core/wallet/utils/getOutputParameters.ts index 4450facefe5..9a10ff1122f 100644 --- a/packages/shared/lib/core/wallet/utils/getOutputParameters.ts +++ b/packages/shared/lib/core/wallet/utils/getOutputParameters.ts @@ -62,7 +62,7 @@ async function buildOutputParametersForLayer2(transactionDetails: NewTransaction const senderAddress = layer2Parameters.senderAddress const recipientAddress = layer2Parameters?.networkAddress - let amount = getAmountFromTransactionDetails(transactionDetails) + const amount = getAmountFromTransactionDetails(transactionDetails) const assets = getAssetFromTransactionDetails(transactionDetails) const tag = transactionDetails?.tag ? Converter.utf8ToHex(transactionDetails?.tag) : undefined const metadata = getLayer2MetadataForTransfer(transactionDetails) @@ -87,42 +87,49 @@ async function buildOutputParametersForLayer2(transactionDetails: NewTransaction }, } - const outputForEstimate = (await prepareOutput( - selectedAccount.index, - outputParams, - getDefaultTransactionOptions() - )) as unknown as BasicOutput | NftOutput - const serializedOutput = await outputHexBytes(outputForEstimate) - const gasEstimatePayload = await getEstimatedGasForTransferFromTransactionDetails(serializedOutput) + async function getEstimateData() { + const outputForEstimate = (await prepareOutput( + selectedAccount.index, + outputParams, + getDefaultTransactionOptions() + )) as unknown as BasicOutput | NftOutput + const serializedOutput = await outputHexBytes(outputForEstimate) + const gasEstimatePayload = await getEstimatedGasForTransferFromTransactionDetails(serializedOutput) + return { + outputForEstimate, + gasEstimatePayload, + } + } + + let estimatedData = await getEstimateData() + + if (estimatedData.gasEstimatePayload.gasBurned) { + // The "+1" is due to an optimization in WASP nodes. + const metadata = getLayer2MetadataForTransfer( + transactionDetails, + (estimatedData.gasEstimatePayload.gasBurned as number) + 1 + ) + if (!outputParams.features) { + outputParams.features = {} + } + outputParams.features.metadata = metadata + estimatedData = await getEstimateData() + } // Now that we have the gasFeeCharged, update the amount & the tx details - if (gasEstimatePayload.gasFeeCharged) { + if (estimatedData.gasEstimatePayload.gasFeeCharged) { newTransactionDetails.update((state) => { if (state?.layer2Parameters) { - state.layer2Parameters.gasBudget = BigInteger(gasEstimatePayload.gasFeeCharged as number) + state.layer2Parameters.gasBudget = BigInteger(estimatedData.gasEstimatePayload.gasFeeCharged as number) } return state }) - amount = (parseInt(outputForEstimate.amount, 10) + gasEstimatePayload.gasFeeCharged).toString() + outputParams.amount = ( + parseInt(estimatedData.outputForEstimate.amount, 10) + estimatedData.gasEstimatePayload.gasFeeCharged + ).toString() } - return { - recipientAddress, - amount, - ...(assets && { assets }), - features: { - ...(tag && { tag }), - ...(metadata && { metadata }), - ...(layer2Parameters && { sender: senderAddress }), - }, - unlocks: { - ...(expirationUnixTime && { expirationUnixTime }), - ...(timelockUnixTime && { timelockUnixTime }), - }, - storageDeposit: { - returnStrategy: ReturnStrategy.Gift, - }, - } + return outputParams } function getAmountFromTransactionDetails(transactionDetails: NewTransactionDetails): string { From bfc721e76e331eb8c9abf2c6e78dce5f672fedc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bego=C3=B1a=20Alvarez?= Date: Tue, 24 Oct 2023 15:11:48 +0200 Subject: [PATCH 04/48] chore: bump version to 2.1.9 --- packages/desktop/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/desktop/package.json b/packages/desktop/package.json index f9e20a1e184..10e776a80f2 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "desktop", "productName": "Firefly Shimmer", - "version": "2.1.9-beta-1", + "version": "2.1.9", "description": "Official wallet application of Shimmer", "main": "public/build/main.js", "repository": "git@github.com:iotaledger/firefly.git", From f572490efa0b182e8e31281b404349aba7804049 Mon Sep 17 00:00:00 2001 From: cpl121 <100352899+cpl121@users.noreply.github.com> Date: Tue, 24 Oct 2023 15:31:48 +0200 Subject: [PATCH 05/48] feat: add denomination to ledger tx verification popup (#7625) * feat: add denomination to ledger transaction verification popup * fix: remove unnecessary prop * feat: show token unit --- .../deconstructLedgerVerificationProps.ts | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/shared/lib/core/ledger/helpers/deconstructLedgerVerificationProps.ts b/packages/shared/lib/core/ledger/helpers/deconstructLedgerVerificationProps.ts index 53dc3865c11..bc4ed79dc5a 100644 --- a/packages/shared/lib/core/ledger/helpers/deconstructLedgerVerificationProps.ts +++ b/packages/shared/lib/core/ledger/helpers/deconstructLedgerVerificationProps.ts @@ -1,7 +1,12 @@ import { get } from 'svelte/store' import { PopupProps } from '@auxiliary/popup' -import { formatTokenAmountDefault, newTransactionDetails, NewTransactionType } from '@core/wallet' +import { + formatTokenAmountDefault, + getUnitFromTokenMetadata, + newTransactionDetails, + NewTransactionType, +} from '@core/wallet' export function deconstructLedgerVerificationProps(): PopupProps { const transactionDetails = get(newTransactionDetails) @@ -15,11 +20,16 @@ export function deconstructLedgerVerificationProps(): PopupProps { : transactionDetails?.recipient?.address let toAmount = '0' if (transactionDetails?.type === NewTransactionType.TokenTransfer) { - toAmount = `${formatTokenAmountDefault( - Number(transactionDetails?.rawAmount), - transactionDetails?.asset?.metadata, - transactionDetails?.unit - )}` + const tokenMetadata = transactionDetails?.asset?.metadata + if (tokenMetadata) { + const tokenUnit = getUnitFromTokenMetadata(tokenMetadata) + const tokenAmount = formatTokenAmountDefault( + Number(transactionDetails?.rawAmount), + tokenMetadata, + tokenUnit + ) + toAmount = `${tokenAmount} ${tokenUnit}` + } } return { From c112755cfd55f9857e7d5fc528225c1faaf40889 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Esp=C3=ADn?= Date: Tue, 24 Oct 2023 15:55:41 +0200 Subject: [PATCH 06/48] fix: Update ShimmerEVM txs metadata decoding (#7631) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: Output serialization powered by the SDK * fix * feat: Improved L2 estimated gas * feat: Shimmer EVM txs metadata decoding * it seems to work.. * this actually works, fr this time * bring back comment * fix tests * fix tests * typo * remove parseLayer2MetadataForTransferV1 --------- Co-authored-by: Begoña Álvarez de la Cruz --- .../layer-2/classes/special-stream.class.ts | 52 +++++++---- .../parseLayer2MetadataForTransfer.test.ts | 40 ++++---- .../shared/lib/core/layer-2/utils/index.ts | 2 - .../utils/parseLayer2MetadataForTransfer.ts | 92 +++++++++++++++++-- .../utils/parseLayer2MetadataForTransferV1.ts | 84 ----------------- .../utils/parseLayer2MetadataForTransferV2.ts | 92 ------------------- .../helper/getMetadataFromOutput.ts | 6 +- .../outputs/getFormattedAmountFromActivity.ts | 1 - 8 files changed, 146 insertions(+), 223 deletions(-) delete mode 100644 packages/shared/lib/core/layer-2/utils/parseLayer2MetadataForTransferV1.ts delete mode 100644 packages/shared/lib/core/layer-2/utils/parseLayer2MetadataForTransferV2.ts diff --git a/packages/shared/lib/core/layer-2/classes/special-stream.class.ts b/packages/shared/lib/core/layer-2/classes/special-stream.class.ts index f797e52ec12..f82336699af 100644 --- a/packages/shared/lib/core/layer-2/classes/special-stream.class.ts +++ b/packages/shared/lib/core/layer-2/classes/special-stream.class.ts @@ -22,24 +22,27 @@ export class SpecialStream extends WriteStream { export class ReadSpecialStream extends ReadStream { readUInt64SpecialEncoding(name: string): number | bigint { - const readValue = this.readBytes(name, 1) - const [value] = size64Decode(readValue) + const [value] = size64Decode(() => this.readUInt8(name)) return value } readUInt32SpecialEncoding(name: string): number | bigint { - const readValue = this.readBytes(name, 1) - const [value] = size64Decode(readValue) + const [value] = size64Decode(() => this.readUInt8(name)) return value } readUInt16SpecialEncoding(name: string): number | bigint { - const readValue = this.readBytes(name, 1) - const [value] = size64Decode(readValue) + const [value] = size64Decode(() => this.readUInt8(name)) return value } + readUIntNSpecialEncoding(name: string, length: number): number | bigint { const readValue = this.readBytes(name, length) - const [value] = size64Decode(readValue) + let index = 0 + const [value] = size64Decode(() => { + const val = readValue[index] + index += 1 + return val + }) return value } } @@ -133,19 +136,34 @@ function size64Encode(n: bigint): Buffer { } } -function size64Decode(buffer: Uint8Array): [bigint, Error] | [number, null] { - let value = BigInt(0) - let shift = BigInt(0) - let index = 0 +// Adapted from WASP golang implementation https://github.com/iotaledger/wasp/blob/7f880a7983d24d0dcd225e994d67b29741b318bc/packages/util/rwutil/convert.go#L76 +function size64Decode(readByte: () => number): [number, null | Error] { + let byte = readByte() + + if (byte < 0x80) { + return [byte, null] + } + + let value = byte & 0x7f - while (index < buffer.length) { - const byte = buffer[index++] + for (let shift = 7; shift < 63; shift += 7) { + byte = readByte() + if (!byte) { + return [0, null] + } if (byte < 0x80) { - return [Number(value | (BigInt(byte) << shift)), null] + return [Number(value | (byte << shift)), null] } - value |= BigInt(byte & 0x7f) << shift - shift += BigInt(7) + value |= (byte & 0x7f) << shift + } + + byte = readByte() + if (!byte) { + return [0, null] + } + if (byte > 0x01) { + return [0, new Error('size64 overflow')] } - return [value, new Error('Unexpected end of data')] + return [value | (byte << 63), new Error('Unexpected end of data')] } diff --git a/packages/shared/lib/core/layer-2/tests/parseLayer2MetadataForTransfer.test.ts b/packages/shared/lib/core/layer-2/tests/parseLayer2MetadataForTransfer.test.ts index 6cdd6bf7ed3..4a0d8a7c24c 100644 --- a/packages/shared/lib/core/layer-2/tests/parseLayer2MetadataForTransfer.test.ts +++ b/packages/shared/lib/core/layer-2/tests/parseLayer2MetadataForTransfer.test.ts @@ -1,62 +1,66 @@ import { Converter } from '@iota/util.js' -import { parseLayer2MetadataForTransferV2 } from '../utils/parseLayer2MetadataForTransferV2' +import { parseLayer2MetadataForTransfer } from '../utils/parseLayer2MetadataForTransfer' -describe('Function: parseLayer2MetadataForTransferV2.ts', () => { +describe('Function: parseLayer2MetadataForTransfer.ts', () => { it('should correctly parse metadata with base token', () => { - const metadata = '0x00000000025e4b3ca1e3f423a0c21e0101611503807d707f59f1345e1063dbb64f2495d1491283a080c0843d' + const metadata = + '0x00025e4b3ca1e3f423914e010161350342f7da9bdb55b3ec87e5ac1a1e6d88e16768663fde5eca3429eb6f579cc538acb82a77d6f89dae4611b81eac279fbf96d322001f8080d293ad03' const metadataByteArray = Converter.hexToBytes(metadata) const expected = { senderContract: '0x0', targetContract: 'Accounts', contractFunction: 'transferAllowanceTo', - gasBudget: '500000', - ethereumAddress: '0x807d707f59f1345e1063dbb64f2495d1491283a0', - baseTokens: '1000000', + gasBudget: '10001', + ethereumAddress: + '0x42f7da9bdb55b3ec87e5ac1a1e6d88e16768663fde5eca3429eb6f579cc538acb82a77d6f89dae4611b81eac279fbf96d322001f', + baseTokens: '900000000', nativeTokens: [], nfts: [], } - const parsedMetadata = parseLayer2MetadataForTransferV2(metadataByteArray) + const parsedMetadata = parseLayer2MetadataForTransfer(metadataByteArray) expect(parsedMetadata).toEqual(expected) }) it('should correctly parse metadata with native tokens', () => { const metadata = - '0x00000000025e4b3ca1e3f423a0c21e01016115038cc8112290f8c350a60e1afdb8379c686e2a5bb3400108fcccc313acc182fc2c647dc98864062b163a8ee254231d7f029dc6be3a2de52e01000000000132' + '0x00025e4b3ca1e3f423914e010161350342f7da9bdb55b3ec87e5ac1a1e6d88e16768663fde5eca3429eb6f579cc538acb82a77d6f89dae4611b81eac279fbf96d322001f4001086ac702fcfdc37b437e7ebb7a87d8acfb875be6b1ae3823bc61aa7896b852a6d5010000000001fa' const metadataByteArray = Converter.hexToBytes(metadata) const expected = { senderContract: '0x0', targetContract: 'Accounts', contractFunction: 'transferAllowanceTo', - gasBudget: '500000', - ethereumAddress: '0x8cc8112290f8c350a60e1afdb8379c686e2a5bb3', + gasBudget: '10001', + ethereumAddress: + '0x42f7da9bdb55b3ec87e5ac1a1e6d88e16768663fde5eca3429eb6f579cc538acb82a77d6f89dae4611b81eac279fbf96d322001f', baseTokens: '0', nativeTokens: [ { - amount: '50', - ID: ['0x08fcccc313acc182fc2c647dc98864062b163a8ee254231d7f029dc6be3a2de52e0100000000'], + amount: '250', + ID: ['0x086ac702fcfdc37b437e7ebb7a87d8acfb875be6b1ae3823bc61aa7896b852a6d50100000000'], }, ], nfts: [], } - const parsedMetadata = parseLayer2MetadataForTransferV2(metadataByteArray) + const parsedMetadata = parseLayer2MetadataForTransfer(metadataByteArray) expect(parsedMetadata).toEqual(expected) }) it('should correctly parse metadata with nfts', () => { const metadata = - '0x00000000025e4b3ca1e3f423a0c21e0101611503cbcd6d8659ed1998a452335ae53904dc0af1c99b200166b71141974aa368c9152a24d631494b46172ba05dd998eef553e7fa1218b704' + '0x00025e4b3ca1e3f423e9cd01010161350342f7da9bdb55b3ec87e5ac1a1e6d88e16768663fde5eca3429eb6f579cc538acb82a77d6f89dae4611b81eac279fbf96d322001f2001bf5b7cd4e8ac582e246c25b6a89b4ab4ef0646d3291aa03d9a5313154b714a06' const metadataByteArray = Converter.hexToBytes(metadata) const expected = { senderContract: '0x0', targetContract: 'Accounts', contractFunction: 'transferAllowanceTo', - gasBudget: '500000', - ethereumAddress: '0xcbcd6d8659ed1998a452335ae53904dc0af1c99b', + gasBudget: '26345', + ethereumAddress: + '0x42f7da9bdb55b3ec87e5ac1a1e6d88e16768663fde5eca3429eb6f579cc538acb82a77d6f89dae4611b81eac279fbf96d322001f', baseTokens: '0', nativeTokens: [], - nfts: ['0x66b71141974aa368c9152a24d631494b46172ba05dd998eef553e7fa1218b704'], + nfts: ['0xbf5b7cd4e8ac582e246c25b6a89b4ab4ef0646d3291aa03d9a5313154b714a06'], } - const parsedMetadata = parseLayer2MetadataForTransferV2(metadataByteArray) + const parsedMetadata = parseLayer2MetadataForTransfer(metadataByteArray) expect(parsedMetadata).toEqual(expected) }) }) diff --git a/packages/shared/lib/core/layer-2/utils/index.ts b/packages/shared/lib/core/layer-2/utils/index.ts index ee207d04204..aa4f8873671 100644 --- a/packages/shared/lib/core/layer-2/utils/index.ts +++ b/packages/shared/lib/core/layer-2/utils/index.ts @@ -7,8 +7,6 @@ export * from './getLayer2AssetAllowance' export * from './getLayer2MetadataForTransfer' export * from './getLayer2NetworkFromAddress' export * from './parseLayer2Metadata' -export * from './parseLayer2MetadataForTransferV1' -export * from './parseLayer2MetadataForTransferV2' export * from './parseLayer2MetadataForTransfer' export * from './specialNativeTokenAmountEncoding' export * from './outputHexBytes' diff --git a/packages/shared/lib/core/layer-2/utils/parseLayer2MetadataForTransfer.ts b/packages/shared/lib/core/layer-2/utils/parseLayer2MetadataForTransfer.ts index d5d6506fb54..86642ff6c9e 100644 --- a/packages/shared/lib/core/layer-2/utils/parseLayer2MetadataForTransfer.ts +++ b/packages/shared/lib/core/layer-2/utils/parseLayer2MetadataForTransfer.ts @@ -1,11 +1,89 @@ -import { ILayer2TransferAllowanceMetadata } from '../interfaces' -import { parseLayer2MetadataForTransferV1 } from './parseLayer2MetadataForTransferV1' -import { parseLayer2MetadataForTransferV2 } from './parseLayer2MetadataForTransferV2' +import { Converter } from '@core/utils' +import { ILayer2AssetAllowance, ILayer2TransferAllowanceMetadata } from '../interfaces' +import { CONTRACT_FUNCTIONS, TARGET_CONTRACTS } from '../constants' +import { Allowance } from '../enums' +import { ReadSpecialStream } from '../classes' +// Function to parse data from the current metadata, using the new encoding where the shimmer chainId is 1073 export function parseLayer2MetadataForTransfer(metadata: Uint8Array): ILayer2TransferAllowanceMetadata { - try { - return parseLayer2MetadataForTransferV2(metadata) - } catch (err) { - return parseLayer2MetadataForTransferV1(metadata) + const readStream = new ReadSpecialStream(metadata) + const senderContract = readStream.readUInt8('senderContract') + const targetContract = readStream.readUInt32('targetContract') + const contractFunction = readStream.readUInt32('contractFunction') + const gasBudget = readStream.readUInt64SpecialEncoding('gasBudget') + const smartContractParameters = parseSmartContractParameters(readStream) + const ethereumAddress = '0x' + smartContractParameters['a'].substring(4) + const allowance = parseAssetAllowance(readStream) + + return { + senderContract: Converter.decimalToHex(senderContract), + targetContract: TARGET_CONTRACTS[targetContract] ?? Converter.decimalToHex(targetContract), + contractFunction: CONTRACT_FUNCTIONS[contractFunction] ?? Converter.decimalToHex(contractFunction), + gasBudget: gasBudget.toString(), + ethereumAddress, + baseTokens: allowance?.baseTokens, + nativeTokens: allowance?.nativeTokens, + nfts: allowance?.nfts, + } +} + +function parseSmartContractParameters(readStream: ReadSpecialStream): Record { + const smartContractParametersAmount = readStream.readUInt32SpecialEncoding('parametersLength') + const smartContractParameters: Record = {} + + for (let index = 0; index < smartContractParametersAmount; index++) { + const keyLength = readStream.readUInt32SpecialEncoding('keyLength') + const keyBytes = readStream.readBytes('keyValue', Number(keyLength)) + + const valueLength = readStream.readUInt32SpecialEncoding('valueLength') + const valueBytes = readStream.readBytes('valueBytes', Number(valueLength)) + + const key = Converter.bytesToUtf8(keyBytes) + const value = Converter.bytesToHex(valueBytes) + + smartContractParameters[key] = value + } + + return smartContractParameters +} + +function parseAssetAllowance(readStream: ReadSpecialStream): ILayer2AssetAllowance { + const allowance = readStream.readUInt8('encodedAllowance') + const result: ILayer2AssetAllowance = { + baseTokens: '0', + nativeTokens: [], + nfts: [], + } + + switch (allowance) { + case Allowance.HasBaseTokens: { + // TODO: This is a temporary fix since now the base token is sent alone in the transfer (without native token and/or nfts) + const baseTokenLength = readStream.length() - readStream.getReadIndex() + result.baseTokens = readStream.readUIntNSpecialEncoding('baseTokenAmount', baseTokenLength).toString() + break + } + + case Allowance.HasNativeTokens: { + readStream.readUInt32SpecialEncoding('amountOfDifferentTokens') + const NATIVE_TOKEN_ID_LENGTH = 38 + const tokenId = readStream.readBytes('tokenId', NATIVE_TOKEN_ID_LENGTH) + const tokenAmount = readStream.readUInt32SpecialEncoding('nativeTokenAmountLength') + const nativeTokenAmount = readStream.readBytes('nativeTokenAmount', Number(tokenAmount)) + result.nativeTokens.push({ ID: [Converter.bytesToHex(tokenId)], amount: nativeTokenAmount.toString() }) + break + } + + case Allowance.hasNFTs: { + readStream.readUInt16SpecialEncoding('nftAmount') + const NFT_ID_LENGTH = 32 + const nftIdBytes = readStream.readBytes('nftId', NFT_ID_LENGTH) + const nftId = Converter.bytesToHex(nftIdBytes) + result.nfts.push(nftId) + break + } + + default: + throw new Error('Smart contract call data does not set the asset allowance!') } + return result } diff --git a/packages/shared/lib/core/layer-2/utils/parseLayer2MetadataForTransferV1.ts b/packages/shared/lib/core/layer-2/utils/parseLayer2MetadataForTransferV1.ts deleted file mode 100644 index ae242bbe981..00000000000 --- a/packages/shared/lib/core/layer-2/utils/parseLayer2MetadataForTransferV1.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { Converter } from '@core/utils' -import { ReadStream } from '@iota/util.js' -import { NativeTokenAmount, TOKEN_ID_BYTE_LENGTH } from '@core/token' -import { NFT_ID_BYTE_LENGTH } from '@core/nfts/constants' -import { ILayer2AssetAllowance, ILayer2TransferAllowanceMetadata } from '../interfaces' -import { CONTRACT_FUNCTIONS, TARGET_CONTRACTS } from '../constants' - -// DEPRECATED: Function to parse data from the original metadata when the shimmer chainId was 1071 -export function parseLayer2MetadataForTransferV1(metadata: Uint8Array): ILayer2TransferAllowanceMetadata { - const readStream = new ReadStream(metadata) - - const senderContract = readStream.readUInt32('senderContract') - const targetContract = readStream.readUInt32('targetContract') - const contractFunction = readStream.readUInt32('contractFunction') - const gasBudget = readStream.readUInt64('gasBudget') - - const smartContractParameters = parseSmartContractParameters(readStream) - const ethereumAddress = '0x' + smartContractParameters['a'].substring(4) - - const allowance = parseAssetAllowance(readStream) - - return { - senderContract: Converter.decimalToHex(senderContract), - targetContract: TARGET_CONTRACTS[targetContract] ?? Converter.decimalToHex(targetContract), - contractFunction: CONTRACT_FUNCTIONS[contractFunction] ?? Converter.decimalToHex(contractFunction), - gasBudget: gasBudget.toString(), - ethereumAddress, - baseTokens: allowance?.baseTokens, - nativeTokens: allowance?.nativeTokens, - nfts: allowance?.nfts, - } -} - -function parseSmartContractParameters(readStream: ReadStream): Record { - const smartContractParametersAmount = readStream.readUInt32('parametersLength') - const smartContractParameters: Record = {} - - for (let index = 0; index < smartContractParametersAmount; index++) { - const keyLength = readStream.readUInt16('keyLength') - const keyBytes = readStream.readBytes('keyValue', keyLength) - - const valueLength = readStream.readUInt32('valueLength') - const valueBytes = readStream.readBytes('valueBytes', valueLength) - - const key = Converter.bytesToUtf8(keyBytes) - const value = Converter.bytesToHex(valueBytes) - - smartContractParameters[key] = value - } - - return smartContractParameters -} - -function parseAssetAllowance(readStream: ReadStream): ILayer2AssetAllowance { - const allowance = readStream.readUInt8('allowance') - - if (allowance) { - const baseTokens = readStream.readUInt64('baseTokens').toString() - readStream.readUInt16('tokenBufferBytesLength') - const tokenAmount = readStream.readUInt16('tokenAmount') - const nativeTokens: NativeTokenAmount[] = [] - - for (let token = 0; token < tokenAmount; token++) { - const tokenId = Converter.bytesToHex(readStream.readBytes('tokenId', TOKEN_ID_BYTE_LENGTH)) - const amount = readStream.readUInt256('tokenAmount').toString() - nativeTokens.push({ ID: [tokenId], amount }) - } - - const nftAmount = readStream.readUInt16('nftAmount') - const nfts: string[] = [] - for (let nft = 0; nft < nftAmount; nft++) { - const nftId = Converter.bytesToHex(readStream.readBytes('nftId', NFT_ID_BYTE_LENGTH)) - nfts.push(nftId) - } - - return { - baseTokens, - nativeTokens, - nfts, - } - } else { - throw new Error('Smart contract call data does not set the asset allowance!') - } -} diff --git a/packages/shared/lib/core/layer-2/utils/parseLayer2MetadataForTransferV2.ts b/packages/shared/lib/core/layer-2/utils/parseLayer2MetadataForTransferV2.ts deleted file mode 100644 index 3f3bf78d68b..00000000000 --- a/packages/shared/lib/core/layer-2/utils/parseLayer2MetadataForTransferV2.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { Converter } from '@core/utils' -import { ILayer2AssetAllowance, ILayer2TransferAllowanceMetadata } from '../interfaces' -import { CONTRACT_FUNCTIONS, TARGET_CONTRACTS } from '../constants' -import { Allowance } from '../enums' -import { ReadSpecialStream } from '../classes' - -// Function to parse data from the current metadata, using the new encoding where the shimmer chainId is 1072 -export function parseLayer2MetadataForTransferV2(metadata: Uint8Array): ILayer2TransferAllowanceMetadata { - const readStream = new ReadSpecialStream(metadata) - const senderContract = readStream.readUInt32('senderContract') - const targetContract = readStream.readUInt32('targetContract') - const contractFunction = readStream.readUInt32('contractFunction') - // TODO: This is a temporary fix since now the gas is always 500000, when it varies, the length of the gas will change - const gasBudget = readStream.readUIntNSpecialEncoding('gasBudget', 3) - - const smartContractParameters = parseSmartContractParameters(readStream) - const ethereumAddress = '0x' + smartContractParameters['a'].substring(4) - - const allowance = parseAssetAllowance(readStream) - - return { - senderContract: Converter.decimalToHex(senderContract), - targetContract: TARGET_CONTRACTS[targetContract] ?? Converter.decimalToHex(targetContract), - contractFunction: CONTRACT_FUNCTIONS[contractFunction] ?? Converter.decimalToHex(contractFunction), - gasBudget: gasBudget.toString(), - ethereumAddress, - baseTokens: allowance?.baseTokens, - nativeTokens: allowance?.nativeTokens, - nfts: allowance?.nfts, - } -} - -function parseSmartContractParameters(readStream: ReadSpecialStream): Record { - const smartContractParametersAmount = readStream.readUInt32SpecialEncoding('parametersLength') - const smartContractParameters: Record = {} - - for (let index = 0; index < smartContractParametersAmount; index++) { - const keyLength = readStream.readUInt32SpecialEncoding('keyLength') - const keyBytes = readStream.readBytes('keyValue', Number(keyLength)) - - const valueLength = readStream.readUInt32SpecialEncoding('valueLength') - const valueBytes = readStream.readBytes('valueBytes', Number(valueLength)) - - const key = Converter.bytesToUtf8(keyBytes) - const value = Converter.bytesToHex(valueBytes) - - smartContractParameters[key] = value - } - - return smartContractParameters -} - -function parseAssetAllowance(readStream: ReadSpecialStream): ILayer2AssetAllowance { - const allowance = readStream.readUInt8('encodedAllowance') - const result: ILayer2AssetAllowance = { - baseTokens: '0', - nativeTokens: [], - nfts: [], - } - - switch (allowance) { - case Allowance.HasBaseTokens: { - // TODO: This is a temporary fix since now the base token is sent alone in the transfer (without native token and/or nfts) - const baseTokenLength = readStream.length() - readStream.getReadIndex() - result.baseTokens = readStream.readUIntNSpecialEncoding('baseTokenAmount', baseTokenLength).toString() - break - } - - case Allowance.HasNativeTokens: { - readStream.readUInt32SpecialEncoding('amountOfDifferentTokens') - const NATIVE_TOKEN_ID_LENGTH = 38 - const tokenId = readStream.readBytes('tokenId', NATIVE_TOKEN_ID_LENGTH) - const tokenAmount = readStream.readUInt32SpecialEncoding('nativeTokenAmountLength') - const nativeTokenAmount = readStream.readBytes('nativeTokenAmount', Number(tokenAmount)) - result.nativeTokens.push({ ID: [Converter.bytesToHex(tokenId)], amount: nativeTokenAmount.toString() }) - break - } - - case Allowance.hasNFTs: { - readStream.readUInt16SpecialEncoding('nftAmount') - const NFT_ID_LENGTH = 32 - const nftIdBytes = readStream.readBytes('nftId', NFT_ID_LENGTH) - const nftId = Converter.bytesToHex(nftIdBytes) - result.nfts.push(nftId) - break - } - - default: - throw new Error('Smart contract call data does not set the asset allowance!') - } - return result -} diff --git a/packages/shared/lib/core/wallet/utils/generateActivity/helper/getMetadataFromOutput.ts b/packages/shared/lib/core/wallet/utils/generateActivity/helper/getMetadataFromOutput.ts index 3d0679c5c3c..12ca58353fe 100644 --- a/packages/shared/lib/core/wallet/utils/generateActivity/helper/getMetadataFromOutput.ts +++ b/packages/shared/lib/core/wallet/utils/generateActivity/helper/getMetadataFromOutput.ts @@ -1,4 +1,5 @@ import { isParticipationOutput } from '@contexts/governance/utils' +import { ReadSpecialStream } from '@core/layer-2' import { EXTERNALLY_OWNED_ACCOUNT } from '@core/layer-2/constants' import { parseLayer2MetadataForTransfer } from '@core/layer-2/utils' import { containsControlCharacters, Converter } from '@core/utils' @@ -19,9 +20,10 @@ export function getMetadataFromOutput(output: Output): string | undefined { if (data) { const isVotingOutput = isParticipationOutput(output) const metadataBytes = Converter.hexToBytes(data) - const startValue = Number(data.substring(0, 10)) + const readStream = new ReadSpecialStream(metadataBytes) + const startValue = readStream.readUInt8('startValue') - // For smart contract calls the first 32 bits of the metadata + // For smart contract calls the first 8 bits of the metadata // correspond to 0 if an an end-user initiates the transaction // instead of a smart contract. A stop voting output could // also start with a 0 metadata, so we check that as well. diff --git a/packages/shared/lib/core/wallet/utils/outputs/getFormattedAmountFromActivity.ts b/packages/shared/lib/core/wallet/utils/outputs/getFormattedAmountFromActivity.ts index 41f9b4e9610..6c947115c19 100644 --- a/packages/shared/lib/core/wallet/utils/outputs/getFormattedAmountFromActivity.ts +++ b/packages/shared/lib/core/wallet/utils/outputs/getFormattedAmountFromActivity.ts @@ -8,7 +8,6 @@ export function getFormattedAmountFromActivity( signed: boolean = true ): string { if (!activity) return '' - const metadata = getAssetFromPersistedAssets(activity.assetId)?.metadata const amount = formatTokenAmountBestMatch(activity.rawAmount, metadata) if (activity.type === ActivityType.Basic) { From 7b36b58d253e1cf912b43958bc7b13eda058d061 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Esp=C3=ADn?= Date: Tue, 24 Oct 2023 16:38:49 +0200 Subject: [PATCH 07/48] chore: update `actions/setup-node` to v4 (#7652) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Begoña Álvarez de la Cruz --- .github/workflows/build-and-release-desktop.yml | 2 +- .github/workflows/build-desktop-test.v1.yml | 2 +- .github/workflows/build-desktop-test.v2.yml | 2 +- .github/workflows/build-desktop.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-and-release-desktop.yml b/.github/workflows/build-and-release-desktop.yml index 7100fa0273d..919d6e45db7 100644 --- a/.github/workflows/build-and-release-desktop.yml +++ b/.github/workflows/build-and-release-desktop.yml @@ -67,7 +67,7 @@ jobs: - uses: actions/checkout@v2 - name: Set up Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v4 with: node-version: 18.15.0 diff --git a/.github/workflows/build-desktop-test.v1.yml b/.github/workflows/build-desktop-test.v1.yml index fdaf80bf692..d9935167728 100644 --- a/.github/workflows/build-desktop-test.v1.yml +++ b/.github/workflows/build-desktop-test.v1.yml @@ -23,7 +23,7 @@ jobs: ref: 'main' - name: Set up Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v4 with: node-version: 14.x diff --git a/.github/workflows/build-desktop-test.v2.yml b/.github/workflows/build-desktop-test.v2.yml index 583af50e2c1..5e30d3c1ebb 100644 --- a/.github/workflows/build-desktop-test.v2.yml +++ b/.github/workflows/build-desktop-test.v2.yml @@ -21,7 +21,7 @@ jobs: - uses: actions/checkout@v2 - name: Set up Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v4 with: node-version: 18.15.0 diff --git a/.github/workflows/build-desktop.yml b/.github/workflows/build-desktop.yml index 4b2773821b8..82d752c3973 100644 --- a/.github/workflows/build-desktop.yml +++ b/.github/workflows/build-desktop.yml @@ -36,7 +36,7 @@ jobs: - uses: actions/checkout@v2 - name: Set up Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v4 with: node-version: 18.15.0 From 8d6a23e720af8852931e3eee6f2d50551b165072 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Esp=C3=ADn?= Date: Tue, 24 Oct 2023 16:38:49 +0200 Subject: [PATCH 08/48] chore: update `actions/setup-node` to v4 (#7652) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Begoña Álvarez de la Cruz --- .github/workflows/build-and-release-desktop.yml | 2 +- .github/workflows/build-desktop-test.v1.yml | 2 +- .github/workflows/build-desktop-test.v2.yml | 2 +- .github/workflows/build-desktop.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-and-release-desktop.yml b/.github/workflows/build-and-release-desktop.yml index 7100fa0273d..919d6e45db7 100644 --- a/.github/workflows/build-and-release-desktop.yml +++ b/.github/workflows/build-and-release-desktop.yml @@ -67,7 +67,7 @@ jobs: - uses: actions/checkout@v2 - name: Set up Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v4 with: node-version: 18.15.0 diff --git a/.github/workflows/build-desktop-test.v1.yml b/.github/workflows/build-desktop-test.v1.yml index fdaf80bf692..d9935167728 100644 --- a/.github/workflows/build-desktop-test.v1.yml +++ b/.github/workflows/build-desktop-test.v1.yml @@ -23,7 +23,7 @@ jobs: ref: 'main' - name: Set up Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v4 with: node-version: 14.x diff --git a/.github/workflows/build-desktop-test.v2.yml b/.github/workflows/build-desktop-test.v2.yml index 583af50e2c1..5e30d3c1ebb 100644 --- a/.github/workflows/build-desktop-test.v2.yml +++ b/.github/workflows/build-desktop-test.v2.yml @@ -21,7 +21,7 @@ jobs: - uses: actions/checkout@v2 - name: Set up Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v4 with: node-version: 18.15.0 diff --git a/.github/workflows/build-desktop.yml b/.github/workflows/build-desktop.yml index 4b2773821b8..82d752c3973 100644 --- a/.github/workflows/build-desktop.yml +++ b/.github/workflows/build-desktop.yml @@ -36,7 +36,7 @@ jobs: - uses: actions/checkout@v2 - name: Set up Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v4 with: node-version: 18.15.0 From 3cbcd8cd386c3e1d697081af83fc01fffd5ec98d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Esp=C3=ADn?= Date: Wed, 25 Oct 2023 10:19:43 +0200 Subject: [PATCH 09/48] chore: simplify task template (#7657) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Begoña Álvarez de la Cruz --- .github/ISSUE_TEMPLATE/create-task.yml | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/create-task.yml b/.github/ISSUE_TEMPLATE/create-task.yml index 56acac08212..b6ee1267eb3 100644 --- a/.github/ISSUE_TEMPLATE/create-task.yml +++ b/.github/ISSUE_TEMPLATE/create-task.yml @@ -18,25 +18,4 @@ body: label: Task description description: Describe the task that needs to be completed. validations: - required: true - - - type: textarea - id: requirements - attributes: - label: Requirements - description: What are the requirements for this task, this could be a checklist of subtasks. - validations: - required: true - - - type: checkboxes - id: checklist - attributes: - label: Creation checklist - description: 'Before submitting this task please ensure you have done the following if necessary:' - options: - - label: I have assigned this task to the correct people - required: false - - label: I have added the most appropriate labels - required: false - - label: I have linked the correct milestone and/or project - required: false + required: true \ No newline at end of file From 559a728c9e6a5f593f42c32cb3e609609d84c464 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 10:51:36 +0200 Subject: [PATCH 10/48] New Crowdin translations by Github Action (#7638) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Crowdin Bot Co-authored-by: Begoña Álvarez de la Cruz --- packages/shared/locales/da.json | 6 +- packages/shared/locales/de.json | 6 +- packages/shared/locales/es-ES.json | 6 +- packages/shared/locales/fr.json | 6 +- packages/shared/locales/hu.json | 6 +- packages/shared/locales/ko.json | 124 ++++++++++++++--------------- packages/shared/locales/pl.json | 6 +- 7 files changed, 80 insertions(+), 80 deletions(-) diff --git a/packages/shared/locales/da.json b/packages/shared/locales/da.json index 940e3bd5f35..60a98ba1492 100644 --- a/packages/shared/locales/da.json +++ b/packages/shared/locales/da.json @@ -66,7 +66,7 @@ }, "ledgerAccount": { "title": "Opret en hardwareprofil", - "description": "Ledger Nano S, Nano S Plus or Nano X required" + "description": "Ledger Nano S, Nano S Plus eller Nano X kræves" } }, "setupRecovered": { @@ -77,7 +77,7 @@ "importFile": "Benyt Stronghold-sikkerhedskopi", "importFileDescription": "Importér Stronghold-sikkerhedskopien", "importLedger": "Benyt Ledger-enhed", - "importLedgerDescription": "Restore from your Ledger Nano S, Nano S Plus or X device" + "importLedgerDescription": "Gendan fra Ledger Nano S-, Nano S Plus- eller X-enhed" }, "setupClaimed": { "title": "Gør krav på Shimmer-staking belønninger", @@ -925,7 +925,7 @@ "addressesFound": "Addresses found", "totalAddressBalance": "Total balance", "searchAgainHint": "Is your balance or number of wallets incorrect? Search again until your full balance is shown.", - "currentWallet": "Search only in the current wallet" + "currentWallet": "Søg kun i den aktuelle wallet" }, "balanceOverview": { "title": "Balance overview", diff --git a/packages/shared/locales/de.json b/packages/shared/locales/de.json index 16d774184fa..5bfde3b6b5d 100644 --- a/packages/shared/locales/de.json +++ b/packages/shared/locales/de.json @@ -66,7 +66,7 @@ }, "ledgerAccount": { "title": "Erstelle ein (Ledger-) Hardware Profil", - "description": "Ledger Nano S, Nano S Plus or Nano X required" + "description": "Ledger Nano S, Nano S Plus oder Nano X erforderlich" } }, "setupRecovered": { @@ -77,7 +77,7 @@ "importFile": "Stronghold-Backup verwenden", "importFileDescription": "Importiere deine Stronghold-Backup Datei", "importLedger": "Ledger-Gerät verwenden", - "importLedgerDescription": "Restore from your Ledger Nano S, Nano S Plus or X device" + "importLedgerDescription": "Von deinem Ledger Nano S, Nano S Plus oder X wiederherstellen" }, "setupClaimed": { "title": "Shimmer Staking-Rewards beanspruchen", @@ -925,7 +925,7 @@ "addressesFound": "Gefundene Adressen", "totalAddressBalance": "Gesamtguthaben", "searchAgainHint": "Ist das angezeigte Guthaben oder die Anzahl der Wallets nicht korrekt? Dann suche erneut, bis dein gesamtes Guthaben angezeigt wird.", - "currentWallet": "Search only in the current wallet" + "currentWallet": "Nur im aktuellen Wallet suchen" }, "balanceOverview": { "title": "Guthabenübersicht", diff --git a/packages/shared/locales/es-ES.json b/packages/shared/locales/es-ES.json index f2aaea2be68..3a544dd9e6f 100644 --- a/packages/shared/locales/es-ES.json +++ b/packages/shared/locales/es-ES.json @@ -66,7 +66,7 @@ }, "ledgerAccount": { "title": "Crear un perfil de hardware", - "description": "Ledger Nano S, Nano S Plus or Nano X required" + "description": "Se requiere Ledger Nano S, Nano S Plus o Nano X" } }, "setupRecovered": { @@ -77,7 +77,7 @@ "importFile": "Usar copia de seguridad de Stronghold", "importFileDescription": "Importa tu copia de seguridad de Stronghold", "importLedger": "Usar dispositivo Ledger", - "importLedgerDescription": "Restore from your Ledger Nano S, Nano S Plus or X device" + "importLedgerDescription": "Restaurar desde tu dispositivo Ledger Nano S, Nano S Plus o X" }, "setupClaimed": { "title": "Reclamar recompensas de staking de Shimmer", @@ -925,7 +925,7 @@ "addressesFound": "Direcciones encontradas", "totalAddressBalance": "Balance total", "searchAgainHint": "¿Su saldo o número de billeteras es incorrecto? Busque de nuevo hasta que se muestre su saldo completo.", - "currentWallet": "Search only in the current wallet" + "currentWallet": "Buscar sólo en la cartera actual" }, "balanceOverview": { "title": "Resumen del balance", diff --git a/packages/shared/locales/fr.json b/packages/shared/locales/fr.json index d3ec0ad0fc2..0a92c71b309 100644 --- a/packages/shared/locales/fr.json +++ b/packages/shared/locales/fr.json @@ -66,7 +66,7 @@ }, "ledgerAccount": { "title": "Create a hardware profile", - "description": "Ledger Nano S, Nano S Plus or Nano X required" + "description": "Ledger Nano S, Nano S Plus ou Nano X requis" } }, "setupRecovered": { @@ -77,7 +77,7 @@ "importFile": "Use Stronghold backup", "importFileDescription": "Import your Stronghold backup file", "importLedger": "Use Ledger device", - "importLedgerDescription": "Restore from your Ledger Nano S, Nano S Plus or X device" + "importLedgerDescription": "Restaurer depuis votre Ledger Nano S, Nano S Plus ou X" }, "setupClaimed": { "title": "Claim Shimmer staking rewards", @@ -925,7 +925,7 @@ "addressesFound": "Adresses trouvées", "totalAddressBalance": "Balance totale", "searchAgainHint": "Votre solde ou le nombre de portefeuilles sont incorrects ? Appuyez à nouveau sur la recherche jusqu'à ce que votre solde complet soit affiché.", - "currentWallet": "Search only in the current wallet" + "currentWallet": "Rechercher uniquement dans le portefeuille actuel" }, "balanceOverview": { "title": "Aperçu du solde", diff --git a/packages/shared/locales/hu.json b/packages/shared/locales/hu.json index b5006e07008..7d1ca829208 100644 --- a/packages/shared/locales/hu.json +++ b/packages/shared/locales/hu.json @@ -66,7 +66,7 @@ }, "ledgerAccount": { "title": "Hardverprofil létrehozása", - "description": "Ledger Nano S, Nano S Plus or Nano X required" + "description": "Ledger Nano S, Nano S Plus vagy Nano X eszköz szükséges" } }, "setupRecovered": { @@ -77,7 +77,7 @@ "importFile": "Stonghold biztonsági mentés használata", "importFileDescription": "Importálja a Stronghold biztonsági mentés fájlját", "importLedger": "Ledger eszköz használata", - "importLedgerDescription": "Restore from your Ledger Nano S, Nano S Plus or X device" + "importLedgerDescription": "Profil helyreállítása Ledger Nano S, Nano S Plus vagy X eszközről" }, "setupClaimed": { "title": "Shimmer jutalom igénylése", @@ -925,7 +925,7 @@ "addressesFound": "Addresses found", "totalAddressBalance": "Total balance", "searchAgainHint": "Is your balance or number of wallets incorrect? Search again until your full balance is shown.", - "currentWallet": "Search only in the current wallet" + "currentWallet": "Keresés kizárólag a jelenlegi tárcában" }, "balanceOverview": { "title": "Balance overview", diff --git a/packages/shared/locales/ko.json b/packages/shared/locales/ko.json index ab9b6f93fcc..9c3950d1765 100644 --- a/packages/shared/locales/ko.json +++ b/packages/shared/locales/ko.json @@ -66,7 +66,7 @@ }, "ledgerAccount": { "title": "Create a hardware profile", - "description": "Ledger Nano S, Nano S Plus or Nano X required" + "description": "Ledger Nano S, Nano S Plus 또는 Nano X가 필요합니다." } }, "setupRecovered": { @@ -77,7 +77,7 @@ "importFile": "Use Stronghold backup", "importFileDescription": "Import your Stronghold backup file", "importLedger": "Use Ledger device", - "importLedgerDescription": "Restore from your Ledger Nano S, Nano S Plus or X device" + "importLedgerDescription": "Ledger Nano S, Nano S Plus or Nano X 기기에서 복원" }, "setupClaimed": { "title": "Claim Shimmer staking rewards", @@ -509,19 +509,19 @@ "headers": { "upcoming": "나중에 다시 확인", "commencing": "Pre-staking 시작", - "holding": "{duration} of staking left", + "holding": "{duration} 남은 스테이킹 기간", "ended": "스테이킹이 이제 종료되었습니다", - "inactive": "No staking events detected" + "inactive": "스테이킹 이벤트가 감지되지 않았습니다." }, "bodies": { - "upcoming": "Stake your {token} tokens to automatically receive rewards every 10 seconds once staking starts on {date}.", - "commencing": "Stake your {token} tokens to automatically receive rewards every 10 seconds once staking starts on {date}.", - "holdingAndStaking": "You automatically receive rewards every 10 seconds.", - "holdingAndNotStaking": "Stake your {token} tokens to receive rewards every 10 seconds.", - "endedAndDidStake": "{token} rewards will be distributed to your wallet once the network launches.", - "endedAndDidNotStake": "You did not participate in this airdrop.", - "endedAndDidNotReachMinRewards": "You did not stake enough {token} tokens to reach the minimum airdrop rewards.", - "inactive": "Open network configuration in the advanced settings and make sure the current node has the \"Participation\" feature by clicking \"View info\"." + "upcoming": "{date} 에 스테이킹이 시작되면, 10초마다 자동으로 보상을 받으려면 {token} 토큰을 스테이킹하세요.", + "commencing": "{date} 에 스테이킹이 시작되면 10초마다 자동으로 보상을 받으려면 {token} 토큰을 스테이킹하세요.", + "holdingAndStaking": "10초마다 자동으로 보상을 받습니다.", + "holdingAndNotStaking": "10초마다 보상을 받으려면 {token} 토큰을 스테이킹하세요.", + "endedAndDidStake": "네트워크가 출시되면 {token} 보상이 지갑에 배포됩니다.", + "endedAndDidNotStake": "이번 에어드랍에 참여하지 않았습니다.", + "endedAndDidNotReachMinRewards": "최소 에어드롭 보상에 도달할 만큼 충분한 {token} 토큰을 스테이킹하지 않았습니다.", + "inactive": "고급 설정에서 네트워크 구성을 열고 \"정보 보기\"를 클릭하여 현재 노드에 \"참여\" 기능이 있는지 확인하세요." } }, "airdrops": { @@ -535,12 +535,12 @@ }, "shimmer": { "name": "Shimmer", - "description": "The incentivized staging network to advance major innovations on IOTA. Whatever happens, happens. How Shimmer evolves is up to you." + "description": "IOTA의 주요 혁신을 발전시키기 위한 인센티브화된 스테이징 네트워크입니다. 무슨 일이든 일어날 수 있습니다. Shimmer가 어떻게 진화하는지는 당신에게 달려 있습니다." } }, "banners": { "new": "새 이벤트", - "complete": "Complete" + "complete": "완료" } }, "picker": { @@ -805,7 +805,7 @@ "hideAccount": { "title": "{name} 계정을 숨길까요?", "body": "숨겨진 지갑은 고급설정의 \"숨긴 지갑 표시\"를 활성화하면 다시 찾을 수 있습니다.", - "typePassword": "Type your wallet password to confirm.", + "typePassword": "확인을 위해 지갑 비밀번호를 입력하세요.", "hideAccount": "지갑 숨기기", "errorTitle": "{name} 계정을 숨길 수 없습니다", "errorBody1": "지갑을 숨기기 위해서는 잔액이 0이어야 합니다.", @@ -916,16 +916,16 @@ "transactionSummary": "Transaction to {recipient}", "surplusIncluded": "This transaction contains a surplus amount. Please double check this is the amount you want to send.", "sendingFromStakedAccount": "현재 staking중인 지갑에서 이체를 하고 있습니다. 이로 인해 여러분의 토큰 staking이 취소될 수 있습니다. 자유로이 이체하시되 그후에 남은 토큰을 다시 staking할 필요가 있을 수 있다는 점을 알아두세요.", - "sendingFromStakedAccountBelowMinReward": "You are sending a transfer from a wallet that has not yet reached the minimum staking rewards. This may unstake your tokens and you may lose your staking rewards on this wallet." + "sendingFromStakedAccountBelowMinReward": "아직 최소 스테이킹 보상에 도달하지 않은 지갑에서 이체를 보내고 있습니다. 이로 인해 토큰의 스테이킹이 해제될 수 있으며 이 지갑에 대한 스테이킹 보상을 잃을 수 있습니다." }, "balanceFinder": { - "title": "Balance finder", + "title": "잔액 검색기", "body": "Perform a more exhaustive search of balances.", "addressesSearched": "Addresses searched", "addressesFound": "Addresses found", "totalAddressBalance": "Total balance", "searchAgainHint": "Is your balance or number of wallets incorrect? Search again until your full balance is shown.", - "currentWallet": "Search only in the current wallet" + "currentWallet": "현재 지갑에서만 검색" }, "balanceOverview": { "title": "Balance overview", @@ -1014,26 +1014,26 @@ "title": "Staking 관리", "description": "지갑을 staking 하면 해당 자금에 staking 표시를 하여 여러분께 보내게됩니다. 자금은 언제든 이체 가능하지만 staking 보상 수령을 계속 받지는 못하게 됩니다.", "totalFundsStaked": "Staking 총 자금", - "stakedSuccessfully": "Your funds have been staked for {account}.", + "stakedSuccessfully": "귀하의 자금은 {account} 에 스테이킹되었습니다.", "unstakedSuccessfully": "Your funds have been unstaked for {account}.", "singleAccountHint": "Looking for your wallets? Firefly has changed. Toggle between your wallets in the top menu bar." }, "stakingConfirmation": { - "title": "Confirm Participation", + "title": "참여 확인", "subtitleStake": "Staking이 이제 시작됩니다.", "subtitleMerge": "Merge를 곧 시작합니다.", "multiAirdropWarning": "If you do not want to participate in both airdrops, you can opt-out below. You can unstake and restake to opt back in at any time.", - "mergeStakeWarning": "Your funds will be staked for {airdrop}. To change which airdrops you want to participate in, unstake this wallet and stake it again.", + "mergeStakeWarning": "자금은 {airdrop} 에 스테이킹됩니다. 참여하고 싶은 에어드랍을 변경하려면, 이 지갑을 언스테이킹하고 다시 스테이킹하세요.", "estimatedAirdrop": "예상 보상" }, "newStakingPeriodNotification": { - "title": "Staking phase {periodNumber} from {date}", + "title": "{date} 부터 스테이킹 단계 {periodNumber}", "body": "IOTA staking for Assembly continues... Participate in phase {periodNumber} for 90 days. Stake your IOTA tokens and earn ASMB rewards!", "info": "Shimmer staking is now complete and only ASMB tokens will be distributed." }, "shimmer-info": { "title": "Shimmer에 대하여", - "body1": "Congratulations you have earned SMR tokens as a staking reward. Shimmer is an incentivized staging network to test major upgrades on IOTA.", + "body1": "스테이킹 보상으로 SMR 토큰을 획득하신 것을 축하합니다. Shimmer는 IOTA의 주요 업그레이드를 테스트하기 위한 인센티브화된 네트워크입니다.", "body2": "Shimmer의 출발은 2022년을 목표로 하고 있습니다. 여러분의 토큰은 네트워크가 열리면 즉시 전송할 수 있게됩니다." }, "assembly-info": { @@ -1061,9 +1061,9 @@ "privPolicyCheckbox": "변경된 개인정보 보호 정책을 읽었으며 이에 동의합니다" }, "singleAccountGuide": { - "title": "The way you use Firefly has changed", - "body": "The content of each tab is now in the context of a single wallet. You can change the selected wallet from anywhere by using the switcher in the title bar.", - "hint": "Can't find a wallet? Use the balance finder in the settings to discover previously used wallets." + "title": "Firefly 사용 방식이 변경되었습니다.", + "body": "각 탭의 콘텐츠는 이제 단일 지갑의 맥락에 있습니다. 제목 표시줄의 전환기를 사용하여 어디에서나 선택한 지갑을 변경할 수 있습니다.", + "hint": "지갑을 찾을 수 없나요? 이전에 사용한 지갑을 찾으려면 설정에서 잔액 찾기를 사용하세요." }, "transactionDetails": { "title": "Transaction details", @@ -1291,7 +1291,7 @@ "enableDeepLinks": "Enable deep links", "enableDeveloperMode": "개발자 모드 활성화하기", "enableSystemNotifications": "시스템 알림 켜기", - "exportTransactionHistory": "Export transaction history", + "exportTransactionHistory": "거래 내역 내보내기", "localProofOfWork": "내 기기로 작업증명", "unlock": "잠금 해제", "updateFirefly": "Firefly 업데이트", @@ -1419,13 +1419,13 @@ "decreased": "Voting power decreased", "decreasing": "Decreasing voting power", "voted": "Voted", - "voting": "Voting", + "voting": "투표", "changedVote": "Changed vote", "changingVote": "Changing vote", "revoted": "Revoted", "revoting": "Revoting", - "unvoted": "Unvoted", - "unvoting": "Unvoting", + "unvoted": "투표취소", + "unvoting": "투표 안함", "sentNft": "NFT sent", "sendingNft": "Sending NFT", "receivedNft": "NFT received", @@ -1575,21 +1575,21 @@ "votedFor": "Voted for {account}", "unvotedFor": "Unvoted for {account}", "stakingTransaction": "Staking Transaction", - "unstakingTransaction": "Unstaking Transaction", + "unstakingTransaction": "스테이킹 해제 거래", "legacyNetwork": "예전 네트워크", "capsLock": "Caps Lock 켜짐", "version": "{version} 버전", - "yourWallets": "Your Wallets", + "yourWallets": "지갑", "unknown": "알 수 없음", "unknownAddress": "Unknown address", "none": "없음", "staked": "Staked", "unstaked": "Unstaked", "staking": "스테이킹", - "unstaking": "Unstaking", - "notStaked": "Not staked", - "stakedFunds": "Staked funds", - "unstakedFunds": "Unstaked funds", + "unstaking": "스테이킹 해제", + "notStaked": "스태이킹 되지않음", + "stakedFunds": "스테이킹된 자금", + "unstakedFunds": "스테이킹되지 않은 자금", "accountColor": "지갑 색상", "transactionTime": "Transaction time", "surplus": "Surplus", @@ -1824,7 +1824,7 @@ "unrecognizedOperation": "Unrecognized wallet operation: {operation}" } }, - "syncing": "Please wait until synchronization is finished to change wallets.", + "syncing": "지갑을 변경하려면 동기화가 완료될 때까지 기다려주세요.", "transferring": "Please wait until all transactions are completed.", "participating": "Please wait until all staking/voting transactions are completed to change wallets.", "claimed": { @@ -1913,7 +1913,7 @@ "account": { "addressNotFound": "The address cannot be found in your account.", "length": "지갑 이름은 {length, plural, other {#자}}보다 길 수 없습니다.", - "emptyName": "A profile name must contain at least 1 character.", + "emptyName": "프로필 이름에는 적어도 문자 1자 이상이 포함되어야 합니다.", "notEmpty": "이 지갑을 삭제하려면 지갑에 남은 잔고를 비워야 합니다.", "duplicate": "같은 이름의 지갑이 이미 있습니다.", "tilde": "프로필 이름은 `~`로 시작할 수 없습니다.", @@ -1979,7 +1979,7 @@ "timeNotSynced": "Device time is incorrect, unable to sync node.", "answer": "모든 노드로부터 응답을 받을 수 없습니다.", "forbidden": "이 노드 연결은 금지되었습니다.", - "pluginNotAvailable": "The \"{nodePlugin}\" plugin is not available on the current node.", + "pluginNotAvailable": "현재 노드에서는 \"{nodePlugin}\" 플러그인을 사용할 수 없습니다.", "unabledToConnect": "Unable to connect to the node", "differentNetwork": "The node is located on a different network", "duplicateNodes": "Unable to add duplicate node", @@ -2019,7 +2019,7 @@ "generateAddress": "주소를 생성하는 중 에러가 있었습니다.", "timeout": "Ledger 장치가 시간을 초과하였습니다.", "disconnected": "Ledger 장치의 연결이 끊어졌습니다.", - "noStronghold": "Unable to use Stronghold with Ledger profile." + "noStronghold": "Ledger 프로필로는 Stronghold를 사용할 수 없습니다." }, "popup": { "preventClose": "이 팝업창을 닫을 수 없습니다." @@ -2031,13 +2031,13 @@ "cannotDecodeBech32": "문자열을 Bech32 주소로 디코드할 수 없습니다." }, "participation": { - "cannotUseAccount": "Unable to use the specified account.", - "cannotFindStakingEvent": "Unable to find staking event.", - "cannotVisitAirdropWebsite": "Unable to open the {airdrop} website.", - "invalidStakingEventId": "Invalid staking event ID." + "cannotUseAccount": "지정된 계정을 사용할 수 없습니다.", + "cannotFindStakingEvent": "스테이킹 이벤트를 찾을 수 없습니다.", + "cannotVisitAirdropWebsite": "{airdrop} 웹사이트를 열 수 없습니다.", + "invalidStakingEventId": "잘못된 스테이킹 이벤트 ID입니다." }, - "invalidDate": "INVALID DATE", - "invalidTime": "INVALID TIME", + "invalidDate": "잘못된 날짜", + "invalidTime": "잘못된 시간", "shimmerClaiming": { "missingProfileManager": "Unable to find Shimmer claiming profile manager", "cannotInitialiseAccount": "Unable to initialize Shimmer claiming account", @@ -2110,7 +2110,7 @@ "http": "HTTP를 기반으로 노드를 이용하는 경우 트래픽이 암호화되지 않으며 보안 위험을 초래할 수 있습니다." }, "participation": { - "noFunds": "You do not have any IOTA." + "noFunds": "IOTA가 없습니다." } }, "tooltips": { @@ -2123,21 +2123,21 @@ "veryLow": "매우 낮음" }, "partiallyStakedFunds": { - "title": "New unstaked funds: {amount}", - "titleNoFunds": "New unstaked funds", - "preBody": "You have received tokens that are not staked.", - "body": "You need to manually stake these new funds to receive airdrop rewards for them." + "title": "새로운 스테이킹되지않은 자금: {amount}", + "titleNoFunds": "새로운 스테이킹되지않은 자금", + "preBody": "스테이킹되지 않은 토큰을 받았습니다.", + "body": "에어드랍 보상을 받으려면 이러한 새 자금을 수동으로 스테이킹해야 합니다." }, "stakingMinRewards": { - "title": "Below minimum reward value", - "titleMinBalance": "{amount} minimum balance required", - "bodyMinBalance": "This wallet does not have enough IOTA tokens to reach the minimum airdrop reward and cannot therefore be staked.", - "continue": "Please continue staking for another {duration}.", - "bodyBelowMin": "This wallet has not reached the minimum reward value for {airdrop} ({airdropRewardMin}).", - "bodyWillReachMin": "You must stake for another {duration} to reach the minimum.", - "bodyWillNotReachMin": "You will not reach the minimum reward value during the remaining staking period unless you add more IOTA.", - "bodyDidNotReachMin": "You did not stake enough IOTA to reach the minimum reward value for {airdrop} ({airdropRewardMin}).", - "bodyMinBalanceAirdrop": "This wallet does not have enough IOTA tokens to reach the minimum airdrop reward for {airdrop}." + "title": "최소 보상 가치 미만", + "titleMinBalance": "{amount} 최소 잔액 필요", + "bodyMinBalance": "이 지갑에는 최소 에어드랍 보상에 도달할 만큼 충분한 IOTA 토큰이 없으므로 스테이킹할 수 없습니다.", + "continue": "또 다른 {duration} 동안 스테이킹을 계속하세요.", + "bodyBelowMin": "이 지갑은 {airdrop}({airdropRewardMin}) 에 대한 최소 보상 값에 도달하지 않았습니다.", + "bodyWillReachMin": "최소 금액에 도달하려면 또 다른 {duration} 동안 스테이킹해야 합니다.", + "bodyWillNotReachMin": "IOTA를 더 추가하지 않으면 남은 스테이킹 기간 동안 최소 보상 값에 도달하지 못할 것입니다.", + "bodyDidNotReachMin": "{airdrop}({airdropRewardMin}) 의 최소 보상값에 도달할 만큼 충분한 IOTA를 스테이킹하지 않았습니다.", + "bodyMinBalanceAirdrop": "이 지갑에는 {airdrop} 에 대한 최소 에어드롭 보상에 도달할 만큼 충분한 IOTA 토큰이 없습니다." }, "optionalInput": "This optional data will be public on the explorer and viewable by everyone.", "transactionDetails": { @@ -2209,8 +2209,8 @@ }, "exports": { "transactionHistoryCsv": { - "messageId": "Message ID", - "internal": "Internal", + "messageId": "메시지 ID", + "internal": "내부", "rawValue": "Raw Value", "formattedValue": "Formatted Value", "date": "Date", diff --git a/packages/shared/locales/pl.json b/packages/shared/locales/pl.json index 008acccad65..bd6e688f3f0 100644 --- a/packages/shared/locales/pl.json +++ b/packages/shared/locales/pl.json @@ -66,7 +66,7 @@ }, "ledgerAccount": { "title": "Utwórz profil sprzętowy", - "description": "Ledger Nano S, Nano S Plus or Nano X required" + "description": "Wymagany Ledger Nano S, Nano S Plus lub Nano X" } }, "setupRecovered": { @@ -77,7 +77,7 @@ "importFile": "Użyj kopii zapasowej Stronghold", "importFileDescription": "Importuj plik kopii zapasowej Stronghold", "importLedger": "Użyj urządzenia Ledger", - "importLedgerDescription": "Restore from your Ledger Nano S, Nano S Plus or X device" + "importLedgerDescription": "Przywróć profil ze swojego urządzenia Ledger Nano S, Nano S Plus lub Nano X" }, "setupClaimed": { "title": "Odbierz nagrody Shimmer ze stakingu", @@ -925,7 +925,7 @@ "addressesFound": "Znalezione adresy", "totalAddressBalance": "Wszystkie środki", "searchAgainHint": "Czy Twoje saldo lub liczba portfeli są nieprawidłowe? Wykonaj ponowne szukanie, aż Twoje pełne saldo zostanie wyświetlone.", - "currentWallet": "Search only in the current wallet" + "currentWallet": "Szukaj tylko w bieżącym portfelu" }, "balanceOverview": { "title": "Przegląd salda", From cef043e61651af97665034f5ffee67155f8dee3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Esp=C3=ADn?= Date: Mon, 30 Oct 2023 10:19:07 +0100 Subject: [PATCH 11/48] chore: update FAQ link (#7460) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: Update FAQ link * Update faq-url.constant.ts --------- Co-authored-by: Begoña Álvarez de la Cruz --- .../shared/lib/contexts/settings/constants/faq-url.constant.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared/lib/contexts/settings/constants/faq-url.constant.ts b/packages/shared/lib/contexts/settings/constants/faq-url.constant.ts index 7837267a763..067a9460ae5 100644 --- a/packages/shared/lib/contexts/settings/constants/faq-url.constant.ts +++ b/packages/shared/lib/contexts/settings/constants/faq-url.constant.ts @@ -1 +1 @@ -export const FAQ_URL = 'https://wiki.iota.org/use/wallets/firefly/faq-and-troubleshooting' +export const FAQ_URL = 'https://firefly.iota.org/faq/' From f405fd2830c3dffe46a366974d375f55b4390f5f Mon Sep 17 00:00:00 2001 From: evavirseda Date: Mon, 30 Oct 2023 16:46:18 +0100 Subject: [PATCH 12/48] feat: do not suggest collecting if available funds < basic output min storage deposit or there arent enough outputs to consolidate (#7609) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: disable collect button if not available funds or outputs * fix: update function and rename variables * fix: update getMinRequiredStorageDeposit function * feat: add canCollect variable, fix reactivity and update getMinRequiredStorageDeposit fucntion * fix: improve canCollect condition * fix: reactivity --------- Co-authored-by: Begoña Alvarez --- .../views/dashboard/vesting/Vesting.svelte | 44 ++++++++++++++++--- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/packages/desktop/views/dashboard/vesting/Vesting.svelte b/packages/desktop/views/dashboard/vesting/Vesting.svelte index 8784f129177..c63bcdf71f8 100644 --- a/packages/desktop/views/dashboard/vesting/Vesting.svelte +++ b/packages/desktop/views/dashboard/vesting/Vesting.svelte @@ -17,7 +17,11 @@ import { getMarketAmountFromAssetValue } from '@core/market/utils' import { activeProfile } from '@core/profile' import { getBestTimeDuration } from '@core/utils' - import { formatTokenAmountBestMatch, selectedAccountAssets } from '@core/wallet' + import { + formatTokenAmountBestMatch, + getRequiredStorageDepositForMinimalBasicOutput, + selectedAccountAssets, + } from '@core/wallet' import { Button, FontWeight, @@ -31,12 +35,18 @@ MeatballMenuButton, TooltipIcon, } from '@ui' + import { onMount } from 'svelte' const DEFAULT_EMPTY_VALUE_STRING = '----' - $: hasTransactionInProgress = - $selectedAccount?.isTransferring || $selectedAccount.hasConsolidatingOutputsTransactionInProgress + let modal: Modal + let timeUntilNextPayout = DEFAULT_EMPTY_VALUE_STRING + let minRequiredStorageDeposit: number | null + let hasOutputsToConsolidate = false $: ({ baseCoin } = $selectedAccountAssets[$activeProfile?.network?.id]) + $: hasTransactionInProgress = + $selectedAccount?.isTransferring || $selectedAccount.hasConsolidatingOutputsTransactionInProgress + $: $selectedAccount, areOutputsReadyForConsolidation() $: vestingOverview = [ { title: localize('views.vesting.overview.unlocked'), @@ -56,10 +66,30 @@ : undefined, }, ] - - let modal: Modal - let timeUntilNextPayout = DEFAULT_EMPTY_VALUE_STRING $: $selectedAccountVestingPayouts, (timeUntilNextPayout = getTimeUntilNextPayout()) + $: canCollect = + $selectedAccountVestingUnclaimedFunds > 0 && + !hasTransactionInProgress && + minRequiredStorageDeposit !== null && + $selectedAccount?.balances?.baseCoin?.available > minRequiredStorageDeposit && + hasOutputsToConsolidate + + onMount(() => { + getMinRequiredStorageDeposit() + }) + + function areOutputsReadyForConsolidation(): void { + $selectedAccount + .prepareConsolidateOutputs({ force: false, outputThreshold: 2 }) + .then(() => (hasOutputsToConsolidate = true)) + .catch(() => (hasOutputsToConsolidate = false)) + } + + function getMinRequiredStorageDeposit() { + getRequiredStorageDepositForMinimalBasicOutput() + .then((deposit) => (minRequiredStorageDeposit = deposit)) + .catch(() => (minRequiredStorageDeposit = null)) + } function getFiatAmount(amount: number): string { return baseCoin ? formatCurrency(getMarketAmountFromAssetValue(amount, baseCoin)) : '' @@ -156,7 +186,7 @@ - - diff --git a/packages/desktop/components/popups/send/SendNftForm.svelte b/packages/desktop/components/popups/send/SendNftForm.svelte new file mode 100644 index 00000000000..54c9d757061 --- /dev/null +++ b/packages/desktop/components/popups/send/SendNftForm.svelte @@ -0,0 +1,178 @@ + + + + + + + + + + {#if !isLayer2Transfer} + + {/if} + + + {#if isTransferring} + + {/if} + + + + + diff --git a/packages/desktop/components/popups/send/SendTokenForm.svelte b/packages/desktop/components/popups/send/SendTokenForm.svelte new file mode 100644 index 00000000000..3899ad7c25a --- /dev/null +++ b/packages/desktop/components/popups/send/SendTokenForm.svelte @@ -0,0 +1,168 @@ + + + + + + + + + + {#if !isLayer2Transfer} + + {/if} + + + {#if isTransferring} + + {/if} + + + + + diff --git a/packages/shared/lib/core/wallet/stores/new-transaction-details.store.ts b/packages/shared/lib/core/wallet/stores/new-transaction-details.store.ts index 001e5eaeaf5..2cf2abe950c 100644 --- a/packages/shared/lib/core/wallet/stores/new-transaction-details.store.ts +++ b/packages/shared/lib/core/wallet/stores/new-transaction-details.store.ts @@ -18,10 +18,6 @@ export function resetNewTokenTransactionDetails(): void { }) } -export function resetNewTransactionDetails(): void { - newTransactionDetails.set(undefined) -} - export function updateNewTransactionDetails( payload: Partial & Pick ): void { diff --git a/packages/shared/lib/core/wallet/types/activities/base-activity.type.ts b/packages/shared/lib/core/wallet/types/activities/base-activity.type.ts index 4c466f290d1..99de5e6d85e 100644 --- a/packages/shared/lib/core/wallet/types/activities/base-activity.type.ts +++ b/packages/shared/lib/core/wallet/types/activities/base-activity.type.ts @@ -22,7 +22,7 @@ export type BaseActivity = { tag?: string asyncData: AsyncData destinationNetwork?: string - parsedLayer2Metadata?: Layer2Metadata + parsedLayer2Metadata?: Partial } export type AsyncData = { diff --git a/packages/shared/lib/core/wallet/utils/send/index.ts b/packages/shared/lib/core/wallet/utils/send/index.ts index 146b1329099..99ea0d519fe 100644 --- a/packages/shared/lib/core/wallet/utils/send/index.ts +++ b/packages/shared/lib/core/wallet/utils/send/index.ts @@ -1 +1,2 @@ +export * from './sendUtils' export * from './validateSendConfirmation' diff --git a/packages/shared/lib/core/wallet/utils/send/sendUtils.ts b/packages/shared/lib/core/wallet/utils/send/sendUtils.ts new file mode 100644 index 00000000000..30a735db839 --- /dev/null +++ b/packages/shared/lib/core/wallet/utils/send/sendUtils.ts @@ -0,0 +1,77 @@ +import { NewTransactionDetails, NftActivity, Subject, TransactionActivity, VestingActivity } from '@core/wallet/types' +import { NewTransactionType } from '@core/wallet/stores' +import { ActivityAction, ActivityDirection, ActivityType, InclusionState } from '@core/wallet/enums' +import { TimePeriod } from '@core/utils' +import { getAddressFromSubject } from '../getAddressFromSubject' +import { + ACCOUNTS_CONTRACT, + CONTRACT_FUNCTIONS, + ILayer2Parameters, + TARGET_CONTRACTS, + TRANSFER_ALLOWANCE, + getDestinationNetworkFromAddress, +} from '@core/layer-2' + +export enum SendFormTab { + SendToken = 'general.sendToken', + SendNft = 'general.sendNft', +} + +export enum OptionalInputType { + Metadata = 'metadata', + Tag = 'tag', +} + +export function getInitialExpirationDate( + expirationDate: Date, + storageDeposit: number, + giftStorageDeposit: boolean +): TimePeriod { + if (expirationDate) { + return TimePeriod.Custom + } else if (storageDeposit && !giftStorageDeposit) { + return TimePeriod.OneDay + } else { + return TimePeriod.None + } +} + +export function rebuildActivity( + transactionDetails: NewTransactionDetails, + recipient: Subject, + storageDeposit: number, + visibleSurplus: number, + isInternal: boolean, + layer2Parameters: ILayer2Parameters +): Partial { + return { + ...(transactionDetails as unknown as TransactionActivity | VestingActivity | NftActivity), + id: undefined, + outputId: undefined, + transactionId: undefined, + time: undefined, + asyncData: undefined, + assetId: + transactionDetails.type === NewTransactionType.TokenTransfer ? transactionDetails?.asset?.id : undefined, + storageDeposit, + subject: recipient, + isInternal, + containsValue: true, + isAssetHidden: false, + giftedStorageDeposit: 0, + surplus: visibleSurplus, + type: ActivityType.Basic, + direction: ActivityDirection.Outgoing, + inclusionState: InclusionState.Pending, + action: ActivityAction.Send, + destinationNetwork: getDestinationNetworkFromAddress(layer2Parameters?.networkAddress), + ...(layer2Parameters?.networkAddress && { + parsedLayer2Metadata: { + ethereumAddress: getAddressFromSubject(recipient), + targetContract: TARGET_CONTRACTS[ACCOUNTS_CONTRACT], + contractFunction: CONTRACT_FUNCTIONS[TRANSFER_ALLOWANCE], + gasBudget: (layer2Parameters?.gasBudget ?? 0).toString(), + }, + }), + } +} From f8c3171fccff56c2c2f9e93217d3a1b1c981edd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bego=C3=B1a=20=C3=81lvarez=20de=20la=20Cruz?= Date: Tue, 14 Nov 2023 09:58:44 +0100 Subject: [PATCH 21/48] fix: wrong migration chrysalis locale (#7712) --- packages/shared/locales/en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/shared/locales/en.json b/packages/shared/locales/en.json index 772f587a656..6175f325568 100644 --- a/packages/shared/locales/en.json +++ b/packages/shared/locales/en.json @@ -1234,14 +1234,14 @@ "save": "Save", "importSeed": "Import an existing seed", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", From cb046576211f0d99c1222e7ede9b0eaee17c0a0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bego=C3=B1a=20=C3=81lvarez=20de=20la=20Cruz?= Date: Tue, 14 Nov 2023 11:04:15 +0100 Subject: [PATCH 22/48] chore: bump @iota/sdk to v1.1.3 (#7713) --- packages/shared/package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/shared/package.json b/packages/shared/package.json index 925ef85b935..00e57704c69 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -11,7 +11,7 @@ "@iota/transaction-converter": "^1.0.0-beta.30", "@iota/unit-converter": "^1.0.0-beta.30", "@iota/util.js": "^2.0.0-rc.1", - "@iota/sdk": "1.1.1", + "@iota/sdk": "1.1.3", "@sveltejs/svelte-virtual-list": "^3.0.1", "big-integer": "^1.6.51", "big.js": "^6.0.3", diff --git a/yarn.lock b/yarn.lock index ea54bb379a2..505183e3e1d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -767,10 +767,10 @@ resolved "https://registry.yarnpkg.com/@iota/pad/-/pad-1.0.0-beta.30.tgz#de19728f8f1b09c20e2365d0da34945006760082" integrity sha512-fnhPMPul18WunLq9Ni4rxzBFmhna6eaG8WroDg6GdQqSK/eN62uFHV8tpspJHXuCqwgCUVp6NpuUna7+B2OV9g== -"@iota/sdk@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@iota/sdk/-/sdk-1.1.1.tgz#0b6ea359a38ceea42a8e788cebe8728e9ee179bb" - integrity sha512-63WcGZGwlIwZpIhk+F+ozxm9miRy+eDmCoyIS/8actUNlH8zG5DXmjtWqxZx89se9UEAZyr4eZH7JJlwfkieqQ== +"@iota/sdk@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@iota/sdk/-/sdk-1.1.3.tgz#ab54cf72d9fa46321ae635cdd7fb2e085e888d95" + integrity sha512-Igy1Pl4mLPIGJddepcJ0i3xF/6Yup8pMl0eSTknN1A97qhsNtvmV1iDDhSxAshmJYyBQ8LEzd0DrMrq5tioYyg== dependencies: "@types/node" "^18.15.12" cargo-cp-artifact "^0.1.6" From 549ef60eaadd93389b11c866e5e17171f213db1f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Nov 2023 18:33:05 +0100 Subject: [PATCH 23/48] chore(deps-dev): bump postcss from 8.4.25 to 8.4.31 (#7560) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [postcss](https://github.com/postcss/postcss) from 8.4.25 to 8.4.31. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.25...8.4.31) --- updated-dependencies: - dependency-name: postcss dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Begoña Álvarez de la Cruz --- packages/shared/package.json | 2 +- yarn.lock | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/packages/shared/package.json b/packages/shared/package.json index 00e57704c69..1ec9bab1617 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -38,7 +38,7 @@ "autoprefixer": "^10.4.16", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", - "postcss": "^8.4.23", + "postcss": "^8.4.31", "postcss-cli": "^10.1.0", "prettier": "3.0.3", "prettier-plugin-svelte": "^3.0.3", diff --git a/yarn.lock b/yarn.lock index 505183e3e1d..b2758dd7cb0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1695,6 +1695,13 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== +"@types/node-forge@^1.3.0": + version "1.3.8" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.8.tgz#044ad98354ff309a031a55a40ad122f3be1ac2bb" + integrity sha512-vGXshY9vim9CJjrpcS5raqSjEfKlJcWy2HNdgUasR66fAnVEYarrf1ULV4nfvpC1nZq/moA9qyqBcu83x+Jlrg== + dependencies: + "@types/node" "*" + "@types/node@*": version "20.4.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.0.tgz#01d637d1891e419bc85763b46f42809cd2d5addb" @@ -6866,10 +6873,10 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.4.21, postcss@^8.4.23: - version "8.4.25" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.25.tgz#4a133f5e379eda7f61e906c3b1aaa9b81292726f" - integrity sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw== +postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.31: + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" @@ -7397,10 +7404,11 @@ select-hose@^2.0.0: integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== selfsigned@^2.0.1, selfsigned@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== + version "2.4.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" + integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== dependencies: + "@types/node-forge" "^1.3.0" node-forge "^1" semver-compare@^1.0.0: From 1af41739b20a7a8aebb53d7371bb16fdf5b275f0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Nov 2023 18:45:20 +0100 Subject: [PATCH 24/48] New Crowdin translations by Github Action (#7684) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Crowdin Bot Co-authored-by: Begoña Álvarez de la Cruz --- packages/shared/locales/af.json | 17 +- packages/shared/locales/ar.json | 17 +- packages/shared/locales/bg.json | 17 +- packages/shared/locales/ca.json | 17 +- packages/shared/locales/cs.json | 17 +- packages/shared/locales/da.json | 17 +- packages/shared/locales/de.json | 17 +- packages/shared/locales/el.json | 17 +- packages/shared/locales/eo.json | 17 +- packages/shared/locales/es-ES.json | 17 +- packages/shared/locales/es-LA.json | 17 +- packages/shared/locales/et.json | 17 +- packages/shared/locales/fa.json | 17 +- packages/shared/locales/fi.json | 17 +- packages/shared/locales/fr.json | 17 +- packages/shared/locales/he.json | 17 +- packages/shared/locales/hi.json | 17 +- packages/shared/locales/hr.json | 17 +- packages/shared/locales/hu.json | 17 +- packages/shared/locales/id.json | 17 +- packages/shared/locales/it.json | 17 +- packages/shared/locales/ja.json | 17 +- packages/shared/locales/ko.json | 269 +++++++++++++++-------------- packages/shared/locales/ku.json | 17 +- packages/shared/locales/lv.json | 17 +- packages/shared/locales/mk.json | 17 +- packages/shared/locales/nl.json | 17 +- packages/shared/locales/no.json | 17 +- packages/shared/locales/pl.json | 21 +-- packages/shared/locales/pt-BR.json | 17 +- packages/shared/locales/pt-PT.json | 17 +- packages/shared/locales/ro.json | 17 +- packages/shared/locales/ru.json | 17 +- packages/shared/locales/si.json | 17 +- packages/shared/locales/sk.json | 17 +- packages/shared/locales/sl.json | 17 +- packages/shared/locales/sq.json | 17 +- packages/shared/locales/sr.json | 17 +- packages/shared/locales/sv.json | 17 +- packages/shared/locales/tr.json | 17 +- packages/shared/locales/uk.json | 17 +- packages/shared/locales/ur.json | 17 +- packages/shared/locales/vi.json | 17 +- packages/shared/locales/zh-CN.json | 17 +- packages/shared/locales/zh-TW.json | 17 +- 45 files changed, 533 insertions(+), 488 deletions(-) diff --git a/packages/shared/locales/af.json b/packages/shared/locales/af.json index c81b0a8e04c..25a16ac3aff 100644 --- a/packages/shared/locales/af.json +++ b/packages/shared/locales/af.json @@ -812,12 +812,6 @@ "errorBody2": "Jy het tans {balance} op hierdie beursie oor. Skuif hierdie fondse na 'n ander beursie en probeer weer.", "errorBody3": "Jy kan nie hierdie beursie versteek nie, jy moet ten minste een hê." }, - "addressHistory": { - "title": "{name} adresgeskiedenis", - "currentBalance": "Balans: {balance}", - "internal": "Interne adres", - "external": "Deposito adres" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Stoor", "importSeed": "Voer 'n bestaande seed in", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Besoek FAQ", "viewDownloads": "View downloads", "viewStatus": "Sien status", + "viewAddressHistory": "Bekyk adresgeskiedenis", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Wys versteekte beursie", diff --git a/packages/shared/locales/ar.json b/packages/shared/locales/ar.json index 9b3884c6217..3bb3320867f 100644 --- a/packages/shared/locales/ar.json +++ b/packages/shared/locales/ar.json @@ -812,12 +812,6 @@ "errorBody2": "لديك حاليا {balance} متبقي على هذه المحفظة. الرجاء نقل هذه الأموال إلى محفظة مختلفة وحاول مرة أخرى.", "errorBody3": "لا يمكنك إخفاء هذه المحفظة، يجب أن يكون لديك واحدة على الأقل." }, - "addressHistory": { - "title": "عرض سجل عمليات العنوان {name}", - "currentBalance": "الرصيد {balance}", - "internal": "حساب فرعي داخلي", - "external": "حساب الايداع" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "حفظ", "importSeed": "استيراد رموز سرية موجودة", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "زيارة الأسئلة المكررة", "viewDownloads": "View downloads", "viewStatus": "عرض الحالة", + "viewAddressHistory": "عرض سجل العناوين", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "إظهار الملفات المخفية", diff --git a/packages/shared/locales/bg.json b/packages/shared/locales/bg.json index 535abee8647..b6be59e4a1c 100644 --- a/packages/shared/locales/bg.json +++ b/packages/shared/locales/bg.json @@ -812,12 +812,6 @@ "errorBody2": "В момента имате {balance} оставащи в този портфейл. Моля преместете средствата в друг портфейл и опитайте отново.", "errorBody3": "Не можете да изтриете този портфейл, трябва да имате минимум един." }, - "addressHistory": { - "title": "{name} история на адрес", - "currentBalance": "Баланс: {balance}", - "internal": "Вътрешни адреси", - "external": "Депозит адрес" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Запис", "importSeed": "Импортиране на съществуващ seed", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Посети ЧЗВ-FAQ", "viewDownloads": "View downloads", "viewStatus": "Покажи статус", + "viewAddressHistory": "Покажи история на адресите", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Покажи скрити портфейли", diff --git a/packages/shared/locales/ca.json b/packages/shared/locales/ca.json index 929a51a63c7..5a7f0100e62 100644 --- a/packages/shared/locales/ca.json +++ b/packages/shared/locales/ca.json @@ -812,12 +812,6 @@ "errorBody2": "Actualment, teniu un balanç {balance} en aquest moneder. Moveu aquests fons a un moneder diferent i torneu-ho a provar.", "errorBody3": "No podeu amagar aquest moneder, n'heu de tenir un, com a mínim." }, - "addressHistory": { - "title": "Historial d'adreces de {name}", - "currentBalance": "Saldo {balance}", - "internal": "Adreça interna", - "external": "Adreça de dipòsit" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Historial de l'adreça", + "disclaimer": "Llista d'adreces amb fons o reconegudes per aquest perfil", + "indexAndType": "{internal, select, true {Adreça interna} other {Adreça de dipòsit}}{index}", + "internal": "Interna" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Guardar", "importSeed": "Importeu una llavor existent", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Visita les FAQ", "viewDownloads": "View downloads", "viewStatus": "Mostra l'estat", + "viewAddressHistory": "Veure l'historial d'adreces", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verifiqueu l'adreça de destí", "showHiddenAccounts": "Mostra els moneders amagats", diff --git a/packages/shared/locales/cs.json b/packages/shared/locales/cs.json index 2082d40681f..7c47ef10021 100644 --- a/packages/shared/locales/cs.json +++ b/packages/shared/locales/cs.json @@ -812,12 +812,6 @@ "errorBody2": "V současné době zbývá {balance} na tomto účtu. Přesuňte tyto prostředky na jiný účet a zkuste to znovu.", "errorBody3": "Nemůžete skrýt tuto peněženku, musíte mít alespoň jednu." }, - "addressHistory": { - "title": "{name} historie adres", - "currentBalance": "Zůstatek: {balance}", - "internal": "Interní adresa", - "external": "Adresa vkladu" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Uložit", "importSeed": "Importovat existující seed", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Navštivte FAQ", "viewDownloads": "View downloads", "viewStatus": "Zobrazit status", + "viewAddressHistory": "Zobrazit historii adresy", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Zobrazit skryté peněženky", diff --git a/packages/shared/locales/da.json b/packages/shared/locales/da.json index 60a98ba1492..b7e7f96e76c 100644 --- a/packages/shared/locales/da.json +++ b/packages/shared/locales/da.json @@ -812,12 +812,6 @@ "errorBody2": "Du har i øjeblikket {balance} tilbage på denne wallet. Flyt disse midler til en anden wallet og prøv igen.", "errorBody3": "Du kan ikke skjule denne wallet, du skal have mindst en." }, - "addressHistory": { - "title": "{name} adresse historik", - "currentBalance": "Saldo: {balance}", - "internal": "Intern adresse", - "external": "Deponeringsadresse" - }, "excludeNode": { "title": "Udeluk node", "body": "Sikker på, at {url} skal udelukkes fra den tilgængelige nodepulje?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Adressehistorik", + "disclaimer": "Liste over adresser med midler eller kendt af denne profil", + "indexAndType": "{internal, select, true {Intern adresse} other {Indbetalingsadresse}} {index}", + "internal": "Intern" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Gem", "importSeed": "Importer et eksisterende seed", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Gendan IOTA-profil", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Gendan en eksisterende IOTA-profil", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Besøg FAQ", "viewDownloads": "Se downloads", "viewStatus": "Vis Status", + "viewAddressHistory": "Se historik for addresse", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Bekræft indbetalingsadresse", "showHiddenAccounts": "Vis skjulte wallets", diff --git a/packages/shared/locales/de.json b/packages/shared/locales/de.json index 19324146086..b5aa772d435 100644 --- a/packages/shared/locales/de.json +++ b/packages/shared/locales/de.json @@ -812,12 +812,6 @@ "errorBody2": "Du hast derzeit {balance} auf dieser Wallet. Bitte verschiebe dein Guthaben auf eine andere Wallet und versuche es erneut.", "errorBody3": "Du kannst diese Wallet nicht ausblenden. Es musst mindestens eine vorhanden sein." }, - "addressHistory": { - "title": "{name} Adressverlauf", - "currentBalance": "Guthaben: {balance}", - "internal": "Interne Adresse", - "external": "Einzahlungsadresse" - }, "excludeNode": { "title": "Node ausschließen", "body": "Bist du sicher, dass du {url} aus dem verfügbaren Nodepool ausschließen möchtest?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Anmeldung erforderlich", "body": "Diese Node erfordert zusätzliche Authentifizierung. Bitte gib die entsprechenden Informationen ein." + }, + "addressHistory": { + "title": "Adressverlauf", + "disclaimer": "Liste der Adressen mit Guthaben bzw. die diesem Profil bekannt sind", + "indexAndType": "{internal, select, true {Interne Adresse} other {Einzahlungsadresse}} {index}", + "internal": "Intern" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Speichern", "importSeed": "Importiere einen vorhandenen Seed", "restoreWallet": { - "iota": "Wallet migrieren oder wiederherstellen", + "iota": "IOTA-Profil wiederherstellen", "iotaAlphanet": "IOTA Alphanet Profil wiederherstellen", "shimmer": "Shimmer Profil wiederherstellen", "testnet": "Testnet Profil wiederherstellen", "custom": "Benutzerdefiniertes Netzwerkprofil wiederherstellen" }, "restoreWalletDescription": { - "iota": "Zu Chrysalis migrieren oder vorhandene Wallet wiederherstellen", + "iota": "Bestehendes IOTA-Profil wiederherstellen", "iotaAlphanet": "Ein bestehendes IOTA Alphanet Profil wiederherstellen", "shimmer": "Ein bestehendes Shimmer Profil wiederherstellen", "testnet": "Ein existierendes Testnet Profil wiederherstellen", @@ -1338,6 +1338,7 @@ "visitFaq": "Gehe zu den FAQs", "viewDownloads": "Downloads anzeigen", "viewStatus": "Status ansehen", + "viewAddressHistory": "Adressverlauf anzeigen", "viewBalanceBreakdown": "Saldenaufteilung anzeigen", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Ausgeblendete Wallets anzeigen", diff --git a/packages/shared/locales/el.json b/packages/shared/locales/el.json index db49750e64b..32ff50c1f4c 100644 --- a/packages/shared/locales/el.json +++ b/packages/shared/locales/el.json @@ -812,12 +812,6 @@ "errorBody2": "Αυτή τη στιγμή απομένει {balance} σε αυτό το πορτοφόλι. Μετακινήστε αυτά τα κεφάλαια σε ένα διαφορετικό πορτοφόλι και προσπαθήστε ξανά.", "errorBody3": "Δεν μπορείτε να διαγράψετε αυτό το πορτοφόλι, πρέπει να έχετε τουλάχιστον ένα." }, - "addressHistory": { - "title": "Ιστορικό διευθύνσεων {name}", - "currentBalance": "Υπόλοιπο: {balance}", - "internal": "Εσωτερική Διεύθυνση", - "external": "Διεύθυνση Κατάθεσης" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Αποθήκευση", "importSeed": "Εισαγωγή υφιστάμενου seed", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Επισκεφθείτε Τις Συχνές Ερωτήσεις", "viewDownloads": "View downloads", "viewStatus": "Προβολή κατάστασης", + "viewAddressHistory": "Προβολή ιστορικού διευθύνσεων", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Εμφάνιση κρυφών πορτοφολιών", diff --git a/packages/shared/locales/eo.json b/packages/shared/locales/eo.json index 0477a084a20..0d492ecdfab 100644 --- a/packages/shared/locales/eo.json +++ b/packages/shared/locales/eo.json @@ -812,12 +812,6 @@ "errorBody2": "Vi nuntempe havas {balance} restantan sur ĉi tiu monujo. Bonvolu movigi ĉi tiujn bonhavojn al alia monujo kaj reprovi.", "errorBody3": "Vi ne povas forigi ĉi tiun monujon, vi devas havi almenaŭ unu." }, - "addressHistory": { - "title": "{name} adreshistorio", - "currentBalance": "Bonhavojn: {balance}", - "internal": "Interna Adreso", - "external": "Depona Adreso" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Konservi", "importSeed": "Importi ekzistantan semon", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Vizitu Demandojn", "viewDownloads": "View downloads", "viewStatus": "Vidi statuso", + "viewAddressHistory": "Vidi adresan historion", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Montri kaŝitajn monujojn", diff --git a/packages/shared/locales/es-ES.json b/packages/shared/locales/es-ES.json index 3a544dd9e6f..a79531fba10 100644 --- a/packages/shared/locales/es-ES.json +++ b/packages/shared/locales/es-ES.json @@ -812,12 +812,6 @@ "errorBody2": "Actualmente tienes {balance} restantes en esta cartera. Por favor mueve estos fondos a una cartera distinta y prueba de nuevo.", "errorBody3": "No puedes ocultar esta cartera, debes tener al menos una." }, - "addressHistory": { - "title": "{name} historial de direcciones", - "currentBalance": "Saldo: {balance}", - "internal": "Dirección interna", - "external": "Dirección de depósito" - }, "excludeNode": { "title": "Excluir nodo", "body": "¿Está seguro que desea excluir a {url} del grupo de nodos disponibles?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Autenticación requerida", "body": "Este nodo requiere autenticación adicional. Por favor, rellena la información apropiada." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Guardar", "importSeed": "Importar una semilla existente", "restoreWallet": { - "iota": "Migrar o restaurar una cartera", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restaurar perfil de IOTA Alphanet", "shimmer": "Restaurar perfil de Shimmer", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrar a Chrysalis o restaurar una cartera existente", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restaurar perfil de IOTA Alphanet", "shimmer": "Restaurar un perfil de Shimmer existente", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Ver las preguntas frecuentes resueltas", "viewDownloads": "View downloads", "viewStatus": "Ver estado", + "viewAddressHistory": "Ver historial de direcciones", "viewBalanceBreakdown": "Ver desglose de saldo", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Mostrar carteras ocultas", diff --git a/packages/shared/locales/es-LA.json b/packages/shared/locales/es-LA.json index 964ff58732d..2cab9ef6602 100644 --- a/packages/shared/locales/es-LA.json +++ b/packages/shared/locales/es-LA.json @@ -812,12 +812,6 @@ "errorBody2": "Actualmente tienes {balance} restantes en esta billetera. Por favor mueve estos fondos a una billetera distinta y prueba de nuevo.", "errorBody3": "No puedes ocultar esta billetera, debes tener al menos una." }, - "addressHistory": { - "title": "{name} historial de direcciones", - "currentBalance": "Saldo: {balance}", - "internal": "Dirección interna", - "external": "Dirección de depósito" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Guardar", "importSeed": "Importar una semilla existente", "restoreWallet": { - "iota": "Migrar o restaurar una billetera", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restaurar perfil de Shimmer", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrar a Chrysalis o restaurar una billetera existente", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restaurar un perfil de Shimmer existente", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Ver las preguntas frecuentes", "viewDownloads": "View downloads", "viewStatus": "Ver estado", + "viewAddressHistory": "Ver historial de direcciones", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Mostrar billeteras ocultas", diff --git a/packages/shared/locales/et.json b/packages/shared/locales/et.json index 11aa393f41f..c1c4d313ac5 100644 --- a/packages/shared/locales/et.json +++ b/packages/shared/locales/et.json @@ -812,12 +812,6 @@ "errorBody2": "You currently have {balance} remaining on this wallet. Please move these funds to a different wallet and try again.", "errorBody3": "You cannot hide this wallet, you must have at least one." }, - "addressHistory": { - "title": "{name} addressi ajalugu", - "currentBalance": "Balance: {balance}", - "internal": "Internal Address", - "external": "Deposit Address" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Salvesta", "importSeed": "Import an existing seed", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Külasta KKK", "viewDownloads": "View downloads", "viewStatus": "View status", + "viewAddressHistory": "Vaata aadressi ajalugu", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Näita peidetud rahakotte", diff --git a/packages/shared/locales/fa.json b/packages/shared/locales/fa.json index f562a5f2512..b95d99f4058 100644 --- a/packages/shared/locales/fa.json +++ b/packages/shared/locales/fa.json @@ -812,12 +812,6 @@ "errorBody2": "در حال حاضر مانده حساب شما {balance} میباشد. لطفا این مبلغ را به کیف پول دیگری انتقال داده و دوباره امتحان کنید.", "errorBody3": "شما نمیتوانید این حساب را حذف کنید، باید حداقل یک کیف پول داشته باشید." }, - "addressHistory": { - "title": "تاریخچه آدرس {name}", - "currentBalance": "موجودی {balance}", - "internal": "آدرس های درونی", - "external": "آدرس دریافت" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "ذخیره", "importSeed": "وارد کردن سید موجود", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "بخش سوالات متداول را ببینید", "viewDownloads": "View downloads", "viewStatus": "نشان دادن موقعیت", + "viewAddressHistory": "نمایش سوابق آدرس", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "نمایش کیف پول های مخفی", diff --git a/packages/shared/locales/fi.json b/packages/shared/locales/fi.json index 82b8fd4348a..92f5fb81463 100644 --- a/packages/shared/locales/fi.json +++ b/packages/shared/locales/fi.json @@ -812,12 +812,6 @@ "errorBody2": "Sinulla on tällä hetkellä {balance} jäljellä tässä lompakossa. Ole hyvä ja siirrä nämä varat toiseen lompakkoon ja yritä uudelleen.", "errorBody3": "Et voi piilottaa tätä lompakkoa, sinulla on oltava vähintään yksi." }, - "addressHistory": { - "title": "Lompakon {name} osoitehistoria", - "currentBalance": "Saldo: {balance}", - "internal": "Sisäinen osoite", - "external": "Talletusosoite" - }, "excludeNode": { "title": "Hylkää solmu", "body": "Oletko varma, että haluat sulkea osoitteen {url} pois käytettävissä olevien solmujen joukosta?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Tallenna", "importSeed": "Tuo olemassaoleva seed-merkkijono", "restoreWallet": { - "iota": "Siirrä tai palauta lompakko", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Palauta Shimmer-profiili", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Siirry Chrysalis-verkkoon tai palauta olemassaoleva lompakko", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Palauta olemassaoleva Shimmer-profiili", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Katso usein kysytyt kysymykset", "viewDownloads": "View downloads", "viewStatus": "Näytä tila", + "viewAddressHistory": "Näytä osoitehistoria", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Näytä piilotetut lompakot", diff --git a/packages/shared/locales/fr.json b/packages/shared/locales/fr.json index 0a92c71b309..3cdc581be19 100644 --- a/packages/shared/locales/fr.json +++ b/packages/shared/locales/fr.json @@ -812,12 +812,6 @@ "errorBody2": "Il vous reste actuellement {balance} sur ce portefeuille. Veuillez déplacer ces fonds vers un portefeuille différent et réessayez.", "errorBody3": "Vous ne pouvez pas cacher ce portefeuille, vous devez en posséder au moins un." }, - "addressHistory": { - "title": "Historique de l'adresse {name}", - "currentBalance": "Solde: {balance}", - "internal": "Adresse Interne", - "external": "Adresse de Dépôt" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Historique de l'adresse", + "disclaimer": "Liste des adresses avec des fonds ou connues par ce profil", + "indexAndType": "{internal, select, true {Adresse interne} other {Adresse de dépôt}} {index}", + "internal": "Interne" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Sauvegarder", "importSeed": "Importer une seed existante", "restoreWallet": { - "iota": "Transférer ou restaurer un portefeuille", + "iota": "Restaurer le profil IOTA", "iotaAlphanet": "Restaurer le profil IOTA Alphanet", "shimmer": "Récupérer le profil Shimmer", "testnet": "Restaurer le profil Testnet", "custom": "Restaurer le profil réseau personnalisé" }, "restoreWalletDescription": { - "iota": "Migrer vers Chrysalis ou restaurer un portefeuille existant", + "iota": "Restaurer un profil IOTA existant", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restaurer un profil Shimmer existant", "testnet": "Restaurer un profil Testnet existant", @@ -1338,6 +1338,7 @@ "visitFaq": "Visitez la FAQ", "viewDownloads": "Afficher les téléchargements", "viewStatus": "Voir le statut", + "viewAddressHistory": "Voir l'historique des adresses", "viewBalanceBreakdown": "Voir la répartition du solde", "verifyDepositAddress": "Vérifier l'adresse du dépôt", "showHiddenAccounts": "Afficher les portefeuilles cachés", diff --git a/packages/shared/locales/he.json b/packages/shared/locales/he.json index 828a305eee6..af056879301 100644 --- a/packages/shared/locales/he.json +++ b/packages/shared/locales/he.json @@ -812,12 +812,6 @@ "errorBody2": "You currently have {balance} remaining on this wallet. Please move these funds to a different wallet and try again.", "errorBody3": "You cannot hide this wallet, you must have at least one." }, - "addressHistory": { - "title": "{name} address history", - "currentBalance": "יתרה: {balance}", - "internal": "Internal Address", - "external": "כתובת לתקבול" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "שמור", "importSeed": "Import an existing seed", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "בקר בשאלות נפוצות", "viewDownloads": "View downloads", "viewStatus": "הצג סטטוס", + "viewAddressHistory": "צפה בהיסטוריית הארנק", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "הצג ארנקים מוסתרים", diff --git a/packages/shared/locales/hi.json b/packages/shared/locales/hi.json index 088291ab337..81b34ddc8ab 100644 --- a/packages/shared/locales/hi.json +++ b/packages/shared/locales/hi.json @@ -812,12 +812,6 @@ "errorBody2": "वर्तमान में आपके पास इस खाते पर {balance} बैलेंस है। कृपया इन निधियों को एक अलग खाते में ले जाएँ और पुनः प्रयास करें", "errorBody3": "आप इस वॉलेट को नहीं हटा सकते, आपके पास कम से कम एक होना चाहिए।" }, - "addressHistory": { - "title": "{name} खाता पता इतिहास", - "currentBalance": "Balance: {balance}", - "internal": "Internal Address", - "external": "Deposit Address" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "सेव करें", "importSeed": "एक मौजूदा सीड आयात करें", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "अक्सर पूछे FAQ", "viewDownloads": "View downloads", "viewStatus": "स्थिति देखें", + "viewAddressHistory": "एड्रेस का इतिहास देखें", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "छुपे हुए वॉलेट दिखाएँ", diff --git a/packages/shared/locales/hr.json b/packages/shared/locales/hr.json index e1631773686..990c2ee1d41 100644 --- a/packages/shared/locales/hr.json +++ b/packages/shared/locales/hr.json @@ -812,12 +812,6 @@ "errorBody2": "Trenutno u ovom novčaniku imate {balance}. Molimo prenesite sredstva u neki drugi novčanik i pokušajte ponovno.", "errorBody3": "Ne možete obrisati ovaj novčanik. Mora postojati barem jedan." }, - "addressHistory": { - "title": "{name} povijest adresa", - "currentBalance": "Stanje: {balance}", - "internal": "Interna adresa", - "external": "Adresa za depozit" - }, "excludeNode": { "title": "Izostavi node", "body": "Jeste li sigurni da želite izostaviti {url} iz popisa dostupnih nodeova?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Spremi", "importSeed": "Uvezite postojeći Seed", "restoreWallet": { - "iota": "Migriraj ili obnovi novčanik", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Obnovi Shimmer profil", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migriraj na Chrysalis mrežu ili oporavi postojeći novčanik", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Oporavi postojeći Shimmer profil", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Posjeti često postavljana pitanja", "viewDownloads": "View downloads", "viewStatus": "Vidi status", + "viewAddressHistory": "Povijest adresa", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Prikaži skrivene novčanike", diff --git a/packages/shared/locales/hu.json b/packages/shared/locales/hu.json index 7d1ca829208..a8ce1473514 100644 --- a/packages/shared/locales/hu.json +++ b/packages/shared/locales/hu.json @@ -812,12 +812,6 @@ "errorBody2": "{balance} összeg van a tárcájában. Kérjük, küldje át ezt az összeget egy másik tárcájába, majd próbálja újra.", "errorBody3": "Nem tudja elrejteni ezt a tárcát, legalább eggyel rendelkeznie kell." }, - "addressHistory": { - "title": "{name} korábban használt címei", - "currentBalance": "Egyenleg: {balance}", - "internal": "Tárcán belüli cím", - "external": "Letéti cím" - }, "excludeNode": { "title": "Csomópont mellőzése", "body": "Biztosan szeretné a(z) {url} URL-t mellőzni az elérhető csomópontok listájában?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Hitelesítés szükséges", "body": "Ez a csomópont további hitelesítést igényel. Kérjük, adja meg a megfelelő adatokat!" + }, + "addressHistory": { + "title": "Címek előzményei", + "disclaimer": "A pénzeszközökkel rendelkező vagy a jelen profil által ismert címek listája", + "indexAndType": "{internal, select, true {Tárcán belüli cím} other {Letéti cím}} {index}", + "internal": "Tárcán belüli" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Mentés", "importSeed": "Meglévő seed importálása", "restoreWallet": { - "iota": "Tárca átköltöztetése vagy helyreállítása", + "iota": "IOTA-profil helyreállítása", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Shimmer-profil helyreállítása", "testnet": "Teszt hálózati profil helyreállítása", "custom": "Egyéni hálózati profil helyreállítása" }, "restoreWalletDescription": { - "iota": "Költöztetés a Chrysalis-hálózatra vagy egy meglévő tárca helyreállítása", + "iota": "Meglévő IOTA-profil helyreállítása", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Egy meglévő Shimmer-profil helyreállítása", "testnet": "Meglévő teszt hálózati profil helyreállítása", @@ -1338,6 +1338,7 @@ "visitFaq": "GYIK megtekintése", "viewDownloads": "Letöltések megtekintése", "viewStatus": "Állapot megtekintése", + "viewAddressHistory": "Címek előzményeinek megjelenítése", "viewBalanceBreakdown": "Egyenleg részletezésének megtekintése", "verifyDepositAddress": "Letéti cím megerősítése", "showHiddenAccounts": "Rejtett tárcák megjelenítése", diff --git a/packages/shared/locales/id.json b/packages/shared/locales/id.json index eeca24c3696..186f4fc1f63 100644 --- a/packages/shared/locales/id.json +++ b/packages/shared/locales/id.json @@ -812,12 +812,6 @@ "errorBody2": "Saat ini Anda memiliki sisa {balance} di akun ini. Harap pindahkan dana ini ke akun lain dan coba lagi.", "errorBody3": "Anda tidak dapat menyembunyikan akun ini, Anda harus memiliki setidaknya satu." }, - "addressHistory": { - "title": "riwayat alamat {name}", - "currentBalance": "Saldo: ${balance}", - "internal": "Alamat Intern", - "external": "Alamat deposit" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Simpan", "importSeed": "Impor seed lama", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Kunjungi FAQ", "viewDownloads": "View downloads", "viewStatus": "Lihat status", + "viewAddressHistory": "Lihat riwayat alamat", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Tampilkan dompet/akun tersembunyi", diff --git a/packages/shared/locales/it.json b/packages/shared/locales/it.json index b37cd3d91c7..c797edaced4 100644 --- a/packages/shared/locales/it.json +++ b/packages/shared/locales/it.json @@ -812,12 +812,6 @@ "errorBody2": "Al momento hai {balance} rimanenti in questo wallet. Per favore sposta questi fondi in un wallet diverso e riprova.", "errorBody3": "Non puoi nascondere questo wallet, è necessario averne almeno uno." }, - "addressHistory": { - "title": "cronologia degli indirizzi di {name}", - "currentBalance": "Saldo: {balance}", - "internal": "Indirizzi interni", - "external": "Indirizzo di deposito" - }, "excludeNode": { "title": "Escludi il nodo", "body": "Sei sicuro di voler escludere {url} dal pool di nodi disponibile?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Autenticazione richiesta", "body": "Questo nodo richiede ulteriore autenticazione. Si prega di compilare le informazioni appropriate." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Salva", "importSeed": "Importa un seed esistente", "restoreWallet": { - "iota": "Migra o ripristina un wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Ripristina profilo Shimmer", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrare a Chrysalis o ripristinare un portafoglio esistente", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Ripristina un profilo Shimmer esistente", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Visita le Domande Frequenti", "viewDownloads": "View downloads", "viewStatus": "Visualizza stato", + "viewAddressHistory": "Visualizza cronologia indirizzi", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Mostra wallet nascosti", diff --git a/packages/shared/locales/ja.json b/packages/shared/locales/ja.json index 244c789119e..a6e4346a70d 100644 --- a/packages/shared/locales/ja.json +++ b/packages/shared/locales/ja.json @@ -812,12 +812,6 @@ "errorBody2": "現在、このウォレットに残金 {balance} があります。これらの資金を別のウォレットに移動して、もう一度やり直してください。", "errorBody3": "このウォレットを非表示にすることはできません。少なくとも 1 つのウォレットが必要です。" }, - "addressHistory": { - "title": "{name} アドレス履歴", - "currentBalance": "残高: {balance}", - "internal": "ウォレット内アドレス", - "external": "入金先アドレス" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "保存", "importSeed": "既存のシードをインポート", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "よくある質問を見る", "viewDownloads": "View downloads", "viewStatus": "ステータスを表示", + "viewAddressHistory": "アドレス履歴を表示", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "非表示ウォレットを表示", diff --git a/packages/shared/locales/ko.json b/packages/shared/locales/ko.json index c0a9ecaaf76..93c0375d015 100644 --- a/packages/shared/locales/ko.json +++ b/packages/shared/locales/ko.json @@ -812,12 +812,6 @@ "errorBody2": "이 지갑에 잔액이 {balance} 만큼 남아있습니다. 이것을 다른 지갑으로 옮기고 다시 시도하세요.", "errorBody3": "이 지갑은 숨길 수 없습니다. 최소한 하나는 있어야합니다." }, - "addressHistory": { - "title": "주소 {name} 이력", - "currentBalance": "잔액: {balance}", - "internal": "내부 주소", - "external": "입금 주소" - }, "excludeNode": { "title": "노드 제외하기", "body": "사용 가능한 노드 풀에서 {url} 을 제외하시겠습니까?" @@ -1096,15 +1090,15 @@ } }, "nativeToken": { - "formTitle": "Mint native tokens", - "confirmationTitle": "Mint native tokens", + "formTitle": "기본 토큰 발행", + "confirmationTitle": "기본 토큰 발행", "property": { "totalSupply": "총 공급량", "maximumSupply": "최대 공급량", "mintedTokens": "생성된 토큰", "meltedTokens": "Melted tokens", "circulatingSupply": "유통량", - "aliasAddress": "Alias controller address", + "aliasAddress": "별칭 컨트롤러 주소", "standard": "표준", "tokenName": "이름", "unit": "단위", @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "인증이 필요함", "body": "이 노드에는 추가 인증이 필요합니다. 해당 정보를 입력해 주세요." + }, + "addressHistory": { + "title": "주소 이력", + "disclaimer": "자금이 있거나 이 프로필로 알려진 주소 목록", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "내부" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "저장하기", "importSeed": "기존 시드 불러오기", "restoreWallet": { - "iota": "지갑 이전 또는 복원", + "iota": "IOTA 프로필 복원", "iotaAlphanet": "IOTA 알파넷 프로필 복원", "shimmer": "Shimmer 프로필 복원", "testnet": "테스트넷 프로필 복원", "custom": "사용자 정의 네트워크 프로필 복원" }, "restoreWalletDescription": { - "iota": "Chrysalis로 마이그레이션하거나 기존 지갑을 복원합니다.", + "iota": "기존 IOTA 프로필 복원", "iotaAlphanet": "기존 IOTA 알파넷 프로필을 복원합니다.", "shimmer": "기존 Shimmer 프로필을 복원합니다.", "testnet": "기존 테스트넷 프로필을 복원합니다.", @@ -1256,7 +1256,7 @@ "claimShimmer": "Shimmer 스테이킹 보상 요청하기", "claimShimmerDescription": "IOTA 프로필을 가져오고 스테이킹 보상을 요청합니다.", "createAlias": "별칭 만들기", - "createAliasDescription": "Create alias output", + "createAliasDescription": "별칭 출력 생성", "savePassword": "비밀번호 저장하기", "useBiometric": "생체 인증 사용하기", "setupPinCode": "PIN 코드 설정", @@ -1338,6 +1338,7 @@ "visitFaq": "자주 묻는 질문들 보기", "viewDownloads": "다운로드보기", "viewStatus": "상태 보기", + "viewAddressHistory": "주소 이력 보기", "viewBalanceBreakdown": "잔액 내역 보기", "verifyDepositAddress": "입금주소 확인", "showHiddenAccounts": "숨김 지갑 표시", @@ -1438,9 +1439,9 @@ "mintingNft": "NFT 발행", "shimmerClaimed": "받음", "shimmerClaiming": "받는 중", - "shimmerGenesis": "Shimmer Genesis", + "shimmerGenesis": "Shimmer 기원", "vestingReward": "Vesting Reward Airdrop", - "stardustGenesis": "Stardust Genesis", + "stardustGenesis": "Stardust 기원", "minted": "발행됨", "minting": "발행", "burned": "소각됨", @@ -1457,7 +1458,7 @@ "sendToAddress": "주소로 보내기", "sendToken": "토큰 전송", "sendNft": "NFT 전송", - "sendNftToAddress": "Send NFT to an address", + "sendNftToAddress": "NFT를 주소로 보내기", "scanQrOrPaste": "QR 코드를 스캔하거나 주소를 복사해 붙이기", "moveFundsBetweenAccounts": "지갑간 자금 이체하기", "manageAccount": "지갑 관리", @@ -1605,7 +1606,7 @@ "nftMetadata": "NFT 메타데이터", "aliasId": "별칭 ID", "governorAddress": "Governor Address", - "stateControllerAddress": "State Controller Address", + "stateControllerAddress": "컨트롤러 주소 지정", "copiedToClipboard": "클립보드에 복사됨", "total": "총액: {balance}", "availableBalanceWithValue": "사용가능한 잔액: {balance}", @@ -1645,7 +1646,7 @@ "smartContract": "스마트 컨트랙트", "targetContract": "대상계약", "contractFunction": "계약 기능", - "gasBudget": "Gas budget", + "gasBudget": "가스 예산", "standard": "표준", "uri": "URI", "issuer": "발행자", @@ -1683,8 +1684,8 @@ }, "showValueless": { "label": "Show valueless", - "yes": "Yes", - "no": "No" + "yes": "네", + "no": "아니오" }, "ascDesc": { "Asc": "오름차순", @@ -1747,28 +1748,28 @@ "vesting": "Vesting" }, "direction": { - "label": "Direction", + "label": "방향", "incoming": "Incoming", "outgoing": "Outgoing", "selfTransaction": "Self transaction" }, "proposalType": { - "label": "Type", - "official": "Official", - "custom": "Custom" + "label": "유형", + "official": "공식", + "custom": "사용자 지정" }, "phase": { - "label": "Phase" + "label": "단계" }, "participated": { - "label": "Participated", - "yes": "Yes", - "no": "No" + "label": "참여함", + "yes": "네", + "no": "아니오" }, "proposalOrder": { - "label": "Order", - "name": "Name", - "phase": "Phase" + "label": "순서", + "name": "이름", + "phase": "단계" } }, "dates": { @@ -1956,7 +1957,7 @@ "noInputs": "입력을 찾을 수 없습니다", "notEnoughBalance": "잔고가 부족합니다.", "missingTransactionId": "거래 ID가 누락되었습니다.", - "missingTransactionProgressEventPayload": "The transaction progress event payload is missing", + "missingTransactionProgressEventPayload": "거래 진행 이벤트 페이로드가 누락되었습니다.", "recipientRequired": "받는 사람을 입력하세요.", "nftRequired": "NFT가 필요합니다.", "nftNotInHex": "NFT 주소는 HEX 형식이어야 합니다.", @@ -1968,7 +1969,7 @@ }, "node": { "invalid": "유효한 URL을 입력하세요.", - "dns": "Unable to find DNS resolution for node", + "dns": "노드에 대한 DNS 해결방법을 찾을 수 없습니다.", "timedOut": "연결 시간이 초과되었습니다.", "refused": "연결이 거부되었습니다.", "handshake": "노드와의 핸드셰이크를 실패했습니다.", @@ -1998,7 +1999,7 @@ "invalid": "백업 파일이 인식되지 않았습니다.", "destination": "백업 장소가 유효하지 않습니다.", "mnemonic": "니모닉이 유효하지 않습니다.", - "migrationRequired": "Stronghold migration is required.", + "migrationRequired": "Stronghold 이전이 필요합니다.", "seedTooShort": "시드의 길이는 81자여야 합니다. 현재 길이는 {length, plural, other {#자}}입니다.", "seedCharacters": "시드에는 A부터 Z까지의 알파벳과 숫자 9만 포함되어야 합니다.", "phraseWordCount": "복원 문구는 단어 24개로 이루어지며, 현재 단어 {length, plural, other {#}}개를 입력하였습니다.", @@ -2039,7 +2040,7 @@ "invalidDate": "잘못된 날짜", "invalidTime": "잘못된 시간", "shimmerClaiming": { - "missingProfileManager": "Unable to find Shimmer claiming profile manager", + "missingProfileManager": "Shimmer 청구 프로필 관리자를 찾을 수 없습니다.", "cannotInitialiseAccount": "Shimmer 청구 계정을 초기화할 수 없습니다.", "missingAccount": "Shimmer 청구 계정을 찾을 수 없습니다." }, @@ -2168,43 +2169,43 @@ "gasBudget": "Shimmer EVM에서 거래를 수행하거나 스마트 계약 기능을 실행하려면 가스 예산이 필요합니다." }, "nftMetadata": { - "standard": "The NFT standard e.g. IRC27.", - "type": "The MimeType of the NFT. e.g. image/png.", - "collectionId": "UTXO string of the collection NFT that minted this NFT", - "royalties": "An object containing key-value pairs of addresses that map to payout percentages", - "issuerName": "The name of the creator", - "attributes": "An array of traits and values that define attributes of the NFT" + "standard": "NFT 표준(예: IRC27)", + "type": "NFT의 Mime유형 (예: image/png)", + "collectionId": "이 NFT를 발행한 컬렉션 NFT의 UTXO 문자열", + "royalties": "지급 비율에 매핑되는 주소의 키-값 쌍을 포함하는 객체", + "issuerName": "창작자의 이름", + "attributes": "NFT의 속성을 정의하는 일련의 특성과 값" } }, "mintNativeToken": { - "decimals": "IRC30 optional parameter: Number of decimals the token uses (divide the token amount by 10^decimals to get its user representation).", - "description": "IRC30 optional parameter: The human-readable description of the token.", - "url": "IRC30 optional parameter: URL pointing to more resources about the token like a website or social media page.", - "logoUrl": "IRC30 optional parameter: URL pointing to an image resource of the token logo." + "decimals": "IRC30 선택적 매개변수: 토큰이 사용하는 소수 자릿수(사용자 표현을 얻으려면 토큰 금액을 10^소수로 나눕니다).", + "description": "IRC30 선택적 매개변수: 사람이 읽을 수 있는 토큰 설명입니다.", + "url": "IRC30 선택적 매개변수: 웹사이트나 소셜 미디어 페이지와 같은 토큰에 대한 추가 리소스를 가리키는 URL입니다.", + "logoUrl": "IRC30 선택적 매개변수: 토큰 로고의 이미지 리소스를 가리키는 URL입니다." }, "mintNftForm": { - "collectionId": "Optional parameter: UTXO string of the collection NFT that minted this NFT", - "collectionName": "Optional parameter: The collection's name", - "royalties": "Optional parameter: An object containing key-value pairs of addresses that map to payout percentages", - "issuerName": "Optional parameter: The name of the creator", - "description": "Optional parameter: A description of the NFT", - "attributes": "Optional parameter: An array of traits and values that define attributes of the NFT", - "uri": "To create a URI using custom media, first upload your file to IPFS via a storage service (e.g. https://nft.storage/)", - "quantity": "Optional parameter: The quantity of copies minted with this metadata." + "collectionId": "선택적 매개변수: 이 NFT를 발행한 컬렉션 NFT의 UTXO 문자열", + "collectionName": "선택적 매개변수: 컬렉션 이름", + "royalties": "선택적 매개변수: 지급 비율에 매핑되는 주소의 키-값 쌍을 포함하는 객체", + "issuerName": "선택적 매개변수: 작성자 이름", + "description": "선택적 매개변수: NFT에 대한 설명", + "attributes": "선택적 매개변수: NFT의 속성을 정의하는 일련의 특성 및 값", + "uri": "사용자 정의 미디어를 사용하여 URI를 생성하려면 먼저 스토리지 서비스(예: https://nft.storage/)를 통해 IPFS에 파일을 업로드하세요.", + "quantity": "선택적 매개변수: 이 메타데이터로 발행된 사본의 수량" }, "governance": { - "removeProposalWarning": "You must stop voting for this proposal before removing it.", + "removeProposalWarning": "이 제안을 제거하기 전에 해당 제안에 대한 투표를 중단해야 합니다.", "outdatedNode": { - "title": "Outdated node URL", - "body": "The node URL for this proposal is outdated. Please update it to access the latest voting results." + "title": "오래된 노드 URL", + "body": "이 제안의 노드 URL이 오래되었습니다. 최신 투표 결과에 액세스하려면 업데이트하세요." }, "resultsNotAvailable": { - "title": "Results not available", - "body": "The results are no longer available on this proposal's corresponding node. Please update it to access the results." + "title": "결과를 확인할 수 없음", + "body": "이 제안의 해당 노드에서는 더 이상 결과를 사용할 수 없습니다. 결과에 액세스하려면 업데이트하세요." } }, "updateStronghold": { - "profileBadge": "Your Stronghold is out of date. Log in to update Stronghold." + "profileBadge": "당신의 Stronghold는 오래되었습니다. Stronghold를 업데이트하려면 로그인하세요." } }, "exports": { @@ -2222,7 +2223,7 @@ "warningText": "현재 개발자 프로필을 사용하는 중이며 {networkName} 네트워크에 연결되었습니다" }, "networkIndicator": { - "warningText": "Network performance degraded. Message confirmation may take a bit longer than usual." + "warningText": "네트워크 성능이 저하되었습니다. 메시지 확인은 평소보다 조금 더 오래 걸릴 수 있습니다." } }, "permissions": { @@ -2233,7 +2234,7 @@ }, "tabs": { "wallet": "지갑", - "collectibles": "Collectibles", + "collectibles": "수집품", "governance": "거버넌스", "developer": "개발자", "tokens": "토큰", @@ -2242,133 +2243,133 @@ }, "pills": { "stake": { - "Pending": "staking for", - "Confirmed": "staked for", - "Conflicting": "failed to stake" + "Pending": "스테이킹 중", + "Confirmed": "스테이킹됨", + "Conflicting": "스테이킹 실패" }, "external": { "incoming": { - "Pending": "receiving from", - "Confirmed": "received from", - "Conflicting": "failed to receive" + "Pending": "받는 중", + "Confirmed": "수신 완료", + "Conflicting": "수신 실패" }, "outgoing": { - "Pending": "sending to", - "Confirmed": "sent to", - "Conflicting": "failed to send" + "Pending": "보내는 중", + "Confirmed": "발송 완료", + "Conflicting": "발송 실패" } }, "internal": { "incoming": { - "Pending": "transferring from", - "Confirmed": "transferred from", - "Conflicting": "failed to transfer" + "Pending": "계정에서 이체 중", + "Confirmed": "이체 완료", + "Conflicting": "전송 실패" }, "outgoing": { - "Pending": "transferring to", - "Confirmed": "transferred to", - "Conflicting": "failed to transfer" + "Pending": "계정으로 이체 중", + "Confirmed": "이체 완료", + "Conflicting": "전송 실패" }, "selfTransaction": { - "Pending": "transferring to", - "Confirmed": "transferred to", - "Conflicting": "failed to transfer" + "Pending": "이체 중", + "Confirmed": "이체 완료", + "Conflicting": "전송 실패" } }, "mint": { - "Pending": "minting", - "Confirmed": "minted", - "Conflicting": "failed to mint" + "Pending": "발행 중", + "Confirmed": "발행 완료", + "Conflicting": "발행 실패" }, "burn": { - "Pending": "burning", - "Confirmed": "burned", - "Conflicting": "failed to burn" + "Pending": "소각 중", + "Confirmed": "소각 완료", + "Conflicting": "소각 실패" }, "consolidation": { - "Pending": "Consolidating outputs", - "Confirmed": "Outputs consolidated", - "Conflicting": "failed to consolidate outputs" + "Pending": "출력 통합 중", + "Confirmed": "출력 통합 완료", + "Conflicting": "출력 통합 실패" }, "migrate": { - "Pending": "migrating for", - "Confirmed": "migrated for", - "Conflicting": "failed to migrate" + "Pending": "이전 중", + "Confirmed": "이전 완료", + "Conflicting": "이전 실패" }, "asyncStatus": { - "unclaimed": "unclaimed", - "claimed": "claimed", - "expired": "expired" + "unclaimed": "미수령", + "claimed": "수령 완료", + "expired": "만료됨" }, "governance": { "increaseVotingPower": { - "Pending": "increasing voting power", - "Confirmed": "increased voting power", - "Conflicting": "failed to increased voting power" + "Pending": "투표권 높이는 중", + "Confirmed": "투표권 증가됨", + "Conflicting": "투표권 증가 실패" }, "decreaseVotingPower": { - "Pending": "decreasing voting power", - "Confirmed": "decreased voting power", - "Conflicting": "failed to decreased voting power" + "Pending": "투표권 줄이는 중", + "Confirmed": "투표권 감소됨", + "Conflicting": "투표권 감소 실패" }, "startVoting": { - "Pending": "voting for", - "Confirmed": "voted for", - "Conflicting": "failed to vote for" + "Pending": "투표 중", + "Confirmed": "투표 완료", + "Conflicting": "투표 실패" }, "stopVoting": { - "Pending": "stopping voting for", - "Confirmed": "stopped voting for", - "Conflicting": "failed to stopped voting for" + "Pending": "투표 중지 중", + "Confirmed": "투표 중지됨", + "Conflicting": "투표 중지 실패" }, "changedVote": { - "Pending": "changing vote for", - "Confirmed": "changed vote for", - "Conflicting": "failed to change vote for" + "Pending": "투표 변경 중", + "Confirmed": "투표 변경 완료", + "Conflicting": "투표 변경 실패" }, "revote": { - "Pending": "revoting", - "Confirmed": "revote", - "Conflicting": "failed to revote" + "Pending": "재투표 중", + "Confirmed": "재투표 완료", + "Conflicting": "재투표 실패" }, "proposalStatus": { - "upcoming": "Announcement", - "commencing": "Voting open", - "holding": "Counting", - "ended": "Closed", - "nodeOutdated": "Outdated node URL", - "resultsNotAvailable": "Results not available" + "upcoming": "공지", + "commencing": "투표 시작", + "holding": "집계 중", + "ended": "닫힘", + "nodeOutdated": "노드 URL이 오래됨", + "resultsNotAvailable": "결과를 확인할 수 없음" } }, "alias": { "creation": { - "Pending": "creating alias", - "Confirmed": "alias created", - "Failed": "Failed to create alias" + "Pending": "별칭 생성 중", + "Confirmed": "별칭 생성 완료", + "Failed": "별칭 생성 실패" } }, "networkHealth": { - "down": "Down", - "degraded": "Degraded", - "operational": "Operational", - "disconnected": "Disconnected" + "down": "다운됨", + "degraded": "열화됨", + "operational": "운영", + "disconnected": "연결 끊김" }, - "locked": "locked", - "smartContract": "smart contract", + "locked": "잠김", + "smartContract": "스마트 계약", "vesting": { - "unlocked": "Unlocked", - "locked": "Locked" + "unlocked": "잠금 해제됨", + "locked": "잠김" } }, "menus": { "expirationTimePicker": { - "none": "No expiration time", - "1hour": "In 1 hour", - "1day": "In 1 day", - "1week": "In 1 week", + "none": "만료 시간 없음", + "1hour": "1시간 후", + "1day": "1일 후", + "1week": "1주일 후", "customDate": { - "title": "Custom date", - "subtitle": "Set custom expiry date" + "title": "사용자 지정 날짜", + "subtitle": "만료일을 사용자가 지정합니다." } } } diff --git a/packages/shared/locales/ku.json b/packages/shared/locales/ku.json index 43a4b741900..c0aa184b6a8 100644 --- a/packages/shared/locales/ku.json +++ b/packages/shared/locales/ku.json @@ -812,12 +812,6 @@ "errorBody2": "Niha we {balance} li ser vê cuzdank maye. Ji kerema xwe van dravî veguherînin hesabek cûda û dîsa biceribînin.", "errorBody3": "Hûn nikarin vê cuzdankê jêbibin, divê bi kêmanî yek ya te hebe." }, - "addressHistory": { - "title": "{name} dîroka navnîşanê", - "currentBalance": "Balance: {balance}", - "internal": "Internal Address", - "external": "Deposit Address" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Tomarkirin", "importSeed": "Seed'ek heyî barbikê hundir", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Here PPP", "viewDownloads": "View downloads", "viewStatus": "Rewşê bibîn", + "viewAddressHistory": "Bûyera navnîşanê nîşan bide", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Cuzdankê veşartî nîşan bidin", diff --git a/packages/shared/locales/lv.json b/packages/shared/locales/lv.json index f650aa070db..a78c1904f69 100644 --- a/packages/shared/locales/lv.json +++ b/packages/shared/locales/lv.json @@ -812,12 +812,6 @@ "errorBody2": "You currently have {balance} remaining on this wallet. Please move these funds to a different wallet and try again.", "errorBody3": "You cannot hide this wallet, you must have at least one." }, - "addressHistory": { - "title": "{name} address history", - "currentBalance": "Balance: {balance}", - "internal": "Internal Address", - "external": "Deposit Address" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Save", "importSeed": "Import an existing seed", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Visit FAQ", "viewDownloads": "View downloads", "viewStatus": "View status", + "viewAddressHistory": "View address history", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Show hidden wallets", diff --git a/packages/shared/locales/mk.json b/packages/shared/locales/mk.json index f9e783a2723..95076fac7dc 100644 --- a/packages/shared/locales/mk.json +++ b/packages/shared/locales/mk.json @@ -812,12 +812,6 @@ "errorBody2": "Моментално имате преостанати {balance} на овој паричник. Ве молиме преместете ги овие средства во друг паричник и пробајте повторно.", "errorBody3": "Не можете да го скриете овој паричник, морате да имате барем еден." }, - "addressHistory": { - "title": "Историја на адресата на {name}", - "currentBalance": "Balance: {balance}", - "internal": "Internal Address", - "external": "Deposit Address" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Зачувај", "importSeed": "Импортирање на постоечки seed", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Посети ЧПП", "viewDownloads": "View downloads", "viewStatus": "Погледни го статусот", + "viewAddressHistory": "Погледни ја историјата на адресата", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Прикажи скриени паричници", diff --git a/packages/shared/locales/nl.json b/packages/shared/locales/nl.json index 65c0ffd12f8..1bd492287dd 100644 --- a/packages/shared/locales/nl.json +++ b/packages/shared/locales/nl.json @@ -812,12 +812,6 @@ "errorBody2": "U hebt momenteel {balance} resterend in deze portemonnee. Verplaats dit tegoed naar een andere portemonnee en probeer het opnieuw.", "errorBody3": "U kunt deze portemonnee niet verbergen, u moet ten minste één hebben." }, - "addressHistory": { - "title": "{name} adresgeschiedenis", - "currentBalance": "Saldo: {balance}", - "internal": "Intern adres", - "external": "Ontvangstadres" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Opslaan", "importSeed": "Importeer een bestaande seed", "restoreWallet": { - "iota": "Migreer of herstel een portemonnee", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Herstel Shimmer profiel", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migreren naar Chrysalis of een bestaande portemonnee herstellen", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Een bestaand Shimmer profiel herstellen", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Bezoek veelgestelde vragen", "viewDownloads": "View downloads", "viewStatus": "Bekijk status", + "viewAddressHistory": "Bekijk adresgeschiedenis", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Toon verborgen portemonnees", diff --git a/packages/shared/locales/no.json b/packages/shared/locales/no.json index d797c2bc439..208c01c4bf6 100644 --- a/packages/shared/locales/no.json +++ b/packages/shared/locales/no.json @@ -812,12 +812,6 @@ "errorBody2": "Du har {balance} igjen i denne lommeboken. Vennligst flytt disse midlene til en annen lommebok og prøv igjen.", "errorBody3": "Du kan ikke skjule denne lommeboken, du må ha minst én lommebok." }, - "addressHistory": { - "title": "{name} adressehistorikk", - "currentBalance": "Balanse", - "internal": "Intern adresse", - "external": "Innskuddsadresse" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Lagre", "importSeed": "Importer en eksisterende hovednøkkel", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Besøk FAQ", "viewDownloads": "View downloads", "viewStatus": "Vis status", + "viewAddressHistory": "Vis adressehistorikk", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Vis skjulte lommebøker", diff --git a/packages/shared/locales/pl.json b/packages/shared/locales/pl.json index bd6e688f3f0..224ebc2bf3d 100644 --- a/packages/shared/locales/pl.json +++ b/packages/shared/locales/pl.json @@ -812,12 +812,6 @@ "errorBody2": "Obecnie posiadasz {balance} na tym portfelu. Przenieś te środki na inny portfel i spróbuj ponownie.", "errorBody3": "Nie możesz ukryć tego portfela. Co najmniej jeden portfel musi pozostać aktywny." }, - "addressHistory": { - "title": "Historia adresów dla {name}", - "currentBalance": "Saldo: {balance}", - "internal": "Adres wewnętrzny", - "external": "Adres odbiorcy" - }, "excludeNode": { "title": "Wyklucz serwer", "body": "Czy na pewno chcesz wykluczyć {url} z dostępnej puli serwerów?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Wymagane uwierzytelnienie", "body": "Ten serwer wymaga dodatkowego uwierzytelnienia. Proszę wypełnić odpowiednie informacje." + }, + "addressHistory": { + "title": "Historia adresów", + "disclaimer": "Lista adresów ze środkami lub adresów znanych przez ten profil", + "indexAndType": "{internal, select, true {Adres wewnętrzny} other {Adres odbiorcy}} {index}", + "internal": "Transfer wewnętrzny" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Zapisz", "importSeed": "Importuj istniejący klucz seed", "restoreWallet": { - "iota": "Migruj lub przywróć portfel", + "iota": "Przywróć profil IOTA", "iotaAlphanet": "Przywróć profil IOTA Alphanet", "shimmer": "Przywróć profil Shimmer", "testnet": "Przywróć profil Testnet", "custom": "Przywróć profil niestandardowej sieci" }, "restoreWalletDescription": { - "iota": "Migracja do sieci Chrysalis lub przywrócenie istniejącego portfela", + "iota": "Przywróć istniejący profil IOTA", "iotaAlphanet": "Przywróć istniejący profil IOTA Alphanet", "shimmer": "Przywróć istniejący profil Shimmer", "testnet": "Przywróć istniejący profil Testnet", @@ -1338,8 +1338,9 @@ "visitFaq": "Odwiedź FAQ", "viewDownloads": "Aktualizacja ręczna", "viewStatus": "Pokaż status", + "viewAddressHistory": "Pokaż historię adresów", "viewBalanceBreakdown": "Zestawienie środków", - "verifyDepositAddress": "Zweryfikuj adres depozytu", + "verifyDepositAddress": "Zweryfikuj adres odbiorcy", "showHiddenAccounts": "Pokaż ukryte portfele", "confirm": "Potwierdź", "hideNetworkStatistics": "Ukryj statystyki sieci", @@ -1667,7 +1668,7 @@ "internalTransaction": "Transakcja wewnętrzna", "coinType": "Typ tokena", "custom": "Niestandardowe", - "verifyLedgerDepositAddress": "Sprawdź czy adres depozytu jest zgodny z adresem wyświetlanym na urządzeniu Ledger" + "verifyLedgerDepositAddress": "Sprawdź czy adres odbiorcy jest zgodny z adresem wyświetlanym na urządzeniu Ledger" }, "filters": { "title": "Filtry", diff --git a/packages/shared/locales/pt-BR.json b/packages/shared/locales/pt-BR.json index fce7a8bd485..a5b4e49f332 100644 --- a/packages/shared/locales/pt-BR.json +++ b/packages/shared/locales/pt-BR.json @@ -812,12 +812,6 @@ "errorBody2": "Atualmente você tem {balance} restando nesta carteira. Por favor, mova esses fundos para uma carteira diferente e tente novamente.", "errorBody3": "Você não pode ocultar essa carteira. Você deve ter pelo menos uma carteira visualizável." }, - "addressHistory": { - "title": "{name} histórico de endereços", - "currentBalance": "Saldo: {balance}", - "internal": "Endereço Interno", - "external": "Endereço de depósito" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Salvar", "importSeed": "Importar uma seed existente", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Visitar FAQ", "viewDownloads": "View downloads", "viewStatus": "Visualizar status", + "viewAddressHistory": "Ver histórico de endereços", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Mostrar carteiras ocultas", diff --git a/packages/shared/locales/pt-PT.json b/packages/shared/locales/pt-PT.json index 0024a1c69b3..9493c183e34 100644 --- a/packages/shared/locales/pt-PT.json +++ b/packages/shared/locales/pt-PT.json @@ -812,12 +812,6 @@ "errorBody2": "O saldo desta carteira é {balance}. Por favor, mova estes fundos para uma carteira diferente e tente novamente.", "errorBody3": "Não pode ocultar essa carteira, deve ter pelo menos uma." }, - "addressHistory": { - "title": "{name} histórico de endereços", - "currentBalance": "Balance: {balance}", - "internal": "Internal Address", - "external": "Deposit Address" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Guardar", "importSeed": "Importar uma seed existente", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Visitar FAQ", "viewDownloads": "View downloads", "viewStatus": "Ver estado", + "viewAddressHistory": "Ver histórico de endereços", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Mostrar carteiras ocultas", diff --git a/packages/shared/locales/ro.json b/packages/shared/locales/ro.json index 7cdcfc0dee2..9ed11a2fac7 100644 --- a/packages/shared/locales/ro.json +++ b/packages/shared/locales/ro.json @@ -812,12 +812,6 @@ "errorBody2": "You currently have {balance} remaining on this wallet. Please move these funds to a different wallet and try again.", "errorBody3": "You cannot hide this wallet, you must have at least one." }, - "addressHistory": { - "title": "{name} address history", - "currentBalance": "Balance: {balance}", - "internal": "Internal Address", - "external": "Deposit Address" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Save", "importSeed": "Importă un seed existent", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Visit FAQ", "viewDownloads": "View downloads", "viewStatus": "View status", + "viewAddressHistory": "View address history", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Show hidden wallets", diff --git a/packages/shared/locales/ru.json b/packages/shared/locales/ru.json index 8f0e8b439a2..4929bbb10bd 100644 --- a/packages/shared/locales/ru.json +++ b/packages/shared/locales/ru.json @@ -812,12 +812,6 @@ "errorBody2": "В настоящее время на этом кошельке осталось {balance}. Пожалуйста, переведите эти средства на другой кошелек и повторите попытку.", "errorBody3": "Вы не можете скрыть этот кошелек, вы должны иметь хотя бы один." }, - "addressHistory": { - "title": "История адресов: {name}", - "currentBalance": "Баланс: {balance}", - "internal": "Внутренний адрес", - "external": "Адрес пополнения счета" - }, "excludeNode": { "title": "Исключить узел", "body": "Вы уверены, что хотите исключить {url} из списка доступных узлов?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Требуется аутентификация", "body": "Этот узел требует дополнительной аутентификации. Пожалуйста, заполните соответствующую информацию." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Сохранить", "importSeed": "Импортировать существующую мнемонику", "restoreWallet": { - "iota": "Перенос или восстановление кошелька", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Восстановить профиль Shimmer", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Перенос на Chrysalis или восстановление существующего кошелька", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Восстановить существующий профиль Shimmer", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Посетить FAQ", "viewDownloads": "View downloads", "viewStatus": "Просмотр статуса", + "viewAddressHistory": "Просмотр истории адресов", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Показать скрытые кошельки", diff --git a/packages/shared/locales/si.json b/packages/shared/locales/si.json index d5f746d850f..bac520b1e41 100644 --- a/packages/shared/locales/si.json +++ b/packages/shared/locales/si.json @@ -812,12 +812,6 @@ "errorBody2": "ඔබට දැනට මෙම පසුම්බියේ {balance} ක් ඉතිරිව ඇත. කරුණාකර මෙම අරමුදල් වෙනත් මුදල් පසුම්බියකට ගෙන ගොස් නැවත උත්සාහ කරන්න.", "errorBody3": "ඔබට මෙම මුදල් පසුම්බිය සැඟවිය නොහැක, ඔබට අවම වශයෙන් එකක්වත් තිබිය යුතුය." }, - "addressHistory": { - "title": "{name} ලිපින ඉතිහාසය", - "currentBalance": "ශේෂය: {balance}", - "internal": "අභ්යන්තර ලිපිනය", - "external": "තැන්පතු ලිපිනය" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "සුරකින්න", "importSeed": "පවතින බීජයක් ආනයනය කරන්න", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "නිතර අසන පැන වෙත පිවිසෙන්න", "viewDownloads": "View downloads", "viewStatus": "තත්ත්වය බලන්න", + "viewAddressHistory": "ලිපින ඉතිහාසය බලන්න", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "සැඟවුණු පසුම්බි පෙන්වන්න", diff --git a/packages/shared/locales/sk.json b/packages/shared/locales/sk.json index 1a978a31d93..3d154ccfb6a 100644 --- a/packages/shared/locales/sk.json +++ b/packages/shared/locales/sk.json @@ -812,12 +812,6 @@ "errorBody2": "V tejto peňaženke je váš momentálny zostatok {balance}. Prosím, presuňte tieto prostriedky do inej peňaženky a skúste znova.", "errorBody3": "Nemôžete skryť túto peňaženku, musíte mať aspoň jednu." }, - "addressHistory": { - "title": "Hístória adries konta {name} \n", - "currentBalance": "Zostatok: {balance}", - "internal": "Internal Address", - "external": "Deposit Address" - }, "excludeNode": { "title": "Vylúčiť uzol", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Uložiť", "importSeed": "Importovať existujúci seed", "restoreWallet": { - "iota": "Premigrujte alebo obnovte peňaženku", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Premigrujte do Chrysalis alebo obnovte existujúcu peňaženku", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Navštíviť FAQ", "viewDownloads": "View downloads", "viewStatus": "Zobrazenie stavu", + "viewAddressHistory": "Zobraziť históriu adresy", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Zobraziť skryté peňaženky", diff --git a/packages/shared/locales/sl.json b/packages/shared/locales/sl.json index be0badf92d2..f6b994c064a 100644 --- a/packages/shared/locales/sl.json +++ b/packages/shared/locales/sl.json @@ -812,12 +812,6 @@ "errorBody2": "V tej denarnici imate trenutno še {balance}. Prosimo, da ta sredstva prenesete v drugo denarnico in poskusite znova.", "errorBody3": "Te denarnice ne morete skriti, imeti morate vsaj eno." }, - "addressHistory": { - "title": "{name} zgodovina naslovov", - "currentBalance": "Ravnotežje: {balance}", - "internal": "Notranji naslov", - "external": "Naslov depozita" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Shrani", "importSeed": "Uvozite obstoječe seme", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Visit FAQ", "viewDownloads": "View downloads", "viewStatus": "View status", + "viewAddressHistory": "View address history", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Show hidden wallets", diff --git a/packages/shared/locales/sq.json b/packages/shared/locales/sq.json index f650aa070db..a78c1904f69 100644 --- a/packages/shared/locales/sq.json +++ b/packages/shared/locales/sq.json @@ -812,12 +812,6 @@ "errorBody2": "You currently have {balance} remaining on this wallet. Please move these funds to a different wallet and try again.", "errorBody3": "You cannot hide this wallet, you must have at least one." }, - "addressHistory": { - "title": "{name} address history", - "currentBalance": "Balance: {balance}", - "internal": "Internal Address", - "external": "Deposit Address" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Save", "importSeed": "Import an existing seed", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Visit FAQ", "viewDownloads": "View downloads", "viewStatus": "View status", + "viewAddressHistory": "View address history", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Show hidden wallets", diff --git a/packages/shared/locales/sr.json b/packages/shared/locales/sr.json index e4a93ec7383..32ba423b892 100644 --- a/packages/shared/locales/sr.json +++ b/packages/shared/locales/sr.json @@ -812,12 +812,6 @@ "errorBody2": "You currently have {balance} remaining on this wallet. Please move these funds to a different wallet and try again.", "errorBody3": "You cannot hide this wallet, you must have at least one." }, - "addressHistory": { - "title": "{name} address history", - "currentBalance": "Balance: {balance}", - "internal": "Internal Address", - "external": "Deposit Address" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Save", "importSeed": "Увезите постојеће семе", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Visit FAQ", "viewDownloads": "View downloads", "viewStatus": "View status", + "viewAddressHistory": "View address history", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Show hidden wallets", diff --git a/packages/shared/locales/sv.json b/packages/shared/locales/sv.json index da9fd7d31db..3751b90d56c 100644 --- a/packages/shared/locales/sv.json +++ b/packages/shared/locales/sv.json @@ -812,12 +812,6 @@ "errorBody2": "Du har för närvarande {balance} kvar i denna plånbok. Vänligen flytta dessa tillgångar till en annan plånbok och försök igen.", "errorBody3": "Du kan inte dölja denna plånbok, du måste ha minst en." }, - "addressHistory": { - "title": "{name} adresshistorik", - "currentBalance": "Saldo: {balance}", - "internal": "Intern adress", - "external": "Insättningsadress" - }, "excludeNode": { "title": "Exkludera nod", "body": "Är du säker på att du vill exkludera {url} från den tillgängliga nodpoolen?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Autentisering krävs", "body": "Den här noden kräver ytterligare autentisering. Vänligen fyll i lämplig information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Spara", "importSeed": "Importera en befintlig seed", "restoreWallet": { - "iota": "Migrera eller återställ en plånbok", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Återställ Shimmer-profil", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrera till Chrysalis eller återställ en befintlig plånbok", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Återställ en befintlig Shimmer-profil", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Besök FAQ", "viewDownloads": "View downloads", "viewStatus": "Visa status", + "viewAddressHistory": "Visa adresshistorik", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Visa dolda plånböcker", diff --git a/packages/shared/locales/tr.json b/packages/shared/locales/tr.json index a08d973d726..0665e5504c5 100644 --- a/packages/shared/locales/tr.json +++ b/packages/shared/locales/tr.json @@ -812,12 +812,6 @@ "errorBody2": "Cüzdanınızda {balance} tutarında bakiye bulunmaktadır. Lütfen bakiyeyi başka bir cüzdana taşıyıp tekrar deneyiniz.", "errorBody3": "Bu cüzdanı gizleyemezsiniz, en az bir cüzdanınız bulunmalıdır." }, - "addressHistory": { - "title": "{name} Adres geçmişi", - "currentBalance": "Bakiye {balance}", - "internal": "Dahili Adres", - "external": "Yatırma Adresi" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Kaydet", "importSeed": "Mevcut bir Seed'i içe aktarın", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "FAQ ziyaret et", "viewDownloads": "View downloads", "viewStatus": "Durumu görüntüle", + "viewAddressHistory": "Adres geçmişini göster", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Gizli cüzdanları göster", diff --git a/packages/shared/locales/uk.json b/packages/shared/locales/uk.json index 6dec83ada77..6d1f5359787 100644 --- a/packages/shared/locales/uk.json +++ b/packages/shared/locales/uk.json @@ -812,12 +812,6 @@ "errorBody2": "Наразі на цьому гаманці залишилося {balance}. Будь ласка, перемістіть ці кошти на інший гаманець і спробуйте ще раз.", "errorBody3": "Ви не можете приховати цей гаманець, у вас повинен бути принаймні один." }, - "addressHistory": { - "title": "Історія адрес: {name}", - "currentBalance": "Баланс: {balance}", - "internal": "Внутрішня адреса", - "external": "Адреса поповнення" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Зберегти", "importSeed": "Імпортувати існуючий seed", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Відвідати FAQ", "viewDownloads": "View downloads", "viewStatus": "Перегляд статусу", + "viewAddressHistory": "Перегляд історії адрес", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Показати приховані гаманці", diff --git a/packages/shared/locales/ur.json b/packages/shared/locales/ur.json index f780b1fe8e9..076df903fa9 100644 --- a/packages/shared/locales/ur.json +++ b/packages/shared/locales/ur.json @@ -812,12 +812,6 @@ "errorBody2": "اس والٹ پر آپ کے پاس فی الحال {balance} باقی ہے۔ براہ کرم ان فنڈز کو کسی دوسرے والٹ میں منتقل کریں اور دوبارہ کوشش کریں.", "errorBody3": "آپ یہ والٹ چھپا نہیں کرسکتے ، آپ کے پاس کم از کم ایک والٹ ہونا ضروری ہے." }, - "addressHistory": { - "title": "{name} کے ایڈریسس کی تاریخ", - "currentBalance": "Balance: {balance}", - "internal": "Internal Address", - "external": "Deposit Address" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "محفوظ کریں", "importSeed": "ایک موجودہ سیڈ درآمد کریں", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "FAQ دیکھیں", "viewDownloads": "View downloads", "viewStatus": "حالت دیکھیں", + "viewAddressHistory": "ایڈریسس کی تاریخ دیکھیں", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "چھپے ہوئے والٹس دکھائیں", diff --git a/packages/shared/locales/vi.json b/packages/shared/locales/vi.json index 4b62cec87c6..4057e7f50a5 100644 --- a/packages/shared/locales/vi.json +++ b/packages/shared/locales/vi.json @@ -812,12 +812,6 @@ "errorBody2": "Bạn hiện còn {balance} trên ví này. Vui lòng chuyển những khoản tiền này sang một ví khác và thử lại.", "errorBody3": "Bạn không thể ẩn ví này, bạn phải có ít nhất một ví." }, - "addressHistory": { - "title": "{name} lịch sử địa chỉ", - "currentBalance": "Số dư: {balance}", - "internal": "Địa chỉ nội bộ", - "external": "Địa chỉ nạp" - }, "excludeNode": { "title": "Exclude node", "body": "Are you sure you want to exclude {url} from the available node pool?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "Authentication required", "body": "This node requires additional authentication. Please fill in the appropriate information." + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "Lưu", "importSeed": "Nhập vào một seed hiện có", "restoreWallet": { - "iota": "Migrate or restore a wallet", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "Restore Shimmer profile", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "Migrate to Chrysalis or restore an existing wallet", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "Restore an existing Shimmer profile", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "Truy cập câu hỏi thường gặp", "viewDownloads": "View downloads", "viewStatus": "Xem trạng thái", + "viewAddressHistory": "Hiển thị lịch sử địa chỉ ví", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Hiển thị các ví ẩn", diff --git a/packages/shared/locales/zh-CN.json b/packages/shared/locales/zh-CN.json index 42fc585795d..7fb5e45f6e9 100644 --- a/packages/shared/locales/zh-CN.json +++ b/packages/shared/locales/zh-CN.json @@ -812,12 +812,6 @@ "errorBody2": "目前你的这个账户还有 {balance} 余额. 请把这些资金移动到另一个钱包后重试。", "errorBody3": "您不能隐藏这个钱包,您必须至少有一个钱包" }, - "addressHistory": { - "title": "{name} 地址历史记录", - "currentBalance": "余额:{balance}", - "internal": "内部地址", - "external": "充值地址" - }, "excludeNode": { "title": "排除节点", "body": "您确定要将 {url} 排除在可用节点池之外吗?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "需要验证", "body": "此节点需要额外的验证。请填写适当的信息。" + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "保存", "importSeed": "导入已有的私钥种子", "restoreWallet": { - "iota": "迁移或恢复钱包", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "恢复 Shimmer 配置文件", "testnet": "Restore Testnet profile", "custom": "Restore Custom Network profile" }, "restoreWalletDescription": { - "iota": "迁移到 Chrysalis 或恢复一个现有钱包", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "恢复一个Shimmer 配置文件", "testnet": "Restore an existing Testnet profile", @@ -1338,6 +1338,7 @@ "visitFaq": "访问常见问题", "viewDownloads": "View downloads", "viewStatus": "查看状态", + "viewAddressHistory": "显示地址历史记录", "viewBalanceBreakdown": "View balance breakdown", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "显示隐藏钱包", diff --git a/packages/shared/locales/zh-TW.json b/packages/shared/locales/zh-TW.json index b50fa91e8f3..391b8d39d93 100644 --- a/packages/shared/locales/zh-TW.json +++ b/packages/shared/locales/zh-TW.json @@ -812,12 +812,6 @@ "errorBody2": "目前您在這個錢包仍擁有 {balance} 餘額。請將這些資金移至另一個錢包後再重試。", "errorBody3": "您無法隱藏此錢包,您必須至少擁有一個錢包。" }, - "addressHistory": { - "title": "{name} 地址記錄", - "currentBalance": "餘額:{balance}", - "internal": "內部地址", - "external": "存款地址" - }, "excludeNode": { "title": "排除節點", "body": "您是否確定要將 {url} 排除在可用節點之外?" @@ -1188,6 +1182,12 @@ "nodeAuthRequired": { "title": "需要驗證", "body": "此節點需要額外的認證。請填寫正確的資訊。" + }, + "addressHistory": { + "title": "Address history", + "disclaimer": "List of addresses with funds or known by this profile", + "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", + "internal": "Internal" } }, "charts": { @@ -1234,14 +1234,14 @@ "save": "儲存", "importSeed": "匯入現有的種子", "restoreWallet": { - "iota": "遷移或復原錢包", + "iota": "Restore IOTA profile", "iotaAlphanet": "Restore IOTA Alphanet profile", "shimmer": "復原Shimmer設定檔", "testnet": "恢復測試網設定檔", "custom": "恢復自訂網路設定檔" }, "restoreWalletDescription": { - "iota": "遷移至Chrysalis或恢復一個既存錢包", + "iota": "Restore an existing IOTA profile", "iotaAlphanet": "Restore an existing IOTA Alphanet profile", "shimmer": "復原既有的Shimmer檔", "testnet": "恢復既有的測試網設定檔", @@ -1338,6 +1338,7 @@ "visitFaq": "訪問常見問題解答", "viewDownloads": "查看下載", "viewStatus": "查看狀態", + "viewAddressHistory": "檢視地址歷史紀錄", "viewBalanceBreakdown": "檢視餘額明細", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "顯示隱藏錢包", From 1ac4367eb2ccdc431b3b5a0ddf1b1b5678f83dfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Esp=C3=ADn?= Date: Thu, 16 Nov 2023 10:33:29 +0100 Subject: [PATCH 25/48] fix: l2 metadata decoding (#7702) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: Proper evm address decoding * updated tests * fix: bullet-proof metadata decoding * clean up * updated tests * fix * fixes * fix: calculate amount by deducting gasFee and not allocated gasBudget * test: add long base token test --------- Co-authored-by: Begoña Álvarez de la Cruz --- .../layer-2/classes/special-stream.class.ts | 27 ++++++++------- .../parseLayer2MetadataForTransfer.test.ts | 33 ++++++++++++++----- .../types/layer2-metadata.interface.ts | 2 +- .../utils/parseLayer2MetadataForTransfer.ts | 18 ++++++++-- .../generateSingleBasicActivity.ts | 5 ++- 5 files changed, 59 insertions(+), 26 deletions(-) diff --git a/packages/shared/lib/core/layer-2/classes/special-stream.class.ts b/packages/shared/lib/core/layer-2/classes/special-stream.class.ts index f82336699af..23c5ba84d21 100644 --- a/packages/shared/lib/core/layer-2/classes/special-stream.class.ts +++ b/packages/shared/lib/core/layer-2/classes/special-stream.class.ts @@ -21,9 +21,8 @@ export class SpecialStream extends WriteStream { } export class ReadSpecialStream extends ReadStream { - readUInt64SpecialEncoding(name: string): number | bigint { - const [value] = size64Decode(() => this.readUInt8(name)) - return value + readUInt64SpecialEncodingWithError(name: string): [bigint, Error | null] { + return size64Decode(() => this.readUInt8(name)) } readUInt32SpecialEncoding(name: string): number | bigint { @@ -137,33 +136,37 @@ function size64Encode(n: bigint): Buffer { } // Adapted from WASP golang implementation https://github.com/iotaledger/wasp/blob/7f880a7983d24d0dcd225e994d67b29741b318bc/packages/util/rwutil/convert.go#L76 -function size64Decode(readByte: () => number): [number, null | Error] { +function size64Decode(readByte: () => number): [bigint, null | Error] { let byte = readByte() + if (!byte) { + return [BigInt(0), new Error('no more bytes')] + } + if (byte < 0x80) { - return [byte, null] + return [BigInt(byte), null] } - let value = byte & 0x7f + let value = BigInt(byte) & BigInt(0x7f) for (let shift = 7; shift < 63; shift += 7) { byte = readByte() if (!byte) { - return [0, null] + return [BigInt(0), new Error('no more bytes')] } if (byte < 0x80) { - return [Number(value | (byte << shift)), null] + return [value | (BigInt(byte) << BigInt(shift)), null] } - value |= (byte & 0x7f) << shift + value |= (BigInt(byte) & BigInt(0x7f)) << BigInt(shift) } byte = readByte() if (!byte) { - return [0, null] + return [BigInt(0), new Error('no more bytes')] } if (byte > 0x01) { - return [0, new Error('size64 overflow')] + return [BigInt(0), new Error('size64 overflow')] } - return [value | (byte << 63), new Error('Unexpected end of data')] + return [value | (BigInt(byte) << BigInt(63)), null] } diff --git a/packages/shared/lib/core/layer-2/tests/parseLayer2MetadataForTransfer.test.ts b/packages/shared/lib/core/layer-2/tests/parseLayer2MetadataForTransfer.test.ts index 4a0d8a7c24c..b595a4db440 100644 --- a/packages/shared/lib/core/layer-2/tests/parseLayer2MetadataForTransfer.test.ts +++ b/packages/shared/lib/core/layer-2/tests/parseLayer2MetadataForTransfer.test.ts @@ -10,9 +10,8 @@ describe('Function: parseLayer2MetadataForTransfer.ts', () => { senderContract: '0x0', targetContract: 'Accounts', contractFunction: 'transferAllowanceTo', - gasBudget: '10001', - ethereumAddress: - '0x42f7da9bdb55b3ec87e5ac1a1e6d88e16768663fde5eca3429eb6f579cc538acb82a77d6f89dae4611b81eac279fbf96d322001f', + gasBudget: '10000', + ethereumAddress: '0xb82a77d6f89dae4611b81eac279fbf96d322001f', baseTokens: '900000000', nativeTokens: [], nfts: [], @@ -21,6 +20,24 @@ describe('Function: parseLayer2MetadataForTransfer.ts', () => { expect(parsedMetadata).toEqual(expected) }) + it('should correctly parse metadata with long base token', () => { + const metadata = + '0x00025e4b3ca1e3f423914e010161350342f7da9bdb55b3ec87e5ac1a1e6d88e16768663fde5eca3429eb6f579cc538acb82a77d6f89dae4611b81eac279fbf96d322001f80ff9f94a58d1d' + const metadataByteArray = Converter.hexToBytes(metadata) + const expected = { + senderContract: '0x0', + targetContract: 'Accounts', + contractFunction: 'transferAllowanceTo', + gasBudget: '10000', + ethereumAddress: '0xb82a77d6f89dae4611b81eac279fbf96d322001f', + baseTokens: '999999999999', + nativeTokens: [], + nfts: [], + } + const parsedMetadata = parseLayer2MetadataForTransfer(metadataByteArray) + expect(parsedMetadata).toEqual(expected) + }) + it('should correctly parse metadata with native tokens', () => { const metadata = '0x00025e4b3ca1e3f423914e010161350342f7da9bdb55b3ec87e5ac1a1e6d88e16768663fde5eca3429eb6f579cc538acb82a77d6f89dae4611b81eac279fbf96d322001f4001086ac702fcfdc37b437e7ebb7a87d8acfb875be6b1ae3823bc61aa7896b852a6d5010000000001fa' @@ -29,9 +46,8 @@ describe('Function: parseLayer2MetadataForTransfer.ts', () => { senderContract: '0x0', targetContract: 'Accounts', contractFunction: 'transferAllowanceTo', - gasBudget: '10001', - ethereumAddress: - '0x42f7da9bdb55b3ec87e5ac1a1e6d88e16768663fde5eca3429eb6f579cc538acb82a77d6f89dae4611b81eac279fbf96d322001f', + gasBudget: '10000', + ethereumAddress: '0xb82a77d6f89dae4611b81eac279fbf96d322001f', baseTokens: '0', nativeTokens: [ { @@ -53,9 +69,8 @@ describe('Function: parseLayer2MetadataForTransfer.ts', () => { senderContract: '0x0', targetContract: 'Accounts', contractFunction: 'transferAllowanceTo', - gasBudget: '26345', - ethereumAddress: - '0x42f7da9bdb55b3ec87e5ac1a1e6d88e16768663fde5eca3429eb6f579cc538acb82a77d6f89dae4611b81eac279fbf96d322001f', + gasBudget: '26344', + ethereumAddress: '0xb82a77d6f89dae4611b81eac279fbf96d322001f', baseTokens: '0', nativeTokens: [], nfts: ['0xbf5b7cd4e8ac582e246c25b6a89b4ab4ef0646d3291aa03d9a5313154b714a06'], diff --git a/packages/shared/lib/core/layer-2/types/layer2-metadata.interface.ts b/packages/shared/lib/core/layer-2/types/layer2-metadata.interface.ts index 283a74a6145..b3dfb05fffa 100644 --- a/packages/shared/lib/core/layer-2/types/layer2-metadata.interface.ts +++ b/packages/shared/lib/core/layer-2/types/layer2-metadata.interface.ts @@ -1,3 +1,3 @@ import { ILayer2TransferAllowanceMetadata } from '../interfaces' -export type Layer2Metadata = Omit +export type Layer2Metadata = Omit diff --git a/packages/shared/lib/core/layer-2/utils/parseLayer2MetadataForTransfer.ts b/packages/shared/lib/core/layer-2/utils/parseLayer2MetadataForTransfer.ts index 86642ff6c9e..7691189234a 100644 --- a/packages/shared/lib/core/layer-2/utils/parseLayer2MetadataForTransfer.ts +++ b/packages/shared/lib/core/layer-2/utils/parseLayer2MetadataForTransfer.ts @@ -10,9 +10,8 @@ export function parseLayer2MetadataForTransfer(metadata: Uint8Array): ILayer2Tra const senderContract = readStream.readUInt8('senderContract') const targetContract = readStream.readUInt32('targetContract') const contractFunction = readStream.readUInt32('contractFunction') - const gasBudget = readStream.readUInt64SpecialEncoding('gasBudget') - const smartContractParameters = parseSmartContractParameters(readStream) - const ethereumAddress = '0x' + smartContractParameters['a'].substring(4) + const gasBudget = parseGasBudget(readStream) + const ethereumAddress = parseEvmAddressFromAgentId(readStream) const allowance = parseAssetAllowance(readStream) return { @@ -27,6 +26,19 @@ export function parseLayer2MetadataForTransfer(metadata: Uint8Array): ILayer2Tra } } +function parseGasBudget(readStream: ReadSpecialStream): bigint | number { + const [value, error] = readStream.readUInt64SpecialEncodingWithError('gasBudget') + if (!error) { + return value - BigInt(1) + } + return value +} + +function parseEvmAddressFromAgentId(readStream: ReadSpecialStream): string { + const smartContractParameters = parseSmartContractParameters(readStream) + return '0x' + smartContractParameters['a'].slice(-40) +} + function parseSmartContractParameters(readStream: ReadSpecialStream): Record { const smartContractParametersAmount = readStream.readUInt32SpecialEncoding('parametersLength') const smartContractParameters: Record = {} diff --git a/packages/shared/lib/core/wallet/utils/generateActivity/generateSingleBasicActivity.ts b/packages/shared/lib/core/wallet/utils/generateActivity/generateSingleBasicActivity.ts index 2e5c63b8d99..c52f1cef93f 100644 --- a/packages/shared/lib/core/wallet/utils/generateActivity/generateSingleBasicActivity.ts +++ b/packages/shared/lib/core/wallet/utils/generateActivity/generateSingleBasicActivity.ts @@ -33,6 +33,7 @@ export async function generateSingleBasicActivity( const id = outputId || transactionId const output = wrappedOutput.output as BasicOutput + const amount = getAmountFromOutput(output) const isShimmerClaiming = isShimmerClaimingTransaction(transactionId, get(activeProfileId)) @@ -44,13 +45,15 @@ export async function generateSingleBasicActivity( const asyncData = await getAsyncDataFromOutput(output, outputId, claimingData, account) const { parsedLayer2Metadata, destinationNetwork } = getLayer2ActivityInformation(metadata, sendingInfo) + const layer2Allowance = Number(parsedLayer2Metadata?.baseTokens ?? '0') const gasBudget = Number(parsedLayer2Metadata?.gasBudget ?? '0') + const gasFee = layer2Allowance > 0 ? amount - layer2Allowance : 0 let { storageDeposit, giftedStorageDeposit } = await getStorageDepositFromOutput(account, output) giftedStorageDeposit = action === ActivityAction.Burn ? 0 : giftedStorageDeposit giftedStorageDeposit = gasBudget === 0 ? giftedStorageDeposit : 0 - const baseTokenAmount = getAmountFromOutput(output) - storageDeposit - gasBudget + const baseTokenAmount = amount - storageDeposit - gasFee const nativeToken = await getNativeTokenFromOutput(output) const assetId = fallbackAssetId ?? nativeToken?.id ?? getCoinType() From 95283334053505e05937cf7cee8900f3ff417c5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bego=C3=B1a=20=C3=81lvarez=20de=20la=20Cruz?= Date: Thu, 16 Nov 2023 11:33:00 +0100 Subject: [PATCH 26/48] feat: add time expiration unlock condition for l1-l2 txs (#7719) * feat: add time expiration unlock condition for l1-l2 txs * enhancement: improve code readability --- .../popups/send/SendConfirmationPopup.svelte | 17 ++++++++++++++--- .../lib/core/wallet/utils/send/sendUtils.ts | 5 +++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/packages/desktop/components/popups/send/SendConfirmationPopup.svelte b/packages/desktop/components/popups/send/SendConfirmationPopup.svelte index 076973d5d39..2cfb3f3fcb6 100644 --- a/packages/desktop/components/popups/send/SendConfirmationPopup.svelte +++ b/packages/desktop/components/popups/send/SendConfirmationPopup.svelte @@ -65,8 +65,9 @@ transactionDetails.type === NewTransactionType.TokenTransfer && transactionDetails.asset?.metadata?.standard === TokenStandard.BaseToken $: isInternal = recipient.type === 'account' + $: isLayer2Transaction = !!layer2Parameters $: isTransferring = $selectedAccount.isTransferring - $: hideGiftToggle = isBaseTokenTransfer || !!layer2Parameters || (disableToggleGift && !giftStorageDeposit) + $: hideGiftToggle = isBaseTokenTransfer || isLayer2Transaction || (disableToggleGift && !giftStorageDeposit) $: if (!isSendAndClosePopup) expirationDate, giftStorageDeposit, void rebuildTransactionOutput() @@ -84,7 +85,12 @@ if (isSendAndClosePopup) { // Needed after 'return from stronghold' to SHOW to correct expiration date before output is sent - initialExpirationDate = getInitialExpirationDate(expirationDate, storageDeposit, giftStorageDeposit) + initialExpirationDate = getInitialExpirationDate( + expirationDate, + storageDeposit, + giftStorageDeposit, + isLayer2Transaction + ) try { await _onMount() @@ -111,7 +117,12 @@ // as it updates expiration date through the ExpirationTimePicker bind // Could be avoided with a rework of ExpirationTimePicker if (transactionDetails.expirationDate === undefined) { - initialExpirationDate = getInitialExpirationDate(expirationDate, storageDeposit, giftStorageDeposit) + initialExpirationDate = getInitialExpirationDate( + expirationDate, + storageDeposit, + giftStorageDeposit, + isLayer2Transaction + ) } } catch (err) { handleError(err) diff --git a/packages/shared/lib/core/wallet/utils/send/sendUtils.ts b/packages/shared/lib/core/wallet/utils/send/sendUtils.ts index 30a735db839..8f0070bcbbc 100644 --- a/packages/shared/lib/core/wallet/utils/send/sendUtils.ts +++ b/packages/shared/lib/core/wallet/utils/send/sendUtils.ts @@ -25,11 +25,12 @@ export enum OptionalInputType { export function getInitialExpirationDate( expirationDate: Date, storageDeposit: number, - giftStorageDeposit: boolean + giftStorageDeposit: boolean, + isLayer2: boolean ): TimePeriod { if (expirationDate) { return TimePeriod.Custom - } else if (storageDeposit && !giftStorageDeposit) { + } else if ((storageDeposit && !giftStorageDeposit) || isLayer2) { return TimePeriod.OneDay } else { return TimePeriod.None From c9559f033a80541f67976024758ec74c4d59de9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bego=C3=B1a=20=C3=81lvarez=20de=20la=20Cruz?= Date: Thu, 16 Nov 2023 15:01:58 +0100 Subject: [PATCH 27/48] fix: explorer link for vesting outputs (#7723) --- .../popups/ActivityDetailsPopup.svelte | 47 ++++++++++--------- .../network/enums/explorer-endpoint.enum.ts | 1 + 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/packages/desktop/components/popups/ActivityDetailsPopup.svelte b/packages/desktop/components/popups/ActivityDetailsPopup.svelte index dd3480fdc8a..b0c03af8b8b 100644 --- a/packages/desktop/components/popups/ActivityDetailsPopup.svelte +++ b/packages/desktop/components/popups/ActivityDetailsPopup.svelte @@ -1,20 +1,11 @@ From 122146774a8e6527b4f2167afa0e93ddb379b03c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bego=C3=B1a=20Alvarez?= Date: Tue, 12 Dec 2023 17:04:24 +0100 Subject: [PATCH 45/48] chore: bump version to 2.1.10 --- packages/desktop/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 5eb3883baae..b55a47dd980 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "desktop", "productName": "Firefly Shimmer", - "version": "2.1.10-beta-5", + "version": "2.1.10", "description": "Official wallet application of Shimmer", "main": "public/build/main.js", "repository": "git@github.com:iotaledger/firefly.git", From 42435fcdf5d9da8d4d09a9fe156b62075c7e9b38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bego=C3=B1a=20Alvarez?= Date: Tue, 12 Dec 2023 17:12:28 +0100 Subject: [PATCH 46/48] chore: bump version to 2.0.4 --- packages/desktop/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 04e395c48ad..e34692e8f43 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "desktop", "productName": "Firefly IOTA", - "version": "2.0.3", + "version": "2.0.4", "description": "Official wallet application of Shimmer", "main": "public/build/main.js", "repository": "git@github.com:iotaledger/firefly.git", From 9c4866ec10385168f9383344068a8ee59f1c893c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 13 Dec 2023 09:48:12 +0100 Subject: [PATCH 47/48] New Crowdin translations by Github Action (#7740) Co-authored-by: Crowdin Bot --- packages/shared/locales/ar.json | 4 +- packages/shared/locales/da.json | 2 +- packages/shared/locales/de.json | 2 +- packages/shared/locales/es-ES.json | 2 +- packages/shared/locales/es-LA.json | 2 +- packages/shared/locales/hu.json | 2 +- packages/shared/locales/id.json | 1920 ++++++++++++++-------------- packages/shared/locales/pl.json | 12 +- 8 files changed, 973 insertions(+), 973 deletions(-) diff --git a/packages/shared/locales/ar.json b/packages/shared/locales/ar.json index 66ba2ed90d3..454e1538a4d 100644 --- a/packages/shared/locales/ar.json +++ b/packages/shared/locales/ar.json @@ -539,8 +539,8 @@ } }, "banners": { - "new": "New Event", - "complete": "Complete" + "new": "حدث جديد", + "complete": "مكتمل" } }, "picker": { diff --git a/packages/shared/locales/da.json b/packages/shared/locales/da.json index 38179b95828..eee26acc304 100644 --- a/packages/shared/locales/da.json +++ b/packages/shared/locales/da.json @@ -1966,7 +1966,7 @@ }, "layer2": { "layer1Recipient": "A layer 2 transaction cannot be sent to a layer 1 account.", - "estimatedGas": "Failed to estimate gas." + "estimatedGas": "Kunne ikke estimere gas." }, "node": { "invalid": "Indtast venligst en gyldig URL.", diff --git a/packages/shared/locales/de.json b/packages/shared/locales/de.json index 17e8e9ce66a..ccf6efa34ad 100644 --- a/packages/shared/locales/de.json +++ b/packages/shared/locales/de.json @@ -1966,7 +1966,7 @@ }, "layer2": { "layer1Recipient": "Eine Layer-2-Transaktion kann nicht an ein Layer-1-Konto gesendet werden.", - "estimatedGas": "Failed to estimate gas." + "estimatedGas": "Gas konnte nicht geschätzt werden." }, "node": { "invalid": "Gib eine gültige URL ein.", diff --git a/packages/shared/locales/es-ES.json b/packages/shared/locales/es-ES.json index 4363a9797b5..c146cf3fd08 100644 --- a/packages/shared/locales/es-ES.json +++ b/packages/shared/locales/es-ES.json @@ -1966,7 +1966,7 @@ }, "layer2": { "layer1Recipient": "Una transacción de capa 2 no puede ser enviada a una cuenta de capa 1.", - "estimatedGas": "Failed to estimate gas." + "estimatedGas": "Error al estimar el gas." }, "node": { "invalid": "Por favor, introduce una URL válida.", diff --git a/packages/shared/locales/es-LA.json b/packages/shared/locales/es-LA.json index 2441dcf83ab..494da561d7e 100644 --- a/packages/shared/locales/es-LA.json +++ b/packages/shared/locales/es-LA.json @@ -1966,7 +1966,7 @@ }, "layer2": { "layer1Recipient": "A layer 2 transaction cannot be sent to a layer 1 account.", - "estimatedGas": "Failed to estimate gas." + "estimatedGas": "Falló al estimarse el gas." }, "node": { "invalid": "Por favor, introduzca una URL válida.", diff --git a/packages/shared/locales/hu.json b/packages/shared/locales/hu.json index 69633901eed..5ed07f52782 100644 --- a/packages/shared/locales/hu.json +++ b/packages/shared/locales/hu.json @@ -1966,7 +1966,7 @@ }, "layer2": { "layer1Recipient": "A 2. rétegbeli tranzakció nem küldhető át egy 1. rétegbeli számlára.", - "estimatedGas": "Failed to estimate gas." + "estimatedGas": "Tranzakciós költség (gáz) becslése sikertelen." }, "node": { "invalid": "Kérjük, adjon meg egy érvényes URL címet!", diff --git a/packages/shared/locales/id.json b/packages/shared/locales/id.json index e499709945e..e60f5560310 100644 --- a/packages/shared/locales/id.json +++ b/packages/shared/locales/id.json @@ -3,183 +3,183 @@ "onboarding": { "appSetup": { "welcome": { - "title": "Send, Receive & Manage your {network} tokens", - "body": "Firefly is the official wallet software for {network}." + "title": "Kirim, Terima & Kelola token {network} Anda", + "body": "Firefly adalah perangkat lunak dompet resmi untuk {network} ." }, "legal": { - "title": "Privacy Policy & Terms of Service", - "body": "Please review the Privacy Policy and Terms of Service.", - "checkbox": "I've read and I accept the Privacy Policy and Terms of Service" + "title": "Kebijakan Privasi & Ketentuan Layanan", + "body": "Harap tinjau Kebijakan Privasi dan Ketentuan Layanan.", + "checkbox": "Saya telah membaca dan menerima Kebijakan Privasi dan Ketentuan Layanan" }, "languageAndAppearance": { - "title": "Language & appearance", - "body": "Choose your language and theme." + "title": "Bahasa & penampilan", + "body": "Pilih bahasa dan tema Anda." } }, "networkSetup": { "chooseProtocol": { - "title": "Choose protocol", - "body": "Set the protocol for your profile.", - "iota": "Default IOTA network", - "shimmer": "Experimental IOTA staging network" + "title": "Pilih protokol", + "body": "Tetapkan protokol untuk profil Anda.", + "iota": "Jaringan IOTA bawaan", + "shimmer": "Jaringan pementasan IOTA eksperimental" }, "chooseNetwork": { - "title": "Choose network", - "body": "Set the network for your profile.", + "title": "Pilih jaringan", + "body": "Atur jaringan untuk profil Anda.", "shimmer": { "title": "Shimmer", - "body": "Staging network for IOTA" + "body": "Jaringan pementasan untuk IOTA" }, "testnet": { - "title": "Testnet", - "body": "Public beta network for Shimmer" + "title": "jaringan uji", + "body": "Jaringan beta publik untuk Shimmer" }, "iota": { "title": "IOTA", - "body": "IOTA Mainnet" + "body": "Jaringan Utama IOTA" }, "iotaAlphanet": { - "title": "IOTA Alphanet", - "body": "IOTA Alphanet" + "title": "Alfanet IOTA", + "body": "Alfanet IOTA" }, "custom": { - "title": "Custom network", - "body": "Support for custom networks and/or nodes" + "title": "Jaringan khusus", + "body": "Dukungan untuk jaringan dan/atau node khusus" } }, "setupCustomNetwork": { - "title": "Connect to a custom network or node", - "body": "Fill the form with the node information and connect to a custom network or node." + "title": "Hubungkan ke jaringan atau node khusus", + "body": "Isi formulir dengan informasi node dan sambungkan ke jaringan atau node khusus." } }, "profileSetup": { "setup": { - "title": "Set up {network, select, IOTA {an} Shimmer {a} Testnet {a} other {a}} {network} profile", - "body": "Select the appropriate method to set up your {network} profile." + "title": "Siapkan profil {network, select, IOTA {an} Shimmer {a} Testnet {a} other {a} } {network}", + "body": "Pilih metode yang sesuai untuk menyiapkan profil {network} Anda." }, "setupNew": { - "title": "Create a profile", - "body": "You can choose a regular software wallet, or if you have a Ledger device, you can set up a hardware wallet.", + "title": "Buat profil", + "body": "Anda dapat memilih dompet perangkat lunak biasa, atau jika Anda memiliki perangkat Ledger, Anda dapat mengatur dompet perangkat keras.", "softwareAccount": { - "title": "Create a software profile", - "description": "Provides a Stronghold file and recovery phrase" + "title": "Buat profil perangkat lunak", + "description": "Menyediakan file Stronghold dan frase pemulihan" }, "ledgerAccount": { - "title": "Create a hardware profile", - "description": "Ledger Nano S, Nano S Plus or Nano X required" + "title": "Buat profil perangkat keras", + "description": "Diperlukan Ledger Nano S, Nano S Plus, atau Nano X" } }, "setupRecovered": { - "title": "Recover {network} profile", - "body": "If you have an existing mnemonic or Stronghold backup file, you can import it here.", - "importMnemonic": "Use recovery phrase", - "importMnemonicDescription": "Enter your 24-word mnemonic phrase", - "importFile": "Use Stronghold backup", - "importFileDescription": "Import your Stronghold backup file", - "importLedger": "Use Ledger device", - "importLedgerDescription": "Restore from your Ledger Nano S, Nano S Plus or X device" + "title": "Pulihkan profil {network}", + "body": "Jika Anda sudah memiliki file cadangan mnemonik atau Stronghold, Anda dapat mengimpornya di sini.", + "importMnemonic": "Gunakan frase pemulihan", + "importMnemonicDescription": "Masukkan frasa mnemonik 24 kata Anda", + "importFile": "Gunakan cadangan Stronghold", + "importFileDescription": "Impor file cadangan Stronghold Anda", + "importLedger": "Gunakan perangkat Ledger", + "importLedgerDescription": "Pulihkan dari perangkat Ledger Nano S, Nano S Plus, atau X Anda" }, "setupClaimed": { - "title": "Claim Shimmer staking rewards", - "body": "Import your IOTA profile and claim your Shimmer staking rewards." + "title": "Klaim hadiah staking Shimmer", + "body": "Impor profil IOTA Anda dan klaim hadiah staking Shimmer Anda." }, "enterName": { - "title": "Create your {network} profile", - "profileName": "Profile name", - "body1": "You can create multiple user profiles to organise your wallets and improve privacy.", + "title": "Buat profil {network} Anda", + "profileName": "Nama profil", + "body1": "Anda dapat membuat beberapa profil pengguna untuk mengatur dompet Anda dan meningkatkan privasi.", "body2": { - "first": "For now, let's start with your first profile name.", - "nonFirst": "For now, let's start with your profile name." + "first": "Untuk saat ini, mari kita mulai dengan nama profil pertama Anda.", + "nonFirst": "Untuk saat ini, mari kita mulai dengan nama profil Anda." }, - "addMore": "You can add more profiles later." + "addMore": "Anda dapat menambahkan lebih banyak profil nanti." } }, "strongholdSetup": { "setupStrongholdPassword": { - "title": "Create a password", - "body1": "You need a strong password to protect your funds. Use a combination of words, and avoid common phrases, names or dates.", - "body2": "It is recommended that you write down your password in your Recovery Kit." + "title": "buat kata sandi", + "body1": "Anda memerlukan kata sandi yang kuat untuk melindungi dana Anda. Gunakan kombinasi kata, dan hindari frasa, nama, atau tanggal yang umum.", + "body2": "Disarankan agar Anda menuliskan kata sandi Anda di Kit Pemulihan Anda." } }, "storageProtectionSetup": { "setupPinProtection": { - "title": "Set up PIN code", - "body1": "Enter a 6-digit PIN below. You will be asked for your PIN to access your profile.", - "body2": "Use numbers only" + "title": "Siapkan kode PIN", + "body1": "Masukkan PIN 6 digit di bawah. Anda akan dimintai PIN untuk mengakses profil Anda.", + "body2": "Gunakan angka saja" } }, "profileBackup": { "backupMnemonic": { - "title": "Back up your recovery phrase", - "body1": "You will now be shown a recovery phrase. Write it down in your Recovery Kit.", - "body2": "Do not share your recovery phrase with anyone. It can be used to access your tokens from anywhere.", - "body3": "If you lose your recovery phrase, you may lose your funds." + "title": "Cadangkan frase pemulihan Anda", + "body1": "Anda sekarang akan diperlihatkan frase pemulihan. Tuliskan di Kit Pemulihan Anda.", + "body2": "Jangan bagikan frasa pemulihan Anda kepada siapa pun. Ini dapat digunakan untuk mengakses token Anda dari mana saja.", + "body3": "Jika Anda kehilangan frase pemulihan, Anda mungkin kehilangan dana." }, "viewMnemonic": { - "title": "Recovery phrase", - "body1": "In your Recovery Kit, write down the words in the exact order shown.", - "body2": "Keep this private and safely stored.", - "body3": "It is important to have a written backup. Computers often fail and files can corrupt.", - "revealRecoveryPhrase": "Reveal recovery phrase", - "hideRecoveryPhrase": "Hide recovery phrase" + "title": "Frase pemulihan", + "body1": "Di Kit Pemulihan Anda, tuliskan kata-kata sesuai urutan yang ditunjukkan.", + "body2": "Jaga kerahasiaan ini dan simpan dengan aman.", + "body3": "Penting untuk memiliki cadangan tertulis. Komputer sering gagal dan file dapat rusak.", + "revealRecoveryPhrase": "Ungkapkan frasa pemulihan", + "hideRecoveryPhrase": "Sembunyikan frase pemulihan" }, "verifyMnemonic": { - "title": "Verify recovery phrase", - "body": "Let's check you wrote down the phrase correctly. Please select each word in numbered order. Tip: You can press the number next to the word in your keyboard to select it.", - "word": "Word", - "verified": "Recovery phrase verified", - "verifiedBody": "Remember to keep it private and safely stored." + "title": "Verifikasi frasa pemulihan", + "body": "Mari kita periksa apakah Anda menuliskan frasa tersebut dengan benar. Silakan pilih setiap kata dalam urutan nomor. Tip: Anda dapat menekan angka di sebelah kata pada keyboard Anda untuk memilihnya.", + "word": "Kata", + "verified": "Frasa pemulihan diverifikasi", + "verifiedBody": "Ingatlah untuk merahasiakannya dan disimpan dengan aman." }, "backupStronghold": { - "title": "Back up to a Stronghold file", - "body1": "Enter your password to create a Stronghold backup of your profile. Your password is used to encrypt the backup file.", - "body2": "Reasons why digital backups are important:", - "reason1": "Easily recover your wallets without typing in your recovery phrase", - "reason2": "Import your wallets on other devices", - "reason3": "Recover your full transaction history" + "title": "Cadangkan ke file Stronghold", + "body1": "Masukkan kata sandi Anda untuk membuat cadangan Stronghold profil Anda. Kata sandi Anda digunakan untuk mengenkripsi file cadangan.", + "body2": "Alasan mengapa pencadangan digital itu penting:", + "reason1": "Pulihkan dompet Anda dengan mudah tanpa mengetikkan frasa pemulihan Anda", + "reason2": "Impor dompet Anda di perangkat lain", + "reason3": "Pulihkan riwayat transaksi lengkap Anda" } }, "profileRecovery": { "importMnemonicPhrase": { - "title": "Enter your recovery phrase", - "body": "A recovery phrase is 24 words long, all lower case, with spaces between. This is used to recover existing Firefly profiles.", - "enter": "Enter your secret recovery phrase", - "phraseDetected": "24 word recovery phrase detected" + "title": "Masukkan frase pemulihan Anda", + "body": "Frasa pemulihan terdiri dari 24 kata, semuanya huruf kecil, dengan spasi di antaranya. Ini digunakan untuk memulihkan profil Firefly yang ada.", + "enter": "Masukkan frase pemulihan rahasia Anda", + "phraseDetected": "Frase pemulihan 24 kata terdeteksi" }, "importStrongholdBackup": { - "title": "Import your Stronghold backup", - "body": "Import a Stronghold backup file to restore your profile." + "title": "Impor cadangan Stronghold Anda", + "body": "Impor file cadangan Stronghold untuk memulihkan profil Anda." }, "backupPassword": { - "body1": "Please enter your backup password.", - "body2": "This is the password you set when you first created your backup." + "body1": "Silakan masukkan kata sandi cadangan Anda.", + "body2": "Ini adalah kata sandi yang Anda tetapkan saat pertama kali membuat cadangan." }, "success": { - "title": "You have successfully recovered your backup", - "body": "You can now set up your new profile." + "title": "Anda telah berhasil memulihkan cadangan Anda", + "body": "Anda sekarang dapat mengatur profil baru Anda." } }, "shimmerClaiming": { "claimRewards": { - "title": "Your Shimmer staking rewards", - "body": "Check that your Shimmer staking rewards are correct. You may need to search multiple times to find your full balance." + "title": "Hadiah staking Shimmer Anda", + "body": "Periksa apakah hadiah staking Shimmer Anda sudah benar. Anda mungkin perlu mencari beberapa kali untuk menemukan saldo penuh Anda." }, "success": { - "title": "Shimmer claimed", - "body": "You have successfully claimed your Shimmer tokens.", - "totalRewards": "Total rewards", - "successfullyFound": "Successfully found {amount}" + "title": "klaim Shimmer", + "body": "Anda telah berhasil mengklaim token Shimmer Anda.", + "totalRewards": "Hadiah total", + "successfullyFound": "Berhasil menemukan {amount}" } }, "congratulations": { - "title": "Profile setup almost complete...", - "fundsMigrated": "Funds migrated", - "body": "Your new profile will be ready once the dashboard has successfully loaded.", - "ledgerHint": "Do not disconnect your Ledger device until the dashboard has finished loading.", - "softwareMigratedBody": "You have successfully migrated your funds to the new network", - "fireflyLedgerBody": "Your Ledger profile was successfully recovered and you can now continue.", - "trinityLedgerBody": "You have successfully migrated your Ledger to the new network.", - "exportMigration": "Export migration log and finish setup" + "title": "Penyiapan profil hampir selesai...", + "fundsMigrated": "Dana bermigrasi", + "body": "Profil baru Anda akan siap setelah dasbor berhasil dimuat.", + "ledgerHint": "Jangan putuskan sambungan perangkat Ledger Anda hingga dasbor selesai dimuat.", + "softwareMigratedBody": "Anda telah berhasil memigrasikan dana Anda ke jaringan baru", + "fireflyLedgerBody": "Profil Ledger Anda berhasil dipulihkan dan sekarang Anda dapat melanjutkan.", + "trinityLedgerBody": "Anda telah berhasil memigrasikan Ledger Anda ke jaringan baru.", + "exportMigration": "Ekspor log migrasi dan selesaikan penyiapan" } }, "setupLedger": { @@ -191,10 +191,10 @@ "videoGuide": "Video petunjuk migrasi Ledger" }, "ledgerInstallationGuide": { - "title": "Have you installed the {network} app on your Ledger device?", - "body1": "Before you proceed, you must use Ledger Live to find and install the {network} app.", + "title": "Sudahkah Anda menginstal aplikasi {network} di perangkat Ledger Anda?", + "body1": "Sebelum melanjutkan, Anda harus menggunakan Ledger Live untuk menemukan dan menginstal aplikasi {network} .", "body2": "Pastikan firmware Ledger Anda adalah versi terkini. Seluruh aplikasi yang sudah di-install sebelumnya harus diperbarui sampai versi terbarunya.", - "action": "Yes, I've installed the {network} app" + "action": "Ya, saya telah memasang aplikasi {network}" }, "importFromLedger": { "title": "Memulihkan atau memigrasikan Ledger Anda", @@ -207,9 +207,9 @@ "connectLedger": { "title": "Hubungkan Ledger Anda ke Firefly", "body": "Agar perangkat Ledger Anda dapat terhubung Firefly, mohon pastikan bahwa aplikasi resmi Ledger Live telah tertutup.", - "connect": "Connect your Ledger device", - "unlock": "Unlock your Ledger with its pin", - "openApp": "Open the {network} app on your Ledger", + "connect": "Hubungkan perangkat Ledger Anda", + "unlock": "Buka kunci Ledger Anda dengan pinnya", + "openApp": "Buka aplikasi {network} di Ledger Anda", "tips": "Tips apabila Ledger Anda tidak dapat terhubung" }, "restoreFromFireflyLedger": { @@ -224,7 +224,7 @@ "readMore": "Apa yang diharapkan dari proses migrasi" }, "generateNewLedgerAddress": { - "title": "Generate new address", + "title": "Buat alamat baru", "body": "Anda perlu untuk men-generate sebuah alamat baru untuk memigrasikan token Anda dengan Firefly. Klik tombol dibawah ini untuk melanjutkan.", "confirmTitle": "Konfirmasi alamat baru", "confirmBody": "Untuk keamanan, mohon bandingkan alamat yang telah Anda generate pada perangkat Ledger Anda dengan alamat yang ditampilkan di bawah ini. Jika cocok, tekan kedua tombol pada Ledger Anda seperti yang diminta.", @@ -250,26 +250,26 @@ "settings": { "settings": "Pengaturan", "general": { - "title": "General", - "description": "Configure your app's appearance and other general settings" + "title": "Umum", + "description": "Konfigurasikan tampilan aplikasi Anda dan pengaturan umum lainnya" }, "profile": { "title": "Profil", "description": "Ubahlah nama profil Anda atau mengatur avatar" }, "network": { - "title": "Network" + "title": "Jaringan" }, "collectibles": { - "title": "Collectibles" + "title": "Barang koleksi" }, "security": { "title": "Keamanan", "description": "Ganti kata sandi Anda dan atur pengaturan terkait keamanan" }, "advanced": { - "title": "Advanced", - "description": "Tools and manual settings for technical users" + "title": "Canggih", + "description": "Alat dan pengaturan manual untuk pengguna teknis" }, "helpAndInfo": { "title": "Bantuan dan Informasi", @@ -289,7 +289,7 @@ "description": "" }, "appName": { - "title": "App Name" + "title": "Nama aplikasi" }, "currency": { "title": "Mata uang", @@ -308,24 +308,24 @@ "description": "Ekspor ke file Stronghold - cadangan terenkripsi sepenuhnya dari dompet Anda dan riwayat transaksi terbaru" }, "appLock": { - "title": "Automatic logout", + "title": "Keluar otomatis", "description": "Waktu tidak aktif sebelum dompet Anda terkunci dan Anda keluar" }, "strongholdPasswordTimeout": { - "title": "Stronghold Timeout", - "description": "Length of time before your Stronghold password is required again" + "title": "Batas Waktu Benteng", + "description": "Lamanya waktu sebelum kata sandi Stronghold Anda diperlukan lagi" }, "maxMediaSize": { - "title": "Maximum media size", - "description": "NFT media with sizes greater than this limit will not be downloaded and a placeholder representing the media type will be displayed instead" + "title": "Ukuran media maksimum", + "description": "Media NFT dengan ukuran lebih besar dari batas ini tidak akan diunduh dan sebagai gantinya akan ditampilkan placeholder yang mewakili jenis media" }, "maxMediaDownloadTime": { - "title": "Maximum download time", - "description": "NFT media which take longer than this limit to download will be canceled and a placeholder representing the media type will be displayed instead" + "title": "Waktu pengunduhan maksimum", + "description": "Media NFT yang memerlukan waktu pengunduhan lebih lama dari batas ini akan dibatalkan dan placeholder yang mewakili jenis media akan ditampilkan" }, "refreshNftMedia": { - "title": "Refresh NFT media", - "description": "NFT media cached for this account will be deleted and then downloaded again" + "title": "Segarkan media NFT", + "description": "Media NFT yang di-cache untuk akun ini akan dihapus dan kemudian diunduh lagi" }, "changePassword": { "title": "Ubah kata sandinya", @@ -346,7 +346,7 @@ }, "balanceFinder": { "title": "Pencari saldo", - "description": "Perform an extended search of your balance" + "description": "Lakukan pencarian lanjutan atas saldo Anda" }, "hiddenAccounts": { "title": "Sembunyikan dompet", @@ -357,12 +357,12 @@ "description": "Menghapus seluruh profil, dompet, dan riwayat transaksi Anda. Pastikan Anda memiliki cadangan" }, "deepLinks": { - "title": "Deep links", - "description": "Automatically fill transaction data in Firefly upon clicking a deep link starting with {appProtocol}://" + "title": "Tautan dalam", + "description": "Secara otomatis mengisi data transaksi di Firefly setelah mengklik tautan dalam yang dimulai dengan {appProtocol} ://" }, "networkInformation": { - "title": "Network information", - "connectedTo": "Connected to" + "title": "Informasi jaringan", + "connectedTo": "Terhubung dengan" }, "configureNodeList": { "title": "Konfigurasi jaringan", @@ -372,16 +372,16 @@ "includeNode": "Sertakan node", "editDetails": "Edit Rincian", "viewInfo": "Lihat info", - "setAsPrimary": "Set primary node", - "unsetAsPrimary": "Clear primary node", - "removeNode": "Remove node", + "setAsPrimary": "Tetapkan node utama", + "unsetAsPrimary": "Hapus node utama", + "removeNode": "Menghapus Node", "includeOfficialNodeList": "Sertakan daftar node resmi", "noNodes": "Tidak ada nodes, tidak dapat terhubung ke jaringan", "noNodesAuto": "Tidak ada node, pilihan otomatis akan digunakan sebagai gantinya" }, "localProofOfWork": { - "title": "Proof of work", - "description": "Complete proof of work locally on your device or outsource to the node" + "title": "Bukti kerja", + "description": "Lengkapi bukti kerja secara lokal di perangkat Anda atau lakukan outsourcing ke node" }, "errorLog": { "title": "Daftar kesalahan", @@ -427,41 +427,41 @@ "description": "Laporkan bug ke pengembang. Periksa kembali untuk memastikan itu belum dilaporkan sebelumnya" }, "developerToggle": { - "title": "Developer Mode", - "description": "Switch developer mode on to enable more features in experimental state" + "title": "Mode pengembang", + "description": "Aktifkan mode pengembang untuk mengaktifkan lebih banyak fitur dalam keadaan eksperimental" } }, "login": { "pleaseWait": "Harap tunggu {time, plural,one {#second}other {# seconds}}", "incorrectAttempts": "{attempts, plural, one {# incorrect attempt} other {# incorrect attempts}}", - "hintStronghold": "Your Stronghold's version is out of date. Please log in to update your Stronghold." + "hintStronghold": "Versi Stronghold Anda sudah kedaluwarsa. Silakan masuk untuk memperbarui Benteng Anda." }, "loadProfile": { "loginSteps": { - "buildProfileManager": "Initialising profile manager", - "updateNodeInfo": "Checking node health", - "recoverAccounts": "Generating accounts", - "loadAccounts": "Syncing accounts", - "loadAssets": "Loading native assets", - "loadActivities": "Building activity history", - "setStrongholdStatus": "Securing stronghold", - "startBackgroundSync": "Starting background sync", - "loggingIn": "Loading dashboard" + "buildProfileManager": "Menginisialisasi manajer profil", + "updateNodeInfo": "Memeriksa kesehatan node", + "recoverAccounts": "Menghasilkan akun", + "loadAccounts": "Menyinkronkan akun", + "loadAssets": "Memuat aset asli", + "loadActivities": "Membangun riwayat aktivitas", + "setStrongholdStatus": "Mengamankan benteng", + "startBackgroundSync": "Memulai sinkronisasi latar belakang", + "loggingIn": "Memuat dasbor" } }, "dashboard": { "network": { - "operational": "Network operational", - "degraded": "Network degraded", - "down": "Network down", - "disconnected": "Disconnected from node", + "operational": "Operasional jaringan", + "degraded": "Jaringan terdegradasi", + "down": "Jaringan mati", + "disconnected": "Terputus dari node", "status": "Status", "messagesPerSecond": "Pesan per detik", "referencedRate": "Konten yang Direferensikan" }, "profileModal": { - "allSettings": "All settings", - "profileApplication": "Profile, application, security", + "allSettings": "Semua pengaturan", + "profileApplication": "Profil, aplikasi, keamanan", "logout": "Keluar", "stronghold": { "title": "Kunci profil", @@ -471,18 +471,18 @@ "hardware": { "title": "Perangkat keras", "statuses": { - "appNotOpen": "Ledger unlocked but app not open", - "correctAppOpen": "Ledger unlocked and app open ", - "locked": "Ledger securely locked", + "appNotOpen": "Ledger tidak terkunci tetapi aplikasi tidak terbuka", + "correctAppOpen": "Ledger tidak terkunci dan aplikasi terbuka", + "locked": "Ledger terkunci dengan aman", "mnemonicMismatch": "Ledger salah atau Mnemonik", - "notConnected": "Ledger not connected", + "notConnected": "Ledger tidak terhubung", "otherConnected": "Aplikasi terbuka" } }, "backup": { "title": "Cadangkan dompet Anda", - "lastBackup": "You last backed up {date}", - "notBackedUp": "Not backed up", + "lastBackup": "Anda melakukan backup terakhir {date}", + "notBackedUp": "Tidak dicadangkan", "button": "Cadangan" }, "version": { @@ -531,7 +531,7 @@ "totalWalletRewards": "Total hadiah dompet", "assembly": { "name": "Assembly", - "description": "Assembly is a permissionless, highly scalable multi-chain network to build and deploy composable smart contracts. Assembly is the future of web3. " + "description": "Majelis adalah jaringan multi-rantai yang sangat skalabel dan tanpa izin untuk membangun dan menerapkan kontrak pintar yang dapat disusun. Perakitan adalah masa depan web3." }, "shimmer": { "name": "Shimmer", @@ -551,256 +551,256 @@ }, "collectibles": { "gallery": { - "title": "Collectibles", - "emptyTitle": "No collectibles", - "noResults": "No results", - "emptyDescription": "Deposit or Receive your first collectible now!" + "title": "Barang koleksi", + "emptyTitle": "Tidak ada barang koleksi", + "noResults": "Tidak ada hasil", + "emptyDescription": "Setor atau Terima koleksi pertama Anda sekarang!" }, "details": { - "storageDepositDescription": "A refundable deposit required to store your NFT on the Tangle.", - "attributes": "Attributes", + "storageDepositDescription": "Deposit yang dapat dikembalikan diperlukan untuk menyimpan NFT Anda di Tangle.", + "attributes": "Atribut", "menu": { - "download": "Download", - "setPfp": "Set NFT profile pic", - "unsetPfp": "Unset NFT profile pic", - "view": "View media in browser", - "burn": "Burn NFT" + "download": "Unduh", + "setPfp": "Setel foto profil NFT", + "unsetPfp": "Batalkan setelan foto profil NFT", + "view": "Lihat media di browser", + "burn": "Bakar NFT" } } }, "governance": { "votingPower": { - "title": "Voting power", - "maximal": "Maximal voting power: {value}", - "manage": "Manage voting power" + "title": "Kekuatan pemungutan suara", + "maximal": "Hak suara maksimal: {value}", + "manage": "Kelola hak suara" }, "proposalsDetails": { - "title": "Details", - "totalProposals": "Total proposals", - "activeProposals": "Active proposals", - "votingProposals": "Proposals you are voting on", - "votedProposals": "Total proposals you voted on" + "title": "Detail", + "totalProposals": "Jumlah proposal", + "activeProposals": "Proposal aktif", + "votingProposals": "Proposal yang Anda pilih", + "votedProposals": "Total proposal yang Anda pilih" }, "proposals": { - "title": "Proposals", - "voted": "Voted", - "successEdit": "Proposal successfully edited", - "successAdd": "{numberOfProposals, select, one {Proposal} other {Proposals}} successfully added", - "successAddAll": "{numberOfProposals, select, one {Proposal} other {Proposals}} successfully added to all accounts", - "successRemove": "Proposal successfully removed", - "emptyTitle": "No proposals" + "title": "Proposal", + "voted": "Telah memilih", + "successEdit": "Proposal berhasil diedit", + "successAdd": "{numberOfProposals, pilih, satu {Proposal} other {Proposals} } berhasil ditambahkan", + "successAddAll": "{numberOfProposals, select, satu {Proposal} other {Proposals} } berhasil ditambahkan ke semua akun", + "successRemove": "Proposal berhasil dihapus", + "emptyTitle": "Tidak ada proposal" }, "statusTimeline": { - "upcoming": "Announcement", - "commencing": "Voting open", - "holding": "Counting starts", - "ended": "Counting stops" + "upcoming": "Pengumuman", + "commencing": "Pemungutan suara terbuka", + "holding": "Penghitungan dimulai", + "ended": "Menghitung berhenti" }, "details": { "yourVote": { - "title": "Your vote", - "total": "Total votes counted", - "power": "Voting power" + "title": "Suara Anda", + "total": "Total suara dihitung", + "power": "Kekuatan pemungutan suara" }, "proposalInformation": { - "title": "Proposal information", - "votingOpens": "Voting opens on", - "countingStarts": "Counting starts on", - "countingEnds": "Counting ends on", - "countingEnded": "Counting ended on", - "eventId": "Event ID", - "nodeUrl": "Node URL" + "title": "Informasi usulan", + "votingOpens": "Pemungutan suara dibuka", + "countingStarts": "Penghitungan dimulai", + "countingEnds": "Penghitungan berakhir", + "countingEnded": "Penghitungan berakhir", + "eventId": "ID Acara", + "nodeUrl": "URL node" }, - "fetching": "Fetching proposal data", - "hintVote": "You can not vote on a proposal that is in the announcement phase, voting will open in {time}." + "fetching": "Mengambil data proposal", + "hintVote": "Anda tidak dapat memberikan suara pada proposal yang sedang dalam tahap pengumuman, pemungutan suara akan dibuka pada {time} ." } }, "updateStronghold": { "update": { - "title": "Update Stronghold", - "loginBody": "Your Stronghold's version is out of date. Provide your password to update Stronghold.", - "recoveryBody": "The imported Stronghold’s version is out of date, to continue we will need to update the stronghold to the latest version." + "title": "Perbarui Benteng", + "loginBody": "Versi Stronghold Anda sudah kedaluwarsa. Berikan kata sandi Anda untuk memperbarui Stronghold.", + "recoveryBody": "Versi Stronghold yang diimpor sudah kedaluwarsa, untuk melanjutkan kami perlu memperbarui benteng ke versi terbaru." }, "updateBackup": { - "loginTitle": "Stronghold updated", - "loginBody": "It's all good now - you're running the latest Stronghold version", - "recoveryTitle": "Stronghold is successfully recovered and updated", - "recoveryBody": "You can now continue setting up your wallet", - "hint": "We highly recommend to delete all previous Stronghold backup files and save a new one" + "loginTitle": "Benteng diperbarui", + "loginBody": "Semuanya baik-baik saja sekarang - Anda menjalankan versi Stronghold terbaru", + "recoveryTitle": "Stronghold berhasil dipulihkan dan diperbarui", + "recoveryBody": "Anda sekarang dapat melanjutkan pengaturan dompet Anda", + "hint": "Kami sangat menyarankan untuk menghapus semua file cadangan Stronghold sebelumnya dan menyimpan yang baru" }, "changePassword": { - "hint": "Your Stronghold was out of date and has been updated. We recommend that you change your Stronghold password." + "hint": "Benteng Anda sudah ketinggalan zaman dan telah diperbarui. Kami menyarankan Anda mengubah kata sandi Stronghold Anda." } }, "vesting": { - "title": "Vesting", + "title": "rompi", "overview": { - "unlocked": "Unlocked", - "locked": "Locked", + "unlocked": "Tidak terkunci", + "locked": "Terkunci", "total": "Total" }, - "timeUntilNextUnlock": "Time until next unlock", - "collect": "Collect", - "search": "Find vesting rewards", + "timeUntilNextUnlock": "Waktunya hingga pembukaan berikutnya", + "collect": "Mengumpulkan", + "search": "Temukan imbalan vesting", "payouts": { - "title": "Biweekly Unlock Schedule", - "information": "Payout Information", + "title": "Jadwal Buka Kunci Dua Mingguan", + "information": "Informasi Pembayaran", "tooltip": { - "title": "Payout", - "amount": "Amount", - "unlockDate": "Unlock Date" + "title": "Pembayaran", + "amount": "Jumlah", + "unlockDate": "Tanggal Buka Kunci" } }, "infoTooltip": { - "title": "Vesting of tokens", - "body": "From the tokens users received through an IOTA token airdrop, 10% are being available to users immediately at the genesis of the IOTA Stardust network. The rest is gradually unlocked over the course of two years in equal proportion happening every two weeks." + "title": "Pemberian token", + "body": "Dari token yang diterima pengguna melalui airdrop token IOTA, 10% tersedia untuk pengguna segera pada awal mula jaringan IOTA Stardust. Sisanya dibuka secara bertahap selama dua tahun dengan proporsi yang sama dan terjadi setiap dua minggu." } } }, "popups": { "payoutDetails": { - "title": "Payout Details", - "amount": "Total amount", - "unlockDate": "Unlock date", + "title": "Detail Pembayaran", + "amount": "Jumlah total", + "unlockDate": "Tanggal buka kunci", "status": "Status" }, "vestingCollect": { - "title": "Collect", - "body": "Don't miss out on your unclaimed funds! Click the button below to check and claim your funds now.", - "unclaimedFunds": "Unclaimed funds", - "button": "Collect" + "title": "Mengumpulkan", + "body": "Jangan lewatkan dana Anda yang belum diklaim! Klik tombol di bawah untuk memeriksa dan mengklaim dana Anda sekarang.", + "unclaimedFunds": "Dana yang tidak diklaim", + "button": "Mengumpulkan" }, "metricSystemInfo": { - "title": "Transitioning from metric prefixes", - "body1": "At the inception of IOTA, we intended to adhere to standards by using metric system prefixes. However, indicating a multiple or submultiple of the unit has been proven impractical.", - "body2": "Instead of kilo (KIOTA), mega (MIOTA), etc, the new smallest unit in IOTA is called 'micro', or 'micros' for multiple units. What was previously 1 MIOTA will now simply be called one IOTA. 1,000,000 micros equal 1 IOTA.", - "body3": "Please be assured that this change will not affect the value of your assets - it's a linguistic refinement, not a functional change. You can find more information in the blog post announcing the change.", - "link": "New IOTA token denomination: moving away from metric unit prefixes" + "title": "Transisi dari awalan metrik", + "body1": "Pada awal IOTA, kami bermaksud untuk mematuhi standar dengan menggunakan awalan sistem metrik. Namun, menunjukkan beberapa atau beberapa unit telah terbukti tidak praktis.", + "body2": "Daripada kilo (KIOTA), mega (MIOTA), dll, unit terkecil baru di IOTA disebut 'mikro', atau 'mikro' untuk beberapa unit. Apa yang sebelumnya 1 MIOTA sekarang akan disebut satu IOTA. 1.000.000 mikro sama dengan 1 IOTA.", + "body3": "Yakinlah bahwa perubahan ini tidak akan memengaruhi nilai aset Anda - ini merupakan penyempurnaan linguistik, bukan perubahan fungsional. Anda dapat menemukan informasi lebih lanjut di postingan blog yang mengumumkan perubahan tersebut.", + "link": "Denominasi token IOTA baru: beralih dari awalan satuan metrik" }, "enableLedgerBlindSigning": { - "title": "Enable Blind Signing", - "info": "In order to confirm this transaction you need to enable Blind Signing on your ledger device.", - "step_1": "Connect and unlock your Ledger Device", - "step_2": "Open {network} Application", - "step_3": "Press the right button to navigate to Settings. Then press both buttons to validate. Your Ledger device displays Blind Signing.", - "step_4": "Press both buttons to enable transaction blind signing. The device displays Enabled. You're done." + "title": "Aktifkan Penandatanganan Buta", + "info": "Untuk mengonfirmasi transaksi ini, Anda perlu mengaktifkan Blind Signing di perangkat Ledger Anda.", + "step_1": "Hubungkan dan buka kunci Perangkat Ledger Anda", + "step_2": "Buka Aplikasi {network}", + "step_3": "Tekan tombol kanan untuk menavigasi ke Pengaturan. Kemudian tekan kedua tombol untuk memvalidasi. Perangkat Ledger Anda menampilkan Penandatanganan Buta.", + "step_4": "Tekan kedua tombol untuk mengaktifkan penandatanganan transaksi secara buta. Perangkat menampilkan Diaktifkan. Kamu sudah selesai." }, "balanceBreakdown": { - "title": "Balance breakdown", + "title": "Kerusakan Saldo", "available": { - "title": "Available", - "subtitle": "Funds fully available for spending" + "title": "Tersedia", + "subtitle": "Dana sepenuhnya tersedia untuk dibelanjakan" }, "pending": { - "title": "Pending", - "subtitle": "Temporarily locked in transactions (excluding vesting)" + "title": "Tertunda", + "subtitle": "Transaksi terkunci sementara (tidak termasuk vesting)" }, "locked": { - "title": "Locked", - "subtitle": "Temporarily locked for governance" + "title": "Terkunci", + "subtitle": "Dikunci sementara untuk pemerintahan" }, "storageDeposit": { - "title": "Storage deposit", - "subtitle": "These funds are reserved for storing native assets." + "title": "Setoran penyimpanan", + "subtitle": "Dana ini dicadangkan untuk menyimpan aset asli." }, "totalBalance": { - "title": "Total balance", + "title": "Saldo keseluruhan", "subtitle": "" }, "basicOutputs": { - "title": "Native Tokens", - "subtitle": "Reserved for Native Token storage" + "title": "Token Asli", + "subtitle": "Dicadangkan untuk penyimpanan Token Asli" }, "nftOutputs": { - "title": "NFTs", - "subtitle": "Reserved for NFT storage" + "title": "NFT", + "subtitle": "Dicadangkan untuk penyimpanan NFT" }, "aliasOutputs": { - "title": "Aliases", - "subtitle": "Reserved for Alias storage" + "title": "Alias", + "subtitle": "Dicadangkan untuk penyimpanan Alias" }, "foundryOutputs": { - "title": "Foundries", - "subtitle": "Reserved for Native Token Foundry storage" + "title": "Pengecoran", + "subtitle": "Dicadangkan untuk penyimpanan Native Token Foundry" }, "unclaimed": { - "title": "Unclaimed transaction", - "subtitle": "Temporarily locked in unclaimed transactions" + "title": "Transaksi yang tidak diklaim", + "subtitle": "Terkunci sementara dalam transaksi yang tidak diklaim" }, "timelock": { - "title": "Time lock", - "subtitle": "Temporarily locked in timelocked transactions" + "title": "Kunci waktu", + "subtitle": "Terkunci sementara dalam transaksi yang memiliki waktu terkunci" }, "storageDepositReturn": { "title": "SDRUC", - "subtitle": "Temporarily locked in Storage Deposit Return" + "subtitle": "Terkunci sementara di Penyimpanan Pengembalian Deposit" }, "governance": { - "title": "Governance", - "subtitle": "Reserved for voting power" + "title": "Tata Kelola", + "subtitle": "Dicadangkan untuk hak suara" }, "vesting": { - "title": "Vesting", - "subtitle": "Locked funds awaiting unlock based on the vesting schedule" + "title": "rompi", + "subtitle": "Dana terkunci menunggu dibuka berdasarkan jadwal vesting" }, - "minimizeStorageDepositButton": "Minimize storage deposit" + "minimizeStorageDepositButton": "Minimalkan deposit penyimpanan" }, "minimizeStorageDeposit": { - "title": "Minimize storage deposit", - "description": "Consolidate outputs to minimize your required storage deposit and increase your available balance.", - "confirmButton": "Consolidate" + "title": "Minimalkan deposit penyimpanan", + "description": "Konsolidasikan keluaran untuk meminimalkan setoran penyimpanan yang diperlukan dan meningkatkan saldo yang tersedia.", + "confirmButton": "Mengkonsolidasikan" }, "alias": { - "title": "Confirm alias creation" + "title": "Konfirmasikan pembuatan alias" }, "password": { "title": "Kata sandi diperlukan", - "subtitle": "Please provide your password to unlock your wallets", + "subtitle": "Harap berikan kata sandi Anda untuk membuka kunci dompet Anda", "backup": "Masukkan kata sandi akun Anda untuk mengimpor cadangan Anda" }, "qr": { "title": "Code QR anda" }, "appUpdate": { - "title": "Check for updates", - "installedVersion": "Installed version", - "newVerion": "New version", - "stage": "Stage", - "prod": "Production", - "alpha": "Alpha", + "title": "Periksa pembaruan", + "installedVersion": "Versi terinstal", + "newVerion": "Versi baru", + "stage": "Panggung", + "prod": "Produksi", + "alpha": "Alfa", "beta": "Beta", - "releasedAt": "Released at", - "updateAvailable": "Update is available", - "updatesDisabled": "There are updates available, but in-app upgrade is disabled for your operating system.", - "latestInstalled": "You are running the latest and safest version" + "releasedAt": "Dirilis pada", + "updateAvailable": "Pembaruan tersedia", + "updatesDisabled": "Ada pembaruan yang tersedia, namun peningkatan dalam aplikasi dinonaktifkan untuk sistem operasi Anda.", + "latestInstalled": "Anda menjalankan versi terbaru dan teraman" }, "backupStronghold": { - "title": "Backup your stronghold file", - "body": "It is important to back up your wallet regularly to ensure you have a copy of your wallets and transaction history. If you lose your backup and recovery phrase you will lose access to your funds." + "title": "Cadangkan file benteng Anda", + "body": "Penting untuk mencadangkan dompet Anda secara teratur untuk memastikan Anda memiliki salinan dompet dan riwayat transaksi Anda. Jika Anda kehilangan frase cadangan dan pemulihan, Anda akan kehilangan akses ke dana Anda." }, "deeplinkAccountSwitch": { - "title": "Select a wallet", - "body": "You just followed a deep link. Please select the wallet with which you want to continue." + "title": "Pilih dompet", + "body": "Anda baru saja mengikuti tautan dalam. Silakan pilih dompet yang ingin Anda gunakan untuk melanjutkan." }, "deeplinkError": { - "title": "Failed link", - "body": "This link failed or is invalid. Please try again or double check the source of the link." + "title": "Tautan gagal", + "body": "Tautan ini gagal atau tidak valid. Silakan coba lagi atau periksa kembali sumber tautannya." }, "deleteAccount": { "title": "Menghapus {name}?", - "body": "Are you sure you want to delete this wallet?", - "hint": "Note: once deleted, you can restore this wallet by using the \"Wallet Finder\" in the settings.", + "body": "Apakah Anda yakin ingin menghapus dompet ini?", + "hint": "Catatan: setelah dihapus, Anda dapat memulihkan dompet ini dengan menggunakan \"Pencari Dompet\" di pengaturan.", "typePassword": "Ketik kata sandi dompet Anda untuk mengonfirmasi.", "hideAccount": "Hapus dompet", "errorTitle": "Tidak dapat menghapus {name}", "errorBody1": "Anda tidak dapat menghapus akun ini, Anda harus memiliki setidaknya satu." }, "externalUrl": { - "title": "Open URL in Browser", - "body": "Are you sure you want to open \"{url}\" in the browser?", - "hint": "This URL is unknown to Firefly. Please double check the URL before opening it.", - "action": "Open URL", - "invalidProtocol": "Cannot open URL with invalid protocol" + "title": "Buka URL di Browser", + "body": "Apakah Anda yakin ingin membuka \" {url} \" di browser?", + "hint": "URL ini tidak diketahui oleh Firefly. Harap periksa kembali URL sebelum membukanya.", + "action": "Buka URL", + "invalidProtocol": "Tidak dapat membuka URL dengan protokol yang tidak valid" }, "hideAccount": { "title": "Sembunyikan {name}?", @@ -813,12 +813,12 @@ "errorBody3": "Anda tidak dapat menyembunyikan akun ini, Anda harus memiliki setidaknya satu." }, "excludeNode": { - "title": "Exclude node", - "body": "Are you sure you want to exclude {url} from the available node pool?" + "title": "Kecualikan node", + "body": "Apakah Anda yakin ingin mengecualikan {url} dari kumpulan node yang tersedia?" }, "unsetAsPrimaryNode": { - "title": "Clear primary node", - "body": "Are you sure you want to clear {url} as the primary node?" + "title": "Hapus node utama", + "body": "Apakah Anda yakin ingin menghapus {url} sebagai node utama?" }, "node": { "titleAdd": "Tambahkan Node", @@ -826,7 +826,7 @@ "titleRemove": "Menghapus Node", "titleRemoveAll": "Menghapus semua node", "titleDetails": "Node detailnya", - "titleInfo": "Node information", + "titleInfo": "Informasi node", "addingNode": "Tambahkan Node", "updatingNode": "Memperbarui node", "loadingNodeInfo": "Memuat Info Produk", @@ -838,39 +838,39 @@ "removeConfirmation": "Anda yakin ingin menghapus node ini?", "info": { "general": { - "tab": "General", - "name": "Name", + "tab": "Umum", + "name": "Nama", "url": "URL", - "version": "Version", - "latestMilestone": "Latest milestone", - "confirmedMilestone": "Confirmed milestone", - "pruningIndex": "Pruning index", - "features": "Features" + "version": "Versi: kapan", + "latestMilestone": "Tonggak sejarah terbaru", + "confirmedMilestone": "Tonggak sejarah yang dikonfirmasi", + "pruningIndex": "Indeks pemangkasan", + "features": "Fitur" }, "metrics": { - "tab": "Metrics", - "blocksPerSecond": "Blocks per second", - "referencedBlocksPerSecond": "Referenced blocks per second", - "referencedRate": "Referenced rate", - "latestMilestone": "Latest milestone", - "confirmedMilestone": "Confirmed milestone" + "tab": "Metrik", + "blocksPerSecond": "Blok per detik", + "referencedBlocksPerSecond": "Blok yang direferensikan per detik", + "referencedRate": "Tarif yang direferensikan", + "latestMilestone": "Tonggak sejarah terbaru", + "confirmedMilestone": "Tonggak sejarah yang dikonfirmasi" }, "protocol": { - "tab": "Protocol", - "network": "Network", + "tab": "Protokol", + "network": "Jaringan", "bech32Hrp": "Bech32 HRP", - "tokenSupply": "Token supply", - "version": "Version", - "minPowScore": "Min PoW Score" + "tokenSupply": "Pasokan token", + "version": "Versi: kapan", + "minPowScore": "Skor Min PoW" }, "baseToken": { - "tab": "Base token", + "tab": "Token dasar", "token": "Token", - "tickerSymbol": "Ticker", - "unit": "Unit", + "tickerSymbol": "Jantung", + "unit": "Satuan", "subunit": "Sub-unit", - "decimals": "Decimals", - "useMetricPrefix": "Use metric prefix" + "decimals": "Desimal", + "useMetricPrefix": "Gunakan awalan metrik" } } }, @@ -902,34 +902,34 @@ "userPath": "Jalur pengguna" }, "transaction": { - "title": "Send asset", + "title": "Kirim aset", "body": "Anda akan mengirim {amount} kepada", - "selectToken": "Select a token", - "selectAmount": "Send {tokenName}", - "selectRecipient": "Send {assetName} to", - "transactionSummary": "Transaction to {recipient}", - "surplusIncluded": "This transaction contains a surplus amount. Please double check this is the amount you want to send.", + "selectToken": "Pilih token", + "selectAmount": "Kirim {tokenName}", + "selectRecipient": "Kirim {assetName} ke", + "transactionSummary": "Transaksi ke {recipient}", + "surplusIncluded": "Transaksi ini mengandung jumlah surplus. Silakan periksa kembali jumlah yang ingin Anda kirim.", "sendingFromStakedAccount": "Anda mengirimkan dana dari dompet yang saat ini sedang di-stake. Proses ini akan meng-unstake token Anda. Anda tetap bebas untuk melakukan transfer tetapi Anda mungkin perlu untuk men-stake kembali token yang tersisa setelahnya.", "sendingFromStakedAccountBelowMinReward": "Anda mengirim transaksi dari dompet yang belum mencapai minimal hadiah taruhan. Ini dapat melepaskan token Anda dan Anda mungkin akan kehilangan hadiah taruhan Anda di dompet ini." }, "balanceFinder": { - "title": "Balance finder", - "body": "Perform a more exhaustive search of balances.", - "addressesSearched": "Addresses searched", - "addressesFound": "Addresses found", - "totalAddressBalance": "Total balance", - "searchAgainHint": "Is your balance or number of wallets incorrect? Search again until your full balance is shown.", - "currentWallet": "Search only in the current wallet" + "title": "Pencari saldo", + "body": "Lakukan pencarian saldo yang lebih mendalam.", + "addressesSearched": "Alamat dicari", + "addressesFound": "Alamat ditemukan", + "totalAddressBalance": "Saldo keseluruhan", + "searchAgainHint": "Apakah saldo atau jumlah dompet Anda salah? Cari lagi sampai saldo penuh Anda ditampilkan.", + "currentWallet": "Cari hanya di dompet saat ini" }, "balanceOverview": { - "title": "Balance overview", - "body": "Find information about all your wallets and the balance of each." + "title": "Ikhtisar saldo", + "body": "Temukan informasi tentang semua dompet Anda dan saldo masing-masing." }, "vestingRewards": { - "title": "Find vesting rewards", - "body": "Perform a more exhaustive search of your rewards.", - "totalAddressBalance": "Total rewards", - "searchAgainHint": "Are your vesting rewards incorrect? Search again until all your rewards are shown." + "title": "Temukan imbalan vesting", + "body": "Lakukan pencarian hadiah Anda secara lebih menyeluruh.", + "totalAddressBalance": "Hadiah total", + "searchAgainHint": "Apakah imbalan vesting Anda salah? Telusuri lagi hingga semua hadiah Anda ditampilkan." }, "riskFunds": { "title": "Peringatan: Dana beresiko selama migrasi", @@ -937,7 +937,7 @@ "body2": "Disarankan agar Anda menjalankan kembali proses untuk alamat dengan tingkat risiko sedang atau lebih tinggi." }, "missingBundle": { - "title": "Warning: funds at risk during migration", + "title": "Peringatan: Dana beresiko selama migrasi", "body": "Anda memiliki dana pada alamat terpakai, tetapi informasi yang diperlukan untuk mengamankannya tidak ditemukan. Ini bisa terjadi apabila Anda melakukan transaksi sejak lama. Anda dapat melanjutkan proses akan tetapi {value} berisiko selama migrasi.", "learnMore": "Pelajari tentang alamat yang terpakai", "proceed": "Saya mengerti risikonya" @@ -949,31 +949,31 @@ "bodyFirefly": "Firefly dinon-aktifkan sampai proses ini selesai. Migrasi token akan dapat dilakukan setelahnya." }, "ledgerNotConnected": { - "title": "Connect your Ledger", - "notConnected": "Connect your Ledger device to continue.", - "locked": "Unlock your Ledger device to continue.", - "appNotOpen": "Open the {legacy} app on your Ledger device to continue.", - "correctAppOpen": "Ledger successfully connected, please continue." + "title": "Hubungkan Ledger Anda", + "notConnected": "Hubungkan perangkat Ledger Anda untuk melanjutkan.", + "locked": "Buka kunci perangkat Ledger Anda untuk melanjutkan.", + "appNotOpen": "Buka aplikasi {legacy} di perangkat Ledger Anda untuk melanjutkan.", + "correctAppOpen": "Ledger berhasil terhubung, silakan lanjutkan." }, "ledgerConfirmation": { "confirm": "Untuk melanjutkan, konfirmasi prompt yang ditampilkan pada perangkat Ledger Anda" }, "ledgerAppGuide": { - "title": "Guide to installing the {legacy} app", + "title": "Panduan untuk menginstal aplikasi {legacy}", "steps": { "0": "Install dan buka aplikasi Ledger Live", "1": "Pastikan bahwa Ledger Anda sudah terhubung", - "2": "Search for the {legacy} app. You may need to enable Ledger Live developer mode.", - "3": "Install the {legacy} app", + "2": "Telusuri aplikasi {legacy} . Anda mungkin perlu mengaktifkan mode pengembang Ledger Live.", + "3": "Instal aplikasi {legacy}", "4": "Ingat bahwa penting untuk menutup Live Ledger sebelum kembali ke Firefly" } }, "ledgerConnectionGuide": { - "title": "Tips if your Ledger isn’t connecting", + "title": "Tips apabila Ledger Anda tidak dapat terhubung", "steps": { "0": "Pastikan bahwa Live Ledger tidak terbuka pada komputer Anda", "1": "Pastikan bahwa Anda sudah membuka perangkat Ledger Anda dengan PIN Anda", - "2": "Open the new {network} app on your Ledger device", + "2": "Buka aplikasi {network} baru di perangkat Ledger Anda", "3": { "text": "Masih belum beruntung?", "link": "Coba halaman dukungan resmi Ledger" @@ -981,13 +981,13 @@ } }, "verifyLedgerTransaction": { - "title": "Verify transaction", - "info": "Compare and confirm the transaction information displayed on your ledger device against the information below." + "title": "Verifikasi transaksi", + "info": "Bandingkan dan konfirmasikan informasi transaksi yang ditampilkan pada perangkat Ledger Anda dengan informasi di bawah ini." }, "verifyInternalLedgerTransaction": { - "title": "Verify internal transaction", - "info": "Please confirm the internal transaction on your ledger.", - "hint": "All assets will remain on your wallet when sending an internal transaction." + "title": "Verifikasi transaksi internal", + "info": "Harap konfirmasi transaksi internal di Ledger Anda.", + "hint": "Semua aset akan tetap ada di dompet Anda saat mengirim transaksi internal." }, "ledgerAddress": { "title": "Konfirmasi alamat penerima", @@ -1010,7 +1010,7 @@ "totalFundsStaked": "Total dana yang di-stake", "stakedSuccessfully": "Dana Anda telah di-stake untuk {account}.", "unstakedSuccessfully": "Dana Anda telah di-unstake untuk {account}.", - "singleAccountHint": "Looking for your wallets? Firefly has changed. Toggle between your wallets in the top menu bar." + "singleAccountHint": "Mencari dompet Anda? Kunang-kunang telah berubah. Beralih di antara dompet Anda di bilah menu atas." }, "stakingConfirmation": { "title": "Konfirmasi Partisipasi", @@ -1028,12 +1028,12 @@ "shimmer-info": { "title": "Tentang Shimmer", "body1": "Selamat Anda telah mendapatkan SMR token sebagai hadiah staking. Shimmer adalah sebuah jaringan terinsentif untuk menguji peningkatan besar pada IOTA.", - "body2": "Kami menargetkan untuk meluncurkan Shimmer pada 2022. Token Anda akan dapat Anda transfer setelah jaringan diluncurkan." + "body2": "Kami bertujuan untuk meluncurkan Shimmer pada tahun 2022. Token Anda akan tersedia untuk ditransfer setelah jaringan diluncurkan." }, "assembly-info": { "title": "Tentang Assembly", "body1": "Selamat Anda telah mendapatkan ASMB token sebagai hadiah staking. Assembly adalah sebuah jaringan Multi-chain untuk meluncurkan skalabel smart contract pada IOTA.", - "body2": "Kami menargetkan untuk meluncurkan Assembly pada 2022. Token Anda akan dapat Anda transfer setelah jaringan diluncurkan." + "body2": "Kami bertujuan untuk meluncurkan Majelis pada tahun 2022. Token Anda akan tersedia untuk ditransfer setelah jaringan diluncurkan." }, "confirmDeveloperProfile": { "title": "Anda sedang membuat akun pengembang", @@ -1042,7 +1042,7 @@ "crashReporting": { "title": "Pelaporan kerusakan", "body": "Bantu pengembang meningkatkan Firefly dengan mengirimkan data diagnostik secara otomatis saat terjadi kesalahan atau crash. Jika dipilih, ini akan berlaku setelah memulai ulang Firefly.", - "checkbox": "Send crash reports to the IOTA Foundation" + "checkbox": "Kirim laporan kerusakan ke IOTA Foundation" }, "legalUpdate": { "tosTitle": "Persyaratan Layanan", @@ -1060,134 +1060,134 @@ "hint": "Tidak dapat menemukan dompet? Gunakan pencari saldo di pengaturan untuk menemukan dompet yang digunakan sebelumnya." }, "transactionDetails": { - "title": "Transaction details", + "title": "Detil transaksi", "giftedStorageDeposit": { - "tooltipTitle": "Gift storage deposit", - "tooltipDescription": "Amount kept by the recipient" + "tooltipTitle": "Setoran penyimpanan hadiah", + "tooltipDescription": "Jumlah yang disimpan oleh penerima" } }, "sendForm": { - "title": "Send funds" + "title": "Kirim dana" }, "tokenInformation": { - "newTokenTitle": "New token", - "verificationWarning": "This token is unverified. Compare the token metadata against the relevant team’s official website. Only verify tokens that you trust.", + "newTokenTitle": "Tanda baru", + "verificationWarning": "Token ini belum diverifikasi. Bandingkan metadata token dengan situs resmi tim terkait. Hanya verifikasi token yang Anda percayai.", "tokenMetadata": { - "standard": "Standard", - "name": "Name", - "tokenId": "Token ID", + "standard": "Standar", + "name": "Nama", + "tokenId": "ID Token", "url": "URL" }, "buttons": { - "verifyToken": "I verify this token" + "verifyToken": "Saya memverifikasi token ini" } }, "sendNft": { - "formTitle": "Send NFT", - "confirmationTitle": "Confirm sending NFT", + "formTitle": "Kirim NFT", + "confirmationTitle": "Konfirmasikan pengiriman NFT", "property": { "nft": "NFT" } }, "nativeToken": { - "formTitle": "Mint native tokens", - "confirmationTitle": "Mint native tokens", + "formTitle": "Token asli mint", + "confirmationTitle": "Token asli mint", "property": { - "totalSupply": "Total supply", - "maximumSupply": "Maximum supply", - "mintedTokens": "Minted tokens", - "meltedTokens": "Melted tokens", - "circulatingSupply": "Circulating supply", - "aliasAddress": "Alias controller address", - "standard": "Standard", - "tokenName": "Name", - "unit": "Unit", + "totalSupply": "Pasokan total", + "maximumSupply": "Pasokan maksimal", + "mintedTokens": "Token yang dicetak", + "meltedTokens": "Token yang meleleh", + "circulatingSupply": "Persediaan yang bersirkulasi", + "aliasAddress": "Alamat pengontrol alias", + "standard": "Standar", + "tokenName": "Nama", + "unit": "Satuan", "subunit": "Subunit", - "storageDeposit": "Storage Deposit", - "description": "Description", - "symbol": "Symbol", - "decimals": "Decimals", + "storageDeposit": "Setoran Penyimpanan", + "description": "Keterangan", + "symbol": "Simbol", + "decimals": "Desimal", "url": "URL", - "logoUrl": "Logo URL", + "logoUrl": "URL logo", "logo": "Logo", "alias": "Alias", - "assetId": "Asset Id" + "assetId": "Id Aset" } }, "noAlias": { - "title": "Unable to mint", - "description": "You must own an alias output to mint native tokens. To continue, please create an alias first" + "title": "Tidak dapat mencetak", + "description": "Anda harus memiliki keluaran alias untuk membuat token asli. Untuk melanjutkan, harap buat alias terlebih dahulu" }, "mintNftForm": { - "title": "Mint simple NFT", + "title": "Buat NFT sederhana", "errors": { - "invalidMimetype": "Invalid MimeType, check if the file type is supported", - "quantityTooSmall": "Quantity needs to be greater than 0", - "quantityTooLarge": "Quantity needs to be smaller than 64", - "emptyName": "Name is a required field", - "invalidURI": "Invalid URI, please provide a valid URI", - "notReachable": "URI not reachable, unable to check NFT type", - "royaltiesMustBeObject": "Royalties must be an object", - "royaltiesMustBeJSON": "Royalties must be a valid JSON", - "invalidAddress": "Invalid address, must be a valid {networkHrp} address where royalties will be sent to", - "invalidRoyaltyValue": "Invalid value, it must be a numeric decimal representative of the percentage required ie. 0.05", - "invalidRoyaltyValueSum": "Invalid value, the sum of all royalties must be less than or equal to 1'", - "attributesMustBeJSON": "Attributes must be a valid JSON", - "attributesMustBeArrayOfObjects": "Attributes must be an array of objects", - "attributesInvalidKeys": "Invalid key, attributes must have the keys \"trait_type\" and \"value\"", - "attributesInvalidValues": "Invalid value, \"trait_type\" must be a non empty string and \"value\" must be a non empty string or a number" + "invalidMimetype": "MimeType tidak valid, periksa apakah jenis file didukung", + "quantityTooSmall": "Kuantitas harus lebih besar dari 0", + "quantityTooLarge": "Jumlahnya harus lebih kecil dari 64", + "emptyName": "Nama adalah bidang yang wajib diisi", + "invalidURI": "URI tidak valid, harap berikan URI yang valid", + "notReachable": "URI tidak dapat dijangkau, tidak dapat memeriksa jenis NFT", + "royaltiesMustBeObject": "Royalti harus menjadi sebuah objek", + "royaltiesMustBeJSON": "Royalti harus berupa JSON yang valid", + "invalidAddress": "Alamat tidak valid, harus berupa alamat {networkHrp} yang valid yang menjadi tujuan pengiriman royalti", + "invalidRoyaltyValue": "Nilai tidak valid, harus berupa angka desimal yang mewakili persentase yang diperlukan, yaitu. 0,05", + "invalidRoyaltyValueSum": "Nilai tidak valid, jumlah seluruh royalti harus kurang dari atau sama dengan 1'", + "attributesMustBeJSON": "Atribut harus berupa JSON yang valid", + "attributesMustBeArrayOfObjects": "Atribut harus berupa array objek", + "attributesInvalidKeys": "Kunci tidak valid, atribut harus memiliki kunci \"trait_type\" dan \"value\"", + "attributesInvalidValues": "Nilai tidak valid, \"trait_type\" harus berupa string yang tidak kosong dan \"nilai\" harus berupa string atau angka yang tidak kosong" } }, "faucetRequest": { - "title": "Faucet request", - "body": "Are you sure you want to request {token} tokens from the {network} faucet?" + "title": "Permintaan keran", + "body": "Apakah Anda yakin ingin meminta token {token} dari faucet {network} ?" }, "manageVotingPower": { - "title": "Manage voting power", - "body": "Define your voting power to vote on proposals.", - "hint": "All funds that you allocate to voting are locked. In order to make them spendable again, you need to decrease your voting power. This affects all proposals with an active vote.", - "amountZero": "Please be aware that setting your voting power to zero will stop all your votes for all proposals you are currently voting on." + "title": "Kelola hak suara", + "body": "Tentukan hak suara Anda untuk memberikan suara pada proposal.", + "hint": "Semua dana yang Anda alokasikan untuk pemungutan suara dikunci. Agar dapat dibelanjakan lagi, Anda perlu mengurangi hak suara Anda. Hal ini mempengaruhi semua proposal dengan pemungutan suara aktif.", + "amountZero": "Perlu diketahui bahwa menetapkan hak suara Anda ke nol akan menghentikan semua suara Anda untuk semua proposal yang sedang Anda pilih." }, "addProposal": { - "title": "Add proposal", - "body": "Please provide the information listed below to add a proposal.", - "addToAllAccounts": "Add the proposal to all accounts" + "title": "Tambahkan usulan", + "body": "Harap berikan informasi yang tercantum di bawah ini untuk menambahkan proposal.", + "addToAllAccounts": "Tambahkan proposal ke semua akun" }, "editProposal": { - "title": "Edit proposal", - "body": "Please provide the new url for the node that contains this proposal." + "title": "Sunting usulan", + "body": "Harap berikan url baru untuk node yang berisi proposal ini." }, "voteForProposal": { - "title": "Vote for proposal", - "body": "You're about to vote for {proposal} proposal.", - "key": "Your voting power", - "hasAbstained": "You are abstaining from answering {numberOfQuestions, plural, one {# question} other {# questions}}.", - "noVotingPower": "You do not have any voting power. Please increase your voting power from the Governance dashboard." + "title": "Pilih proposal", + "body": "Anda akan memberikan suara untuk proposal {proposal} .", + "key": "Kekuatan memilih Anda", + "hasAbstained": "Anda tidak menjawab {numberOfQuestions, plural, one {# question} other {# questions}} .", + "noVotingPower": "Anda tidak memiliki hak suara apa pun. Harap tingkatkan hak suara Anda dari dasbor Tata Kelola." }, "revote": { - "title": "Revote on proposals", - "body": "Changing your voting power temporarily stops your votes for all proposals from being counted. Simply click \"Revote\" to resume voting.", - "hint": "Firefly remembers all of the proposals and answer options you previously voted for." + "title": "Pemungutan suara ulang pada proposal", + "body": "Mengubah hak suara Anda untuk sementara akan menghentikan penghitungan suara Anda untuk semua proposal. Cukup klik \"Revote\" untuk melanjutkan pemungutan suara.", + "hint": "Firefly mengingat semua proposal dan pilihan jawaban yang Anda pilih sebelumnya." }, "removeProposal": { - "title": "Remove proposal", - "body": "Are you sure you want to remove this proposal?", - "hint": "Please note that removing a proposal during the counting period will stop your votes but won't impact any votes that have already been counted." + "title": "Hapus usulan", + "body": "Apakah Anda yakin ingin menghapus proposal ini?", + "hint": "Harap perhatikan bahwa menghapus proposal selama periode penghitungan akan menghentikan suara Anda namun tidak akan memengaruhi suara apa pun yang telah dihitung." }, "stopVoting": { - "title": "Stop voting", - "body": "You're about to stop voting for the {proposalName} proposal.", - "hint": "Please note that stopping voting during the counting period won't impact any votes that have already been counted." + "title": "Berhenti memilih", + "body": "Anda akan berhenti memberikan suara untuk proposal {proposalName} .", + "hint": "Harap dicatat bahwa menghentikan pemungutan suara selama periode penghitungan tidak akan berdampak pada suara yang sudah dihitung." }, "nodeAuthRequired": { - "title": "Authentication required", - "body": "This node requires additional authentication. Please fill in the appropriate information." + "title": "Diperlukan otentikasi", + "body": "Node ini memerlukan otentikasi tambahan. Silakan isi informasi yang sesuai." }, "addressHistory": { - "title": "Address history", - "disclaimer": "List of addresses with funds or known by this profile", - "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", - "internal": "Internal" + "title": "Alamat sejarah", + "disclaimer": "Daftar alamat dengan dana atau dikenal dengan profil ini", + "indexAndType": "{internal, pilih, benar {Internal address} other {Deposit address} } {index}", + "internal": "Intern" } }, "charts": { @@ -1204,7 +1204,7 @@ "timeframe1Month": "1 bulan" }, "actions": { - "apply": "Apply", + "apply": "Menerapkan", "continue": "Lanjutkan", "back": "Kembali", "previous": "Sebelumnya", @@ -1212,58 +1212,58 @@ "cancel": "Batal", "close": "Tutup", "dismiss": "Menyingkirkan", - "claim": "Claim", - "claiming": "Claiming", - "claimingRewards": "Claiming rewards", - "reject": "Reject", + "claim": "Mengeklaim", + "claiming": "Mengklaim", + "claimingRewards": "Mengklaim hadiah", + "reject": "Menolak", "confirmRejection": { - "title": "Reject transaction", - "description": "Are you sure you want to reject this transaction?", - "node": "Please note that rejecting a transaction only hides it from your Activity feed" + "title": "Tolak transaksi", + "description": "Apakah Anda yakin ingin menolak transaksi ini?", + "node": "Harap perhatikan bahwa menolak transaksi hanya menyembunyikannya dari umpan Aktivitas Anda" }, "confirmTokenBurn": { - "title": "Burn {assetName}", - "hint": "Please note that burning a token may free storage deposit attached to it and is not reversible" + "title": "Bakar {assetName}", + "hint": "Harap diperhatikan bahwa pembakaran token dapat membebaskan simpanan penyimpanan yang melekat padanya dan tidak dapat dibatalkan" }, "confirmNftBurn": { - "title": "Burn {nftName}", - "description": "Are you sure you want to burn this NFT?", - "hint": "Please note that burning an NFT frees the storage deposit attached to it and is not reversible." + "title": "Bakar {nftName}", + "description": "Apakah Anda yakin ingin membakar NFT ini?", + "hint": "Harap diperhatikan bahwa membakar NFT akan membebaskan simpanan penyimpanan yang melekat padanya dan tidak dapat dibatalkan." }, "proceedAnyway": "Tetap lanjutkan", "save": "Simpan", "importSeed": "Impor seed lama", "restoreWallet": { - "iota": "Restore IOTA profile", - "iotaAlphanet": "Restore IOTA Alphanet profile", - "shimmer": "Restore Shimmer profile", - "testnet": "Restore Testnet profile", - "custom": "Restore Custom Network profile" + "iota": "Pulihkan profil IOTA", + "iotaAlphanet": "Pulihkan profil IOTA Alphanet", + "shimmer": "Pulihkan profil Shimmer", + "testnet": "Pulihkan profil Testnet", + "custom": "Pulihkan profil Jaringan Khusus" }, "restoreWalletDescription": { - "iota": "Restore an existing IOTA profile", - "iotaAlphanet": "Restore an existing IOTA Alphanet profile", - "shimmer": "Restore an existing Shimmer profile", - "testnet": "Restore an existing Testnet profile", - "custom": "Restore an existing Custom Network profile" + "iota": "Pulihkan profil IOTA yang ada", + "iotaAlphanet": "Pulihkan profil IOTA Alphanet yang ada", + "shimmer": "Pulihkan profil Shimmer yang ada", + "testnet": "Pulihkan profil Testnet yang ada", + "custom": "Pulihkan profil Jaringan Kustom yang ada" }, "refreshNftMedia": { - "title": "Refresh NFT media", - "description": "Do you want to delete and re-download all NFT media for this account?" - }, - "createWallet": "Create a new {network} profile", - "createWalletDescription": "Create a fresh profile running on {network, select, iota {Chrysalis} shimmer {Shimmer} testnet {Testnet} custom {Custom Network} other {Unknown}}", - "claimShimmer": "Claim Shimmer staking rewards", - "claimShimmerDescription": "Import IOTA profile and claim staking rewards", - "createAlias": "Create alias", - "createAliasDescription": "Create alias output", + "title": "Segarkan media NFT", + "description": "Apakah Anda ingin menghapus dan mengunduh ulang semua media NFT untuk akun ini?" + }, + "createWallet": "Buat profil {network} baru", + "createWalletDescription": "Buat profil baru yang berjalan di {network, select, iota {Chrysalis} shimmer {Shimmer} testnet {Testnet} custom {Custom Network} other {Unknown} }", + "claimShimmer": "Klaim hadiah staking Shimmer", + "claimShimmerDescription": "Impor profil IOTA dan klaim hadiah staking", + "createAlias": "Buat alias", + "createAliasDescription": "Buat keluaran alias", "savePassword": "Simpan kata sandi", "useBiometric": "Pakai keamanan biometrik", - "setupPinCode": "Setup PIN code", - "setPin": "Set PIN", - "setPinCode": "Set PIN code", - "confirmPin": "Confirm PIN", - "confirmPinCode": "Confirm PIN code", + "setupPinCode": "Siapkan kode PIN", + "setPin": "Setel PIN", + "setPinCode": "Tetapkan kode PIN", + "confirmPin": "Konfirmasi PIN", + "confirmPinCode": "Konfirmasikan kode PIN", "enterYourPin": "Masukkan PIN", "saveBackupFile": "Simpan file pencadangan", "iveWrittenRecoveryPhrase": "Aku sudah menuliskan frasa pemulihan", @@ -1274,7 +1274,7 @@ "send": "Kirim", "receive": "Terima", "create": "Membuat", - "updateAndContinue": "Update and continue", + "updateAndContinue": "Perbarui dan lanjutkan", "beginTransfer": "Mulai Transfer", "tryAgain": "Coba kembali", "visitDiscord": "Kunjungi Discord", @@ -1283,12 +1283,12 @@ "chooseFile": "Pilih sebuah File", "dropHere": "Taruh file di sini", "syncAll": "Sinkronkan semua", - "import": "Import", - "importing": "Importing", + "import": "Impor", + "importing": "Pengimporan", "export": "Ekspor", "exporting": "Mengekspor", "exportNewStronghold": "Ekspor Stronghold baru", - "enableDeepLinks": "Enable deep links", + "enableDeepLinks": "Aktifkan tautan dalam", "enableDeveloperMode": "Aktifkan Alat Pengembang", "enableSystemNotifications": "Aktifkan notifikasi sistem", "exportTransactionHistory": "Ekspor Riwayat Transaksi", @@ -1296,29 +1296,29 @@ "unlock": "Buka", "updateFirefly": "Memperbarui Firefly", "restartNow": "Start ulang sekarang", - "refresh": "Refresh", + "refresh": "Menyegarkan", "saveBackup": "Simpan cadangan Stronghold", "customizeAcount": "Penyesuaian dompet", "hideAccount": "Sembunyikan dompet", "showAccount": "Munculkan dompet", - "deleteAccount": "Delete wallet", + "deleteAccount": "Hapus dompet", "max": "Maksimal", "addNode": "Tambah Node", - "addingNode": "Adding node", - "addOfficialNodes": "Add official nodes", + "addingNode": "Menambahkan node", + "addOfficialNodes": "Tambahkan node resmi", "updateNode": "Perbarui node", "removeNode": "Menghapus Node", "hide": "Menyembunyikan", "hideOthers": "Sembunyikan Lainnya", "showAll": "Tunjukkan Semua", - "useMax": "Use Max", + "useMax": "Gunakan Maks", "quit": "Keluar", "edit": "Sunting", "undo": "Batalkan", "redo": "Ulangi", "cut": "Memotong", "copy": "Salin", - "copyAllInformation": "Copy all information", + "copyAllInformation": "Salin semua informasi", "paste": "Tempelkan", "selectAll": "Pilih Semua", "addAccount": "Tambahkan Dompet", @@ -1332,26 +1332,26 @@ "skip": "Lewati", "reset": "Setel ulang", "downloadRecoveryKit": "Simpan template Pemulihan", - "skipBackup": "Skip wallet backup", + "skipBackup": "Lewati pencadangan dompet", "finishSetup": "Selesai Setup", "readDocumentation": "Baca dokumentasi", "visitFaq": "Kunjungi FAQ", - "viewDownloads": "View downloads", + "viewDownloads": "Lihat unduhan", "viewStatus": "Lihat status", "viewAddressHistory": "Lihat riwayat alamat", - "viewBalanceBreakdown": "View balance breakdown", - "verifyDepositAddress": "Verify deposit address", + "viewBalanceBreakdown": "Lihat rincian saldo", + "verifyDepositAddress": "Verifikasi alamat setoran", "showHiddenAccounts": "Tampilkan dompet/akun tersembunyi", "confirm": "Konfirmasi", "hideNetworkStatistics": "Sembunyikan statistik jaringan", - "findWallets": "Find wallets", + "findWallets": "Temukan dompet", "findBalances": "Menemukan saldo", - "useBalanceFinder": "Use balance finder", - "search": "Search", - "searching": "Searching", + "useBalanceFinder": "Gunakan pencari Saldo", + "search": "Mencari", + "searching": "Mencari", "searchAgain": "Cari kembali", "closeFirefly": "Tutup Firefly", - "generateAddress": "Generate address", + "generateAddress": "Buat Alamat", "migrateAgain": "Migrasi indeks Ledger", "visitWebsite": "Kunjungi situs web", "howItWorks": "Bagaimana cara kerjanya", @@ -1363,44 +1363,44 @@ "merge": "Menggabungkan", "mergeFunds": "Menggabungkan dana", "done": "Selesai", - "okIUnderstand": "OK, I understand", - "readMore": "Read more", - "searchForRewards": "Search for rewards", - "claimRewards": "Claim rewards", - "rerunClaimProcess": "Rerun claim process", - "addPublicNote": "Add public note", - "backup": "Backup", - "mint": "Mint", - "mintNativeToken": "Mint native token", - "mintNft": "Mint NFT", - "verifyToken": "Verify token", - "unverifyToken": "Unverify token", - "hideToken": "Hide token", - "unhideToken": "Unhide token", - "burn": "Burn", - "burnToken": "Burn token", - "faucetRequest": "Get {token} tokens", - "refreshTokenMetadata": "Refresh token metadata", - "test": "Test", - "testDeepLink": "Test deep link", - "initialize": "Initialize", - "initializing": "Initializing", - "delete": "Delete", - "remove": "Remove", - "addReference": "Add reference", - "depositNft": "Deposit NFTs", - "vote": "Vote", - "addProposal": "Add proposal", - "removeProposal": "Remove proposal", - "changeNode": "Change node", - "stopVoting": "Stop voting", - "revote": "Revote", - "skipAndKeep": "Skip and keep old password", - "addChain": "Add chain", - "viewVestingRewardsFinder": "Find vesting rewards" + "okIUnderstand": "Oke, saya mengerti", + "readMore": "Baca lebih lanjut", + "searchForRewards": "Cari hadiah", + "claimRewards": "Klaim hadiah", + "rerunClaimProcess": "Jalankan kembali proses klaim", + "addPublicNote": "Tambahkan catatan publik", + "backup": "Cadangan", + "mint": "daun mint", + "mintNativeToken": "Token asli mint", + "mintNft": "Mencetak NFT", + "verifyToken": "Verifikasi token", + "unverifyToken": "Batalkan verifikasi token", + "hideToken": "Sembunyikan token", + "unhideToken": "Perlihatkan token", + "burn": "Membakar", + "burnToken": "Bakar token", + "faucetRequest": "Dapatkan {token}", + "refreshTokenMetadata": "Segarkan metadata token", + "test": "Tes", + "testDeepLink": "Uji tautan dalam", + "initialize": "Inisialisasi", + "initializing": "Inisialisasi", + "delete": "Menghapus", + "remove": "Menghapus", + "addReference": "Tambahkan referensi", + "depositNft": "Setor NFT", + "vote": "Pilih", + "addProposal": "Tambahkan usulan", + "removeProposal": "Hapus usulan", + "changeNode": "Ubah node", + "stopVoting": "Berhenti memilih", + "revote": "Pemungutan suara ulang", + "skipAndKeep": "Lewati dan simpan kata sandi lama", + "addChain": "Tambahkan rantai", + "viewVestingRewardsFinder": "Temukan imbalan vesting" }, "general": { - "recipient": "Recipient", + "recipient": "Penerima", "password": "Kata sandi", "confirmPassword": "Setujui kata sandi", "currentPassword": "Sandi saat ini", @@ -1413,76 +1413,76 @@ "sending": "Mengirim", "received": "Diterima", "receiving": "Menerima", - "newVotingPower": "New voting power", - "votingPower": "Voting power", - "increased": "Voting power increased", - "increasing": "Increasing voting power", - "decreased": "Voting power decreased", - "decreasing": "Decreasing voting power", + "newVotingPower": "Hak suara baru", + "votingPower": "Kekuatan pemungutan suara", + "increased": "Kekuatan suara meningkat", + "increasing": "Meningkatkan hak suara", + "decreased": "Kekuatan suara menurun", + "decreasing": "Mengurangi hak suara", "voted": "Voted", "voting": "Voting", - "changedVote": "Changed vote", - "changingVote": "Changing vote", - "revoted": "Revoted", - "revoting": "Revoting", + "changedVote": "Suara diubah", + "changingVote": "Mengubah suara", + "revoted": "Dicabut kembali", + "revoting": "Membatalkan", "unvoted": "Unvoted", "unvoting": "Unvoting", - "sentNft": "NFT sent", - "sendingNft": "Sending NFT", - "receivedNft": "NFT received", - "receivingNft": "Receiving NFT", + "sentNft": "NFT terkirim", + "sendingNft": "Mengirim NFT", + "receivedNft": "NFT diterima", + "receivingNft": "Menerima NFT", "transfer": "Transfer", - "transferring": "Transferring", - "transferNft": "Transfer NFT", - "transferringNft": "Transferring NFT", - "mintedNft": "Minted NFT", - "mintingNft": "Minting NFT", - "shimmerClaimed": "Claimed", - "shimmerClaiming": "Claiming", - "shimmerGenesis": "Shimmer Genesis", - "vestingReward": "Vesting Reward Airdrop", - "stardustGenesis": "Stardust Genesis", - "minted": "Minted", - "minting": "Minting", - "burned": "Burned", - "burning": "Burning", - "consolidated": "Outputs consolidated", - "consolidating": "Consolidating outputs", - "aliasCreated": "Alias created", - "creatingAlias": "Creating Alias", + "transferring": "Mentransfer", + "transferNft": "Mentransfer NFT", + "transferringNft": "Mentransfer NFT", + "mintedNft": "NFT yang dicetak", + "mintingNft": "Mencetak NFT", + "shimmerClaimed": "Diklaim", + "shimmerClaiming": "Mengklaim", + "shimmerGenesis": "Kejadian Shimmer", + "vestingReward": "Hadiah Vesting Airdrop", + "stardustGenesis": "Kejadian Debu Bintang", + "minted": "dicetak", + "minting": "pencetakan", + "burned": "Dibakar", + "burning": "Pembakaran", + "consolidated": "Output dikonsolidasikan", + "consolidating": "Mengkonsolidasikan keluaran", + "aliasCreated": "Alias dibuat", + "creatingAlias": "Membuat Alias", "sendPayment": "Kirim Pembayaran", "moveFunds": "Transfer internal", "sendTo": "Kirim ke", - "sendAssets": "Send assets", - "sendAssetToAddress": "Send asset to an address", + "sendAssets": "Kirim aset", + "sendAssetToAddress": "Kirim aset ke suatu alamat", "sendToAddress": "Kirim ke alamat", - "sendToken": "Send token", - "sendNft": "Send NFT", - "sendNftToAddress": "Send NFT to an address", + "sendToken": "Kirim token", + "sendNft": "Kirim NFT", + "sendNftToAddress": "Kirim NFT ke suatu alamat", "scanQrOrPaste": "Pindai kode QR atau salin sebuah Alamat", "moveFundsBetweenAccounts": "Pemindahan dana antar dompet", "manageAccount": "Kelola Dompet", "customizeAcount": "Menyesuaikan dompet Anda", - "account": "Wallet", + "account": "Dompet", "sendingToAddress": "Mengirim ke alamat", "amount": "Jumlah", "addAddress": "Tambah Alamat", "reference": "Referensi", "from": "Dari", "to": "Ke", - "and": "and", - "receiveFunds": "Receive funds", + "and": "Dan", + "receiveFunds": "Menerima dana", "address": "Alamat", - "myAddress": "My address", - "myNetworkAddress": "My {networkName} address", + "myAddress": "Alamat saya", + "myNetworkAddress": "Alamat {networkName} saya", "shareAddress": "Bagikan alamat", "yourAddress": "Alamat Anda", "newRemainder": "Sisa terbaru", "remainder": "Sisa", "generateNewAddress": "Buatkan alamat baru", - "copyToClipboard": "Copy to clipboard", + "copyToClipboard": "Menyalin ke clipboard", "copyAddress": "Salin Alamat", - "viewOnExplorer": "View on Explorer", + "viewOnExplorer": "Lihat di Penjelajah", "import": "Impor", "stronghold": "Stronghold", "language": "Bahasa", @@ -1491,8 +1491,8 @@ "darkTheme": "Gelap", "systemTheme": "Sistem", "balance": "Saldo", - "balanceWithValue": "Balance: {balance}", - "balanceWithNetwork": "{network} Balance", + "balanceWithValue": "Saldo: {balance}", + "balanceWithNetwork": "{network} Saldo", "all": "Semua", "incoming": "Pemasukkan", "outgoing": "Pengeluaran", @@ -1507,11 +1507,11 @@ "accountName": "Nama Dompet", "latestTransactions": "Transaksi terbaru", "transactions": "Transaksi", - "activity": "Activity", + "activity": "Aktivitas", "security": "Keamanan", "accountAddress": "Alamat Dompet", "network": "Jaringan", - "destinationNetwork": "Destination network", + "destinationNetwork": "Jaringan tujuan", "nodes": "Nodes", "wallet": "Dompet", "help": "Bantuan", @@ -1528,11 +1528,11 @@ "loadingAccounts": "Sedang memuat, mohon tunggu...", "addProfile": "Tambah profil", "noRecentHistory": "Tidak ada riwayat terkini", - "noFilteredActivity": "No matching activities", - "noAssets": "No assets", - "noFilteredAsset": "No matching assets", - "thisMonth": "This month", - "search": "Search", + "noFilteredActivity": "Tidak ada aktivitas yang cocok", + "noAssets": "Tidak ada aset", + "noFilteredAsset": "Tidak ada aset yang cocok", + "thisMonth": "Bulan ini", + "search": "Mencari", "firstSync": "Sinkronisasi riwayat, tunggu beberapa saat...", "transferSyncing": "Sinkronisasi dompet", "transferSelectingInputs": "Memilih masukan", @@ -1569,12 +1569,12 @@ "creatingProfile": "Menciptakan profil, tolong tunggu...", "fundMigration": "Migrasi dana", "accountRemoved": "Akun ini tersembunyi. Munculkan akun ini untuk melakukan transfer.", - "fromAddress": "from {account}", - "toAddress": "to {account}", - "stakedFor": "Staked for {account}", - "unstakedFor": "Unstaked for {account}", - "votedFor": "Voted for {account}", - "unvotedFor": "Unvoted for {account}", + "fromAddress": "dari {account}", + "toAddress": "ke {account}", + "stakedFor": "Dipertaruhkan untuk {account}", + "unstakedFor": "Tidak dipertaruhkan untuk {account}", + "votedFor": "Memberi suara untuk {account}", + "unvotedFor": "Tidak diberi suara untuk {account}", "stakingTransaction": "Staking Transaction", "unstakingTransaction": "Unstaking Transaction", "legacyNetwork": "Jaringan Legacy", @@ -1582,7 +1582,7 @@ "version": "Versi {version}", "yourWallets": "Dompet Anda", "unknown": "Tak diketahui", - "unknownAddress": "Unknown address", + "unknownAddress": "Alamat tidak diketahui", "none": "Tidak ada", "staked": "Jumlah Staking", "unstaked": "Di-Unstake", @@ -1592,184 +1592,184 @@ "stakedFunds": "Staked funds", "unstakedFunds": "Dana yang tidak di-stake", "accountColor": "Warna dompet", - "transactionTime": "Transaction time", - "surplus": "Surplus", - "storageDeposit": "Storage deposit", - "giftedStorageDeposit": "Gifted storage deposit", - "storageDepositPerNft": "Storage deposit per NFT", - "totalStorageDeposit": "Total storage deposit", - "expirationTime": "Expiration time", - "timelockDate": "Timelock", - "claimedTime": "Claimed at", - "nftAddress": "NFT Address", - "nftId": "NFT ID", - "nftMetadata": "NFT Metadata", - "aliasId": "Alias ID", - "governorAddress": "Governor Address", - "stateControllerAddress": "State Controller Address", - "copiedToClipboard": "Copied to clipboard", + "transactionTime": "Waktu transaksi", + "surplus": "Kelebihan", + "storageDeposit": "Setoran penyimpanan", + "giftedStorageDeposit": "Setoran penyimpanan yang dihadiahkan", + "storageDepositPerNft": "Setoran penyimpanan per NFT", + "totalStorageDeposit": "Total setoran penyimpanan", + "expirationTime": "Waktu kedaluwarsa", + "timelockDate": "Pengunci waktu", + "claimedTime": "Diklaim di", + "nftAddress": "Alamat NFT", + "nftId": "ID NFT", + "nftMetadata": "Metadata NFT", + "aliasId": "ID Alias", + "governorAddress": "Alamat Gubernur", + "stateControllerAddress": "Alamat Pengendali Negara", + "copiedToClipboard": "Disalin ke papan klip", "total": "Total: {balance}", - "availableBalanceWithValue": "Available balance: {balance}", - "availableBalance": "Available balance", - "availableBalanceTooltip": "An asset's total balance minus any funds that are required to cover the storage deposit (i.e. funds that are locked in pending transactions, reserved for Native Tokens, or reserved for NFTs).", - "amountClaimed": "{amount} claimed", + "availableBalanceWithValue": "Saldo yang tersedia: {balance}", + "availableBalance": "Saldo Tersedia", + "availableBalanceTooltip": "Total saldo aset dikurangi dana apa pun yang diperlukan untuk menutupi deposit penyimpanan (yaitu dana yang dikunci dalam transaksi yang tertunda, dicadangkan untuk Token Asli, atau dicadangkan untuk NFT).", + "amountClaimed": "{amount} diklaim", "metadata": "Metadata", - "amountConsolidatedInputs": "Consolidated outputs", - "name": "Name", - "tag": "Tag", - "nodeList": "Node list", - "claimedIn": "Claimed in", - "claimingIn": "Claiming in", - "assets": "Assets", - "nativeTokens": "Native tokens", - "mintNativeTokenDescription": "Mint native token following IRC30 standard", - "mintNftDescription": "Mint NFT following IRC27 standard", - "faucetRequestDescription": "Request tokens from the {network} faucet", - "refreshTokenMetadataDescription": "Reset and refresh all token metadata", - "refreshTokenMetadataHint": "This will reset all your tokens' metadata including the verification status and unhide any hidden assets.", - "giftStorageDeposit": "Gift storage deposit", - "excluded": "Excluded", - "developerTools": "Developer tools", - "testDeepLinkDescription": "Simulate a deep link request sent to firefly", + "amountConsolidatedInputs": "Output konsolidasi", + "name": "Nama", + "tag": "Menandai", + "nodeList": "Daftar node", + "claimedIn": "Diklaim masuk", + "claimingIn": "Mengklaim masuk", + "assets": "Aktiva", + "nativeTokens": "Token asli", + "mintNativeTokenDescription": "Token asli mint mengikuti standar IRC30", + "mintNftDescription": "Mint NFT mengikuti standar IRC27", + "faucetRequestDescription": "Minta token dari faucet {network}", + "refreshTokenMetadataDescription": "Setel ulang dan segarkan semua metadata token", + "refreshTokenMetadataHint": "Tindakan ini akan mengatur ulang semua metadata token Anda termasuk status verifikasi dan menampilkan aset tersembunyi apa pun.", + "giftStorageDeposit": "Setoran penyimpanan hadiah", + "excluded": "Pengecualian", + "developerTools": "Alat pengembang", + "testDeepLinkDescription": "Simulasikan permintaan tautan dalam yang dikirim ke firefly", "url": "URL", - "hash": "Hash", - "creating": "Creating", - "updating": "Updating", - "enterAddress": "Enter address", - "transaction": "Transaction", + "hash": "hash", + "creating": "Menciptakan", + "updating": "Memperbarui", + "enterAddress": "Masukkan alamat", + "transaction": "Transaksi", "alias": "Alias", - "foundry": "Foundry", + "foundry": "Pengecoran", "token": "Token", "nft": "NFT", - "type": "Type", - "immutableIssuer": "Immutable Issuer", - "smartContract": "Smart Contract", - "targetContract": "Target contract", - "contractFunction": "Contract function", - "gasBudget": "Gas budget", - "standard": "Standard", + "type": "Jenis", + "immutableIssuer": "Penerbit yang Tidak Dapat Diubah", + "smartContract": "Kontrak Cerdas", + "targetContract": "Kontrak sasaran", + "contractFunction": "Fungsi kontrak", + "gasBudget": "Anggaran gas", + "standard": "Standar", "uri": "URI", - "issuer": "Issuer", - "issuerAddress": "Issuer Address", - "issuerName": "Issuer Name", - "quantity": "Quantity", - "collection": "Collection", - "collectionId": "Collection ID", - "collectionName": "Collection Name", - "royalties": "Royalties", - "description": "Description", - "attributes": "Attributes", - "details": "Details", - "availableAmount": "{amount} available", - "properties": "Properties", - "statistics": "Statistics", - "username": "Username", - "jwt": "JSON web token", - "internalTransaction": "Internal transaction", - "coinType": "Coin type", - "custom": "Custom", - "verifyLedgerDepositAddress": "Please check the ledger device and verify that the deposit address matches the one displayed on the ledger device" + "issuer": "Penerbit", + "issuerAddress": "Alamat Penerbit", + "issuerName": "Nama Penerbit", + "quantity": "Kuantitas", + "collection": "Koleksi", + "collectionId": "ID Koleksi", + "collectionName": "Nama Koleksi", + "royalties": "Royalti", + "description": "Keterangan", + "attributes": "Atribut", + "details": "Detail", + "availableAmount": "{amount} tersedia", + "properties": "Properti", + "statistics": "Statistik", + "username": "Nama belakang", + "jwt": "Token web JSON", + "internalTransaction": "Transaksi dalaman", + "coinType": "Jenis koin", + "custom": "Kebiasaan", + "verifyLedgerDepositAddress": "Silakan periksa perangkat Ledger dan verifikasi bahwa alamat penyetoran sesuai dengan yang ditampilkan pada perangkat Ledger" }, "filters": { - "title": "Filters", + "title": "Filter", "showHidden": { - "label": "Show hidden", - "yes": "Yes", - "no": "No" + "label": "Tampilkan tersembunyi", + "yes": "Ya", + "no": "TIDAK" }, "showRejected": { - "label": "Show rejected", - "yes": "Yes", - "no": "No" + "label": "Pertunjukan ditolak", + "yes": "Ya", + "no": "TIDAK" }, "showValueless": { - "label": "Show valueless", - "yes": "Yes", - "no": "No" + "label": "Tunjukkan tidak berharga", + "yes": "Ya", + "no": "TIDAK" }, "ascDesc": { - "Asc": "Ascending", - "Desc": "Descending" + "Asc": "Naik", + "Desc": "Menurun" }, "assetOrder": { - "label": "Order", - "Name": "Name", - "Amount": "Amount" + "label": "Memesan", + "Name": "Nama", + "Amount": "Jumlah" }, "internalExternal": { - "label": "Internal / External", - "internal": "Internal", - "external": "External" + "label": "Intern eksternal", + "internal": "Intern", + "external": "Luar" }, "verificationStatus": { - "label": "Verification status", - "new": "New", - "skipped": "Skipped verification", - "selfVerified": "Self-verified", - "official": "Official" + "label": "Status verifikasi", + "new": "Baru", + "skipped": "Melewatkan verifikasi", + "selfVerified": "Diverifikasi sendiri", + "official": "Resmi" }, "asset": { - "label": "Assets" + "label": "Aktiva" }, "amount": { - "label": "Amount", - "equal": "is equal to", - "range": "is between", - "greater": "is greater than", - "less": "is less than" + "label": "Jumlah", + "equal": "adalah sama dengan", + "range": "adalah antara", + "greater": "lebih besar dari", + "less": "kurang dari" }, "date": { - "label": "Date", - "equals": "is equal to", - "last": "in the last", - "range": "is between", - "after": "is after", - "afterOrEquals": "is on or after", - "before": "is before", - "Days": "days", - "Months": "months", - "Years": "years" + "label": "Tanggal", + "equals": "adalah sama dengan", + "last": "di yang terakhir", + "range": "adalah antara", + "after": "setelahnya", + "afterOrEquals": "aktif atau setelahnya", + "before": "adalah sebelumnya", + "Days": "hari", + "Months": "bulan", + "Years": "bertahun-tahun" }, "status": { "label": "Status", - "confirmed": "confirmed", - "pending": "pending", - "claimed": "claimed", - "unclaimed": "unclaimed" + "confirmed": "dikonfirmasi", + "pending": "tertunda", + "claimed": "diklaim", + "unclaimed": "tidak diklaim" }, "type": { - "label": "Type", - "basic": "Basic", + "label": "Jenis", + "basic": "Dasar", "nft": "NFT", "alias": "Alias", - "foundry": "Foundry", - "governance": "Governance", - "consolidation": "Consolidation", - "vesting": "Vesting" + "foundry": "Pengecoran", + "governance": "Tata Kelola", + "consolidation": "Konsolidasi", + "vesting": "rompi" }, "direction": { - "label": "Direction", - "incoming": "Incoming", - "outgoing": "Outgoing", - "selfTransaction": "Self transaction" + "label": "Arah", + "incoming": "Masuk", + "outgoing": "Keluar", + "selfTransaction": "Transaksi mandiri" }, "proposalType": { - "label": "Type", - "official": "Official", - "custom": "Custom" + "label": "Jenis", + "official": "Resmi", + "custom": "Kebiasaan" }, "phase": { - "label": "Phase" + "label": "Fase" }, "participated": { - "label": "Participated", - "yes": "Yes", - "no": "No" + "label": "Berpartisipasi", + "yes": "Ya", + "no": "TIDAK" }, "proposalOrder": { - "label": "Order", - "name": "Name", - "phase": "Phase" + "label": "Memesan", + "name": "Nama", + "phase": "Fase" } }, "dates": { @@ -1809,68 +1809,68 @@ "error": "Tidak dapat mengekspor riwayat transaksi untuk {accountAlias}" }, "deepLinkingRequest": { - "receivedWhileLoggedOut": "Please login to initiate the deep link", - "notEnabled": "Deep links are not enabled", - "invalidFormat": "The deep link you followed is invalid", - "invalidAmount": "The amount in deep link is not an integer number {amount}", - "invalidSurplus": "The surplus in deep link is not a number {surplus}", - "surplusNotSupported": "The surplus is only supported for native tokens", + "receivedWhileLoggedOut": "Silakan masuk untuk memulai tautan dalam", + "notEnabled": "Tautan dalam tidak diaktifkan", + "invalidFormat": "Tautan dalam yang Anda ikuti tidak valid", + "invalidAmount": "Jumlah dalam tautan dalam bukan bilangan bulat {amount}", + "invalidSurplus": "Kelebihan deep link bukanlah angka {surplus}", + "surplusNotSupported": "Surplusnya hanya didukung untuk token asli", "governance": { - "unrecognizedOperation": "Unrecognized Governance operation: {operation}" + "unrecognizedOperation": "Operasi Tata Kelola yang Tidak Dikenal: {operation}" }, "wallet": { "send": { - "success": "Payment details added from deep link" + "success": "Detail pembayaran ditambahkan dari tautan dalam" }, - "unrecognizedOperation": "Unrecognized wallet operation: {operation}" + "unrecognizedOperation": "Operasi dompet tidak dikenal: {operation}" } }, "syncing": "Please wait until synchronization is finished to change wallets.", - "transferring": "Please wait until all transactions are completed.", - "participating": "Please wait until all staking/voting transactions are completed to change wallets.", + "transferring": "Mohon tunggu sampai semua transaksi selesai.", + "participating": "Harap tunggu hingga semua transaksi staking/voting selesai untuk mengganti dompet.", "claimed": { - "success": "Transaction claimed", - "error": "Claiming transaction failed" + "success": "Transaksi diklaim", + "error": "Klaim transaksi gagal" }, "hideActivity": { - "success": "Activity was hidden", - "error": "Failed to hide activity" + "success": "Aktivitas disembunyikan", + "error": "Gagal menyembunyikan aktivitas" }, "faucetRequest": { - "success": "Request for tokens sent to the faucet" + "success": "Permintaan token dikirim ke faucet" }, "mintNativeToken": { - "success": "Native token minting transaction sent" + "success": "Transaksi pembuatan token asli terkirim" }, "burnNativeToken": { - "success": "Native token burning transaction sent" + "success": "Transaksi pembakaran token asli terkirim" }, "mintNft": { - "success": "NFT minting transaction sent" + "success": "Transaksi pencetakan NFT terkirim" }, "burnNft": { - "success": "NFT burning transaction sent" + "success": "Transaksi pembakaran NFT terkirim" }, "refreshTokenMetadata": { - "success": "All token metadata has been reset and refreshed" + "success": "Semua metadata token telah disetel ulang dan disegarkan" }, "restoreFromStrongholdBackup": { - "wrongProtocol": "Protocol doesn't match coin type found in Stronghold backup", - "wrongProtocolForClaiming": "You must use an IOTA-based Stronghold backup to claim Shimmer rewards" + "wrongProtocol": "Protokol tidak cocok dengan jenis koin yang ditemukan di cadangan Stronghold", + "wrongProtocolForClaiming": "Anda harus menggunakan cadangan Stronghold berbasis IOTA untuk mengklaim hadiah Shimmer" }, "findShimmerRewards": { - "success": "Successfully found Shimmer rewards", - "error": "An error occurred while searching for rewards" + "success": "Berhasil menemukan hadiah Shimmer", + "error": "Terjadi kesalahan saat mencari hadiah" }, "claimShimmerRewards": { - "success": "Shimmer rewards claimed for {accountAlias}", - "error": "An error occurred while claiming. Try again." + "success": "Hadiah Shimmer diklaim untuk {accountAlias}", + "error": "Terjadi kesalahan saat mengklaim. Coba lagi." }, "vote": { - "success": "Votes successfully cast" + "success": "Suara berhasil diberikan" }, "stopVoting": { - "success": "Voting successfully stopped" + "success": "Pemungutan suara berhasil dihentikan" } }, "error": { @@ -1880,9 +1880,9 @@ "delete": { "nonEmptyAccounts": "Anda harus mentransfer semua saldo sebelum Anda dapat menghapus profil Anda." }, - "type": "Unable to determine the profile type", - "setupType": "Unable to determine the profile setup type", - "chrysalisDevnetStardustError": "You can't access this profile because Chrysalis Devnet is not supported in this version of Firefly. Please use a Chrysalis compatible Firefly version." + "type": "Tidak dapat menentukan jenis profil", + "setupType": "Tidak dapat menentukan jenis pengaturan profil", + "chrysalisDevnetStardustError": "Anda tidak dapat mengakses profil ini karena Chrysalis Devnet tidak didukung di versi Firefly ini. Silakan gunakan versi Firefly yang kompatibel dengan Chrysalis." }, "password": { "doNotMatch": "Kata sandi tidak cocok.", @@ -1900,19 +1900,19 @@ "word": "Satu kata mudah ditebak.", "incorrect": "Kata sandi anda salah.", "length": "Kata sandi akun Anda tidak boleh lebih dari {length, plural, one {# character} other {# characters}}.", - "sameAsOld": "Your new password must be different from your old password." + "sameAsOld": "Kata sandi baru Anda harus berbeda dengan kata sandi lama Anda." }, "pincode": { "length": "Kode pin Anda harus terdiri dari {length, plural, one {# digit} other {# digits}} long.", "match": "PIN tidak sesuai.", "incorrect": "Kata sandi Anda saat ini salah.", - "invalid": "Invalid PIN code." + "invalid": "Kode PIN tidak valid." }, "address": { - "wrongAddressType": "Wrong address type" + "wrongAddressType": "Jenis alamat salah" }, "account": { - "addressNotFound": "The address cannot be found in your account.", + "addressNotFound": "Alamatnya tidak dapat ditemukan di akun Anda.", "length": "Nama dompet Anda tidak dapat lebih panjang dari {length, plural, one {# character} other {# characters}}.", "emptyName": "A profile name must contain at least 1 character.", "notEmpty": "Anda harus mentransfer saldo Anda sebelum menghapus dompet/akun ini.", @@ -1924,68 +1924,68 @@ "index": "Indeks akun Anda harus merupakan sebuah angka antara 0 dan 2,147,483,647.", "page": "Halaman akun Anda harus merupakan angka antara 0 dan 2,147,483,647.", "syncing": "Terjadi kesalahan dalam mensinkronisasi dompet/akun Anda.", - "cannotRemove": "Unable to remove wallet.", - "withBalance": "You must transfer all balances before you can delete this wallet.", - "notLast": "You can only delete your last wallet.", - "notFound": "Unable to find account", - "cannotGetBoundAccount": "Unable to get bound account" + "cannotRemove": "Tidak dapat menghapus dompet.", + "withBalance": "Anda harus mentransfer semua saldo sebelum dapat menghapus dompet ini.", + "notLast": "Anda hanya dapat menghapus dompet terakhir Anda.", + "notFound": "Tidak dapat menemukan akun", + "cannotGetBoundAccount": "Tidak dapat mengikat akun" }, "send": { "addressLength": "Alamat harus terdiri dari {length, plural, one {# character} other {# characters}} long.", "amountTooHigh": "Ini lebih besar dari saldo Anda yang tersedia.", - "amountNoFloat": "Cannot use decimal places with the smallest unit selected", + "amountNoFloat": "Tidak dapat menggunakan tempat desimal dengan satuan terkecil yang dipilih", "amountInvalidFormat": "Jumlah tersebut sepertinya merupakan angka yang tidak valid.", - "amountSmallerThanSubunit": "The amount must be greater than the smallest subunit.", - "tagTooLong": "The tag cannot be longer than 64 bytes.", - "metadataTooLong": "The metadata cannot be longer than 8192 bytes.", + "amountSmallerThanSubunit": "Jumlahnya harus lebih besar dari subunit terkecil.", + "tagTooLong": "Tag tidak boleh lebih panjang dari 64 byte.", + "metadataTooLong": "Metadata tidak boleh lebih panjang dari 8192 byte.", "amountZero": "Jumlah harus lebih besar dari 0.", "wrongAddressPrefix": "Alamat dimulai dengan awalan {prefix}.", "wrongAddressFormat": "Alamat tidak diformat dengan benar.", "invalidAddress": "Alamatnya tidak valid.", - "invalidAssetId": "The asset id is not valid.", - "unknownAsset": "The asset is not known to this account.", + "invalidAssetId": "Id aset tidak valid.", + "unknownAsset": "Asetnya tidak diketahui akun ini.", "insufficientFunds": "Dompet/akun ini tidak mempunyai cukup dana.", - "insufficientFundsStorageDeposit": "Insufficient funds to cover the storage deposit.", - "ongoingTransaction": "If you have ongoing transactions, please wait for their confirmation.", - "cannotClaimTwice": "Output has been already claimed", + "insufficientFundsStorageDeposit": "Dana tidak cukup untuk menutupi simpanan penyimpanan.", + "ongoingTransaction": "Jika Anda memiliki transaksi yang sedang berlangsung, harap tunggu konfirmasinya.", + "cannotClaimTwice": "Output telah diklaim", "noToAccount": "Anda belum memilih akun untuk mengirim dana.", "sendingDust": "Anda tidak dapat mengirim kurang dari 1 Mi.", - "leavingDust": "You cannot leave less than the minimum required storage deposit ({minRequiredStorageDeposit}) on your address.", + "leavingDust": "Anda tidak boleh menyisakan kurang dari setoran penyimpanan minimum yang diperlukan ({minRequiredStorageDeposit}) di alamat Anda.", "cancelled": "Transaksi Anda dibatalkan.", "transaction": "Terjadi kesalahan saat mengirimkan transaksi Anda. Silakan coba lagi nanti.", - "invalidExpirationDateTime": "The chosen expiration date/time is invalid.", - "noInputs": "No inputs found.", - "notEnoughBalance": "Not enough balance.", - "missingTransactionId": "The transaction ID is missing", - "missingTransactionProgressEventPayload": "The transaction progress event payload is missing", - "recipientRequired": "Recipient is required", - "nftRequired": "NFT is required", - "nftNotInHex": "NFT address has to be in HEX format", - "nftNotInPossession": "NFT not in possession", - "reservedTagKeyword": "Unable to use reserved tag keyword" + "invalidExpirationDateTime": "Tanggal/waktu kedaluwarsa yang dipilih tidak valid.", + "noInputs": "Tidak ada masukan yang ditemukan.", + "notEnoughBalance": "Saldo tidak cukup.", + "missingTransactionId": "ID transaksi tidak ada", + "missingTransactionProgressEventPayload": "Payload peristiwa kemajuan transaksi tidak ada", + "recipientRequired": "Penerima diperlukan", + "nftRequired": "NFT diperlukan", + "nftNotInHex": "Alamat NFT harus dalam format HEX", + "nftNotInPossession": "NFT tidak dimiliki", + "reservedTagKeyword": "Tidak dapat menggunakan kata kunci tag khusus" }, "layer2": { - "layer1Recipient": "A layer 2 transaction cannot be sent to a layer 1 account.", - "estimatedGas": "Failed to estimate gas." + "layer1Recipient": "Transaksi lapisan 2 tidak dapat dikirim ke akun lapisan 1.", + "estimatedGas": "Gagal memperkirakan gas." }, "node": { "invalid": "Silakan masukkan URL yang valid.", - "dns": "Unable to find DNS resolution for node", + "dns": "Tidak dapat menemukan resolusi DNS untuk node", "timedOut": "Waktu melakukan sambungan telah habis.", "refused": "Sambungan ditolak.", "handshake": "Tidak dapat menyelesaikan jabat tangan dengan node.", "invalidCertificate": "Tidak dapat terhubung dengan sertifikat tidak valid.", "https": "HTTPS diperlukan; koneksi yang tidak aman melalui HTTP tidak didukung saat ini.", "duplicate": "Node ini telah ditambahkan.", - "noSyncedNode": "No synced node is available.", - "timeNotSynced": "Device time is incorrect, unable to sync node.", + "noSyncedNode": "Tidak ada node yang disinkronkan tersedia.", + "timeNotSynced": "Waktu perangkat salah, tidak dapat menyinkronkan node.", "answer": "Gagal dalam mendapat jawaban dari semua nodes.", "forbidden": "Hubungan node ini terlarang.", "pluginNotAvailable": "Plugin \"{nodePlugin}\" tidak tersedia pada node saat ini.", - "unabledToConnect": "Unable to connect to the node", - "differentNetwork": "The node is located on a different network", - "duplicateNodes": "Unable to add duplicate node", - "noCoinType": "No coin type specified" + "unabledToConnect": "Tidak dapat terhubung ke node", + "differentNetwork": "Node tersebut terletak di jaringan yang berbeda", + "duplicateNodes": "Tidak dapat menambahkan node duplikat", + "noCoinType": "Tidak ada jenis koin yang ditentukan" }, "network": { "mismatch": "ID jaringan untuk node ini adalah \"{networkId}\", tidak cocok dengan jaringan saat ini.", @@ -2000,22 +2000,22 @@ "invalid": "Jalur file cadangan tidak ditentukan.", "destination": "Tujuan cadangan tidak diizinkan.", "mnemonic": "Email ini tidak valid.", - "migrationRequired": "Stronghold migration is required.", + "migrationRequired": "Migrasi benteng diperlukan.", "seedTooShort": "Kata kunci harus sepanjang 81 karakter, tetapi memang demikian {length, plural, one {is #} other {is #}}", "seedCharacters": "Seed hanya boleh mengandung karakter A-Z atau 9", "phraseWordCount": "Harus ada 24 kata dalam frase pemulihan Anda, saat ini ada {length, plural, one {is #} other {are #}}.", "phraseUnrecognizedWord": "Kata \"{word}\" yang tidak dikenal dalam frasa pemulihan Anda", "phraseCaseWord": "Kata \"{word}\" harus menggunakan huruf kecil", - "unableToCopyFile": "Unable to copy Stronghold backup file", - "unableToRestoreForProfileManager": "Unable to restore Stronghold backup for profile manager" + "unableToCopyFile": "Tidak dapat menyalin file cadangan Stronghold", + "unableToRestoreForProfileManager": "Tidak dapat memulihkan cadangan Stronghold untuk manajer profil" }, "ledger": { - "appNotOpen": "You must open the {network} app on your Ledger device.", + "appNotOpen": "Anda harus membuka aplikasi {network} di perangkat Ledger Anda.", "generic": "Terjadi kesalahan saat terhubung ke perangkat Ledger Anda.", "legacyConnected": "Aplikasi yang salah telah terbuka pada perangkat Ledger Anda.", "locked": "Silakan membuka perangkat Ledger Anda dengan memasukkan PIN.", "mnemonicMismatch": "Anda telah terhubung dengan perangkat Ledger yang salah atau mnemoniknya telah diubah.", - "notConnected": "No Ledger device detected.", + "notConnected": "Tidak ada perangkat Ledger yang terdeteksi.", "notFound": "Perangkat Ledger tidak ditemukan.", "otherConnected": "The wrong app is open on your Ledger device.", "generateAddress": "Terjadi kesalahan saat membuat alamat.", @@ -2041,78 +2041,78 @@ "invalidDate": "INVALID DATE", "invalidTime": "INVALID TIME", "shimmerClaiming": { - "missingProfileManager": "Unable to find Shimmer claiming profile manager", - "cannotInitialiseAccount": "Unable to initialize Shimmer claiming account", - "missingAccount": "Unable to find Shimmer claiming account" + "missingProfileManager": "Tidak dapat menemukan Shimmer yang mengklaim pengelola profil", + "cannotInitialiseAccount": "Tidak dapat menginisialisasi akun klaim Shimmer", + "missingAccount": "Tidak dapat menemukan akun klaim Shimmer" }, "walletApiEvent": { - "invalidAccountIndex": "Invalid account index for {eventName} event", - "invalidPayload": "Invalid payload for {eventName} event" + "invalidAccountIndex": "Indeks akun untuk acara {eventName} tidak valid", + "invalidPayload": "Payload tidak valid untuk acara {eventName}" }, "aliasMinting": { - "aliasRequired": "Alias is required", - "aliasNotInPossession": "Alias not in possession" + "aliasRequired": "Alias diperlukan", + "aliasNotInPossession": "Alias tidak dalam penguasaan bola" }, - "noOutputsToConsolidate": "Not enough outputs to consolidate", + "noOutputsToConsolidate": "Output tidak cukup untuk dikonsolidasikan", "eventId": { - "doesNotStartWith0x": "Event ID should start with '0x'", - "insufficientLength": "Event ID should be 66 characters long", - "alreadyRegistered": "Event ID already registered" + "doesNotStartWith0x": "ID Peristiwa harus dimulai dengan '0x'", + "insufficientLength": "ID Peristiwa harus sepanjang 66 karakter", + "alreadyRegistered": "ID Acara sudah terdaftar" }, "nft": { "unsupportedUrl": { - "short": "Url not supported", - "long": "Url schema not supported" + "short": "Url tidak didukung", + "long": "Skema URL tidak didukung" }, "unsupportedFileType": { - "short": "Unsupported media type", - "long": "The media type is not currently supported" + "short": "Jenis media tidak didukung", + "long": "Jenis media saat ini tidak didukung" }, "notMatchingFileTypes": { - "short": "Loading blocked", - "long": "NFT file type does not match the expected media type" + "short": "Memuat diblokir", + "long": "Jenis file NFT tidak cocok dengan jenis media yang diharapkan" }, "notReachable": { - "short": "Not reachable", - "long": "NFT file is not reachable" + "short": "Tidak dapat dijangkau", + "long": "File NFT tidak dapat dijangkau" }, "tooLargeFile": { - "short": "File is too large", - "long": "Loading NFT blocked because the file is too large" + "short": "File terlalu besar", + "long": "Memuat NFT diblokir karena file terlalu besar" }, "downloadTooLong": { - "short": "File took too long to download", - "long": "Loading NFT blocked because the file took too long to download" + "short": "File membutuhkan waktu terlalu lama untuk diunduh", + "long": "Memuat NFT diblokir karena file memerlukan waktu terlalu lama untuk diunduh" }, "corsError": { - "short": "Loading blocked", - "long": "Loading NFT blocked by CORS policy" + "short": "Memuat diblokir", + "long": "Memuat NFT diblokir oleh kebijakan CORS" }, "unsafeToLoad": { - "short": "Unsafe to load", - "long": "An error occurred while checking if the NFT was safe to load" + "short": "Tidak aman untuk dimuat", + "long": "Terjadi kesalahan saat memeriksa apakah NFT aman untuk dimuat" }, "loadingError": { - "short": "Unable to load", - "long": "An error occurred while loading the NFT" + "short": "Tidak bisa memuat", + "long": "Terjadi kesalahan saat memuat NFT" } }, "governance": { "unableToAddProposal": { - "short": "Unable to add proposal", - "long": "Unable to find proposal {proposalId} on the specified node" + "short": "Tidak dapat menambahkan proposal", + "long": "Tidak dapat menemukan proposal {proposalId} pada node yang ditentukan" } } }, "warning": { "transaction": { - "invalidExpirationDateTime": "The chosen expiration date is invalid." + "invalidExpirationDateTime": "Tanggal kedaluwarsa yang dipilih tidak valid." }, "node": { "http": "Menggunakan nodes melalui HTTP membuat lalu lintas tidak terenkripsi dan dapat menimbulkan resiko keamanan." }, "participation": { - "noFunds": "You do not have any IOTA." + "noFunds": "Anda tidak memiliki IOTA." } }, "tooltips": { @@ -2141,72 +2141,72 @@ "bodyDidNotReachMin": "Anda tidak meng-stake cukup IOTA untuk mencapai nilai minimum hadiah untuk {airdrop} ({airdropRewardMin}).", "bodyMinBalanceAirdrop": "Dompet ini tidak memiliki cukup IOTA untuk mencapai nilai hadiah minimum untuk {airdrop}." }, - "optionalInput": "This optional data will be public on the explorer and viewable by everyone.", + "optionalInput": "Data opsional ini akan bersifat publik di penjelajah dan dapat dilihat oleh semua orang.", "transactionDetails": { "minting": { - "storageDeposit": "A refundable token deposit needed to store your transaction on the Tangle.", - "giftedStorageDeposit": "The storage deposit for this transaction was gifted to you. You do not need to refund the deposit.", - "expirationTime": "Claim these funds before the expiration time or they will be returned to the sender.", - "timelockDate": "The sender set a timelock on these funds. You will be able to spend them once the timelock expires.", - "metadata": "An optional data field for storing data persistently on the Tangle.", - "tag": "A short optional data field. Tagging groups of transactions can make them easier to search for." + "storageDeposit": "Deposit token yang dapat dikembalikan diperlukan untuk menyimpan transaksi Anda di Tangle.", + "giftedStorageDeposit": "Deposit penyimpanan untuk transaksi ini diberikan kepada Anda. Anda tidak perlu mengembalikan deposit.", + "expirationTime": "Klaim dana tersebut sebelum masa berlakunya habis atau akan dikembalikan kepada pengirimnya.", + "timelockDate": "Pengirim menetapkan batas waktu pada dana ini. Anda akan dapat membelanjakannya setelah batas waktu berakhir.", + "metadata": "Bidang data opsional untuk menyimpan data secara persisten di Tangle.", + "tag": "Bidang data opsional singkat. Memberi tag pada grup transaksi dapat mempermudah pencariannya." }, "incoming": { - "storageDeposit": "A refundable token deposit needed to store your transaction on the Tangle.", - "giftedStorageDeposit": "The storage deposit for this transaction was gifted to you. You do not need to refund the deposit.", - "expirationTime": "Claim these funds before the expiration time or they will be returned to the sender.", - "timelockDate": "The sender set a timelock on these funds. You will be able to spend them once the timelock expires.", - "metadata": "An optional data field for storing data persistently on the Tangle.", - "tag": "A short optional data field. Tagging groups of transactions can make them easier to search for.", - "gasBudget": "Gas budget is required to conduct a transaction or execute a smart contract function on Shimmer EVM." + "storageDeposit": "Deposit token yang dapat dikembalikan diperlukan untuk menyimpan transaksi Anda di Tangle.", + "giftedStorageDeposit": "Deposit penyimpanan untuk transaksi ini diberikan kepada Anda. Anda tidak perlu mengembalikan deposit.", + "expirationTime": "Klaim dana tersebut sebelum masa berlakunya habis atau akan dikembalikan kepada pengirimnya.", + "timelockDate": "Pengirim menetapkan batas waktu pada dana ini. Anda akan dapat membelanjakannya setelah batas waktu berakhir.", + "metadata": "Bidang data opsional untuk menyimpan data secara persisten di Tangle.", + "tag": "Bidang data opsional singkat. Memberi tag pada grup transaksi dapat mempermudah pencariannya.", + "gasBudget": "Anggaran gas diperlukan untuk melakukan transaksi atau menjalankan fungsi kontrak pintar di Shimmer EVM." }, "outgoing": { - "storageDeposit": "A storage deposit is a refundable deposit needed to store your transaction on the Tangle.", - "giftedStorageDeposit": "The recipient does not need to refund the deposit.", - "expirationTime": "If the recipient does not claim in time your tokens will be returned to you.", - "timelockDate": "You added a timelock to this transaction. The recipient will not be able to spend these funds until the timelock expires.", - "metadata": "An optional data field for storing data persistently on the Tangle.", - "tag": "A short optional data field. Tagging groups of transactions can make them easier to search for.", - "gasBudget": "Gas budget is required to conduct a transaction or execute a smart contract function on Shimmer EVM." + "storageDeposit": "Deposit penyimpanan adalah deposit yang dapat dikembalikan yang diperlukan untuk menyimpan transaksi Anda di Tangle.", + "giftedStorageDeposit": "Penerima tidak perlu mengembalikan deposit.", + "expirationTime": "Jika penerima tidak mengklaim tepat waktu, token Anda akan dikembalikan kepada Anda.", + "timelockDate": "Anda menambahkan timelock ke transaksi ini. Penerima tidak akan dapat membelanjakan dana tersebut hingga batas waktu berakhir.", + "metadata": "Bidang data opsional untuk menyimpan data secara persisten di Tangle.", + "tag": "Bidang data opsional singkat. Memberi tag pada grup transaksi dapat mempermudah pencariannya.", + "gasBudget": "Anggaran gas diperlukan untuk melakukan transaksi atau menjalankan fungsi kontrak pintar di Shimmer EVM." }, "nftMetadata": { - "standard": "The NFT standard e.g. IRC27.", - "type": "The MimeType of the NFT. e.g. image/png.", - "collectionId": "UTXO string of the collection NFT that minted this NFT", - "royalties": "An object containing key-value pairs of addresses that map to payout percentages", - "issuerName": "The name of the creator", - "attributes": "An array of traits and values that define attributes of the NFT" + "standard": "Standar NFT misalnya IRC27.", + "type": "Tipe Mime dari NFT. misalnya gambar/png.", + "collectionId": "Rangkaian UTXO dari koleksi NFT yang mencetak NFT ini", + "royalties": "Objek yang berisi pasangan alamat kunci-nilai yang dipetakan ke persentase pembayaran", + "issuerName": "Nama penciptanya", + "attributes": "Serangkaian sifat dan nilai yang menentukan atribut NFT" } }, "mintNativeToken": { - "decimals": "IRC30 optional parameter: Number of decimals the token uses (divide the token amount by 10^decimals to get its user representation).", - "description": "IRC30 optional parameter: The human-readable description of the token.", - "url": "IRC30 optional parameter: URL pointing to more resources about the token like a website or social media page.", - "logoUrl": "IRC30 optional parameter: URL pointing to an image resource of the token logo." + "decimals": "Parameter opsional IRC30: Jumlah desimal yang digunakan token (bagi jumlah token dengan 10^desimal untuk mendapatkan representasi penggunanya).", + "description": "Parameter opsional IRC30: Deskripsi token yang dapat dibaca manusia.", + "url": "Parameter opsional IRC30: URL yang menunjuk ke lebih banyak sumber daya tentang token seperti situs web atau halaman media sosial.", + "logoUrl": "Parameter opsional IRC30: URL yang menunjuk ke sumber gambar logo token." }, "mintNftForm": { - "collectionId": "Optional parameter: UTXO string of the collection NFT that minted this NFT", - "collectionName": "Optional parameter: The collection's name", - "royalties": "Optional parameter: An object containing key-value pairs of addresses that map to payout percentages", - "issuerName": "Optional parameter: The name of the creator", - "description": "Optional parameter: A description of the NFT", - "attributes": "Optional parameter: An array of traits and values that define attributes of the NFT", - "uri": "To create a URI using custom media, first upload your file to IPFS via a storage service (e.g. https://nft.storage/)", - "quantity": "Optional parameter: The quantity of copies minted with this metadata." + "collectionId": "Parameter opsional: string UTXO dari koleksi NFT yang mencetak NFT ini", + "collectionName": "Parameter opsional: Nama koleksi", + "royalties": "Parameter opsional: Objek berisi pasangan alamat kunci-nilai yang dipetakan ke persentase pembayaran", + "issuerName": "Parameter opsional: Nama pencipta", + "description": "Parameter opsional: Deskripsi NFT", + "attributes": "Parameter opsional: Serangkaian sifat dan nilai yang menentukan atribut NFT", + "uri": "Untuk membuat URI menggunakan media khusus, unggah terlebih dahulu file Anda ke IPFS melalui layanan penyimpanan (misalnya https://nft.storage/)", + "quantity": "Parameter opsional: Jumlah salinan yang dicetak dengan metadata ini." }, "governance": { - "removeProposalWarning": "You must stop voting for this proposal before removing it.", + "removeProposalWarning": "Anda harus berhenti memberikan suara untuk proposal ini sebelum menghapusnya.", "outdatedNode": { - "title": "Outdated node URL", - "body": "The node URL for this proposal is outdated. Please update it to access the latest voting results." + "title": "URL node kedaluwarsa", + "body": "URL node untuk proposal ini sudah usang. Harap perbarui untuk mengakses hasil pemungutan suara terbaru." }, "resultsNotAvailable": { - "title": "Results not available", - "body": "The results are no longer available on this proposal's corresponding node. Please update it to access the results." + "title": "Hasil tidak tersedia", + "body": "Hasilnya tidak lagi tersedia pada node terkait proposal ini. Harap perbarui untuk mengakses hasilnya." } }, "updateStronghold": { - "profileBadge": "Your Stronghold is out of date. Log in to update Stronghold." + "profileBadge": "Benteng Anda sudah ketinggalan zaman. Masuk untuk memperbarui Stronghold." } }, "exports": { @@ -2215,7 +2215,7 @@ "internal": "Internal", "rawValue": "Nilai mentah", "formattedValue": "Nilai terformat", - "date": "Date", + "date": "Tanggal", "time": "Waktu" } }, @@ -2224,7 +2224,7 @@ "warningText": "Anda saat ini menggunakan profil pengembang dan terhubung ke {networkName}" }, "networkIndicator": { - "warningText": "Network performance degraded. Message confirmation may take a bit longer than usual." + "warningText": "Performa jaringan menurun. Konfirmasi pesan mungkin memerlukan waktu lebih lama dari biasanya." } }, "permissions": { @@ -2234,143 +2234,143 @@ } }, "tabs": { - "wallet": "Wallet", - "collectibles": "Collectibles", - "governance": "Governance", - "developer": "Developer", - "tokens": "Tokens", - "activity": "Activity", - "vesting": "Vesting" + "wallet": "Dompet", + "collectibles": "Barang koleksi", + "governance": "Tata Kelola", + "developer": "Pengembang", + "tokens": "Token", + "activity": "Aktivitas", + "vesting": "rompi" }, "pills": { "stake": { - "Pending": "staking for", - "Confirmed": "staked for", - "Conflicting": "failed to stake" + "Pending": "dipertaruhkan untuk", + "Confirmed": "dipertaruhkan untuk", + "Conflicting": "gagal mempertaruhkan" }, "external": { "incoming": { - "Pending": "receiving from", - "Confirmed": "received from", - "Conflicting": "failed to receive" + "Pending": "menerima dari", + "Confirmed": "diterima dari", + "Conflicting": "gagal menerima" }, "outgoing": { - "Pending": "sending to", - "Confirmed": "sent to", - "Conflicting": "failed to send" + "Pending": "mengirim ke", + "Confirmed": "dikirim ke", + "Conflicting": "gagal mengirim" } }, "internal": { "incoming": { - "Pending": "transferring from", - "Confirmed": "transferred from", - "Conflicting": "failed to transfer" + "Pending": "mentransfer dari", + "Confirmed": "ditransfer dari", + "Conflicting": "gagal ditransfer" }, "outgoing": { - "Pending": "transferring to", - "Confirmed": "transferred to", - "Conflicting": "failed to transfer" + "Pending": "mentransfer ke", + "Confirmed": "ditransfer ke", + "Conflicting": "gagal ditransfer" }, "selfTransaction": { - "Pending": "transferring to", - "Confirmed": "transferred to", - "Conflicting": "failed to transfer" + "Pending": "mentransfer ke", + "Confirmed": "ditransfer ke", + "Conflicting": "gagal ditransfer" } }, "mint": { - "Pending": "minting", - "Confirmed": "minted", - "Conflicting": "failed to mint" + "Pending": "pencetakan", + "Confirmed": "dicetak", + "Conflicting": "gagal mencetak" }, "burn": { - "Pending": "burning", - "Confirmed": "burned", - "Conflicting": "failed to burn" + "Pending": "pembakaran", + "Confirmed": "dibakar", + "Conflicting": "gagal terbakar" }, "consolidation": { - "Pending": "Consolidating outputs", - "Confirmed": "Outputs consolidated", - "Conflicting": "failed to consolidate outputs" + "Pending": "Mengkonsolidasikan keluaran", + "Confirmed": "Output dikonsolidasikan", + "Conflicting": "gagal mengkonsolidasikan output" }, "migrate": { - "Pending": "migrating for", - "Confirmed": "migrated for", - "Conflicting": "failed to migrate" + "Pending": "bermigrasi untuk", + "Confirmed": "bermigrasi untuk", + "Conflicting": "gagal bermigrasi" }, "asyncStatus": { - "unclaimed": "unclaimed", - "claimed": "claimed", - "expired": "expired" + "unclaimed": "tidak diklaim", + "claimed": "diklaim", + "expired": "kedaluwarsa" }, "governance": { "increaseVotingPower": { - "Pending": "increasing voting power", - "Confirmed": "increased voting power", - "Conflicting": "failed to increased voting power" + "Pending": "meningkatkan hak suara", + "Confirmed": "peningkatan hak suara", + "Conflicting": "gagal meningkatkan hak suara" }, "decreaseVotingPower": { - "Pending": "decreasing voting power", - "Confirmed": "decreased voting power", - "Conflicting": "failed to decreased voting power" + "Pending": "berkurangnya hak suara", + "Confirmed": "berkurangnya hak suara", + "Conflicting": "gagal menurunkan hak suara" }, "startVoting": { - "Pending": "voting for", - "Confirmed": "voted for", - "Conflicting": "failed to vote for" + "Pending": "memilih", + "Confirmed": "memilih", + "Conflicting": "gagal memilih" }, "stopVoting": { - "Pending": "stopping voting for", - "Confirmed": "stopped voting for", - "Conflicting": "failed to stopped voting for" + "Pending": "berhenti memberikan suara untuk", + "Confirmed": "berhenti memberikan suaranya", + "Conflicting": "gagal menghentikan pemungutan suara" }, "changedVote": { - "Pending": "changing vote for", - "Confirmed": "changed vote for", - "Conflicting": "failed to change vote for" + "Pending": "mengubah suara untuk", + "Confirmed": "mengubah suara untuk", + "Conflicting": "gagal mengubah suara" }, "revote": { - "Pending": "revoting", - "Confirmed": "revote", - "Conflicting": "failed to revote" + "Pending": "melakukan pemungutan suara ulang", + "Confirmed": "melakukan pemungutan suara ulang", + "Conflicting": "gagal melakukan pemungutan suara ulang" }, "proposalStatus": { - "upcoming": "Announcement", - "commencing": "Voting open", - "holding": "Counting", - "ended": "Closed", - "nodeOutdated": "Outdated node URL", - "resultsNotAvailable": "Results not available" + "upcoming": "Pengumuman", + "commencing": "Pemungutan suara terbuka", + "holding": "Perhitungan", + "ended": "Tertutup", + "nodeOutdated": "URL node kedaluwarsa", + "resultsNotAvailable": "Hasil tidak tersedia" } }, "alias": { "creation": { - "Pending": "creating alias", - "Confirmed": "alias created", - "Failed": "Failed to create alias" + "Pending": "membuat alias", + "Confirmed": "alias dibuat", + "Failed": "Gagal membuat alias" } }, "networkHealth": { - "down": "Down", - "degraded": "Degraded", - "operational": "Operational", - "disconnected": "Disconnected" + "down": "Turun", + "degraded": "Terdegradasi", + "operational": "Operasional", + "disconnected": "Terputus" }, - "locked": "locked", - "smartContract": "smart contract", + "locked": "terkunci", + "smartContract": "kontrak pintar", "vesting": { - "unlocked": "Unlocked", - "locked": "Locked" + "unlocked": "Tidak terkunci", + "locked": "Terkunci" } }, "menus": { "expirationTimePicker": { - "none": "No expiration time", - "1hour": "In 1 hour", - "1day": "In 1 day", - "1week": "In 1 week", + "none": "Tidak ada waktu kedaluwarsa", + "1hour": "Dalam 1 jam", + "1day": "Dalam 1 hari", + "1week": "Dalam 1 minggu", "customDate": { - "title": "Custom date", - "subtitle": "Set custom expiry date" + "title": "Tanggal khusus", + "subtitle": "Tetapkan tanggal kedaluwarsa khusus" } } } diff --git a/packages/shared/locales/pl.json b/packages/shared/locales/pl.json index f042ed080e0..a78e46672ea 100644 --- a/packages/shared/locales/pl.json +++ b/packages/shared/locales/pl.json @@ -1598,7 +1598,7 @@ "giftedStorageDeposit": "Podarowany depozyt magazynowy", "storageDepositPerNft": "Depozyt magazynowy na NFT", "totalStorageDeposit": "Całkowity depozyt magazynowy", - "expirationTime": "Czas wygaśnięcia", + "expirationTime": "Termin ważności", "timelockDate": "Blokada czasowa", "claimedTime": "Odebrano", "nftAddress": "Adres NFT", @@ -1953,7 +1953,7 @@ "leavingDust": "Nie możesz pozostawić na swoim adresie mniej niż ({minRequiredStorageDeposit}). Jest to minimalny wymagany depozyt magazynowy.", "cancelled": "Transakcja została anulowana.", "transaction": "Wystąpił błąd podczas wysyłania transakcji. Spróbuj ponownie.", - "invalidExpirationDateTime": "Wybrany czas wygaśnięcia jest nieprawidłowy.", + "invalidExpirationDateTime": "Wybrany termin ważności jest nieprawidłowy.", "noInputs": "Nie znaleziono danych wejściowych.", "notEnoughBalance": "Brak wystarczających środków.", "missingTransactionId": "Brak ID transakcji", @@ -1966,7 +1966,7 @@ }, "layer2": { "layer1Recipient": "Transakcja layer 2 nie może zostać wysłana do konta layer 1.", - "estimatedGas": "Failed to estimate gas." + "estimatedGas": "Nie udało się oszacować opłaty gas." }, "node": { "invalid": "Wprowadź prawidłowy adres URL.", @@ -2106,7 +2106,7 @@ }, "warning": { "transaction": { - "invalidExpirationDateTime": "Wybrana data wygaśnięcia jest nieprawidłowa." + "invalidExpirationDateTime": "Wybrany termin ważności jest nieprawidłowy." }, "node": { "http": "Korzystanie z węzłów przez HTTP powoduje, że ruch jest niezaszyfrowany i może stanowić zagrożenie dla bezpieczeństwa." @@ -2364,13 +2364,13 @@ }, "menus": { "expirationTimePicker": { - "none": "Brak czasu wygaśnięcia", + "none": "Brak terminu ważności", "1hour": "Za godzinę", "1day": "Za 1 dzień", "1week": "Za tydzień", "customDate": { "title": "Niestandardowa data", - "subtitle": "Ustaw własny czas wygaśnięcia" + "subtitle": "Ustaw własny termin ważności" } } } From 6e0907cc9476ec2674a166e2e3441464aa548f60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bego=C3=B1a=20=C3=81lvarez=20de=20la=20Cruz?= Date: Wed, 13 Dec 2023 14:00:33 +0100 Subject: [PATCH 48/48] fix: remove use of prepareConsolidateOutputs in vesting because it locks outputs (#7784) --- .../desktop/views/dashboard/vesting/Vesting.svelte | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/packages/desktop/views/dashboard/vesting/Vesting.svelte b/packages/desktop/views/dashboard/vesting/Vesting.svelte index c63bcdf71f8..f85b0655144 100644 --- a/packages/desktop/views/dashboard/vesting/Vesting.svelte +++ b/packages/desktop/views/dashboard/vesting/Vesting.svelte @@ -41,12 +41,10 @@ let modal: Modal let timeUntilNextPayout = DEFAULT_EMPTY_VALUE_STRING let minRequiredStorageDeposit: number | null - let hasOutputsToConsolidate = false $: ({ baseCoin } = $selectedAccountAssets[$activeProfile?.network?.id]) $: hasTransactionInProgress = $selectedAccount?.isTransferring || $selectedAccount.hasConsolidatingOutputsTransactionInProgress - $: $selectedAccount, areOutputsReadyForConsolidation() $: vestingOverview = [ { title: localize('views.vesting.overview.unlocked'), @@ -71,20 +69,12 @@ $selectedAccountVestingUnclaimedFunds > 0 && !hasTransactionInProgress && minRequiredStorageDeposit !== null && - $selectedAccount?.balances?.baseCoin?.available > minRequiredStorageDeposit && - hasOutputsToConsolidate + $selectedAccount?.balances?.baseCoin?.available > minRequiredStorageDeposit onMount(() => { getMinRequiredStorageDeposit() }) - function areOutputsReadyForConsolidation(): void { - $selectedAccount - .prepareConsolidateOutputs({ force: false, outputThreshold: 2 }) - .then(() => (hasOutputsToConsolidate = true)) - .catch(() => (hasOutputsToConsolidate = false)) - } - function getMinRequiredStorageDeposit() { getRequiredStorageDepositForMinimalBasicOutput() .then((deposit) => (minRequiredStorageDeposit = deposit))