Merge branch 'master' into patch-5

This commit is contained in:
Marcos Rodriguez Vélez 2020-12-09 13:18:29 -05:00 committed by GitHub
commit 4c0f6875d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 203 additions and 74 deletions

2
App.js
View File

@ -282,8 +282,8 @@ const App = () => {
<NavigationContainer ref={navigationRef} theme={colorScheme === 'dark' ? BlueDarkTheme : BlueDefaultTheme}>
<InitRoot />
<Notifications onProcessNotifications={processPushNotifications} />
{renderClipboardContentModal()}
</NavigationContainer>
{renderClipboardContentModal()}
</View>
<WatchConnectivity />
<DeviceQuickActions />

View File

@ -136,7 +136,7 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "5.6.9"
versionName "5.7.0"
multiDexEnabled true
missingDimensionStrategy 'react-native-camera', 'general'
testBuildType System.getProperty('testBuildType', 'debug') // This will later be used to control the test apk build type

View File

@ -1,3 +1,6 @@
import b58 from 'bs58check';
const HDNode = require('bip32');
export class MultisigCosigner {
constructor(data) {
this._data = data;
@ -7,6 +10,50 @@ export class MultisigCosigner {
this._valid = false;
this._cosigners = [];
// is it plain simple Zpub/Ypub/xpub?
if (data.startsWith('Zpub') && MultisigCosigner.isXpubValid(data)) {
this._fp = '00000000';
this._xpub = data;
this._path = "m/48'/0'/0'/2'";
this._valid = true;
this._cosigners = [true];
return;
} else if (data.startsWith('Ypub') && MultisigCosigner.isXpubValid(data)) {
this._fp = '00000000';
this._xpub = data;
this._path = "m/48'/0'/0'/1'";
this._valid = true;
this._cosigners = [true];
return;
} else if (data.startsWith('xpub') && MultisigCosigner.isXpubValid(data)) {
this._fp = '00000000';
this._xpub = data;
this._path = "m/45'";
this._valid = true;
this._cosigners = [true];
return;
}
// is it wallet descriptor?
if (data.startsWith('[')) {
const end = data.indexOf(']');
const part = data.substr(1, end - 1).replace(/[h]/g, "'");
this._fp = part.split('/')[0];
const xpub = data.substr(end + 1);
if (MultisigCosigner.isXpubValid(xpub)) {
this._xpub = xpub;
this._path = 'm';
for (let c = 0; c < part.split('/').length; c++) {
if (c === 0) continue;
this._path += '/' + part.split('/')[c];
}
this._cosigners = [true];
this._valid = true;
return;
}
}
// is it cobo json?
try {
const json = JSON.parse(data);
@ -47,6 +94,26 @@ export class MultisigCosigner {
}
}
static _zpubToXpub(zpub) {
let data = b58.decode(zpub);
data = data.slice(4);
data = Buffer.concat([Buffer.from('0488b21e', 'hex'), data]);
return b58.encode(data);
}
static isXpubValid(key) {
let xpub;
try {
xpub = MultisigCosigner._zpubToXpub(key);
HDNode.fromBase58(xpub);
return true;
} catch (_) {}
return false;
}
static exportToJson(xfp, xpub, path) {
return JSON.stringify({
xfp: xfp,

View File

@ -1513,7 +1513,7 @@
"$(inherited)",
"$(PROJECT_DIR)",
);
MARKETING_VERSION = 5.6.9;
MARKETING_VERSION = 5.7.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@ -1556,7 +1556,7 @@
"$(inherited)",
"$(PROJECT_DIR)",
);
MARKETING_VERSION = 5.6.9;
MARKETING_VERSION = 5.7.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@ -1597,7 +1597,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 5.6.9;
MARKETING_VERSION = 5.7.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.TodayExtension;
@ -1636,7 +1636,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 5.6.9;
MARKETING_VERSION = 5.7.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.TodayExtension;
PRODUCT_NAME = "BlueWallet - Bitcoin Price";
@ -1675,7 +1675,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 5.6.9;
MARKETING_VERSION = 5.7.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.PriceWidget;
@ -1717,7 +1717,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 5.6.9;
MARKETING_VERSION = 5.7.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.PriceWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
@ -1757,7 +1757,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 5.6.9;
MARKETING_VERSION = 5.7.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.MarketWidget;
@ -1800,7 +1800,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 5.6.9;
MARKETING_VERSION = 5.7.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.MarketWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
@ -1841,7 +1841,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 5.6.9;
MARKETING_VERSION = 5.7.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.WalletInformationAndMarketWidget;
@ -1885,7 +1885,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 5.6.9;
MARKETING_VERSION = 5.7.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.WalletInformationAndMarketWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
@ -1926,7 +1926,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 5.6.9;
MARKETING_VERSION = 5.7.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.WalletInformationWidget;
@ -1969,7 +1969,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 5.6.9;
MARKETING_VERSION = 5.7.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.WalletInformationWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
@ -2111,7 +2111,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 5.6.9;
MARKETING_VERSION = 5.7.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch.extension;
@ -2151,7 +2151,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 5.6.9;
MARKETING_VERSION = 5.7.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch.extension;
PRODUCT_NAME = "${TARGET_NAME}";
@ -2185,7 +2185,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11;
IBSC_MODULE = BlueWalletWatch_Extension;
INFOPLIST_FILE = BlueWalletWatch/Info.plist;
MARKETING_VERSION = 5.6.9;
MARKETING_VERSION = 5.7.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch;
@ -2221,7 +2221,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11;
IBSC_MODULE = BlueWalletWatch_Extension;
INFOPLIST_FILE = BlueWalletWatch/Info.plist;
MARKETING_VERSION = 5.6.9;
MARKETING_VERSION = 5.7.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch;
PRODUCT_NAME = "$(TARGET_NAME)";

View File

@ -1,3 +1,18 @@
v5.6.9
======
* ADD: warning text on backup screen
* ADD: CoinControl displays balances with user's preferred unit
* ADD: LBP Currency
* ADD: Verify if an address belongs to one of your wallets.
* FIX: fetch wallet transaction after broadcast
* FIX: crash on refresh button
* FIX: Don't display amount if none is passed
* REF: PSBT Multisig provide signature flow
* ADD: refresh wallet transactions for freshly imported wallets
* FIX: locales sl_SI, fi_FI
v5.6.8
======

View File

@ -80,7 +80,7 @@
"offer_account_finish": "Looks like you didn't finish setting up account on HodlHodl, would you like to finish setup now?",
"offer_choosemethod": "Choose payment method",
"offer_confirmations": "confirmations",
"offer_minmax": "min / max",
"offer_minmax": "min/max",
"offer_minutes": "min",
"offer_promt_fiat": "How much {currency} do you want to buy?",
"offer_promt_fiat_e": "For example 100",

View File

@ -6,7 +6,7 @@
"enter_password": "گذرواژه را وارد کنید",
"never": "هرگز",
"of": "{number} از {total}",
"ok": "قبول",
"ok": "بله",
"storage_is_encrypted": "فضای ذخیره‌سازی شما رمزگذاری شده است. برای رمزگشایی آن به گذرواژه نیاز است.",
"allow": "اجازه بده",
"dont_allow": "اجازه نده",
@ -44,18 +44,18 @@
"cont_buying": "خرید",
"cont_cancel": "لغو قرارداد",
"cont_cancel_q": "آیا مطمئن هستید که می‌خواهید این قرارداد را لغو کنید؟",
"cont_cancel_y": "بله، قرارداد را لغو کنید",
"cont_cancel_y": "بله، قرارداد را لغو کن",
"cont_chat": "شروع گفتگو با طرف قرارداد",
"cont_how": "نحوهٔ پرداخت",
"cont_no": "هیچ قراردادی در دست انجام ندارید",
"cont_no": "هیچ قراردادی دردست‌انجام ندارید",
"cont_paid": "قرارداد را به‌عنوان پرداخت‌شده علامت‌گذاری کن",
"cont_paid_e": "این کار را تنها درصورتی‌که وجه را از طریق روش پرداخت توافق‌شده برای فروشنده ارسال کرده‌اید انجام بده",
"cont_paid_q": "آیا مطمئن هستید که می‌خواهید این قرارداد را به‌عنوان پرداخت‌شده علامت‌گذاری کنید؟",
"cont_selling": "فروش",
"cont_st_completed": "تمام!",
"cont_st_in_progress_buyer": "سکهها گرو هستند. لطفاً به فروشنده پول بپردازید.",
"cont_st_in_progress_buyer": "کوینها گرو هستند. لطفاً به فروشنده پول بپردازید.",
"cont_st_paid_enought": "بیت‌کوین‌ها گرو هستند. لطفاً از طریق روش\nپرداخت توافق‌شده به فروشنده پول بپردازید.",
"cont_st_paid_waiting": "درانتظار فروشنده برای آزادکردن سکهها از گرو",
"cont_st_paid_waiting": "درانتظار فروشنده برای آزادکردن کوینها از گرو",
"cont_st_waiting": "درانتظار فروشنده برای گروگذاری بیت‌کوین‌ها",
"cont_title": "قراردادهای من",
"filter_any": "همه",
@ -71,7 +71,7 @@
"filter_search": "جستجو",
"filter_selling": "فروش",
"item_minmax": "حداقل/حداکثر",
"item_nooffers": "پیشنهادی یافت نشد. پیشنهادها را از «نزدیک من» به «پیشنهادهای جهانی» تغییر دهید!",
"item_nooffers": "پیشنهادی یافت نشد. پیشنهادها را از «نزدیک من» به «پیشنهادهای جهانی» تغییر دهید.",
"item_rating": "{rating} معامله",
"item_rating_no": "بدون رتبه‌بندی",
"login": "ورود",
@ -101,7 +101,7 @@
"refill_create": "جهت ادامه، لطفاً یک کیف پول بیت‌کوین جهت پرکردن مجدد ایجاد کنید.",
"refill_external": "پرکردن مجدد با کیف پول خارجی",
"refill_lnd_balance": "پرکردن مجدد موجودی کیف پول لایتنینگ",
"sameWalletAsInvoiceError": "شما نمی‌توانید فاکتوری را با همان کیف پولی که برای ایجاد آن استفاده کرده‌اید پرداخت کنید.",
"sameWalletAsInvoiceError": "شما نمی‌توانید فاکتوری را با همان کیف پولی که برای ایجاد آن استفاده کرده‌اید بپردازید.",
"title": "مدیریت دارایی"
},
"lndViewInvoice": {
@ -119,7 +119,7 @@
"create_fake_storage": "ایجاد فضای ذخیره‌سازی رمزگذاری‌شده",
"create_password": "یک گذرواژه ایجاد کنید",
"create_password_explanation": "گذرواژه برای فضای ذخیره‌سازی جعلی نباید با گذرواژهٔ فضای ذخیره‌سازی اصلی شما مطابقت داشته باشد",
"help": "تحت شرایط خاص، ممکن است مجبور شوید گذرواژه را فاش کنید. برای محفوظ‌نگه‌داشتن سکه‌های شما، BlueWallet می‌تواند یک فضای ذخیره‌سازی رمزگذاری‌شدهٔ دیگر را با گذرواژه‌ای متفاوت ایجاد کند. تحت فشار، می‌توانید این گذرواژه را برای شخص سوم افشا کنید. اگر این گذرواژه در BlueWallet وارد شود، کیف پول یک فضای ذخیره‌سازی «جعلی» جدید باز می‌کند. این فضا از دید شخص سوم معتبر به‌نظر می‌رسد، اما در عمل به‌صورت مخفیانه فضای ذخیره‌سازی اصلی شما را همراه با سکه‌ها محفوظ نگه می‌دارد.",
"help": "تحت شرایط خاص، ممکن است مجبور شوید گذرواژه را فاش کنید. برای محفوظ‌نگه‌داشتن دارایی شما، BlueWallet می‌تواند یک فضای ذخیره‌سازی رمزگذاری‌شدهٔ دیگر را با گذرواژه‌ای متفاوت ایجاد کند. تحت فشار، می‌توانید این گذرواژه را برای شخص سوم افشا کنید. اگر این گذرواژه در BlueWallet وارد شود، کیف پول یک فضای ذخیره‌سازی «جعلی» جدید باز می‌کند. این فضا از دید شخص سوم معتبر به‌نظر می‌رسد، اما در عمل به‌صورت مخفیانه فضای ذخیره‌سازی اصلی شما و دارایی‌تان را محفوظ نگه می‌دارد.",
"help2": "فضای ذخیره‌سازی جدید کاملاً کاربردی خواهد بود، و شما می‌توانید مقادیر کمی را در آنجا نگه دارید تا باورپذیرتر به‌نظر برسد.",
"password_should_not_match": "گذرواژه در حال استفاده است. لطفاً گذرواژهٔ دیگری را امتحان کنید.",
"passwords_do_not_match": "گذرواژه‌ها مطابقت ندارند. لطفاً دوباره امتحان کنید.",
@ -128,13 +128,13 @@
"title": "انکار موجه"
},
"pleasebackup": {
"ask": "آیا عبارت پشتیبان کیف پول خود را ذخیره کرده‌اید؟ درصورت ازدست‌دادن این دستگاه، این عبارت پشتیبان برای دسترسی به دارایی شما لازم است. بدون عبارت پشتیبان، دارایی شما برای همیشه ازدست خواهد رفت.",
"ask": "آیا کلمه‌های پشتیبان کیف پول خود را ذخیره کرده‌اید؟ درصورت ازدست‌دادن این دستگاه، این کلمه‌های پشتیبان برای دسترسی به دارایی شما لازم هستند. بدون کلمه‌های پشتیبان، دارایی شما برای همیشه ازدست خواهد رفت.",
"ask_no": "خیر، نکرده‌ام",
"ask_yes": "بله، کرده‌ام",
"ok": "خب، این را نوشتم!",
"ok_lnd": "خب، آن را ذخیره کردم.",
"text": "لطفاً درنگ کرده و این عبارت یادیار را روی یک تکه کاغذ یادداشت کنید. این عبارت پشتیبان شما است که می‌توانید از آن برای بازیابی کیف پول در دستگاه دیگری استفاده کنید.",
"text_lnd": "لطفاً درنگ کرده و این اصالت‌سنجی LNDHub را ذخیره کنید. این عبارت پشتیبان شما است که می‌توانید از آن برای بازیابی کیف پول در دستگاه دیگری استفاده کنید.",
"text": "لطفاً درنگ کرده و این عبارت یادیار (mnemonic phrase) را روی یک تکه کاغذ یادداشت کنید. این کلمه‌های پشتیبان شما هستند که می‌توانید از آن‌ها برای بازیابی کیف پول در دستگاه دیگری استفاده کنید.",
"text_lnd": "لطفاً درنگ کرده و این اصالت‌سنجی LNDHub را ذخیره کنید. این نسخهٔ پشتیبان شما است که می‌توانید از آن برای بازیابی کیف پول در دستگاه دیگری استفاده کنید.",
"title": "کیف پول شما ایجاد شد."
},
"receive": {
@ -147,7 +147,7 @@
"send": {
"broadcastButton": "انتشار",
"broadcastError": "خطا",
"broadcastNone": "هش تراکنش ورودی",
"broadcastNone": "هگزادسیمال تراکنش ورودی",
"broadcastPending": "در انتظار ثبت",
"broadcastSuccess": "موفقیت‌آمیز بود",
"confirm_header": "تأیید",
@ -159,23 +159,23 @@
"create_fee": "کارمزد",
"create_memo": "یادداشت",
"create_satoshi_per_byte": "ساتوشی به‌ازای هر بایت",
"create_this_is_hex": "این هگزادسیمال تراکنش شما است، امضاشده و آماده برای انتشار در شبکه.",
"create_this_is_hex": "این هگزادسیمال تراکنش شما استامضاشده و آماده برای انتشار در شبکه.",
"create_to": "به",
"create_tx_size": "سایز تراکنش",
"create_verify": "تأیید در coinb.in",
"details_add_rec_add": "افزودن گیرنده",
"details_add_rec_rem": "حذف گیرنده",
"details_address": "آدرس",
"details_address_field_is_not_valid": "فیلد آدرس معتبر نیست",
"details_address_field_is_not_valid": "آدرس معتبر نیست",
"details_adv_fee_bump": "امکان افزایش کارمزد",
"details_adv_full": "از کل موجودی استفاده کن",
"details_adv_full_remove": "گیرنده‌های دیگر شما از این تراکنش حذف خواهند شد.",
"details_adv_full_sure": "آیا مطمئن هستید که می‌خواهید از کل موجودی کیف پولتان برای این تراکنش استفاده کنید؟",
"details_adv_import": "واردکردن تراکنش",
"details_amount_field_is_not_valid": "فیلد مقدار معتبر نیست",
"details_amount_field_is_not_valid": "مقدار معتبر نیست",
"details_create": "ایجاد فاکتور",
"details_error_decode": "خطا: ناموفق در رمزگشایی آدرس بیت‌کوین",
"details_fee_field_is_not_valid": "فیلد کارمزد معتبر نیست",
"details_fee_field_is_not_valid": "کارمزد معتبر نیست",
"details_next": "بعدی",
"details_no_maximum": "کیف پول انتخاب‌شده از محاسبهٔ خودکار حداکثر موجودی پشتیبانی نمی‌کند. آیا مطمئن هستید که می‌خواهید این کیف پول را انتخاب کنید؟",
"details_no_multiple": "کیف پول انتخاب‌شده از ارسال بیت‌کوین به چند گیرنده پشتیبانی نمی‌کند. آیا مطمئن هستید که می‌خواهید این کیف پول را انتخاب کنید؟",
@ -197,7 +197,7 @@
"fee_fast": "سریع",
"fee_medium": "متوسط",
"fee_replace_min": "نرخ کل کارمزد (ساتوشی به‌ازای هر بایت) که قصد پرداخت آن را دارید باید بالاتر از {min} ساتوشی/بایت باشد",
"fee_satbyte": "در ساتوشی/بایت",
"fee_satbyte": "به ساتوشی/بایت",
"fee_slow": "کند",
"header": "ارسال",
"input_clear": "پاک‌کردن",
@ -208,8 +208,8 @@
"permission_camera_title": "اجازهٔ استفاده از دوربین",
"open_settings": "بازکردن تنظیمات",
"permission_storage_later": "بعداً از من بپرس",
"permission_storage_message": "BlueWallet جهت ذخیرهٔ این فایل به اجازهٔ شما برای دسترسی به فضای ذخیره‌سازی نیاز دارد.",
"permission_storage_denied_message": "BlueWallet قادر به ذخیرهٔ این فایل نیست. لطفاً تنظیمات دستگاه خود را باز کرده و «اجازهٔ ذخیره‌سازی» (Storage Permission) را فعال کنید.",
"permission_storage_message": "برنامهٔ BlueWallet جهت ذخیرهٔ این فایل به اجازهٔ شما برای دسترسی به فضای ذخیره‌سازی نیاز دارد.",
"permission_storage_denied_message": "برنامهٔ BlueWallet قادر به ذخیرهٔ این فایل نیست. لطفاً تنظیمات دستگاه خود را باز کرده و «اجازهٔ ذخیره‌سازی» (Storage Permission) را فعال کنید.",
"permission_storage_title": "مجوز دسترسی به فضای ذخیره‌سازی",
"psbt_clipboard": "کپی به کلیپ‌بورد",
"psbt_this_is_psbt": "این یک تراکنش بیت‌کوین ناقص‌امضاشده (Partially Signed Bitcoin Transaction) است. لطفاً برای اتمام آن را در کیف پول سخت‌افزاری خود امضا کنید.",
@ -218,7 +218,7 @@
"psbt_tx_open": "بازکردن تراکنش امضاشده",
"psbt_tx_scan": "اسکن تراکنش امضاشده",
"qr_error_no_qrcode": "تصویر انتخاب‌شده حاوی کد QR نیست.",
"qr_error_no_wallet": "فایل انتخاب‌شده حاوی کیف پول قابل‌واردکردن نیست.",
"qr_error_no_wallet": "فایل انتخاب‌شده حاوی کیف پولی نیست که بتوان آن را وارد کرد.",
"success_done": "انجام شد",
"txSaved": "فایل تراکنش ({filePath}) در پوشهٔ دانلودهای شما ذخیره شده است.",
"problem_with_psbt": "مشکل با تراکنش ناقص‌امضاشده (PSBT)"
@ -227,7 +227,7 @@
"about": "درباره",
"about_awesome": "ساخته‌شده با بهترین‌ها",
"about_backup": "همیشه از کلیدهای خود نسخهٔ پشتیبان تهیه کنید!",
"about_free": "BlueWallet پروژه‌ای رایگان و متن‌باز است. ساخته‌شده توسط کاربران بیت‌کوین.",
"about_free": "برنامهٔ BlueWallet پروژه‌ای رایگان و متن‌باز است. ساخته‌شده توسط کاربران بیت‌کوین.",
"about_release_notes": "یادداشت‌های انتشار",
"about_review": "برای ما یک بررسی بگذارید",
"about_selftest": "اجرای خودآزمایی",
@ -247,7 +247,7 @@
"electrum_host": "میزبان، به‌عنوان مثال {example}",
"electrum_port": "پورت TCP، به‌طورمعمول {example}",
"electrum_port_ssl": "پورت SSL، به‌طورمعمول {example}",
"electrum_saved": "تغییرات شما با موفقیت ذخیره شدند. ممکن است برای اعمال تغییرات به راه‌اندازی مجدد اپلیکیشن نیاز داشته باشید.",
"electrum_saved": "تغییرات شما با موفقیت ذخیره شدند. ممکن است برای اعمال تغییرات به راه‌اندازی مجدد برنامه نیاز داشته باشید.",
"electrum_settings": "تنظیمات الکترام",
"electrum_settings_explain": "برای استفاده از تنظیمات پیش‌فرض خالی بگذارید",
"electrum_status": "وضعیت",
@ -264,14 +264,14 @@
"general_adv_mode_e": "درصورت فعال‌بودن، گزینه‌های پیشرفته‌ای مانند انواع مختلف کیف پول، امکان تعیین سرور LNDHub موردنظر شما جهت اتصال، و آنتروپی سفارشی در هنگام ایجاد کیف پول را مشاهده خواهید کرد.",
"general_continuity": "پیوستگی",
"general_continuity_e": "درصورت فعال‌بودن، می‌توانید کیف پول‌های انتخاب‌شده و تراکنش‌ها را با استفاده از سایر دستگاه‌های متصل به Apple iCloud خود مشاهده کنید.",
"groundcontrol_explanation": "GroundControl یک سرور اعلانات فشار متن‌باز و رایگان برای کیف پول‌های بیت‌کوین است. شما می‌توانید سرور GroundControl خود را نصب کرده و آدرس آن را اینجا قرار دهید تا به زیرساخت‌های BlueWallet متکی نباشید. برای استفاده از تنظیمات پیش‌فرض خالی بگذارید.",
"groundcontrol_explanation": "سرویس GroundControl یک سرور اعلانات متن‌باز و رایگان برای کیف پول‌های بیت‌کوین است. شما می‌توانید سرور GroundControl خود را نصب کرده و آدرس آن را اینجا قرار دهید تا به زیرساخت‌های BlueWallet متکی نباشید. برای استفاده از تنظیمات پیش‌فرض خالی بگذارید.",
"header": "تنظیمات",
"language": "زبان",
"language_restart": "هنگام انتخاب زبان جدید، ممکن است به راه‌اندازی مجدد BlueWallet برای اعمال تغییرات نیاز باشد.",
"lightning_error_lndhub_uri": "یوآرآی LNDHub معتبر نیست",
"lightning_saved": "تغییرات شما با موفقیت ذخیره شدند",
"lightning_settings": "تنظیمات لایتنینگ",
"lightning_settings_explain": "برای اتصال به گره LND خود، لطفاً LNDHub را نصب کرده و آدرس آن را اینجا در تنظیمات قرار دهید. برای استفاده از LNDHub اپلیکیشن BlueWallet (به آدرس lndhub.io)، خالی بگذارید. کیف پول‌های ایجادشده بعد از ذخیرهٔ تغییرات به LNDHub مشخص‌شده متصل خواهند شد.",
"lightning_settings_explain": "برای اتصال به گره LND خود، لطفاً LNDHub را نصب کرده و آدرس آن را اینجا در تنظیمات قرار دهید. برای استفاده از LNDHub برنامهٔ BlueWallet (به آدرس lndhub.io)، خالی بگذارید. کیف پول‌های ایجادشده بعد از ذخیرهٔ تغییرات به LNDHub مشخص‌شده متصل خواهند شد.",
"network": "شبکه",
"network_broadcast": "انتشار تراکنش",
"network_electrum": "سرور الکترام",
@ -283,12 +283,12 @@
"plausible_deniability": "انکار موجه",
"privacy": "حریم خصوصی",
"privacy_read_clipboard": "خواندن کلیپ‌بورد",
"privacy_read_clipboard_alert": "BlueWallet میان‌برهایی را برای مدیریت فاکتور یا آدرس موجود در کلیپ‌بورد شما نمایش خواهد داد.",
"privacy_read_clipboard_alert": "برنامهٔ BlueWallet میان‌برهایی را برای مدیریت فاکتور یا آدرس موجود در کلیپ‌بورد شما نمایش خواهد داد.",
"privacy_system_settings": "تنظیمات دستگاه",
"privacy_quickactions": "میان‌برهای کیف پول",
"privacy_quickactions_explanation": "آیکون برنامهٔ BlueWallet را در صفحهٔ اصلی لمس کرده و نگه دارید تا موجودی کیف پول خود را سریع مشاهده کنید.",
"privacy_clipboard_explanation": "اگر آدرس یا فاکتوری در کلیپ‌بورد شما پیدا شد، میان‌بر ارائه بده.",
"push_notifications": "اعلانات فشار",
"push_notifications": "پوش نوتیفیکیشن",
"retype_password": "گذرواژه را دوباره بنویسید",
"save": "ذخیره",
"saved": "ذخیره شد"
@ -324,7 +324,7 @@
"pending": "در انتظار ثبت",
"list_title": "تراکنش‌ها",
"rbf_explain": "ما این تراکنش را با تراکنشی که گیرندهٔ آن شما هستید و کارمزد بیشتری دارد جایگزین خواهیم کرد. این درعمل تراکنش را لغو می‌کند. این کار Replace by Fee (به‌اختصار RBF) نام دارد—جایگزینی با کارمزد.",
"rbf_title": "افزایش کارمزد (CPFP)",
"rbf_title": "افزایش کارمزد (RBF)",
"status_bump": "افزایش کارمزد",
"status_cancel": "لغو تراکنش",
"transactions_count": "تعداد تراکنش‌ها"
@ -334,7 +334,7 @@
"add_bitcoin_explain": "کیف پول ساده و قدرتمند بیت‌کوین",
"add_create": "ایجاد",
"add_entropy_generated": "{gen} بایت از آنتروپی تولیدشده",
"add_entropy_provide": "فراهم‌کردن آنتروپی را از طریق انداختن تاس",
"add_entropy_provide": "فراهم‌کردن آنتروپی از طریق انداختن تاس",
"add_entropy_remain": "{gen} بایت از آنتروپی تولیدشده. {rem} بایت باقی‌مانده از تولیدکنندهٔ اعداد تصادفی سیستم گرفته خواهد شد.",
"add_import_wallet": "واردکردن کیف پول",
"add_lightning": "لایتنینگ",
@ -373,7 +373,7 @@
"export_title": "صادرکردن کیف پول",
"import_do_import": "واردکردن",
"import_error": "واردکردن ناموفق بود. لطفاً از معتبربودن دادهٔ ارائه‌شده اطمینان حاصل کنید.",
"import_explanation": "عبارت یادیار، کلید خصوصی، WIF، یا هر چیزی را که دارید اینجا بنویسید. BlueWallet تمام تلاش خود را برای حدس‌زدن قالب صحیح و واردکردن کیف پول شما انجام خواهد داد.",
"import_explanation": "عبارت یادیار (mnemonic phrase)، کلید خصوصی، WIF، یا هر چیزی را که دارید اینجا بنویسید. BlueWallet تمام تلاش خود را برای حدس‌زدن قالب صحیح و واردکردن کیف پول شما انجام خواهد داد.",
"import_file": "واردکردن فایل",
"import_imported": "وارد شد",
"import_scan_qr": "اسکن یا واردکردن فایل",
@ -381,12 +381,12 @@
"import_title": "واردکردن",
"list_create_a_button": "هم‌اکنون اضافه کن",
"list_create_a_wallet": "افزودن کیف پول",
"list_create_a_wallet_text": "مجانی است و می‌توانید\nهر تعداد که دوست داشتید بسازید",
"list_create_a_wallet_text": "مجانی است و می‌توانید هر تعداد\nکه دوست داشتید بسازید",
"list_empty_txs1": "تراکنش‌های شما در اینجا نمایش داده خواهند شد",
"list_empty_txs1_lightning": "برای تراکنش‌های روزمره بهتر است از کیف پول لایتنینگ استفاده شود. کارمزدها به‌طرز غیرمنصفانه‌ای ارزان و سرعت فوق‌العاده بالاست.",
"list_empty_txs2": "با کیف پول خود شروع کنید",
"list_empty_txs2_lightning": "\nبرای شروع استفاده، روی «مدیریت دارایی» بزنید و موجودی خود را شارژ کنید.",
"list_header": "کیف پول نشانگر یک جفت کلید است—یکی خصوصی و یکی که می‌توانید آن را برای دریافت سکه به‌اشتراک بگذارید.",
"list_header": "کیف پول نشانگر یک جفت کلید است—یکی خصوصی و یکی که می‌توانید آن را برای دریافت بیت‌کوین به‌اشتراک بگذارید.",
"list_import_error": "خطایی هنگام تلاش برای واردکردن این کیف پول رخ داد.",
"list_import_problem": "مشکل در واردکردن کیف پول",
"list_latest_transaction": "آخرین تراکنش",
@ -399,17 +399,17 @@
"looks_like_bip38": "این به کلید خصوصی محافظت‌شده با گذرواژه (BIP38) شباهت دارد",
"reorder_title": "بازچینی کیف پول‌ها",
"select_no_bitcoin": "هیچ کیف پول بیت‌کوینی درحال‌حاضر دردسترس نیست.",
"select_no_bitcoin_exp": "برای پرکردن مجدد کیف پول‌های لایتنینگ به کیف پول بیت‌کوین نیاز است. لطفاً یکی بسازید یا وارد کنید.",
"select_no_bitcoin_exp": "یک کیف پول بیت‌کوین برای پرکردن مجدد کیف پول‌های لایتنینگ نیاز است. لطفاً یکی بسازید یا وارد کنید.",
"select_wallet": "انتخاب کیف پول",
"take_photo": "گرفتن عکس",
"xpub_copiedToClipboard": "در کلیپ‌بورد کپی شد.",
"pull_to_refresh": "برای به‌روزسانی به پایین بکشید",
"warning_do_not_disclose": "هشدار! فاش نکنید.",
"xpub_title": "XPUB کیف پول"
"xpub_title": "کلید XPUB کیف پول"
},
"multisig": {
"multisig_vault": "گاوصندوق",
"multisig_vault_explain": "بالاترین امنیت برای مقادیر بزرگ",
"multisig_vault_explain": "بالاترین امنیت برای مقادیر زیاد",
"provide_signature": "ارائهٔ امضا",
"vault_key": "کلید گاوصندوق {number}",
"required_keys_out_of_total": "کلیدهای موردنیاز از کل",
@ -418,7 +418,7 @@
"confirm": "تأیید",
"header": "ارسال",
"share": "اشتراک‌گذاری",
"how_many_signatures_can_bluewallet_make": "BlueWallet چند امضا می‌تواند ایجاد کند",
"how_many_signatures_can_bluewallet_make": "امضاهایی که BlueWallet می‌تواند ایجاد کند",
"scan_or_import_file": "اسکن یا واردکردن فایل",
"export_coordination_setup": "راه‌اندازی هماهنگی صادرکردن",
"cosign_this_transaction": "این تراکنش را مشترکاً امضا می‌کنید؟",
@ -430,31 +430,31 @@
"legacy_title": "Legacy",
"co_sign_transaction": "امضاکردن تراکنش",
"what_is_vault": "گاوصندوق یک کیف پول",
"what_is_vault_numberOfWallets": "چندامضایی {m} از {n}",
"what_is_vault_numberOfWallets": " چندامضایی {m} از {n} ",
"what_is_vault_wallet": "است.",
"vault_advanced_customize": "تنظیمات گاوصندوق",
"needs": "به",
"what_is_vault_description_number_of_vault_keys": "{m} کلید گاوصندوق",
"what_is_vault_description_number_of_vault_keys": " {m} کلید گاوصندوق ",
"what_is_vault_description_to_spend": "برای خرج‌کردن نیاز داشته و یک کلید سوم\nکه می‌توانید برای تهیهٔ نسخهٔ پشتیبان از آن استفاده کنید.",
"quorum": "حد نصاب {m} از {n}",
"quorum_header": "حد نصاب",
"of": "از",
"wallet_type": "نوع کیف پول",
"view_key": "نمایش",
"invalid_mnemonics": "به‌نظر نمی‌رسد این عبارت یادیار معتبر باشد",
"invalid_mnemonics": "به‌نظر نمی‌رسد این عبارت یادیار (mnemonic phrase) معتبر باشد",
"invalid_cosigner": "دادهٔ امضاکنندهٔ مشترک معتبر نیست",
"invalid_cosigner_format": "امضاکنندهٔ مشترک نادرست: این یک امضاکنندهٔ مشترک برای قالب {format} نیست",
"create_new_key": "جدید بسازید",
"scan_or_open_file": "اسکن یا بازکردن فایل",
"i_have_mnemonics": "من سید این کلید را دارم",
"please_write_down_mnemonics": "لطفاً این عبارت یادیار را روی کاغذ بنویسید. نگران نباشید، می‌توانید بعداً آن را یادداشت کنید.",
"please_write_down_mnemonics": "لطفاً این عبارت یادیار (mnemonic phrase) را روی کاغذ بنویسید. نگران نباشید، می‌توانید بعداً آن را یادداشت کنید.",
"i_wrote_it_down": "خب، آن را نوشتم.",
"type_your_mnemonics": "سید را وارد کرده تا کلید گاوصندوق فعلی خود را وارد کنید",
"this_is_cosigners_xpub": "این XPUB امضاکنندهٔ مشترک است، آماده برای واردشدن درون یک کیف پول دیگر. به‌اشتراک‌گذاری آن بی‌خطر است.",
"wallet_key_created": "کلید گاوصندوق شما ایجاد شد. لحظه‌ای درنگ کرده تا با خیال راحت از سید یادیار خود نسخهٔ پشتیبان تهیه کنید.",
"are_you_sure_seed_will_be_lost": "مطمئن هستید؟ درصورتی‌که نسخهٔ پشتیبان نداشته باشید، سید یادیار شما ازبین خواهد رفت.",
"type_your_mnemonics": "سید را بنویسید تا کلید گاوصندوق فعلی خود را وارد کنید",
"this_is_cosigners_xpub": "این XPUB امضاکنندهٔ مشترک استآماده برای واردشدن درون یک کیف پول دیگر. به‌اشتراک‌گذاری آن بی‌خطر است.",
"wallet_key_created": "کلید گاوصندوق شما ایجاد شد. لحظه‌ای درنگ کرده تا با خیال راحت از سید خود نسخهٔ پشتیبان تهیه کنید.",
"are_you_sure_seed_will_be_lost": "مطمئن هستید؟ درصورتی‌که نسخهٔ پشتیبان نداشته باشید، سید شما ازبین خواهد رفت.",
"forget_this_seed": "این سید را فراموش و به‌جای آن از XPUB استفاده کن",
"invalid_fingerprint": "اثر انگشت این سید با اثر انگشت این امضاکنندهٔ مشترک مطابقت ندارد",
"invalid_fingerprint": "اثر انگشت سید با اثر انگشت این امضاکنندهٔ مشترک مطابقت ندارد",
"view_edit_cosigners": "مشاهده/ویرایش امضاکنندگان مشترک",
"this_cosigner_is_already_imported": "این امضاکنندهٔ مشترک قبلاً وارد شده است",
"export_signed_psbt": "صادرکردن PSBT امضاشده",
@ -464,14 +464,20 @@
"input_path_explain": "جهت استفاده از تنظیمات پیش‌فرض ({default}) رد کنید",
"view_edit_cosigners_title": "ویرایش امضاکنندگان مشترک"
},
"is_it_my_address": {
"title": "آیا آدرس من است؟",
"owns": "آدرس {address} متعلق به {label} است.",
"enter_address": "آدرس را وارد کنید:",
"check_address": "بررسی آدرس"
},
"cc": {
"change": "تغییر",
"coins_selected": "سکه‌های انتخاب‌شده ({number})",
"empty": "این کیف پول درحال‌حاضر هیچ سکه‌ای ندارد",
"coins_selected": "کوین‌های انتخاب‌شده ({number})",
"empty": "این کیف پول درحال‌حاضر هیچ کوینی ندارد",
"freeze": "مسدودکردن",
"freezeLabel": "مسدود",
"header": "مدیریت سکه‌ها",
"use_coin": "استفاده از سکه",
"tip": "به شما اجازه می‌دهد برای مدیریت بهتر کیف پول، سکهها را مشاهده، برچسب‌گذاری، مسدود، یا انتخاب کنید."
"header": "مدیریت کوین",
"use_coin": "استفاده از کوین",
"tip": "به شما اجازه می‌دهد برای مدیریت بهتر کیف پول، کوینها را مشاهده، برچسب‌گذاری، مسدود، یا انتخاب کنید."
}
}

View File

@ -464,6 +464,12 @@
"input_path_explain": "preskoči in uporabi privzeto ({default})",
"view_edit_cosigners_title": "Urejanje sopodpisnikov"
},
"is_it_my_address": {
"title": "Je to moj naslov?",
"owns": "{label} ima v lasti {address}",
"enter_address": "Vnesite naslov:",
"check_address": "Preveri naslov"
},
"cc": {
"change": "vračilo",
"coins_selected": "Izbrani kovanci ({number})",

8
package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "bluewallet",
"version": "5.6.9",
"version": "5.7.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -19304,9 +19304,9 @@
}
},
"react-native-webview": {
"version": "10.10.0",
"resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-10.10.0.tgz",
"integrity": "sha512-T0AnZ0LVhaFBqZpl5attDDYo83zqdFRsFVINbrgHaIm6w5r0d/QK/dJRgXRNyFhn1fSONhe0ejdcnCYCT73B6g==",
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-11.0.0.tgz",
"integrity": "sha512-gzID5ebCFVNkxreuabClymo6QkJbXCLEtiIUY9QAhxY58HsDUp8x0YzDVEROYyEJ4ghL71koAOeQRDNAgNnh1w==",
"requires": {
"escape-string-regexp": "2.0.0",
"invariant": "2.2.4"

View File

@ -1,6 +1,6 @@
{
"name": "bluewallet",
"version": "5.6.9",
"version": "5.7.0",
"license": "MIT",
"devDependencies": {
"@babel/core": "^7.10.4",
@ -159,7 +159,7 @@
"react-native-tooltip": "git+https://github.com/BlueWallet/react-native-tooltip.git#d369e7ece09e4dec73873f1cfeac83e9d35294a6",
"react-native-vector-icons": "6.6.0",
"react-native-watch-connectivity": "1.0.3",
"react-native-webview": "10.10.0",
"react-native-webview": "11.0.0",
"react-native-widget-center": "git+https://github.com/BlueWallet/react-native-widget-center.git#e2e9a9038b76d096bf929a87105a97a0a7095001",
"react-test-render": "1.1.2",
"readable-stream": "3.6.0",

View File

@ -1582,6 +1582,41 @@ describe('multisig-cosigner', () => {
assert.strictEqual(cosigner.howManyCosignersWeHave(), 1);
});
it('can parse plain Zpub', () => {
const cosigner = new MultisigCosigner(Zpub1);
assert.ok(cosigner.isValid());
assert.strictEqual(cosigner.getFp(), '00000000');
assert.strictEqual(cosigner.getXpub(), Zpub1);
assert.strictEqual(cosigner.getPath(), "m/48'/0'/0'/2'");
assert.strictEqual(cosigner.howManyCosignersWeHave(), 1);
});
it('can parse wallet descriptor', () => {
let cosigner = new MultisigCosigner(
'[73c5da0a/48h/0h/0h/2h]Zpub74Jru6aftwwHxCUCWEvP6DgrfFsdA4U6ZRtQ5i8qJpMcC39yZGv3egBhQfV3MS9pZtH5z8iV5qWkJsK6ESs6mSzt4qvGhzJxPeeVS2e1zUG',
);
assert.ok(cosigner.isValid());
assert.strictEqual(cosigner.getFp(), '73c5da0a');
assert.strictEqual(
cosigner.getXpub(),
'Zpub74Jru6aftwwHxCUCWEvP6DgrfFsdA4U6ZRtQ5i8qJpMcC39yZGv3egBhQfV3MS9pZtH5z8iV5qWkJsK6ESs6mSzt4qvGhzJxPeeVS2e1zUG',
);
assert.strictEqual(cosigner.getPath(), "m/48'/0'/0'/2'");
assert.strictEqual(cosigner.howManyCosignersWeHave(), 1);
cosigner = new MultisigCosigner(
'[73c5da0a/48h/0h/0h/2h]xpub6DkFAXWQ2dHxq2vatrt9qyA3bXYU4ToWQwCHbf5XB2mSTexcHZCeKS1VZYcPoBd5X8yVcbXFHJR9R8UCVpt82VX1VhR28mCyxUFL4r6KFrf',
);
assert.ok(cosigner.isValid());
assert.strictEqual(cosigner.getFp(), '73c5da0a');
assert.strictEqual(
cosigner.getXpub(),
'xpub6DkFAXWQ2dHxq2vatrt9qyA3bXYU4ToWQwCHbf5XB2mSTexcHZCeKS1VZYcPoBd5X8yVcbXFHJR9R8UCVpt82VX1VhR28mCyxUFL4r6KFrf',
);
assert.strictEqual(cosigner.getPath(), "m/48'/0'/0'/2'");
assert.strictEqual(cosigner.howManyCosignersWeHave(), 1);
});
it('cant parse bs', () => {
const cosigner = new MultisigCosigner('asdfasdgsqwrgqwegq');
assert.ok(!cosigner.isValid());