mirror of
https://github.com/Qortal/qortal-ui.git
synced 2025-02-11 17:55:51 +00:00
Merge branch 'master' into feature/new-editor-file-import
This commit is contained in:
commit
5df8f227f8
@ -29,7 +29,7 @@ Easiest way to install the lastest required packages on Linux is via nvm.
|
||||
``` nvm ls-remote ``` (Fetch list of available versions) <br/>
|
||||
``` nvm install v16.17.1 ``` (LTS: Gallium supported by Electron) <br/>
|
||||
``` npm --location=global install yarn@1.22.19 ``` <br/>
|
||||
``` npm --location=global install npm@9.2.0 ``` <br/>
|
||||
``` npm --location=global install npm@9.3.1 ``` <br/>
|
||||
|
||||
On BSD do a ``` pkg_add node followed by npm install -g yarn ```
|
||||
|
||||
|
BIN
img/badges/Level-8.png
Normal file
BIN
img/badges/Level-8.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.6 KiB |
BIN
img/badges/level-10.png
Normal file
BIN
img/badges/level-10.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.3 KiB |
BIN
img/badges/level-6.png
Normal file
BIN
img/badges/level-6.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.6 KiB |
BIN
img/badges/level-7.png
Normal file
BIN
img/badges/level-7.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.9 KiB |
BIN
img/badges/level-9.png
Normal file
BIN
img/badges/level-9.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.2 KiB |
@ -10,7 +10,7 @@
|
||||
"electron_translate_7": "Актуализацията е готова за инсталиране",
|
||||
"electron_translate_8": "Беше изтеглена нова версия на Qortal UI.",
|
||||
"electron_translate_9": "Щракнете върху ИНСТАЛИРАНЕ СЕГА, за да приложите актуализация, МОЖЕ БИ ПО-КЪСНО, за да не актуализирате потребителския интерфейс.",
|
||||
"electron_translate_10": "Грешка при актуализиране...",
|
||||
"electron_translate_10": "Временна неуспешна актуализация, ще опитаме отново по-късно",
|
||||
"electron_translate_11": "ИЗТЕГЛЕТЕ АКТУАЛИЗАЦИЯТА",
|
||||
"electron_translate_12": "Ще бъде изтеглено ⌛️ във фонов режим!"
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
"electron_translate_7": "Update zur Installation bereit",
|
||||
"electron_translate_8": "Eine neue Qortal-UI-Version wurde heruntergeladen.",
|
||||
"electron_translate_9": "Klicken Sie auf JETZT INSTALLIEREN, um das Update anzuwenden, VIELLEICHT SPÄTER, um die Benutzeroberfläche nicht zu aktualisieren.",
|
||||
"electron_translate_10": "Fehler beim Aktualisieren...",
|
||||
"electron_translate_10": "Vorübergehender Aktualisierungsfehler, wir versuchen es später erneut",
|
||||
"electron_translate_11": "UPDATE HERUNTERLADEN",
|
||||
"electron_translate_12": "Das Update wird im Hintergrund heruntergeladen ⌛️!"
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
"electron_translate_7": "Update ready to install",
|
||||
"electron_translate_8": "A new Qortal UI version has been downloaded.",
|
||||
"electron_translate_9": "Click INSTALL NOW to apply update, MAYBE LATER to not update the UI.",
|
||||
"electron_translate_10": "Error while Updating...",
|
||||
"electron_translate_10": "Temporary update failure, will try again later",
|
||||
"electron_translate_11": "DOWNLOAD UPDATE",
|
||||
"electron_translate_12": "It will be downloaded ⌛️ in the background!"
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
"electron_translate_7": "Actualización lista para instalar",
|
||||
"electron_translate_8": "Se ha descargado una nueva versión de la interfaz de usuario de Qortal.",
|
||||
"electron_translate_9": "Haz clic en INSTALAR AHORA para aplicar la actualización, QUIZÁS MÁS TARDE para no actualizar la interfaz de usuario".,
|
||||
"electron_translate_10": "Error al actualizar...",
|
||||
"electron_translate_10": "Error de actualización temporal, lo intentaré más tarde",
|
||||
"electron_translate_11": "DESCARGAR ACTUALIZACIÓN",
|
||||
"electron_translate_12": "¡Se descargará ⌛️ en segundo plano!"
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
"electron_translate_7": "Mise à jour prête à installer",
|
||||
"electron_translate_8": "Une nouvelle version de l'interface utilisateur de Qortal a été téléchargée.",
|
||||
"electron_translate_9": "Cliquez sur INSTALLER MAINTENANT pour appliquer la mise à jour, PEUT-ÊTRE PLUS TARD pour ne pas mettre à jour l'interface utilisateur.",
|
||||
"electron_translate_10": "Erreur lors de la mise à jour...",
|
||||
"electron_translate_10": "Échec de la mise à jour temporaire, réessayera plus tard",
|
||||
"electron_translate_11": "TÉLÉCHARGER LA MISE À JOUR",
|
||||
"electron_translate_12": "Il sera téléchargé ⌛️ en arrière-plan !"
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
"electron_translate_7": "Aggiornamento pronto per l'installazione",
|
||||
"electron_translate_8": "È stata scaricata una nuova versione dell'interfaccia utente di Qortal.",
|
||||
"electron_translate_9": "Fai clic su INSTALLA ORA per applicare l'aggiornamento, FORSE DOPO per non aggiornare l'interfaccia utente.",
|
||||
"electron_translate_10": "Errore durante l'aggiornamento...",
|
||||
"electron_translate_10": "Errore di aggiornamento temporaneo, riproverà più tardi",
|
||||
"electron_translate_11": "SCARICA AGGIORNAMENTO",
|
||||
"electron_translate_12": "Verrà scaricato ⌛️ in background!"
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
"electron_translate_7": "업데이트 설치 준비 완료",
|
||||
"electron_translate_8": "새로운 Qortal UI 버전이 다운로드되었습니다.",
|
||||
"electron_translate_9": "업데이트를 적용하려면 지금 설치를 클릭하고 UI를 업데이트하지 않으려면 나중에 할 수도 있습니다.",
|
||||
"electron_translate_10": "업데이트 중 오류...",
|
||||
"electron_translate_10": "임시 업데이트 실패, 나중에 다시 시도합니다.",
|
||||
"electron_translate_11": "업데이트 다운로드",
|
||||
"electron_translate_12": "백그라운드에서 ⌛️ 다운로드됩니다!"
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
"electron_translate_7": "Update klaar om te installeren",
|
||||
"electron_translate_8": "Er is een nieuwe Qortal UI-versie gedownload.",
|
||||
"electron_translate_9": "Klik op NU INSTALLEREN om de update toe te passen, MISSCHIEN LATER om de gebruikersinterface niet bij te werken.",
|
||||
"electron_translate_10": "Fout tijdens updaten...",
|
||||
"electron_translate_10": "Tijdelijke update mislukt, zal het later opnieuw proberen",
|
||||
"electron_translate_11": "UPDATE DOWNLOADEN",
|
||||
"electron_translate_12": "Het wordt ⌛️ op de achtergrond gedownload!"
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
"electron_translate_7": "Atualização pronta para instalar",
|
||||
"electron_translate_8": "Uma nova versão Qortal UI foi baixada.",
|
||||
"electron_translate_9": "Clique em INSTALAR AGORA para aplicar a atualização, TALVEZ MAIS TARDE para não atualizar a UI.",
|
||||
"electron_translate_10": "Erro ao atualizar...",
|
||||
"electron_translate_10": "Falha de atualização temporária, tentará novamente mais tarde",
|
||||
"electron_translate_11": "BAIXAR ATUALIZAÇÃO",
|
||||
"electron_translate_12": "Será baixado ⌛️ em segundo plano!"
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
"electron_translate_7": "Atualização pronta para instalar",
|
||||
"electron_translate_8": "Uma nova versão Qortal UI foi baixada.",
|
||||
"electron_translate_9": "Clique em INSTALAR AGORA para aplicar a atualização, TALVEZ MAIS TARDE para não atualizar a UI.",
|
||||
"electron_translate_10": "Erro ao atualizar...",
|
||||
"electron_translate_10": "Falha de atualização temporária, tentará novamente mais tarde",
|
||||
"electron_translate_11": "BAIXAR ATUALIZAÇÃO",
|
||||
"electron_translate_12": "Será baixado ⌛️ em segundo plano!"
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
"electron_translate_7": "Обновление готово к установке",
|
||||
"electron_translate_8": "Загружена новая версия пользовательского интерфейса Qortal.",
|
||||
"electron_translate_9": "Нажмите УСТАНОВИТЬ СЕЙЧАС, чтобы применить обновление, МОЖЕТ БЫТЬ ПОЗЖЕ, чтобы не обновлять пользовательский интерфейс.",
|
||||
"electron_translate_10": "Ошибка при обновлении...",
|
||||
"electron_translate_10": "Временная ошибка обновления, повторите попытку позже",
|
||||
"electron_translate_11": "СКАЧАТЬ ОБНОВЛЕНИЕ",
|
||||
"electron_translate_12": "Он будет загружен ⌛️ в фоновом режиме!"
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
"electron_translate_7": "Güncelleme yüklenmeye hazır",
|
||||
"electron_translate_8": "Yeni bir Qortal UI sürümü indirildi.",
|
||||
"electron_translate_9": "Güncellemeyi uygulamak için ŞİMDİ YÜKLE'ye tıklayın, kullanıcı arayüzünü güncellememek için MAYBE SONRA tıklayın.",
|
||||
"electron_translate_10": "Güncelleme Sırasında Hata...",
|
||||
"electron_translate_10": "Geçici güncelleme hatası, daha sonra tekrar denenecek",
|
||||
"electron_translate_11": "GÜNCELLEMEYİ İNDİRİN",
|
||||
"electron_translate_12": "Arka planda ⌛️ indirilecek!"
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
"electron_translate_7": "Update ready to install",
|
||||
"electron_translate_8": "A new Qortal UI version has been downloaded.",
|
||||
"electron_translate_9": "Click INSTALL NOW to apply update, MAYBE LATER to not update the UI.",
|
||||
"electron_translate_10": "Error while Updating...",
|
||||
"electron_translate_10": "Temporary update failure, will try again later",
|
||||
"electron_translate_11": "DOWNLOAD UPDATE",
|
||||
"electron_translate_12": "It will be downloaded ⌛️ in the background!"
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
"electron_translate_7": "更新准备安装",
|
||||
"electron_translate_8": "已下载新的 Qortal UI 版本。",
|
||||
"electron_translate_9": "点击现在安装应用更新,可能稍后不更新用户界面。",
|
||||
"electron_translate_10": "更新时出错...",
|
||||
"electron_translate_10": "暂时更新失败,稍后再试",
|
||||
"electron_translate_11": "下载更新",
|
||||
"electron_translate_12": "它将在后台下载 ⌛️!"
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
"electron_translate_7": "更新準備安裝",
|
||||
"electron_translate_8": "已下載新的 Qortal UI 版本。",
|
||||
"electron_translate_9": "點擊現在安裝應用更新,可能稍後不更新用戶界面。",
|
||||
"electron_translate_10": "更新時出錯...",
|
||||
"electron_translate_10": "暫時更新失敗,稍後再試",
|
||||
"electron_translate_11": "下載更新",
|
||||
"electron_translate_12": "它將在後台下載 ⌛️!"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "qortal-ui",
|
||||
"version": "2.2.4",
|
||||
"version": "3.0.1",
|
||||
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
|
||||
"keywords": [
|
||||
"QORT",
|
||||
@ -37,12 +37,9 @@
|
||||
"os-locale": "3.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@electron/notarize": "1.2.3",
|
||||
"electron": "22.0.0",
|
||||
"electron": "22.2.0",
|
||||
"electron-builder": "23.6.0",
|
||||
"electron-packager": "17.1.1",
|
||||
"eslint-plugin-lit": "1.8.0",
|
||||
"eslint-plugin-wc": "1.4.0",
|
||||
"shelljs": "0.8.5"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -9,7 +9,8 @@ html {
|
||||
--copybutton: #707584;
|
||||
--chat-group: #080808;
|
||||
--chat-bubble: #9f9f9f0a;
|
||||
--chat-bubble-bg: #f3f3f3;
|
||||
--chat-bubble-bg: #e6e6e6;
|
||||
--chat-bubble-myBg: #d1ddf2;
|
||||
--chat-bubble-msg-color: #080808;
|
||||
--reaction-bubble-outline: #6b6969;
|
||||
--chat-menu-bg: #ffffff;
|
||||
@ -28,6 +29,7 @@ html {
|
||||
--relaynodetxt: #646464;
|
||||
--menuhover: #eeeeee;
|
||||
--menuactive: #ebebeb;
|
||||
--menuactivergb: 235, 235, 235;
|
||||
--mainmenutext: #080808;
|
||||
--mainmenutexthover: #080808;
|
||||
--switchbackground: #666666;
|
||||
@ -50,6 +52,7 @@ html {
|
||||
--lightChatHeadHover: #1e1f201a;
|
||||
--group-header: #929292;
|
||||
--group-drop-shadow: rgb(17 17 26 / 10%) 0px 1px 0px;
|
||||
--reactions-tooltip-bg: #ffffff;
|
||||
}
|
||||
|
||||
html[theme="dark"] {
|
||||
@ -64,6 +67,7 @@ html[theme="dark"] {
|
||||
--chat-group: #ffffff;
|
||||
--chat-bubble: #9694941a;
|
||||
--chat-bubble-bg: #2d3749;
|
||||
--chat-bubble-myBg: #40444d;
|
||||
--chat-bubble-msg-color: #ffffff;
|
||||
--reaction-bubble-outline: #ffffff;
|
||||
--chat-menu-bg: #32394c;
|
||||
@ -82,6 +86,7 @@ html[theme="dark"] {
|
||||
--relaynodetxt: #d4d4d4;
|
||||
--menuhover: #008fd5;
|
||||
--menuactive: #008fd5;
|
||||
--menuactivergb: 0, 143, 213;
|
||||
--mainmenutext: #008fd5;
|
||||
--mainmenutexthover: #0f1a2e;
|
||||
--switchbackground: #eeeeee;
|
||||
@ -103,5 +108,6 @@ html[theme="dark"] {
|
||||
--chatHeadTextActive: #ffffff;
|
||||
--lightChatHeadHover: #e0e1e31a;
|
||||
--group-header: #c8c8c8;
|
||||
--group-drop-shadow: rgb(191 191 191 / 32%) 0px 1px 0px
|
||||
--group-drop-shadow: rgb(191 191 191 / 32%) 0px 1px 0px;
|
||||
--reactions-tooltip-bg: #161515;
|
||||
}
|
@ -532,8 +532,55 @@
|
||||
"cchange22": "Lade Nachrichten...",
|
||||
"cchange23": "Nachricht kann nicht entschlüsselt werden!",
|
||||
"cchange24": "Die maximale Zeichenzahl pro Nachricht beträgt 255",
|
||||
"cchange25":"Ihr Guthaben liegt unter 4,20 QORT",
|
||||
"cchange26":"Aus Gründen der Spam-Bekämpfung benötigen Konten mit einem Qort-Guthaben von weniger als 4,20 viel Zeit, um Nachrichten in Q-Chat zu SENDEN. Wenn Sie die Sendegeschwindigkeit für Q-Chat-Nachrichten sofort erhöhen möchten, besorgen Sie sich über 4,20 QORT an Ihre Adresse. Dies kann mit Trades im Handelsportal oder über einen anderen Qortian erfolgen, der Ihnen die QORT gibt. Sobald Sie über 4,20 QORT in Ihrem Konto haben, werden Q-Chat-Nachrichten sofort gesendet und dieser Dialog wird nicht mehr angezeigt Show. Vielen Dank für Ihr Verständnis für diese notwendige Spam-Präventionsmethode, und wir hoffen, dass Ihnen Qortal gefällt!"
|
||||
"cchange25": "Nachricht bearbeiten",
|
||||
"cchange26": "Dateigröße überschreitet 0,5 MB",
|
||||
"cchange27": "Zum Senden von Bildern ist ein registrierter Name erforderlich",
|
||||
"cchange28": "Diese Datei ist kein Bild",
|
||||
"cchange29": "Die maximale Nachrichtengröße beträgt 1000 Byte",
|
||||
"cchange30": "Bild wird hochgeladen. Dies kann bis zu einer Minute dauern.",
|
||||
"cchange31": "Bild wird gelöscht. Dies kann bis zu einer Minute dauern.",
|
||||
"cchange33": "Abbrechen",
|
||||
"cchange34": "Diese Chatnachricht verwendet eine ältere Nachrichtenversion und kann diese Funktion nicht verwenden.",
|
||||
"cchange35": "Fehler beim Abrufen des Benutzernamens. Bitte versuchen Sie es erneut!",
|
||||
"cchange36": "Suchergebnisse",
|
||||
"cchange37": "Keine Ergebnisse gefunden",
|
||||
"cchange38": "Benutzer verifiziert",
|
||||
"cchange39": "Kann keine verschlüsselte Nachricht an diesen Benutzer senden, da er seinen öffentlichen Schlüssel nicht in der Kette hat.",
|
||||
"cchange40": "BILD (zum Anzeigen klicken)",
|
||||
"cchange41": "Ihr Guthaben liegt unter 4,20 QORT",
|
||||
"cchange42": "Aus Gründen der Spam-Bekämpfung benötigen Konten mit einem Qort-Guthaben von weniger als 4,20 viel Zeit, um Nachrichten in Q-Chat zu SENDEN. Wenn Sie die Sendegeschwindigkeit für Q-Chat-Nachrichten sofort erhöhen möchten, besorgen Sie sich über 4,20 QORT an Ihre Adresse. Dies kann mit Trades im Handelsportal oder über einen anderen Qortian erfolgen, der Ihnen die QORT gibt. Sobald Sie über 4,20 QORT in Ihrem Konto haben, werden Q-Chat-Nachrichten sofort gesendet und dieser Dialog wird nicht mehr angezeigt Show. Vielen Dank für Ihr Verständnis für diese notwendige Spam-Präventionsmethode, und wir hoffen, dass Ihnen Qortal gefällt!",
|
||||
"cchange43": "Tipp QORT an",
|
||||
"cchange44": "NACHRICHT SENDEN",
|
||||
"cchange45": "TIP BENUTZER",
|
||||
"cchange46": "Trinkgeldbetrag",
|
||||
"cchange47": "Verfügbares Guthaben",
|
||||
"cchange48": "QORT-Guthaben konnte nicht abgerufen werden. Versuchen Sie es erneut!",
|
||||
"cchange49": "Aktuelle statische Gebühr",
|
||||
"cchange50": "Senden",
|
||||
"cchange51": "Unzureichende Mittel!",
|
||||
"cchange52": "Ungültiger Betrag!",
|
||||
"cchange53": "Empfänger darf nicht leer sein!",
|
||||
"cchange54": "Ungültiger Empfänger!",
|
||||
"cchange55": "Transaktion erfolgreich!",
|
||||
"cchange56": "Transaktion fehlgeschlagen!",
|
||||
"cchange57": "Benutzerinfo",
|
||||
"cchange58": "NACHRICHT SENDEN",
|
||||
"cchange59": "TIP BENUTZER",
|
||||
"cchange60": "Gruppeneinladungen ausstehend",
|
||||
"cchange61": "Fehler beim Abrufen von Gruppeneinladungen. Bitte versuchen Sie es erneut!",
|
||||
"cchange62": "Falscher Benutzername und falsche Adresse eingegeben! Bitte versuchen Sie es erneut!",
|
||||
"cchange63": "Eingabe aktiviert",
|
||||
"cchange64": "Eingabe deaktiviert",
|
||||
"cchange65": "Bitte geben Sie einen Empfänger ein",
|
||||
"cchange66": "Beantwortete Nachricht kann nicht abgerufen werden. Nachricht ist zu alt.",
|
||||
"cchange68": "bearbeitet",
|
||||
"cchange69": "Zeige Bilder automatisch",
|
||||
"cchange70": "Dieser Bildtyp wird nicht unterstützt",
|
||||
"cchange71": "und",
|
||||
"cchange72": "andere",
|
||||
"cchange73": "s",
|
||||
"cchange74": "reagiert mit",
|
||||
"cchange90": "Keine Nachrichten"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "Willkommen zu Q-Chat",
|
||||
@ -556,7 +603,15 @@
|
||||
"bcchange7": "MENÜ",
|
||||
"bcchange8": "Adresse Kopieren",
|
||||
"bcchange9": "Private Nachricht",
|
||||
"bcchange10":"Mehr"
|
||||
"bcchange10": "Mehr",
|
||||
"bcchange11": "Antworten",
|
||||
"bcchange12": "Bearbeiten",
|
||||
"bcchange13": "Reaktion",
|
||||
"bcchange14": "Weiterleiten",
|
||||
"bcchange15": "Nachricht weitergeleitet",
|
||||
"bcchange16": "Empfänger auswählen oder darunter suchen",
|
||||
"bcchange17": "WEITERGELEITET",
|
||||
"bcchange18": "Tipp Benutzer"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Qortal-Gruppen",
|
||||
@ -616,7 +671,8 @@
|
||||
"gchange55": "Private Gruppe suchen",
|
||||
"gchange56": "Zu suchender Gruppenname",
|
||||
"gchange57": "Privater Gruppenname nicht gefunden",
|
||||
"gchange58":"Beachten Sie, dass der Gruppenname genau übereinstimmen muss."
|
||||
"gchange58": "Beachten Sie, dass der Gruppenname genau übereinstimmen muss.",
|
||||
"gchange59": "Ticker ein-/ausblenden"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "Rätsel",
|
||||
@ -814,5 +870,23 @@
|
||||
"mg59": "Beitrittsanfrage abbrechen erfolgreich akzeptiert",
|
||||
"mg60": "Sind Sie sicher, dass Sie die Beitrittsanfrage dieses Mitglieds abbrechen möchten?",
|
||||
"mg61": "Beim Drücken auf Bestätigen wird die Anfrage zum Abbrechen des Beitritts gesendet!"
|
||||
},
|
||||
"info": {
|
||||
"inf1": "Informationen zum Handelsportal",
|
||||
"inf2": "Informationen zum Handelsportal schließen",
|
||||
"inf3": "Dies ist ein Markt zum KAUFEN von QORT",
|
||||
"inf4": "- 'Offenmarktverkäufe' sind QORT-VERKAUFSAUFTRÄGE.",
|
||||
"inf5": "Sie können jeweils nur EINE Bestellung kaufen, klicken Sie einfach auf eine Bestellung, mit der Sie kaufen möchten",
|
||||
"inf6": "und es wird das Kästchen „QORT KAUFEN' mit den Details ausfüllen, dann klicke auf KAUFEN.",
|
||||
"inf7": "Informationen zum automatischen Kauf",
|
||||
"inf8": "Automatische Kaufinfo schließen",
|
||||
"inf9": "'Automatischer' Kauf ist eine Funktion, die es ermöglicht, 'Kaufaufträge' auf dem Handelsportal zu platzieren. Diese 'Kaufaufträge' sind nur für die Person sichtbar, die sie aufgegeben hat. Es sind keine 'öffentlichen' Kaufaufträge wie die 'Offenmarktverkäufe' sind und werden NICHT in der Qortal-Blockchain gespeichert. Auto Buy ist eine UI-Funktion und erfordert als solche, dass die UI LÄUFT.",
|
||||
"inf10": "Um eine Autokauf-Bestellung aufzugeben, klicken Sie auf die Schaltfläche 'Autokauf-Bestellung hinzufügen' und füllen Sie das angezeigte Feld aus. Geben Sie den QORT-BETRAG ein, den Sie KAUFEN möchten, und den PREIS, BIS ZU DEM SIE KAUFEN WOLLEN. Einmal die Bestellung aktiv ist, kauft Auto Buy BIS ZU dieser QORT-Menge für Sie zu BIS ZU dem von Ihnen festgelegten Preis (beginnend mit der niedrigsten Bestellung und aufsteigend in den Büchern.)",
|
||||
"inf11": "Lassen Sie einfach Ihre Benutzeroberfläche laufen und Auto Buy erledigt den Rest automatisch!",
|
||||
"inf12": "Sie KÖNNEN andere Plugins in der Benutzeroberfläche durchsuchen (Q-Chat, Brieftaschen usw.), aber Sie KÖNNEN DIE Benutzeroberfläche NICHT SCHLIESSEN, wenn Sie möchten, dass Ihr Autokauf abgeschlossen wird. Lassen Sie die Benutzeroberfläche 'minimiert' in der 'Taskleiste' oder 'Panel' ist in Ordnung, solange die Benutzeroberfläche GEÖFFNET bleibt, wird Auto Buy funktionieren.",
|
||||
"inf13": "Automatisch kaufen",
|
||||
"inf14": "mit",
|
||||
"inf15": "Aktive automatische Kaufaufträge",
|
||||
"inf16": "Automatischer Kauf"
|
||||
}
|
||||
}
|
||||
|
@ -532,8 +532,55 @@
|
||||
"cchange22": "Cargando Mensajes...",
|
||||
"cchange23": "No se puede descifrar el mensaje!",
|
||||
"cchange24": "El máximo de caracteres por mensaje es de 255",
|
||||
"cchange25":"Su saldo es inferior a 4,20 QORT",
|
||||
"cchange26":"Debido a la necesidad de combatir el spam, las cuentas con menos de 4.20 Qort de saldo tardarán mucho tiempo en ENVIAR mensajes en Q-Chat. Si desea aumentar inmediatamente la velocidad de envío de mensajes de Q-Chat, obtenga más de 4.20 QORT a su dirección. Esto se puede hacer con intercambios en el Portal de comercio, o por medio de otro Qortian que le proporcione el QORT. Una vez que tenga más de 4.20 QORT en su cuenta, los mensajes de Q-Chat serán instantáneos y este cuadro de diálogo ya no aparecerá. ¡Gracias por su comprensión de este método de prevención de spam necesario, y esperamos que disfrute de Qortal!"
|
||||
"cchange25": "Editar mensaje",
|
||||
"cchange26": "El tamaño del archivo supera los 0,5 MB",
|
||||
"cchange27": "Se requiere un nombre registrado para enviar imágenes",
|
||||
"cchange28": "Este archivo no es una imagen",
|
||||
"cchange29": "El tamaño máximo del mensaje es de 1000 bytes",
|
||||
"cchange30": "Cargando imagen. Esto puede tardar hasta un minuto.",
|
||||
"cchange31": "Eliminando imagen. Esto puede tardar hasta un minuto.",
|
||||
"cchange33": "Cancelar",
|
||||
"cchange34": "Este mensaje de chat está usando una versión anterior del mensaje y no puede usar esta función.",
|
||||
"cchange35": "Error al intentar recuperar el nombre del usuario. ¡Inténtalo de nuevo!",
|
||||
"cchange36": "Resultados de la búsqueda",
|
||||
"cchange37": "No se encontraron resultados",
|
||||
"cchange38": "Usuario verificado",
|
||||
"cchange39": "No se puede enviar un mensaje encriptado a este usuario porque no tiene su clave pública en la cadena.",
|
||||
"cchange40": "IMAGEN (haga clic para ver)",
|
||||
"cchange41": "Su saldo es inferior a 4,20 QORT",
|
||||
"cchange42": "Debido a la necesidad de combatir el spam, las cuentas con menos de 4.20 Qort de saldo tardarán mucho tiempo en ENVIAR mensajes en Q-Chat. Si desea aumentar inmediatamente la velocidad de envío de mensajes de Q-Chat, obtenga más de 4.20 QORT a su dirección. Esto se puede hacer con intercambios en el Portal de comercio, o por medio de otro Qortian que le proporcione el QORT. Una vez que tenga más de 4.20 QORT en su cuenta, los mensajes de Q-Chat serán instantáneos y este cuadro de diálogo ya no aparecerá. ¡Gracias por su comprensión de este método de prevención de spam necesario, y esperamos que disfrute de Qortal!",
|
||||
"cchange43": "Sugerencia QORT para",
|
||||
"cchange44": "ENVIAR MENSAJE",
|
||||
"cchange45": "USUARIO CONSEJO",
|
||||
"cchange46": "Cantidad de la propina",
|
||||
"cchange47": "Saldo disponible",
|
||||
"cchange48": "Error al recuperar el saldo de QORT. ¡Inténtalo de nuevo!",
|
||||
"cchange49": "Tarifa estática actual",
|
||||
"cchange50": "Enviar",
|
||||
"cchange51": "¡Fondos insuficientes!",
|
||||
"cchange52": "¡Cantidad no válida!",
|
||||
"cchange53": "¡El receptor no puede estar vacío!",
|
||||
"cchange54": "¡Receptor no válido!",
|
||||
"cchange55": "¡Transacción exitosa!",
|
||||
"cchange56": "¡Transacción fallida!",
|
||||
"cchange57": "Información de usuario",
|
||||
"cchange58": "ENVIAR MENSAJE",
|
||||
"cchange59": "USUARIO CONSEJO",
|
||||
"cchange60": "Invitaciones de grupo pendientes",
|
||||
"cchange61": "Error al obtener las invitaciones del grupo. ¡Inténtalo de nuevo!",
|
||||
"cchange62": "¡Nombre de usuario y dirección ingresados incorrectos! ¡Inténtalo de nuevo!",
|
||||
"cchange63": "Introducir Habilitado",
|
||||
"cchange64": "Entrar Deshabilitado",
|
||||
"cchange65": "Ingrese un destinatario",
|
||||
"cchange66": "No se puede recuperar el mensaje respondido. El mensaje es demasiado antiguo.",
|
||||
"cchange68": "editado",
|
||||
"cchange69": "Mostrar imágenes automáticamente",
|
||||
"cchange70": "Este tipo de imagen no es compatible",
|
||||
"cchange71": "y",
|
||||
"cchange72": "otro",
|
||||
"cchange73": "s",
|
||||
"cchange74": "reaccionó con",
|
||||
"cchange90": "Sin mensajes"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "Bienvenido al Q-Chat",
|
||||
@ -556,7 +603,15 @@
|
||||
"bcchange7": "MENÚ",
|
||||
"bcchange8": "Copiar Dirección",
|
||||
"bcchange9": "Mensaje Privado",
|
||||
"bcchange10":"Más"
|
||||
"bcchange10": "Más",
|
||||
"bcchange11": "Responder",
|
||||
"bcchange12": "Editar",
|
||||
"bcchange13": "Reacción",
|
||||
"bcchange14": "Adelante",
|
||||
"bcchange15": "Mensaje reenviado",
|
||||
"bcchange16": "Elegir destinatario o buscar uno a continuación",
|
||||
"bcchange17": "REENVIADO",
|
||||
"bcchange18": "Sugerencia para el usuario"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Grupos Qortal",
|
||||
@ -616,7 +671,8 @@
|
||||
"gchange55": "Buscar grupo privado",
|
||||
"gchange56": "Nombre del grupo a buscar",
|
||||
"gchange57": "Nombre de grupo privado no encontrado",
|
||||
"gchange58":"Tenga en cuenta que el nombre del grupo debe coincidir exactamente."
|
||||
"gchange58": "Tenga en cuenta que el nombre del grupo debe coincidir exactamente.",
|
||||
"gchange59": "Mostrar/ocultar teletipo"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "Rompecabezas",
|
||||
@ -814,5 +870,23 @@
|
||||
"mg59": "Solicitud de cancelación de unión aceptada con éxito",
|
||||
"mg60": "¿Está seguro de cancelar la solicitud de ingreso de este miembro?",
|
||||
"mg61": "¡Al presionar confirmar, se enviará la solicitud de cancelación de unión!"
|
||||
},
|
||||
"info": {
|
||||
"inf1": "Información del portal comercial",
|
||||
"inf2": "Cerrar información del portal comercial",
|
||||
"inf3": "Este es un mercado para COMPRAR QORT",
|
||||
"inf4": "- 'ventas de mercado abierto' son ÓRDENES DE VENTA QORT.",
|
||||
"inf5": "Solo puede comprar UN pedido a la vez, simplemente haga clic en el pedido con el que desea comprar",
|
||||
"inf6": "y se completará el cuadro 'COMPRAR QORT' con los detalles, luego haga clic en COMPRAR.",
|
||||
"inf7": "Información de compra automática",
|
||||
"inf8": "Cerrar información de compra automática",
|
||||
"inf9": "'Auto Buy' es una función que permite realizar 'órdenes de compra' en el Portal de comercio. Estas 'órdenes de compra' solo son visibles para la persona que las realiza. No son órdenes de compra 'públicas' como las Las 'ventas de mercado abierto' NO se almacenan en la cadena de bloques de Qortal. La compra automática es una característica de la interfaz de usuario y, como tal, requiere que la interfaz de usuario esté FUNCIONANDO.",
|
||||
"inf10": "Para realizar un pedido de compra automática, haga clic en el botón 'Agregar pedido de compra automática' y complete el cuadro que aparece. Ingrese la CANTIDAD DE QORT que desea COMPRAR y el PRECIO al que desea COMPRAR. Una vez la orden está activa, Auto Buy comprará HASTA esa cantidad de QORT para usted, HASTA el precio que establezca (comenzando en la orden más baja y subiendo en los libros)",
|
||||
"inf11": "¡Simplemente DEJE SU IU FUNCIONANDO y Auto Buy hace el resto, automáticamente!",
|
||||
"inf12": "PUEDE explorar otros complementos en la IU (Q-Chat, carteras, etc.) pero NO PUEDE CERRAR LA IU si desea que se complete su compra automática. Deje la IU 'minimizada' en la 'barra de tareas' o 'panel' está bien, mientras la interfaz de usuario permanezca ABIERTA, Auto Buy funcionará.",
|
||||
"inf13": "Comprar automáticamente",
|
||||
"inf14": "con",
|
||||
"inf15": "Órdenes de compra automática activas",
|
||||
"inf16": "Compra automática"
|
||||
}
|
||||
}
|
||||
|
@ -532,8 +532,55 @@
|
||||
"cchange22": "Chargement des messages...",
|
||||
"cchange23": "Impossible de déchiffrer le message!",
|
||||
"cchange24": "Le nombre maximum de caractères par message est 255",
|
||||
"cchange25":"Votre solde est inférieur à 4,20 QORT",
|
||||
"cchange26":"En raison de la nécessité de lutter contre le spam, les comptes avec un solde Qort inférieur à 4,20 mettront beaucoup de temps à ENVOYER des messages dans Q-Chat. Si vous souhaitez augmenter immédiatement la vitesse d'envoi des messages Q-Chat, obtenez plus de 4,20 QORT à votre adresse. Cela peut être fait avec des métiers dans le portail commercial, ou par le biais d'un autre Qortian vous donnant le QORT. Une fois que vous avez plus de 4,20 QORT dans votre compte, les messages Q-Chat seront instantanés et cette boîte de dialogue ne sera plus Nous vous remercions de votre compréhension de cette méthode de prévention du spam nécessaire, et nous espérons que vous apprécierez Qortal !"
|
||||
"cchange25": "Modifier le message",
|
||||
"cchange26": "La taille du fichier dépasse 0,5 Mo",
|
||||
"cchange27": "Un nom enregistré est requis pour envoyer des images",
|
||||
"cchange28": "Ce fichier n'est pas une image",
|
||||
"cchange29": "La taille maximale des messages est de 1 000 octets",
|
||||
"cchange30": "Téléchargement de l'image. Cela peut prendre jusqu'à une minute.",
|
||||
"cchange31": "Suppression de l'image. Cela peut prendre jusqu'à une minute.",
|
||||
"cchange33": "Annuler",
|
||||
"cchange34": "Ce message de chat utilise une ancienne version de message et ne peut pas utiliser cette fonctionnalité.",
|
||||
"cchange35": "Erreur lors de la tentative de récupération du nom de l'utilisateur. Veuillez réessayer !",
|
||||
"cchange36": "Résultats de la recherche",
|
||||
"cchange37": "Aucun résultat trouvé",
|
||||
"cchange38": "Utilisateur vérifié",
|
||||
"cchange39": "Impossible d'envoyer un message chiffré à cet utilisateur car il n'a pas sa clé publique sur la chaîne.",
|
||||
"cchange40": "IMAGE (cliquez pour voir)",
|
||||
"cchange41": "Votre solde est inférieur à 4,20 QORT",
|
||||
"cchange42": "En raison de la nécessité de lutter contre le spam, les comptes avec un solde Qort inférieur à 4,20 mettront beaucoup de temps à ENVOYER des messages dans Q-Chat. Si vous souhaitez augmenter immédiatement la vitesse d'envoi des messages Q-Chat, obtenez plus de 4,20 QORT à votre adresse. Cela peut être fait avec des métiers dans le portail commercial, ou par le biais d'un autre Qortian vous donnant le QORT. Une fois que vous avez plus de 4,20 QORT dans votre compte, les messages Q-Chat seront instantanés et cette boîte de dialogue ne sera plus Nous vous remercions de votre compréhension de cette méthode de prévention du spam nécessaire, et nous espérons que vous apprécierez Qortal !",
|
||||
"cchange43": "Tip QORT à",
|
||||
"cchange44": "ENVOYER UN MESSAGE",
|
||||
"cchange45": "CONSEIL UTILISATEUR",
|
||||
"cchange46": "Montant du pourboire",
|
||||
"cchange47": "Solde disponible",
|
||||
"cchange48": "Échec de la récupération du solde QORT. Réessayez !",
|
||||
"cchange49": "Frais statiques actuels",
|
||||
"cchange50": "Envoyer",
|
||||
"cchange51": "Fonds insuffisants !",
|
||||
"cchange52": "Montant invalide !",
|
||||
"cchange53": "Le destinataire ne peut pas être vide !",
|
||||
"cchange54": "Destinataire invalide !",
|
||||
"cchange55": "Transaction réussie !",
|
||||
"cchange56": "Échec de la transaction !",
|
||||
"cchange57": "Informations utilisateur",
|
||||
"cchange58": "ENVOYER UN MESSAGE",
|
||||
"cchange59": "CONSEIL UTILISATEUR",
|
||||
"cchange60": "Invitations de groupe en attente",
|
||||
"cchange61": "Erreur lors de la récupération des invitations de groupe. Veuillez réessayer !",
|
||||
"cchange62": "Nom d'utilisateur et adresse erronés ! Veuillez réessayer !",
|
||||
"cchange63": "Entrée activée",
|
||||
"cchange64": "Entrée désactivée",
|
||||
"cchange65": "Veuillez saisir un destinataire",
|
||||
"cchange66": "Impossible de récupérer le message auquel vous avez répondu. Le message est trop ancien.",
|
||||
"cchange68": "modifié",
|
||||
"cchange69": "Afficher automatiquement les images",
|
||||
"cchange70": "Ce type d'image n'est pas pris en charge",
|
||||
"cchange71": "et",
|
||||
"cchange72": "autre",
|
||||
"cchange73": "s",
|
||||
"cchange74": "a réagi avec",
|
||||
"cchange90": "Aucun message"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "Bienvenue dans Q-Chat",
|
||||
@ -556,7 +603,15 @@
|
||||
"bcchange7": "MENU",
|
||||
"bcchange8": "Copier l'Adresse",
|
||||
"bcchange9": "Message Privé",
|
||||
"bcchange10":"Suite"
|
||||
"bcchange10": "Suite",
|
||||
"bcchange11": "Répondre",
|
||||
"bcchange12": "Modifier",
|
||||
"bcchange13": "Réaction",
|
||||
"bcchange14": "En avant",
|
||||
"bcchange15": "Message transféré",
|
||||
"bcchange16": "Choisissez le destinataire ou recherchez-en un ci-dessous",
|
||||
"bcchange17": "TRANSMIS",
|
||||
"bcchange18": "Astuce à l'utilisateur"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Groupes Qortal",
|
||||
@ -616,7 +671,8 @@
|
||||
"gchange55": "Rechercher un groupe privé",
|
||||
"gchange56": "Nom du groupe à rechercher",
|
||||
"gchange57": "Nom de groupe privé introuvable",
|
||||
"gchange58":"Notez que le nom du groupe doit correspondre exactement."
|
||||
"gchange58": "Notez que le nom du groupe doit correspondre exactement.",
|
||||
"gchange59": "Afficher / Masquer le téléscripteur"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "Puzzles",
|
||||
@ -814,5 +870,23 @@
|
||||
"mg59": "Annuler la demande d'adhésion acceptée avec succès",
|
||||
"mg60": "Êtes-vous sûr d'annuler la demande d'adhésion de ce membre ?",
|
||||
"mg61": "En appuyant sur confirmer, la demande d'annulation de l'adhésion sera envoyée !"
|
||||
},
|
||||
"info": {
|
||||
"inf1": "Informations sur le portail commercial",
|
||||
"inf2": "Fermer les informations du portail commercial",
|
||||
"inf3": "C'est un marché avec lequel ACHETER QORT",
|
||||
"inf4": "- les 'ventes sur le marché libre' sont des ORDRES DE VENTE QORT.",
|
||||
"inf5": "Vous ne pouvez acheter qu'UNE seule commande à la fois, cliquez simplement sur une commande avec laquelle vous souhaitez acheter",
|
||||
"inf6": "et il remplira la case 'BUY QORT' avec les détails, puis cliquez sur BUY.",
|
||||
"inf7": "Informations sur l'achat automatique",
|
||||
"inf8": "Fermer les informations d'achat automatique",
|
||||
"inf9": "'Auto Buy' est une fonctionnalité qui permet de placer des 'ordres d'achat' sur le Trade Portal. Ces 'ordres d'achat' ne sont visibles que par la personne qui les place. Ce ne sont pas des ordres d'achat 'publics' comme le Les 'ventes sur le marché libre' sont et ne sont PAS stockées sur la blockchain Qortal. L'achat automatique est une fonctionnalité de l'interface utilisateur et, en tant que telle, nécessite que l'interface utilisateur soit en cours d'exécution.",
|
||||
"inf10": "Pour passer une commande d'achat automatique, cliquez sur le bouton 'Ajouter une commande d'achat automatique' et remplissez la case qui s'affiche. Saisissez le MONTANT DE QORT que vous souhaitez ACHETER et le PRIX auquel vous êtes prêt à ACHETER. Une fois l'ordre est actif, Auto Buy achètera jusqu'à ce montant de QORT pour vous, jusqu'au prix que vous avez défini (en commençant par l'ordre le plus bas et en remontant les livres.)",
|
||||
"inf11": "Laissez simplement votre interface utilisateur fonctionner et l'achat automatique s'occupe du reste, automatiquement !",
|
||||
"inf12": "Vous POUVEZ parcourir d'autres plugins dans l'interface utilisateur (Q-Chat, portefeuilles, etc.) mais vous NE POUVEZ PAS FERMER L'UI si vous souhaitez que votre achat automatique se termine. Laisser l'interface utilisateur 'réduite' sur la 'barre des tâches' ou 'panel' est très bien, tant que l'interface utilisateur reste OUVERTE, l'achat automatique fonctionnera.",
|
||||
"inf13": "Acheter automatiquement",
|
||||
"inf14": "avec",
|
||||
"inf15": "Commandes d'achat automatique actives",
|
||||
"inf16": "Achat automatique"
|
||||
}
|
||||
}
|
||||
|
@ -533,8 +533,55 @@
|
||||
"cchange22": "संदेश लोड हो रहा है ...",
|
||||
"cchange23": "संदेश डिक्रिप्ट नहीं कर सकता!",
|
||||
"cchange24": "प्रति संदेश अधिकतम वर्ण 255 है",
|
||||
"cchange25":"आपका बैलेंस 4.20 QORT से कम है",
|
||||
"cchange26":"स्पैम से निपटने की आवश्यकता के कारण, 4.20 Qort से कम बैलेंस वाले खातों को Q-Chat में संदेश भेजने में लंबा समय लगेगा। यदि आप Q-Chat संदेशों के लिए भेजने की गति को तुरंत बढ़ाना चाहते हैं, तो 4.20 से अधिक प्राप्त करें। आपके पते पर QORT। यह व्यापार पोर्टल में ट्रेडों के साथ किया जा सकता है, या आपको QORT देने वाले किसी अन्य QORTIAN के माध्यम से किया जा सकता है। एक बार जब आपके खाते में 4.20 QORT से अधिक हो जाते हैं, तो Q-चैट संदेश तत्काल होंगे और यह डायलॉग अब और नहीं होगा दिखाएँ। इस आवश्यक स्पैम रोकथाम विधि को समझने के लिए धन्यवाद, और हम आशा करते हैं कि आप Qortal का आनंद लेंगे!"
|
||||
"cchange25": "संदेश संपादित करें",
|
||||
"cchange26": "फ़ाइल का आकार 0.5 एमबी से अधिक है",
|
||||
"cchange27": "चित्र भेजने के लिए एक पंजीकृत नाम आवश्यक है",
|
||||
"cchange28": "यह फ़ाइल छवि नहीं है",
|
||||
"cchange29": "अधिकतम संदेश आकार 1000 बाइट्स है",
|
||||
"cchange30": "छवि अपलोड हो रही है। इसमें एक मिनट तक का समय लग सकता है।",
|
||||
"cchange31": "छवि हटाई जा रही है। इसमें एक मिनट तक का समय लग सकता है।",
|
||||
"cchange33": "रद्द करें",
|
||||
"cchange34": "यह चैट संदेश पुराने संदेश संस्करण का उपयोग कर रहा है और इस सुविधा का उपयोग नहीं कर सकता है।",
|
||||
"cchange35": "उपयोगकर्ता का नाम लाने का प्रयास करते समय त्रुटि। कृपया पुनः प्रयास करें!",
|
||||
"cchange36": "खोज परिणाम",
|
||||
"cchange37": "कोई परिणाम नहीं मिला",
|
||||
"cchange38": "उपयोगकर्ता सत्यापित",
|
||||
"cchange39": "इस उपयोगकर्ता को एक एन्क्रिप्टेड संदेश नहीं भेज सकता क्योंकि उनके पास श्रृंखला पर अपनी सार्वजनिक कुंजी नहीं है।",
|
||||
"cchange40": "छवि (देखने के लिए क्लिक करें)",
|
||||
"cchange41": "आपका बैलेंस 4.20 QORT से कम है",
|
||||
"cchange42": "स्पैम से निपटने की आवश्यकता के कारण, 4.20 Qort से कम बैलेंस वाले खातों को Q-Chat में संदेश भेजने में लंबा समय लगेगा। यदि आप Q-Chat संदेशों के लिए भेजने की गति को तुरंत बढ़ाना चाहते हैं, तो 4.20 से अधिक प्राप्त करें। आपके पते पर QORT। यह व्यापार पोर्टल में ट्रेडों के साथ किया जा सकता है, या आपको QORT देने वाले किसी अन्य QORTIAN के माध्यम से किया जा सकता है। एक बार जब आपके खाते में 4.20 QORT से अधिक हो जाते हैं, तो Q-चैट संदेश तत्काल होंगे और यह डायलॉग अब और नहीं होगा दिखाएँ। इस आवश्यक स्पैम रोकथाम विधि को समझने के लिए धन्यवाद, और हम आशा करते हैं कि आप Qortal का आनंद लेंगे!",
|
||||
"cchange43": "QORT को टिप दें",
|
||||
"cchange44": "संदेश भेजें",
|
||||
"cchange45": "टिप उपयोगकर्ता",
|
||||
"cchange46": "युक्ति राशि",
|
||||
"cchange47": "उपलब्ध शेष",
|
||||
"cchange48": "QORT बैलेंस प्राप्त करने में विफल। पुनः प्रयास करें!",
|
||||
"cchange49": "वर्तमान स्थैतिक शुल्क",
|
||||
"cchange50": "भेजें",
|
||||
"cchange51": "अपर्याप्त धन!",
|
||||
"cchange52": "अमान्य राशि!",
|
||||
"cchange53": "रिसीवर खाली नहीं हो सकता!",
|
||||
"cchange54": "अमान्य रिसीवर!",
|
||||
"cchange55": "लेन-देन सफल!",
|
||||
"cchange56": "लेन-देन विफल!",
|
||||
"cchange57": "उपयोगकर्ता जानकारी",
|
||||
"cchange58": "संदेश भेजें",
|
||||
"cchange59": "टिप उपयोगकर्ता",
|
||||
"cchange60": "समूह आमंत्रण लंबित",
|
||||
"cchange61": "समूह आमंत्रण प्राप्त करने में त्रुटि। कृपया पुन: प्रयास करें!",
|
||||
"cchange62": "गलत उपयोगकर्ता नाम और पता दर्ज किया गया! कृपया पुनः प्रयास करें!",
|
||||
"cchange63": "सक्षम दर्ज करें",
|
||||
"cchange64": "अक्षम दर्ज करें",
|
||||
"cchange65": "कृपया एक प्राप्तकर्ता दर्ज करें",
|
||||
"cchange66": "इसका उत्तर दिया गया संदेश प्राप्त नहीं किया जा सकता। संदेश बहुत पुराना है।",
|
||||
"cchange68": "संपादित",
|
||||
"cchange69": "ऑटो-शो छवियां",
|
||||
"cchange70": "यह छवि प्रकार समर्थित नहीं है",
|
||||
"cchange71": "और",
|
||||
"cchange72": "अन्य",
|
||||
"cchange73": "s",
|
||||
"cchange74": "के साथ प्रतिक्रिया",
|
||||
"cchange90": "कोई संदेश नहीं"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "क्यू-चैट में आपका स्वागत है",
|
||||
@ -557,7 +604,15 @@
|
||||
"bcchange7": "मेन्यू",
|
||||
"bcchange8": "कॉपी पता",
|
||||
"bcchange9": "निजी संदेश",
|
||||
"bcchange10":"अधिक"
|
||||
"bcchange10": "अधिक",
|
||||
"bcchange11": "उत्तर",
|
||||
"bcchange12": "संपादित करें",
|
||||
"bcchange13": "प्रतिक्रिया",
|
||||
"bcchange14": "आगे",
|
||||
"bcchange15": "संदेश अग्रेषित किया गया",
|
||||
"bcchange16": "प्राप्तकर्ता चुनें या नीचे किसी को खोजें",
|
||||
"bcchange17": "अग्रेषित",
|
||||
"bcchange18": "टिप उपयोगकर्ता"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "क्वॉर्टल समूह",
|
||||
@ -617,7 +672,8 @@
|
||||
"gchange55": "निजी समूह खोजें",
|
||||
"gchange56": "खोजने के लिए समूह का नाम",
|
||||
"gchange57": "निजी समूह का नाम नहीं मिला",
|
||||
"gchange58":"ध्यान दें कि समूह का नाम सटीक मेल खाना चाहिए।"
|
||||
"gchange58": "ध्यान दें कि समूह का नाम सटीक मेल खाना चाहिए।",
|
||||
"gchange59": "टिकर दिखाएं / छुपाएं"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "पहेलि",
|
||||
@ -815,5 +871,23 @@
|
||||
"mg59": "रद्द करें शामिल होने का अनुरोध सफलतापूर्वक स्वीकार किया गया",
|
||||
"mg60": "क्या आप निश्चित रूप से इस सदस्य के शामिल होने के अनुरोध को रद्द करना चाहते हैं?",
|
||||
"mg61": "पुष्टि करें दबाने पर, रद्द करने का अनुरोध भेजा जाएगा!"
|
||||
},
|
||||
"info": {
|
||||
"Inf1": "व्यापार पोर्टल सूचना",
|
||||
"Inf2": "व्यापार पोर्टल जानकारी बंद करें",
|
||||
"inf3": "यह QORT खरीदने का बाज़ार है",
|
||||
"inf4": "- 'ओपन मार्केट सेल' QORT सेल ऑर्डर हैं।",
|
||||
"inf5": "आप एक समय में केवल एक ऑर्डर खरीद सकते हैं बस उस ऑर्डर पर क्लिक करें जिसे आप खरीदना चाहते हैं",
|
||||
"inf6": "और यह विवरण के साथ 'BUY QORT' बॉक्स को पॉप्युलेट करेगा, फिर BUY पर क्लिक करें।",
|
||||
"inf7": "ऑटो ख़रीद सूचना",
|
||||
"inf8": "ऑटो खरीद जानकारी बंद करें",
|
||||
"inf9": "'ऑटो बाय' एक ऐसी सुविधा है जो 'बाय ऑर्डर' को ट्रेड पोर्टल पर रखने की अनुमति देती है। ये 'बाय ऑर्डर' केवल उन्हें रखने वाले व्यक्ति द्वारा देखे जा सकते हैं। वे 'सार्वजनिक' खरीद ऑर्डर नहीं हैं जैसे कि 'ओपन मार्केट सेल' हैं, और Qortal ब्लॉकचेन पर संग्रहीत नहीं हैं। ऑटो बाय एक UI विशेषता है, और इसलिए यह आवश्यक है कि UI चल रहा हो।",
|
||||
"inf10": "ऑटो बाय ऑर्डर देने के लिए 'ऑटो बाय ऑर्डर जोड़ें' बटन पर क्लिक करें और आने वाले बॉक्स को भरें। आप जो राशि खरीदना चाहते हैं, उसे दर्ज करें, और वह मूल्य जो आप खरीदना चाहते हैं। एक बार ऑर्डर सक्रिय है, ऑटो बाय आपके लिए QORT की उतनी राशि तक खरीदेगा, आपके द्वारा निर्धारित कीमत तक (न्यूनतम ऑर्डर से शुरू करके और पुस्तकों को ऊपर ले जाते हुए)।",
|
||||
"inf11": "बस अपने UI को चालू रहने दें और ऑटो खरीदें बाकी काम अपने आप कर लेता है!",
|
||||
"inf12": "आप UI (Q-Chat, वॉलेट, आदि) में अन्य प्लगइन्स ब्राउज़ कर सकते हैं, लेकिन यदि आप चाहते हैं कि आपका ऑटो ख़रीद पूरा हो, तो आप UI को बंद नहीं कर सकते। UI को 'कम से कम' छोड़कर 'टास्कबार' पर या 'पैनल' ठीक है, जब तक यूआई खुला रहता है ऑटो बाय काम करेगा।",
|
||||
"inf13": "स्वचालित रूप से ख़रीदें",
|
||||
"inf14": "साथ",
|
||||
"inf15": "सक्रिय ऑटो खरीद आदेश",
|
||||
"inf16": "ऑटो खरीदें"
|
||||
}
|
||||
}
|
||||
|
@ -532,8 +532,55 @@
|
||||
"cchange22": "Učitavanje poruka...",
|
||||
"cchange23": "Nemoguće dešifrirati poruku!",
|
||||
"cchange24": "Maksimalno 255 slova po poruci.",
|
||||
"cchange25":"Vaš saldo je ispod 4,20 QORT",
|
||||
"cchange26":"Zbog potrebe za suzbijanjem neželjene pošte, računima sa saldom ispod 4.20 Qort trebat će dugo vremena za POŠALJANJE poruka u Q-Chatu. Ako želite odmah povećati brzinu slanja za Q-Chat poruke, nabavite preko 4.20 QORT na vašu adresu. To se može učiniti trgovanjem na Trade Portalu ili putem drugog Qortiana koji vam daje QORT. Kada budete imali više od 4,20 QORT na svom računu, Q-Chat poruke bit će trenutne i ovaj dijaloški okvir više neće biti show. Hvala vam na razumijevanju ove neophodne metode za sprječavanje spama i nadamo se da ćete uživati u Qortalu!"
|
||||
"cchange25": "Uredi poruku",
|
||||
"cchange26": "Veličina datoteke premašuje 0,5 MB",
|
||||
"cchange27": "Za slanje slika potrebno je registrirano ime",
|
||||
"cchange28": "Ova datoteka nije slika",
|
||||
"cchange29": "Maksimalna veličina poruke je 1000 bajtova",
|
||||
"cchange30": "Učitavanje slike. Ovo može potrajati do jedne minute.",
|
||||
"cchange31": "Brisanje slike. Ovo može potrajati do jedne minute.",
|
||||
"cchange33": "Odustani",
|
||||
"cchange34": "Ova chat poruka koristi stariju verziju poruke i ne može koristiti ovu značajku.",
|
||||
"cchange35": "Greška prilikom pokušaja dohvaćanja korisničkog imena. Pokušajte ponovo!",
|
||||
"cchange36": "Rezultati pretraživanja",
|
||||
"cchange37": "Nisu pronađeni rezultati",
|
||||
"cchange38": "Korisnički potvrđeno",
|
||||
"cchange39": "Ne mogu poslati šifriranu poruku ovom korisniku jer nemaju svoj javni ključ u lancu.",
|
||||
"cchange40": "SLIKA (kliknite za prikaz)",
|
||||
"cchange41": "Vaš saldo je ispod 4,20 QORT",
|
||||
"cchange42": "Zbog potrebe za suzbijanjem neželjene pošte, računima sa saldom ispod 4.20 Qort trebat će dugo vremena za POŠALJANJE poruka u Q-Chatu. Ako želite odmah povećati brzinu slanja za Q-Chat poruke, nabavite preko 4.20 QORT na vašu adresu. To se može učiniti trgovanjem na Trade Portalu ili putem drugog Qortiana koji vam daje QORT. Kada budete imali više od 4,20 QORT na svom računu, Q-Chat poruke bit će trenutne i ovaj dijaloški okvir više neće biti show. Hvala vam na razumijevanju ove neophodne metode za sprječavanje spama i nadamo se da ćete uživati u Qortalu!",
|
||||
"cchange43": "Napojnica QORT za",
|
||||
"cchange44": "POŠALJI PORUKU",
|
||||
"cchange45": "SAVJET KORISNIKU",
|
||||
"cchange46": "Iznos napojnice",
|
||||
"cchange47": "Dostupno stanje",
|
||||
"cchange48": "Nije uspjelo dohvaćanje QORT stanja. Pokušajte ponovo!",
|
||||
"cchange49": "Trenutna statička naknada",
|
||||
"cchange50": "Pošalji",
|
||||
"cchange51": "Nedovoljno sredstava!",
|
||||
"cchange52": "Nevažeći iznos!",
|
||||
"cchange53": "Primatelj ne može biti prazan!",
|
||||
"cchange54": "Nevažeći prijemnik!",
|
||||
"cchange55": "Transakcija uspješna!",
|
||||
"cchange56": "Transakcija nije uspjela!",
|
||||
"cchange57": "Informacije o korisniku",
|
||||
"cchange58": "POŠALJI PORUKU",
|
||||
"cchange59": "SAVJET KORISNIKU",
|
||||
"cchange60": "Grupni pozivi na čekanju",
|
||||
"cchange61": "Greška prilikom dohvaćanja grupnih pozivnica. Pokušajte ponovo!",
|
||||
"cchange62": "Uneseno je krivo korisničko ime i adresa! Pokušajte ponovo!",
|
||||
"cchange63": "Unos omogućen",
|
||||
"cchange64": "Unos onemogućen",
|
||||
"cchange65": "Molimo unesite primatelja",
|
||||
"cchange66": "Ne mogu dohvatiti poruku s odgovorom. Poruka je prestara.",
|
||||
"cchange68": "uređeno",
|
||||
"cchange69": "Automatsko prikazivanje slika",
|
||||
"cchange70": "Ova vrsta slike nije podržana",
|
||||
"cchange71": "i",
|
||||
"cchange72": "ostalo",
|
||||
"cchange73": "s",
|
||||
"cchange74": "reagirao sa",
|
||||
"cchange90": "Nema poruka"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "Dobrodošli u Q-Čavrljanje",
|
||||
@ -556,7 +603,15 @@
|
||||
"bcchange7": "MENI",
|
||||
"bcchange8": "Kopiraj Adresu",
|
||||
"bcchange9": "Privatna Poruka",
|
||||
"bcchange10":"Više"
|
||||
"bcchange10": "Više",
|
||||
"bcchange11": "Odgovori",
|
||||
"bcchange12": "Uredi",
|
||||
"bcchange13": "Reakcija",
|
||||
"bcchange14": "Naprijed",
|
||||
"bcchange15": "Poruka proslijeđena",
|
||||
"bcchange16": "Odaberite primatelja ili potražite jednog ispod",
|
||||
"bcchange17": "PROSLJEĐENO",
|
||||
"bcchange18": "Savjet korisniku"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Qortal Grupe",
|
||||
@ -616,7 +671,8 @@
|
||||
"gchange55": "Traži privatnu grupu",
|
||||
"gchange56": "Naziv grupe za pretraživanje",
|
||||
"gchange57": "Ime privatne grupe nije pronađeno",
|
||||
"gchange58":"Imajte na umu da se naziv grupe mora točno podudarati."
|
||||
"gchange58": "Imajte na umu da se naziv grupe mora točno podudarati.",
|
||||
"gchange59": "Prikaži / sakrij ticker"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "Zagonetke",
|
||||
@ -814,5 +870,23 @@
|
||||
"mg59": "Poništi zahtjev za pridruživanje uspješno prihvaćen",
|
||||
"mg60": "Jeste li sigurni da želite otkazati zahtjev za pridruživanje ovog člana?",
|
||||
"mg61": "Pritiskom na potvrdu, bit će poslan zahtjev za otkazivanje pridruživanja!"
|
||||
},
|
||||
"info": {
|
||||
"inf1": "Informacije o trgovinskom portalu",
|
||||
"inf2": "Zatvori informacije o trgovinskom portalu",
|
||||
"inf3": "Ovo je tržište na kojem možete KUPITI QORT",
|
||||
"inf4": "- 'prodaje na otvorenom tržištu' su QORT NARUDŽBI ZA PRODAJU.",
|
||||
"inf5": "Možete kupiti samo JEDNU narudžbu odjednom, jednostavno kliknite na narudžbu kojom želite kupovati",
|
||||
"inf6": "i popunit će polje 'KUPI QORT' s detaljima, a zatim kliknite KUPI.",
|
||||
"inf7": "Informacije o automatskoj kupnji",
|
||||
"inf8": "Zatvori informacije o automatskoj kupnji",
|
||||
"inf9": "'Automatska kupnja' je značajka koja omogućuje postavljanje 'naloga za kupnju' na trgovačkom portalu. Ove 'naloge za kupnju' vidljive su samo osobi koja ih postavlja. To nisu 'javni' nalozi za kupnju kao što je 'prodaje na otvorenom tržištu' jesu i NE pohranjuju se na Qortal blockchain. Automatska kupnja je značajka korisničkog sučelja i kao takva zahtijeva da korisničko sučelje RADI.",
|
||||
"inf10": "Da biste postavili narudžbu za automatsku kupnju, kliknite gumb 'Dodaj narudžbu za automatsku kupnju' i ispunite okvir koji se pojavi. Unesite IZNOS KORTE koji želite KUPITI i CIJENU DO koje ste spremni KUPITI. Jednom narudžba je aktivna, Auto Buy će za vas kupiti DO tog iznosa QORT, po DO cijene koju ste postavili (počevši od najniže narudžbe i napredujući prema knjigama.)",
|
||||
"inf11": "Jednostavno OSTAVITE VAŠE UI U RADU, a automatska kupnja će učiniti ostalo, automatski!",
|
||||
"inf12": "MOŽETE pregledavati druge dodatke u korisničkom sučelju (Q-Chat, novčanici itd.), ali NE MOŽETE ZATVORITI SUČELJE ako želite da se automatska kupnja dovrši. Ostavljanje korisničkog sučelja 'minimiziranog' na 'taskbaru' ili 'panel' je sasvim u redu, sve dok je korisničko sučelje OTVORENO, automatska će kupnja funkcionirati.",
|
||||
"inf13": "Automatska kupnja",
|
||||
"inf14": "sa",
|
||||
"inf15": "Aktivne automatske narudžbe za kupnju",
|
||||
"inf16": "Automatska kupnja"
|
||||
}
|
||||
}
|
||||
|
@ -532,8 +532,55 @@
|
||||
"cchange22": "Üzenetek Betöltése...",
|
||||
"cchange23": "Az Üzenet Nem Visszafejthető!",
|
||||
"cchange24": "Üzenetenkénti maximális karakterszám 255",
|
||||
"cchange25":"Az Ön egyenlege 4,20 QORT alatt van",
|
||||
"cchange26":"A spam elleni küzdelem szükségessége miatt a 4,20 alatti Qort-egyenleggel rendelkező fiókoknál sokáig tart az üzenetek KÜLDÉSE a Q-Chat szolgáltatásban. Ha azonnal meg szeretné növelni a Q-Chat üzenetek küldési sebességét, szerezzen be 4,20 feletti QORT az Ön címére. Ezt megteheti a Kereskedelmi Portálon végzett kereskedésekkel, vagy egy másik QORT-al, amely megadja a QORT-t. Ha 4,20 QORT felett van a fiókjában, a Q-Chat üzenetek azonnal megjelennek, és ez a párbeszédpanel többé nem Köszönjük, hogy megértette ezt a szükséges spammegelőzési módszert, és reméljük, hogy élvezni fogja a Qortalt!"
|
||||
"cchange25": "Üzenet szerkesztése",
|
||||
"cchange26": "A fájl mérete meghaladja a 0,5 MB-ot",
|
||||
"cchange27": "A képek küldéséhez regisztrált név szükséges",
|
||||
"cchange28": "Ez a fájl nem kép",
|
||||
"cchange29": "Az üzenet maximális mérete 1000 bájt",
|
||||
"cchange30": "Kép feltöltése. Ez akár egy percig is eltarthat.",
|
||||
"cchange31": "Kép törlése. Ez akár egy percig is eltarthat.",
|
||||
"cchange33": "Mégse",
|
||||
"cchange34": "Ez a csevegőüzenet egy régebbi üzenetverziót használ, és nem tudja használni ezt a funkciót.",
|
||||
"cchange35": "Hiba történt a felhasználó nevének lekérésekor. Kérjük, próbálja újra!",
|
||||
"cchange36": "Keresési eredmények",
|
||||
"cchange37": "Nincs eredmény",
|
||||
"cchange38": "Felhasználó ellenőrizve",
|
||||
"cchange39": "Ennek a felhasználónak nem lehet titkosított üzenetet küldeni, mivel nincs nyilvános kulcsa a láncban.",
|
||||
"cchange40": "IMAGE (kattintson a megtekintéséhez)",
|
||||
"cchange41": "Az Ön egyenlege 4,20 QORT alatt van",
|
||||
"cchange42": "A spam elleni küzdelem szükségessége miatt a 4,20 alatti Qort-egyenleggel rendelkező fiókoknál sokáig tart az üzenetek KÜLDÉSE a Q-Chat szolgáltatásban. Ha azonnal meg szeretné növelni a Q-Chat üzenetek küldési sebességét, szerezzen be 4,20 feletti QORT az Ön címére. Ezt megteheti a Kereskedelmi Portálon végzett kereskedésekkel, vagy egy másik QORT-al, amely megadja a QORT-t. Ha 4,20 QORT felett van a fiókjában, a Q-Chat üzenetek azonnal megjelennek, és ez a párbeszédpanel többé nem Köszönjük, hogy megértette ezt a szükséges spammegelőzési módszert, és reméljük, hogy élvezni fogja a Qortalt!",
|
||||
"cchange43": "QORT tippje",
|
||||
"cchange44": "ÜZENET KÜLDÉSE",
|
||||
"cchange45": "FELHASZNÁLÓ TIPP",
|
||||
"cchange46": "Borravaló összege",
|
||||
"cchange47": "Rendelkezésre álló egyenleg",
|
||||
"cchange48": "Nem sikerült lekérni a QORT-egyenleget. Próbáld újra!",
|
||||
"cchange49": "Aktuális statikus díj",
|
||||
"cchange50": "Küldés",
|
||||
"cchange51": "Nincs elegendő forrás!",
|
||||
"cchange52": "Érvénytelen összeg!",
|
||||
"cchange53": "A vevő nem lehet üres!",
|
||||
"cchange54": "Érvénytelen vevő!",
|
||||
"cchange55": "A tranzakció sikeres!",
|
||||
"cchange56": "A tranzakció sikertelen!",
|
||||
"cchange57": "Felhasználói adatok",
|
||||
"cchange58": "ÜZENET KÜLDÉSE",
|
||||
"cchange59": "FELHASZNÁLÓ TIPP",
|
||||
"cchange60": "Csoportos meghívások függőben",
|
||||
"cchange61": "Hiba történt a csoportmeghívók lekérésekor. Kérjük, próbálja újra!",
|
||||
"cchange62": "Rossz felhasználónév és cím lett megadva! Próbáld újra!",
|
||||
"cchange63": "Engedélyezett bevitel",
|
||||
"cchange64": "Enter Disabled",
|
||||
"cchange65": "Kérjük, adjon meg egy címzettet",
|
||||
"cchange66": "Nem sikerült lekérni a válaszolt üzenetet. Az üzenet túl régi.",
|
||||
"cchange68": "szerkesztve",
|
||||
"cchange69": "Képek automatikus megjelenítése",
|
||||
"cchange70": "Ez a képtípus nem támogatott",
|
||||
"cchange71": "és",
|
||||
"cchange72": "egyéb",
|
||||
"cchange73": "s",
|
||||
"cchange74": "reagált:",
|
||||
"cchange90": "Nincs üzenet"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "Üdvözöljük a Q-Chathoz",
|
||||
@ -556,7 +603,15 @@
|
||||
"bcchange7": "MENÜ",
|
||||
"bcchange8": "Cím Másolása",
|
||||
"bcchange9": "Privát Üzenet",
|
||||
"bcchange10":"Több"
|
||||
"bcchange10": "Több",
|
||||
"bcchange11": "Válasz",
|
||||
"bcchange12": "Szerkesztés",
|
||||
"bcchange13": "Reakció",
|
||||
"bcchange14": "Tovább",
|
||||
"bcchange15": "Üzenet továbbítva",
|
||||
"bcchange16": "Válasszon címzettet vagy keressen egyet lent",
|
||||
"bcchange17": "TOVÁLTVA",
|
||||
"bcchange18": "Tipp felhasználó"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Qortal Csoportok",
|
||||
@ -616,7 +671,8 @@
|
||||
"gchange55": "Keresés privát csoportban",
|
||||
"gchange56": "A keresendő csoport neve",
|
||||
"gchange57": "A privát csoport neve nem található",
|
||||
"gchange58":"Ne feledje, hogy a csoport nevének pontosan meg kell egyeznie."
|
||||
"gchange58": "Ne feledje, hogy a csoport nevének pontosan meg kell egyeznie.",
|
||||
"gchange59": "Ticker megjelenítése / elrejtése"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "Rejtvények",
|
||||
@ -814,5 +870,23 @@
|
||||
"mg59": "Csatlakozási kérelem visszavonása sikeresen elfogadva",
|
||||
"mg60": "Biztosan visszavonja ennek a tagnak a csatlakozási kérelmét?",
|
||||
"mg61": "A megerősítés megnyomására a csatlakozás megszakítási kérelme elküldésre kerül!"
|
||||
},
|
||||
"info": {
|
||||
"inf1": "Kereskedelmi portál információ",
|
||||
"inf2": "Kereskedelmi portál információinak bezárása",
|
||||
"inf3": "Ez egy olyan piac, ahol QORT VÁSÁRLHAT",
|
||||
"inf4": "- A 'nyílt piaci eladások' QORT ELADÁSI MEGRENDELÉSEK.",
|
||||
"inf5": "Egyszerre csak EGY rendelést vásárolhat, egyszerűen kattintson arra a rendelésre, amellyel vásárolni szeretne",
|
||||
"inf6": "és kitölti a 'QORT VÁSÁRLÁS' mezőt a részletekkel, majd kattintson a VÁSÁRLÁS gombra.",
|
||||
"inf7": "Automatikus vásárlási információ",
|
||||
"inf8": "Automatikus vásárlási információk bezárása",
|
||||
"inf9": "Az 'Automatikus vásárlás' egy olyan funkció, amely lehetővé teszi 'vásárlási rendelések' feladását a Kereskedelmi Portálon. Ezeket a 'vásárlási rendeléseket' csak az őket feladó személy láthatja. Ezek nem 'nyilvános' vételi megbízások, mint pl. A „nyílt piaci eladások” a Qortal blokkláncon vannak tárolva, és NEM tárolják azokat. Az automatikus vásárlás a felhasználói felület funkciója, és mint ilyen, megköveteli, hogy a felhasználói felület FUTÁS legyen.",
|
||||
"inf10": "Automatikus vásárlási rendelés leadásához kattintson az 'Automatikus vásárlási rendelés hozzáadása' gombra, és töltse ki a megjelenő mezőt. Adja meg a VÁSÁROLNI kívánt QORT ÖSSZEGÉT, és az ÁRAT, AKÁRA VÁSÁROLNI. Egyszer a megrendelés aktív, az Auto Buy AKÁR ennyi QORT mennyiséget vásárol az Ön számára, AKÁR AKÁR az Ön által beállított áron (a legalacsonyabb rendeléstől kezdve, és feljebb lépteti a könyveket.)",
|
||||
"inf11": "Egyszerűen HAGYJA MEG A kezelőfelületet, és az Auto Buy elvégzi a többit automatikusan!",
|
||||
"inf12": "Böngészhet más beépülő modulok között a felhasználói felületen (Q-Chat, pénztárcák stb.), de NEM ZÁRHATJA be a felhasználói felületet, ha azt szeretné, hogy az automatikus vásárlás befejeződjön. Ha a felhasználói felületet 'minimalizálva' hagyja a 'tálcán' vagy A 'panel' rendben van, amíg a felhasználói felület NYITVA marad, az automatikus vásárlás működik.",
|
||||
"inf13": "Automatikus vásárlás",
|
||||
"inf14": "with",
|
||||
"inf15": "Aktív automatikus vásárlási megbízások",
|
||||
"inf16": "Automatikus vásárlás"
|
||||
}
|
||||
}
|
||||
|
@ -532,8 +532,55 @@
|
||||
"cchange22": "Caricamento messaggi...",
|
||||
"cchange23": "Impossibile decifrare il messaggio!",
|
||||
"cchange24": "Il massimo di caratteri per messaggio è 255",
|
||||
"cchange25":"Il tuo saldo è inferiore a 4,20 QORT",
|
||||
"cchange26":"Per la necessità di combattere lo spam, gli account con un saldo Qort inferiore a 4.20 impiegheranno molto tempo per INVIARE messaggi in Q-Chat. Se desideri aumentare immediatamente la velocità di invio per i messaggi Q-Chat, ottieni oltre 4.20 QORT al tuo indirizzo. Questo può essere fatto con scambi nel Portale commerciale, o tramite un altro Qortian che ti fornisce il QORT. Una volta che hai più di 4.20 QORT nel tuo account, i messaggi Q-Chat saranno istantanei e questa finestra di dialogo non sarà più show. Grazie per la tua comprensione di questo necessario metodo di prevenzione dello spam e speriamo che ti piaccia Qortal!"
|
||||
"cchange25": "Modifica messaggio",
|
||||
"cchange26": "La dimensione del file supera 0,5 MB",
|
||||
"cchange27": "Per inviare immagini è necessario un nome registrato",
|
||||
"cchange28": "Questo file non è un'immagine",
|
||||
"cchange29": "La dimensione massima del messaggio è 1000 byte",
|
||||
"cchange30": "Caricamento dell'immagine in corso. L'operazione potrebbe richiedere fino a un minuto.",
|
||||
"cchange31": "Eliminazione dell'immagine in corso. L'operazione potrebbe richiedere fino a un minuto.",
|
||||
"cchange33": "Annulla",
|
||||
"cchange34": "Questo messaggio di chat utilizza una versione precedente del messaggio e non può utilizzare questa funzione.",
|
||||
"cchange35": "Errore durante il tentativo di recuperare il nome dell'utente. Riprova!",
|
||||
"cchange36": "Risultati della ricerca",
|
||||
"cchange37": "Nessun risultato trovato",
|
||||
"cchange38": "Utente verificato",
|
||||
"cchange39": "Impossibile inviare un messaggio crittografato a questo utente poiché non ha la propria chiave pubblica sulla catena.",
|
||||
"cchange40": "IMMAGINE (clicca per vedere)",
|
||||
"cchange41": "Il tuo saldo è inferiore a 4,20 QORT",
|
||||
"cchange42": "Per la necessità di combattere lo spam, gli account con un saldo Qort inferiore a 4.20 impiegheranno molto tempo per INVIARE messaggi in Q-Chat. Se desideri aumentare immediatamente la velocità di invio per i messaggi Q-Chat, ottieni oltre 4.20 QORT al tuo indirizzo. Questo può essere fatto con scambi nel Portale commerciale, o tramite un altro Qortian che ti fornisce il QORT. Una volta che hai più di 4.20 QORT nel tuo account, i messaggi Q-Chat saranno istantanei e questa finestra di dialogo non sarà più show. Grazie per la tua comprensione di questo necessario metodo di prevenzione dello spam e speriamo che ti piaccia Qortal!",
|
||||
"cchange43": "Suggerisci QORT a",
|
||||
"cchange44": "INVIA MESSAGGIO",
|
||||
"cchange45": "CONSIGLIO UTENTE",
|
||||
"cchange46": "Importo mancia",
|
||||
"cchange47": "Saldo disponibile",
|
||||
"cchange48": "Impossibile recuperare il saldo QORT. Riprova!",
|
||||
"cchange49": "Corrispettivo statico attuale",
|
||||
"cchange50": "Invia",
|
||||
"cchange51": "Fondi insufficienti!",
|
||||
"cchange52": "Importo non valido!",
|
||||
"cchange53": "Il ricevitore non può essere vuoto!",
|
||||
"cchange54": "Ricevitore non valido!",
|
||||
"cchange55": "Transazione riuscita!",
|
||||
"cchange56": "Transazione fallita!",
|
||||
"cchange57": "Informazioni utente",
|
||||
"cchange58": "INVIA MESSAGGIO",
|
||||
"cchange59": "CONSIGLIO UTENTE",
|
||||
"cchange60": "Inviti di gruppo in sospeso",
|
||||
"cchange61": "Errore durante il recupero degli inviti al gruppo. Riprova!",
|
||||
"cchange62": "Inseriti nome utente e indirizzo errati! Riprova!",
|
||||
"cchange63": "Invio abilitato",
|
||||
"cchange64": "Inserisci disabilitato",
|
||||
"cchange65": "Inserisci un destinatario",
|
||||
"cchange66": "Impossibile recuperare il messaggio di risposta. Il messaggio è troppo vecchio.",
|
||||
"cchange68": "modificato",
|
||||
"cchange69": "Mostra automaticamente le immagini",
|
||||
"cchange70": "Questo tipo di immagine non è supportato",
|
||||
"cchange71": "e",
|
||||
"cchange72": "altro",
|
||||
"cchange73": "s",
|
||||
"cchange74": "ha reagito con",
|
||||
"cchange90": "Nessun messaggio"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "Benvenuto in Q-Chat",
|
||||
@ -556,7 +603,15 @@
|
||||
"bcchange7": "MENÙ",
|
||||
"bcchange8": "Copia Indirizzo",
|
||||
"bcchange9": "Messaggio Privato",
|
||||
"bcchange10":"Di più"
|
||||
"bcchange10": "Di più",
|
||||
"bcchange11": "Rispondi",
|
||||
"bcchange12": "Modifica",
|
||||
"bcchange13": "Reazione",
|
||||
"bcchange14": "Avanti",
|
||||
"bcchange15": "Messaggio inoltrato",
|
||||
"bcchange16": "Scegli il destinatario o cercane uno qui sotto",
|
||||
"bcchange17": "INOLTRATO",
|
||||
"bcchange18": "Suggerimento utente"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Gruppi Qortal",
|
||||
@ -616,7 +671,8 @@
|
||||
"gchange55": "Cerca gruppo privato",
|
||||
"gchange56": "Nome gruppo da cercare",
|
||||
"gchange57": "Nome gruppo privato non trovato",
|
||||
"gchange58":"Nota che il nome del gruppo deve corrispondere esattamente."
|
||||
"gchange58": "Nota che il nome del gruppo deve corrispondere esattamente.",
|
||||
"gchange59": "Mostra / Nascondi ticker"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "Puzzle",
|
||||
@ -814,5 +870,23 @@
|
||||
"mg59": "Annulla richiesta di partecipazione accettata con successo",
|
||||
"mg60": "Sei sicuro di voler annullare la richiesta di adesione di questo membro ?",
|
||||
"mg61": "Premendo conferma, verrà inviata la richiesta di annullamento partecipazione!"
|
||||
},
|
||||
"info": {
|
||||
"inf1": "Informazioni sul portale commerciale",
|
||||
"inf2": "Chiudi informazioni portale commerciale",
|
||||
"inf3": "Questo è un mercato con cui ACQUISTARE QORT",
|
||||
"inf4": "- 'vendite a mercato aperto' sono ORDINI DI VENDITA QORT.",
|
||||
"inf5": "Puoi acquistare UN SOLO ordine alla volta, fai semplicemente clic sull'ordine con cui desideri acquistare",
|
||||
"inf6": "e popolerà la casella 'ACQUISTA QORT' con i dettagli, quindi fai clic su ACQUISTA.",
|
||||
"inf7": "Informazioni acquisto automatico",
|
||||
"inf8": "Chiudi informazioni acquisto automatico",
|
||||
"inf9": "'Auto Buy' è una funzionalità che consente di inserire 'ordini di acquisto' sul Portale commerciale. Questi 'ordini di acquisto' sono visibili solo dalla persona che li effettua. Non sono ordini di acquisto 'pubblici' come il Le 'vendite di mercato aperto' sono e NON sono memorizzate sulla blockchain di Qortal. L'acquisto automatico è una funzionalità dell'interfaccia utente e come tale richiede che l'interfaccia utente sia IN FUNZIONE.",
|
||||
"inf10": "Per effettuare un ordine di acquisto automatico, fai clic sul pulsante 'Aggiungi ordine di acquisto automatico' e compila la casella che appare. Inserisci l'IMPORTO DI QORT che desideri ACQUISTARE e il PREZZO FINO al quale sei disposto ad ACQUISTARE. Una volta l'ordine è attivo, Auto Buy acquisterà FINO a tale importo di QORT per te, FINO al prezzo che hai impostato (partendo dall'ordine più basso e salendo di livello.)",
|
||||
"inf11": "Semplicemente LASCIA LA TUA UI IN ESECUZIONE e Auto Buy fa il resto, automaticamente!",
|
||||
"inf12": "Puoi sfogliare altri plug-in nell'interfaccia utente (Q-Chat, portafogli, ecc.) ma NON PUOI CHIUDERE L'interfaccia utente se desideri che il tuo acquisto automatico venga completato. Lasciando l'interfaccia utente 'ridotta a icona' sulla ''barra delle applicazioni' o 'panel' va bene, fintanto che l'interfaccia utente rimane APERTA Auto Buy funzionerà.",
|
||||
"inf13": "Acquista automaticamente",
|
||||
"inf14": "con",
|
||||
"inf15": "Ordini di acquisto automatico attivi",
|
||||
"inf16": "Acquisto automatico"
|
||||
}
|
||||
}
|
||||
|
@ -532,8 +532,55 @@
|
||||
"cchange22": "메시지 로드 중...",
|
||||
"cchange23": "메시지의 암호를 해독할 수 없습니다!",
|
||||
"cchange24": "메시지당 최대 글자 수는 255자입니다.",
|
||||
"cchange25":"잔액이 4.20QORT 미만입니다.",
|
||||
"cchange26":"스팸 방지를 위해 잔액이 4.20Qort 미만인 계정은 Q-Chat에서 메시지를 보내는 데 시간이 오래 걸립니다. Q-Chat 메시지 전송 속도를 즉시 높이려면 4.20 이상을 얻으십시오. 귀하의 주소로 QORT. 이것은 Trade Portal에서 거래하거나 QORT를 제공하는 다른 Qortian을 통해 수행할 수 있습니다. 계정에 4.20 QORT 이상이 있으면 Q-Chat 메시지가 즉시 전송되며 이 대화 상자는 더 이상 표시되지 않습니다. 이 필요한 스팸 방지 방법에 대해 이해해 주셔서 감사합니다. Qortal을 즐기시기 바랍니다!"
|
||||
"cchange25": "메시지 편집",
|
||||
"cchange26": "파일 크기가 0.5MB를 초과함",
|
||||
"cchange27": "이미지를 보내려면 등록된 이름이 필요합니다.",
|
||||
"cchange28": "이 파일은 이미지가 아닙니다.",
|
||||
"cchange29": "최대 메시지 크기는 1000바이트입니다.",
|
||||
"cchange30": "이미지를 업로드하는 중입니다. 최대 1분이 소요될 수 있습니다.",
|
||||
"cchange31": "이미지를 삭제하는 중입니다. 최대 1분이 소요될 수 있습니다.",
|
||||
"cchange33": "취소",
|
||||
"cchange34": "이 채팅 메시지는 이전 메시지 버전을 사용하고 있으며 이 기능을 사용할 수 없습니다.",
|
||||
"cchange35": "사용자 이름을 가져오는 중 오류가 발생했습니다. 다시 시도하십시오!",
|
||||
"cchange36": "검색 결과",
|
||||
"cchange37": "결과 없음",
|
||||
"cchange38": "사용자 확인됨",
|
||||
"cchange39": "체인에 공개 키가 없기 때문에 이 사용자에게 암호화된 메시지를 보낼 수 없습니다.",
|
||||
"cchange40": "이미지(보려면 클릭)",
|
||||
"cchange41": "잔액이 4.20QORT 미만입니다.",
|
||||
"cchange42": "스팸 방지를 위해 잔액이 4.20Qort 미만인 계정은 Q-Chat에서 메시지를 보내는 데 시간이 오래 걸립니다. Q-Chat 메시지 전송 속도를 즉시 높이려면 4.20 이상을 얻으십시오. 귀하의 주소로 QORT. 이것은 Trade Portal에서 거래하거나 QORT를 제공하는 다른 Qortian을 통해 수행할 수 있습니다. 계정에 4.20 QORT 이상이 있으면 Q-Chat 메시지가 즉시 전송되며 이 대화 상자는 더 이상 표시되지 않습니다. 이 필요한 스팸 방지 방법에 대해 이해해 주셔서 감사합니다. Qortal을 즐기시기 바랍니다!",
|
||||
"cchange43": "QORT 팁",
|
||||
"cchange44": "메시지 보내기",
|
||||
"cchange45": "팁 사용자",
|
||||
"cchange46": "팁 금액",
|
||||
"cchange47": "사용 가능한 잔액",
|
||||
"cchange48": "QORT 잔액을 가져오지 못했습니다. 다시 시도하세요!",
|
||||
"cchange49": "현재 고정 요금",
|
||||
"cchange50": "보내기",
|
||||
"cchange51": "자금이 부족합니다!",
|
||||
"cchange52": "잘못된 금액!",
|
||||
"cchange53": "수신자는 비워둘 수 없습니다!",
|
||||
"cchange54": "잘못된 수신자!",
|
||||
"cchange55": "거래 성공!",
|
||||
"cchange56": "거래 실패!",
|
||||
"cchange57": "사용자 정보",
|
||||
"cchange58": "메시지 보내기",
|
||||
"cchange59": "팁 사용자",
|
||||
"cchange60": "보류 중인 그룹 초대",
|
||||
"cchange61": "그룹 초대를 가져오는 중 오류가 발생했습니다. 다시 시도하십시오!",
|
||||
"cchange62": "잘못된 사용자 이름과 주소를 입력했습니다! 다시 시도하십시오!",
|
||||
"cchange63": "활성화 입력",
|
||||
"cchange64": "비활성화 입력",
|
||||
"cchange65": "받는 사람을 입력하세요",
|
||||
"cchange66": "답장한 메시지를 가져올 수 없습니다. 메시지가 너무 오래되었습니다.",
|
||||
"cchange68": "편집됨",
|
||||
"cchange69": "이미지 자동 표시",
|
||||
"cchange70": "이 이미지 유형은 지원되지 않습니다",
|
||||
"cchange71": "그리고",
|
||||
"cchange72": "기타",
|
||||
"cchange73": "들",
|
||||
"cchange74": "반응",
|
||||
"cchange90": "메시지 없음"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "Q-Chat에 오신 것을 환영합니다.",
|
||||
@ -556,7 +603,15 @@
|
||||
"bcchange7": "메뉴",
|
||||
"bcchange8": "주소 복사",
|
||||
"bcchange9": "개인 메시지",
|
||||
"bcchange10":"더"
|
||||
"bcchange10": "더",
|
||||
"bcchange11": "답장",
|
||||
"bcchange12": "편집",
|
||||
"bcchange13": "반응",
|
||||
"bcchange14": "앞으로",
|
||||
"bcchange15": "전달된 메시지",
|
||||
"bcchange16": "받는 사람을 선택하거나 아래에서 검색하십시오",
|
||||
"bcchange17": "전달됨",
|
||||
"bcchange18": "팁 사용자"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Qortal 그룹",
|
||||
@ -616,7 +671,8 @@
|
||||
"gchange55": "비공개 그룹 검색",
|
||||
"gchange56": "검색할 그룹 이름",
|
||||
"gchange57": "비공개 그룹 이름을 찾을 수 없음",
|
||||
"gchange58":"그룹 이름이 정확히 일치해야 합니다."
|
||||
"gchange58": "그룹 이름이 정확히 일치해야 합니다.",
|
||||
"gchange59": "티커 표시/숨기기"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "퍼즐",
|
||||
@ -814,5 +870,23 @@
|
||||
"mg59": "가입 요청 취소 성공",
|
||||
"mg60": "이 회원의 가입 요청을 취소하시겠습니까?",
|
||||
"mg61": "확인을 누르면 가입 취소 요청이 전송됩니다!"
|
||||
},
|
||||
"info": {
|
||||
"inf1": "무역 포털 정보",
|
||||
"inf2": "거래 포털 정보 닫기",
|
||||
"inf3": "QORT를 구매할 수 있는 시장입니다.",
|
||||
"inf4": "- '공개 시장 매도'는 QORT 매도 주문입니다.",
|
||||
"inf5": "구매하려는 주문을 클릭하기만 하면 한 번에 하나의 주문만 구매할 수 있습니다.",
|
||||
"inf6": "'BUY QORT' 상자에 세부 정보가 채워지고 BUY를 클릭합니다.",
|
||||
"inf7": "자동 구매 정보",
|
||||
"inf8": "자동 구매 정보 닫기",
|
||||
"inf9": "'자동 구매'는 Trade Portal에서 '구매 주문'을 할 수 있는 기능입니다. 이러한 '구매 주문'은 주문한 사람만 볼 수 있습니다. 이는 '공개' 구매 주문이 아닙니다. '공개 시장 판매'는 Qortal 블록체인에 저장되며 저장되지 않습니다. 자동 구매는 UI 기능이므로 UI가 실행 중이어야 합니다.",
|
||||
"inf10": "자동 구매 주문을 하려면 '자동 구매 주문 추가' 버튼을 클릭하고 표시되는 상자를 채우십시오. 구매하려는 QORT 금액과 구매하려는 가격을 입력하십시오. 한 번 주문이 활성 상태이면 자동 구매가 최대 QORT 금액까지 설정한 가격으로 구매합니다(가장 낮은 주문에서 시작하여 장부 위로 이동).",
|
||||
"inf11": "UI를 실행 중인 상태로 두면 자동 구매가 자동으로 나머지 작업을 수행합니다!",
|
||||
"inf12": "UI에서 다른 플러그인(Q-Chat, 지갑 등)을 탐색할 수 있지만 자동 구매를 완료하려면 UI를 닫을 수 없습니다. UI를 '작업 표시줄'에 '최소화' 상태로 두거나 UI가 열려 있는 한 '패널'은 괜찮습니다. 자동 구매가 작동합니다.",
|
||||
"inf13": "자동 구매",
|
||||
"inf14": "와 함께",
|
||||
"inf15": "활성 자동 구매 주문",
|
||||
"inf16": "자동 구매"
|
||||
}
|
||||
}
|
||||
|
@ -532,8 +532,55 @@
|
||||
"cchange22": "Laster meldinger...",
|
||||
"cchange23": "Kan ikke dekryptere melding!",
|
||||
"cchange24": "Maksimalt antall tegn per melding er 255",
|
||||
"cchange25":"Saldoen din er under 4,20 QORT",
|
||||
"cchange26":"Av behovet for å bekjempe spam, vil kontoer med under 4.20 Qort-saldo bruke lang tid på å SENDE meldinger i Q-Chat. Hvis du umiddelbart ønsker å øke sendehastigheten for Q-Chat-meldinger, få over 4.20 QORT til adressen din. Dette kan gjøres med handler i handelsportalen, eller ved at en annen Qortian gir deg QORT. Når du har over 4,20 QORT på kontoen din, vil Q-Chat-meldinger være øyeblikkelig og denne dialogen vil ikke lenger show. Takk for at du forstår denne nødvendige spamforebyggingsmetoden, og vi håper du liker Qortal!"
|
||||
"cchange25": "Rediger melding",
|
||||
"cchange26": "Filstørrelse overstiger 0,5 MB",
|
||||
"cchange27": "Et registrert navn kreves for å sende bilder",
|
||||
"cchange28": "Denne filen er ikke et bilde",
|
||||
"cchange29": "Maksimal meldingsstørrelse er 1000 byte",
|
||||
"cchange30": "Laster opp bilde. Dette kan ta opptil ett minutt.",
|
||||
"cchange31": "Sletter bildet. Dette kan ta opptil ett minutt.",
|
||||
"cchange33": "Avbryt",
|
||||
"cchange34": "Denne chattemeldingen bruker en eldre meldingsversjon og kan ikke bruke denne funksjonen.",
|
||||
"cchange35": "Feil ved forsøk på å hente brukerens navn. Vennligst prøv igjen!",
|
||||
"cchange36": "Søkeresultater",
|
||||
"cchange37": "Ingen resultater funnet",
|
||||
"cchange38": "Bruker bekreftet",
|
||||
"cchange39": "Kan ikke sende en kryptert melding til denne brukeren siden de ikke har sin offentlige nøkkel på kjede.",
|
||||
"cchange40": "BILDE (klikk for å se)",
|
||||
"cchange41": "Saldoen din er under 4,20 QORT",
|
||||
"cchange42": "Av behovet for å bekjempe spam, vil kontoer med under 4.20 Qort-saldo bruke lang tid på å SENDE meldinger i Q-Chat. Hvis du umiddelbart ønsker å øke sendehastigheten for Q-Chat-meldinger, få over 4.20 QORT til adressen din. Dette kan gjøres med handler i handelsportalen, eller ved at en annen Qortian gir deg QORT. Når du har over 4,20 QORT på kontoen din, vil Q-Chat-meldinger være øyeblikkelig og denne dialogen vil ikke lenger show. Takk for at du forstår denne nødvendige spamforebyggingsmetoden, og vi håper du liker Qortal!",
|
||||
"cchange43": "Tips QORT til",
|
||||
"cchange44": "SEND MELDING",
|
||||
"cchange45": "TIPS BRUKER",
|
||||
"cchange46": "Tipsbeløp",
|
||||
"cchange47": "Tilgjengelig saldo",
|
||||
"cchange48": "Kunne ikke hente QORT-saldo. Prøv igjen!",
|
||||
"cchange49": "Gjeldende statisk avgift",
|
||||
"cchange50": "Send",
|
||||
"cchange51": "Utilstrekkelige midler!",
|
||||
"cchange52": "Ugyldig beløp!",
|
||||
"cchange53": "Mottakeren kan ikke være tom!",
|
||||
"cchange54": "Ugyldig mottaker!",
|
||||
"cchange55": "Transaksjonen er vellykket!",
|
||||
"cchange56": "Transaksjonen mislyktes!",
|
||||
"cchange57": "Brukerinformasjon",
|
||||
"cchange58": "SEND MELDING",
|
||||
"cchange59": "TIPS BRUKER",
|
||||
"cchange60": "Gruppeinvitasjoner venter",
|
||||
"cchange61": "Feil ved henting av gruppeinvitasjoner. Prøv igjen!",
|
||||
"cchange62": "Feil brukernavn og adresse er skrevet inn! Prøv igjen!",
|
||||
"cchange63": "Enter aktivert",
|
||||
"cchange64": "Enter deaktivert",
|
||||
"cchange65": "Vennligst skriv inn en mottaker",
|
||||
"cchange66": "Kan ikke hente besvart melding. Meldingen er for gammel.",
|
||||
"cchange68": "redigert",
|
||||
"cchange69": "Vis bilder automatisk",
|
||||
"cchange70": "Denne bildetypen støttes ikke",
|
||||
"cchange71": "og",
|
||||
"cchange72": "annet",
|
||||
"cchange73": "s",
|
||||
"cchange74": "reagerte med",
|
||||
"cchange90": "Ingen meldinger"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "Velkommen til Q-Chat",
|
||||
@ -556,7 +603,15 @@
|
||||
"bcchange7": "MENY",
|
||||
"bcchange8": "Kopier adresse",
|
||||
"bcchange9": "Privat melding",
|
||||
"bcchange10":"Mer"
|
||||
"bcchange10": "Mer",
|
||||
"bcchange11": "Svar",
|
||||
"bcchange12": "Rediger",
|
||||
"bcchange13": "Reaksjon",
|
||||
"bcchange14": "Videresend",
|
||||
"bcchange15": "Melding videresendt",
|
||||
"bcchange16": "Velg mottaker eller søk etter en nedenfor",
|
||||
"bcchange17": "VIDERESENDE",
|
||||
"bcchange18": "Tipsbruker"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Qortal-grupper",
|
||||
@ -616,7 +671,8 @@
|
||||
"gchange55": "Søk i privat gruppe",
|
||||
"gchange56": "Gruppenavn å søke",
|
||||
"gchange57": "Privat gruppenavn ikke funnet",
|
||||
"gchange58":"Merk at gruppenavnet må samsvare nøyaktig."
|
||||
"gchange58": "Merk at gruppenavnet må samsvare nøyaktig.",
|
||||
"gchange59": "Vis / Skjul Ticker"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "Puzzles",
|
||||
@ -814,5 +870,23 @@
|
||||
"mg59": "Avbryt deltakelsesforespørsel ble godtatt",
|
||||
"mg60": "Er du sikker på å avbryte forespørselen om å bli medlem fra dette medlemmet?",
|
||||
"mg61": "Når du trykker på bekreft, vil forespørselen om kansellering bli sendt!"
|
||||
},
|
||||
"info": {
|
||||
"inf1": "Handelsportalinformasjon",
|
||||
"inf2": "Lukk handelsportalinformasjon",
|
||||
"inf3": "Dette er et marked å KJØPE QORT med",
|
||||
"inf4": "- 'salg på åpne markeder' er KORTSALGSORDRE.",
|
||||
"inf5": "Du kan bare kjøpe EN ordre om gangen, bare klikk på en ordre du ønsker å kjøpe med",
|
||||
"inf6": "og den vil fylle ut 'KJØP KORT'-boksen med detaljene, og klikk deretter KJØP.",
|
||||
"inf7": "Autokjøpsinformasjon",
|
||||
"inf8": "Lukk autokjøpsinformasjon",
|
||||
"inf9": "'Autokjøp' er en funksjon som lar 'kjøpsordrer' plasseres på handelsportalen. Disse 'kjøpsordrene' er bare synlige av personen som legger dem. De er ikke 'offentlige' kjøpsordrer som 'open market sells' er, og er IKKE lagret på Qortal blockchain. Auto Buy er en brukergrensesnittfunksjon, og krever som sådan at brukergrensesnittet kjører.",
|
||||
"inf10": "For å legge inn en automatisk kjøpsordre klikker du på 'Legg til automatisk kjøpsordre'-knappen og fyll ut boksen som kommer opp. Skriv inn BELØPET du ønsker å KJØPE, og PRISEN du er villig til å KJØPE OPP TIL. En gang bestillingen er aktiv, vil Auto Buy kjøpe OPP TIL det beløpet på QORT for deg, til OPP TIL prisen du angir (starter med den laveste ordren og går oppover i bøkene.)",
|
||||
"inf11": "Bare LA DIN UI KJØRE og Autokjøp gjør resten automatisk!",
|
||||
"inf12": "Du KAN bla gjennom andre plugins i brukergrensesnittet (Q-Chat, lommebøker, osv.), men du KAN IKKE LUKKE UI hvis du vil at autokjøpet skal fullføres. La brukergrensesnittet være 'minimert' på 'oppgavelinjen' eller 'panel' er helt greit, så lenge brukergrensesnittet forblir ÅPENT, vil Autokjøp fungere.",
|
||||
"inf13": "Kjøp automatisk",
|
||||
"inf14": "med",
|
||||
"inf15": "Aktive automatiske kjøpsordrer",
|
||||
"inf16": "Autokjøp"
|
||||
}
|
||||
}
|
||||
|
@ -532,8 +532,55 @@
|
||||
"cchange22": "Ładowanie wiadomości...",
|
||||
"cchange23": "Nie można odszyfrować wiadomości!",
|
||||
"cchange24": "Maksymalna liczba znaków na wiadomość to 255",
|
||||
"cchange25":"Twoje saldo jest poniżej 4,20 QORT",
|
||||
"cchange26":"Ze względu na konieczność zwalczania spamu konta z saldem poniżej 4,20 Qort będą potrzebowały dużo czasu na WYSYŁANIE wiadomości w Q-Chat. Jeśli chcesz natychmiast zwiększyć prędkość wysyłania wiadomości Q-Chat, uzyskaj ponad 4,20 QORT na Twój adres. Można to zrobić za pomocą transakcji w Portalu handlowym lub za pośrednictwem innego Qortian, który przekaże Ci QORT. Gdy masz ponad 4,20 QORT na swoim koncie, wiadomości Q-Chat będą natychmiastowe i to okno dialogowe nie będzie już więcej pokaż. Dziękujemy za zrozumienie tej niezbędnej metody zapobiegania spamowi i mamy nadzieję, że spodoba ci się Qortal!"
|
||||
"cchange25": "Edytuj wiadomość",
|
||||
"cchange26": "Rozmiar pliku przekracza 0,5 MB",
|
||||
"cchange27": "Do wysyłania obrazów wymagana jest zarejestrowana nazwa",
|
||||
"cchange28": "Ten plik nie jest obrazem",
|
||||
"cchange29": "Maksymalny rozmiar wiadomości to 1000 bajtów",
|
||||
"cchange30": "Przesyłanie obrazu. Może to potrwać do jednej minuty.",
|
||||
"cchange31": "Usuwanie obrazu. Może to potrwać do jednej minuty.",
|
||||
"cchange33": "Anuluj",
|
||||
"cchange34": "Ta wiadomość czatu używa starszej wersji wiadomości i nie może korzystać z tej funkcji.",
|
||||
"cchange35": "Błąd podczas próby pobrania nazwy użytkownika. Spróbuj ponownie!",
|
||||
"cchange36": "Wyniki wyszukiwania",
|
||||
"cchange37": "Nie znaleziono wyników",
|
||||
"cchange38": "Zweryfikowany przez użytkownika",
|
||||
"cchange39": "Nie można wysłać zaszyfrowanej wiadomości do tego użytkownika, ponieważ nie ma on swojego klucza publicznego w łańcuchu.",
|
||||
"cchange40": "OBRAZ (kliknij, aby wyświetlić)",
|
||||
"cchange41": "Twoje saldo jest poniżej 4,20 QORT",
|
||||
"cchange42": "Ze względu na konieczność zwalczania spamu konta z saldem poniżej 4,20 Qort będą potrzebowały dużo czasu na WYSYŁANIE wiadomości w Q-Chat. Jeśli chcesz natychmiast zwiększyć prędkość wysyłania wiadomości Q-Chat, uzyskaj ponad 4,20 QORT na Twój adres. Można to zrobić za pomocą transakcji w Portalu handlowym lub za pośrednictwem innego Qortian, który przekaże Ci QORT. Gdy masz ponad 4,20 QORT na swoim koncie, wiadomości Q-Chat będą natychmiastowe i to okno dialogowe nie będzie już więcej pokaż. Dziękujemy za zrozumienie tej niezbędnej metody zapobiegania spamowi i mamy nadzieję, że spodoba ci się Qortal!",
|
||||
"cchange43": "Przekaż QORT do",
|
||||
"cchange44": "WYŚLIJ WIADOMOŚĆ",
|
||||
"cchange45": "WSKAZÓWKA UŻYTKOWNIKA",
|
||||
"cchange46": "Kwota napiwku",
|
||||
"cchange47": "Dostępne saldo",
|
||||
"cchange48": "Nie udało się pobrać salda QORT. Spróbuj ponownie!",
|
||||
"cchange49": "Obecna opłata statyczna",
|
||||
"cchange50": "Wyślij",
|
||||
"cchange51": "Niewystarczające środki!",
|
||||
"cchange52": "Nieprawidłowa kwota!",
|
||||
"cchange53": "Odbiornik nie może być pusty!",
|
||||
"cchange54": "Nieprawidłowy odbiorca!",
|
||||
"cchange55": "Transakcja zakończona sukcesem!",
|
||||
"cchange56": "Transakcja nie powiodła się!",
|
||||
"cchange57": "Informacje o użytkowniku",
|
||||
"cchange58": "WYŚLIJ WIADOMOŚĆ",
|
||||
"cchange59": "WSKAZÓWKA UŻYTKOWNIKA",
|
||||
"cchange60": "Oczekujące zaproszenia do grup",
|
||||
"cchange61": "Błąd podczas pobierania zaproszeń do grupy. Spróbuj ponownie!",
|
||||
"cchange62": "Wprowadzono niewłaściwą nazwę użytkownika i adres! Spróbuj ponownie!",
|
||||
"cchange63": "Wprowadź włączone",
|
||||
"cchange64": "Wprowadź wyłączone",
|
||||
"cchange65": "Wprowadź odbiorcę",
|
||||
"cchange66": "Nie można pobrać wiadomości, na którą udzielono odpowiedzi. Wiadomość jest za stara.",
|
||||
"cchange68": "edytowano",
|
||||
"cchange69": "Automatyczne wyświetlanie obrazów",
|
||||
"cchange70": "Ten typ obrazu nie jest obsługiwany",
|
||||
"cchange71": "i",
|
||||
"cchange72": "inne",
|
||||
"cchange73": "s",
|
||||
"cchange74": "zareagował z",
|
||||
"cchange90": "Brak wiadomości"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "Witamy w Q-Chat",
|
||||
@ -556,7 +603,15 @@
|
||||
"bcchange7": "MENU",
|
||||
"bcchange8": "Kopiuj Adres",
|
||||
"bcchange9": "Prywatna Wiadomość",
|
||||
"bcchange10":"Więcej"
|
||||
"bcchange10": "Więcej",
|
||||
"bcchange11": "Odpowiedz",
|
||||
"bcchange12": "Edytuj",
|
||||
"bcchange13": "Reakcja",
|
||||
"bcchange14": "Przekaż",
|
||||
"bcchange15": "Wiadomość przekazana",
|
||||
"bcchange16": "Wybierz odbiorcę lub wyszukaj poniżej",
|
||||
"bcchange17": "PRZEKAZANA",
|
||||
"bcchange18": "Użytkownik napiwku"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Grupy Qortal",
|
||||
@ -616,7 +671,8 @@
|
||||
"gchange55": "Wyszukaj grupę prywatną",
|
||||
"gchange56": "Nazwa grupy do wyszukania",
|
||||
"gchange57": "Nie znaleziono nazwy grupy prywatnej",
|
||||
"gchange58":"Zauważ, że nazwa grupy musi dokładnie pasować."
|
||||
"gchange58": "Zauważ, że nazwa grupy musi dokładnie pasować.",
|
||||
"gchange59": "Pokaż / Ukryj Znacznik"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "Zagadki",
|
||||
@ -814,5 +870,23 @@
|
||||
"mg59": "Anuluj prośbę o dołączenie pomyślnie zaakceptowaną",
|
||||
"mg60": "Czy na pewno chcesz anulować prośbę o dołączenie od tego członka?",
|
||||
"mg61": "Po naciśnięciu potwierdzenia, zostanie wysłana prośba o anulowanie dołączenia!"
|
||||
},
|
||||
"info": {
|
||||
"inf1": "Informacje o portalu handlowym",
|
||||
"inf2": "Zamknij informacje o portalu handlowym",
|
||||
"inf3": "To rynek, na którym można KUPOWAĆ QORT",
|
||||
"inf4": "- 'sprzedaże z otwartego rynku' to KILKA ZLECEŃ SPRZEDAŻY.",
|
||||
"inf5": "Możesz kupić tylko JEDNO zamówienie naraz, po prostu kliknij zamówienie, za które chcesz kupić",
|
||||
"inf6": "i wypełni pole 'KUP QORT' szczegółami, a następnie kliknij KUP.",
|
||||
"inf7": "Informacje o automatycznym zakupie",
|
||||
"inf8": "Zamknij informacje o automatycznym zakupie",
|
||||
"inf9": "„Automatyczne kupowanie” to funkcja umożliwiająca składanie „zleceń kupna” w portalu handlowym. Te „zlecenia kupna” są widoczne tylko dla osoby, która je składa. Nie są to „publiczne” zlecenia kupna, jak np. „sprzedaże z otwartego rynku” są i NIE są przechowywane w łańcuchu blokowym Qortal. Auto Buy to funkcja interfejsu użytkownika i jako taka wymaga, aby interfejs użytkownika URUCHAMIAŁ.",
|
||||
"inf10": "Aby złożyć zamówienie automatycznego zakupu, kliknij przycisk „Dodaj zamówienie automatycznego zakupu” i wypełnij pole, które się pojawi. Wprowadź KWOTĘ KWARTOŚCI, którą chcesz KUPIĆ, oraz CENĘ, do której chcesz KUPIĆ. Raz zamówienie jest aktywne, Auto Buy kupi dla ciebie DO tej kwoty QORT, po MAKSYMALNIE ustalonej cenie (zaczynając od najniższego zamówienia i przesuwając się w górę).",
|
||||
"inf11": "Po prostu ZOSTAW DZIAŁAJĄCY UI, a Auto Buy zrobi resztę automatycznie!",
|
||||
"inf12": "MOŻESZ przeglądać inne wtyczki w interfejsie użytkownika (Q-Chat, portfele itp.), ale NIE MOŻESZ ZAMKNĄĆ interfejsu użytkownika, jeśli chcesz, aby zakup automatyczny został zakończony. Pozostawienie interfejsu użytkownika „zminimalizowanego” na „pasku zadań” lub „panel” jest w porządku, o ile interfejs użytkownika pozostaje OTWARTY, Auto Buy będzie działać.",
|
||||
"inf13": "Kup automatycznie",
|
||||
"inf14": "z",
|
||||
"inf15": "Aktywne automatyczne zamówienia zakupu",
|
||||
"inf16": "Automatyczny zakup"
|
||||
}
|
||||
}
|
||||
|
@ -532,8 +532,55 @@
|
||||
"cchange22": "Carregando Mensagens...",
|
||||
"cchange23": "Não foi possível descriptografar mensagem!",
|
||||
"cchange24": "Caracteres máximos por mensagem é 255",
|
||||
"cchange25":"Seu saldo está abaixo de 4,20 QORT",
|
||||
"cchange26":"Por necessidade de combater o spam, contas com saldo abaixo de 4,20 Qort levarão muito tempo para ENVIAR mensagens no Q-Chat. Se você deseja aumentar imediatamente a velocidade de envio de mensagens do Q-Chat, obtenha acima de 4,20 QORT para o seu endereço. Isso pode ser feito com negociações no Portal de Negociações, ou por meio de outro Qortian que lhe forneça o QORT. Assim que você tiver mais de 4,20 QORT em sua conta, as mensagens do Q-Chat serão instantâneas e esta caixa de diálogo não será mais show. Obrigado por sua compreensão deste método necessário de prevenção de spam e esperamos que você goste do Qortal!"
|
||||
"cchange25": "Editar mensagem",
|
||||
"cchange26": "O tamanho do arquivo excede 0,5 MB",
|
||||
"cchange27": "Um nome registrado é necessário para enviar imagens",
|
||||
"cchange28": "Este arquivo não é uma imagem",
|
||||
"cchange29": "O tamanho máximo da mensagem é 1000 bytes",
|
||||
"cchange30": "Carregando imagem. Isso pode levar até um minuto.",
|
||||
"cchange31": "Excluindo imagem. Isso pode levar até um minuto.",
|
||||
"cchange33": "Cancelar",
|
||||
"cchange34": "Esta mensagem de bate-papo está usando uma versão de mensagem mais antiga e não pode usar este recurso.",
|
||||
"cchange35": "Erro ao tentar obter o nome do usuário. Tente novamente!",
|
||||
"cchange36": "Resultados da pesquisa",
|
||||
"cchange37": "Nenhum resultado encontrado",
|
||||
"cchange38": "Verificado pelo usuário",
|
||||
"cchange39": "Não é possível enviar uma mensagem criptografada para este usuário, pois ele não possui sua chave pública na cadeia.",
|
||||
"cchange40": "IMAGEM (clique para ver)",
|
||||
"cchange41": "Seu saldo está abaixo de 4,20 QORT",
|
||||
"cchange42": "Por necessidade de combater o spam, contas com saldo abaixo de 4,20 Qort levarão muito tempo para ENVIAR mensagens no Q-Chat. Se você deseja aumentar imediatamente a velocidade de envio de mensagens do Q-Chat, obtenha acima de 4,20 QORT para o seu endereço. Isso pode ser feito com negociações no Portal de Negociações, ou por meio de outro Qortian que lhe forneça o QORT. Assim que você tiver mais de 4,20 QORT em sua conta, as mensagens do Q-Chat serão instantâneas e esta caixa de diálogo não será mais show. Obrigado por sua compreensão deste método necessário de prevenção de spam e esperamos que você goste do Qortal!",
|
||||
"cchange43": "Dica QORT para",
|
||||
"cchange44": "ENVIAR MENSAGEM",
|
||||
"cchange45": "DICA DE USUÁRIO",
|
||||
"cchange46": "Valor da gorjeta",
|
||||
"cchange47": "Saldo disponível",
|
||||
"cchange48": "Falha ao buscar saldo QORT. Tente novamente!",
|
||||
"cchange49": "Taxa estática atual",
|
||||
"cchange50": "Enviar",
|
||||
"cchange51": "Fundos insuficientes!",
|
||||
"cchange52": "Valor inválido!",
|
||||
"cchange53": "O receptor não pode estar vazio!",
|
||||
"cchange54": "Receptor inválido!",
|
||||
"cchange55": "Transação bem-sucedida!",
|
||||
"cchange56": "Falha na transação!",
|
||||
"cchange57": "Informações do usuário",
|
||||
"cchange58": "ENVIAR MENSAGEM",
|
||||
"cchange59": "DICA DE USUÁRIO",
|
||||
"cchange60": "Convites de grupo pendentes",
|
||||
"cchange61": "Erro ao buscar convites de grupo. Tente novamente!",
|
||||
"cchange62": "Nome de usuário e endereço incorretos! Tente novamente!",
|
||||
"cchange63": "Enter ativado",
|
||||
"cchange64": "Enter desativado",
|
||||
"cchange65": "Insira um destinatário",
|
||||
"cchange66": "Não foi possível buscar a mensagem respondida. A mensagem é muito antiga.",
|
||||
"cchange68": "editado",
|
||||
"cchange69": "Mostrar imagens automaticamente",
|
||||
"cchange70": "Este tipo de imagem não é suportado",
|
||||
"cchange71": "e",
|
||||
"cchange72": "outro",
|
||||
"cchange73": "s",
|
||||
"cchange74": "reagiu com",
|
||||
"cchange90": "Sem mensagens"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "Bem-vindo ao Q-Chat",
|
||||
@ -556,7 +603,15 @@
|
||||
"bcchange7": "MENU",
|
||||
"bcchange8": "Copiar Endereço",
|
||||
"bcchange9": "Mensagem Privada",
|
||||
"bcchange10":"Mais"
|
||||
"bcchange10": "Mais",
|
||||
"bcchange11": "Responder",
|
||||
"bcchange12": "Editar",
|
||||
"bcchange13": "Reação",
|
||||
"bcchange14": "Avançar",
|
||||
"bcchange15": "Mensagem encaminhada",
|
||||
"bcchange16": "Escolha o destinatário ou procure um abaixo",
|
||||
"bcchange17": "ENCAMINHADO",
|
||||
"bcchange18": "Dica de usuário"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Grupos Qortal",
|
||||
@ -616,7 +671,8 @@
|
||||
"gchange55": "Pesquisar Grupo Privado",
|
||||
"gchange56": "Nome do grupo para pesquisar",
|
||||
"gchange57": "Nome do grupo privado não encontrado",
|
||||
"gchange58":"Observe que o nome do grupo deve corresponder exatamente."
|
||||
"gchange58": "Observe que o nome do grupo deve corresponder exatamente.",
|
||||
"gchange59": "Mostrar / Ocultar Ticker"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "Enigmas",
|
||||
@ -814,5 +870,23 @@
|
||||
"mg59": "Cancelar pedido de entrada aceito com sucesso",
|
||||
"mg60": "Tem certeza que deseja cancelar a solicitação de ingresso deste membro ?",
|
||||
"mg61": "Ao pressionar confirmar, o pedido de cancelamento de adesão será enviado!"
|
||||
},
|
||||
"info": {
|
||||
"inf1": "Informações do Portal Comercial",
|
||||
"inf2": "Fechar informações do portal comercial",
|
||||
"inf3": "Este é um mercado para COMPRAR QORT com",
|
||||
"inf4": "- 'vendas no mercado aberto' são ORDENS DE VENDA QORT.",
|
||||
"inf5": "Você só pode comprar UM pedido por vez, basta clicar em um pedido com o qual deseja comprar",
|
||||
"inf6": "e irá preencher a caixa 'COMPRAR QORT' com os detalhes, então clique em COMPRAR.",
|
||||
"inf7": "Informações de compra automática",
|
||||
"inf8": "Fechar informações de compra automática",
|
||||
"inf9": "'Compra Automática' é um recurso que permite que 'ordens de compra' sejam colocadas no Portal Comercial. Essas 'ordens de compra' são visíveis apenas pela pessoa que as faz. Elas não são ordens de compra 'públicas' como a 'vendas de mercado aberto' são e NÃO são armazenadas no blockchain Qortal. A compra automática é um recurso de interface do usuário e, como tal, requer que a interface do usuário esteja em execução.",
|
||||
"inf10": "Para fazer um pedido de compra automática, clique no botão 'Adicionar pedido de compra automática' e preencha a caixa que aparece. Insira a QUANTIDADE DE QORT que deseja COMPRAR e o PREÇO que deseja COMPRAR. Uma vez a ordem estiver ativa, a Compra Automática comprará ATÉ aquela quantidade de QORT para você, ATÉ o preço que você definiu (começando na ordem mais baixa e subindo nos livros.)",
|
||||
"inf11": "Basta DEIXAR SUA IU EM FUNCIONAMENTO e a compra automática faz o resto, automaticamente!",
|
||||
"inf12": "Você PODE navegar por outros plugins na IU (Q-Chat, carteiras, etc.), mas NÃO PODE FECHAR A IU se quiser que sua compra automática seja concluída. Deixar a IU 'minimizada' na 'barra de tarefas' ou 'painel' está bom, desde que a interface do usuário permaneça ABERTA. A compra automática funcionará.",
|
||||
"inf13": "Comprar automaticamente",
|
||||
"inf14": "com",
|
||||
"inf15": "Ordens de compra automática ativas",
|
||||
"inf16": "Compra automática"
|
||||
}
|
||||
}
|
||||
|
@ -532,8 +532,55 @@
|
||||
"cchange22": "Se incarca mesajele...",
|
||||
"cchange23": "Nu se poate decripta mesajul!",
|
||||
"cchange24": "Numarul maxim de caractere pe mesaj este 255",
|
||||
"cchange25":"Soldul dvs. este sub 4,20 QORT",
|
||||
"cchange26":"Din nevoia de a combate spam-ul, conturile cu soldul Qort sub 4,20 va dura mult timp pentru a TRIMITE mesaje în Q-Chat. Dacă doriți să creșteți imediat viteza de trimitere a mesajelor Q-Chat, obțineți peste 4,20 QORT la adresa dvs. Acest lucru se poate face cu tranzacții în Portalul de comerț sau printr-un alt Qortian care vă oferă QORT. După ce aveți peste 4,20 QORT în contul dvs., mesajele Q-Chat vor fi instantanee și acest dialog nu va mai fi Vă mulțumim pentru înțelegerea acestei metode necesare de prevenire a spamului și sperăm să vă bucurați de Qortal!"
|
||||
"cchange25": "Editați mesajul",
|
||||
"cchange26": "Dimensiunea fișierului depășește 0,5 MB",
|
||||
"cchange27": "Este necesar un nume înregistrat pentru a trimite imagini",
|
||||
"cchange28": "Acest fișier nu este o imagine",
|
||||
"cchange29": "Dimensiunea maximă a mesajului este de 1000 de octeți",
|
||||
"cchange30": "Încărcarea imaginii. Aceasta poate dura până la un minut.",
|
||||
"cchange31": "Ștergerea imaginii. Aceasta poate dura până la un minut.",
|
||||
"cchange33": "Anulați",
|
||||
"cchange34": "Acest mesaj de chat folosește o versiune mai veche a mesajului și nu poate folosi această funcție.",
|
||||
"cchange35": "Eroare la încercarea de a prelua numele utilizatorului. Vă rugăm să încercați din nou!",
|
||||
"cchange36": "Rezultatele căutării",
|
||||
"cchange37": "Nu au fost găsite rezultate",
|
||||
"cchange38": "Utilizator verificat",
|
||||
"cchange39": "Nu se poate trimite un mesaj criptat acestui utilizator deoarece nu are cheia publică în lanț.",
|
||||
"cchange40": "IMAGINE (click pentru a vizualiza)",
|
||||
"cchange41": "Soldul dvs. este sub 4,20 QORT",
|
||||
"cchange42": "Din nevoia de a combate spam-ul, conturile cu soldul Qort sub 4,20 va dura mult timp pentru a TRIMITE mesaje în Q-Chat. Dacă doriți să creșteți imediat viteza de trimitere a mesajelor Q-Chat, obțineți peste 4,20 QORT la adresa dvs. Acest lucru se poate face cu tranzacții în Portalul de comerț sau printr-un alt Qortian care vă oferă QORT. După ce aveți peste 4,20 QORT în contul dvs., mesajele Q-Chat vor fi instantanee și acest dialog nu va mai fi Vă mulțumim pentru înțelegerea acestei metode necesare de prevenire a spamului și sperăm să vă bucurați de Qortal!",
|
||||
"cchange43": "Sfat QORT către",
|
||||
"cchange44": "TRIMITĂ MESAJ",
|
||||
"cchange45": "UTILIZATOR SFAT",
|
||||
"cchange46": "Suma bacșiș",
|
||||
"cchange47": "Sold disponibil",
|
||||
"cchange48": "Preluarea soldului QORT a eșuat. Încercați din nou!",
|
||||
"cchange49": "Taxă statică actuală",
|
||||
"cchange50": "Trimite",
|
||||
"cchange51": "Fonduri insuficiente!",
|
||||
"cchange52": "Suma nevalidă!",
|
||||
"cchange53": "Receptorul nu poate fi gol!",
|
||||
"cchange54": "Receptor invalid!",
|
||||
"cchange55": "Tranzacție reușită!",
|
||||
"cchange56": "Tranzacția a eșuat!",
|
||||
"cchange57": "Informații despre utilizator",
|
||||
"cchange58": "TRIMITĂ MESAJ",
|
||||
"cchange59": "UTILIZATOR SFAT",
|
||||
"cchange60": "Invitații de grup în așteptare",
|
||||
"cchange61": "Eroare la preluarea invitațiilor de grup. Vă rugăm să încercați din nou!",
|
||||
"cchange62": "Nume de utilizator și adresă introduse greșite! Vă rugăm să încercați din nou!",
|
||||
"cchange63": "Introduceți activat",
|
||||
"cchange64": "Introducere dezactivată",
|
||||
"cchange65": "Vă rugăm să introduceți un destinatar",
|
||||
"cchange66": "Nu se poate prelua mesajul la care sa răspuns. Mesajul este prea vechi.",
|
||||
"cchange68": "editat",
|
||||
"cchange69": "Afișează automat imaginile",
|
||||
"cchange70": "Acest tip de imagine nu este acceptat",
|
||||
"cchange71": "și",
|
||||
"cchange72": "altul",
|
||||
"cchange73": "s",
|
||||
"cchange74": "a reacționat cu",
|
||||
"cchange90": "Fără mesaje"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "Bine ai venit la Q-Chat",
|
||||
@ -556,7 +603,15 @@
|
||||
"bcchange7": "MENIU",
|
||||
"bcchange8": "Copiati adresa",
|
||||
"bcchange9": "Mesaj privat",
|
||||
"bcchange10":"Mai mult"
|
||||
"bcchange10": "Mai mult",
|
||||
"bcchange11": "Răspuns",
|
||||
"bcchange12": "Editați",
|
||||
"bcchange13": "Reacție",
|
||||
"bcchange14": "Înainte",
|
||||
"bcchange15": "Mesajul redirecționat",
|
||||
"bcchange16": "Alegeți destinatarul sau căutați unul mai jos",
|
||||
"bcchange17": "REMISE",
|
||||
"bcchange18": "Sfat utilizator"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Grupuri Qortal Groups",
|
||||
@ -616,7 +671,8 @@
|
||||
"gchange55": "Căutați grup privat",
|
||||
"gchange56": "Numele grupului de căutat",
|
||||
"gchange57": "Numele grupului privat nu a fost găsit",
|
||||
"gchange58":"Rețineți că numele grupului trebuie să se potrivească exact."
|
||||
"gchange58": "Rețineți că numele grupului trebuie să se potrivească exact.",
|
||||
"gchange59": "Afișează / Ascunde Ticker"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "Puzzle-uri",
|
||||
@ -814,5 +870,23 @@
|
||||
"mg59": "Anularea cererii de aderare a fost acceptată cu succes",
|
||||
"mg60": "Sigur anulați solicitarea de alăturare de la acest membru?",
|
||||
"mg61": "La apăsarea confirmării, cererea de anulare a aderării va fi trimisă!"
|
||||
},
|
||||
"info": {
|
||||
"inf1": "Informații despre portalul comercial",
|
||||
"inf2": "Închideți informațiile portalului comercial",
|
||||
"inf3": "Aceasta este o piață cu care să CUMPĂRI QORT",
|
||||
"inf4": "- 'vânzările pe piață deschisă' sunt COMENZI DE VÂNZARE QORT.",
|
||||
"inf5": "Puteți cumpăra doar O comandă la un moment dat, pur și simplu faceți clic pe o comandă cu care doriți să cumpărați",
|
||||
"inf6": "și va completa caseta CUMPĂRĂ QORT cu detalii, apoi faceți clic pe CUMPĂRĂ.",
|
||||
"inf7": "Informații de cumpărare automată",
|
||||
"inf8": "Închideți informațiile de cumpărare automată",
|
||||
"inf9": "„Cumparare automată” este o caracteristică care permite plasarea „comenzilor de cumpărare” pe Portalul comercial. Aceste „comenzi de cumpărare” sunt vizibile numai de persoana care le plasează. Nu sunt ordine de cumpărare „publice”, precum „Vânzările pe piață deschisă” sunt și NU sunt stocate pe blockchain-ul Qortal. Cumpărarea automată este o caracteristică a interfeței de utilizare și, ca atare, necesită ca interfața de utilizare să ruleze.",
|
||||
"inf10": "Pentru a plasa o comandă de cumpărare automată, faceți clic pe butonul „Adăugați comandă de cumpărare automată” și completați caseta care apare. Introduceți SUMA DE QORT pe care doriți să-l cumpărați și PREȚUL PÂNĂ LA care sunteți dispus să îl cumpărați. O dată comanda este activă, Auto Buy va cumpăra PÂNĂ acea sumă de QORT pentru dvs., la PÂNĂ la prețul pe care l-ați stabilit (începând cu cea mai mică comandă și urcând cărțile.)",
|
||||
"inf11": "Pur și simplu LĂSAȚI INTERFAȚIA UTILIZATĂ RUNȚĂ, iar Auto Buy se ocupă de restul, automat!",
|
||||
"inf12": "Puteți răsfoi alte plugin-uri în UI (Q-Chat, portofele etc.), dar NU POȚI ÎNCHIDE IU dacă doriți ca Cumpărarea automată să fie finalizată. Lăsând interfața de utilizare „minimizată” în „bara de activități” sau „panoul” este în regulă, atâta timp cât interfața de utilizare rămâne DESCHIS, Cumpărarea automată va funcționa.",
|
||||
"inf13": "Cumpărați automat",
|
||||
"inf14": "cu",
|
||||
"inf15": "Comenzi de cumpărare automată active",
|
||||
"inf16": "Cumpărare automată"
|
||||
}
|
||||
}
|
||||
|
@ -532,8 +532,55 @@
|
||||
"cchange22": "Učitavanje poruka...",
|
||||
"cchange23": "Nemogućnost dešifrovanja poruke!",
|
||||
"cchange24": "Maksimalan broj karaktera po poruci je 255",
|
||||
"cchange25":"Vaše stanje je ispod 4,20 QORT",
|
||||
"cchange26":"Iz potrebe za borbom protiv neželjene pošte, nalozima sa ispod 4.20 QORT saldo će trebati dosta vremena da ŠALJE poruke u K-Chat-u. Ako želite da odmah povećate brzinu slanja K-Chat poruka, nabavite preko 4,20 QORT na vašu adresu. Ovo se može uraditi sa trgovinama na Trgovačkom portalu ili putem drugog Qortian-a koji vam daje KORT. Kada budete imali preko 4,20 KORT na svom nalogu, Q-Chat poruke će biti trenutne i ovaj dijalog više neće biti shov. Hvala vam na razumevanju ovog neophodnog metoda prevencije neželjene pošte i nadamo se da ćete uživati u Qortal-u!"
|
||||
"cchange25": "Izmeni poruku",
|
||||
"cchange26": "Veličina datoteke prelazi 0,5 MB",
|
||||
"cchange27": "Za slanje slika je potrebno registrovano ime",
|
||||
"cchange28": "Ova datoteka nije slika",
|
||||
"cchange29": "Maksimalna veličina poruke je 1000 bajtova",
|
||||
"cchange30": "Otpremanje slike. Ovo može potrajati do jednog minuta.",
|
||||
"cchange31": "Brisanje slike. Ovo može potrajati do jednog minuta.",
|
||||
"cchange33": "Otkaži",
|
||||
"cchange34": "Ova poruka za ćaskanje koristi stariju verziju poruke i ne može da koristi ovu funkciju.",
|
||||
"cchange35": "Greška pri pokušaju preuzimanja imena korisnika. Pokušajte ponovo!",
|
||||
"cchange36": "Rezultati pretrage",
|
||||
"cchange37": "Nisu pronađeni rezultati",
|
||||
"cchange38": "Korisnik je verifikovan",
|
||||
"cchange39": "Ne mogu poslati šifrovanu poruku ovom korisniku jer nemaju svoj javni ključ u lancu.",
|
||||
"cchange40": "SLIKA (kliknite da vidite)",
|
||||
"cchange41": "Vaše stanje je ispod 4,20 QORT",
|
||||
"cchange42": "Iz potrebe za borbom protiv neželjene pošte, nalozima sa ispod 4.20 QORT saldo će trebati dosta vremena da ŠALJE poruke u K-Chat-u. Ako želite da odmah povećate brzinu slanja K-Chat poruka, nabavite preko 4,20 QORT na vašu adresu. Ovo se može uraditi sa trgovinama na Trgovačkom portalu ili putem drugog Qortian-a koji vam daje KORT. Kada budete imali preko 4,20 KORT na svom nalogu, Q-Chat poruke će biti trenutne i ovaj dijalog više neće biti shov. Hvala vam na razumevanju ovog neophodnog metoda prevencije neželjene pošte i nadamo se da ćete uživati u Qortal-u!",
|
||||
"cchange43": "Savet za KORT",
|
||||
"cchange44": "POŠALJI PORUKU",
|
||||
"cchange45": "SAVET KORISNIKU",
|
||||
"cchange46": "Iznos napojnice",
|
||||
"cchange47": "Dostupno stanje",
|
||||
"cchange48": "Neuspešno preuzimanje KORT stanja. Pokušajte ponovo!",
|
||||
"cchange49": "Trenutna statička naknada",
|
||||
"cchange50": "Pošalji",
|
||||
"cchange51": "Nedovoljno sredstava!",
|
||||
"cchange52": "Nevažeći iznos!",
|
||||
"cchange53": "Prijemnik ne može biti prazan!",
|
||||
"cchange54": "Nevažeći prijemnik!",
|
||||
"cchange55": "Transakcija je uspela!",
|
||||
"cchange56": "Transakcija nije uspela!",
|
||||
"cchange57": "Informacije o korisniku",
|
||||
"cchange58": "POŠALJI PORUKU",
|
||||
"cchange59": "SAVET KORISNIKU",
|
||||
"cchange60": "Grupni pozivi na čekanju",
|
||||
"cchange61": "Greška pri preuzimanju grupnih pozivnica. Pokušajte ponovo!",
|
||||
"cchange62": "Uneti su pogrešno korisničko ime i adresa! Pokušajte ponovo!",
|
||||
"cchange63": "Unesite omogućeno",
|
||||
"cchange64": "Unesite onemogućeno",
|
||||
"cchange65": "Unesite primaoca",
|
||||
"cchange66": "Ne mogu preuzeti odgovor na poruku. Poruka je prestara.",
|
||||
"cchange68": "uređeno",
|
||||
"cchange69": "Automatski prikaži slike",
|
||||
"cchange70": "Ovaj tip slike nije podržan",
|
||||
"cchange71": "i",
|
||||
"cchange72": "drugo",
|
||||
"cchange73": "s",
|
||||
"cchange74": "reagovao sa",
|
||||
"cchange90": "Nema poruka"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "Dobrodošli na Q-Chat",
|
||||
@ -556,7 +603,15 @@
|
||||
"bcchange7": "MENI",
|
||||
"bcchange8": "Kopiraj Adresu",
|
||||
"bcchange9": "Privatna Poruka",
|
||||
"bcchange10":"Više"
|
||||
"bcchange10": "Više",
|
||||
"bcchange11": "Odgovori",
|
||||
"bcchange12": "Izmeni",
|
||||
"bcchange13": "Reakcija",
|
||||
"bcchange14": "Napred",
|
||||
"bcchange15": "Poruka je prosleđena",
|
||||
"bcchange16": "Izaberite primaoca ili potražite jednog ispod",
|
||||
"bcchange17": "PROSLEĐEN",
|
||||
"bcchange18": "Korisnik saveta"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Qortal Grupe",
|
||||
@ -616,7 +671,8 @@
|
||||
"gchange55": "Pretraži privatnu grupu",
|
||||
"gchange56": "Ime grupe za pretragu",
|
||||
"gchange57": "Ime privatne grupe nije pronađeno",
|
||||
"gchange58":"Imajte na umu da ime grupe mora potpuno da se podudara."
|
||||
"gchange58": "Imajte na umu da ime grupe mora potpuno da se podudara.",
|
||||
"gchange59": "Prikaži / Sakrij Oznaku"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "Slagalice",
|
||||
@ -814,5 +870,23 @@
|
||||
"mg59": "Zahtev za otkazivanje pridruživanja je uspešno prihvaćen",
|
||||
"mg60": "Da li ste sigurni da otkažete zahtev za pridruživanje ovog člana?",
|
||||
"mg61": "Pritiskom na potvrdu, zahtev za otkazivanje pridruživanja će biti poslat!"
|
||||
},
|
||||
"info": {
|
||||
"inf1": "Informacije o trgovačkom portalu",
|
||||
"inf2": "Zatvori informacije o trgovačkom portalu",
|
||||
"inf3": "Ovo je tržište za KUPOVINU KORT",
|
||||
"inf4": "- 'prodaje na otvorenom tržištu' su KORT SELL ORDERS.",
|
||||
"inf5": "Možete kupiti samo JEDNU porudžbinu odjednom, jednostavno kliknite na porudžbinu kojom želite da kupite",
|
||||
"inf6": "i popuniće polje 'BUI KORT' sa detaljima, a zatim kliknite na KUPI.",
|
||||
"inf7": "Informacije o automatskoj kupovini",
|
||||
"inf8": "Zatvori informacije o Auto Bui",
|
||||
"inf9": "'Automatska kupovina' je funkcija koja omogućava postavljanje 'naloga za kupovinu' na Trgovačkom portalu. Ove 'naloge za kupovinu' vidi samo osoba koja ih postavlja. Oni nisu 'javni' nalozi za kupovinu kao 'prodaje na otvorenom tržištu' su i NE čuvaju se na Kortal blok-čejnu. Automatska kupovina je funkcija korisničkog interfejsa i kao takva zahteva da korisnički interfejs POKREĆE.",
|
||||
"inf10": "Da biste postavili narudžbu za automatsku kupovinu, kliknite na dugme 'Dodaj narudžbu za automatsku kupovinu' i popunite polje koje se pojavi. Unesite IZNOS KORT-a koji želite da KUPITE i CENU do koje ste voljni da KUPITE. Jednom porudžbina je aktivna, Auto Bui će za vas kupiti DO te količine KORT-a, po DO ceni koju ste postavili (počevši od najnižeg reda i napredujući prema knjigama.)",
|
||||
"inf11": "Jednostavno OSTAVITE SVOJ korisnički interfejs da radi i Auto Bui će uraditi ostalo, automatski!",
|
||||
"inf12": "Možete da pretražujete druge dodatke u korisničkom interfejsu (K-Chat, novčanici, itd.), ali NE MOŽETE ZATVORITI UI ako želite da se vaša automatska kupovina završi. Ostavljanje korisničkog interfejsa 'minimiziranog' na 'traci zadataka' ili „panel“ je sasvim u redu, sve dok korisničko sučelje ostaje OTVORENO, Auto Bui će funkcionisati.",
|
||||
"inf13": "Automatski kupi",
|
||||
"inf14": "sa",
|
||||
"inf15": "Aktivne porudžbine za automatsku kupovinu",
|
||||
"inf16": "Automatska kupovina"
|
||||
}
|
||||
}
|
||||
|
@ -532,8 +532,55 @@
|
||||
"cchange22": "Загружаются сообщения...",
|
||||
"cchange23": "Невозможно расшифровать сообщение!",
|
||||
"cchange24": "Максимальное количество символов в сообщении - 255",
|
||||
"cchange25":"Ваш баланс меньше 4,20 QORT",
|
||||
"cchange26":"Из-за необходимости бороться со спамом учетным записям с балансом Qort менее 4,20 потребуется много времени для ОТПРАВКИ сообщений в Q-Chat. Если вы хотите немедленно увеличить скорость отправки сообщений Q-Chat, получите более 4,20 QORT на ваш адрес. Это можно сделать с помощью сделок на Торговом портале или с помощью другого Qortian, который предоставит вам QORT. Как только на вашем счету будет более 4,20 QORT, сообщения Q-Chat будут мгновенными, и этот диалог больше не будет show. Благодарим вас за понимание этого необходимого метода предотвращения спама, и мы надеемся, что вам понравится Qortal!"
|
||||
"cchange25": "Редактировать сообщение",
|
||||
"cchange26": "Размер файла превышает 0,5 МБ",
|
||||
"cchange27": "Для отправки изображений требуется зарегистрированное имя",
|
||||
"cchange28": "Этот файл не является изображением",
|
||||
"cchange29": "Максимальный размер сообщения 1000 байт",
|
||||
"cchange30": "Идет загрузка изображения. Это может занять до одной минуты.",
|
||||
"cchange31": "Удаление изображения. Это может занять до одной минуты.",
|
||||
"cchange33": "Отмена",
|
||||
"cchange34": "Это сообщение чата использует старую версию сообщения и не может использовать эту функцию.",
|
||||
"cchange35": "Ошибка при попытке получить имя пользователя. Повторите попытку!",
|
||||
"cchange36": "Результаты поиска",
|
||||
"cchange37": "Результаты не найдены",
|
||||
"cchange38": "Пользователь проверен",
|
||||
"cchange39": "Невозможно отправить зашифрованное сообщение этому пользователю, так как у него нет открытого ключа в цепочке.",
|
||||
"cchange40": "ИЗОБРАЖЕНИЕ (щелкните для просмотра)",
|
||||
"cchange41": "Ваш баланс меньше 4,20 QORT",
|
||||
"cchange42": "Из-за необходимости бороться со спамом учетным записям с балансом Qort менее 4,20 потребуется много времени для ОТПРАВКИ сообщений в Q-Chat. Если вы хотите немедленно увеличить скорость отправки сообщений Q-Chat, получите более 4,20 QORT на ваш адрес. Это можно сделать с помощью сделок на Торговом портале или с помощью другого Qortian, который предоставит вам QORT. Как только на вашем счету будет более 4,20 QORT, сообщения Q-Chat будут мгновенными, и этот диалог больше не будет show. Благодарим вас за понимание этого необходимого метода предотвращения спама, и мы надеемся, что вам понравится Qortal!",
|
||||
"cchange43": "Направить QORT на",
|
||||
"cchange44": "ОТПРАВИТЬ СООБЩЕНИЕ",
|
||||
"cchange45": "СОВЕТЫ ПОЛЬЗОВАТЕЛЯ",
|
||||
"cchange46": "Сумма чаевых",
|
||||
"cchange47": "Доступный баланс",
|
||||
"cchange48": "Не удалось получить баланс QORT. Повторите попытку!",
|
||||
"cchange49": "Текущая статическая комиссия",
|
||||
"cchange50": "Отправить",
|
||||
"cchange51": "Недостаточно средств!",
|
||||
"cchange52": "Неверная сумма!",
|
||||
"cchange53": "Ресивер не может быть пустым!",
|
||||
"cchange54": "Неверный получатель!",
|
||||
"cchange55": "Транзакция прошла успешно!",
|
||||
"cchange56": "Ошибка транзакции!",
|
||||
"cchange57": "Информация о пользователе",
|
||||
"cchange58": "ОТПРАВИТЬ СООБЩЕНИЕ",
|
||||
"cchange59": "ПОЛЬЗОВАТЕЛЬ СОВЕТ",
|
||||
"cchange60": "Приглашение в группу ожидает",
|
||||
"cchange61": "Ошибка при получении приглашений в группу. Повторите попытку!",
|
||||
"cchange62": "Введено неверное имя пользователя и адрес! Пожалуйста, попробуйте еще раз!",
|
||||
"cchange63": "Введите Включено",
|
||||
"cchange64": "Введите отключено",
|
||||
"cchange65": "Пожалуйста, введите получателя",
|
||||
"cchange66": "Невозможно получить ответное сообщение. Сообщение слишком старое.",
|
||||
"cchange68": "отредактировано",
|
||||
"cchange69": "Автоматическое отображение изображений",
|
||||
"cchange70": "Этот тип изображения не поддерживается",
|
||||
"cchange71": "и",
|
||||
"cchange72": "другое",
|
||||
"cchange73": "с",
|
||||
"cchange74": "отреагировал",
|
||||
"cchange90": "Нет сообщений"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "Добро пожаловать в Q-Chat",
|
||||
@ -556,7 +603,15 @@
|
||||
"bcchange7": "МЕНЮ",
|
||||
"bcchange8": "Копировать адрес",
|
||||
"bcchange9": "Приватное сообщение",
|
||||
"bcchange10":"Более"
|
||||
"bcchange10": "Более",
|
||||
"bcchange11": "Ответить",
|
||||
"bcchange12": "Редактировать",
|
||||
"bcchange13": "Реакция",
|
||||
"bcchange14": "Вперед",
|
||||
"bcchange15": "Сообщение переадресовано",
|
||||
"bcchange16": "Выберите получателя или найдите его ниже",
|
||||
"bcchange17": "ПЕРЕДАНО",
|
||||
"bcchange18": "Подсказка пользователю"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Qortal группы",
|
||||
@ -616,7 +671,8 @@
|
||||
"gchange55": "Поиск в закрытой группе",
|
||||
"gchange56": "Имя группы для поиска",
|
||||
"gchange57": "Имя частной группы не найдено",
|
||||
"gchange58":"Обратите внимание, что название группы должно точно совпадать."
|
||||
"gchange58": "Обратите внимание, что название группы должно точно совпадать.",
|
||||
"gchange59": "Показать/скрыть бегущую строку"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "Головоломки",
|
||||
@ -814,5 +870,23 @@
|
||||
"mg59": "Запрос на отмену присоединения успешно принят",
|
||||
"mg60": "Вы уверены, что отмените запрос на вступление от этого участника?",
|
||||
"mg61": "При нажатии кнопки подтверждения будет отправлен запрос на отмену присоединения!"
|
||||
},
|
||||
"info": {
|
||||
"inf1": "Информация о торговом портале",
|
||||
"inf2": "Информация о закрытом торговом портале",
|
||||
"inf3": "Это рынок для ПОКУПКИ QORT",
|
||||
"inf4": "- 'продажи на открытом рынке' являются КВАРТАЛЬНЫМИ ОРДЕНАМИ НА ПРОДАЖУ.",
|
||||
"inf5": "Вы можете купить только ОДИН ордер за раз, просто нажмите на ордер, который вы хотите купить",
|
||||
"inf6": "и он заполнит поле 'КУПИТЬ QORT' деталями, затем нажмите КУПИТЬ.",
|
||||
"inf7": "Информация об автоматической покупке",
|
||||
"inf8": "Закрыть информацию об автопокупке",
|
||||
"inf9": "'Автоматическая покупка' – это функция, которая позволяет размещать 'ордера на покупку' на Торговом портале. Эти 'ордера на покупку' видны только тому, кто их размещает. Они не являются 'общедоступными' ордерами на покупку, как «Продажи на открытом рынке» НЕ хранятся в блокчейне Qortal. Автопокупка — это функция пользовательского интерфейса, поэтому требуется, чтобы пользовательский интерфейс был РАБОТАЕТ.",
|
||||
"inf10": "Чтобы разместить ордер на автоматическую покупку, нажмите кнопку «Добавить ордер на автоматическую покупку» и заполните появившееся поле. Введите КОЛИЧЕСТВО КАРТ, которое вы хотите КУПИТЬ, и ЦЕНУ, ДО КОТОРОЙ вы готовы КУПИТЬ. Один раз ордер активен, Auto Buy купит для вас ДО этого количества QORT по установленной вами цене (начиная с самого низкого ордера и продвигаясь вверх по книгам.)",
|
||||
"inf11": "ПРОСТО ОСТАВЬТЕ ИНТЕРФЕЙС РАБОТАЮЩИМ, и Auto Buy сделает все остальное автоматически!",
|
||||
"inf12": "Вы МОЖЕТЕ просматривать другие плагины в пользовательском интерфейсе (Q-Chat, кошельки и т. д.), но вы НЕ МОЖЕТЕ ЗАКРЫТЬ ИНТЕРФЕЙС, если хотите, чтобы ваша автоматическая покупка завершилась. Оставив пользовательский интерфейс «свернутым» на «панели задач» или «панель» в порядке, пока пользовательский интерфейс остается ОТКРЫТЫМ, автопокупка будет работать.",
|
||||
"inf13": "Автоматически покупать",
|
||||
"inf14": "с",
|
||||
"inf15": "Активные ордера на автоматическую покупку",
|
||||
"inf16": "Автопокупка"
|
||||
}
|
||||
}
|
||||
|
@ -571,14 +571,24 @@
|
||||
"cchange62": "Wrong Username and Address Inputted! Please try again!",
|
||||
"cchange63": "Enter Enabled",
|
||||
"cchange64": "Enter Disabled",
|
||||
"cchange65": "Uploading attachment. This may take up to one minute.",
|
||||
"cchange66": "Deleting attachment. This may take up to one minute.",
|
||||
"cchange67": "Attachment size exceeds 1 MB",
|
||||
"cchange65": "Please enter a recipient",
|
||||
"cchange66": "Cannot fetch replied-to message. Message is too old.",
|
||||
"cchange68": "edited",
|
||||
"cchange69": "Are you sure you want to delete this image?",
|
||||
"cchange70": "Are you sure you want to delete this attachment?",
|
||||
"cchange71": "This image has been deleted",
|
||||
"cchange72": "This attachment has been deleted"
|
||||
"cchange69": "Auto-view images",
|
||||
"cchange70": "This image type is not supported",
|
||||
"cchange71": "and",
|
||||
"cchange72": "other",
|
||||
"cchange73": "s",
|
||||
"cchange74": "reacted with",
|
||||
"cchange75": "Uploading attachment. This may take up to one minute.",
|
||||
"cchange76": "Deleting attachment. This may take up to one minute.",
|
||||
"cchange77": "Attachment size exceeds 1 MB",
|
||||
"cchange78": "Are you sure you want to delete this image?",
|
||||
"cchange79": "Are you sure you want to delete this attachment?",
|
||||
"cchange80": "This image has been deleted",
|
||||
"cchange81": "This image type is not supported",
|
||||
"cchange82": "This attachment has been deleted",
|
||||
"cchange90": "No messages"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "Welcome to Q-Chat",
|
||||
@ -669,7 +679,8 @@
|
||||
"gchange55": "Search Private Group",
|
||||
"gchange56": "Group Name To Search",
|
||||
"gchange57": "Private Group Name Not Found",
|
||||
"gchange58": "Note that group name must exact match."
|
||||
"gchange58": "Note that group name must exact match.",
|
||||
"gchange59": "Show / Hide Ticker"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "Puzzles",
|
||||
@ -867,5 +878,23 @@
|
||||
"mg59": "Cancel Join Request Successfully Accepted",
|
||||
"mg60": "Are you sure to cancel the join request from this member ?",
|
||||
"mg61": "On pressing confirm, the cancel join request will be sent!"
|
||||
},
|
||||
"info": {
|
||||
"inf1": "Trade Portal Information",
|
||||
"inf2": "Close Trade Portal Info",
|
||||
"inf3": "This is a market to BUY QORT with",
|
||||
"inf4": "- 'open market sells' are QORT SELL ORDERS.",
|
||||
"inf5": "You can only buy ONE order at a time simply click an order that you wish to buy with",
|
||||
"inf6": "and it will populate the 'BUY QORT' box with the details, then click BUY.",
|
||||
"inf7": "Auto Buy Information",
|
||||
"inf8": "Close Auto Buy Info",
|
||||
"inf9": "'Auto Buy' is a feature that allows 'buy orders' to be placed on the Trade Portal. These 'buy orders' are only visible by the person placing them. They are not 'public' buy orders like the 'open market sells' are, and are NOT stored on the Qortal blockchain. Auto Buy is a UI feature, and as such requires that the UI is RUNNING.",
|
||||
"inf10": "To place an Auto Buy order click 'Add Auto Buy Order' button and fill out the box that comes up. Input the AMOUNT OF QORT you wish to BUY, and the PRICE you are willing to BUY UP TO. Once the order is active, Auto Buy will buy UP TO that amount of QORT for you, at UP TO the price you set (starting at the lowest order and moving up the books.)",
|
||||
"inf11": "Simply LEAVE YOUR UI RUNNING and Auto Buy does the rest, automatically!",
|
||||
"inf12": "You CAN browse other plugins in the UI (Q-Chat, wallets, etc.) but you CANNOT CLOSE THE UI if you want your Auto Buy to complete. Leaving the UI 'minimized' on the 'taskbar' or 'panel' is just fine, as long as the UI remains OPEN Auto Buy will function.",
|
||||
"inf13": "Automatically buy",
|
||||
"inf14": "with",
|
||||
"inf15": "Active Auto Buy Orders",
|
||||
"inf16": "Auto Buy"
|
||||
}
|
||||
}
|
@ -36,7 +36,7 @@
|
||||
"puzzles": "益智游戏",
|
||||
"nodemanagement": "节点管理",
|
||||
"trading": "贸易",
|
||||
"groups":"团体"
|
||||
"groups": "群组"
|
||||
},
|
||||
"login": {
|
||||
"login": "登入",
|
||||
@ -68,7 +68,7 @@
|
||||
"clicknext": " ▼▼▼点击下一步创建你的Qortal账号▼▼▼",
|
||||
"ready": "您的帐户即将创建成功, 它将保存在此浏览器中。 如果您不希望将新帐户保存在浏览器中,可以取消勾选下面的选项。 您仍可透过使用创建帐户时载的钱包备份文件进行的登入。",
|
||||
"welmessage": "欢迎来到Qortal",
|
||||
"pleaseenter":"请输入密码!",
|
||||
"pleaseenter": "请密码!",
|
||||
"notmatch": "密码不一致!",
|
||||
"lessthen8": "你的密码长度少于8位! 我们不建议使用,但你仍可继续使用此密码。",
|
||||
"lessthen8-2": "你的密码长度少于8位!",
|
||||
@ -81,7 +81,7 @@
|
||||
"backup2": "请小心保存钱包备份文件,并谨记之前设置好的密码。否则你将会失去这个钱包的所有控制权,请务必将备份文件放在不同的存储装置上",
|
||||
"savewallet": "下载并保存钱包备份文件",
|
||||
"created1": "你的账号已创建成功",
|
||||
"created2":" 并会保存在UI上.",
|
||||
"created2": "并会储存在UI上.",
|
||||
"downloadbackup": "下载钱包备份文件",
|
||||
"passwordhint": "密码必须至少为8 个字符。"
|
||||
},
|
||||
@ -155,10 +155,10 @@
|
||||
"close": "关闭",
|
||||
"back": "上一步",
|
||||
"next": "下一步",
|
||||
"create":"新建",
|
||||
"create": "创建",
|
||||
"continue": "继续",
|
||||
"save": "保存",
|
||||
"balance":"信用",
|
||||
"balance": "余额",
|
||||
"balances": "您的钱包余额",
|
||||
"update": "更新钱包余额"
|
||||
},
|
||||
@ -276,9 +276,9 @@
|
||||
"wchange47": "地址簿",
|
||||
"wchange48": "此通讯录为空!",
|
||||
"wchange49": "加至地址簿",
|
||||
"wchange50":"名称不能为空!",
|
||||
"wchange51":"地址不能为空!",
|
||||
"wchange52":"添加成功!",
|
||||
"wchange50": "名称不能为空!",
|
||||
"wchange51": "地址不能为空!",
|
||||
"wchange52": "添加成功!",
|
||||
"wchange53": "导入通讯录",
|
||||
"wchange54": "导出通讯录",
|
||||
"wchange55": "您现有的通讯簿将被删除并从新创建的备份中。",
|
||||
@ -351,7 +351,7 @@
|
||||
"rchange12": "正在添加中...",
|
||||
"rchange13": "正在添加铸币密钥/赞助码",
|
||||
"rchange14": "添加",
|
||||
"rchange15":"此账号并没有任何奖励分享",
|
||||
"rchange15": "此账号并没有任何铸币密钥",
|
||||
"rchange16": "个人铸币密钥",
|
||||
"rchange17": "移除",
|
||||
"rchange18": "不能创建多个铸币密钥!",
|
||||
@ -491,7 +491,7 @@
|
||||
"dchange4": "搜寻",
|
||||
"dchange5": "已注册名称",
|
||||
"dchange6": "服务",
|
||||
"dchange7":"标识符",
|
||||
"dchange7": "标签",
|
||||
"dchange8": "操作",
|
||||
"dchange9": "此节点已下载的资料",
|
||||
"dchange10": "资料名称不能为空!",
|
||||
@ -508,7 +508,7 @@
|
||||
"dchange21": "尝试删除此资源时出错。 请再试一次"
|
||||
},
|
||||
"chatpage": {
|
||||
"cchange1":"新的私人对话",
|
||||
"cchange1": "建立新的私人对话",
|
||||
"cchange2": "加载中...",
|
||||
"cchange3": "已封锁的用户名单",
|
||||
"cchange4": "新的信息",
|
||||
@ -532,15 +532,62 @@
|
||||
"cchange22": "正在加载信息内容...",
|
||||
"cchange23": "未能解密信息内容!",
|
||||
"cchange24": "每个信息的最大字符数为255",
|
||||
"cchange25":"您的余额低于 4.20 QORT",
|
||||
"cchange26":"出于打击垃圾邮件的需要,Qort余额低于4.20的账户在Q-Chat中发送消息需要很长时间。如果你想立即提高Q-Chat消息的发送速度,请获取4.20以上 QORT 到您的地址。这可以通过贸易门户中的交易来完成,或者通过另一个 Qortian 给您 QORT。一旦您的帐户中有超过 4.20 QORT,Q-Chat 消息将是即时的并且此对话框将不再存在 显示。感谢您了解这种必要的垃圾邮件预防方法,我们希望您喜欢 Qortal!"
|
||||
"cchange25": "编辑消息",
|
||||
"cchange26": "文件大小超过0.5 MB",
|
||||
"cchange27": "发送图片需要注册名称",
|
||||
"cchange28": "这个文件不是图片",
|
||||
"cchange29": "最大消息大小为1000 字节",
|
||||
"cchange30": "正在上传图片。这可能需要一分钟。",
|
||||
"cchange31": "正在删除图像。这可能需要一分钟。",
|
||||
"cchange33": "取消",
|
||||
"cchange34": "此聊天消息使用的是旧消息版本,无法使用此功能。",
|
||||
"cchange35": "获取用户名时出错,请重试!",
|
||||
"cchange36": "搜索结果",
|
||||
"cchange37": "未找到结果",
|
||||
"cchange38": "用户已验证",
|
||||
"cchange39": "无法向该用户发送加密消息,因为他们的公钥不在链上。",
|
||||
"cchange40": "图像(点击查看)",
|
||||
"cchange41": "您的QORT余额低于4.20",
|
||||
"cchange42": "出于打击垃圾邮件的需要,Qort余额低于4.20的账户在Q-Chat中发送消息需要很长时间。如果你想立即提高Q-Chat消息的发送速度,请获取4.20以上QORT 到您的地址。这可以通过贸易门户中的交易来完成,或者通过另一个Qortian 给您QORT。一旦您的帐户中有超过4.20 QORT,Q-Chat 消息将是即时的并且此对话框将不再显示。感谢您了解这种必要的垃圾邮件预防方法,我们希望您喜欢Qortal!",
|
||||
"cchange43": "打赏QORT给",
|
||||
"cchange44": "发送消息",
|
||||
"cchange45": "提示用户",
|
||||
"cchange46": "打赏金额",
|
||||
"cchange47": "可用余额",
|
||||
"cchange48": "无法获取QORT 余额。请重试!",
|
||||
"cchange49": "当前手续费",
|
||||
"cchange50": "发送",
|
||||
"cchange51": "余额不足!",
|
||||
"cchange52": "无效金额!",
|
||||
"cchange53": "接收方不能为空!",
|
||||
"cchange54": "接收者无效!",
|
||||
"cchange55": "交易成功!",
|
||||
"cchange56": "交易失败!",
|
||||
"cchange57": "用户信息",
|
||||
"cchange58": "发送消息",
|
||||
"cchange59": "提示用户",
|
||||
"cchange60": "群组邀请待定",
|
||||
"cchange61": "获取群组邀请时出错。请重试!",
|
||||
"cchange62": "用户名和地址输入错误!请重试!",
|
||||
"cchange63": "启用Enter键直接发送信息",
|
||||
"cchange64": "禁用Enter键直接发送信息",
|
||||
"cchange65": "请输入收件人",
|
||||
"cchange66": "无法获取回覆消息。消息太旧了。",
|
||||
"cchange68": "编辑",
|
||||
"cchange69": "自动显示图像",
|
||||
"cchange70": "不支援此类型图像",
|
||||
"cchange71": "和",
|
||||
"cchange72": "其他",
|
||||
"cchange73": "的",
|
||||
"cchange74": "心情回应",
|
||||
"cchange90": "没有消息"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "欢迎来到Q-Chat",
|
||||
"wcchange2":"新的私人对话",
|
||||
"wcchange2": "建立新的私人对话",
|
||||
"wcchange3": "输入对方的名称或钱包地址并建立私人对话!",
|
||||
"wcchange4": "名称/ 钱包地址",
|
||||
"wcchange5":"信息内容...",
|
||||
"wcchange5": "输入内容...",
|
||||
"wcchange6": "传送",
|
||||
"wcchange7": "无效的名称/ 钱包地址, 检查名称/ 钱包地址后再次尝试...",
|
||||
"wcchange8": "成功发送信息!",
|
||||
@ -556,7 +603,15 @@
|
||||
"bcchange7": "菜单",
|
||||
"bcchange8": "复制地址",
|
||||
"bcchange9": "私人信息",
|
||||
"bcchange10":"更多的"
|
||||
"bcchange10": "更多",
|
||||
"bcchange11": "回覆",
|
||||
"bcchange12": "修改",
|
||||
"bcchange13": "表情反应",
|
||||
"bcchange14": "转发",
|
||||
"bcchange15": "信息已转发",
|
||||
"bcchange16": "选择收件人或在下方搜寻收件人",
|
||||
"bcchange17": "已转发",
|
||||
"bcchange18": "打赏"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Qortal群组",
|
||||
@ -614,9 +669,10 @@
|
||||
"gchange53": "成员",
|
||||
"gchange54": "成员数量",
|
||||
"gchange55": "搜索私人群组",
|
||||
"gchange56":"要搜索的组名",
|
||||
"gchange57":"未找到私人组名",
|
||||
"gchange58":"注意组名必须完全匹配。"
|
||||
"gchange56": "要搜索的群组名称",
|
||||
"gchange57": "未找到私人群组名称",
|
||||
"gchange58": "注意群组名称必须完全匹配。",
|
||||
"gchange59": "显示/隐藏代码"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "益智游戏",
|
||||
@ -690,9 +746,9 @@
|
||||
"transactions": {
|
||||
"amount": "数量",
|
||||
"to": "收款人",
|
||||
"declined":"交易已被用戶拒绝!",
|
||||
"namedialog1":"你正在註冊以下名稱:",
|
||||
"namedialog2":"點擊確認後, 名稱將被註冊!",
|
||||
"declined": "交易被用户拒绝!",
|
||||
"namedialog1": "你正在注册以下名称:",
|
||||
"namedialog2": "点击确认后, 名称将被注册!",
|
||||
"groupdialog1": "你正在请求加入下列群组:",
|
||||
"groupdialog2": "点击确认后,加入请求将会被送出!",
|
||||
"groupdialog3": "你正在请求离开下列群组:",
|
||||
@ -704,7 +760,7 @@
|
||||
"rewarddialog3": "如果是的话,请保存下面的铸币密钥并添加到任何节点上,以允许它代表您铸币.",
|
||||
"rewarddialog4": "点击确认后,铸币密钥将会创建,但你必须将该密钥添加到节点中才能成功铸币并获得相对应的奖励.",
|
||||
"rewarddialog5": "您正在删除与此账号关联的铸币密钥:",
|
||||
"rewarddialog6":"点击确认后,铸币密钥将被移除並失效。"
|
||||
"rewarddialog6": "点击确认后,铸币密钥将被移除并失效。"
|
||||
},
|
||||
"sponsorshipspage": {
|
||||
"schange1": "目前有效的赞助记录",
|
||||
@ -716,9 +772,9 @@
|
||||
"schange7": "已完成",
|
||||
"schange8": "钱包地址",
|
||||
"schange9": "您目前没有有效的赞助记录",
|
||||
"schange10":"公钥查找",
|
||||
"schange10": "查询公钥",
|
||||
"schange11": "复制",
|
||||
"schange12":"地址到公钥转换器",
|
||||
"schange12": "查询钱包地址对应公钥",
|
||||
"schange13": "输入地址",
|
||||
"schange14": "进行中",
|
||||
"schange15": "整理起来",
|
||||
@ -755,12 +811,12 @@
|
||||
"managegroup": {
|
||||
"mg1": "群组成员",
|
||||
"mg2": "邀请加入群组",
|
||||
"mg3":"组管理员",
|
||||
"mg4":"更新组",
|
||||
"mg3": "群组管理员",
|
||||
"mg4": "更新群信息",
|
||||
"mg5": "关闭管理组",
|
||||
"mg6":"禁令",
|
||||
"mg6": "禁止",
|
||||
"mg7": "踢",
|
||||
"mg8":"组号",
|
||||
"mg8": "群组代号",
|
||||
"mg9": "已加入",
|
||||
"mg10": "添加群组管理员",
|
||||
"mg11": "您确定将此成员添加到管理员吗?",
|
||||
@ -776,28 +832,28 @@
|
||||
"mg21": "封禁原因",
|
||||
"mg22": "您确定要将此成员加入群组吗?",
|
||||
"mg23": "按下确认后,将发送封禁请求!",
|
||||
"mg24":"永远",
|
||||
"mg24": "永久",
|
||||
"mg25": "被禁止的会员",
|
||||
"mg26":"取消禁令",
|
||||
"mg26": "取消禁止",
|
||||
"mg27": "禁止到期",
|
||||
"mg28":"取消群成员封禁",
|
||||
"mg29":"你确定要取消对这个成员的群禁言吗?",
|
||||
"mg28": "取消群组成员封禁",
|
||||
"mg29": "你确定要取消对这个成员的群组禁言吗?",
|
||||
"mg30": "按下确认后,将发送取消禁令请求!",
|
||||
"mg31": "将成员踢出群组",
|
||||
"mg32": "踢球原因",
|
||||
"mg33": "您确定将该成员踢出群吗?",
|
||||
"mg34": "按下确认后,将发送踢球请求!",
|
||||
"mg35":"没有公开组邀请",
|
||||
"mg36":"你的公开组邀请",
|
||||
"mg35": "没有公开群组邀请",
|
||||
"mg36": "你的公开群组邀请",
|
||||
"mg37": "邀请地址或姓名",
|
||||
"mg38": "邀请到期时间",
|
||||
"mg39": "所有字段都需要",
|
||||
"mg40": "您确定邀请该成员加入群组吗?",
|
||||
"mg41": "按下确认后,将发送邀请请求!",
|
||||
"mg42":"组类型",
|
||||
"mg42": "群组类型",
|
||||
"mg43": "邀请到期",
|
||||
"mg44":"公共组",
|
||||
"mg45":"私有组",
|
||||
"mg44": "公开群组",
|
||||
"mg45": "私人群组",
|
||||
"mg46": "取消邀请",
|
||||
"mg47": "取消群邀请",
|
||||
"mg48": "您确定要取消对该会员的邀请吗?",
|
||||
@ -814,5 +870,23 @@
|
||||
"mg59": "取消加入请求已成功接受",
|
||||
"mg60": "您确定要取消该会员的加入请求吗?",
|
||||
"mg61": "按下确认后,将发送取消加入请求!"
|
||||
},
|
||||
"info": {
|
||||
"inf1": "贸易门户信息",
|
||||
"inf2": "关闭交易门户信息",
|
||||
"inf3": "这是购买QORT 的市场",
|
||||
"inf4": "- '公开市场卖出'是QORT 卖出订单。",
|
||||
"inf5": "您一次只能购买一个订单,只需点击您希望购买的订单",
|
||||
"inf6": "它将用详细信息填充'购买QORT' 框,然后单击购买。",
|
||||
"inf7": "什么是自动购买(Auto Buy)?",
|
||||
"inf8": "关闭",
|
||||
"inf9": "'Auto Buy'是一项允许在贸易门户网站上添加'买单'的功能。这些'买单'仅限自己可见。你不会在贸易门户上看到,并且不会存储在Qortal 区块链上。自动购买是一个UI 功能,因此需要保持UI 运行。",
|
||||
"inf10": "要放置自动购买订单,请单击“添加自动购买订单”按钮并填写相关资料。输入您希望购买的QORT 数量,以及您愿意购买的价格。一旦订单有效,Auto Buy 将为您购买对应数量的QORT,价格上限为您设定的价格(从最低订单开始向上移动。)",
|
||||
"inf11": "只需让您的UI 保持运行状态,Auto Buy 会自动完成剩下的工作!",
|
||||
"inf12": "您可以浏览UI 中的其他插件(Q-Chat、钱包等),但如果您希望完成自动购买,则不能关闭UI。将UI 保留在'任务栏'上'最小化'或“面板”,只要UI 保持打开状态,Auto Buy 就会起作用。",
|
||||
"inf13": "自动购买",
|
||||
"inf14": "与",
|
||||
"inf15": "有效的自动购买订单",
|
||||
"inf16": "自动购买"
|
||||
}
|
||||
}
|
||||
|
@ -36,7 +36,7 @@
|
||||
"puzzles": "益智遊戲",
|
||||
"nodemanagement": "節點管理",
|
||||
"trading": "貿易",
|
||||
"groups":"團體"
|
||||
"groups": "群組"
|
||||
},
|
||||
"login": {
|
||||
"login": "登入",
|
||||
@ -68,7 +68,7 @@
|
||||
"clicknext": "▼▼▼點擊下一步創建你的Qortal賬號▼▼▼",
|
||||
"ready": "您的帳戶即將創建成功, 它將保存在此瀏覽器中。 如果您不希望將新帳戶保存在瀏覽器中,可以取消勾選下面的選項。 您仍可透過使用創建帳戶時載的錢包備份文件進行的登入。",
|
||||
"welmessage": "歡迎來到 Qortal",
|
||||
"pleaseenter":"請輸入密碼!",
|
||||
"pleaseenter": "請密碼!",
|
||||
"notmatch": "密碼不一致!",
|
||||
"lessthen8": "你的密碼長度少於8位! 我們不建議使用,但你仍可繼續使用此密碼。",
|
||||
"lessthen8-2": "你的密碼長度少於8位!",
|
||||
@ -158,7 +158,7 @@
|
||||
"create": "創建",
|
||||
"continue": "繼續",
|
||||
"save": "保存",
|
||||
"balance":"信用",
|
||||
"balance": "餘額",
|
||||
"balances": "您的錢包餘額",
|
||||
"update": "更新錢包餘額"
|
||||
},
|
||||
@ -491,7 +491,7 @@
|
||||
"dchange4": "搜尋",
|
||||
"dchange5": "已註冊名稱",
|
||||
"dchange6": "服務",
|
||||
"dchange7":"標識符",
|
||||
"dchange7": "標籤",
|
||||
"dchange8": "操作",
|
||||
"dchange9": "此節點已下載的資料",
|
||||
"dchange10": "資料名稱不能為空!",
|
||||
@ -532,8 +532,55 @@
|
||||
"cchange22": "正在加載信息内容...",
|
||||
"cchange23": "未能解密信息内容!",
|
||||
"cchange24": "每個信息的最大字符數為 255",
|
||||
"cchange25":"您的餘額低於 4.20 QORT",
|
||||
"cchange26":"出於打擊垃圾郵件的需要,Qort餘額低於4.20的賬戶在Q-Chat中發送消息需要很長時間。如果你想立即提高Q-Chat消息的發送速度,請獲取4.20以上 QORT 到您的地址。這可以通過貿易門戶中的交易來完成,或者通過另一個 Qortian 給您 QORT。一旦您的帳戶中有超過 4.20 QORT,Q-Chat 消息將是即時的並且此對話框將不再存在 顯示。感謝您了解這種必要的垃圾郵件預防方法,我們希望您喜歡 Qortal!"
|
||||
"cchange25": "編輯消息",
|
||||
"cchange26": "文件大小超過 0.5 MB",
|
||||
"cchange27": "發送圖片需要註冊名稱",
|
||||
"cchange28": "這個文件不是圖片",
|
||||
"cchange29": "最大消息大小為 1000 字節",
|
||||
"cchange30": "正在上傳圖片。這可能需要一分鐘。",
|
||||
"cchange31": "正在刪除圖像。這可能需要一分鐘。",
|
||||
"cchange33": "取消",
|
||||
"cchange34": "此聊天消息使用的是舊消息版本,無法使用此功能。",
|
||||
"cchange35": "獲取用戶名時出錯,請重試!",
|
||||
"cchange36": "搜索結果",
|
||||
"cchange37": "未找到結果",
|
||||
"cchange38": "用戶已驗證",
|
||||
"cchange39": "無法向該用戶發送加密消息,因為他們的公鑰不在鏈上。",
|
||||
"cchange40": "圖像(點擊查看)",
|
||||
"cchange41": "您的QORT餘額低於4.20",
|
||||
"cchange42": "出於打擊垃圾郵件的需要,Qort餘額低於4.20的賬戶在Q-Chat中發送消息需要很長時間。如果你想立即提高Q-Chat消息的發送速度,請獲取4.20以上 QORT 到您的地址。這可以通過貿易門戶中的交易來完成,或者通過另一個 Qortian 給您 QORT。一旦您的帳戶中有超過 4.20 QORT,Q-Chat 消息將是即時的並且此對話框將不再顯示。感謝您了解這種必要的垃圾郵件預防方法,我們希望您喜歡 Qortal!",
|
||||
"cchange43": "打賞QORT給",
|
||||
"cchange44": "發送消息",
|
||||
"cchange45": "提示用戶",
|
||||
"cchange46": "打賞金額",
|
||||
"cchange47": "可用餘額",
|
||||
"cchange48": "無法獲取 QORT 餘額。請重試!",
|
||||
"cchange49": "當前手續費",
|
||||
"cchange50": "發送",
|
||||
"cchange51": "餘額不足!",
|
||||
"cchange52": "無效金額!",
|
||||
"cchange53": "接收方不能為空!",
|
||||
"cchange54": "接收者無效!",
|
||||
"cchange55": "交易成功!",
|
||||
"cchange56": "交易失敗!",
|
||||
"cchange57": "用戶信息",
|
||||
"cchange58": "發送消息",
|
||||
"cchange59": "提示用戶",
|
||||
"cchange60": "群組邀請待定",
|
||||
"cchange61": "獲取群組邀請時出錯。請重試!",
|
||||
"cchange62": "用戶名和地址輸入錯誤!請重試!",
|
||||
"cchange63": "啟用Enter鍵直接發送信息",
|
||||
"cchange64": "禁用Enter鍵直接發送信息",
|
||||
"cchange65": "請輸入收件人",
|
||||
"cchange66": "無法獲取回覆消息。消息太舊了。",
|
||||
"cchange68": "編輯",
|
||||
"cchange69": "自動顯示圖像",
|
||||
"cchange70": "不支援此類型圖像",
|
||||
"cchange71": "和",
|
||||
"cchange72": "其他",
|
||||
"cchange73": "的",
|
||||
"cchange74": "心情回應",
|
||||
"cchange90": "沒有消息"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "歡迎來到 Q-Chat",
|
||||
@ -556,7 +603,15 @@
|
||||
"bcchange7": "菜單",
|
||||
"bcchange8": "複製地址",
|
||||
"bcchange9": "私人信息",
|
||||
"bcchange10":"更多的"
|
||||
"bcchange10": "更多",
|
||||
"bcchange11": "回覆",
|
||||
"bcchange12": "修改",
|
||||
"bcchange13": "表情反應",
|
||||
"bcchange14": "轉發",
|
||||
"bcchange15": "信息已轉發",
|
||||
"bcchange16": "選擇收件人或在下方搜尋收件人",
|
||||
"bcchange17": "已轉發",
|
||||
"bcchange18": "打賞"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Qortal 群組",
|
||||
@ -614,9 +669,10 @@
|
||||
"gchange53": "成員",
|
||||
"gchange54": "成員數量",
|
||||
"gchange55": "搜索私人群組",
|
||||
"gchange56":"要搜索的組名",
|
||||
"gchange57":"未找到私人組名",
|
||||
"gchange58":"注意組名必須完全匹配。"
|
||||
"gchange56": "要搜索的群組名稱",
|
||||
"gchange57": "未找到私人群組名稱",
|
||||
"gchange58": "注意群組名稱必須完全匹配。",
|
||||
"gchange59": "顯示/隱藏代碼"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "益智游戲",
|
||||
@ -716,9 +772,9 @@
|
||||
"schange7": "已完成",
|
||||
"schange8": "錢包地址",
|
||||
"schange9": "您目前沒有有效的贊助記錄",
|
||||
"schange10":"公鑰查找",
|
||||
"schange10": "查詢公鑰",
|
||||
"schange11": "複製",
|
||||
"schange12":"地址到公鑰轉換器",
|
||||
"schange12": "查詢錢包地址對應公鑰",
|
||||
"schange13": "輸入地址",
|
||||
"schange14": "進行中",
|
||||
"schange15": "整理起來",
|
||||
@ -755,12 +811,12 @@
|
||||
"managegroup": {
|
||||
"mg1": "群組成員",
|
||||
"mg2": "邀請加入群組",
|
||||
"mg3":"組管理員",
|
||||
"mg4":"更新組",
|
||||
"mg3": "群組管理員",
|
||||
"mg4": "更新群信息",
|
||||
"mg5": "關閉管理組",
|
||||
"mg6":"禁令",
|
||||
"mg6": "禁止",
|
||||
"mg7": "踢",
|
||||
"mg8":"組號",
|
||||
"mg8": "群組代號",
|
||||
"mg9": "已加入",
|
||||
"mg10": "添加群組管理員",
|
||||
"mg11": "您確定將此成員添加到管理員嗎?",
|
||||
@ -776,28 +832,28 @@
|
||||
"mg21": "封禁原因",
|
||||
"mg22": "您確定要將此成員加入群組嗎?",
|
||||
"mg23": "按下確認後,將發送封禁請求!",
|
||||
"mg24":"永遠",
|
||||
"mg24": "永久",
|
||||
"mg25": "被禁止的會員",
|
||||
"mg26":"取消禁令",
|
||||
"mg26": "取消禁止",
|
||||
"mg27": "禁止到期",
|
||||
"mg28":"取消群成員封禁",
|
||||
"mg29":"你確定要取消對這個成員的群禁言嗎?",
|
||||
"mg28": "取消群組成員封禁",
|
||||
"mg29": "你確定要取消對這個成員的群組禁言嗎?",
|
||||
"mg30": "按下確認後,將發送取消禁令請求!",
|
||||
"mg31": "將成員踢出群組",
|
||||
"mg32": "踢球原因",
|
||||
"mg33": "您確定將該成員踢出群嗎?",
|
||||
"mg34": "按下確認後,將發送踢球請求!",
|
||||
"mg35":"沒有公開組邀請",
|
||||
"mg36":"你的公開組邀請",
|
||||
"mg35": "沒有公開群組邀請",
|
||||
"mg36": "你的公開群組邀請",
|
||||
"mg37": "邀請地址或姓名",
|
||||
"mg38": "邀請到期時間",
|
||||
"mg39": "所有字段都需要",
|
||||
"mg40": "您確定邀請該成員加入群組嗎?",
|
||||
"mg41": "按下確認後,將發送邀請請求!",
|
||||
"mg42":"組類型",
|
||||
"mg42": "群組類型",
|
||||
"mg43": "邀請到期",
|
||||
"mg44":"公共組",
|
||||
"mg45":"私有組",
|
||||
"mg44": "公開群組",
|
||||
"mg45": "私人群組",
|
||||
"mg46": "取消邀請",
|
||||
"mg47": "取消群邀請",
|
||||
"mg48": "您確定要取消對該會員的邀請嗎?",
|
||||
@ -814,5 +870,23 @@
|
||||
"mg59": "取消加入請求已成功接受",
|
||||
"mg60": "您確定要取消該會員的加入請求嗎?",
|
||||
"mg61": "按下確認後,將發送取消加入請求!"
|
||||
},
|
||||
"info": {
|
||||
"inf1": "貿易門戶信息",
|
||||
"inf2": "關閉交易門戶信息",
|
||||
"inf3": "這是購買 QORT 的市場",
|
||||
"inf4": "- '公開市場賣出'是 QORT 賣出訂單。",
|
||||
"inf5": "您一次只能購買一個訂單,只需點擊您希望購買的訂單",
|
||||
"inf6": "它將用詳細信息填充'購買 QORT' 框,然後單擊購買。",
|
||||
"inf7": "甚麼是自動購買(Auto Buy)?",
|
||||
"inf8": "關閉",
|
||||
"inf9": "'Auto Buy' 是一項允許在貿易門戶網站上添加'買單'的功能。這些'買單'僅限自己可見。你不會在貿易門戶上看到,並且不會存儲在 Qortal 區塊鏈上。自動購買是一個 UI 功能,因此需要保持 UI 運行。",
|
||||
"inf10": "要放置自動購買訂單,請單擊“添加自動購買訂單”按鈕並填寫相關資料。輸入您希望購買的 QORT 數量,以及您願意購買的價格。一旦 訂單有效,Auto Buy 將為您購買對應數量的 QORT,價格上限為您設定的價格(從最低訂單開始向上移動。)",
|
||||
"inf11": "只需讓您的 UI 保持運行狀態,Auto Buy 會自動完成剩下的工作!",
|
||||
"inf12": "您可以瀏覽 UI 中的其他插件(Q-Chat、錢包等),但如果您希望完成自動購買,則不能關閉 UI。將 UI 保留在‘任務欄’上‘最小化’或 “面板”,只要 UI 保持打開狀態,Auto Buy 就會起作用。",
|
||||
"inf13": "自動購買",
|
||||
"inf14": "與",
|
||||
"inf15": "有效的自動購買訂單",
|
||||
"inf16": "自動購買"
|
||||
}
|
||||
}
|
||||
|
@ -17,9 +17,9 @@
|
||||
"author": "QORTAL <admin@qortal.org>",
|
||||
"license": "GPL-3.0",
|
||||
"dependencies": {
|
||||
"@hapi/hapi": "21.2.0",
|
||||
"@hapi/hapi": "21.2.1",
|
||||
"@hapi/inert": "7.0.0",
|
||||
"sass": "1.57.1"
|
||||
"sass": "1.58.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.20.12",
|
||||
@ -58,23 +58,23 @@
|
||||
"@rollup/plugin-commonjs": "24.0.1",
|
||||
"@rollup/plugin-node-resolve": "15.0.1",
|
||||
"@rollup/plugin-replace": "5.0.2",
|
||||
"@rollup/plugin-terser": "0.3.0",
|
||||
"@vaadin/button": "23.3.5",
|
||||
"@vaadin/grid": "23.3.5",
|
||||
"@vaadin/icons": "23.3.5",
|
||||
"@vaadin/password-field": "23.3.5",
|
||||
"@vaadin/tooltip": "23.3.5",
|
||||
"@rollup/plugin-terser": "0.4.0",
|
||||
"@vaadin/button": "23.3.6",
|
||||
"@vaadin/grid": "23.3.6",
|
||||
"@vaadin/icons": "23.3.6",
|
||||
"@vaadin/password-field": "23.3.6",
|
||||
"@vaadin/tooltip": "23.3.6",
|
||||
"asmcrypto.js": "2.3.2",
|
||||
"bcryptjs": "2.4.3",
|
||||
"epml": "0.3.3",
|
||||
"file-saver": "2.0.5",
|
||||
"lit": "2.6.1",
|
||||
"lit-translate": "2.0.1",
|
||||
"localforage": "1.10.0",
|
||||
"pwa-helpers": "0.9.1",
|
||||
"random-sentence-generator": "0.0.8",
|
||||
"redux": "4.2.0",
|
||||
"redux": "4.2.1",
|
||||
"redux-thunk": "2.4.2",
|
||||
"rollup": "3.10.1",
|
||||
"rollup": "3.14.0",
|
||||
"rollup-plugin-node-globals": "1.4.0",
|
||||
"rollup-plugin-progress": "1.1.2",
|
||||
"rollup-plugin-scss": "3.0.0",
|
||||
|
@ -4,6 +4,11 @@ import { store } from '../store.js'
|
||||
import { Epml } from '../epml.js'
|
||||
import { addTradeBotRoutes } from '../tradebot/addTradeBotRoutes.js'
|
||||
import { get, translate, translateUnsafeHTML } from 'lit-translate'
|
||||
import localForage from "localforage";
|
||||
|
||||
const chatLastSeen = localForage.createInstance({
|
||||
name: "chat-last-seen",
|
||||
});
|
||||
|
||||
import '@polymer/paper-icon-button/paper-icon-button.js'
|
||||
import '@polymer/paper-progress/paper-progress.js'
|
||||
@ -27,6 +32,7 @@ import './user-info-view/user-info-view.js'
|
||||
import '../functional-components/side-menu.js'
|
||||
import '../functional-components/side-menu-item.js'
|
||||
import './start-minting.js'
|
||||
import { setChatLastSeen } from '../redux/app/app-actions.js'
|
||||
|
||||
const parentEpml = new Epml({type: 'WINDOW', source: window.parent})
|
||||
|
||||
@ -207,7 +213,7 @@ class AppView extends connect(store)(LitElement) {
|
||||
|
||||
#balanceheader {
|
||||
flex: 0 0 24px;
|
||||
padding: 12px 12px 20px 12px;
|
||||
padding: 12px 12px 45px 12px;
|
||||
border-bottom: 1px solid var(--border);
|
||||
background: var(--sidetopbar);
|
||||
}
|
||||
@ -330,6 +336,15 @@ class AppView extends connect(store)(LitElement) {
|
||||
background-color: rgb(148, 146, 146);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.balanceButton {
|
||||
background-color: #03a9f4;
|
||||
color: #ffffff;
|
||||
margin-left: 12px;
|
||||
margin-right: 12px;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
`
|
||||
]
|
||||
}
|
||||
@ -426,6 +441,8 @@ class AppView extends connect(store)(LitElement) {
|
||||
</side-menu>
|
||||
</div>
|
||||
</div>
|
||||
<button class="balanceButton" @click="${() => this.shBalanceTicker()}">${translate("grouppage.gchange59")}</button>
|
||||
<div id="theTicker" style="display: none; margin-bottom: 20px;">
|
||||
<div id="balanceheader">
|
||||
<span class="balanceheadertext">
|
||||
${this.getAllBalancesLoading ? html`
|
||||
@ -441,6 +458,7 @@ class AppView extends connect(store)(LitElement) {
|
||||
</div>
|
||||
${this.getAllBalancesLoading ? html`<paper-progress indeterminate style="width: 100%; margin: 4px;"></paper-progress>` : ''}
|
||||
${this.balanceTicker}
|
||||
</div>
|
||||
<app-info></app-info>
|
||||
</div>
|
||||
</app-header-layout>
|
||||
@ -1386,6 +1404,17 @@ class AppView extends connect(store)(LitElement) {
|
||||
}
|
||||
}
|
||||
|
||||
const getChatLastSeen=async() => {
|
||||
let items = [];
|
||||
|
||||
await chatLastSeen.iterate(function(value, key, iterationNumber) {
|
||||
|
||||
items.push({key, timestamp: value});
|
||||
})
|
||||
store.dispatch(setChatLastSeen(items))
|
||||
return items;
|
||||
}
|
||||
|
||||
await getOpenTradesBTC()
|
||||
await appDelay(1000)
|
||||
await getOpenTradesLTC()
|
||||
@ -1397,6 +1426,16 @@ class AppView extends connect(store)(LitElement) {
|
||||
await getOpenTradesRVN()
|
||||
await appDelay(1000)
|
||||
await getOpenTradesARRR()
|
||||
await getChatLastSeen()
|
||||
}
|
||||
|
||||
shBalanceTicker() {
|
||||
const targetDiv = this.shadowRoot.getElementById("theTicker")
|
||||
if (targetDiv.style.display !== "none") {
|
||||
targetDiv.style.display = "none";
|
||||
} else {
|
||||
targetDiv.style.display = "inline";
|
||||
}
|
||||
}
|
||||
|
||||
async getNodeType() {
|
||||
|
@ -4,11 +4,13 @@ import { store } from '../../store.js'
|
||||
import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate'
|
||||
|
||||
import { createWallet } from '../../../../qortal-ui-crypto/api/createWallet.js'
|
||||
import FileSaver from 'file-saver'
|
||||
import { doLogin, doLogout, doSelectAddress } from '../../redux/app/app-actions.js'
|
||||
import { doStoreWallet } from '../../redux/user/user-actions.js'
|
||||
import { checkApiKey } from '../../apiKeyUtils.js'
|
||||
import FileSaver from 'file-saver'
|
||||
import ripple from '../../functional-components/loading-ripple.js'
|
||||
import snackbar from '../../functional-components/snackbar.js'
|
||||
import '../../functional-components/random-sentence-generator.js'
|
||||
import '@material/mwc-button'
|
||||
import '@material/mwc-checkbox'
|
||||
import '@material/mwc-textfield'
|
||||
@ -22,8 +24,6 @@ import '@polymer/paper-input/paper-input.js'
|
||||
import '@polymer/paper-tooltip/paper-tooltip.js'
|
||||
import '@vaadin/text-field/vaadin-text-field.js'
|
||||
import '@vaadin/password-field/vaadin-password-field.js'
|
||||
import 'random-sentence-generator'
|
||||
import ripple from '../../functional-components/loading-ripple.js'
|
||||
|
||||
let lastPassword = ''
|
||||
|
||||
@ -393,17 +393,17 @@ class CreateAccountSection extends connect(store)(LitElement) {
|
||||
</random-sentence-generator>
|
||||
</div>
|
||||
<!--
|
||||
--- --- --- --- --- --- --- --- --- --- --- -
|
||||
--- --- --- --- --- --- --- --- --- --- --- --- --- -
|
||||
Calculations
|
||||
--- --- --- --- --- --- --- --- --- --- --- -
|
||||
--- --- --- --- --- --- --- --- --- --- --- --- --- -
|
||||
403 adjectives
|
||||
60 interjections
|
||||
243 adverbs
|
||||
2353 nouns
|
||||
3387 verbs
|
||||
--- --- --- --- --- --- --- --- --- --- --- -
|
||||
--- --- --- --- --- --- --- --- --- --- --- --- --- -
|
||||
sooo 243*3387*403*2353*3387*403*2353*403*2353 ~ 2^92
|
||||
--- --- --- --- --- --- --- --- --- --- --- -
|
||||
--- --- --- --- --- --- --- --- --- --- --- --- --- -
|
||||
-->
|
||||
</div><br>
|
||||
<div class="horizontal-center">
|
||||
|
@ -14,8 +14,15 @@ import './login-section.js'
|
||||
import '../qort-theme-toggle.js'
|
||||
|
||||
import settings from '../../functional-components/settings-page.js'
|
||||
import { addAutoLoadImageChat, removeAutoLoadImageChat, addChatLastSeen } from '../../redux/app/app-actions.js'
|
||||
|
||||
window.reduxStore = store
|
||||
window.reduxAction = {
|
||||
addAutoLoadImageChat: addAutoLoadImageChat,
|
||||
removeAutoLoadImageChat: removeAutoLoadImageChat,
|
||||
addChatLastSeen: addChatLastSeen
|
||||
|
||||
}
|
||||
|
||||
const animationDuration = 0.7 // Seconds
|
||||
|
||||
|
@ -1171,7 +1171,7 @@ class UserInfoView extends connect(store)(LitElement) {
|
||||
</div>
|
||||
</paper-dialog>
|
||||
|
||||
<paper-dialog style="background: var(--white); border: 1px solid var(--black); border-radius: 5px;" id="userBoughtDialog" modal>
|
||||
<paper-dialog style="background: var(--white); border: 1px solid var(--black); border-radius: 5px;" id="userBoughtDialog">
|
||||
<div class="card-explorer-container">
|
||||
<div id="first-explorer-section">
|
||||
${this.boughtBTCTemplate()}
|
||||
@ -1191,7 +1191,7 @@ class UserInfoView extends connect(store)(LitElement) {
|
||||
</div>
|
||||
</paper-dialog>
|
||||
|
||||
<paper-dialog style="background: var(--white); border: 1px solid var(--black); border-radius: 5px; overflow: auto;" id="userSoldDialog" modal>
|
||||
<paper-dialog style="background: var(--white); border: 1px solid var(--black); border-radius: 5px; overflow: auto;" id="userSoldDialog">
|
||||
<div class="card-explorer-container">
|
||||
<div id="first-explorer-section">
|
||||
${this.soldBTCTemplate()}
|
||||
|
@ -0,0 +1,160 @@
|
||||
// Author: irontiga <irontiga@gmail.com>
|
||||
|
||||
'use strict'
|
||||
import { LitElement, html, css } from 'lit'
|
||||
import * as WORDLISTS from './wordlists.js'
|
||||
|
||||
class RandomSentenceGenerator extends LitElement {
|
||||
static get properties() {
|
||||
return {
|
||||
template: {
|
||||
type: String,
|
||||
attribute: 'template'
|
||||
},
|
||||
parsedString: {
|
||||
type: String
|
||||
},
|
||||
fetchedWordlistCount: {
|
||||
type: Number,
|
||||
value: 0
|
||||
},
|
||||
capitalize: {
|
||||
type: Boolean
|
||||
},
|
||||
partsOfSpeechMap: {
|
||||
type: Object
|
||||
},
|
||||
templateEntropy: {
|
||||
type: Number,
|
||||
reflect: true,
|
||||
attribute: 'template-entropy'
|
||||
},
|
||||
maxWordLength: {
|
||||
type: Number,
|
||||
attribute: 'max-word-length'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super()
|
||||
this.template = 'adjective noun verb adverb.'
|
||||
this.maxWordLength = 0
|
||||
this.parsedString = ''
|
||||
this.fetchedWordlistCount = 0
|
||||
this.capitalize = true
|
||||
this.partsOfSpeechMap = {
|
||||
'noun': 'nouns',
|
||||
'adverb': 'adverbs',
|
||||
'adv': 'adverbs',
|
||||
'verb': 'verbs',
|
||||
'interjection': 'interjections',
|
||||
'adjective': 'adjectives',
|
||||
'adj': 'adjectives',
|
||||
'verbed': 'verbed'
|
||||
}
|
||||
this.partsOfSpeech = Object.keys(this.partsOfSpeechMap)
|
||||
this._wordlists = WORDLISTS
|
||||
}
|
||||
|
||||
updated(changedProperties) {
|
||||
let regen = false
|
||||
if (changedProperties.has('template')) {
|
||||
regen = true
|
||||
}
|
||||
if (changedProperties.has('maxWordLength')) {
|
||||
console.dir(this.maxWordLength)
|
||||
if (this.maxWordLength) {
|
||||
const wl = { ...this._wordlists }
|
||||
for (const partOfSpeech in this._wordlists) {
|
||||
console.log(this._wordlists[partOfSpeech])
|
||||
if (Array.isArray(this._wordlists[partOfSpeech])) {
|
||||
wl[partOfSpeech] = this._wordlists[partOfSpeech].filter(word => word.length <= this.maxWordLength)
|
||||
}
|
||||
}
|
||||
this._wordlists = wl
|
||||
}
|
||||
regen = true
|
||||
}
|
||||
if (regen) this.generate()
|
||||
}
|
||||
|
||||
_RNG(entropy) {
|
||||
if (entropy > 1074) {
|
||||
throw new Error('Javascript can not handle that much entropy!')
|
||||
}
|
||||
let randNum = 0
|
||||
const crypto = window.crypto || window.msCrypto
|
||||
|
||||
if (crypto) {
|
||||
const entropy256 = Math.ceil(entropy / 8)
|
||||
|
||||
let buffer = new Uint8Array(entropy256)
|
||||
crypto.getRandomValues(buffer)
|
||||
|
||||
randNum = buffer.reduce((num, value) => {
|
||||
return num * value
|
||||
}, 1) / Math.pow(256, entropy256)
|
||||
} else {
|
||||
console.warn('Secure RNG not found. Using Math.random')
|
||||
randNum = Math.random()
|
||||
}
|
||||
return randNum
|
||||
}
|
||||
|
||||
setRNG(fn) {
|
||||
this._RNG = fn
|
||||
}
|
||||
|
||||
_captitalize(str) {
|
||||
return str.charAt(0).toUpperCase() + str.slice(1)
|
||||
}
|
||||
|
||||
getWord(partOfSpeech) {
|
||||
const words = this._wordlists[this.partsOfSpeechMap[partOfSpeech]]
|
||||
const requiredEntropy = Math.log(words.length) / Math.log(2)
|
||||
const index = this._RNG(requiredEntropy) * words.length
|
||||
|
||||
return {
|
||||
word: words[Math.round(index)],
|
||||
entropy: words.length
|
||||
}
|
||||
}
|
||||
|
||||
generate() {
|
||||
this.parsedString = this.parse(this.template)
|
||||
}
|
||||
|
||||
parse(template) {
|
||||
const split = template.split(/[\s]/g)
|
||||
let entropy = 1
|
||||
const final = split.map(word => {
|
||||
const lower = word.toLowerCase()
|
||||
|
||||
this.partsOfSpeech.some(partOfSpeech => {
|
||||
const partOfSpeechIndex = lower.indexOf(partOfSpeech) // Check it exists
|
||||
const nextChar = word.charAt(partOfSpeech.length)
|
||||
|
||||
if (partOfSpeechIndex === 0 && !(nextChar && (nextChar.match(/[a-zA-Z]/g) != null))) {
|
||||
const replacement = this.getWord(partOfSpeech)
|
||||
word = replacement.word + word.slice(partOfSpeech.length) // Append the rest of the "word" (punctuation)
|
||||
entropy = entropy * replacement.entropy
|
||||
return true
|
||||
}
|
||||
})
|
||||
return word
|
||||
})
|
||||
this.templateEntropy = Math.floor(Math.log(entropy) / Math.log(8))
|
||||
return final.join(' ')
|
||||
}
|
||||
|
||||
render() {
|
||||
return html`
|
||||
${this.parsedString}
|
||||
`
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define('random-sentence-generator', RandomSentenceGenerator)
|
||||
|
||||
export default RandomSentenceGenerator
|
36
qortal-ui-core/src/functional-components/verb-past-tense.js
Normal file
36
qortal-ui-core/src/functional-components/verb-past-tense.js
Normal file
@ -0,0 +1,36 @@
|
||||
// Sourced from https://gist.github.com/letsgetrandy/1e05a68ea74ba6736eb5
|
||||
|
||||
export const EXCEPTIONS = {
|
||||
'are': 'were',
|
||||
'eat': 'ate',
|
||||
'go': 'went',
|
||||
'have': 'had',
|
||||
'inherit': 'inherited',
|
||||
'is': 'was',
|
||||
'run': 'ran',
|
||||
'sit': 'sat',
|
||||
'visit': 'visited'
|
||||
}
|
||||
|
||||
export const getPastTense = (verb, exceptions = EXCEPTIONS) => {
|
||||
if (exceptions[verb]) {
|
||||
return exceptions[verb]
|
||||
}
|
||||
if ((/e$/i).test(verb)) {
|
||||
return verb + 'd'
|
||||
}
|
||||
if ((/[aeiou]c$/i).test(verb)) {
|
||||
return verb + 'ked'
|
||||
}
|
||||
// for american english only
|
||||
if ((/el$/i).test(verb)) {
|
||||
return verb + 'ed'
|
||||
}
|
||||
if ((/[aeio][aeiou][dlmnprst]$/).test(verb)) {
|
||||
return verb + 'ed'
|
||||
}
|
||||
if ((/[aeiou][bdglmnprst]$/i).test(verb)) {
|
||||
return verb.replace(/(.+[aeiou])([bdglmnprst])/, '$1$2$2ed')
|
||||
}
|
||||
return verb + 'ed'
|
||||
}
|
27
qortal-ui-core/src/functional-components/wordlists.js
Normal file
27
qortal-ui-core/src/functional-components/wordlists.js
Normal file
File diff suppressed because one or more lines are too long
@ -2,7 +2,6 @@ import { store } from '../../store.js'
|
||||
import { doPageUrl } from '../../redux/app/app-actions.js'
|
||||
|
||||
export const newMessage = (data) => {
|
||||
|
||||
const alert = playSound(data.sound)
|
||||
|
||||
// Should I show notification ?
|
||||
@ -18,7 +17,7 @@ export const newMessage = (data) => {
|
||||
}
|
||||
|
||||
notify.onclick = (e) => {
|
||||
const pageUrl = `/app/q-chat/${data.req.url}`
|
||||
const pageUrl = `/app/q-chat/?chat=${data.req.url}`
|
||||
store.dispatch(doPageUrl(pageUrl))
|
||||
}
|
||||
} else {
|
||||
@ -26,7 +25,7 @@ export const newMessage = (data) => {
|
||||
const notify = new Notification(data.title, data.options)
|
||||
|
||||
notify.onclick = (e) => {
|
||||
const pageUrl = `/app/q-chat/${data.req.url}`
|
||||
const pageUrl = `/app/q-chat/?chat=${data.req.url}`
|
||||
store.dispatch(doPageUrl(pageUrl))
|
||||
}
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ const CHAT_HEADS_STREAM_NAME = 'chat_heads'
|
||||
const NODE_CONFIG_STREAM_NAME = 'node_config'
|
||||
const COPY_MENU_SWITCH = 'copy_menu_switch'
|
||||
const FRAME_PASTE_MENU_SWITCH = 'frame_paste_menu_switch'
|
||||
const CHAT_LAST_SEEN = 'chat_last_seen'
|
||||
|
||||
export const loggedInStream = new EpmlStream(LOGIN_STREAM_NAME, () => store.getState().app.loggedIn)
|
||||
export const configStream = new EpmlStream(CONFIG_STREAM_NAME, () => store.getState().config)
|
||||
@ -18,6 +19,7 @@ export const chatHeadsStateStream = new EpmlStream(CHAT_HEADS_STREAM_NAME, () =>
|
||||
export const nodeConfigStream = new EpmlStream(NODE_CONFIG_STREAM_NAME, () => store.getState().app.nodeConfig)
|
||||
export const copyMenuSwitchStream = new EpmlStream(COPY_MENU_SWITCH, () => store.getState().app.copyMenuSwitch)
|
||||
export const framePasteMenuSwitchStream = new EpmlStream(FRAME_PASTE_MENU_SWITCH, () => store.getState().app.framePasteMenuSwitch)
|
||||
export const chatLastSeenStream = new EpmlStream(CHAT_LAST_SEEN, () => store.getState().app.chatLastSeen)
|
||||
|
||||
|
||||
let oldState = {
|
||||
@ -46,6 +48,9 @@ store.subscribe(() => {
|
||||
if (oldState.app.framePasteMenuSwitch !== state.app.framePasteMenuSwitch) {
|
||||
framePasteMenuSwitchStream.emit(state.app.framePasteMenuSwitch)
|
||||
}
|
||||
if (oldState.app.chatLastSeen !== state.app.chatLastSeen) {
|
||||
chatLastSeenStream.emit(state.app.chatLastSeen)
|
||||
}
|
||||
|
||||
if (oldState.app.selectedAddress !== state.app.selectedAddress) {
|
||||
selectedAddressStream.emit({
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Core App Actions here...
|
||||
import { UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, CHAT_HEADS, ACCOUNT_INFO, COPY_MENU_SWITCH, PASTE_MENU_SWITCH, FRAME_PASTE_MENU_SWITCH } from '../app-action-types.js'
|
||||
import { UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, CHAT_HEADS, ACCOUNT_INFO, COPY_MENU_SWITCH, PASTE_MENU_SWITCH, FRAME_PASTE_MENU_SWITCH, ADD_AUTO_LOAD_IMAGES_CHAT, REMOVE_AUTO_LOAD_IMAGES_CHAT, SET_CHAT_LAST_SEEN, ADD_CHAT_LAST_SEEN } from '../app-action-types.js'
|
||||
|
||||
export const doUpdateBlockInfo = (blockObj) => {
|
||||
return (dispatch, getState) => {
|
||||
@ -105,3 +105,31 @@ const framePasteMenuSwitch = (payload) => {
|
||||
payload
|
||||
}
|
||||
}
|
||||
|
||||
export const addAutoLoadImageChat = (payload) => {
|
||||
return {
|
||||
type: ADD_AUTO_LOAD_IMAGES_CHAT,
|
||||
payload
|
||||
}
|
||||
}
|
||||
|
||||
export const removeAutoLoadImageChat = (payload) => {
|
||||
return {
|
||||
type: REMOVE_AUTO_LOAD_IMAGES_CHAT,
|
||||
payload
|
||||
}
|
||||
}
|
||||
|
||||
export const setChatLastSeen = (payload) => {
|
||||
return {
|
||||
type: SET_CHAT_LAST_SEEN,
|
||||
payload
|
||||
}
|
||||
}
|
||||
export const addChatLastSeen = (payload) => {
|
||||
return {
|
||||
type: ADD_CHAT_LAST_SEEN,
|
||||
payload
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,3 +20,7 @@ export const ADD_NEW_PLUGIN_URL = 'ADD_NEW_PLUGIN_URL'
|
||||
export const COPY_MENU_SWITCH = 'COPY_MENU_SWITCH'
|
||||
export const PASTE_MENU_SWITCH = 'PASTE_MENU_SWITCH'
|
||||
export const FRAME_PASTE_MENU_SWITCH = 'FRAME_PASTE_MENU_SWITCH'
|
||||
export const ADD_AUTO_LOAD_IMAGES_CHAT = 'ADD_AUTO_LOAD_IMAGES_CHAT'
|
||||
export const REMOVE_AUTO_LOAD_IMAGES_CHAT = 'REMOVE_AUTO_LOAD_IMAGES_CHAT'
|
||||
export const SET_CHAT_LAST_SEEN = 'SET_CHAT_LAST_SEEN'
|
||||
export const ADD_CHAT_LAST_SEEN = 'ADD_CHAT_LAST_SEEN'
|
||||
|
@ -1,8 +1,14 @@
|
||||
// Loading state, login state, isNavDrawOpen state etc. None of this needs to be saved to localstorage.
|
||||
import { LOG_IN, LOG_OUT, NETWORK_CONNECTION_STATUS, INIT_WORKERS, ADD_PLUGIN_URL, ADD_PLUGIN, ADD_NEW_PLUGIN_URL, NAVIGATE, SELECT_ADDRESS, ACCOUNT_INFO, CHAT_HEADS, UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, LOAD_NODE_CONFIG, SET_NODE, ADD_NODE, PAGE_URL, COPY_MENU_SWITCH, PASTE_MENU_SWITCH, FRAME_PASTE_MENU_SWITCH } from './app-action-types.js'
|
||||
import { loadStateFromLocalStorage, saveStateToLocalStorage } from '../../localStorageHelpers.js'
|
||||
import { LOG_IN, LOG_OUT, NETWORK_CONNECTION_STATUS, INIT_WORKERS, ADD_PLUGIN_URL, ADD_PLUGIN, ADD_NEW_PLUGIN_URL, NAVIGATE, SELECT_ADDRESS, ACCOUNT_INFO, CHAT_HEADS, UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, LOAD_NODE_CONFIG, SET_NODE, ADD_NODE, PAGE_URL, COPY_MENU_SWITCH, PASTE_MENU_SWITCH, FRAME_PASTE_MENU_SWITCH, ADD_AUTO_LOAD_IMAGES_CHAT, REMOVE_AUTO_LOAD_IMAGES_CHAT, SET_CHAT_LAST_SEEN, ADD_CHAT_LAST_SEEN } from './app-action-types.js'
|
||||
import { initWorkersReducer } from './reducers/init-workers.js'
|
||||
import { loginReducer } from './reducers/login-reducer.js'
|
||||
import { setNode, addNode } from './reducers/manage-node.js'
|
||||
import localForage from "localforage";
|
||||
const chatLastSeen = localForage.createInstance({
|
||||
name: "chat-last-seen",
|
||||
});
|
||||
|
||||
|
||||
const INITIAL_STATE = {
|
||||
loggedIn: false,
|
||||
@ -42,7 +48,9 @@ const INITIAL_STATE = {
|
||||
framePasteMenuSwitch: {
|
||||
isOpen: false,
|
||||
elementId: ''
|
||||
}
|
||||
},
|
||||
autoLoadImageChats: loadStateFromLocalStorage('autoLoadImageChats') || [],
|
||||
chatLastSeen: []
|
||||
}
|
||||
|
||||
export default (state = INITIAL_STATE, action) => {
|
||||
@ -146,6 +154,60 @@ export default (state = INITIAL_STATE, action) => {
|
||||
...state,
|
||||
framePasteMenuSwitch: action.payload
|
||||
}
|
||||
case ADD_AUTO_LOAD_IMAGES_CHAT: {
|
||||
const findChat = state.autoLoadImageChats.findIndex((chat)=> chat === action.payload)
|
||||
console.log({findChat})
|
||||
if(findChat !== -1) return state
|
||||
const updatedState = [...state.autoLoadImageChats, action.payload]
|
||||
|
||||
saveStateToLocalStorage('autoLoadImageChats', updatedState)
|
||||
return {
|
||||
...state,
|
||||
autoLoadImageChats: updatedState
|
||||
}
|
||||
}
|
||||
|
||||
case REMOVE_AUTO_LOAD_IMAGES_CHAT: {
|
||||
const updatedState = state.autoLoadImageChats.filter((chat)=> chat !== action.payload)
|
||||
saveStateToLocalStorage('autoLoadImageChats', updatedState)
|
||||
return {
|
||||
...state,
|
||||
autoLoadImageChats: updatedState
|
||||
}
|
||||
}
|
||||
case SET_CHAT_LAST_SEEN: {
|
||||
return {
|
||||
...state,
|
||||
chatLastSeen: action.payload
|
||||
}
|
||||
}
|
||||
case ADD_CHAT_LAST_SEEN: {
|
||||
const chatId = action.payload.key
|
||||
const timestamp = action.payload.timestamp
|
||||
if(!chatId || !timestamp) return state
|
||||
let newChatLastSeen = [...state.chatLastSeen]
|
||||
const findChatIndex = state.chatLastSeen.findIndex((chat)=> chat.key === chatId)
|
||||
if(findChatIndex !== -1){
|
||||
|
||||
newChatLastSeen[findChatIndex] = {
|
||||
key: chatId,
|
||||
timestamp,
|
||||
}
|
||||
}
|
||||
if(findChatIndex === -1){
|
||||
|
||||
newChatLastSeen = [...newChatLastSeen, {
|
||||
key: chatId,
|
||||
timestamp,
|
||||
}]
|
||||
}
|
||||
chatLastSeen.setItem(chatId, timestamp)
|
||||
return {
|
||||
...state,
|
||||
chatLastSeen: newChatLastSeen
|
||||
}
|
||||
}
|
||||
|
||||
default:
|
||||
return state
|
||||
}
|
||||
|
@ -9,7 +9,8 @@ html {
|
||||
--copybutton: #707584;
|
||||
--chat-group: #080808;
|
||||
--chat-bubble: #9f9f9f0a;
|
||||
--chat-bubble-bg: #f3f3f3;
|
||||
--chat-bubble-bg: #e6e6e6;
|
||||
--chat-bubble-myBg: #d1ddf2;
|
||||
--chat-bubble-msg-color: #080808;
|
||||
--reaction-bubble-outline: #6b6969;
|
||||
--chat-menu-bg: #ffffff;
|
||||
@ -48,6 +49,7 @@ html {
|
||||
--chatHeadTextActive: #080808;
|
||||
--group-header: #929292;
|
||||
--group-drop-shadow: rgb(17 17 26 / 10%) 0px 1px 0px;
|
||||
--reactions-tooltip-bg: #ffffff;
|
||||
}
|
||||
|
||||
html[theme="dark"] {
|
||||
@ -62,6 +64,7 @@ html[theme="dark"] {
|
||||
--chat-group: #ffffff;
|
||||
--chat-bubble: #9694941a;
|
||||
--chat-bubble-bg: #2d3749;
|
||||
--chat-bubble-myBg: #40444d;
|
||||
--chat-bubble-msg-color: #ffffff;
|
||||
--reaction-bubble-outline: #ffffff;
|
||||
--chat-menu-bg: #32394c;
|
||||
@ -99,5 +102,6 @@ html[theme="dark"] {
|
||||
--chatHeadText: #ffffff;
|
||||
--chatHeadTextActive: #ffffff;
|
||||
--group-header: #c8c8c8;
|
||||
--group-drop-shadow: rgb(191 191 191 / 32%) 0px 1px 0px
|
||||
--group-drop-shadow: rgb(191 191 191 / 32%) 0px 1px 0px;
|
||||
--reactions-tooltip-bg: #161515;
|
||||
}
|
@ -2,9 +2,8 @@ import { Sha256 } from 'asmcrypto.js'
|
||||
import Base58 from './api/deps/Base58'
|
||||
import { base58PublicKeyToAddress } from './api/wallet/base58PublicKeyToAddress'
|
||||
import { validateAddress } from './api/wallet/validateAddress'
|
||||
import { decryptChatMessage } from './api/transactions/chat/decryptChatMessage';
|
||||
import _ from 'lodash';
|
||||
|
||||
import { decryptChatMessage } from './api/transactions/chat/decryptChatMessage'
|
||||
import _ from 'lodash'
|
||||
|
||||
window.Sha256 = Sha256
|
||||
window.Base58 = Base58
|
||||
@ -14,7 +13,6 @@ window.validateAddress = validateAddress
|
||||
window.decryptChatMessage = decryptChatMessage
|
||||
|
||||
export { initApi, store } from './api_deps.js'
|
||||
|
||||
export * from './api/deps/deps.js'
|
||||
export * from './api/api.js'
|
||||
export * from './api/registerUsername.js'
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
Copyright 2017-2018 @ irontiga and vbcs (original developer)
|
||||
*/
|
||||
'use strict';
|
||||
'use strict'
|
||||
import Base58 from './deps/Base58.js'
|
||||
import { Sha256, Sha512 } from 'asmcrypto.js'
|
||||
import nacl from './deps/nacl-fast.js'
|
||||
@ -10,7 +10,7 @@ import utils from './deps/utils.js'
|
||||
import { generateSaveWalletData } from './storeWallet.js'
|
||||
|
||||
import publicKeyToAddress from './wallet/publicKeyToAddress.js'
|
||||
import AltcoinHDWallet from "./bitcoin/AltcoinHDWallet";
|
||||
import AltcoinHDWallet from "./bitcoin/AltcoinHDWallet"
|
||||
|
||||
export default class PhraseWallet {
|
||||
constructor(seed, walletVersion) {
|
||||
|
@ -1,9 +1,5 @@
|
||||
export { request } from './fetch-request.js'
|
||||
|
||||
export { transactionTypes as transactions } from './transactions/transactions.js'
|
||||
|
||||
export { processTransaction, createTransaction, computeChatNonce, signChatTransaction, signArbitraryTransaction } from './createTransaction.js'
|
||||
|
||||
export { tradeBotCreateRequest, tradeBotRespondRequest, signTradeBotTxn, deleteTradeOffer, sendBtc, sendLtc, sendDoge, sendDgb, sendRvn, sendArrr } from './tradeRequest.js'
|
||||
|
||||
export { cancelAllOffers } from './transactions/trade-portal/tradeoffer/cancelAllOffers.js'
|
||||
|
@ -1,11 +1,10 @@
|
||||
'use strict';
|
||||
import Base58 from '../deps/Base58.js'
|
||||
import { Sha256, Sha512 } from 'asmcrypto.js'
|
||||
import jsSHA from "jssha";
|
||||
import jsSHA from 'jssha'
|
||||
import RIPEMD160 from '../deps/ripemd160.js'
|
||||
import utils from '../deps/utils.js'
|
||||
import { EllipticCurve, BigInteger } from './ecbn.js';
|
||||
|
||||
import { EllipticCurve, BigInteger } from './ecbn.js'
|
||||
|
||||
export default class AltcoinHDWallet {
|
||||
|
||||
@ -101,14 +100,10 @@ export default class AltcoinHDWallet {
|
||||
|
||||
this._tmasterPublicKey = ''
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Child Keys Derivation from the Parent Keys
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Child Private Key - 32 bytes
|
||||
*/
|
||||
@ -145,13 +140,10 @@ export default class AltcoinHDWallet {
|
||||
|
||||
this.xPublicChildKey = ''
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Grand Child Keys Derivation from the Child Keys
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Grand Child Private Key - 32 bytes
|
||||
*/
|
||||
@ -200,7 +192,6 @@ export default class AltcoinHDWallet {
|
||||
|
||||
this._tlitecoinLegacyAddress = ''
|
||||
|
||||
|
||||
/**
|
||||
* Wallet - Wallet Object (keys...)
|
||||
*/
|
||||
@ -250,76 +241,69 @@ export default class AltcoinHDWallet {
|
||||
|
||||
|
||||
generateSeedHash(seed, isBIP44, indicator = null) {
|
||||
|
||||
let buffer;
|
||||
let buffer
|
||||
|
||||
if (isBIP44) {
|
||||
buffer = utils.appendBuffer(seed.reverse(), utils.int32ToBytes(indicator))
|
||||
} else {
|
||||
if(indicator !== null) {
|
||||
const indicatorString = utils.stringtoUTF8Array(indicator);
|
||||
buffer = utils.appendBuffer(seed.reverse(), indicatorString);
|
||||
const indicatorString = utils.stringtoUTF8Array(indicator)
|
||||
buffer = utils.appendBuffer(seed.reverse(), indicatorString)
|
||||
}
|
||||
else
|
||||
{
|
||||
buffer = seed.reverse();
|
||||
buffer = seed.reverse()
|
||||
}
|
||||
}
|
||||
|
||||
const _reverseSeedHash = new Sha256().process(buffer).finish().result;
|
||||
this.seedHash = new Sha512().process(utils.appendBuffer(seed, _reverseSeedHash)).finish().result;
|
||||
const _reverseSeedHash = new Sha256().process(buffer).finish().result
|
||||
this.seedHash = new Sha512().process(utils.appendBuffer(seed, _reverseSeedHash)).finish().result
|
||||
}
|
||||
|
||||
generatePrivateKey(seedHash) {
|
||||
const SECP256K1_CURVE_ORDER = new BigInteger("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141")
|
||||
|
||||
const SECP256K1_CURVE_ORDER = new BigInteger("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141");
|
||||
const privateKeyHash = seedHash.slice(0, 32)
|
||||
|
||||
const privateKeyHash = seedHash.slice(0, 32);
|
||||
|
||||
this.seed58 = Base58.encode(privateKeyHash);
|
||||
this.seed58 = Base58.encode(privateKeyHash)
|
||||
|
||||
const _privateKeyHash = [...privateKeyHash]
|
||||
let privateKeyBigInt = BigInteger.fromByteArrayUnsigned(_privateKeyHash);
|
||||
let privateKeyBigInt = BigInteger.fromByteArrayUnsigned(_privateKeyHash)
|
||||
|
||||
const privateKey = (privateKeyBigInt.mod(SECP256K1_CURVE_ORDER.subtract(BigInteger.ONE))).add(BigInteger.ONE)
|
||||
this.privateKey = privateKey.toByteArrayUnsigned()
|
||||
}
|
||||
|
||||
generateChainCode(seedHash) {
|
||||
|
||||
this.chainCode = new Sha256().process(seedHash.slice(32, 64)).finish().result;
|
||||
this.chainCode = new Sha256().process(seedHash.slice(32, 64)).finish().result
|
||||
}
|
||||
|
||||
generatePublicKey(privateKey) {
|
||||
|
||||
const _privateKey = [...privateKey]
|
||||
const privateKeyBigInt = BigInteger.fromByteArrayUnsigned(_privateKey);
|
||||
const privateKeyBigInt = BigInteger.fromByteArrayUnsigned(_privateKey)
|
||||
|
||||
const epCurve = EllipticCurve.getSECCurveByName("secp256k1");
|
||||
const curvePoints = epCurve.getG().multiply(privateKeyBigInt);
|
||||
const epCurve = EllipticCurve.getSECCurveByName("secp256k1")
|
||||
const curvePoints = epCurve.getG().multiply(privateKeyBigInt)
|
||||
|
||||
|
||||
const x = curvePoints.getX().toBigInteger();
|
||||
const y = curvePoints.getY().toBigInteger();
|
||||
const x = curvePoints.getX().toBigInteger()
|
||||
const y = curvePoints.getY().toBigInteger()
|
||||
|
||||
/**
|
||||
* Deriving Uncompressed Public Key (65 bytes)
|
||||
*
|
||||
* const publicKeyBytes = EllipticCurve.integerToBytes(x, 32);
|
||||
* this.publicKey = publicKeyBytes.concat(EllipticCurve.integerToBytes(y, 32));
|
||||
* this.publicKey.unshift(0x04); // append point indicator
|
||||
* const publicKeyBytes = EllipticCurve.integerToBytes(x, 32)
|
||||
* this.publicKey = publicKeyBytes.concat(EllipticCurve.integerToBytes(y, 32))
|
||||
* this.publicKey.unshift(0x04) // append point indicator
|
||||
*/
|
||||
|
||||
|
||||
// Compressed Public Key (33 bytes)
|
||||
this.publicKey = EllipticCurve.integerToBytes(x, 32)
|
||||
|
||||
|
||||
if (y.isEven()) {
|
||||
|
||||
this.publicKey.unshift(0x02) // append point indicator
|
||||
} else {
|
||||
|
||||
this.publicKey.unshift(0x03) // append point indicator
|
||||
}
|
||||
|
||||
@ -330,7 +314,6 @@ export default class AltcoinHDWallet {
|
||||
}
|
||||
|
||||
generateMainnetMasterPrivateKey() {
|
||||
|
||||
// Serialization Variable
|
||||
const s = []
|
||||
|
||||
@ -375,7 +358,6 @@ export default class AltcoinHDWallet {
|
||||
}
|
||||
|
||||
generateMainnetMasterPublicKey() {
|
||||
|
||||
// Serialization Variable
|
||||
const s = []
|
||||
|
||||
@ -495,19 +477,19 @@ export default class AltcoinHDWallet {
|
||||
// TODO: Make this more better in the future
|
||||
|
||||
const path = 'm/0/0'
|
||||
// let p = path.split('/');
|
||||
// let p = path.split('/')
|
||||
|
||||
// Get Public kEY
|
||||
const derivePublicChildKey = () => {
|
||||
|
||||
const _privateKey = [...this.childPrivateKey]
|
||||
const privateKeyBigInt = BigInteger.fromByteArrayUnsigned(_privateKey);
|
||||
const privateKeyBigInt = BigInteger.fromByteArrayUnsigned(_privateKey)
|
||||
|
||||
const epCurve = EllipticCurve.getSECCurveByName("secp256k1");
|
||||
const curvePoints = epCurve.getG().multiply(privateKeyBigInt);
|
||||
const epCurve = EllipticCurve.getSECCurveByName("secp256k1")
|
||||
const curvePoints = epCurve.getG().multiply(privateKeyBigInt)
|
||||
|
||||
const x = curvePoints.getX().toBigInteger();
|
||||
const y = curvePoints.getY().toBigInteger();
|
||||
const x = curvePoints.getX().toBigInteger()
|
||||
const y = curvePoints.getY().toBigInteger()
|
||||
|
||||
// Compressed Public Key (33 bytes)
|
||||
this.childPublicKey = EllipticCurve.integerToBytes(x, 32)
|
||||
@ -533,15 +515,15 @@ export default class AltcoinHDWallet {
|
||||
|
||||
const derivePrivateChildKey = (cI) => {
|
||||
|
||||
let ib = [];
|
||||
ib.push((cI >> 24) & 0xff);
|
||||
ib.push((cI >> 16) & 0xff);
|
||||
ib.push((cI >> 8) & 0xff);
|
||||
ib.push(cI & 0xff);
|
||||
let ib = []
|
||||
ib.push((cI >> 24) & 0xff)
|
||||
ib.push((cI >> 16) & 0xff)
|
||||
ib.push((cI >> 8) & 0xff)
|
||||
ib.push(cI & 0xff)
|
||||
|
||||
const s = [...this.publicKey].concat(ib);
|
||||
const s = [...this.publicKey].concat(ib)
|
||||
|
||||
const _hmacSha512 = new jsSHA("SHA-512", "UINT8ARRAY", { numRounds: 1, hmacKey: { value: this.chainCode, format: "UINT8ARRAY" } });
|
||||
const _hmacSha512 = new jsSHA("SHA-512", "UINT8ARRAY", { numRounds: 1, hmacKey: { value: this.chainCode, format: "UINT8ARRAY" } })
|
||||
_hmacSha512.update(new Uint8Array(s))
|
||||
|
||||
|
||||
@ -550,10 +532,10 @@ export default class AltcoinHDWallet {
|
||||
|
||||
|
||||
// SECP256k1 init
|
||||
const epCurve = EllipticCurve.getSECCurveByName("secp256k1");
|
||||
const epCurve = EllipticCurve.getSECCurveByName("secp256k1")
|
||||
|
||||
|
||||
const ki = IL.add(BigInteger.fromByteArrayUnsigned(this.privateKey)).mod(epCurve.getN()); // parse256(IL) + kpar (mod n) ==> ki
|
||||
const ki = IL.add(BigInteger.fromByteArrayUnsigned(this.privateKey)).mod(epCurve.getN()) // parse256(IL) + kpar (mod n) ==> ki
|
||||
this.childPrivateKey = ki.toByteArrayUnsigned()
|
||||
|
||||
// Call deriveExtendedPrivateChildKey
|
||||
@ -577,10 +559,10 @@ export default class AltcoinHDWallet {
|
||||
s.push(...(this.publicKeyHash.slice(0, 4)))
|
||||
|
||||
// Append Child Index
|
||||
s.push(childIndex >>> 24);
|
||||
s.push((childIndex >>> 16) & 0xff);
|
||||
s.push((childIndex >>> 8) & 0xff);
|
||||
s.push(childIndex & 0xff);
|
||||
s.push(childIndex >>> 24)
|
||||
s.push((childIndex >>> 16) & 0xff)
|
||||
s.push((childIndex >>> 8) & 0xff)
|
||||
s.push(childIndex & 0xff)
|
||||
|
||||
// Append Chain Code
|
||||
s.push(...this.childChainCode)
|
||||
@ -619,10 +601,10 @@ export default class AltcoinHDWallet {
|
||||
s.push(...(this.publicKeyHash.slice(0, 4)))
|
||||
|
||||
// Append Child Index
|
||||
s.push(childIndex >>> 24);
|
||||
s.push((childIndex >>> 16) & 0xff);
|
||||
s.push((childIndex >>> 8) & 0xff);
|
||||
s.push(childIndex & 0xff);
|
||||
s.push(childIndex >>> 24)
|
||||
s.push((childIndex >>> 16) & 0xff)
|
||||
s.push((childIndex >>> 8) & 0xff)
|
||||
s.push(childIndex & 0xff)
|
||||
|
||||
// Append Chain Code
|
||||
s.push(...this.childChainCode)
|
||||
@ -654,24 +636,22 @@ export default class AltcoinHDWallet {
|
||||
const derivePublicGrandChildKey = () => {
|
||||
|
||||
const _privateKey = [...this.grandChildPrivateKey]
|
||||
const privateKeyBigInt = BigInteger.fromByteArrayUnsigned(_privateKey);
|
||||
const privateKeyBigInt = BigInteger.fromByteArrayUnsigned(_privateKey)
|
||||
|
||||
|
||||
const epCurve = EllipticCurve.getSECCurveByName("secp256k1");
|
||||
const curvePoints = epCurve.getG().multiply(privateKeyBigInt);
|
||||
const epCurve = EllipticCurve.getSECCurveByName("secp256k1")
|
||||
const curvePoints = epCurve.getG().multiply(privateKeyBigInt)
|
||||
|
||||
const x = curvePoints.getX().toBigInteger();
|
||||
const y = curvePoints.getY().toBigInteger();
|
||||
const x = curvePoints.getX().toBigInteger()
|
||||
const y = curvePoints.getY().toBigInteger()
|
||||
|
||||
// Compressed Public Key (33 bytes)
|
||||
this.grandChildPublicKey = EllipticCurve.integerToBytes(x, 32)
|
||||
|
||||
|
||||
if (y.isEven()) {
|
||||
|
||||
this.grandChildPublicKey.unshift(0x02) // append point indicator
|
||||
} else {
|
||||
|
||||
this.grandChildPublicKey.unshift(0x03) // append point indicator
|
||||
}
|
||||
|
||||
@ -729,16 +709,16 @@ export default class AltcoinHDWallet {
|
||||
|
||||
const derivePrivateGrandChildKey = (cI, i) => {
|
||||
|
||||
let ib = [];
|
||||
ib.push((cI >> 24) & 0xff);
|
||||
ib.push((cI >> 16) & 0xff);
|
||||
ib.push((cI >> 8) & 0xff);
|
||||
ib.push(cI & 0xff);
|
||||
let ib = []
|
||||
ib.push((cI >> 24) & 0xff)
|
||||
ib.push((cI >> 16) & 0xff)
|
||||
ib.push((cI >> 8) & 0xff)
|
||||
ib.push(cI & 0xff)
|
||||
|
||||
const s = [...this.childPublicKey].concat(ib);
|
||||
const s = [...this.childPublicKey].concat(ib)
|
||||
|
||||
|
||||
const _hmacSha512 = new jsSHA("SHA-512", "UINT8ARRAY", { numRounds: 1, hmacKey: { value: this.childChainCode, format: "UINT8ARRAY" } });
|
||||
const _hmacSha512 = new jsSHA("SHA-512", "UINT8ARRAY", { numRounds: 1, hmacKey: { value: this.childChainCode, format: "UINT8ARRAY" } })
|
||||
_hmacSha512.update(new Uint8Array(s))
|
||||
|
||||
|
||||
@ -746,10 +726,10 @@ export default class AltcoinHDWallet {
|
||||
this.grandChildChainCode = _hmacSha512.getHMAC('UINT8ARRAY').slice(32, 64) // IR according to the SPEC
|
||||
|
||||
// SECP256k1 init
|
||||
const epCurve = EllipticCurve.getSECCurveByName("secp256k1");
|
||||
const epCurve = EllipticCurve.getSECCurveByName("secp256k1")
|
||||
|
||||
|
||||
const ki = IL.add(BigInteger.fromByteArrayUnsigned(this.childPrivateKey)).mod(epCurve.getN()); // parse256(IL) + kpar (mod n) ==> ki
|
||||
const ki = IL.add(BigInteger.fromByteArrayUnsigned(this.childPrivateKey)).mod(epCurve.getN()) // parse256(IL) + kpar (mod n) ==> ki
|
||||
this.grandChildPrivateKey = ki.toByteArrayUnsigned()
|
||||
|
||||
|
||||
@ -774,10 +754,10 @@ export default class AltcoinHDWallet {
|
||||
s.push(...(this.childPublicKeyHash.slice(0, 4)))
|
||||
|
||||
// Append Child Index
|
||||
s.push(childIndex >>> 24);
|
||||
s.push((childIndex >>> 16) & 0xff);
|
||||
s.push((childIndex >>> 8) & 0xff);
|
||||
s.push(childIndex & 0xff);
|
||||
s.push(childIndex >>> 24)
|
||||
s.push((childIndex >>> 16) & 0xff)
|
||||
s.push((childIndex >>> 8) & 0xff)
|
||||
s.push(childIndex & 0xff)
|
||||
|
||||
// Append Chain Code
|
||||
s.push(...this.grandChildChainCode)
|
||||
@ -816,10 +796,10 @@ export default class AltcoinHDWallet {
|
||||
s.push(...(this.childPublicKeyHash.slice(0, 4)))
|
||||
|
||||
// Append Child Index
|
||||
s.push(childIndex >>> 24);
|
||||
s.push((childIndex >>> 16) & 0xff);
|
||||
s.push((childIndex >>> 8) & 0xff);
|
||||
s.push(childIndex & 0xff);
|
||||
s.push(childIndex >>> 24)
|
||||
s.push((childIndex >>> 16) & 0xff)
|
||||
s.push((childIndex >>> 8) & 0xff)
|
||||
s.push(childIndex & 0xff)
|
||||
|
||||
// Append Chain Code
|
||||
s.push(...this.grandChildChainCode)
|
||||
|
@ -1,4 +1,4 @@
|
||||
"use strict";
|
||||
'use strict'
|
||||
|
||||
// Qortal TX types
|
||||
const TX_TYPES = {
|
||||
@ -149,8 +149,6 @@ const ERROR_CODES = {
|
||||
1000: "Not yet released."
|
||||
}
|
||||
|
||||
const CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP = 0
|
||||
|
||||
// Qortal 8 decimals
|
||||
const QORT_DECIMALS = 1e8
|
||||
|
||||
@ -160,6 +158,9 @@ const ADDRESS_VERSION = 58
|
||||
// Proxy for api calls
|
||||
const PROXY_URL = "/proxy/"
|
||||
|
||||
// Chat reference timestamp
|
||||
const CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP = 1674316800000
|
||||
|
||||
// Used as a salt for all qora addresses. Salts used for storing your private keys in local storage will be randomly generated
|
||||
const STATIC_SALT = new Uint8Array([54, 190, 201, 206, 65, 29, 123, 129, 147, 231, 180, 166, 171, 45, 95, 165, 78, 200, 208, 194, 44, 207, 221, 146, 45, 238, 68, 68, 69, 102, 62, 6])
|
||||
const BCRYPT_ROUNDS = 10 // Remember that the total work spent on key derivation is BCRYPT_ROUNDS * KDF_THREADS
|
||||
|
@ -8,21 +8,14 @@ const CHECK_LAST_REF_INTERVAL = 30 * 1000 // err 30 seconds
|
||||
|
||||
const pendingAddresses = {}
|
||||
|
||||
// const config = store.getState().config
|
||||
// const node = config.coin.node.api
|
||||
// const baseUrl = node.url + node.tail
|
||||
|
||||
const checkLastRefs = () => {
|
||||
Object.entries(pendingAddresses).forEach(([address, fn]) => {
|
||||
// console.log(fn, address)
|
||||
request('addresses/lastreference/' + address).then(res => {
|
||||
if (res === 'false') return
|
||||
fn(res)
|
||||
delete pendingAddresses[address]
|
||||
clearInterval(lastRefInterval)
|
||||
})
|
||||
// fetch(baseUrl + 'addresses/lastreference/' + address)
|
||||
// .then(async res => res.text())
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
import { HmacSha512, AES_CBC } from 'asmcrypto.js'
|
||||
import { kdf } from './kdf.js'
|
||||
// import Base58 from '../qora/deps/Base58.js'
|
||||
import Base58 from './deps/Base58.js'
|
||||
|
||||
const getRandomValues = window.crypto ? window.crypto.getRandomValues.bind(window.crypto) : window.msCrypto.getRandomValues.bind(window.msCrypto)
|
||||
@ -10,15 +9,12 @@ export const generateSaveWalletData = async (wallet, password, kdfThreads, statu
|
||||
let iv = new Uint8Array(16)
|
||||
getRandomValues(iv)
|
||||
let salt = new Uint8Array(32)
|
||||
getRandomValues(salt) // Can actually use a salt this time, as we can store the salt with the wallet
|
||||
|
||||
// const key = PBKDF2_HMAC_SHA512.bytes(utils.stringtoUTF8Array(password), salt, PBKDF2_ROUNDS, 64) // 512bit key to be split in two for mac/encryption
|
||||
getRandomValues(salt)
|
||||
const key = await kdf(password, salt, statusUpdateFn)
|
||||
statusUpdateFn('Encrypting seed')
|
||||
const encryptionKey = key.slice(0, 32)
|
||||
const macKey = key.slice(32, 63)
|
||||
const encryptedSeed = AES_CBC.encrypt(wallet._byteSeed, encryptionKey, false, iv)
|
||||
// const mac = HmacSha512.bytes(encryptedSeed, macKey)
|
||||
statusUpdateFn('Generating mac')
|
||||
const mac = new HmacSha512(macKey).process(encryptedSeed).finish().result
|
||||
return {
|
||||
|
@ -1,18 +1,14 @@
|
||||
// Trade Bot
|
||||
import TradeBotCreateRequest from './transactions/trade-portal/tradebot/TradeBotCreateRequest.js';
|
||||
import TradeBotRespondRequest from './transactions/trade-portal/tradebot/TradeBotRespondRequest.js';
|
||||
import TradeBotCreateRequest from './transactions/trade-portal/tradebot/TradeBotCreateRequest.js'
|
||||
import TradeBotRespondRequest from './transactions/trade-portal/tradebot/TradeBotRespondRequest.js'
|
||||
import signTradeBotTransaction from './transactions/trade-portal/tradebot/signTradeBotTransaction.js'
|
||||
|
||||
// Trade Offer
|
||||
import DeleteTradeOffer from './transactions/trade-portal/tradeoffer/DeleteTradeOffer.js';
|
||||
|
||||
import DeleteTradeOffer from './transactions/trade-portal/tradeoffer/DeleteTradeOffer.js'
|
||||
import { request } from './fetch-request'
|
||||
|
||||
|
||||
// TradeBotCreateRequest
|
||||
export const tradeBotCreateRequest = (requestObject) => {
|
||||
const txn = new TradeBotCreateRequest().createTransaction(requestObject)
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
|
||||
|
||||
return request(`/crosschain/tradebot/create?apiKey=${myNode.apiKey}`, {
|
||||
method: 'POST',
|
||||
@ -27,7 +23,7 @@ export const tradeBotCreateRequest = (requestObject) => {
|
||||
// TradeBotRespondRequest
|
||||
export const tradeBotRespondRequest = (requestObject) => {
|
||||
const txn = new TradeBotRespondRequest().createTransaction(requestObject)
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
|
||||
|
||||
return request(`/crosschain/tradebot/respond?apiKey=${myNode.apiKey}`, {
|
||||
method: 'POST',
|
||||
@ -39,7 +35,6 @@ export const tradeBotRespondRequest = (requestObject) => {
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// Sign Trade Transactions
|
||||
export const signTradeBotTxn = (unsignedTxn, keyPair) => {
|
||||
return signTradeBotTransaction(unsignedTxn, keyPair)
|
||||
@ -48,7 +43,7 @@ export const signTradeBotTxn = (unsignedTxn, keyPair) => {
|
||||
// Delete Trade Offer
|
||||
export const deleteTradeOffer = (requestObject) => {
|
||||
const txn = new DeleteTradeOffer().createTransaction(requestObject)
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
|
||||
|
||||
return request(`/crosschain/tradeoffer?apiKey=${myNode.apiKey}`, {
|
||||
method: 'DELETE',
|
||||
@ -62,7 +57,7 @@ export const deleteTradeOffer = (requestObject) => {
|
||||
|
||||
// Send BTC
|
||||
export const sendBtc = (requestObject) => {
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
|
||||
|
||||
return request(`/crosschain/btc/send?apiKey=${myNode.apiKey}`, {
|
||||
method: 'POST',
|
||||
@ -76,7 +71,7 @@ export const sendBtc = (requestObject) => {
|
||||
|
||||
// Send LTC
|
||||
export const sendLtc = (requestObject) => {
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
|
||||
|
||||
return request(`/crosschain/ltc/send?apiKey=${myNode.apiKey}`, {
|
||||
method: 'POST',
|
||||
@ -90,7 +85,7 @@ export const sendLtc = (requestObject) => {
|
||||
|
||||
// Send DOGE
|
||||
export const sendDoge = (requestObject) => {
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
|
||||
|
||||
return request(`/crosschain/doge/send?apiKey=${myNode.apiKey}`, {
|
||||
method: 'POST',
|
||||
@ -104,7 +99,7 @@ export const sendDoge = (requestObject) => {
|
||||
|
||||
// Send DGB
|
||||
export const sendDgb = (requestObject) => {
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
|
||||
|
||||
return request(`/crosschain/dgb/send?apiKey=${myNode.apiKey}`, {
|
||||
method: 'POST',
|
||||
@ -118,7 +113,7 @@ export const sendDgb = (requestObject) => {
|
||||
|
||||
// Send RVN
|
||||
export const sendRvn = (requestObject) => {
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
|
||||
|
||||
return request(`/crosschain/rvn/send?apiKey=${myNode.apiKey}`, {
|
||||
method: 'POST',
|
||||
@ -132,7 +127,7 @@ export const sendRvn = (requestObject) => {
|
||||
|
||||
// Send ARRR
|
||||
export const sendArrr = (requestObject) => {
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
|
||||
|
||||
return request(`/crosschain/arrr/send?apiKey=${myNode.apiKey}`, {
|
||||
method: 'POST',
|
||||
|
@ -1,32 +1,17 @@
|
||||
'use strict';
|
||||
'use strict'
|
||||
import TransactionBase from './TransactionBase.js'
|
||||
import { QORT_DECIMALS } from '../constants.js'
|
||||
// import { Sha256 } from 'asmcrypto.js/dist_es5/entry-export_all.js'
|
||||
|
||||
export default class PaymentTransaction extends TransactionBase {
|
||||
constructor() {
|
||||
super()
|
||||
this.type = 20
|
||||
this.amount = 42 * Math.pow(10, 8)
|
||||
this.tests.push(
|
||||
() => {
|
||||
if (!(this._amount >= 0)) {
|
||||
return 'Invalid amount ' + this._amount / QORT_DECIMALS
|
||||
}
|
||||
return true
|
||||
},
|
||||
() => {
|
||||
if (!(this._recipient instanceof Uint8Array && this._recipient.length == 25)) {
|
||||
return 'Invalid recipient ' + Base58.encode(this._recipient)
|
||||
}
|
||||
return true
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
set recipient (recipient) { // Always Base58 encoded. Accepts Uint8Array or Base58 string.
|
||||
set recipient(recipient) {
|
||||
this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient)
|
||||
}
|
||||
|
||||
set amount(amount) {
|
||||
this._amount = amount * QORT_DECIMALS
|
||||
this._amountBytes = this.constructor.utils.int64ToBytes(amount)
|
||||
|
@ -1,22 +1,13 @@
|
||||
'use strict';
|
||||
'use strict'
|
||||
import TransactionBase from './TransactionBase.js'
|
||||
// import { QORT_DECIMALS } from "../constants.js" // Not needed, no amount
|
||||
|
||||
export default class DelegationTransaction extends TransactionBase {
|
||||
constructor() {
|
||||
super()
|
||||
this.type = 18
|
||||
this.tests.push(
|
||||
() => {
|
||||
if (!(this._superNodeAddress instanceof Uint8Array && this._superNodeAddress.length == 25)) {
|
||||
return 'Invalid recipient ' + Base58.encode(this._superNodeAddress)
|
||||
}
|
||||
return true
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
set superNodeAddress (superNodeAddress) { // Always Base58 encoded. Accepts Uint8Array or Base58 string.
|
||||
set superNodeAddress(superNodeAddress) {
|
||||
this._superNodeAddress = superNodeAddress instanceof Uint8Array ? superNodeAddress : this.constructor.Base58.decode(superNodeAddress)
|
||||
}
|
||||
|
||||
|
@ -1,14 +1,10 @@
|
||||
"use strict";
|
||||
import PaymentTransaction from "./PaymentTransaction.js"
|
||||
import { QORT_DECIMALS } from "../constants.js"
|
||||
|
||||
/* ====================================
|
||||
EXTEND THE PAYMENT TRANSACTION YOU CLOWN
|
||||
====================================== */
|
||||
'use strict'
|
||||
import PaymentTransaction from './PaymentTransaction.js'
|
||||
import { QORT_DECIMALS } from '../constants.js'
|
||||
|
||||
export default class MessageTransaction extends PaymentTransaction {
|
||||
constructor() {
|
||||
super();
|
||||
super()
|
||||
this.type = 17
|
||||
this._key = this.constructor.utils.int64ToBytes(0);
|
||||
this._isEncrypted = new Uint8Array(1); // Defaults to false
|
||||
@ -17,22 +13,22 @@ export default class MessageTransaction extends PaymentTransaction{
|
||||
|
||||
set message(message /* UTF8 String */) {
|
||||
// ...yes? no?
|
||||
this.messageText = message;
|
||||
this.messageText = message
|
||||
|
||||
// Not sure about encoding here...
|
||||
//this._message = message instanceof Uint8Array ? message : this.constructor.Base58.decode(message);
|
||||
this._message = this.constructor.utils.stringtoUTF8Array(message)
|
||||
this._messageLength = this.constructor.utils.int64ToBytes(this._message.length)
|
||||
}
|
||||
|
||||
set isEncrypted(isEncrypted) {
|
||||
this._isEncrypted[0] = isEncrypted;
|
||||
this._isEncrypted[0] = isEncrypted
|
||||
}
|
||||
|
||||
set isText(isText) {
|
||||
this._isText[0] = isText;
|
||||
this._isText[0] = isText
|
||||
}
|
||||
|
||||
get _params() {
|
||||
// dont extend super because paymentTrasaction is different
|
||||
//const params = super.params;
|
||||
return [
|
||||
this._typeBytes,
|
||||
this._timestampBytes,
|
||||
@ -49,47 +45,3 @@ export default class MessageTransaction extends PaymentTransaction{
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
//"use strict";
|
||||
//function generateSignatureMessageTransaction(keyPair, lastReference, recipient, amount, fee, timestamp, message, isText, isEncrypted) => {
|
||||
// const data = generateMessageTransactionBase(keyPair.publicKey, lastReference, recipient, amount, fee, timestamp, message, isText, isEncrypted);
|
||||
// return nacl.sign.detached(data, keyPair.privateKey);
|
||||
//}
|
||||
//
|
||||
//function generateMessageTransaction(keyPair, lastReference, recipient, amount, fee, timestamp, message, isText, isEncrypted, signature) => {
|
||||
// return appendBuffer(generateMessageTransactionBase(keyPair.publicKey, lastReference, recipient, amount, fee, timestamp, message, isText, isEncrypted),
|
||||
// signature);
|
||||
//}
|
||||
//function generateMessageTransactionBase(publicKey, lastReference, recipient, amount, fee, timestamp, message, isText, isEncrypted) => {
|
||||
// txType = TYPES.MESSAGE_TRANSACTION;
|
||||
//
|
||||
// const typeBytes = int32ToBytes(txType);
|
||||
// const timestampBytes = int64ToBytes(timestamp);
|
||||
// const amountBytes = int64ToBytes(amount * 100000000);
|
||||
// const feeBytes = int64ToBytes(fee * 100000000);
|
||||
// const messageLength = int32ToBytes(message.length);
|
||||
// const key = int64ToBytes(0);
|
||||
//
|
||||
// isTextB = new Uint8Array(1);
|
||||
// isTextB[0] = isText;
|
||||
//
|
||||
// isEncryptedB = new Uint8Array(1);
|
||||
// isEncryptedB[0] = isEncrypted;
|
||||
//
|
||||
// let data = new Uint8Array();
|
||||
//
|
||||
// data = appendBuffer(data, typeBytes);
|
||||
// data = appendBuffer(data, timestampBytes);
|
||||
// data = appendBuffer(data, lastReference);
|
||||
// data = appendBuffer(data, publicKey);
|
||||
// data = appendBuffer(data, recipient);
|
||||
// data = appendBuffer(data, key);
|
||||
// data = appendBuffer(data, amountBytes);
|
||||
// data = appendBuffer(data, messageLength);
|
||||
// data = appendBuffer(data, message);
|
||||
// data = appendBuffer(data, isEncryptedB);
|
||||
// data = appendBuffer(data, isTextB);
|
||||
// data = appendBuffer(data, feeBytes);
|
||||
//
|
||||
// return data;
|
||||
//}
|
@ -1,4 +1,4 @@
|
||||
'use strict';
|
||||
'use strict'
|
||||
import TransactionBase from './TransactionBase.js'
|
||||
import Base58 from '../deps/Base58.js'
|
||||
import { store } from '../../api.js'
|
||||
@ -7,23 +7,34 @@ export default class PaymentTransaction extends TransactionBase {
|
||||
constructor() {
|
||||
super()
|
||||
this.type = 2
|
||||
this.tests.push(
|
||||
() => {
|
||||
if (!(this._amount >= 0)) {
|
||||
return 'Invalid amount ' + this._amount / store.getState().config.coin.decimals
|
||||
}
|
||||
return true
|
||||
},
|
||||
() => {
|
||||
if (!(this._recipient instanceof Uint8Array && this._recipient.length == 25)) {
|
||||
return 'Invalid recipient ' + Base58.encode(this._recipient)
|
||||
}
|
||||
return true
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
set recipient(recipient) { // Always Base58 encoded. Accepts Uint8Array or Base58 string.
|
||||
render(html) {
|
||||
const conf = store.getState().config
|
||||
return html`
|
||||
<table>
|
||||
<tr>
|
||||
<th>${this._dialogto}:</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>${this.dialogAddress} ${' '}-</td>
|
||||
<td>${Base58.encode(this._recipient)}</td>
|
||||
</tr>
|
||||
${this.recipientName ? html`
|
||||
<tr>
|
||||
<td>${this.dialogName} ${' '}-</td>
|
||||
<td>${this.recipientName}</td>
|
||||
</tr>
|
||||
` : ''}
|
||||
<tr>
|
||||
<th>${this._dialogamount}</th>
|
||||
<td>${this._amount / conf.coin.decimals} ${conf.coin.symbol}</td>
|
||||
</tr>
|
||||
</table>
|
||||
`
|
||||
}
|
||||
|
||||
set recipient(recipient) {
|
||||
this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient)
|
||||
}
|
||||
|
||||
@ -49,32 +60,4 @@ export default class PaymentTransaction extends TransactionBase {
|
||||
)
|
||||
return params
|
||||
}
|
||||
|
||||
render(html) {
|
||||
const conf = store.getState().config
|
||||
return html`
|
||||
<table>
|
||||
<tr>
|
||||
<th>${this._dialogto}:</th>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td>${this.dialogAddress} ${' '}-</td>
|
||||
<td>${Base58.encode(this._recipient)}</td>
|
||||
|
||||
</tr>
|
||||
${this.recipientName ? html`
|
||||
<tr>
|
||||
<td>${this.dialogName} ${' '}-</td>
|
||||
<td>${this.recipientName}</td>
|
||||
</tr>
|
||||
` : ''}
|
||||
|
||||
<tr>
|
||||
<th>${this._dialogamount}</th>
|
||||
<td>${this._amount / conf.coin.decimals} ${conf.coin.symbol}</td>
|
||||
</tr>
|
||||
</table>
|
||||
`
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ import { QORT_DECIMALS } from "../constants.js"
|
||||
|
||||
export default class PublicizeTransaction extends ChatBase {
|
||||
constructor() {
|
||||
super();
|
||||
super()
|
||||
this.type = 19
|
||||
this.fee = 0
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
'use strict';
|
||||
'use strict'
|
||||
import { TX_TYPES, QORT_DECIMALS } from '../constants.js'
|
||||
import nacl from '../deps/nacl-fast.js'
|
||||
import Base58 from '../deps/Base58.js'
|
||||
@ -16,7 +16,6 @@ export default class TransactionBase {
|
||||
}
|
||||
|
||||
constructor() {
|
||||
// Defaults
|
||||
this.fee = 0
|
||||
this.groupID = 0
|
||||
this.timestamp = Date.now()
|
||||
@ -48,7 +47,6 @@ export default class TransactionBase {
|
||||
() => {
|
||||
if (!(this._lastReference instanceof Uint8Array && this._lastReference.byteLength == 64)) {
|
||||
if (this._lastReference == 0) {
|
||||
// No prior transactions exist
|
||||
return 'Invalid last reference. Please ensure that you have at least 0.001 QORT for the transaction fee.'
|
||||
}
|
||||
return 'Invalid last reference: ' + this._lastReference
|
||||
@ -70,30 +68,39 @@ export default class TransactionBase {
|
||||
]
|
||||
}
|
||||
|
||||
render(html) {
|
||||
return html`render method to display requested transaction info`
|
||||
}
|
||||
|
||||
set keyPair(keyPair) {
|
||||
this._keyPair = keyPair
|
||||
}
|
||||
|
||||
set type(type) {
|
||||
this.typeText = TX_TYPES[type]
|
||||
this._type = type
|
||||
this._typeBytes = this.constructor.utils.int32ToBytes(this._type)
|
||||
}
|
||||
|
||||
set groupID(groupID) {
|
||||
this._groupID = groupID
|
||||
this._groupIDBytes = this.constructor.utils.int32ToBytes(this._groupID)
|
||||
}
|
||||
|
||||
set timestamp(timestamp) {
|
||||
this._timestamp = timestamp
|
||||
this._timestampBytes = this.constructor.utils.int64ToBytes(this._timestamp)
|
||||
}
|
||||
|
||||
set fee(fee) {
|
||||
this._fee = fee * QORT_DECIMALS
|
||||
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
|
||||
}
|
||||
set lastReference(lastReference) { // Always Base58 encoded. Accepts Uint8Array or Base58 string.
|
||||
// lastReference could be a string or an Uint8Array
|
||||
|
||||
set lastReference(lastReference) {
|
||||
this._lastReference = lastReference instanceof Uint8Array ? lastReference : this.constructor.Base58.decode(lastReference)
|
||||
}
|
||||
|
||||
get params() {
|
||||
return [
|
||||
this._typeBytes,
|
||||
@ -103,6 +110,7 @@ export default class TransactionBase {
|
||||
this._keyPair.publicKey
|
||||
]
|
||||
}
|
||||
|
||||
get signedBytes() {
|
||||
if (!this._signedBytes) {
|
||||
this.sign()
|
||||
@ -110,16 +118,10 @@ export default class TransactionBase {
|
||||
return this._signedBytes
|
||||
}
|
||||
|
||||
// render function but NOT lit element
|
||||
render(html) {
|
||||
return html`render method to display requested transaction info`
|
||||
}
|
||||
|
||||
validParams() {
|
||||
let finalResult = {
|
||||
valid: true
|
||||
}
|
||||
// const valid =
|
||||
this.tests.some(test => {
|
||||
const result = test()
|
||||
if (result !== true) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
'use strict';
|
||||
'use strict'
|
||||
import TransactionBase from './TransactionBase.js'
|
||||
import Base58 from '../deps/Base58.js'
|
||||
import { store } from '../../api.js'
|
||||
|
@ -2,7 +2,6 @@ import nacl from '../../deps/nacl-fast.js'
|
||||
import utils from '../../deps/utils.js'
|
||||
import Base58 from '../../deps/Base58.js'
|
||||
|
||||
|
||||
const signArbitrary = (arbitraryBytesBase58, arbitraryBytesForSigningBase58, nonce, keyPair) => {
|
||||
|
||||
if (!arbitraryBytesBase58) {
|
||||
@ -18,11 +17,11 @@ const signArbitrary = (arbitraryBytesBase58, arbitraryBytesForSigningBase58, non
|
||||
}
|
||||
|
||||
const arbitraryBytes = Base58.decode(arbitraryBytesBase58)
|
||||
const _arbitraryBytesBuffer = Object.keys(arbitraryBytes).map(function (key) { return arbitraryBytes[key]; });
|
||||
const _arbitraryBytesBuffer = Object.keys(arbitraryBytes).map(function (key) { return arbitraryBytes[key]; })
|
||||
const arbitraryBytesBuffer = new Uint8Array(_arbitraryBytesBuffer)
|
||||
|
||||
const arbitraryBytesForSigning = Base58.decode(arbitraryBytesForSigningBase58)
|
||||
const _arbitraryBytesForSigningBuffer = Object.keys(arbitraryBytesForSigning).map(function (key) { return arbitraryBytesForSigning[key]; });
|
||||
const _arbitraryBytesForSigningBuffer = Object.keys(arbitraryBytesForSigning).map(function (key) { return arbitraryBytesForSigning[key]; })
|
||||
const arbitraryBytesForSigningBuffer = new Uint8Array(_arbitraryBytesForSigningBuffer)
|
||||
|
||||
const _nonce = utils.int32ToBytes(nonce)
|
||||
|
@ -1,42 +1,37 @@
|
||||
"use strict";
|
||||
/*
|
||||
TO DO
|
||||
*/
|
||||
|
||||
'use strict'
|
||||
|
||||
(function () {
|
||||
function generateSignatureArbitraryTransactionV3(keyPair, lastReference, service, arbitraryData, fee, timestamp) => {
|
||||
const data = generateArbitraryTransactionV3Base(keyPair.publicKey, lastReference, service, arbitraryData, fee, timestamp);
|
||||
return nacl.sign.detached(data, keyPair.privateKey);
|
||||
const data = generateArbitraryTransactionV3Base(keyPair.publicKey, lastReference, service, arbitraryData, fee, timestamp)
|
||||
return nacl.sign.detached(data, keyPair.privateKey)
|
||||
}
|
||||
|
||||
function generateArbitraryTransactionV3(keyPair, lastReference, service, arbitraryData, fee, timestamp, signature) => {
|
||||
return appendBuffer(generateArbitraryTransactionV3Base(keyPair.publicKey, lastReference, service, arbitraryData, fee, timestamp),
|
||||
signature);
|
||||
return appendBuffer(generateArbitraryTransactionV3Base(keyPair.publicKey, lastReference, service, arbitraryData, fee, timestamp), signature)
|
||||
}
|
||||
|
||||
function generateArbitraryTransactionV3Base(publicKey, lastReference, service, arbitraryData, fee, timestamp) => {
|
||||
const txType = TYPES.ARBITRARY_TRANSACTION;
|
||||
const typeBytes = int32ToBytes(txType);
|
||||
const timestampBytes = int64ToBytes(timestamp);
|
||||
const feeBytes = int64ToBytes(fee * 100000000);
|
||||
const serviceBytes = int32ToBytes(service);
|
||||
const dataSizeBytes = int32ToBytes(arbitraryData.length);
|
||||
const paymentsLengthBytes = int32ToBytes(0); // Support payments - not yet.
|
||||
const txType = TYPES.ARBITRARY_TRANSACTION
|
||||
const typeBytes = int32ToBytes(txType)
|
||||
const timestampBytes = int64ToBytes(timestamp)
|
||||
const feeBytes = int64ToBytes(fee * 100000000)
|
||||
const serviceBytes = int32ToBytes(service)
|
||||
const dataSizeBytes = int32ToBytes(arbitraryData.length)
|
||||
const paymentsLengthBytes = int32ToBytes(0) // Support payments - not yet.
|
||||
|
||||
var data = new Uint8Array();
|
||||
var data = new Uint8Array()
|
||||
|
||||
data = appendBuffer(data, typeBytes);
|
||||
data = appendBuffer(data, timestampBytes);
|
||||
data = appendBuffer(data, lastReference);
|
||||
data = appendBuffer(data, publicKey);
|
||||
data = appendBuffer(data, paymentsLengthBytes);
|
||||
data = appendBuffer(data, typeBytes)
|
||||
data = appendBuffer(data, timestampBytes)
|
||||
data = appendBuffer(data, lastReference)
|
||||
data = appendBuffer(data, publicKey)
|
||||
data = appendBuffer(data, paymentsLengthBytes)
|
||||
// Here it is necessary to insert the payments, if there are
|
||||
data = appendBuffer(data, serviceBytes);
|
||||
data = appendBuffer(data, dataSizeBytes);
|
||||
data = appendBuffer(data, arbitraryData);
|
||||
data = appendBuffer(data, feeBytes);
|
||||
data = appendBuffer(data, serviceBytes)
|
||||
data = appendBuffer(data, dataSizeBytes)
|
||||
data = appendBuffer(data, arbitraryData)
|
||||
data = appendBuffer(data, feeBytes)
|
||||
|
||||
return data;
|
||||
return data
|
||||
}
|
||||
}())
|
@ -1,4 +1,4 @@
|
||||
'use strict';
|
||||
'use strict'
|
||||
import { TX_TYPES, QORT_DECIMALS } from '../../constants.js'
|
||||
import nacl from '../../deps/nacl-fast.js'
|
||||
import Base58 from '../../deps/Base58.js'
|
||||
@ -67,28 +67,33 @@ export default class ChatBase {
|
||||
set keyPair(keyPair) {
|
||||
this._keyPair = keyPair
|
||||
}
|
||||
|
||||
set type(type) {
|
||||
this.typeText = TX_TYPES[type]
|
||||
this._type = type
|
||||
this._typeBytes = this.constructor.utils.int32ToBytes(this._type)
|
||||
}
|
||||
|
||||
set groupID(groupID) {
|
||||
this._groupID = groupID
|
||||
this._groupIDBytes = this.constructor.utils.int32ToBytes(this._groupID)
|
||||
}
|
||||
|
||||
set timestamp(timestamp) {
|
||||
this._timestamp = timestamp
|
||||
this._timestampBytes = this.constructor.utils.int64ToBytes(this._timestamp)
|
||||
}
|
||||
|
||||
set fee(fee) {
|
||||
this._fee = fee * QORT_DECIMALS
|
||||
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
|
||||
}
|
||||
|
||||
set lastReference(lastReference) {
|
||||
this._lastReference = lastReference instanceof Uint8Array ? lastReference : this.constructor.Base58.decode(lastReference)
|
||||
}
|
||||
get params() {
|
||||
|
||||
get params() {
|
||||
return [
|
||||
this._typeBytes,
|
||||
this._timestampBytes,
|
||||
@ -99,7 +104,6 @@ export default class ChatBase {
|
||||
}
|
||||
|
||||
get chatBytes() {
|
||||
|
||||
const isValid = this.validParams()
|
||||
if (!isValid.valid) {
|
||||
throw new Error(isValid.message)
|
||||
|
@ -1,4 +1,4 @@
|
||||
"use strict";
|
||||
'use strict'
|
||||
import ChatBase from "./ChatBase.js"
|
||||
import nacl from '../../deps/nacl-fast.js'
|
||||
import ed2curve from '../../deps/ed2curve.js'
|
||||
@ -8,7 +8,7 @@ import { CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP } from '../../constants.js'
|
||||
|
||||
export default class ChatTransaction extends ChatBase {
|
||||
constructor() {
|
||||
super();
|
||||
super()
|
||||
this.type = 18
|
||||
this.fee = 0
|
||||
}
|
||||
@ -16,14 +16,12 @@ export default class ChatTransaction extends ChatBase {
|
||||
set recipientPublicKey(recipientPublicKey) {
|
||||
this._base58RecipientPublicKey = recipientPublicKey instanceof Uint8Array ? this.constructor.Base58.encode(recipientPublicKey) : recipientPublicKey
|
||||
this._recipientPublicKey = this.constructor.Base58.decode(this._base58RecipientPublicKey)
|
||||
|
||||
}
|
||||
|
||||
set proofOfWorkNonce(proofOfWorkNonce) {
|
||||
this._proofOfWorkNonce = this.constructor.utils.int32ToBytes(proofOfWorkNonce)
|
||||
}
|
||||
|
||||
|
||||
set recipient(recipient) {
|
||||
this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient)
|
||||
this._hasReceipient = new Uint8Array(1)
|
||||
@ -40,22 +38,20 @@ export default class ChatTransaction extends ChatBase {
|
||||
}
|
||||
|
||||
set message(message) {
|
||||
|
||||
this.messageText = message;
|
||||
|
||||
this._message = this.constructor.utils.stringtoUTF8Array(message)
|
||||
this._messageLength = this.constructor.utils.int32ToBytes(this._message.length)
|
||||
}
|
||||
|
||||
set isEncrypted(isEncrypted) {
|
||||
this._isEncrypted = new Uint8Array(1);
|
||||
this._isEncrypted[0] = isEncrypted;
|
||||
this._isEncrypted = new Uint8Array(1)
|
||||
this._isEncrypted[0] = isEncrypted
|
||||
|
||||
if (isEncrypted === 1) {
|
||||
const convertedPrivateKey = ed2curve.convertSecretKey(this._keyPair.privateKey)
|
||||
const convertedPublicKey = ed2curve.convertPublicKey(this._recipientPublicKey)
|
||||
const sharedSecret = new Uint8Array(32);
|
||||
nacl.lowlevel.crypto_scalarmult(sharedSecret, convertedPrivateKey, convertedPublicKey);
|
||||
const sharedSecret = new Uint8Array(32)
|
||||
nacl.lowlevel.crypto_scalarmult(sharedSecret, convertedPrivateKey, convertedPublicKey)
|
||||
|
||||
this._chatEncryptionSeed = new Sha256().process(sharedSecret).finish().result
|
||||
this._encryptedMessage = nacl.secretbox(this._message, this._lastReference.slice(0, 24), this._chatEncryptionSeed)
|
||||
@ -66,12 +62,12 @@ export default class ChatTransaction extends ChatBase {
|
||||
}
|
||||
|
||||
set isText(isText) {
|
||||
this._isText = new Uint8Array(1);
|
||||
this._isText[0] = isText;
|
||||
this._isText = new Uint8Array(1)
|
||||
this._isText[0] = isText
|
||||
}
|
||||
|
||||
get params() {
|
||||
const params = super.params;
|
||||
const params = super.params
|
||||
params.push(
|
||||
this._proofOfWorkNonce,
|
||||
this._hasReceipient,
|
||||
@ -82,17 +78,15 @@ export default class ChatTransaction extends ChatBase {
|
||||
this._isText,
|
||||
this._feeBytes
|
||||
)
|
||||
console.log('updated test')
|
||||
|
||||
// After the feature trigger timestamp we need to include chat reference
|
||||
if (new Date(this._timestamp).getTime() >= CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP) {
|
||||
params.push(this._hasChatReference)
|
||||
|
||||
if (this._hasChatReference[0] == 1) {
|
||||
console.log('past through', this._chatReference)
|
||||
params.push(this._chatReference)
|
||||
}
|
||||
}
|
||||
console.log({params})
|
||||
return params;
|
||||
return params
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
"use strict";
|
||||
'use strict'
|
||||
import ChatBase from "./ChatBase.js"
|
||||
import { CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP } from '../../constants.js'
|
||||
|
||||
@ -13,12 +13,17 @@ export default class GroupChatTransaction extends ChatBase {
|
||||
this._proofOfWorkNonce = this.constructor.utils.int32ToBytes(proofOfWorkNonce)
|
||||
}
|
||||
|
||||
|
||||
set hasReceipient(hasReceipient) {
|
||||
this._hasReceipient = new Uint8Array(1)
|
||||
this._hasReceipient[0] = hasReceipient
|
||||
}
|
||||
|
||||
set message(message) {
|
||||
this.messageText = message
|
||||
this._message = this.constructor.utils.stringtoUTF8Array(message)
|
||||
this._messageLength = this.constructor.utils.int32ToBytes(this._message.length)
|
||||
}
|
||||
|
||||
set hasChatReference(hasChatReference) {
|
||||
this._hasChatReference = new Uint8Array(1)
|
||||
this._hasChatReference[0] = hasChatReference
|
||||
@ -28,26 +33,18 @@ export default class GroupChatTransaction extends ChatBase {
|
||||
this._chatReference = chatReference instanceof Uint8Array ? chatReference : this.constructor.Base58.decode(chatReference)
|
||||
}
|
||||
|
||||
set message(message) {
|
||||
|
||||
this.messageText = message;
|
||||
|
||||
this._message = this.constructor.utils.stringtoUTF8Array(message)
|
||||
this._messageLength = this.constructor.utils.int32ToBytes(this._message.length)
|
||||
}
|
||||
|
||||
set isEncrypted(isEncrypted) {
|
||||
this._isEncrypted = new Uint8Array(1);
|
||||
this._isEncrypted[0] = isEncrypted; // Set to false...
|
||||
this._isEncrypted[0] = isEncrypted
|
||||
}
|
||||
|
||||
set isText(isText) {
|
||||
this._isText = new Uint8Array(1);
|
||||
this._isText[0] = isText; // Set to true
|
||||
this._isText = new Uint8Array(1)
|
||||
this._isText[0] = isText
|
||||
}
|
||||
|
||||
get params() {
|
||||
const params = super.params;
|
||||
const params = super.params
|
||||
params.push(
|
||||
this._proofOfWorkNonce,
|
||||
this._hasReceipient,
|
||||
@ -66,7 +63,6 @@ export default class GroupChatTransaction extends ChatBase {
|
||||
params.push(this._chatReference)
|
||||
}
|
||||
}
|
||||
|
||||
return params;
|
||||
return params
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,6 @@ import Base58 from '../../deps/Base58.js'
|
||||
import ed2curve from '../../deps/ed2curve.js'
|
||||
import { Sha256 } from 'asmcrypto.js'
|
||||
|
||||
|
||||
export const decryptChatMessage = (encryptedMessage, privateKey, recipientPublicKey, lastReference) => {
|
||||
let _encryptedMessage = Base58.decode(encryptedMessage)
|
||||
|
||||
@ -15,13 +14,13 @@ export const decryptChatMessage = (encryptedMessage, privateKey, recipientPublic
|
||||
const convertedPrivateKey = ed2curve.convertSecretKey(privateKey)
|
||||
const convertedPublicKey = ed2curve.convertPublicKey(_recipientPublicKey)
|
||||
const sharedSecret = new Uint8Array(32);
|
||||
nacl.lowlevel.crypto_scalarmult(sharedSecret, convertedPrivateKey, convertedPublicKey);
|
||||
nacl.lowlevel.crypto_scalarmult(sharedSecret, convertedPrivateKey, convertedPublicKey)
|
||||
|
||||
const _chatEncryptionSeed = new Sha256().process(sharedSecret).finish().result
|
||||
const _decryptedMessage = nacl.secretbox.open(_encryptedMessage, _lastReference.slice(0, 24), _chatEncryptionSeed)
|
||||
|
||||
let decryptedMessage = ''
|
||||
|
||||
_decryptedMessage === false ? decryptedMessage : decryptedMessage = new TextDecoder('utf-8').decode(_decryptedMessage);
|
||||
_decryptedMessage === false ? decryptedMessage : decryptedMessage = new TextDecoder('utf-8').decode(_decryptedMessage)
|
||||
return decryptedMessage
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
import nacl from '../../deps/nacl-fast.js'
|
||||
import utils from '../../deps/utils.js'
|
||||
|
||||
|
||||
const signChat = (chatBytes, nonce, keyPair) => {
|
||||
|
||||
if (!chatBytes) {
|
||||
@ -19,12 +18,11 @@ const signChat = (chatBytes, nonce, keyPair) => {
|
||||
const _nonce = utils.int32ToBytes(nonce)
|
||||
|
||||
if (chatBytes.length === undefined) {
|
||||
const _chatBytesBuffer = Object.keys(chatBytes).map(function (key) { return chatBytes[key]; });
|
||||
const _chatBytesBuffer = Object.keys(chatBytes).map(function (key) { return chatBytes[key]; })
|
||||
|
||||
const chatBytesBuffer = new Uint8Array(_chatBytesBuffer)
|
||||
chatBytesBuffer.set(_nonce, 112)
|
||||
|
||||
|
||||
const signature = nacl.sign.detached(chatBytesBuffer, keyPair.privateKey)
|
||||
|
||||
const signedBytes = utils.appendBuffer(chatBytesBuffer, signature)
|
||||
@ -34,7 +32,6 @@ const signChat = (chatBytes, nonce, keyPair) => {
|
||||
const chatBytesBuffer = new Uint8Array(chatBytes)
|
||||
chatBytesBuffer.set(_nonce, 112)
|
||||
|
||||
|
||||
const signature = nacl.sign.detached(chatBytesBuffer, keyPair.privateKey)
|
||||
|
||||
const signedBytes = utils.appendBuffer(chatBytesBuffer, signature)
|
||||
|
@ -1,6 +1,6 @@
|
||||
'use strict';
|
||||
import TransactionBase from "../TransactionBase.js"
|
||||
import { QORT_DECIMALS } from "../../constants.js"
|
||||
'use strict'
|
||||
import TransactionBase from '../TransactionBase.js'
|
||||
import { QORT_DECIMALS } from '../../constants.js'
|
||||
|
||||
export default class AddGroupAdminTransaction extends TransactionBase {
|
||||
constructor() {
|
||||
@ -27,7 +27,7 @@ export default class AddGroupAdminTransaction extends TransactionBase {
|
||||
}
|
||||
|
||||
set rGroupId(rGroupId) {
|
||||
this._rGroupId = rGroupId;
|
||||
this._rGroupId = rGroupId
|
||||
this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId)
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
'use strict';
|
||||
import TransactionBase from "../TransactionBase.js"
|
||||
import { QORT_DECIMALS } from "../../constants.js"
|
||||
'use strict'
|
||||
import TransactionBase from '../TransactionBase.js'
|
||||
import { QORT_DECIMALS } from '../../constants.js'
|
||||
|
||||
export default class CancelGroupBanTransaction extends TransactionBase {
|
||||
constructor() {
|
||||
|
@ -1,6 +1,6 @@
|
||||
'use strict';
|
||||
import TransactionBase from "../TransactionBase.js"
|
||||
import { QORT_DECIMALS } from "../../constants.js"
|
||||
'use strict'
|
||||
import TransactionBase from '../TransactionBase.js'
|
||||
import { QORT_DECIMALS } from '../../constants.js'
|
||||
|
||||
export default class CancelGroupInviteTransaction extends TransactionBase {
|
||||
constructor() {
|
||||
@ -34,7 +34,7 @@ export default class CancelGroupInviteTransaction extends TransactionBase {
|
||||
}
|
||||
|
||||
set rGroupId(rGroupId) {
|
||||
this._rGroupId = rGroupId;
|
||||
this._rGroupId = rGroupId
|
||||
this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId)
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
"use strict";
|
||||
import TransactionBase from "../TransactionBase.js"
|
||||
import { QORT_DECIMALS } from "../../constants.js"
|
||||
'use strict'
|
||||
import TransactionBase from '../TransactionBase.js'
|
||||
import { QORT_DECIMALS } from '../../constants.js'
|
||||
|
||||
export default class CreateGroupTransaction extends TransactionBase {
|
||||
constructor() {
|
||||
@ -48,40 +48,40 @@ export default class CreateGroupTransaction extends TransactionBase {
|
||||
}
|
||||
|
||||
set rGroupName(rGroupName) {
|
||||
this._rGroupName = rGroupName;
|
||||
this._rGroupName = rGroupName
|
||||
this._rGroupNameBytes = this.constructor.utils.stringtoUTF8Array(this._rGroupName.toLocaleLowerCase())
|
||||
this._rGroupNameLength = this.constructor.utils.int32ToBytes(this._rGroupNameBytes.length)
|
||||
}
|
||||
|
||||
set rGroupDesc(rGroupDesc) {
|
||||
this._rGroupDesc = rGroupDesc;
|
||||
this._rGroupDesc = rGroupDesc
|
||||
this._rGroupDescBytes = this.constructor.utils.stringtoUTF8Array(this._rGroupDesc.toLocaleLowerCase())
|
||||
this._rGroupDescLength = this.constructor.utils.int32ToBytes(this._rGroupDescBytes.length)
|
||||
}
|
||||
|
||||
set rGroupType(rGroupType) {
|
||||
this.myGroupType = rGroupType;
|
||||
this.myGroupType = rGroupType
|
||||
this._rGroupType = new Uint8Array(1)
|
||||
this._rGroupType[0] = rGroupType;
|
||||
this._rGroupType[0] = rGroupType
|
||||
}
|
||||
|
||||
set rGroupApprovalThreshold(rGroupApprovalThreshold) {
|
||||
this._rGroupApprovalThreshold = new Uint8Array(1)
|
||||
this._rGroupApprovalThreshold[0] = rGroupApprovalThreshold;
|
||||
this._rGroupApprovalThreshold[0] = rGroupApprovalThreshold
|
||||
}
|
||||
|
||||
set rGroupMinimumBlockDelay(rGroupMinimumBlockDelay) {
|
||||
this._rGroupMinimumBlockDelay = rGroupMinimumBlockDelay;
|
||||
this._rGroupMinimumBlockDelay = rGroupMinimumBlockDelay
|
||||
this._rGroupMinimumBlockDelayBytes = this.constructor.utils.int32ToBytes(this._rGroupMinimumBlockDelay)
|
||||
}
|
||||
|
||||
set rGroupMaximumBlockDelay(rGroupMaximumBlockDelay) {
|
||||
this._rGroupMaximumBlockDelay = rGroupMaximumBlockDelay;
|
||||
this._rGroupMaximumBlockDelay = rGroupMaximumBlockDelay
|
||||
this._rGroupMaximumBlockDelayBytes = this.constructor.utils.int32ToBytes(this._rGroupMaximumBlockDelay)
|
||||
}
|
||||
|
||||
get params() {
|
||||
const params = super.params;
|
||||
const params = super.params
|
||||
params.push(
|
||||
this._rGroupNameLength,
|
||||
this._rGroupNameBytes,
|
||||
@ -93,6 +93,6 @@ export default class CreateGroupTransaction extends TransactionBase {
|
||||
this._rGroupMaximumBlockDelayBytes,
|
||||
this._feeBytes
|
||||
)
|
||||
return params;
|
||||
return params
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
'use strict';
|
||||
import TransactionBase from "../TransactionBase.js"
|
||||
import { QORT_DECIMALS } from "../../constants.js"
|
||||
'use strict'
|
||||
import TransactionBase from '../TransactionBase.js'
|
||||
import { QORT_DECIMALS } from '../../constants.js'
|
||||
|
||||
export default class GroupBanTransaction extends TransactionBase {
|
||||
constructor() {
|
||||
@ -27,7 +27,7 @@ export default class GroupBanTransaction extends TransactionBase {
|
||||
}
|
||||
|
||||
set rGroupId(rGroupId) {
|
||||
this._rGroupId = rGroupId;
|
||||
this._rGroupId = rGroupId
|
||||
this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId)
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
'use strict';
|
||||
import TransactionBase from "../TransactionBase.js"
|
||||
import { QORT_DECIMALS } from "../../constants.js"
|
||||
'use strict'
|
||||
import TransactionBase from '../TransactionBase.js'
|
||||
import { QORT_DECIMALS } from '../../constants.js'
|
||||
|
||||
export default class GroupInviteTransaction extends TransactionBase {
|
||||
constructor() {
|
||||
@ -27,7 +27,7 @@ export default class GroupInviteTransaction extends TransactionBase {
|
||||
}
|
||||
|
||||
set rGroupId(rGroupId) {
|
||||
this._rGroupId = rGroupId;
|
||||
this._rGroupId = rGroupId
|
||||
this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId)
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
'use strict';
|
||||
import TransactionBase from "../TransactionBase.js"
|
||||
import { QORT_DECIMALS } from "../../constants.js"
|
||||
'use strict'
|
||||
import TransactionBase from '../TransactionBase.js'
|
||||
import { QORT_DECIMALS } from '../../constants.js'
|
||||
|
||||
export default class GroupKickTransaction extends TransactionBase {
|
||||
constructor() {
|
||||
@ -27,7 +27,7 @@ export default class GroupKickTransaction extends TransactionBase {
|
||||
}
|
||||
|
||||
set rGroupId(rGroupId) {
|
||||
this._rGroupId = rGroupId;
|
||||
this._rGroupId = rGroupId
|
||||
this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId)
|
||||
}
|
||||
|
||||
|
@ -1,19 +1,11 @@
|
||||
"use strict";
|
||||
import TransactionBase from "../TransactionBase.js"
|
||||
import { QORT_DECIMALS } from "../../constants.js"
|
||||
'use strict'
|
||||
import TransactionBase from '../TransactionBase.js'
|
||||
import { QORT_DECIMALS } from '../../constants.js'
|
||||
|
||||
export default class JoinGroupTransaction extends TransactionBase {
|
||||
constructor() {
|
||||
super()
|
||||
this.type = 31
|
||||
this.tests.push(
|
||||
() => {
|
||||
if (!(this._registrantAddress instanceof Uint8Array && this._registrantAddress.length == 25)) {
|
||||
return "Invalid Registrant " + Base58.encode(this._registrantAddress)
|
||||
}
|
||||
return true
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
render(html) {
|
||||
@ -39,25 +31,25 @@ export default class JoinGroupTransaction extends TransactionBase {
|
||||
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
|
||||
}
|
||||
|
||||
set registrantAddress(registrantAddress) {// Always Base58 encoded. Accepts Uint8Array or Base58 string.
|
||||
this._registrantAddress = registrantAddress instanceof Uint8Array ? registrantAddress : this.constructor.Base58.decode(registrantAddress);
|
||||
set registrantAddress(registrantAddress) {
|
||||
this._registrantAddress = registrantAddress instanceof Uint8Array ? registrantAddress : this.constructor.Base58.decode(registrantAddress)
|
||||
}
|
||||
|
||||
set rGroupId(rGroupId) {
|
||||
this._rGroupId = rGroupId;
|
||||
this._rGroupId = rGroupId
|
||||
this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId)
|
||||
}
|
||||
|
||||
set rGroupName(rGroupName) {
|
||||
this._rGroupName = rGroupName;
|
||||
this._rGroupName = rGroupName
|
||||
}
|
||||
|
||||
get params() {
|
||||
const params = super.params;
|
||||
const params = super.params
|
||||
params.push(
|
||||
this._rGroupIdBytes,
|
||||
this._feeBytes
|
||||
)
|
||||
return params;
|
||||
return params
|
||||
}
|
||||
}
|
@ -1,19 +1,11 @@
|
||||
"use strict";
|
||||
import TransactionBase from "../TransactionBase.js"
|
||||
import { QORT_DECIMALS } from "../../constants.js"
|
||||
'use strict'
|
||||
import TransactionBase from '../TransactionBase.js'
|
||||
import { QORT_DECIMALS } from '../../constants.js'
|
||||
|
||||
export default class LeaveGroupTransaction extends TransactionBase {
|
||||
constructor() {
|
||||
super()
|
||||
this.type = 32
|
||||
this.tests.push(
|
||||
() => {
|
||||
if (!(this._registrantAddress instanceof Uint8Array && this._registrantAddress.length == 25)) {
|
||||
return "Invalid Registrant " + Base58.encode(this._registrantAddress)
|
||||
}
|
||||
return true
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
render(html) {
|
||||
@ -39,26 +31,25 @@ export default class LeaveGroupTransaction extends TransactionBase {
|
||||
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
|
||||
}
|
||||
|
||||
set registrantAddress(registrantAddress) {// Always Base58 encoded. Accepts Uint8Array or Base58 string.
|
||||
this._registrantAddress = registrantAddress instanceof Uint8Array ? registrantAddress : this.constructor.Base58.decode(registrantAddress);
|
||||
set registrantAddress(registrantAddress) {
|
||||
this._registrantAddress = registrantAddress instanceof Uint8Array ? registrantAddress : this.constructor.Base58.decode(registrantAddress)
|
||||
}
|
||||
|
||||
set rGroupId(rGroupId) {
|
||||
this._rGroupId = rGroupId;
|
||||
this._rGroupId = rGroupId
|
||||
this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId)
|
||||
}
|
||||
|
||||
set rGroupName(rGroupName) {
|
||||
this._rGroupName = rGroupName;
|
||||
this._rGroupName = rGroupName
|
||||
}
|
||||
|
||||
get params() {
|
||||
const params = super.params;
|
||||
const params = super.params
|
||||
params.push(
|
||||
this._rGroupIdBytes,
|
||||
this._feeBytes
|
||||
)
|
||||
console.log('check exec params2', params)
|
||||
return params;
|
||||
return params
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
'use strict';
|
||||
import TransactionBase from "../TransactionBase.js"
|
||||
import { QORT_DECIMALS } from "../../constants.js"
|
||||
'use strict'
|
||||
import TransactionBase from '../TransactionBase.js'
|
||||
import { QORT_DECIMALS } from '../../constants.js'
|
||||
|
||||
export default class RemoveGroupAdminTransaction extends TransactionBase {
|
||||
constructor() {
|
||||
@ -27,7 +27,7 @@ export default class RemoveGroupAdminTransaction extends TransactionBase {
|
||||
}
|
||||
|
||||
set rGroupId(rGroupId) {
|
||||
this._rGroupId = rGroupId;
|
||||
this._rGroupId = rGroupId
|
||||
this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId)
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
'use strict';
|
||||
'use strict'
|
||||
import TransactionBase from '../TransactionBase.js'
|
||||
import { QORT_DECIMALS } from '../../constants.js'
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
'use strict';
|
||||
'use strict'
|
||||
import TransactionBase from '../TransactionBase.js'
|
||||
import { QORT_DECIMALS } from '../../constants.js'
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
"use strict";
|
||||
import TransactionBase from "../TransactionBase.js"
|
||||
import { QORT_DECIMALS } from "../../constants.js"
|
||||
'use strict'
|
||||
import TransactionBase from '../TransactionBase.js'
|
||||
import { QORT_DECIMALS } from '../../constants.js'
|
||||
|
||||
export default class RegisterNameTransaction extends TransactionBase {
|
||||
constructor() {
|
||||
@ -32,19 +32,19 @@ export default class RegisterNameTransaction extends TransactionBase {
|
||||
}
|
||||
|
||||
set name(name) {
|
||||
this.nameText = name;
|
||||
this.nameText = name
|
||||
this._nameBytes = this.constructor.utils.stringtoUTF8Array(name)
|
||||
this._nameLength = this.constructor.utils.int32ToBytes(this._nameBytes.length)
|
||||
}
|
||||
|
||||
set value(value) {
|
||||
this.valueText = value.length === 0 ? "Registered Name on the Qortal Chain" : value;
|
||||
this.valueText = value.length === 0 ? "Registered Name on the Qortal Chain" : value
|
||||
this._valueBytes = this.constructor.utils.stringtoUTF8Array(this.valueText)
|
||||
this._valueLength = this.constructor.utils.int32ToBytes(this._valueBytes.length)
|
||||
}
|
||||
|
||||
get params() {
|
||||
const params = super.params;
|
||||
const params = super.params
|
||||
params.push(
|
||||
this._nameLength,
|
||||
this._nameBytes,
|
||||
@ -52,6 +52,6 @@ export default class RegisterNameTransaction extends TransactionBase {
|
||||
this._valueBytes,
|
||||
this._feeBytes
|
||||
)
|
||||
return params;
|
||||
return params
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
'use strict';
|
||||
'use strict'
|
||||
import TransactionBase from '../TransactionBase.js'
|
||||
import { QORT_DECIMALS } from '../../constants.js'
|
||||
|
||||
|
@ -1,39 +1,36 @@
|
||||
"use strict";
|
||||
/*
|
||||
TO DO
|
||||
*/
|
||||
'use strict'
|
||||
|
||||
(function () {
|
||||
function generateSignatureRegisterNameTransaction(keyPair, lastReference, owner, name, value, fee, timestamp) => {
|
||||
const data = generateRegisterNameTransactionBase(keyPair.publicKey, lastReference, owner, name, value, fee, timestamp);
|
||||
return nacl.sign.detached(data, keyPair.privateKey);
|
||||
const data = generateRegisterNameTransactionBase(keyPair.publicKey, lastReference, owner, name, value, fee, timestamp)
|
||||
return nacl.sign.detached(data, keyPair.privateKey)
|
||||
}
|
||||
|
||||
function generateRegisterNameTransaction(keyPair, lastReference, owner, name, value, fee, timestamp, signature) => {
|
||||
return appendBuffer( generateRegisterNameTransactionBase(keyPair.publicKey, lastReference, owner, name, value, fee, timestamp),
|
||||
signature );
|
||||
return appendBuffer(generateRegisterNameTransactionBase(keyPair.publicKey, lastReference, owner, name, value, fee, timestamp), signature)
|
||||
}
|
||||
|
||||
function generateRegisterNameTransactionBase(publicKey, lastReference, owner, name, value, fee, timestamp) => {
|
||||
const txType = TYPES.REGISTER_NAME_TRANSACTION;
|
||||
const typeBytes = int32ToBytes(txType);
|
||||
const timestampBytes = int64ToBytes(timestamp);
|
||||
const feeBytes = int64ToBytes(fee * 100000000);
|
||||
const nameSizeBytes = int32ToBytes(name.length);
|
||||
const valueSizeBytes = int32ToBytes(value.length);
|
||||
const txType = TYPES.REGISTER_NAME_TRANSACTION
|
||||
const typeBytes = int32ToBytes(txType)
|
||||
const timestampBytes = int64ToBytes(timestamp)
|
||||
const feeBytes = int64ToBytes(fee * 100000000)
|
||||
const nameSizeBytes = int32ToBytes(name.length)
|
||||
const valueSizeBytes = int32ToBytes(value.length)
|
||||
|
||||
let data = new Uint8Array();
|
||||
let data = new Uint8Array()
|
||||
|
||||
data = appendBuffer(data, typeBytes);
|
||||
data = appendBuffer(data, timestampBytes);
|
||||
data = appendBuffer(data, lastReference);
|
||||
data = appendBuffer(data, publicKey);
|
||||
data = appendBuffer(data, owner);
|
||||
data = appendBuffer(data, nameSizeBytes);
|
||||
data = appendBuffer(data, name);
|
||||
data = appendBuffer(data, valueSizeBytes);
|
||||
data = appendBuffer(data, value);
|
||||
data = appendBuffer(data, feeBytes);
|
||||
data = appendBuffer(data, typeBytes)
|
||||
data = appendBuffer(data, timestampBytes)
|
||||
data = appendBuffer(data, lastReference)
|
||||
data = appendBuffer(data, publicKey)
|
||||
data = appendBuffer(data, owner)
|
||||
data = appendBuffer(data, nameSizeBytes)
|
||||
data = appendBuffer(data, name)
|
||||
data = appendBuffer(data, valueSizeBytes)
|
||||
data = appendBuffer(data, value)
|
||||
data = appendBuffer(data, feeBytes)
|
||||
|
||||
return data;
|
||||
return data
|
||||
}
|
||||
}())
|
@ -1,7 +1,7 @@
|
||||
"use strict";
|
||||
import TransactionBase from "../TransactionBase.js"
|
||||
'use strict'
|
||||
import TransactionBase from '../TransactionBase.js'
|
||||
import publicKeyToAddress from '../../wallet/publicKeyToAddress.js'
|
||||
import { Base58 } from "../../deps/deps.js";
|
||||
import { Base58 } from '../../deps/deps.js'
|
||||
|
||||
export default class RemoveRewardShareTransaction extends TransactionBase {
|
||||
constructor() {
|
||||
@ -20,11 +20,11 @@ export default class RemoveRewardShareTransaction extends TransactionBase {
|
||||
}
|
||||
|
||||
set rewarddialog5(rewarddialog5) {
|
||||
this._rewarddialog5 = rewarddialog5;
|
||||
this._rewarddialog5 = rewarddialog5
|
||||
}
|
||||
|
||||
set rewarddialog6(rewarddialog6) {
|
||||
this._rewarddialog6 = rewarddialog6;
|
||||
this._rewarddialog6 = rewarddialog6
|
||||
}
|
||||
|
||||
set rewardShareKeyPairPublicKey(rewardShareKeyPairPublicKey) {
|
||||
@ -50,6 +50,6 @@ export default class RemoveRewardShareTransaction extends TransactionBase {
|
||||
this._percentageShareBytes,
|
||||
this._feeBytes
|
||||
)
|
||||
return params;
|
||||
return params
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
"use strict";
|
||||
'use strict'
|
||||
import publicKeyToAddress from '../../wallet/publicKeyToAddress.js'
|
||||
import TransactionBase from "../TransactionBase.js"
|
||||
import nacl from '../../deps/nacl-fast.js'
|
||||
@ -23,19 +23,19 @@ export default class RewardShareTransaction extends TransactionBase {
|
||||
}
|
||||
|
||||
set rewarddialog1(rewarddialog1) {
|
||||
this._rewarddialog1 = rewarddialog1;
|
||||
this._rewarddialog1 = rewarddialog1
|
||||
}
|
||||
|
||||
set rewarddialog2(rewarddialog2) {
|
||||
this._rewarddialog2 = rewarddialog2;
|
||||
this._rewarddialog2 = rewarddialog2
|
||||
}
|
||||
|
||||
set rewarddialog3(rewarddialog3) {
|
||||
this._rewarddialog3 = rewarddialog3;
|
||||
this._rewarddialog3 = rewarddialog3
|
||||
}
|
||||
|
||||
set rewarddialog4(rewarddialog4) {
|
||||
this._rewarddialog4 = rewarddialog4;
|
||||
this._rewarddialog4 = rewarddialog4
|
||||
}
|
||||
|
||||
set recipientPublicKey(recipientPublicKey) {
|
||||
@ -46,7 +46,6 @@ export default class RewardShareTransaction extends TransactionBase {
|
||||
|
||||
this.fee = (recipientPublicKey === this.constructor.Base58.encode(this._keyPair.publicKey) ? 0 : 0.001)
|
||||
|
||||
// Reward share keys
|
||||
const convertedPrivateKey = ed2curve.convertSecretKey(this._keyPair.privateKey)
|
||||
const convertedPublicKey = ed2curve.convertPublicKey(this._recipientPublicKey)
|
||||
const sharedSecret = new Uint8Array(32);
|
||||
@ -57,7 +56,7 @@ export default class RewardShareTransaction extends TransactionBase {
|
||||
this._rewardShareKeyPair = nacl.sign.keyPair.fromSeed(this._rewardShareSeed)
|
||||
}
|
||||
|
||||
set recipient(recipient) { // Always Base58 encoded. Accepts Uint8Array or Base58 string.
|
||||
set recipient(recipient) {
|
||||
this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient)
|
||||
}
|
||||
|
||||
@ -74,6 +73,6 @@ export default class RewardShareTransaction extends TransactionBase {
|
||||
this._percentageShareBytes,
|
||||
this._feeBytes
|
||||
)
|
||||
return params;
|
||||
return params
|
||||
}
|
||||
}
|
||||
|
@ -10,62 +10,46 @@ export default class TradeBotCreateRequest {
|
||||
}
|
||||
|
||||
createTransaction(txnReq) {
|
||||
this.creatorPublicKey(txnReq.creatorPublicKey)
|
||||
this.qortAmount(txnReq.qortAmount)
|
||||
this.fundingQortAmount(txnReq.fundingQortAmount)
|
||||
this.foreignBlockchain(txnReq.foreignBlockchain)
|
||||
this.foreignAmount(txnReq.foreignAmount)
|
||||
this.tradeTimeout(txnReq.tradeTimeout)
|
||||
this.receivingAddress(txnReq.receivingAddress)
|
||||
|
||||
this.creatorPublicKey(txnReq.creatorPublicKey);
|
||||
|
||||
this.qortAmount(txnReq.qortAmount);
|
||||
|
||||
this.fundingQortAmount(txnReq.fundingQortAmount);
|
||||
|
||||
this.foreignBlockchain(txnReq.foreignBlockchain);
|
||||
|
||||
this.foreignAmount(txnReq.foreignAmount);
|
||||
|
||||
this.tradeTimeout(txnReq.tradeTimeout);
|
||||
|
||||
this.receivingAddress(txnReq.receivingAddress);
|
||||
|
||||
return this.txnRequest();
|
||||
return this.txnRequest()
|
||||
}
|
||||
|
||||
creatorPublicKey(creatorPublicKey) {
|
||||
|
||||
this._creatorPublicKey = creatorPublicKey;
|
||||
|
||||
this._creatorPublicKey = creatorPublicKey
|
||||
}
|
||||
|
||||
qortAmount(qortAmount) {
|
||||
this._qortAmount = qortAmount;
|
||||
this._qortAmount = qortAmount
|
||||
}
|
||||
|
||||
|
||||
fundingQortAmount(fundingQortAmount) {
|
||||
|
||||
this._fundingQortAmount = fundingQortAmount;
|
||||
this._fundingQortAmount = fundingQortAmount
|
||||
}
|
||||
|
||||
foreignBlockchain(foreignBlockchain) {
|
||||
|
||||
this._foreignBlockchain = foreignBlockchain;
|
||||
this._foreignBlockchain = foreignBlockchain
|
||||
}
|
||||
|
||||
foreignAmount(foreignAmount) {
|
||||
|
||||
this._foreignAmount = foreignAmount;
|
||||
this._foreignAmount = foreignAmount
|
||||
}
|
||||
|
||||
tradeTimeout(tradeTimeout) {
|
||||
|
||||
this._tradeTimeout = tradeTimeout;
|
||||
this._tradeTimeout = tradeTimeout
|
||||
}
|
||||
|
||||
receivingAddress(receivingAddress) {
|
||||
|
||||
this._receivingAddress = receivingAddress;
|
||||
this._receivingAddress = receivingAddress
|
||||
}
|
||||
|
||||
txnRequest() {
|
||||
|
||||
return {
|
||||
creatorPublicKey: this._creatorPublicKey,
|
||||
qortAmount: this._qortAmount,
|
||||
|
@ -10,18 +10,14 @@ export default class TradeBotRespondRequest {
|
||||
}
|
||||
|
||||
createTransaction(txnReq) {
|
||||
|
||||
this.atAddress(txnReq.atAddress)
|
||||
|
||||
this.foreignKey(txnReq.foreignKey)
|
||||
|
||||
this.receivingAddress(txnReq.receivingAddress)
|
||||
|
||||
return this.txnRequest()
|
||||
}
|
||||
|
||||
atAddress(atAddress) {
|
||||
|
||||
this._atAddress = atAddress
|
||||
}
|
||||
|
||||
@ -30,12 +26,10 @@ export default class TradeBotRespondRequest {
|
||||
}
|
||||
|
||||
receivingAddress(receivingAddress) {
|
||||
|
||||
this._receivingAddress = receivingAddress
|
||||
}
|
||||
|
||||
txnRequest() {
|
||||
|
||||
return {
|
||||
atAddress: this._atAddress,
|
||||
foreignKey: this._foreignKey,
|
||||
|
@ -2,9 +2,7 @@ import Base58 from '../../../deps/Base58.js'
|
||||
import nacl from '../../../deps/nacl-fast.js'
|
||||
import utils from '../../../deps/utils.js'
|
||||
|
||||
|
||||
const signTradeBotTransaction = (unsignedTxn, keyPair) => {
|
||||
|
||||
if (!unsignedTxn) {
|
||||
throw new Error('Unsigned Transaction Bytes not defined')
|
||||
}
|
||||
@ -16,19 +14,14 @@ const signTradeBotTransaction = (unsignedTxn, keyPair) => {
|
||||
const txnBuffer = Base58.decode(unsignedTxn)
|
||||
|
||||
if (keyPair.privateKey.length === undefined) {
|
||||
|
||||
const _privateKey = Object.keys(keyPair.privateKey).map(function (key) { return keyPair.privateKey[key]; });
|
||||
const _privateKey = Object.keys(keyPair.privateKey).map(function (key) { return keyPair.privateKey[key]; })
|
||||
const privateKey = new Uint8Array(_privateKey)
|
||||
|
||||
const signature = nacl.sign.detached(txnBuffer, privateKey)
|
||||
|
||||
const signedBytes = utils.appendBuffer(txnBuffer, signature)
|
||||
|
||||
return signedBytes
|
||||
} else {
|
||||
|
||||
const signature = nacl.sign.detached(txnBuffer, keyPair.privateKey)
|
||||
|
||||
const signedBytes = utils.appendBuffer(txnBuffer, signature)
|
||||
|
||||
return signedBytes
|
||||
|
@ -10,27 +10,21 @@ export default class DeleteTradeOffer {
|
||||
}
|
||||
|
||||
createTransaction(txnReq) {
|
||||
|
||||
this.creatorPublicKey(txnReq.creatorPublicKey)
|
||||
|
||||
this.atAddress(txnReq.atAddress)
|
||||
|
||||
return this.txnRequest()
|
||||
}
|
||||
|
||||
creatorPublicKey(creatorPublicKey) {
|
||||
|
||||
this._creatorPublicKey = creatorPublicKey
|
||||
|
||||
}
|
||||
|
||||
atAddress(atAddress) {
|
||||
|
||||
this._atAddress = atAddress
|
||||
}
|
||||
|
||||
txnRequest() {
|
||||
|
||||
return {
|
||||
creatorPublicKey: this._creatorPublicKey,
|
||||
atAddress: this._atAddress
|
||||
|
@ -1,24 +1,25 @@
|
||||
import { request } from '../../../fetch-request.js'
|
||||
import { deleteTradeOffer, signTradeBotTxn } from '../../../tradeRequest.js';
|
||||
import { deleteTradeOffer, signTradeBotTxn } from '../../../tradeRequest.js'
|
||||
import { processTransaction } from '../../../createTransaction.js'
|
||||
|
||||
export const cancelAllOffers = async (requestObject) => {
|
||||
const keyPair = requestObject.keyPair;
|
||||
const publicKey = requestObject.base58PublicKey;
|
||||
const address = requestObject.address;
|
||||
const keyPair = requestObject.keyPair
|
||||
const publicKey = requestObject.base58PublicKey
|
||||
const address = requestObject.address
|
||||
|
||||
const getMyOpenOffers = async () => {
|
||||
const res = await request('/crosschain/tradeoffers');
|
||||
const myOpenTradeOrders = await res.filter(order => order.mode === "OFFERING" && order.qortalCreator === address);
|
||||
return myOpenTradeOrders;
|
||||
const res = await request('/crosschain/tradeoffers')
|
||||
const myOpenTradeOrders = await res.filter(order => order.mode === "OFFERING" && order.qortalCreator === address)
|
||||
return myOpenTradeOrders
|
||||
}
|
||||
|
||||
const myOpenOffers = await getMyOpenOffers();
|
||||
let response = true;
|
||||
const myOpenOffers = await getMyOpenOffers()
|
||||
let response = true
|
||||
|
||||
myOpenOffers.forEach(async (openOffer) => {
|
||||
let unsignedTxn = await deleteTradeOffer({ creatorPublicKey: publicKey, atAddress: openOffer.qortalAtAddress });
|
||||
let signedTxnBytes = await signTradeBotTxn(unsignedTxn, keyPair);
|
||||
await processTransaction(signedTxnBytes);
|
||||
});
|
||||
let unsignedTxn = await deleteTradeOffer({ creatorPublicKey: publicKey, atAddress: openOffer.qortalAtAddress })
|
||||
let signedTxnBytes = await signTradeBotTxn(unsignedTxn, keyPair)
|
||||
await processTransaction(signedTxnBytes)
|
||||
})
|
||||
return response
|
||||
}
|
||||
|
@ -1,11 +1,8 @@
|
||||
import publicKeyToAddress from './publicKeyToAddress'
|
||||
import Base58 from '../deps/Base58.js'
|
||||
|
||||
|
||||
export const base58PublicKeyToAddress = (base58pubkey, qora = false) => {
|
||||
const decodePubKey = Base58.decode(base58pubkey)
|
||||
|
||||
const address = publicKeyToAddress(decodePubKey, qora)
|
||||
|
||||
return address
|
||||
}
|
||||
|
@ -1,12 +1,10 @@
|
||||
import RIPEMD160 from '../deps/ripemd160.js'
|
||||
import BROKEN_RIPEMD160 from '../deps/broken-ripemd160.js'
|
||||
import { Sha256 } from 'asmcrypto.js'
|
||||
|
||||
import utils from '../deps/utils.js'
|
||||
import Base58 from '../deps/Base58.js'
|
||||
import { Buffer } from 'buffer'
|
||||
|
||||
import BROKEN_RIPEMD160 from '../deps/broken-ripemd160.js'
|
||||
import RIPEMD160 from '../deps/ripemd160.js'
|
||||
import utils from '../deps/utils.js'
|
||||
import { ADDRESS_VERSION } from '../constants.js'
|
||||
import { Buffer } from 'buffer'
|
||||
import { Sha256 } from 'asmcrypto.js'
|
||||
|
||||
const repeatSHA256 = (passphrase, hashes) => {
|
||||
let hash = passphrase
|
||||
@ -19,8 +17,8 @@ const repeatSHA256 = (passphrase, hashes) => {
|
||||
const publicKeyToAddress = (publicKey, qora = false) => {
|
||||
const publicKeySha256 = new Sha256().process(publicKey).finish().result
|
||||
const _publicKeyHash = qora ? new BROKEN_RIPEMD160().digest(publicKeySha256) : new RIPEMD160().update(Buffer.from(publicKeySha256)).digest('hex')
|
||||
|
||||
const publicKeyHash = qora ? _publicKeyHash : _publicKeyHash
|
||||
|
||||
let address = new Uint8Array()
|
||||
|
||||
address = utils.appendBuffer(address, [ADDRESS_VERSION])
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user