Merge branch 'master' into rateupda

This commit is contained in:
Marcos Rodriguez Vélez 2021-10-30 18:30:57 -04:00
commit 6a76d34605
No known key found for this signature in database
GPG key ID: 0D64671698D11C5C
5 changed files with 105 additions and 33 deletions

View file

@ -177,7 +177,7 @@ export class LightningLdkWallet extends LightningCustodianWallet {
async lookupNodeConnectionDetailsByPubkey(pubkey: string) {
// first, trying cache:
if (this._nodeConnectionDetailsCache[pubkey] && +new Date() - this._nodeConnectionDetailsCache[pubkey].ts < 2 * 14 * 24 * 3600 * 1000) {
if (this._nodeConnectionDetailsCache[pubkey] && +new Date() - this._nodeConnectionDetailsCache[pubkey].ts < 4 * 7 * 24 * 3600 * 1000) {
// cache hit
return this._nodeConnectionDetailsCache[pubkey];
}
@ -268,7 +268,7 @@ export class LightningLdkWallet extends LightningCustodianWallet {
this._execInBackground(this.reestablishChannels);
if (this.timeToCheckBlockchain()) this._execInBackground(this.checkBlockchain);
} catch (error) {
} catch (error: any) {
alert('LDK init error: ' + error.message);
}
}
@ -307,6 +307,7 @@ export class LightningLdkWallet extends LightningCustodianWallet {
// ok, it was sent. now, waiting for an event that it was _actually_ paid:
for (let c = 0; c < 60; c++) {
await new Promise(resolve => setTimeout(resolve, 500)); // sleep
for (const sentPayment of RnLdk.sentPayments || []) {
const paidHash = LightningLdkWallet.preimage2hash(sentPayment.payment_preimage);
if (paidHash === decoded.payment_hash) {
@ -323,11 +324,10 @@ export class LightningLdkWallet extends LightningCustodianWallet {
return;
}
}
}
// timeout. maybe it failed? lets lookup in a list of failed payments:
for (const failedPayment of RnLdk.failedPayments) {
if (failedPayment.payment_hash === decoded.payment_hash) throw new Error(JSON.stringify(failedPayment));
for (const failedPayment of RnLdk.failedPayments || []) {
if (failedPayment.payment_hash === decoded.payment_hash) throw new Error(JSON.stringify(failedPayment));
}
}
// no? lets just throw timeout error
@ -481,16 +481,21 @@ export class LightningLdkWallet extends LightningCustodianWallet {
try {
// exception might be in case of incompletely-started LDK
this._listChannels = await RnLdk.listChannels();
this._execInBackground(this.checkBlockchain);
await this.checkBlockchain();
// ^^^ will be executed if above didnt throw exceptions, which means ldk fully started.
// we need this for a case when app returns from background if it was in bg for a really long time.
// ldk needs to update it's blockchain data, and this is practically the only place where it can
// do that (except on cold start)
await this.reconnectPeersWithPendingChannels();
} catch (_) {}
}
try {
await this.reconnectPeersWithPendingChannels();
} catch (error: any) {
console.log('fetchTransactions failed');
console.log(error.message);
}
await this.getUserInvoices(); // it internally updates paid user invoices
}
@ -670,7 +675,7 @@ export class LightningLdkWallet extends LightningCustodianWallet {
(async () => {
try {
await func.call(that);
} catch (error) {
} catch (error: any) {
alert('_execInBackground error:' + error.message);
}
})();

View file

@ -3,8 +3,10 @@
"bad_password": "Неверный пароль, попробуй еще раз.",
"cancel": "Отмена",
"continue": "Продолжить",
"clipboard": "Буфер обмена",
"enter_password": "Введи пароль",
"never": "Никогда",
"disabled": "Отключено",
"of": "{number} из {total}",
"ok": "OK",
"storage_is_encrypted": "Твоё хранилище зашифровано. Введи пароль для расшифровки",
@ -25,6 +27,9 @@
"discard_changes": "Отменить изменения?",
"discard_changes_detail": "У вас есть несохраненные изменения. Вы уверены, что хотите отменить их?"
},
"alert": {
"default": "Внимание"
},
"azteco": {
"codeIs": "Код вашего ваучера",
"errorBeforeRefeem": "Перед активацией нужно сделать Bitcoin кошелёк.",
@ -81,6 +86,7 @@
"item_rating": "{rating} сделок",
"item_rating_no": "Нет рейтинга",
"local_trader": "Local Trader",
"local_trader_new": "New",
"login": "Войти",
"logout": "выйти",
"mycont": "Мои контракты",
@ -96,20 +102,45 @@
"p2p": "p2p обмен"
},
"lnd": {
"active":"Активный",
"inactive":"Не активный",
"channels": "Каналы",
"no_channels": "Нет каналов",
"claim_balance": "Требовать баланс {balance}",
"close_channel": "Закрыть канал",
"new_channel" : "Новый канал",
"errorInvoiceExpired": "Инвойс просрочен",
"exchange": "Обмен",
"force_close_channel": "Закрыть канал принудительно?",
"expired": "Истекший",
"node_alias": "Псевдоним ноды",
"expiredLow": "истекший",
"expiresIn": "Истекает через {time} мин",
"payButton": "Оплатить",
"placeholder": "Инвойс",
"open_channel": "Открыть Канал",
"funding_amount_placeholder": "Количество для пополнения, например 0.001",
"opening_channnel_for_from":"Открытие канала для кошелька {forWalletLabel} средствами из {fromWalletLabel}",
"are_you_sure_open_channel": "Вы уверены что хотите открыть этот канал?",
"are_you_sure_exit_without_new_channel": "Вы уверены, что хотите выйти, не открывая канал?",
"public": "Публичный",
"public_description": "Видимый в сети: этот узел может маршрутизировать и зарабатывать комиссию.",
"private": "Приватный",
"private_description": "Не видимый в сети: это сохранит конфиденциальность ваших платежей.",
"local_reserve": "Локальный резерв",
"potentialFee": "Примерная комиссия: {fee}",
"remote_host": "Удалённый хост",
"refill": "Пополнить",
"refill_card": "Пополнить с помощью банковской картой",
"reconnect_peer": "Переподключиться",
"refill_create": "Чтобы продолжить, пожалуйста, создайте биткойн-кошелек для пополнения.",
"refill_external": "Пополнить с помощью внешнего кошелька",
"refill_lnd_balance": "Пополнить баланс Lightning кошелька",
"sameWalletAsInvoiceError": "Ты не можешь оплатить Инвойс тем же кошельком, который ты использовал для его создания.",
"title": "Мои средства"
"title": "Мои средства",
"can_send": "Может Отправлять",
"can_receive": "Может Получать",
"view_logs": "Посмотреть Логи"
},
"lndViewInvoice": {
"additional_info": "Дополнительная информация",
@ -117,6 +148,7 @@
"lightning_invoice": "Lightning инвойс",
"has_been_paid": "Этот инвойс оплачен",
"open_direct_channel": "Открыть канал с этой нодой:",
"please_pay_between_and": "Оплатите от {min} до {max}",
"please_pay": "Пожалуйста оплатите",
"preimage": "Предпросмотр",
"sats": "sats",
@ -153,6 +185,7 @@
"header": "Получить"
},
"send": {
"provided_address_is_invoice": "Похоже, этот адрес предназначен для Лайтнинг инвойса. Пожалуйста, перейдите в свой кошелек Лайтнинг, чтобы оплатить этот счет.",
"broadcastButton": "ОТПРАВИТЬ",
"broadcastError": "ошибка",
"broadcastNone": "Хэш входящей транзакции",
@ -166,7 +199,7 @@
"create_details": "Детали",
"create_fee": "Комиссия",
"create_memo": "Примечание",
"create_satoshi_per_byte": "Сатоши на байт",
"create_satoshi_per_vbyte": "Сатоши за vByte",
"create_this_is_hex": "Это данные транзакции. Транзакция подписана и готова быть транслирована в сеть. Продолжить?",
"create_to": "Куда",
"create_tx_size": "Размер",
@ -179,6 +212,7 @@
"details_adv_full": "Использовать весь баланс",
"details_adv_full_sure": "Ты уверен что хочешь использоавать весь баланс кошелька для этой транзакции?",
"details_adv_import": "Импортировать транзакцию",
"details_adv_import_qr": "Импортировать транзакцию (QR)",
"details_amount_field_is_not_valid": "Введенная сумма неверна",
"details_amount_field_is_less_than_minimum_amount_sat": "Сумма слишком мала. Пожалуйста, введите сумму больше 500 сатоши.",
"details_create": "Создать",
@ -203,8 +237,8 @@
"fee_custom": "Другое",
"fee_fast": "Быстро",
"fee_medium": "Средне",
"fee_replace_min": "Комиссия (сатоши за байт) которую нужно заплатить должна быть выше {min} сатоши/байт",
"fee_satbyte": "сатоши/байт",
"fee_replace_minvb": "Комиссия (сатоши за vByte) которую нужно заплатить должна быть выше {min} сатоши/vByte",
"fee_satvbyte": "в сатоши/vByte",
"fee_slow": "Медленно",
"header": "Отправить",
"input_clear": "Очистить",
@ -217,7 +251,7 @@
"open_settings": "Открыть настройки",
"permission_storage_later": "Спроси меня позже",
"permission_storage_message": "BlueWallet нужно ваше разрешение для доступа к хранилищу, чтобы сохранить этот файл.",
"permission_storage_denied_message": "BlueWallet не может сохранить этот файл. Пожалуйста, откройте настройки устройства и разрешите использование Хранилища.",
"permission_storage_denied_message": "BlueWallet не может сохранить файл. Пожалуйста, откройте настройки устройства и разрешите использование Хранилища.",
"permission_storage_title": "Разрешение на доступ к Хранилищу",
"psbt_clipboard": "Скопировать в буфер обмена",
"psbt_this_is_psbt": "Это частично подписаная транзакция (PSBT). Пожалуйста, завершите подпись в вашем аппаратном кошельке.",
@ -225,8 +259,10 @@
"no_tx_signing_in_progress": "Нет транзакции в процессе подписания",
"psbt_tx_open": "Открыть Подписаную Транзакцию",
"psbt_tx_scan": "Сканировать Подписаную Транзакцию",
"qr_error_no_qrcode": "Выбранная картинка не содержит QR Code.",
"qr_error_no_qrcode": "Нам не удалось найти QR-код на выбранном изображении. Убедитесь, что изображение содержит только QR-код и ничего лишнего, например текста или кнопок.",
"qr_error_no_wallet": "Выбранный файл не содержит кошелька который можно было бы импортировать.",
"reset_amount": "Сбросить Количество",
"reset_amount_confirm": "Хотите сбросить количество?",
"success_done": "Готово",
"txSaved": "Файл с транзакцией ({filePath}) сохранён в папке Загрузки.",
"problem_with_psbt": "Проблема с PSBT"
@ -240,6 +276,7 @@
"about_release_notes": "История изменений",
"about_review": "Оставьте отзыв о нас",
"about_selftest": "Запустить самодиагностику",
"about_selftest_electrum_disabled": "Самотестирование недоступно в офлайн режиме. Пожалуйста, отключите офлайн режим и попробуйте еще раз.",
"about_selftest_ok": "Все внутренние тестирование прошло успешно.\nКошелек работает отлично. ",
"about_sm_github": "GitHub",
"about_sm_discord": "Сервер Discord",
@ -259,9 +296,12 @@
"default_wallets": "Показать все кошельки",
"electrum_connected": "Подключено",
"electrum_connected_not": "Не Подключено",
"electrum_connnected_not_description": "Для импорта кошелька требуется активное соединение с Electrum сервером. Вы можете проверить, установлено ли соединение, перейдя в раздел «Сеть» в настройках.",
"electrum_error_connect": "Не удается подключиться к Electrum серверу",
"lndhub_uri": "Например {example}",
"electrum_host": "Например {example}",
"lndhub_uri": "Например, {example}",
"electrum_host": "Например, {example}",
"electrum_offline_mode": "Офлайн режим",
"electrum_offline_description": "Когда включено, ваши биткойн-кошельки не будут пытаться обновить балансы или транзакции.",
"electrum_port": "Порт, обычно {example}",
"use_ssl": "Использовать SSL",
"electrum_saved": "Ваши изменения были успешно сохранены. Для вступления изменений в силу может потребоваться перезагрузка.",
@ -281,6 +321,7 @@
"electrum_reset_to_default": "Вы уверены что хотите сбросить значение Электрум сервер?",
"electrum_clear": "Очистить",
"tor_supported": "Tor поддерживается",
"tor_unsupported": "Соединения Tor не поддерживаются.",
"encrypt_decrypt": "Расшифровать хранилище",
"encrypt_decrypt_q": "Вы уверены, что хотите расшифровать хранилище? Это позволит получить доступ к вашим кошелькам без пароля.",
"encrypt_del_uninstall": "Удалить, если BlueWallet удален",
@ -288,7 +329,7 @@
"encrypt_title": "Безопасность",
"encrypt_tstorage": "хранилище",
"encrypt_use": "Использовать {type}",
"encrypt_use_expl": "{type} будет использоваться для подтверждения совершения транзакции, разблокировки, экспорта или удаления кошелька. {type} не будет использоваться для разблокировки зашифрованного хранилища.",
"encrypt_use_expl": "{type} будет использоваться для подтверждения вашей личности перед совершением транзакции, разблокировкой, экспортом или удалением кошелька. {type} не будет использоваться для открытия зашифрованного хранилища.",
"general": "Основные",
"general_adv_mode": "Включить расширенный режим",
"general_adv_mode_e": "При включении вы увидите расширенные параметры, такие как разные типы кошельков, возможность указать экземпляр LNDHub, к которому вы хотите подключиться, и пользовательскую энтропию при создании кошелька.",
@ -297,12 +338,13 @@
"groundcontrol_explanation": "GroundControl - это бесплатный сервер push-уведомлений с открытым исходным кодом для биткойн-кошельков. Вы можете установить свой собственный сервер GroundControl и указать здесь его URL, чтобы не полагаться на инфраструктуру BlueWallet. Оставьте пустым, чтобы использовать по умолчанию",
"header": "Настройки",
"language": "Язык",
"last_updated": "Последнее обновление",
"language_isRTL": "Перезапустите приложения для смены направления языка.",
"lightning_error_lndhub_uri": "Неверный URI LndHub",
"lightning_error_lndhub_uri": "Неверный URI LNDHub",
"lightning_saved": "Ваши изменения были успешно сохранены",
"lightning_settings": "Настройки Lightning",
"tor_settings": "Настройки Tor",
"lightning_settings_explain": "Чтобы подключиться к своему узлу LND, пожалуйста, установи LndHub и добавь его URL в настройки. Оставь поле пустым, чтобы использоавать стандартный LndHub\n (lndhub.io)",
"lightning_settings_explain": "Чтобы подключиться к собственному LND, установите LNDHub и укажите его URL в настройках. Оставьте поле пустым, чтобы использовать LNDHub BlueWallet (lndhub.io). Обратите внимание, что только кошельки, созданные после сохранения изменений, будут подключаться к указанному LNDHub.",
"network": "Сеть",
"network_broadcast": "Отправить транзакцию",
"network_electrum": "Electrum сервер",
@ -323,6 +365,7 @@
"privacy_do_not_track": "Выключить Аналитику",
"privacy_do_not_track_explanation": "Информация о производительности и надежности не будет отправлена на анализ.",
"push_notifications": "Push-уведомления",
"rate": "Цена",
"retype_password": "Набери пароль повторно",
"selfTest": "Проверка приложения",
"save": "Сохранить",
@ -343,9 +386,8 @@
"cancel_no": "Эту транзакцию не отменить",
"cancel_title": "Отменить транзакцию (RBF)",
"confirmations_lowercase": "{confirmations} подтверждений",
"note": "Заметка",
"copy_link": "Копировать Ссылку",
"expand_note": "Раскрыть Заметку",
"block_explorer_link": "Ссылка на Блок Эксплорер",
"cpfp_create": "Создать",
"cpfp_exp": "Мы создадим новую транзакцию, которая потратит вашу неподтвержденную. Общая сумма комиссии будет выше, чем первоначальная комиссия, поэтому она будет добыта быстрее. Это называется CPFP - ребенок платит за родителя.",
"cpfp_no_bump": "Нельзя повысить комиссию этой транзакции",
@ -354,6 +396,10 @@
"details_balance_show": "Показать баланс",
"details_block": "Номер Блока",
"details_copy": "копировать",
"details_copy_amount": "Копировать Количество",
"details_copy_block_explorer_link": "Копировать Ссылку на обозреватель блоков",
"details_copy_note": "Копировать Заметку",
"details_copy_txid": "Копировать ID транзакции",
"details_from": "От",
"details_inputs": "Входы",
"details_outputs": "Выходы",
@ -366,7 +412,13 @@
"enable_offline_signing": "Этот кошелек не используется вместе с оффлайн подписью. Хотите включить это сейчас?",
"list_conf": "{number} подтв.",
"pending": "В процессе",
"pending_with_amount": "В ожидании {amt1} ({amt2})",
"received_with_amount": "+{amt1} ({amt2})",
"eta_10m": "Примерно 10 минут",
"eta_3h": "Примерно 3 часа",
"eta_1d": "Примерно 1 день",
"list_title": "Мои транзакции",
"open_url_error": "Невозможно открыть URL в браузере по умолчанию. Измените браузер и попробуйте еще раз",
"rbf_explain": "Мы заменим эту транзакцию другой с более высокой комиссией, поэтому будет обработана быстрее. Это называется RBF - Replace By Fee.",
"rbf_title": "Повысить комиссию (RBF)",
"status_bump": "Повысить комиссию",
@ -389,9 +441,11 @@
"add_lndhub_error": "Не верный адрес LNDHub.",
"add_lndhub_placeholder": "Адрес хоста",
"add_or": "или",
"add_placeholder": "мой первый кошелёк",
"add_title": "Добавить кошелек",
"add_wallet_name": "Имя кошелька",
"add_wallet_type": "Тип кошелька",
"balance": "Баланс",
"clipboard_bitcoin": "В буфере обмена есть Биткойн адрес. Использовать его для создания транзакции?",
"clipboard_lightning": "В буфере обмена есть Lightning инвойс. Использовать его для создания транзакции?",
"details_address": "Адрес",
@ -423,17 +477,28 @@
"enter_bip38_password": "Введите пароль, чтобы расшифровать",
"export_title": "Экспорт Кошелька",
"import_do_import": "Импортировать",
"import_passphrase": "Пароль",
"import_passphrase_title": "Кодовая фраза",
"import_passphrase_message": "Введите кодовую фразу, если она используется",
"import_error": "Не удалось импортировать",
"import_explanation": "Напиши тут свою мнемоническую фразу, публичный ключ, WIF - что угодно! BlueWallet постарается угадать верный формат.",
"import_file": "Импортировать файл",
"import_imported": "Импорт завершен",
"import_placeholder_fail": "Импортированный кошелёк",
"import_placeholder_inprogress": "Кошелёк импортируется...",
"import_scan_qr": "или отсканировать QR код?",
"import_success": "Успех",
"import_search_accounts": "Искать аккаунты",
"import_title": "Импорт",
"import_discovery_title": "Поиск",
"import_discovery_subtitle": "Выберите обнаруженный кошелек",
"import_discovery_derivation": "Использовать другой путь деривации",
"import_discovery_no_wallets": "Кошельков не обнаружено.",
"import_derivation_found": "найден",
"import_derivation_found_not": "не найден",
"import_derivation_loading": "загрузка...",
"import_derivation_subtitle": "Введите собственный путь деривации, и мы постараемся обнаружить ваш кошелек",
"import_derivation_title": "Путь деривации",
"import_derivation_unknown": "неизвестно",
"import_wrong_path": "неправильный путь деривации",
"list_create_a_button": "добавить сейчас",
"list_create_a_wallet": "добавить кошелек",
"list_create_a_wallet_text": "Это бесплатно и ты можешь создать\nнеограниченное количество",
@ -442,7 +507,6 @@
"list_empty_txs2": "Добавьте кошелёк.",
"list_empty_txs2_lightning": "\nДля начала использования нажми \"Мои средства\" и пополни баланс.",
"list_header": "Кошелек - пара ключей, один приватный, другой - публичный используется, чтобы получить Bitcoin.",
"list_import_error": "При импорте этого кошелька возникла ошибка.",
"list_import_problem": "Ошибка при импорте кошелька",
"list_latest_transaction": "Последняя транзакция",
"list_ln_browser": "Браузер Лайтнинг-приложений",
@ -510,7 +574,7 @@
"wallet_type": "Тип кошелька",
"view_key": "посмотреть",
"invalid_mnemonics": "Сид-фраза не верна",
"invalid_cosigner": "Не действительные данные cosigner",
"invalid_cosigner": "Неверные данные cosigner",
"not_a_multisignature_xpub": "Это xpub не мультисиг кошелька!",
"invalid_cosigner_format": "Не верный cosigner: он не подходит для {format} формата",
"create_new_key": "Создать Новый",
@ -550,7 +614,8 @@
"owns": "{label} имеет {address}",
"enter_address": "Введите адрес",
"check_address": "Проверить адрес",
"no_wallet_owns_address": "Ни один из доступных кошельков не владеет этим адресом."
"no_wallet_owns_address": "Ни один из доступных кошельков не владеет этим адресом.",
"view_qrcode": "Посмотреть QR-код"
},
"cc": {
"change": "сдача",
@ -567,7 +632,7 @@
"units": {
"BTC": "BTC",
"MAX": "МАКС",
"sat_byte": "сатоши/байт",
"sat_vbyte": "sat/vByte",
"sats": "сатоши"
},
"addresses": {

View file

@ -67,7 +67,7 @@
"tslint": "tsc",
"lint": "eslint --ext .js,.ts,.tsx '*.@(js|ts|tsx)' screen 'blue_modules/*.@(js|ts|tsx)' class models loc tests components",
"lint:fix": "npm run lint -- --fix",
"lint:quickfix": "git status --porcelain | grep -v '\\.json' | grep '\\.js' --color=never | awk '{print $2}' | xargs eslint --fix; exit 0",
"lint:quickfix": "git status --porcelain | grep -v '\\.json' | grep -E '\\.js|\\.ts' --color=never | awk '{print $2}' | xargs eslint --fix; exit 0",
"unit": "jest -b tests/unit/*",
"windows": "react-native run-windows"
},

View file

@ -133,11 +133,15 @@ const LdkInfo = () => {
allChannelsAmount.current = channelsAvailable;
}, [channels, pendingChannels, inactiveChannels]);
// do we even need periodic sync when user stares at this screen..?
useEffect(() => {
refetchData().then(() => {
refreshDataInterval.current = setInterval(() => {
refetchData(false);
if (wallet.timeToCheckBlockchain()) wallet.checkBlockchain();
if (wallet.timeToCheckBlockchain()) {
wallet.checkBlockchain();
wallet.reconnectPeersWithPendingChannels();
}
}, 2000);
});
return () => {

View file

@ -386,8 +386,6 @@ const SendDetails = () => {
return [...addresses];
});
setIsLoading(false);
// RN Bug: contentOffset gets reset to 0 when state changes. Remove code once this bug is resolved.
setTimeout(() => scrollView.current.scrollToIndex({ index: currentIndex, animated: false }), 50);
return;
}