From 6061c23500df78698b51a8056fc05ac7153536c0 Mon Sep 17 00:00:00 2001 From: votuanphong1983 Date: Sat, 14 Jul 2018 14:33:14 +0700 Subject: [PATCH 01/42] update lang_vi.json Add some Vietnamese texts --- app/lang/lang_vi.json | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/app/lang/lang_vi.json b/app/lang/lang_vi.json index ece82513..c339d091 100644 --- a/app/lang/lang_vi.json +++ b/app/lang/lang_vi.json @@ -165,7 +165,7 @@ "apiUrl": "API URLs", "fiat": "Đơn vị tiền tệ quy đổi", "save": "Lưu", - "enableNotifications": "Desktop notifications", + "enableNotifications": "Thông báo cho Desktop", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", "sshUsername": "SSH username", @@ -178,8 +178,8 @@ "forwardTimeout": "Forward Timeout (default: 10000)", "domainFrontingUrl": "Domain fronting public base URL", "domainFrontingHost": "Domain fronting private host", - "autoLogOffEnable": "Enable automatic log off", - "autoLogOffTimeout": "Auto log off timeout in seconds" + "autoLogOffEnable": "Bật tự đông đăng xuất", + "autoLogOffTimeout": "Thời gian tự động đăng xuất tính bằng giây" }, "paperWallet": { "label": "Ví giấy", @@ -200,18 +200,18 @@ "importSinglePrivateKey": { "openButtonLabel": "Import Private Key", "titleLabel": "Import Single Private Key", - "privateKeyLabel": "Private Key", + "privateKeyLabel": "Khóa riêng tư", "importButtonLabel": "Import", - "warningNotValidAddress": "Z address exist in your wallet", - "warningNotValidPK": "This is not a valid Private Key." + "warningNotValidAddress": "Địa chỉ Z đã tồn tại trong ví của bạn", + "warningNotValidPK": "Khóa riêng tư không hợp lệ." }, - "autoLogOffLabel": "Log off in ", + "autoLogOffLabel": "Đăng xuất ", "changePassword": { - "title": "Change Wallet Password", - "warningText": "WARNING: Wallet backups won't be re-encrypted! If you need to use them, you will have to use current password.", - "currentPassword": "Current Password", - "newPassword1": "New Password", - "newPassword2": "New Password (Retype)" + "title": "Thay đổi mật khẩu của ví", + "warningText": "Cảnh báo: bản sao lưu của ví sẽ không được mã hóa lại! Nếu bạn cần dùng, bạn sẽ phải dùng mật khẩu hiện tại.", + "currentPassword": "Mật khẩu hiện tại", + "newPassword1": "Mật khẩu mới", + "newPassword2": "Mật khảu mới (nhập lại)" }, "rpcConsole": { "title": "RPC", @@ -240,13 +240,13 @@ "paste": "Dán", "selectAll": "Chọn tất cả" }, - "help": "Help", + "help": "Trợ giúp", "helpSubmenu": { - "arizenManual": "User Manual", - "support": "Support", + "arizenManual": "Hướng dẫn sử dụng", + "support": "Hỗ trợ", "zencash": "ZenCash" }, - "changeWalletPassword": "Change wallet password" + "changeWalletPassword": "Thay đổi mật khẩu của ví" }, "warmingMessages": { "userWarningImportFileWithPKs": "New address(es) and a private key(s) will be imported. Your previous back-ups do not include the newly imported addresses or the corresponding private keys. Please use the backup feature of Arizen to make new backup file and replace your existing Arizen wallet backup. By pressing 'I understand' you declare that you understand this. For further information please refer to the help menu of Arizen.", @@ -259,8 +259,8 @@ "userWarningImportPkUserZendRescan": "The balance of the Z address you imported will be visible after you rescan the blockchain. Please run 'zen-cli stop && sleep 8 && zend -rescan' in your secure node (linux)." }, "common": { - "selectAll": "Select all", - "clearAll": "Clear all", + "selectAll": "Chọn tất cả", + "clearAll": "Bỏ chọn tất cả", "okButtonText": "OK", "cancelButtonText": "Cancel" } From 834a774ad32c238b26bd50987d636d4de12154be Mon Sep 17 00:00:00 2001 From: Lukas Bures Date: Tue, 12 Jun 2018 20:41:58 +0200 Subject: [PATCH 02/42] update v1.1.8 release date --- release.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release.json b/release.json index 70e87fdb..f03c15bf 100644 --- a/release.json +++ b/release.json @@ -2,5 +2,5 @@ "url": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.8/Arizen-1.1.8-mac.zip", "name": "1.1.8", "notes": "1st Version", - "pub_date": "15-6-2018" + "pub_date": "12-6-2018" } From a6c7e0a1b545e51d0e0bb3c824c08f1f9c11624d Mon Sep 17 00:00:00 2001 From: Jonas Weissensel Date: Thu, 19 Jul 2018 17:17:19 +0200 Subject: [PATCH 03/42] Path to private key file is passed on to ssh2 library through open-ssh-tunnel --- app/lang/lang_ar.json | 1 + app/lang/lang_bg.json | 1 + app/lang/lang_cs.json | 1 + app/lang/lang_de.json | 1 + app/lang/lang_el.json | 1 + app/lang/lang_en.json | 1 + app/lang/lang_es.json | 1 + app/lang/lang_fr.json | 1 + app/lang/lang_it.json | 1 + app/lang/lang_ja.json | 1 + app/lang/lang_ko.json | 1 + app/lang/lang_nl.json | 1 + app/lang/lang_pl.json | 1 + app/lang/lang_pt.json | 1 + app/lang/lang_ru.json | 1 + app/lang/lang_sr.json | 1 + app/lang/lang_tr.json | 1 + app/lang/lang_vi.json | 1 + app/lang/lang_zh_cn.json | 1 + app/lang/lang_zh_tw.json | 1 + app/ssh_tunneling.js | 1 + app/zcommon.js | 4 ++++ app/zwallet.html | 2 ++ 23 files changed, 27 insertions(+) diff --git a/app/lang/lang_ar.json b/app/lang/lang_ar.json index 97d87f97..a665e70d 100644 --- a/app/lang/lang_ar.json +++ b/app/lang/lang_ar.json @@ -168,6 +168,7 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_bg.json b/app/lang/lang_bg.json index 0da1c782..310427fb 100644 --- a/app/lang/lang_bg.json +++ b/app/lang/lang_bg.json @@ -175,6 +175,7 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH потребителско име", "sshPassword": "SSH парола", "sshPort": "SSH порт", diff --git a/app/lang/lang_cs.json b/app/lang/lang_cs.json index f0f87402..0fb48a6c 100644 --- a/app/lang/lang_cs.json +++ b/app/lang/lang_cs.json @@ -169,6 +169,7 @@ "enableNotifications": "Notifikace", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH jméno", "sshPassword": "SSH heslo", "sshPort": "SSH port", diff --git a/app/lang/lang_de.json b/app/lang/lang_de.json index df8dc837..be11b3f3 100644 --- a/app/lang/lang_de.json +++ b/app/lang/lang_de.json @@ -168,6 +168,7 @@ "enableNotifications": "Desktop-Benachrichtigungen", "enableDomainFronting": "Domain Fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Pfad zur privaten SSH-Schlüssel Datei", "sshUsername": "SSH Nutzername", "sshPassword": "SSH Passwort", "sshPort": "SSH Port", diff --git a/app/lang/lang_el.json b/app/lang/lang_el.json index c4bdd3a9..a37d911f 100644 --- a/app/lang/lang_el.json +++ b/app/lang/lang_el.json @@ -168,6 +168,7 @@ "enableNotifications": "Ειδοποιήσεις Επιφάνειας Εργασίας", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH όνομα χρήστη", "sshPassword": "SSH κωδικός", "sshPort": "SSH port", diff --git a/app/lang/lang_en.json b/app/lang/lang_en.json index 3e3d2a8a..9f340d38 100644 --- a/app/lang/lang_en.json +++ b/app/lang/lang_en.json @@ -175,6 +175,7 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername" : "SSH username", "sshPassword" : "SSH password", "sshPort" : "SSH port", diff --git a/app/lang/lang_es.json b/app/lang/lang_es.json index 3a630ece..19b7ebdd 100644 --- a/app/lang/lang_es.json +++ b/app/lang/lang_es.json @@ -168,6 +168,7 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_fr.json b/app/lang/lang_fr.json index 44e8739b..6a3074b7 100644 --- a/app/lang/lang_fr.json +++ b/app/lang/lang_fr.json @@ -168,6 +168,7 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_it.json b/app/lang/lang_it.json index 57d88ce1..d3783213 100644 --- a/app/lang/lang_it.json +++ b/app/lang/lang_it.json @@ -175,6 +175,7 @@ "enableNotifications": "Notifiche Desktop", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH porta", diff --git a/app/lang/lang_ja.json b/app/lang/lang_ja.json index 74c07258..18870285 100644 --- a/app/lang/lang_ja.json +++ b/app/lang/lang_ja.json @@ -168,6 +168,7 @@ "enableNotifications": "デスクトップ通知", "enableDomainFronting": "ドメインフロンティング", "secureNodeFQDN": "セキュアノード FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH ユーザー名", "sshPassword": "SSH パスワード", "sshPort": "SSH ポート", diff --git a/app/lang/lang_ko.json b/app/lang/lang_ko.json index 0a314393..bcc3ea5b 100644 --- a/app/lang/lang_ko.json +++ b/app/lang/lang_ko.json @@ -168,6 +168,7 @@ "enableNotifications": "데스크탑 알림", "enableDomainFronting": "도메인 프론팅", "secureNodeFQDN": "보안 노드 FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH 사용자 이름", "sshPassword": "SSH 비밀번호", "sshPort": "SSH 포트", diff --git a/app/lang/lang_nl.json b/app/lang/lang_nl.json index b89abaee..e21b808e 100644 --- a/app/lang/lang_nl.json +++ b/app/lang/lang_nl.json @@ -168,6 +168,7 @@ "enableNotifications": "Bureaublad notificaties", "enableDomainFronting": "Domain-fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH gebruikersnaam", "sshPassword": "SSH wachtwoord", "sshPort": "SSH poort", diff --git a/app/lang/lang_pl.json b/app/lang/lang_pl.json index 2a73b549..3bde64cb 100644 --- a/app/lang/lang_pl.json +++ b/app/lang/lang_pl.json @@ -168,6 +168,7 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_pt.json b/app/lang/lang_pt.json index 2867d379..5f1d414a 100644 --- a/app/lang/lang_pt.json +++ b/app/lang/lang_pt.json @@ -168,6 +168,7 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_ru.json b/app/lang/lang_ru.json index 8b80b54b..fe5e917f 100644 --- a/app/lang/lang_ru.json +++ b/app/lang/lang_ru.json @@ -168,6 +168,7 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_sr.json b/app/lang/lang_sr.json index 7b855432..2cce3938 100644 --- a/app/lang/lang_sr.json +++ b/app/lang/lang_sr.json @@ -175,6 +175,7 @@ "enableNotifications": "Desktop obaveštenja", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Sigurnosni Nod FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH korisnik", "sshPassword": "SSH lozinka", "sshPort": "SSH port", diff --git a/app/lang/lang_tr.json b/app/lang/lang_tr.json index 3c84dbed..f4975726 100644 --- a/app/lang/lang_tr.json +++ b/app/lang/lang_tr.json @@ -168,6 +168,7 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_vi.json b/app/lang/lang_vi.json index ece82513..a3e6ebea 100644 --- a/app/lang/lang_vi.json +++ b/app/lang/lang_vi.json @@ -168,6 +168,7 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_zh_cn.json b/app/lang/lang_zh_cn.json index d69ddc77..86c0b73d 100644 --- a/app/lang/lang_zh_cn.json +++ b/app/lang/lang_zh_cn.json @@ -168,6 +168,7 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_zh_tw.json b/app/lang/lang_zh_tw.json index 674aaee1..a2e0a448 100644 --- a/app/lang/lang_zh_tw.json +++ b/app/lang/lang_zh_tw.json @@ -168,6 +168,7 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", + "sshPrivateKey" : "Path to SSH private key file", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/ssh_tunneling.js b/app/ssh_tunneling.js index 1ef01c42..ccb5cf90 100644 --- a/app/ssh_tunneling.js +++ b/app/ssh_tunneling.js @@ -12,6 +12,7 @@ async function openTunnel() { host: settings.secureNodeFQDN,// SSH server //settings.secureNodeFQDN, port: settings.sshPort, // SSH port // keepAlive:true, + privateKey: settings.sshPrivateKey, //settings.secureNodeSshPrivateKey, username: settings.sshUsername, //settings.secureNodeUsername, password: settings.sshPassword, //settings.secureNodePassword, srcPort: settings.secureNodePort, // Arizen localhost port //settings.secureNodePort diff --git a/app/zcommon.js b/app/zcommon.js index 8045cb28..4b0d73de 100644 --- a/app/zcommon.js +++ b/app/zcommon.js @@ -302,6 +302,7 @@ function syncZaddrIfSettingsExist() { settings.secureNodePassword && settings.sshUsername && settings.sshPassword && + settings.sshPrivateKey && settings.sshPort) { rpc.importAllZAddressesFromSNtoArizenExcludeExisting(); rpc.importAllZAddressesFromArizenToSN(); @@ -369,6 +370,7 @@ function showSettingsDialog() { const inputSecureNodeUsername = dialog.querySelector(".settingsSecureNodeUsername"); const inputSecureNodePassword = dialog.querySelector(".settingsSecureNodePassword"); + const inputSshPrivateKey = dialog.querySelector(".settingsSshPrivateKey"); const inputSshUsername = dialog.querySelector(".settingsSshUsername"); const inputSshPassword = dialog.querySelector(".settingsSshPassword"); const inputSshPort = dialog.querySelector(".settingsSshPort"); @@ -395,6 +397,7 @@ function showSettingsDialog() { inputSecureNodePort.value = settings.secureNodePort || 8231; inputSecureNodeUsername.value = settings.secureNodeUsername || ""; inputSecureNodePassword.value = settings.secureNodePassword || ""; + inputSshPrivateKey.value = settings.sshPrivateKey || ""; inputSshUsername.value = settings.sshUsername || ""; inputSshPassword.value = settings.sshPassword || ""; inputSshPort.value = settings.sshPort || 22; @@ -418,6 +421,7 @@ function showSettingsDialog() { secureNodePort: inputSecureNodePort.value, secureNodeUsername: inputSecureNodeUsername.value, secureNodePassword: inputSecureNodePassword.value, + sshPrivateKey: inputSshPrivateKey.value, sshUsername: inputSshUsername.value, sshPassword: inputSshPassword.value, sshPort: inputSshPort.value, diff --git a/app/zwallet.html b/app/zwallet.html index 1b29f0f8..bac2aa0b 100644 --- a/app/zwallet.html +++ b/app/zwallet.html @@ -333,6 +333,8 @@

