Merge branch 'master' into complicationprice

This commit is contained in:
marcosrdz 2021-02-10 23:35:27 -05:00
commit e46f60e62f
11 changed files with 162 additions and 144 deletions

View File

@ -1265,7 +1265,7 @@ export const BlueReceiveButtonIcon = props => {
);
};
export const BlueTransactionListItem = React.memo(({ item, itemPriceUnit = BitcoinUnit.BTC, walletID }) => {
export const BlueTransactionListItem = React.memo(({ item, itemPriceUnit = BitcoinUnit.BTC, timeElapsed }) => {
const [subtitleNumberOfLines, setSubtitleNumberOfLines] = useState(1);
const { colors } = useTheme();
const { navigate } = useNavigation();
@ -1422,38 +1422,46 @@ export const BlueTransactionListItem = React.memo(({ item, itemPriceUnit = Bitco
const onPress = useCallback(async () => {
if (item.hash) {
navigate('TransactionStatus', { hash: item.hash, walletID });
navigate('TransactionStatus', { hash: item.hash });
} else if (item.type === 'user_invoice' || item.type === 'payment_request' || item.type === 'paid_invoice') {
try {
// is it a successful lnurl-pay?
const LN = new Lnurl(false, AsyncStorage);
let paymentHash = item.payment_hash;
if (typeof paymentHash === 'object') {
paymentHash = Buffer.from(paymentHash.data).toString('hex');
const lightningWallet = wallets.filter(wallet => {
if (typeof wallet === 'object') {
if ('secret' in wallet) {
return wallet.getSecret() === item.fromWallet;
}
}
const loaded = await LN.loadSuccessfulPayment(paymentHash);
if (loaded) {
NavigationService.navigate('ScanLndInvoiceRoot', {
screen: 'LnurlPaySuccess',
params: {
paymentHash,
justPaid: false,
fromWalletID: walletID,
},
});
return;
}
} catch (e) {
console.log(e);
}
navigate('LNDViewInvoice', {
invoice: item,
walletID,
isModal: false,
});
}
if (lightningWallet.length === 1) {
try {
// is it a successful lnurl-pay?
const LN = new Lnurl(false, AsyncStorage);
let paymentHash = item.payment_hash;
if (typeof paymentHash === 'object') {
paymentHash = Buffer.from(paymentHash.data).toString('hex');
}
const loaded = await LN.loadSuccessfulPayment(paymentHash);
if (loaded) {
NavigationService.navigate('ScanLndInvoiceRoot', {
screen: 'LnurlPaySuccess',
params: {
paymentHash,
justPaid: false,
fromWalletID: lightningWallet[0].getID(),
},
});
return;
}
} catch (e) {
console.log(e);
}
navigate('LNDViewInvoice', {
invoice: item,
walletID: lightningWallet[0].getID(),
isModal: false,
});
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [item, wallets]);
@ -1476,7 +1484,7 @@ export const BlueTransactionListItem = React.memo(({ item, itemPriceUnit = Bitco
onPress={onPress}
onLongPress={onLongPress}
chevron={false}
Component={item.type === 'bitcoind_tx' ? View : TouchableOpacity}
Component={TouchableOpacity}
rightTitle={rowTitle}
rightTitleStyle={rowTitleStyle}
containerStyle={containerStyle}

View File

@ -136,7 +136,7 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "6.0.4"
versionName "6.0.5"
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

@ -567,7 +567,6 @@ export class AppStorage {
const walletTransactions = wallet.getTransactions();
for (const t of walletTransactions) {
t.walletPreferredBalanceUnit = wallet.getPreferredBalanceUnit();
t.walletID = wallet.getID();
}
txs = txs.concat(walletTransactions);
}

View File

@ -1663,7 +1663,7 @@
"$(inherited)",
"$(PROJECT_DIR)",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@ -1706,7 +1706,7 @@
"$(inherited)",
"$(PROJECT_DIR)",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@ -1747,7 +1747,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.TodayExtension;
@ -1786,7 +1786,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.TodayExtension;
PRODUCT_NAME = "BlueWallet - Bitcoin Price";
@ -1818,7 +1818,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = Stickers/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.Stickers;
@ -1849,7 +1849,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = Stickers/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.Stickers;
PRODUCT_NAME = "$(TARGET_NAME)";
@ -1885,7 +1885,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.PriceWidget;
@ -1927,7 +1927,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.PriceWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
@ -1967,7 +1967,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.MarketWidget;
@ -2010,7 +2010,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.MarketWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
@ -2051,7 +2051,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.WalletInformationAndMarketWidget;
@ -2095,7 +2095,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.WalletInformationAndMarketWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
@ -2136,7 +2136,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.WalletInformationWidget;
@ -2179,7 +2179,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.WalletInformationWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
@ -2321,7 +2321,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch.extension;
@ -2361,7 +2361,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch.extension;
PRODUCT_NAME = "${TARGET_NAME}";
@ -2396,12 +2396,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11;
IBSC_MODULE = BlueWalletWatch_Extension;
INFOPLIST_FILE = BlueWalletWatch/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
"@loader_path/../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch;
@ -2439,12 +2434,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11;
IBSC_MODULE = BlueWalletWatch_Extension;
INFOPLIST_FILE = BlueWalletWatch/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
"@loader_path/../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.5;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch;
PRODUCT_NAME = "$(TARGET_NAME)";

View File

@ -1,3 +1,35 @@
v6.0.4
======
* ADD: Toggle balance visibility on watch app
* ADD: Standard wallet type Electrum JSON import
* ADD: Wallet balance hide/show on Watch app
* ADD: multisig manage keys - show alert if unsaved changes are found
* ADD: AEZEED mnemonics support (from LND; only primary native-segwit chain atm)
* ADD: Wallet txs update indicator
* ADD: Do not show notification settings if device does not support it
* ADD: Show alert if amount is less or equal 500 sats during onchain send
* OPS: Update Realm (fixes crash on iOS beta)
* FIX: locales en, fa_IR, cs_CZ, fr_FR, de_DE, nl_NL, de_DE, fi_FI
* FIX: multisig 'cant finalize input' error when sending
* FIX: Scroll on multi sig creation
* FIX: MS loading creation
* FIX: During long menmonics import, wallet panels are not scrolled to the last temporary gray wallet card
* FIX: TransactionDetails screen - displaying correct transaction data
* FIX: set fee to lower value if balance is not enough
* FIX: better fee estimation based on mempool (onchain send, not widget, yet)
* FIX: Widget now shows Pending if latest tx is unconfirmed
* FIX: Scaning invalid BC-UR qr code throws multiple alerts
* FIX: cached wallet address wouldnt change on wallet change
* FIX: 'Few seconds ago' -> 'pending'
* FIX: legacy wallet can now derive UTXO from transactions in case if fetching listUnspent from network is impossible
* FIX: Conf number reflects correct number
* FIX: Multisig import seed hangs forever
* FIX: Instructions were clipped on larger text
* FIX: Biometrics in PSBT
* REF: better support of coldcard's incorrect 'p2sh-p2wsh'
* DEL: LocalTrader (HodlHodl) starts with Global offers by default
v6.0.3
======
@ -61,29 +93,3 @@ v6.0.1
* FIX: Handle opening links if the default browser isnt Safari
* FIX: contradiction in Vaul introduction text
* FIX: localizations for CA, DE, ES, fa_IR, sl_SI, cs_CZ, pt_BR
v6.0.0
======
* ADD: Multisig
* FIX: scan multisig cosigner in formats: plain Zpub, wallet descriptor
* FIX: txs disappear and re-fetch if opened wallet too fast
* ADD: Help section and tips to Vaults
* FIX: DE language files
* ADD: Persian language, sync cs_cz, es, it and ru
* FIX: Transaction details not shown when 'display in wallets list' not set (closes #1966)
* FIX: LNURL wallet not found
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

View File

@ -35,12 +35,12 @@
"undo": "بازگشت به حالت قبل"
},
"errors": {
"broadcast": "انتشار ناموفق بود",
"broadcast": "انتشار ناموفق بود.",
"error": "خطا",
"network": "خطای شبکه"
},
"hodl": {
"are_you_sure_you_want_to_logout": "آیا مطمئن هستید که می‌خواهید از HodlHodl خارج شوید؟",
"are_you_sure_you_want_to_logout": "آیا مطمئن هستید که می‌خواهید از Hodl Hodl خارج شوید؟",
"cont_address_escrow": "اسکرو",
"cont_address_to": "به",
"cont_buying": "خرید",
@ -81,7 +81,7 @@
"logout": "خروج",
"mycont": "قراردادهای من",
"offer_accept": "قبول پیشنهاد",
"offer_account_finish": "به‌نظر می‌رسد شما ثبت‌نام را در HodlHodl تکمیل نکرده‌اید. آیا می‌خواهید اکنون ساخت حساب را به‌پایان برسانید؟",
"offer_account_finish": "به‌نظر می‌رسد شما ثبت‌نام را در Hodl Hodl تکمیل نکرده‌اید. آیا می‌خواهید اکنون ساخت حساب را به‌پایان برسانید؟",
"offer_choosemethod": "انتخاب روش پرداخت",
"offer_confirmations": "تأییدها",
"offer_minmax": "حداقل/حداکثر",
@ -112,11 +112,11 @@
"additional_info": "اطلاعات بیشتر",
"for": "برای: ",
"lightning_invoice": "صورت‌حساب لایتنینگ",
"has_been_paid": "این صورت‌حساب پرداخت شده است",
"has_been_paid": "این صورت‌حساب پرداخت شده است.",
"open_direct_channel": "کانال مستقیمی با این گره باز کن:",
"please_pay": "لطفاً",
"preimage": "پیش‌نگاره",
"sats": "ساتوشی بپردازید",
"sats": "ساتوشی بپردازید.",
"wasnt_paid_and_expired": "این صورت‌حساب پرداخت نشده و منقضی شده است."
},
"plausibledeniability": {
@ -171,17 +171,17 @@
"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_amount_field_is_less_than_minimum_amount_sat": "مقدار تعیین‌شده بسیار کم است. لطفاً مقداری بیشتر از ۵۰۰ ساتوشی را وارد کنید.",
"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": "کیف پول انتخاب‌شده از ارسال بیت‌کوین به چند گیرنده پشتیبانی نمی‌کند. آیا مطمئن هستید که می‌خواهید این کیف پول را انتخاب کنید؟",
@ -264,7 +264,7 @@
"set_electrum_server_as_default": "آیا {server} به‌عنوان سرور پیش‌فرض الکترام تعیین شود؟",
"set_lndhub_as_default": "آیا {url} به‌عنوان سرور پیش‌فرض LNDHub تعیین شود؟",
"electrum_settings": "تنظیمات الکترام",
"electrum_settings_explain": "برای استفاده از تنظیمات پیش‌فرض خالی بگذارید",
"electrum_settings_explain": "برای استفاده از تنظیمات پیش‌فرض خالی بگذارید.",
"electrum_status": "وضعیت",
"electrum_clear_alert_title": "تاریخچه پاک شود؟",
"electrum_clear_alert_message": "آیا می‌خواهید تاریخچهٔ سرورهای الکترام را پاک کنید؟",
@ -302,8 +302,8 @@
"notifications": "اعلانات",
"open_link_in_explorer" : "بازکردن پیوند در مرورگر",
"password": "گذرواژه",
"password_explain": "گذرواژه‌ای را که برای رمزگشایی فضای ذخیره‌سازی استفاده خواهید کرد ایجاد کنید",
"passwords_do_not_match": "گذرواژه‌ها مطابقت ندارند",
"password_explain": "گذرواژه‌ای را که برای رمزگشایی فضای ذخیره‌سازی استفاده خواهید کرد ایجاد کنید.",
"passwords_do_not_match": "گذرواژه‌ها مطابقت ندارند.",
"plausible_deniability": "انکار موجه",
"privacy": "حریم خصوصی",
"privacy_read_clipboard": "خواندن کلیپ‌بورد",
@ -333,7 +333,7 @@
"confirmations_lowercase": "{confirmations} تأیید",
"cpfp_create": "ایجاد",
"cpfp_exp": "ما تراکنش دیگری را ایجاد خواهیم کرد که تراکنش تأییدنشدهٔ شما را خرج می‌کند. کارمزد کل بالاتر از کارمزد تراکنش اصلی خواهد بود، بنابراین سریع‌تر استخراج می‌شود. این کار Child Pays for Parent (به‌اختصار CPFP) نام دارد—فرزند به‌جای والدین می‌پردازد.",
"cpfp_no_bump": "این تراکنش قابلیت افزایش کارمزد را ندارد.",
"cpfp_no_bump": "این تراکنش قابلیت افزایش کارمزد ندارد.",
"cpfp_title": "افزایش کارمزد (CPFP)",
"details_balance_hide": "پنهان‌کردن موجودی",
"details_balance_show": "نمایش موجودی",
@ -419,8 +419,8 @@
"import_title": "واردکردن",
"list_create_a_button": "هم‌اکنون اضافه کن",
"list_create_a_wallet": "افزودن کیف پول",
"list_create_a_wallet_text": "مجانی است و می‌توانید هر تعداد\nکه دوست داشتید بسازید.",
"list_empty_txs1": "تراکنش‌های شما در اینجا نمایش داده خواهند شد",
"list_create_a_wallet_text": "مجانی است، و می‌توانید هر تعداد\nکه دوست داشتید بسازید.",
"list_empty_txs1": "تراکنش‌های شما در اینجا نمایش داده خواهند شد.",
"list_empty_txs1_lightning": "برای تراکنش‌های روزمره بهتر است از کیف پول لایتنینگ استفاده شود. کارمزدها به‌طرز غیرمنصفانه‌ای ارزان و سرعت فوق‌العاده بالاست.",
"list_empty_txs2": "با کیف پول خود شروع کنید",
"list_empty_txs2_lightning": "\nبرای شروع استفاده، روی «مدیریت دارایی» بزنید و موجودی خود را شارژ کنید.",
@ -439,7 +439,7 @@
"no_ln_wallet_error": "قبل از پرداخت یک صورت‌حساب لایتنینگ، ابتدا باید یک کیف پول لایتنینگ اضافه کنید.",
"looks_like_bip38": "این به کلید خصوصی محافظت‌شده با گذرواژه (BIP38) شباهت دارد.",
"reorder_title": "بازچینی کیف پول‌ها",
"please_continue_scanning": "لطفاً به اسکن‌کردن ادامه دهید",
"please_continue_scanning": "لطفاً به اسکن‌کردن ادامه دهید.",
"scan_error": "خطا در اسکن",
"select_no_bitcoin": "هیچ کیف پول بیت‌کوینی درحال‌حاضر دردسترس نیست.",
"select_no_bitcoin_exp": "یک کیف پول بیت‌کوین برای پرکردن کیف پول‌های لایتنینگ نیاز است. لطفاً یکی بسازید یا وارد کنید.",
@ -494,15 +494,15 @@
"view_key": "نمایش",
"invalid_mnemonics": "به‌نظر نمی‌رسد این عبارت یادیار (mnemonic phrase) معتبر باشد.",
"invalid_cosigner": "دادهٔ امضاکنندهٔ مشترک معتبر نیست",
"not_a_multisignature_xpub": "این XPUB از یک کیف پول چندامضایی نیست.",
"invalid_cosigner_format": "امضاکنندهٔ مشترک نادرست: این یک امضاکنندهٔ مشترک برای قالب {format} نیست",
"not_a_multisignature_xpub": "این XPUB از یک کیف پول چندامضایی نیست!",
"invalid_cosigner_format": "امضاکنندهٔ مشترک نادرست: این یک امضاکنندهٔ مشترک برای قالب {format} نیست.",
"create_new_key": "جدید بسازید",
"scan_or_open_file": "اسکن یا بازکردن فایل",
"i_have_mnemonics": "من سید این کلید را دارم",
"i_have_mnemonics": "من سید این کلید را دارم.",
"please_write_down_mnemonics": "لطفاً این عبارت یادیار (mnemonic phrase) را روی کاغذ بنویسید. نگران نباشید، می‌توانید بعداً آن را یادداشت کنید.",
"i_wrote_it_down": "خب، آن را نوشتم.",
"type_your_mnemonics": "سید را بنویسید تا کلید گاوصندوق فعلی خود را وارد کنید",
"this_is_cosigners_xpub": "این XPUB امضاکنندهٔ مشترک است—آماده برای واردشدن درون یک کیف پول دیگر. به‌اشتراک‌گذاری آن بی‌خطر است.",
"type_your_mnemonics": "سید را بنویسید تا کلید گاوصندوق فعلی خود را وارد کنید.",
"this_is_cosigners_xpub": "این XPUB امضاکنندهٔ مشترک است—آماده برای واردشدن درون یک کیف پول دیگر. به‌اشتراک‌گذاری آن مانعی ندارد.",
"wallet_key_created": "کلید گاوصندوق شما ایجاد شد. لحظه‌ای درنگ کرده تا با خیال راحت از سید خود نسخهٔ پشتیبان تهیه کنید.",
"are_you_sure_seed_will_be_lost": "مطمئن هستید؟ درصورتی‌که نسخهٔ پشتیبان نداشته باشید، سید شما ازبین خواهد رفت.",
"forget_this_seed": "این سید را فراموش و به‌جای آن از XPUB استفاده کن.",
@ -517,7 +517,7 @@
"ms_help": "راهنما",
"ms_help_title": "نحوهٔ کارکرد گاوصندوق‌های چندامضایی: نکات و ترفندها",
"ms_help_text": "یک کیف پول با چندین کلید، جهت امنیت بالاتر یا داشتن حساب مشترک",
"ms_help_title1": "استفاده از چند دستگاه توصیه می‌شود",
"ms_help_title1": "استفاده از چند دستگاه توصیه می‌شود.",
"ms_help_1": "گاوصندوق با سایر برنامه‌های BlueWallet و کیف پول‌های سازگار با PSBT مانند الکترام (Electrum)، اسپکتر (Specter)، کلدکارد (Coldcard)، کوبو والت (Cobo Vault)، و غیره کار می‌کند.",
"ms_help_title2": "ویرایش کلیدها",
"ms_help_2": "شما می‌توانید تمام کلیدهای گاوصندوق را در این دستگاه ایجاد کرده و بعداً آن‌ها را ویرایش یا حذف کنید. نگهداری تمام کلیدها روی یک دستگاه امنیت مشابه یک کیف پول بیت‌کوین معمولی را داراست.",
@ -525,7 +525,7 @@
"ms_help_3": "در تنظیمات کیف پول، نسخهٔ پشتیبان گاوصندوق و نیز watch-only خود را خواهید یافت. این نسخهٔ پشتیبان مانند نقشهٔ راهی برای رسیدن به کیف پول شماست. درصورت ازدست‌دادن یکی از سیدهایتان، داشتن نسخهٔ پشتیبان جهت بازیابی کیف پول ضروری است.",
"ms_help_title4": "واردکردن گاوصندوق‌ها",
"ms_help_4": "برای واردکردن کیف پول چندامضایی، از فایل نسخهٔ پشتیبان و قابلیت واردکردن استفاده کنید. اگر فقط کلیدهای امتدادیافته (XPUB) و سیدها را دارید، می‌توانید هرکدام را جداگانه در روند افزودن کلیدهای گاوصندوق وارد کنید.",
"ms_help_title5": "گزینه‌های پیشرفته",
"ms_help_title5": "حالت پیشرفته",
"ms_help_5": "به‌صورت پیش‌فرض، BlueWallet گاوصندوق ۲ از ۳ امضایی تولید می‌کند. برای ایجاد حد نصاب متفاوت یا تغییر نوع آدرس، گزینه‌های پیشرفته را در تنظیمات فعال کنید."
},
"is_it_my_address": {

12
package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "bluewallet",
"version": "6.0.4",
"version": "6.0.5",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -6419,9 +6419,9 @@
}
},
"@react-navigation/drawer": {
"version": "5.11.2",
"resolved": "https://registry.npmjs.org/@react-navigation/drawer/-/drawer-5.11.2.tgz",
"integrity": "sha512-xCD/Q9Yne5CYsvKr+eMMNx4riQJMy5ghi5dEnvntsdJFx2Lq+UETyvFeTH7iXVXo2JOOxNddMvZJrds0B7+nCg==",
"version": "5.11.5",
"resolved": "https://registry.npmjs.org/@react-navigation/drawer/-/drawer-5.11.5.tgz",
"integrity": "sha512-amDnbVIjkp/ZxNcZ2LyICNiRddUYgFFkgKsHgTYDgZHoL7EqH+qmMPtjHvwIFhU0CHn6y6mI0cRQNLHxqsEjQQ==",
"requires": {
"color": "^3.1.3",
"react-native-iphone-x-helper": "^1.3.0"
@ -20180,10 +20180,6 @@
"object-assign": "^4.1.1"
}
},
"scryptsy": {
"version": "file:https:/registry.npmjs.org/scryptsy/-/scryptsy-2.1.0.tgz",
"integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w=="
},
"secp256k1": {
"version": "3.8.0",
"resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz",

View File

@ -1,6 +1,6 @@
{
"name": "bluewallet",
"version": "6.0.4",
"version": "6.0.5",
"license": "MIT",
"devDependencies": {
"@babel/core": "^7.10.4",
@ -73,7 +73,7 @@
"@react-native-community/masked-view": "0.1.10",
"@react-native-community/push-notification-ios": "1.8.0",
"@react-native-community/slider": "3.0.3",
"@react-navigation/drawer": "5.11.2",
"@react-navigation/drawer": "5.11.5",
"@react-navigation/native": "5.8.9",
"@react-navigation/stack": "5.13.0",
"@remobile/react-native-qrcode-local-image": "git+https://github.com/BlueWallet/react-native-qrcode-local-image.git",

View File

@ -1,4 +1,4 @@
import React, { useContext, useEffect, useState } from 'react';
import React, { useContext, useEffect, useRef, useState } from 'react';
import { View, ActivityIndicator, Text, TouchableOpacity, StyleSheet, StatusBar } from 'react-native';
import { Icon } from 'react-native-elements';
import { useNavigation, useRoute, useTheme } from '@react-navigation/native';
@ -28,16 +28,16 @@ const buttonStatus = Object.freeze({
notPossible: 3,
});
const TransactionStatus = () => {
const TransactionsStatus = () => {
const { setSelectedWallet, wallets, txMetadata, getTransactions } = useContext(BlueStorageContext);
const { hash, walletID } = useRoute().params;
const { hash } = useRoute().params;
const { navigate, setOptions } = useNavigation();
const { colors } = useTheme();
const wallet = wallets.find(w => w.getID() === walletID);
const wallet = useRef();
const [isCPFPPossible, setIsCPFPPossible] = useState();
const [isRBFBumpFeePossible, setIsRBFBumpFeePossible] = useState();
const [isRBFCancelPossible, setIsRBFCancelPossible] = useState();
const tx = getTransactions(null, Infinity, true).find(transactionHash => transactionHash.hash === hash);
const [tx, setTX] = useState();
const [isLoading, setIsLoading] = useState(true);
const stylesHook = StyleSheet.create({
root: {
@ -76,6 +76,27 @@ const TransactionStatus = () => {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [colors]);
useEffect(() => {
for (const w of wallets) {
for (const t of w.getTransactions()) {
if (t.hash === hash) {
console.log('tx', hash, 'belongs to', w.getLabel());
wallet.current = w;
break;
}
}
}
for (const tx of getTransactions(null, Infinity, true)) {
if (tx.hash === hash) {
setTX(tx);
break;
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [hash]);
const initialState = async () => {
try {
await checkPossibilityOfCPFP();
@ -97,7 +118,7 @@ const TransactionStatus = () => {
useEffect(() => {
if (wallet) {
setSelectedWallet(wallet.getID());
setSelectedWallet(wallet.current.getID());
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [wallet]);
@ -107,11 +128,11 @@ const TransactionStatus = () => {
}, []);
const checkPossibilityOfCPFP = async () => {
if (!wallet.allowRBF()) {
if (!wallet.current.allowRBF()) {
return setIsCPFPPossible(buttonStatus.notPossible);
}
const cpfbTx = new HDSegwitBech32Transaction(null, tx.hash, wallet);
const cpfbTx = new HDSegwitBech32Transaction(null, tx.hash, wallet.current);
if ((await cpfbTx.isToUsTransaction()) && (await cpfbTx.getRemoteConfirmationsNum()) === 0) {
return setIsCPFPPossible(buttonStatus.possible);
} else {
@ -120,11 +141,11 @@ const TransactionStatus = () => {
};
const checkPossibilityOfRBFBumpFee = async () => {
if (!wallet.allowRBF()) {
if (!wallet.current.allowRBF()) {
return setIsRBFBumpFeePossible(buttonStatus.notPossible);
}
const rbfTx = new HDSegwitBech32Transaction(null, tx.hash, wallet);
const rbfTx = new HDSegwitBech32Transaction(null, tx.hash, wallet.current);
if (
(await rbfTx.isOurTransaction()) &&
(await rbfTx.getRemoteConfirmationsNum()) === 0 &&
@ -138,11 +159,11 @@ const TransactionStatus = () => {
};
const checkPossibilityOfRBFCancel = async () => {
if (!wallet.allowRBF()) {
if (!wallet.current.allowRBF()) {
return setIsRBFCancelPossible(buttonStatus.notPossible);
}
const rbfTx = new HDSegwitBech32Transaction(null, tx.hash, wallet);
const rbfTx = new HDSegwitBech32Transaction(null, tx.hash, wallet.current);
if (
(await rbfTx.isOurTransaction()) &&
(await rbfTx.getRemoteConfirmationsNum()) === 0 &&
@ -158,21 +179,21 @@ const TransactionStatus = () => {
const navigateToRBFBumpFee = () => {
navigate('RBFBumpFee', {
txid: tx.hash,
wallet: wallet,
wallet: wallet.current,
});
};
const navigateToRBFCancel = () => {
navigate('RBFCancel', {
txid: tx.hash,
wallet: wallet,
wallet: wallet.current,
});
};
const navigateToCPFP = () => {
navigate('CPFP', {
txid: tx.hash,
wallet: wallet,
wallet: wallet.current,
});
};
const navigateToTransactionDetials = () => {
@ -269,9 +290,9 @@ const TransactionStatus = () => {
<BlueCard>
<View style={styles.center}>
<Text style={[styles.value, stylesHook.value]}>
{formatBalanceWithoutSuffix(tx.value, wallet.preferredBalanceUnit, true)}{' '}
{wallet.preferredBalanceUnit !== BitcoinUnit.LOCAL_CURRENCY && (
<Text style={[styles.valueUnit, stylesHook.valueUnit]}>{loc.units[wallet.preferredBalanceUnit]}</Text>
{formatBalanceWithoutSuffix(tx.value, wallet.current.preferredBalanceUnit, true)}{' '}
{wallet.current.preferredBalanceUnit !== BitcoinUnit.LOCAL_CURRENCY && (
<Text style={[styles.valueUnit, stylesHook.valueUnit]}>{loc.units[wallet.current.preferredBalanceUnit]}</Text>
)}
</Text>
</View>
@ -310,8 +331,8 @@ const TransactionStatus = () => {
{tx.fee && (
<View style={styles.fee}>
<BlueText style={styles.feeText}>
{loc.send.create_fee.toLowerCase()} {formatBalanceWithoutSuffix(tx.fee, wallet.preferredBalanceUnit, true)}{' '}
{wallet.preferredBalanceUnit !== BitcoinUnit.LOCAL_CURRENCY && wallet.preferredBalanceUnit}
{loc.send.create_fee.toLowerCase()} {formatBalanceWithoutSuffix(tx.fee, wallet.current.preferredBalanceUnit, true)}{' '}
{wallet.current.preferredBalanceUnit !== BitcoinUnit.LOCAL_CURRENCY && wallet.current.preferredBalanceUnit}
</BlueText>
</View>
)}
@ -339,7 +360,7 @@ const TransactionStatus = () => {
);
};
export default TransactionStatus;
export default TransactionsStatus;
const styles = StyleSheet.create({
root: {
flex: 1,
@ -439,6 +460,6 @@ const styles = StyleSheet.create({
},
});
TransactionStatus.navigationOptions = navigationStyle({
TransactionsStatus.navigationOptions = navigationStyle({
title: '',
});

View File

@ -225,7 +225,7 @@ const WalletsList = () => {
const renderTransactionListsRow = data => {
return (
<View style={styles.transaction}>
<BlueTransactionListItem item={data.item} itemPriceUnit={data.item.walletPreferredBalanceUnit} walletID={data.item.walletID} />
<BlueTransactionListItem item={data.item} itemPriceUnit={data.item.walletPreferredBalanceUnit} />
</View>
);
};

View File

@ -437,9 +437,7 @@ const WalletTransactions = () => {
});
};
const renderItem = item => (
<BlueTransactionListItem item={item.item} itemPriceUnit={itemPriceUnit} timeElapsed={timeElapsed} walletID={walletID} />
);
const renderItem = item => <BlueTransactionListItem item={item.item} itemPriceUnit={itemPriceUnit} timeElapsed={timeElapsed} />;
const onBarCodeRead = ret => {
if (!isLoading) {