Settings

+ + From e863b19754d0b7822e90d3637d835577ee1d7dba Mon Sep 17 00:00:00 2001 From: Jonas Weissensel Date: Thu, 19 Jul 2018 18:16:39 +0200 Subject: [PATCH 04/42] Enable usage of SSH key for the connection to a secure node --- app/lang/lang_ar.json | 1 + app/lang/lang_bg.json | 1 + app/lang/lang_cs.json | 1 + app/lang/lang_de.json | 1 + app/lang/lang_el.json | 1 + app/lang/lang_en.json | 1 + app/lang/lang_es.json | 1 + app/lang/lang_fr.json | 1 + app/lang/lang_it.json | 1 + app/lang/lang_ja.json | 1 + app/lang/lang_ko.json | 1 + app/lang/lang_nl.json | 1 + app/lang/lang_pl.json | 1 + app/lang/lang_pt.json | 1 + app/lang/lang_ru.json | 1 + app/lang/lang_sr.json | 1 + app/lang/lang_tr.json | 1 + app/lang/lang_vi.json | 1 + app/lang/lang_zh_cn.json | 1 + app/lang/lang_zh_tw.json | 1 + app/ssh_tunneling.js | 4 +++- app/zcommon.js | 4 ++++ app/zwallet.html | 2 ++ 23 files changed, 29 insertions(+), 1 deletion(-) diff --git a/app/lang/lang_ar.json b/app/lang/lang_ar.json index a665e70d..c9762e1e 100644 --- a/app/lang/lang_ar.json +++ b/app/lang/lang_ar.json @@ -169,6 +169,7 @@ "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_bg.json b/app/lang/lang_bg.json index 310427fb..c47a3f0e 100644 --- a/app/lang/lang_bg.json +++ b/app/lang/lang_bg.json @@ -176,6 +176,7 @@ "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH потребителско име", "sshPassword": "SSH парола", "sshPort": "SSH порт", diff --git a/app/lang/lang_cs.json b/app/lang/lang_cs.json index 0fb48a6c..38a38f29 100644 --- a/app/lang/lang_cs.json +++ b/app/lang/lang_cs.json @@ -170,6 +170,7 @@ "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH jméno", "sshPassword": "SSH heslo", "sshPort": "SSH port", diff --git a/app/lang/lang_de.json b/app/lang/lang_de.json index be11b3f3..c269f540 100644 --- a/app/lang/lang_de.json +++ b/app/lang/lang_de.json @@ -169,6 +169,7 @@ "enableDomainFronting": "Domain Fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Pfad zur privaten SSH-Schlüssel Datei", + "sshPassphrase" : "Passwort zur Entschlüsselung der privaten SSH-Schlüssel Datei (falls notwendig)", "sshUsername": "SSH Nutzername", "sshPassword": "SSH Passwort", "sshPort": "SSH Port", diff --git a/app/lang/lang_el.json b/app/lang/lang_el.json index a37d911f..b9ca8792 100644 --- a/app/lang/lang_el.json +++ b/app/lang/lang_el.json @@ -169,6 +169,7 @@ "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH όνομα χρήστη", "sshPassword": "SSH κωδικός", "sshPort": "SSH port", diff --git a/app/lang/lang_en.json b/app/lang/lang_en.json index 9f340d38..4a39f57b 100644 --- a/app/lang/lang_en.json +++ b/app/lang/lang_en.json @@ -176,6 +176,7 @@ "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername" : "SSH username", "sshPassword" : "SSH password", "sshPort" : "SSH port", diff --git a/app/lang/lang_es.json b/app/lang/lang_es.json index 19b7ebdd..8f647818 100644 --- a/app/lang/lang_es.json +++ b/app/lang/lang_es.json @@ -169,6 +169,7 @@ "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_fr.json b/app/lang/lang_fr.json index 6a3074b7..21708ddf 100644 --- a/app/lang/lang_fr.json +++ b/app/lang/lang_fr.json @@ -169,6 +169,7 @@ "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_it.json b/app/lang/lang_it.json index d3783213..99183cb4 100644 --- a/app/lang/lang_it.json +++ b/app/lang/lang_it.json @@ -176,6 +176,7 @@ "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH porta", diff --git a/app/lang/lang_ja.json b/app/lang/lang_ja.json index 18870285..b21d938c 100644 --- a/app/lang/lang_ja.json +++ b/app/lang/lang_ja.json @@ -169,6 +169,7 @@ "enableDomainFronting": "ドメインフロンティング", "secureNodeFQDN": "セキュアノード FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH ユーザー名", "sshPassword": "SSH パスワード", "sshPort": "SSH ポート", diff --git a/app/lang/lang_ko.json b/app/lang/lang_ko.json index bcc3ea5b..b02d2987 100644 --- a/app/lang/lang_ko.json +++ b/app/lang/lang_ko.json @@ -169,6 +169,7 @@ "enableDomainFronting": "도메인 프론팅", "secureNodeFQDN": "보안 노드 FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH 사용자 이름", "sshPassword": "SSH 비밀번호", "sshPort": "SSH 포트", diff --git a/app/lang/lang_nl.json b/app/lang/lang_nl.json index e21b808e..89721b8d 100644 --- a/app/lang/lang_nl.json +++ b/app/lang/lang_nl.json @@ -169,6 +169,7 @@ "enableDomainFronting": "Domain-fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH gebruikersnaam", "sshPassword": "SSH wachtwoord", "sshPort": "SSH poort", diff --git a/app/lang/lang_pl.json b/app/lang/lang_pl.json index 3bde64cb..51fe0ebd 100644 --- a/app/lang/lang_pl.json +++ b/app/lang/lang_pl.json @@ -169,6 +169,7 @@ "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_pt.json b/app/lang/lang_pt.json index 5f1d414a..99c64e51 100644 --- a/app/lang/lang_pt.json +++ b/app/lang/lang_pt.json @@ -169,6 +169,7 @@ "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_ru.json b/app/lang/lang_ru.json index fe5e917f..8966a3a7 100644 --- a/app/lang/lang_ru.json +++ b/app/lang/lang_ru.json @@ -169,6 +169,7 @@ "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_sr.json b/app/lang/lang_sr.json index 2cce3938..13296182 100644 --- a/app/lang/lang_sr.json +++ b/app/lang/lang_sr.json @@ -176,6 +176,7 @@ "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Sigurnosni Nod FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH korisnik", "sshPassword": "SSH lozinka", "sshPort": "SSH port", diff --git a/app/lang/lang_tr.json b/app/lang/lang_tr.json index f4975726..220db302 100644 --- a/app/lang/lang_tr.json +++ b/app/lang/lang_tr.json @@ -169,6 +169,7 @@ "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_vi.json b/app/lang/lang_vi.json index a3e6ebea..8ad64862 100644 --- a/app/lang/lang_vi.json +++ b/app/lang/lang_vi.json @@ -169,6 +169,7 @@ "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_zh_cn.json b/app/lang/lang_zh_cn.json index 86c0b73d..6a8de090 100644 --- a/app/lang/lang_zh_cn.json +++ b/app/lang/lang_zh_cn.json @@ -169,6 +169,7 @@ "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_zh_tw.json b/app/lang/lang_zh_tw.json index a2e0a448..b905ac9e 100644 --- a/app/lang/lang_zh_tw.json +++ b/app/lang/lang_zh_tw.json @@ -169,6 +169,7 @@ "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", "sshPrivateKey" : "Path to SSH private key file", + "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/ssh_tunneling.js b/app/ssh_tunneling.js index ccb5cf90..648b71e8 100644 --- a/app/ssh_tunneling.js +++ b/app/ssh_tunneling.js @@ -4,6 +4,7 @@ "use strict"; const openSshTunnel = require("open-ssh-tunnel"); +const fs = require('fs-extra'); const localHost = "127.0.0.1"; @@ -12,7 +13,8 @@ async function openTunnel() { host: settings.secureNodeFQDN,// SSH server //settings.secureNodeFQDN, port: settings.sshPort, // SSH port // keepAlive:true, - privateKey: settings.sshPrivateKey, //settings.secureNodeSshPrivateKey, + privateKey: fs.readFileSync(settings.sshPrivateKey), //settings.secureNodeSshPrivateKey, + passphrase: settings.sshPassphrase, //settings.secureNodeSshPassphrase, username: settings.sshUsername, //settings.secureNodeUsername, password: settings.sshPassword, //settings.secureNodePassword, srcPort: settings.secureNodePort, // Arizen localhost port //settings.secureNodePort diff --git a/app/zcommon.js b/app/zcommon.js index 4b0d73de..70a92733 100644 --- a/app/zcommon.js +++ b/app/zcommon.js @@ -303,6 +303,7 @@ function syncZaddrIfSettingsExist() { settings.sshUsername && settings.sshPassword && settings.sshPrivateKey && + settings.sshPassphrase && settings.sshPort) { rpc.importAllZAddressesFromSNtoArizenExcludeExisting(); rpc.importAllZAddressesFromArizenToSN(); @@ -370,6 +371,7 @@ function showSettingsDialog() { const inputSecureNodeUsername = dialog.querySelector(".settingsSecureNodeUsername"); const inputSecureNodePassword = dialog.querySelector(".settingsSecureNodePassword"); + const inputSshPassphrase = dialog.querySelector(".settingsSshPassphrase"); const inputSshPrivateKey = dialog.querySelector(".settingsSshPrivateKey"); const inputSshUsername = dialog.querySelector(".settingsSshUsername"); const inputSshPassword = dialog.querySelector(".settingsSshPassword"); @@ -397,6 +399,7 @@ function showSettingsDialog() { inputSecureNodePort.value = settings.secureNodePort || 8231; inputSecureNodeUsername.value = settings.secureNodeUsername || ""; inputSecureNodePassword.value = settings.secureNodePassword || ""; + inputSshPassphrase.value = settings.sshPassphrase || ""; inputSshPrivateKey.value = settings.sshPrivateKey || ""; inputSshUsername.value = settings.sshUsername || ""; inputSshPassword.value = settings.sshPassword || ""; @@ -421,6 +424,7 @@ function showSettingsDialog() { secureNodePort: inputSecureNodePort.value, secureNodeUsername: inputSecureNodeUsername.value, secureNodePassword: inputSecureNodePassword.value, + sshPassphrase: inputSshPassphrase.value, sshPrivateKey: inputSshPrivateKey.value, sshUsername: inputSshUsername.value, sshPassword: inputSshPassword.value, diff --git a/app/zwallet.html b/app/zwallet.html index bac2aa0b..2d36ba0c 100644 --- a/app/zwallet.html +++ b/app/zwallet.html @@ -335,6 +335,8 @@

Settings

+ + From af4d11cbd01b4223fb9be84cbae8234cf5af0d5c Mon Sep 17 00:00:00 2001 From: Jonas Weissensel Date: Thu, 19 Jul 2018 18:18:44 +0200 Subject: [PATCH 05/42] Use type password for passphrase input field --- app/zwallet.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/zwallet.html b/app/zwallet.html index 2d36ba0c..9c14c94e 100644 --- a/app/zwallet.html +++ b/app/zwallet.html @@ -336,7 +336,7 @@

Settings

- + From 8169db886e3ee9ac7e940f519874506ec9f443f4 Mon Sep 17 00:00:00 2001 From: gsfakianakis Date: Mon, 23 Jul 2018 19:04:19 +0200 Subject: [PATCH 06/42] PDF export error. --- app/paperwallet.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/paperwallet.js b/app/paperwallet.js index ef68c7d6..1397618f 100644 --- a/app/paperwallet.js +++ b/app/paperwallet.js @@ -22,7 +22,7 @@ ipcRenderer.on("export-paper-wallet", (sender, wif, name) => { function renderWallet(pkHexQrCode, tAddrQrCode) { const pdf = new PDFjs(); // a4 - const pdfW = pdf.internal.pageSize.width; + const pdfW = pdf.internal.pageSize.getWidth(); function centeredText(text, y) { const textWidth = pdf.getStringUnitWidth(text) * pdf.internal.getFontSize() / pdf.internal.scaleFactor; From f6009e68a9d0cf89b0c6cbc9f6a1cd132a800901 Mon Sep 17 00:00:00 2001 From: gsfakianakis Date: Mon, 23 Jul 2018 19:37:50 +0200 Subject: [PATCH 07/42] Test. Reorder Fields. --- app/zwallet.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/zwallet.html b/app/zwallet.html index 9c14c94e..755120dc 100644 --- a/app/zwallet.html +++ b/app/zwallet.html @@ -333,14 +333,14 @@

Settings

+ + + + - - - - From fc324964cf50bfc96c72c7139036c6fd7a22494e Mon Sep 17 00:00:00 2001 From: Lukas Bures Date: Tue, 24 Jul 2018 13:23:50 +0200 Subject: [PATCH 08/42] update version to v1.1.9 --- README.md | 3 +++ release.json | 6 +++--- updates.json | 36 ++++++++++++++++++------------------ 3 files changed, 24 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index a31209cf..b51da501 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ [![Code Climate][codeclimate-img]][codeclimate-url] # User Manuals +- v1.1.9: [Arizen v1.1.9 Wallet User Manual.pdf](https://github.com/ZencashOfficial/arizen/releases/download/v1.1.9/Arizen.v1.1.9.Wallet.User.Manual.pdf) - v1.1.8: [Arizen v1.1.8 Wallet User Manual.pdf](https://github.com/ZencashOfficial/arizen/releases/download/v1.1.8/Arizen.v1.1.8.Wallet.User.Manual.pdf) - v1.1.7: [Arizen v1.1.7 Wallet User Manual.pdf](https://github.com/ZencashOfficial/arizen/releases/download/v1.1.7/Arizen.v1.1.7.Wallet.User.Manual.pdf) - v1.1.6: [Arizen v1.1.6 Wallet User Manual.pdf](https://github.com/ZencashOfficial/arizen/releases/download/v1.1.6/Arizen.v1.1.6.Wallet.User.Manual.pdf) @@ -15,6 +16,8 @@ # Version History +## v1.1.9 + ## v1.1.8 - [x] Refactor: batch-withdraw functionality - [x] Introduce booster for batch-withdraw functionality (speed-up logic in case of many addresses) diff --git a/release.json b/release.json index 70e87fdb..40d3da76 100644 --- a/release.json +++ b/release.json @@ -1,6 +1,6 @@ { - "url": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.8/Arizen-1.1.8-mac.zip", - "name": "1.1.8", + "url": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.9/Arizen-1.1.9-mac.zip", + "name": "1.1.9", "notes": "1st Version", - "pub_date": "15-6-2018" + "pub_date": "1-8-2018" } diff --git a/updates.json b/updates.json index b6c4762f..24292368 100644 --- a/updates.json +++ b/updates.json @@ -1,38 +1,38 @@ { "linux-x64-prod": { "readme": "1st version", - "update": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.8/Arizen-1.1.8-x86_64.AppImage", - "install": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.8/Arizen-1.1.8-x86_64.AppImage", - "version": "1.1.8" + "update": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.9/Arizen-1.1.9-x96_64.AppImage", + "install": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.9/Arizen-1.1.9-x96_64.AppImage", + "version": "1.1.9" }, "win32-x64-prod": { "readme": "1st version", - "update": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.8", - "install": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.8", - "version": "1.1.8" + "update": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.9", + "install": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.9", + "version": "1.1.9" }, "darwin-x64-prod": { "readme": "1st version", - "update": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.8/release.json", - "install": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.8/Arizen-1.1.8.dmg", - "version": "1.1.8" + "update": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.9/release.json", + "install": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.9/Arizen-1.1.9.dmg", + "version": "1.1.9" }, "linux-x64-beta": { "readme": "beta version", - "update": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.8/Arizen-1.1.8-x86_64.AppImage", - "install": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.8/Arizen-1.1.8-x86_64.AppImage", - "version": "1.1.8-beta" + "update": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.9/Arizen-1.1.9-x96_64.AppImage", + "install": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.9/Arizen-1.1.9-x96_64.AppImage", + "version": "1.1.9-beta" }, "win32-x64-beta": { "readme": "beta version", - "update": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.8", - "install": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.8", - "version": "1.1.8-beta" + "update": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.9", + "install": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.9", + "version": "1.1.9-beta" }, "darwin-x64-beta": { "readme": "beta version", - "update": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.8/release.json", - "install": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.8/Arizen-1.1.8.dmg", - "version": "1.1.8-beta" + "update": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.9/release.json", + "install": "https://github.com/ZencashOfficial/arizen/releases/download/v1.1.9/Arizen-1.1.9.dmg", + "version": "1.1.9-beta" } } From c71b9647065a63a0dd8d505741d681833f880ad1 Mon Sep 17 00:00:00 2001 From: Lukas Bures Date: Tue, 24 Jul 2018 13:26:07 +0200 Subject: [PATCH 09/42] update version to v1.1.9 in package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2968eca5..d0dc0a04 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Arizen", - "version": "1.1.8", + "version": "1.1.9", "description": "Arizen is light API wallet for ZenCash with localy stored and encrypted files.", "main": "app/main.js", "scripts": { From fec67f436462d870dcfa3a0dbf890a26f6464f74 Mon Sep 17 00:00:00 2001 From: Lukas Bures Date: Tue, 24 Jul 2018 13:26:44 +0200 Subject: [PATCH 10/42] change name order --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index d0dc0a04..67fe10cd 100644 --- a/package.json +++ b/package.json @@ -41,10 +41,6 @@ "name": "@lukas", "email": "lukas@zensystem.io" }, - { - "name": "@woky", - "email": "woky@zensystem.io" - }, { "name": "@gsfakianakis", "email": "georgios@zensystem.io" @@ -53,6 +49,10 @@ "name": "@Tigger", "email": "kamila@zensystem.io" }, + { + "name": "@woky", + "email": "woky@zensystem.io" + }, { "name": "@nonghost", "email": "neduchal@gmail.com" From bdcc83d1797982cb95a0036877a228297623e825 Mon Sep 17 00:00:00 2001 From: Lukas Bures Date: Tue, 24 Jul 2018 13:55:56 +0200 Subject: [PATCH 11/42] change step for fee --- app/zwallet.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/zwallet.html b/app/zwallet.html index 1b29f0f8..577dc205 100644 --- a/app/zwallet.html +++ b/app/zwallet.html @@ -489,7 +489,7 @@

Change Wallet PasswordAmount
Transaction fee
- +   From d0ea1bf15a87356e48b800d6cdcfa6ea48b58fba Mon Sep 17 00:00:00 2001 From: Lukas Bures Date: Tue, 24 Jul 2018 14:58:34 +0200 Subject: [PATCH 12/42] Implementation of Max amount button --- app/resources/zwallet.css | 8 ++++++++ app/zwallet.html | 5 ++++- app/zwallet.js | 42 +++++++++++++++++++++++---------------- 3 files changed, 37 insertions(+), 18 deletions(-) diff --git a/app/resources/zwallet.css b/app/resources/zwallet.css index 04391e88..8f7d3237 100644 --- a/app/resources/zwallet.css +++ b/app/resources/zwallet.css @@ -260,6 +260,14 @@ header button { min-width: 60px; } +#withdrawAmount { + width: 70%; +} + +#withdrawMaxButton { + min-width: 28%; +} + /* Trasactions */ .txPanel { diff --git a/app/zwallet.html b/app/zwallet.html index 577dc205..51a42427 100644 --- a/app/zwallet.html +++ b/app/zwallet.html @@ -487,7 +487,10 @@

Change Wallet PasswordTo
Amount
- +
+ + +
Transaction fee
diff --git a/app/zwallet.js b/app/zwallet.js index 63d6f993..00b3552c 100644 --- a/app/zwallet.js +++ b/app/zwallet.js @@ -51,6 +51,7 @@ const withdrawFromAddrInput = document.getElementById("withdrawFromAddr"); const withdrawToButton = document.getElementById("withdrawToButton"); const withdrawToAddrInput = document.getElementById("withdrawToAddr"); const withdrawAmountInput = document.getElementById("withdrawAmount"); +const withdrawMaxButton = document.getElementById("withdrawMaxButton"); const withdrawFeeInput = document.getElementById("withdrawFee"); const withdrawMsg = document.getElementById("withdrawMsg"); const withdrawButton = document.getElementById("withdrawButton"); @@ -528,7 +529,7 @@ function showAddrSelectDialog(zeroBalanceAddrs, zAddressesInclude, onSelected) { setBalanceText(row.querySelector(".addrSelectRowBalance"), addrObj.lastbalance); row.addEventListener("click", () => { dialog.close(); - onSelected(addrObj.addr); + onSelected(addrObj); }); listNode.appendChild(row) } @@ -539,8 +540,8 @@ function initDepositView() { const qrcodeTypeDelay = 500; // ms depositToAddrInput.addEventListener("input", () => updateDepositQrcode(qrcodeTypeDelay)); depositAmountInput.addEventListener("input", () => updateDepositQrcode(qrcodeTypeDelay)); - depositToButton.addEventListener("click", () => showAddrSelectDialog(true, false, addr => { - depositToAddrInput.value = addr; + depositToButton.addEventListener("click", () => showAddrSelectDialog(true, false, addrObj => { + depositToAddrInput.value = addrObj.addr; updateDepositQrcode(); })); depositSaveQrcodeButton.addEventListener("click", () => { @@ -608,13 +609,9 @@ async function checkIntermediateSend(tIntermediateAddress, toAddr, amount, feeTw if (balance >= amount) { // send from T to Z console.log("Sending..."); - let sendResp = await rpc.sendFromOrToZaddress(undefined, tIntermediateAddress, toAddr, amount, feeTwo) + let sendResp = await rpc.sendFromOrToZaddress(undefined, tIntermediateAddress, toAddr, amount, feeTwo); console.log(sendResp.status); - if (sendResp.status === "ok") { - return true - } else { - return false - } + return sendResp.status === "ok"; } else { console.log("Will check again later..."); @@ -645,6 +642,7 @@ async function sendPendingTxs() { } async function initWithdrawView() { + let maxAmount = 0; withdrawFromAddrInput.addEventListener("input", validateWithdrawForm); withdrawToAddrInput.addEventListener("input", validateWithdrawForm); withdrawAmountInput.addEventListener("input", validateWithdrawForm); @@ -690,8 +688,6 @@ async function initWithdrawView() { sendPendingTxs(); } } - - } else { // Z - Z or Z - T let fromAddrObj = ipcRenderer.sendSync("get-address-object", fromAddr); let fromAddressPK = fromAddrObj.pk; @@ -701,14 +697,26 @@ async function initWithdrawView() { } } }); - withdrawFromButton.addEventListener("click", () => showAddrSelectDialog(false, true, addr => { - withdrawFromAddrInput.value = addr; + withdrawFromButton.addEventListener("click", () => showAddrSelectDialog(false, true, addrObj => { + withdrawFromAddrInput.value = addrObj.addr; + maxAmount = addrObj.lastbalance; validateWithdrawForm(); })); - withdrawToButton.addEventListener("click", () => showAddrSelectDialog(true, true, addr => { - withdrawToAddrInput.value = addr; + withdrawToButton.addEventListener("click", () => showAddrSelectDialog(true, true, addrObj => { + withdrawToAddrInput.value = addrObj.addr; validateWithdrawForm(); })); + withdrawMaxButton.addEventListener("click", function () { + let fee = 0.0001; + let amount = 0; + if (maxAmount !== 0) { + amount = maxAmount - fee; + } + + withdrawAmountInput.value = amount; + withdrawFeeInput.value = fee; + validateWithdrawForm(); + }); validateWithdrawForm(); } @@ -822,8 +830,8 @@ function showBatchWithdrawDialog() { setInputNodeValue(toAddrInput, bwSettings.toAddr); setInputNodeValue(keepAmountInput, bwSettings.keepAmount); setInputNodeValue(txFeeInput, bwSettings.txFee); - toAddrSelectButton.addEventListener("click", () => showAddrSelectDialog(true, false, addr => { - toAddrInput.value = addr; + toAddrSelectButton.addEventListener("click", () => showAddrSelectDialog(true, false, addrObj => { + toAddrInput.value = addrObj.addr; // TODO validate form })); From 6b6cf5beb79c04358edded78400e7d386061e13e Mon Sep 17 00:00:00 2001 From: Lukas Bures Date: Tue, 24 Jul 2018 15:06:26 +0200 Subject: [PATCH 13/42] revert sleep - it rapidly slows down sync --- app/main.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/app/main.js b/app/main.js index 1acd11cc..30d30c71 100644 --- a/app/main.js +++ b/app/main.js @@ -36,12 +36,7 @@ const userWarningExportWalletEncrypted = "You are going to export an ENCRYPTED w // Uncomment if you want to run in production // Show/Hide Development menu -process.env.NODE_ENV = "production"; - -// Wait function to avoid api rate-limiting -function sleep(millis) { - return new Promise(resolve => setTimeout(resolve, millis)); -} +// process.env.NODE_ENV = "production"; function attachUpdaterHandlers() { function onUpdateDownloaded() { @@ -611,13 +606,11 @@ function importOnePK(pk, name = "", isT = true) { async function apiGet(url) { const resp = await axiosApi(url); - await sleep(1000); return resp.data; } async function apiPost(url, form) { const resp = await axiosApi.post(url, querystring.stringify(form)); - await sleep(1000); return resp.data; } From b9b5fe48044cafd4e12e8d53c6cf164bbfdb731f Mon Sep 17 00:00:00 2001 From: gsfakianakis Date: Tue, 24 Jul 2018 19:27:40 +0200 Subject: [PATCH 14/42] Tested. Minor changes. --- app/main.js | 2 +- app/zcommon.js | 4 +--- app/zwallet.html | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/app/main.js b/app/main.js index 1acd11cc..e388f98c 100644 --- a/app/main.js +++ b/app/main.js @@ -36,7 +36,7 @@ const userWarningExportWalletEncrypted = "You are going to export an ENCRYPTED w // Uncomment if you want to run in production // Show/Hide Development menu -process.env.NODE_ENV = "production"; +//process.env.NODE_ENV = "production"; // Wait function to avoid api rate-limiting function sleep(millis) { diff --git a/app/zcommon.js b/app/zcommon.js index 70a92733..e75ac4b8 100644 --- a/app/zcommon.js +++ b/app/zcommon.js @@ -301,9 +301,7 @@ function syncZaddrIfSettingsExist() { settings.secureNodeUsername && settings.secureNodePassword && settings.sshUsername && - settings.sshPassword && - settings.sshPrivateKey && - settings.sshPassphrase && + ( settings.sshPassword || settings.sshPrivateKey) && settings.sshPort) { rpc.importAllZAddressesFromSNtoArizenExcludeExisting(); rpc.importAllZAddressesFromArizenToSN(); diff --git a/app/zwallet.html b/app/zwallet.html index 755120dc..31bdc0d0 100644 --- a/app/zwallet.html +++ b/app/zwallet.html @@ -336,7 +336,7 @@

Settings

- + From c64e35498b22a93ac324a3513d9bab5645fded7b Mon Sep 17 00:00:00 2001 From: Lukas Bures Date: Wed, 25 Jul 2018 13:01:13 +0200 Subject: [PATCH 15/42] update Travis CI --- .travis.yml | 1 + ci/before_deploy.sh | 2 +- ci/before_install.sh | 9 +++------ 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5fb60d43..df5e8aeb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,6 +25,7 @@ matrix: sudo: required language: c - os: windows + sudo: required env: TARGET_ARCH=x64 language: c - os: linux diff --git a/ci/before_deploy.sh b/ci/before_deploy.sh index 802dc1a1..0396bf3c 100755 --- a/ci/before_deploy.sh +++ b/ci/before_deploy.sh @@ -29,4 +29,4 @@ set -e #tar czf $src/$CRATE_NAME-$TRAVIS_TAG-$TARGET.tar.gz * #cd $src -rm -rf $stage +rm -rf ${stage} diff --git a/ci/before_install.sh b/ci/before_install.sh index d1515598..063c0d2a 100755 --- a/ci/before_install.sh +++ b/ci/before_install.sh @@ -4,18 +4,15 @@ set -e echo "Before Install Script" -if [[ $TRAVIS_OS_NAME == "osx" ]]; then +if [[ ${TRAVIS_OS_NAME} == "osx" ]]; then echo "Before install: MacOS" brew update brew install graphviz - -elif [[ $TRAVIS_OS_NAME == "windows" ]]; then +elif [[ ${TRAVIS_OS_NAME} == "windows" ]]; then echo "Before install: Windows OS" - -elif [[ $TRAVIS_OS_NAME == "linux" ]]; then +elif [[ ${TRAVIS_OS_NAME} == "linux" ]]; then echo "Before install: Linux" sudo apt-get install --no-install-recommends -y icnsutils graphicsmagick xz-utils - else echo "Unknown OS" fi From db1248ac9520b996c16b72a05caabba0ea2dbfac Mon Sep 17 00:00:00 2001 From: gsfakianakis Date: Wed, 25 Jul 2018 19:51:58 +0200 Subject: [PATCH 16/42] SSH work for both password and key. Priority to password if both are present. --- app/ssh_tunneling.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/app/ssh_tunneling.js b/app/ssh_tunneling.js index 648b71e8..b7edcff9 100644 --- a/app/ssh_tunneling.js +++ b/app/ssh_tunneling.js @@ -9,14 +9,15 @@ const fs = require('fs-extra'); const localHost = "127.0.0.1"; async function openTunnel() { - const server = await openSshTunnel({ + + const options = { host: settings.secureNodeFQDN,// SSH server //settings.secureNodeFQDN, port: settings.sshPort, // SSH port // keepAlive:true, - privateKey: fs.readFileSync(settings.sshPrivateKey), //settings.secureNodeSshPrivateKey, - passphrase: settings.sshPassphrase, //settings.secureNodeSshPassphrase, + //privateKey: fs.readFileSync(settings.sshPrivateKey), //settings.secureNodeSshPrivateKey, + //passphrase: settings.sshPassphrase, //settings.secureNodeSshPassphrase, username: settings.sshUsername, //settings.secureNodeUsername, - password: settings.sshPassword, //settings.secureNodePassword, + //password: settings.sshPassword, //settings.secureNodePassword, srcPort: settings.secureNodePort, // Arizen localhost port //settings.secureNodePort srcAddr: localHost, // Arizen localhost dstPort: settings.secureNodePort, // Service localhost port //settings.secureNodePort @@ -25,7 +26,16 @@ async function openTunnel() { forwardTimeout: settings.forwardTimeout, localPort: settings.secureNodePort, // SSH client localhost port localAddr: localHost // SSH client localhost - }); + }; + + if (settings.sshPassword) { + options.password = settings.sshPassword; + } else { + options.privateKey = fs.readFileSync(settings.sshPrivateKey); + options.passphrase = settings.sshPassphrase + } + + const server = await openSshTunnel(options); return server } From bb73e8ad2e8e742284ddf23fd52b559730aaeaf0 Mon Sep 17 00:00:00 2001 From: Lukas Bures Date: Wed, 25 Jul 2018 20:28:29 +0200 Subject: [PATCH 17/42] Fix missing error message --- app/lang/lang_ar.json | 7 ++++--- app/lang/lang_bg.json | 7 ++++--- app/lang/lang_cs.json | 7 ++++--- app/lang/lang_de.json | 7 ++++--- app/lang/lang_el.json | 7 ++++--- app/lang/lang_en.json | 3 ++- app/lang/lang_es.json | 7 ++++--- app/lang/lang_fr.json | 7 ++++--- app/lang/lang_it.json | 7 ++++--- app/lang/lang_ja.json | 7 ++++--- app/lang/lang_ko.json | 7 ++++--- app/lang/lang_nl.json | 7 ++++--- app/lang/lang_pl.json | 7 ++++--- app/lang/lang_pt.json | 7 ++++--- app/lang/lang_ru.json | 7 ++++--- app/lang/lang_sr.json | 7 ++++--- app/lang/lang_tr.json | 7 ++++--- app/lang/lang_vi.json | 7 ++++--- app/lang/lang_zh_cn.json | 7 ++++--- app/lang/lang_zh_tw.json | 7 ++++--- app/main.js | 3 +-- 21 files changed, 79 insertions(+), 60 deletions(-) diff --git a/app/lang/lang_ar.json b/app/lang/lang_ar.json index c9762e1e..ae1b56b4 100644 --- a/app/lang/lang_ar.json +++ b/app/lang/lang_ar.json @@ -124,7 +124,8 @@ "error": "خطأ", "success": "اكتملت المعاملة بنجاح", "isCoinbaseUTXO": "Your address contains newly mined coins, also called coinbase unspent transaction outputs (coinbase UTXO). These need to be shielded and unshielded first before they can be spent, please import the private key of this address into a full wallet like Swing and then send all your coins from this address to a Z-address and then back to this T-address. You will be then able to spend them in Arizen as well.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -168,8 +169,8 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_bg.json b/app/lang/lang_bg.json index c47a3f0e..256aa5c8 100644 --- a/app/lang/lang_bg.json +++ b/app/lang/lang_bg.json @@ -131,7 +131,8 @@ "error": "Грешка", "success": "Транзакцията е изпратена успешно", "isCoinbaseUTXO": "Вашият адрес съдържа новоизкопани койни, също наречени койнбейс незавършени транзакции от добив (coinbase UTXO). Те трябва да бъдат защитени и незащитени преди да могат да бъдат изразходвани. Моля, импортирайте частния ключ на този адрес в пълен портфейл като Swing и след това изпратете всичките си монети от този адрес на Z-адрес и след това обратно на този T-адрес. След това ще можете да ги похарчите в Arizen.", - "tooManyUTXOs": "Вашият адрес съдържа прекалено много UTXOs, не е възможно да изпълните тази транзакция чрез API!" + "tooManyUTXOs": "Вашият адрес съдържа прекалено много UTXOs, не е възможно да изпълните тази транзакция чрез API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -175,8 +176,8 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH потребителско име", "sshPassword": "SSH парола", "sshPort": "SSH порт", diff --git a/app/lang/lang_cs.json b/app/lang/lang_cs.json index 38a38f29..1dab646f 100644 --- a/app/lang/lang_cs.json +++ b/app/lang/lang_cs.json @@ -124,7 +124,8 @@ "error": "Chyba", "success": "Transakce úspěšně odeslána", "isCoinbaseUTXO": "Vaše adresa obsahuje nově vytěžené ZENy, které jsou také nazývány coinbase unspent transaction outputs (coinbase UTXO). Tyto ZENy musí být nejdříve anonymizovány a deanonimizovány, než je bude možné poslat dále. Prosím importujte privátní klíč zdrojové adresy do plné peněženky, např. Swing. Následně pošlete všechny ZENy z této T adresy na Z adresu a opět zpět na tuto T adresu. Následně budete schopni odeslat vaše ZENy i v Arizen.", - "tooManyUTXOs": "Vaše adresa obsahuje příliš mnoho UTXO, není možné odeslat tuto transakci přes API!" + "tooManyUTXOs": "Vaše adresa obsahuje příliš mnoho UTXO, není možné odeslat tuto transakci přes API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -169,8 +170,8 @@ "enableNotifications": "Notifikace", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH jméno", "sshPassword": "SSH heslo", "sshPort": "SSH port", diff --git a/app/lang/lang_de.json b/app/lang/lang_de.json index c269f540..b5dac529 100644 --- a/app/lang/lang_de.json +++ b/app/lang/lang_de.json @@ -124,7 +124,8 @@ "error": "Error", "success": "Die Transaktion wurde erfolgreich gesendet", "isCoinbaseUTXO": "Ihre Adresse enthält neu geschürfte Coins, auch Coinbase unverbrauchte Transaktionsausgabe (coinbase unspent transaction outputs/coinbase UTXO) genannt. Diese müssen anonymisiert und de-anonymisiert werden, bevor sie ausgegeben werden können. Bitte importieren Sie den privaten Schlüssel in eine Full Wallet wie Swing und senden Sie alle Coins von dieser Adresse zu einer Z-Adresse und zurück zu dieser T-Adresse. Danach werden Sie die Coins auch in Arizen ausgeben können.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -168,8 +169,8 @@ "enableNotifications": "Desktop-Benachrichtigungen", "enableDomainFronting": "Domain Fronting", "secureNodeFQDN": "Secure Node FQDN", - "sshPrivateKey" : "Pfad zur privaten SSH-Schlüssel Datei", - "sshPassphrase" : "Passwort zur Entschlüsselung der privaten SSH-Schlüssel Datei (falls notwendig)", + "sshPrivateKey": "Pfad zur privaten SSH-Schlüssel Datei", + "sshPassphrase": "Passwort zur Entschlüsselung der privaten SSH-Schlüssel Datei (falls notwendig)", "sshUsername": "SSH Nutzername", "sshPassword": "SSH Passwort", "sshPort": "SSH Port", diff --git a/app/lang/lang_el.json b/app/lang/lang_el.json index b9ca8792..a8291511 100644 --- a/app/lang/lang_el.json +++ b/app/lang/lang_el.json @@ -124,7 +124,8 @@ "error": "Λάθος", "success": "Η συναλλαγή έχει αποσταλεί με επιτυχία", "isCoinbaseUTXO": "Your address contains newly mined coins, also called coinbase unspent transaction outputs (coinbase UTXO). These need to be shielded and unshielded first before they can be spent, please import the private key of this address into a full wallet like Swing and then send all your coins from this address to a Z-address and then back to this T-address. You will be then able to spend them in Arizen as well.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -168,8 +169,8 @@ "enableNotifications": "Ειδοποιήσεις Επιφάνειας Εργασίας", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH όνομα χρήστη", "sshPassword": "SSH κωδικός", "sshPort": "SSH port", diff --git a/app/lang/lang_en.json b/app/lang/lang_en.json index 4a39f57b..f0ef986c 100644 --- a/app/lang/lang_en.json +++ b/app/lang/lang_en.json @@ -131,7 +131,8 @@ "error": "Error", "success": "The transaction has been successfully sent", "isCoinbaseUTXO": "Your address contains newly mined coins, also called coinbase unspent transaction outputs (coinbase UTXO). These need to be shielded and unshielded first before they can be spent, please import the private key of this address into a full wallet like Swing and then send all your coins from this address to a Z-address and then back to this T-address. You will be then able to spend them in Arizen as well.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { diff --git a/app/lang/lang_es.json b/app/lang/lang_es.json index 8f647818..e40d1e41 100644 --- a/app/lang/lang_es.json +++ b/app/lang/lang_es.json @@ -124,7 +124,8 @@ "error": "Error", "success": "La transacción fue enviada exitosamente", "isCoinbaseUTXO": "Your address contains newly mined coins, also called coinbase unspent transaction outputs (coinbase UTXO). These need to be shielded and unshielded first before they can be spent, please import the private key of this address into a full wallet like Swing and then send all your coins from this address to a Z-address and then back to this T-address. You will be then able to spend them in Arizen as well.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -168,8 +169,8 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_fr.json b/app/lang/lang_fr.json index 21708ddf..30f19e40 100644 --- a/app/lang/lang_fr.json +++ b/app/lang/lang_fr.json @@ -124,7 +124,8 @@ "error": "Erreur", "success": "La transaction a été envoyée avec succès", "isCoinbaseUTXO": "Your address contains newly mined coins, also called coinbase unspent transaction outputs (coinbase UTXO). These need to be shielded and unshielded first before they can be spent, please import the private key of this address into a full wallet like Swing and then send all your coins from this address to a Z-address and then back to this T-address. You will be then able to spend them in Arizen as well.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -168,8 +169,8 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_it.json b/app/lang/lang_it.json index 99183cb4..4dceb628 100644 --- a/app/lang/lang_it.json +++ b/app/lang/lang_it.json @@ -131,7 +131,8 @@ "error": "Errore", "success": "La transazione è stata inviata con successo", "isCoinbaseUTXO": "Il tuo indirizzo contiene coin appena minate, anche chiamate output di transazione non spesi (coinbase UTXO). Prima di poter essere spesi devono essere inviati ad uno Z-address e quindi reinviati al T-address di origine, puoi effettuare questa operazione solo con un 'full wallet' come Swing dopo aver importato le chiavi. Dopo questa procedura potrai quindi utilizzarli su Arizen.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -175,8 +176,8 @@ "enableNotifications": "Notifiche Desktop", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH porta", diff --git a/app/lang/lang_ja.json b/app/lang/lang_ja.json index b21d938c..d2042fc4 100644 --- a/app/lang/lang_ja.json +++ b/app/lang/lang_ja.json @@ -124,7 +124,8 @@ "error": "エラー", "success": "トランザクションは正常に送信されました", "isCoinbaseUTXO": "このアドレスには、新たにマイニングされたコイン (支払いが行われていないコインベーストランザクションアウトプット; コインベース UTXO) が含まれています。このコインを使用するためには、シールドした上で再びシールドを解除する必要があります。まず、本アドレスの秘密鍵を Swing のようなフルノードウォレットにインポートしてください。次に、本アドレスから、一旦対象となるコインを全て Z アドレスに送付し、そこから再び本アドレスに送付し直してください。これにより Arizen ウォレットからも、これらのコインを支払うことができるようになります。", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -168,8 +169,8 @@ "enableNotifications": "デスクトップ通知", "enableDomainFronting": "ドメインフロンティング", "secureNodeFQDN": "セキュアノード FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH ユーザー名", "sshPassword": "SSH パスワード", "sshPort": "SSH ポート", diff --git a/app/lang/lang_ko.json b/app/lang/lang_ko.json index b02d2987..e4c62d13 100644 --- a/app/lang/lang_ko.json +++ b/app/lang/lang_ko.json @@ -124,7 +124,8 @@ "error": "오류", "success": "거래가 성공적으로 완료되었습니다.", "isCoinbaseUTXO": "귀하의 주소에는 coinbase 미사용 거래 출력 (coinbase UTXO)이라고도하는 새로 채굴 된 동전이 있습니다. 이것들은 보호 받기 전에 차폐가 필요합니다. 스윙과 같은 전체 지갑에 이 주소의 비공개 키를 가져온 다음, 이 주소에서 Z 주소로 모든 동전을 보내고 T 주소로 되돌려주십시오. 그러면 Arizen에서 그들을 보낼 수 있습니다.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -168,8 +169,8 @@ "enableNotifications": "데스크탑 알림", "enableDomainFronting": "도메인 프론팅", "secureNodeFQDN": "보안 노드 FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH 사용자 이름", "sshPassword": "SSH 비밀번호", "sshPort": "SSH 포트", diff --git a/app/lang/lang_nl.json b/app/lang/lang_nl.json index 89721b8d..188c8580 100644 --- a/app/lang/lang_nl.json +++ b/app/lang/lang_nl.json @@ -124,7 +124,8 @@ "error": "Fout", "success": "De transactie is succesvol verzonden", "isCoinbaseUTXO": "Your address contains newly mined coins, also called coinbase unspent transaction outputs (coinbase UTXO). These need to be shielded and unshielded first before they can be spent, please import the private key of this address into a full wallet like Swing and then send all your coins from this address to a Z-address and then back to this T-address. You will be then able to spend them in Arizen as well.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -168,8 +169,8 @@ "enableNotifications": "Bureaublad notificaties", "enableDomainFronting": "Domain-fronting", "secureNodeFQDN": "Secure Node FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH gebruikersnaam", "sshPassword": "SSH wachtwoord", "sshPort": "SSH poort", diff --git a/app/lang/lang_pl.json b/app/lang/lang_pl.json index 51fe0ebd..241f4c46 100644 --- a/app/lang/lang_pl.json +++ b/app/lang/lang_pl.json @@ -124,7 +124,8 @@ "error": "Wystąpił Błąd", "success": "Transakcja została pomyślnie zrealizowana", "isCoinbaseUTXO": "Your address contains newly mined coins, also called coinbase unspent transaction outputs (coinbase UTXO). These need to be shielded and unshielded first before they can be spent, please import the private key of this address into a full wallet like Swing and then send all your coins from this address to a Z-address and then back to this T-address. You will be then able to spend them in Arizen as well.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -168,8 +169,8 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_pt.json b/app/lang/lang_pt.json index 99c64e51..be490909 100644 --- a/app/lang/lang_pt.json +++ b/app/lang/lang_pt.json @@ -124,7 +124,8 @@ "error": "Erro", "success": "A transação está concluída", "isCoinbaseUTXO": "Your address contains newly mined coins, also called coinbase unspent transaction outputs (coinbase UTXO). These need to be shielded and unshielded first before they can be spent, please import the private key of this address into a full wallet like Swing and then send all your coins from this address to a Z-address and then back to this T-address. You will be then able to spend them in Arizen as well.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -168,8 +169,8 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_ru.json b/app/lang/lang_ru.json index 8966a3a7..8edec454 100644 --- a/app/lang/lang_ru.json +++ b/app/lang/lang_ru.json @@ -124,7 +124,8 @@ "error": "Ошибка", "success": "Транзакция была успешно отправлена", "isCoinbaseUTXO": "Your address contains newly mined coins, also called coinbase unspent transaction outputs (coinbase UTXO). These need to be shielded and unshielded first before they can be spent, please import the private key of this address into a full wallet like Swing and then send all your coins from this address to a Z-address and then back to this T-address. You will be then able to spend them in Arizen as well.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -168,8 +169,8 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_sr.json b/app/lang/lang_sr.json index 13296182..054de3da 100644 --- a/app/lang/lang_sr.json +++ b/app/lang/lang_sr.json @@ -131,7 +131,8 @@ "error": "Greška", "success": "Transakcija je uspešno poslata", "isCoinbaseUTXO": "Vaša adresa sadrži novoproizvedene novčiće, takozvani Coinbase nepotrošeni transakcioni izlazi (coinbase UTXO). Oni moraju biti kriptovani i dekriptovani pre nego što se mogu potrošiti! Molimo Vas da importujete privatni ključ ove adrese u 'full node' novčanik - Swing. Sve svoje novčiće sa ove adrese pošaljite na Z-adresu, a zatim ih vratite na ovu T-adresu. Tada ćete biti u stanju trošiti ih pomoću Arizen novčanika.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -175,8 +176,8 @@ "enableNotifications": "Desktop obaveštenja", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Sigurnosni Nod FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH korisnik", "sshPassword": "SSH lozinka", "sshPort": "SSH port", diff --git a/app/lang/lang_tr.json b/app/lang/lang_tr.json index 220db302..c3cfbfed 100644 --- a/app/lang/lang_tr.json +++ b/app/lang/lang_tr.json @@ -124,7 +124,8 @@ "error": "Hata", "success": "İşlem başarılı bir şekilde gerçekleşti", "isCoinbaseUTXO": "Your address contains newly mined coins, also called coinbase unspent transaction outputs (coinbase UTXO). These need to be shielded and unshielded first before they can be spent, please import the private key of this address into a full wallet like Swing and then send all your coins from this address to a Z-address and then back to this T-address. You will be then able to spend them in Arizen as well.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -168,8 +169,8 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_vi.json b/app/lang/lang_vi.json index 4f43d461..80504763 100644 --- a/app/lang/lang_vi.json +++ b/app/lang/lang_vi.json @@ -124,7 +124,8 @@ "error": "Lỗi", "success": "Giao dịch đã gửi thành công", "isCoinbaseUTXO": "Your address contains newly mined coins, also called coinbase unspent transaction outputs (coinbase UTXO). These need to be shielded and unshielded first before they can be spent, please import the private key of this address into a full wallet like Swing and then send all your coins from this address to a Z-address and then back to this T-address. You will be then able to spend them in Arizen as well.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -168,8 +169,8 @@ "enableNotifications": "Thông báo cho Desktop", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_zh_cn.json b/app/lang/lang_zh_cn.json index 6a8de090..c64e58b3 100644 --- a/app/lang/lang_zh_cn.json +++ b/app/lang/lang_zh_cn.json @@ -124,7 +124,8 @@ "error": "错误", "success": "成功送出交易", "isCoinbaseUTXO": "Your address contains newly mined coins, also called coinbase unspent transaction outputs (coinbase UTXO). These need to be shielded and unshielded first before they can be spent, please import the private key of this address into a full wallet like Swing and then send all your coins from this address to a Z-address and then back to this T-address. You will be then able to spend them in Arizen as well.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -168,8 +169,8 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/lang/lang_zh_tw.json b/app/lang/lang_zh_tw.json index b905ac9e..25f98bb9 100644 --- a/app/lang/lang_zh_tw.json +++ b/app/lang/lang_zh_tw.json @@ -124,7 +124,8 @@ "error": "錯誤", "success": "成功送出交易", "isCoinbaseUTXO": "Your address contains newly mined coins, also called coinbase unspent transaction outputs (coinbase UTXO). These need to be shielded and unshielded first before they can be spent, please import the private key of this address into a full wallet like Swing and then send all your coins from this address to a Z-address and then back to this T-address. You will be then able to spend them in Arizen as well.", - "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!" + "tooManyUTXOs": "Your address consists of too many UTXOs, it is not possible to send this transaction via API!", + "noSourceAddress": "No source address was selected!" } }, "transactionHistory": { @@ -168,8 +169,8 @@ "enableNotifications": "Desktop notifications", "enableDomainFronting": "Domain fronting", "secureNodeFQDN": "Secure Node FQDN", - "sshPrivateKey" : "Path to SSH private key file", - "sshPassphrase" : "Passphrase for SSH private key file (if necessary)", + "sshPrivateKey": "Path to SSH private key file", + "sshPassphrase": "Passphrase for SSH private key file (if necessary)", "sshUsername": "SSH username", "sshPassword": "SSH password", "sshPort": "SSH port", diff --git a/app/main.js b/app/main.js index 30d30c71..e112ff4f 100644 --- a/app/main.js +++ b/app/main.js @@ -1824,8 +1824,7 @@ ipcMain.on("send-many", async function (event, fromAddressesAll, toAddress, fee, // check if there isn't any address with a balance if(fromAddresses.length === 0){ - // TODO: fix error message - err = tr("wallet.tabWithdraw.messages.", "!"); + err = tr("wallet.tabWithdraw.messages.noSourceAddress", "No source address was selected!"); event.sender.send("send-finish", "error", err); } From 11eac442213e7db098fd7b2428052fbd9df5c75c Mon Sep 17 00:00:00 2001 From: Lukas Bures Date: Wed, 25 Jul 2018 21:49:07 +0200 Subject: [PATCH 18/42] GUI part of Batch Split functionality --- app/lang/lang_ar.json | 9 +++- app/lang/lang_bg.json | 9 +++- app/lang/lang_cs.json | 9 +++- app/lang/lang_de.json | 9 +++- app/lang/lang_el.json | 9 +++- app/lang/lang_en.json | 9 +++- app/lang/lang_es.json | 9 +++- app/lang/lang_fr.json | 9 +++- app/lang/lang_it.json | 9 +++- app/lang/lang_ja.json | 9 +++- app/lang/lang_ko.json | 9 +++- app/lang/lang_nl.json | 9 +++- app/lang/lang_pl.json | 9 +++- app/lang/lang_pt.json | 9 +++- app/lang/lang_ru.json | 9 +++- app/lang/lang_sr.json | 9 +++- app/lang/lang_tr.json | 9 +++- app/lang/lang_vi.json | 9 +++- app/lang/lang_zh_cn.json | 9 +++- app/lang/lang_zh_tw.json | 9 +++- app/main.js | 4 ++ app/resources/zwallet.css | 5 +++ app/zwallet.html | 39 +++++++++++++++--- app/zwallet.js | 86 +++++++++++++++++++++++++++++++++++++++ 24 files changed, 268 insertions(+), 46 deletions(-) diff --git a/app/lang/lang_ar.json b/app/lang/lang_ar.json index ae1b56b4..8b46d22b 100644 --- a/app/lang/lang_ar.json +++ b/app/lang/lang_ar.json @@ -197,8 +197,7 @@ }, "batchWithdraw": { "label": "انسحاب متعددة", - "keepAmount": "المبلغ للحفاظ على", - "txFee": "رسوم التحويل" + "keepAmount": "المبلغ للحفاظ على" }, "importSinglePrivateKey": { "openButtonLabel": "Import Private Key", @@ -223,6 +222,12 @@ "results": "RPC Results ...", "status": "Status: ", "testFunctionButton": "Test Function" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_bg.json b/app/lang/lang_bg.json index 256aa5c8..61deee24 100644 --- a/app/lang/lang_bg.json +++ b/app/lang/lang_bg.json @@ -204,8 +204,7 @@ }, "batchWithdraw": { "label": "Групово изплащане", - "keepAmount": "Сума за запазване", - "txFee": "Такса за транзакция" + "keepAmount": "Сума за запазване" }, "importSinglePrivateKey": { "openButtonLabel": "Импортиране на частен ключ", @@ -229,6 +228,12 @@ "results": "RPC резултати ...", "status": "Състояние: ", "testFunctionButton": "Тестване на функции" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_cs.json b/app/lang/lang_cs.json index 1dab646f..e40405e1 100644 --- a/app/lang/lang_cs.json +++ b/app/lang/lang_cs.json @@ -198,8 +198,7 @@ }, "batchWithdraw": { "label": "Hromadný výběr", - "keepAmount": "Minimální zůstatek", - "txFee": "Poplatek za transakci" + "keepAmount": "Minimální zůstatek" }, "importSinglePrivateKey": { "openButtonLabel": "Import privátního klíče", @@ -224,6 +223,12 @@ "results": "RPC odpověď ...", "status": "Status: ", "testFunctionButton": "Otestuj funkci" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_de.json b/app/lang/lang_de.json index b5dac529..111ee407 100644 --- a/app/lang/lang_de.json +++ b/app/lang/lang_de.json @@ -197,8 +197,7 @@ }, "batchWithdraw": { "label": "Gruppenauszahlung", - "keepAmount": "Zu behaltener Betrag", - "txFee": "Transakltionsgebühr" + "keepAmount": "Zu behaltener Betrag" }, "importSinglePrivateKey": { "openButtonLabel": "Privaten Schlüssel importieren", @@ -223,6 +222,12 @@ "results": "RPC Ausgabe ...", "status": "Status: ", "testFunctionButton": "Funktion testen" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_el.json b/app/lang/lang_el.json index a8291511..09ae894c 100644 --- a/app/lang/lang_el.json +++ b/app/lang/lang_el.json @@ -197,8 +197,7 @@ }, "batchWithdraw": { "label": "Ομαδική ανάληψη", - "keepAmount": "Ποσό να κρατηθεί", - "txFee": "Τέλος συναλλαγής" + "keepAmount": "Ποσό να κρατηθεί" }, "importSinglePrivateKey": { "openButtonLabel": "Εισαγωγή ιδιωτικού κλειδιού", @@ -223,6 +222,12 @@ "results": "RPC αποτελέσματα ...", "status": "Κατάσταση: ", "testFunctionButton": "Δοκίμασε συνάρτηση" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_en.json b/app/lang/lang_en.json index f0ef986c..5d4cca5a 100644 --- a/app/lang/lang_en.json +++ b/app/lang/lang_en.json @@ -204,8 +204,7 @@ }, "batchWithdraw": { "label": "Batch Withdraw", - "keepAmount": "Amount to keep", - "txFee": "Transaction fee" + "keepAmount": "Amount to keep" }, "importSinglePrivateKey": { "openButtonLabel": "Import Private Key", @@ -229,6 +228,12 @@ "results": "RPC Results ...", "status": "Status: ", "testFunctionButton": "Test Function" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_es.json b/app/lang/lang_es.json index e40d1e41..2a3657a7 100644 --- a/app/lang/lang_es.json +++ b/app/lang/lang_es.json @@ -197,8 +197,7 @@ }, "batchWithdraw": { "label": "Retiro Multiple", - "keepAmount": "Cantidad a conservar", - "txFee": "Comisión de la transacción" + "keepAmount": "Cantidad a conservar" }, "importSinglePrivateKey": { "openButtonLabel": "Import Private Key", @@ -223,6 +222,12 @@ "results": "RPC Results ...", "status": "Status: ", "testFunctionButton": "Test Function" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_fr.json b/app/lang/lang_fr.json index 30f19e40..08808126 100644 --- a/app/lang/lang_fr.json +++ b/app/lang/lang_fr.json @@ -197,8 +197,7 @@ }, "batchWithdraw": { "label": "Retraits multiple", - "keepAmount": "Montant à conserver", - "txFee": "Frais de transaction" + "keepAmount": "Montant à conserver" }, "importSinglePrivateKey": { "openButtonLabel": "Import Private Key", @@ -223,6 +222,12 @@ "results": "RPC Results ...", "status": "Status: ", "testFunctionButton": "Test Function" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_it.json b/app/lang/lang_it.json index 4dceb628..fa692329 100644 --- a/app/lang/lang_it.json +++ b/app/lang/lang_it.json @@ -204,8 +204,7 @@ }, "batchWithdraw": { "label": "Prelievo multiplo", - "keepAmount": "Totale da mantenere", - "txFee": "Fee di transazione" + "keepAmount": "Totale da mantenere" }, "importSinglePrivateKey": { "openButtonLabel": "Importa Chiave Privata", @@ -229,6 +228,12 @@ "results": "Risultati RPC ...", "status": "Status: ", "testFunctionButton": "Funzione di Test" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_ja.json b/app/lang/lang_ja.json index d2042fc4..aae8ae4a 100644 --- a/app/lang/lang_ja.json +++ b/app/lang/lang_ja.json @@ -197,8 +197,7 @@ }, "batchWithdraw": { "label": "まとめて送付", - "keepAmount": "送付せずに残しておく額", - "txFee": "トランザクション手数料" + "keepAmount": "送付せずに残しておく額" }, "importSinglePrivateKey": { "openButtonLabel": "秘密鍵のインポート", @@ -223,6 +222,12 @@ "results": "RPC の結果 ...", "status": "ステータス: ", "testFunctionButton": "実行" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_ko.json b/app/lang/lang_ko.json index e4c62d13..2f92cb86 100644 --- a/app/lang/lang_ko.json +++ b/app/lang/lang_ko.json @@ -197,8 +197,7 @@ }, "batchWithdraw": { "label": "일괄 철회", - "keepAmount": "유지할 금액", - "txFee": "거래 수수료" + "keepAmount": "유지할 금액" }, "importSinglePrivateKey": { "openButtonLabel": "개인 키 가져오기", @@ -223,6 +222,12 @@ "results": "RPC 결과 ...", "status": "상태: ", "testFunctionButton": "테스트 기능" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_nl.json b/app/lang/lang_nl.json index 188c8580..fa576ac1 100644 --- a/app/lang/lang_nl.json +++ b/app/lang/lang_nl.json @@ -197,8 +197,7 @@ }, "batchWithdraw": { "label": "Meerdere Opnamen", - "keepAmount": "Te behouden bedrag", - "txFee": "Transactiekosten" + "keepAmount": "Te behouden bedrag" }, "importSinglePrivateKey": { "openButtonLabel": "Importeer Prive Sleutel", @@ -223,6 +222,12 @@ "results": "RPC Resultaten ...", "status": "Status: ", "testFunctionButton": "Test Functie" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_pl.json b/app/lang/lang_pl.json index 241f4c46..e2b060fc 100644 --- a/app/lang/lang_pl.json +++ b/app/lang/lang_pl.json @@ -197,8 +197,7 @@ }, "batchWithdraw": { "label": "Wypłaty Seryjne", - "keepAmount": "Kwota do zatrzymania", - "txFee": "Opłata transakcyjna" + "keepAmount": "Kwota do zatrzymania" }, "importSinglePrivateKey": { "openButtonLabel": "Import Private Key", @@ -223,6 +222,12 @@ "results": "RPC Results ...", "status": "Status: ", "testFunctionButton": "Test Function" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_pt.json b/app/lang/lang_pt.json index be490909..2b267319 100644 --- a/app/lang/lang_pt.json +++ b/app/lang/lang_pt.json @@ -197,8 +197,7 @@ }, "batchWithdraw": { "label": "Retirada múltipla", - "keepAmount": "Quantidade para manter", - "txFee": "Taxa de transação" + "keepAmount": "Quantidade para manter" }, "importSinglePrivateKey": { "openButtonLabel": "Import Private Key", @@ -223,6 +222,12 @@ "results": "RPC Results ...", "status": "Status: ", "testFunctionButton": "Test Function" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_ru.json b/app/lang/lang_ru.json index 8edec454..a2869523 100644 --- a/app/lang/lang_ru.json +++ b/app/lang/lang_ru.json @@ -197,8 +197,7 @@ }, "batchWithdraw": { "label": "Массовое Снятие", - "keepAmount": "Оставить Сумму", - "txFee": "Комиссия" + "keepAmount": "Оставить Сумму" }, "importSinglePrivateKey": { "openButtonLabel": "Import Private Key", @@ -223,6 +222,12 @@ "results": "RPC Results ...", "status": "Status: ", "testFunctionButton": "Test Function" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_sr.json b/app/lang/lang_sr.json index 054de3da..c4074557 100644 --- a/app/lang/lang_sr.json +++ b/app/lang/lang_sr.json @@ -204,8 +204,7 @@ }, "batchWithdraw": { "label": "Višestruko povlačenje", - "keepAmount": "Iznos za zadržati", - "txFee": "Transakcioni fee" + "keepAmount": "Iznos za zadržati" }, "importSinglePrivateKey": { "openButtonLabel": "Importujte Privatni Ključ", @@ -229,6 +228,12 @@ "results": "RPC rezultati ...", "status": "Status: ", "testFunctionButton": "Test Funkcija" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_tr.json b/app/lang/lang_tr.json index c3cfbfed..84d6fdc1 100644 --- a/app/lang/lang_tr.json +++ b/app/lang/lang_tr.json @@ -197,8 +197,7 @@ }, "batchWithdraw": { "label": "Toplu Çekim", - "keepAmount": "Bırakılacak Miktar", - "txFee": "İşlem ücreti" + "keepAmount": "Bırakılacak Miktar" }, "importSinglePrivateKey": { "openButtonLabel": "Import Private Key", @@ -223,6 +222,12 @@ "results": "RPC Results ...", "status": "Status: ", "testFunctionButton": "Test Function" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_vi.json b/app/lang/lang_vi.json index 80504763..92f7aab0 100644 --- a/app/lang/lang_vi.json +++ b/app/lang/lang_vi.json @@ -197,8 +197,7 @@ }, "batchWithdraw": { "label": "Gửi tiền hàng loạt", - "keepAmount": "Số lượng", - "txFee": "Phí giao dịch" + "keepAmount": "Số lượng" }, "importSinglePrivateKey": { "openButtonLabel": "Import Private Key", @@ -223,6 +222,12 @@ "results": "RPC Results ...", "status": "Status: ", "testFunctionButton": "Test Function" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_zh_cn.json b/app/lang/lang_zh_cn.json index c64e58b3..1042e646 100644 --- a/app/lang/lang_zh_cn.json +++ b/app/lang/lang_zh_cn.json @@ -197,8 +197,7 @@ }, "batchWithdraw": { "label": "批次取款", - "keepAmount": "留置金额", - "txFee": "交易费" + "keepAmount": "留置金额" }, "importSinglePrivateKey": { "openButtonLabel": "Import Private Key", @@ -223,6 +222,12 @@ "results": "RPC Results ...", "status": "Status: ", "testFunctionButton": "Test Function" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/lang/lang_zh_tw.json b/app/lang/lang_zh_tw.json index 25f98bb9..7fada88b 100644 --- a/app/lang/lang_zh_tw.json +++ b/app/lang/lang_zh_tw.json @@ -197,8 +197,7 @@ }, "batchWithdraw": { "label": "批次取款", - "keepAmount": "留置金額", - "txFee": "交易費" + "keepAmount": "留置金額" }, "importSinglePrivateKey": { "openButtonLabel": "Import Private Key", @@ -223,6 +222,12 @@ "results": "RPC Results ...", "status": "Status: ", "testFunctionButton": "Test Function" + }, + "batchSplit": { + "label": "Batch Split", + "splitToAmounts": "Split to amounts", + "toAddresses": "To addresses:", + "splitButtonLabel": "Split" } }, "menu": { diff --git a/app/main.js b/app/main.js index e112ff4f..f9307e45 100644 --- a/app/main.js +++ b/app/main.js @@ -1876,6 +1876,10 @@ ipcMain.on("send-many", async function (event, fromAddressesAll, toAddress, fee, } }); +ipcMain.on("split", async function (event, fromAddress, toAddresses, fee, splitTo = 42.0) { + +}); + ipcMain.on("create-paper-wallet", (event, name, addToWallet) => { let wif; if (addToWallet) { diff --git a/app/resources/zwallet.css b/app/resources/zwallet.css index 8f7d3237..65705a29 100644 --- a/app/resources/zwallet.css +++ b/app/resources/zwallet.css @@ -387,6 +387,11 @@ header button { margin: 10px 0 20px 0; } +.batchSplitContent .addrSelectList { + max-height: 300px; /* cannot make table to not overflow in any otther way sadly */ + margin: 10px 0 20px 0; +} + .dotSNstatus { height: 14px; width: 14px; diff --git a/app/zwallet.html b/app/zwallet.html index 007332e3..379c0b23 100644 --- a/app/zwallet.html +++ b/app/zwallet.html @@ -189,12 +189,10 @@

Batch Withdraw

- + - - + +
@@ -203,6 +201,34 @@

Batch Withdraw

+ +