diff --git a/android/app/build.gradle b/android/app/build.gradle
index 07793783..d39022ef 100755
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -4,7 +4,7 @@ import com.android.build.OutputFile
def versionMajor = 1
def versionMinor = 0
-def versionRevision = 8
+def versionRevision = 9
def versionBuild = 0
def keystorePropertiesFile = rootProject.file("keystore.properties");
diff --git a/env/main.android.json b/env/main.android.json
index 9a53213b..b02c238e 100644
--- a/env/main.android.json
+++ b/env/main.android.json
@@ -1,5 +1,5 @@
{
- "APP_VERSION": "1.0.8",
+ "APP_VERSION": "1.0.9",
"ELECTRUM_PROTOCOL_CHANGE": 1.4,
"KEY_DERIVATION_VERSION": 1,
diff --git a/env/main.ios.json b/env/main.ios.json
index a716e568..0a4d906c 100644
--- a/env/main.ios.json
+++ b/env/main.ios.json
@@ -1,5 +1,5 @@
{
- "APP_VERSION": "1.0.8",
+ "APP_VERSION": "1.0.9",
"ELECTRUM_PROTOCOL_CHANGE": 1.4,
"KEY_DERIVATION_VERSION": 1,
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 5b95dec6..083973e4 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -356,8 +356,8 @@ PODS:
- React
- RNGestureHandler (2.9.0):
- React-Core
- - RNKeychain (6.2.0):
- - React
+ - RNKeychain (8.1.3):
+ - React-Core
- RNOS (1.2.7):
- React
- RNPermissions (3.1.0):
@@ -838,7 +838,7 @@ SPEC CHECKSUMS:
RNDateTimePicker: e073697ac3e8a378968d68ab0581fef542b8af8a
RNFS: 3ab21fa6c56d65566d1fb26c2228e2b6132e5e32
RNGestureHandler: 071d7a9ad81e8b83fe7663b303d132406a7d8f39
- RNKeychain: b8e0711b959a19c5b057d1e970d3c83d159b6da5
+ RNKeychain: f1b48665a4646f61191eb048c4c05c58d9a7596f
RNOS: 728cdea6d232de48cfede274443dbe3f669b86e9
RNPermissions: 4b54095940aea8c03fa3e6c92d4ac3647b31ed4e
RNReactNativeHapticFeedback: 653a8c126a0f5e88ce15ffe280b3ff37e1fbb285
diff --git a/ios/assets/env/main.json b/ios/assets/env/main.json
index a716e568..0a4d906c 100644
--- a/ios/assets/env/main.json
+++ b/ios/assets/env/main.json
@@ -1,5 +1,5 @@
{
- "APP_VERSION": "1.0.8",
+ "APP_VERSION": "1.0.9",
"ELECTRUM_PROTOCOL_CHANGE": 1.4,
"KEY_DERIVATION_VERSION": 1,
diff --git a/ios/verusMobile.xcodeproj/project.pbxproj b/ios/verusMobile.xcodeproj/project.pbxproj
index b28b776b..b39c83ed 100644
--- a/ios/verusMobile.xcodeproj/project.pbxproj
+++ b/ios/verusMobile.xcodeproj/project.pbxproj
@@ -721,7 +721,7 @@
"\"${PODS_CONFIGURATION_BUILD_DIR}/react-native-webview\"",
"\"${PODS_CONFIGURATION_BUILD_DIR}/rn-fetch-blob\"",
);
- MARKETING_VERSION = 1.0.8;
+ MARKETING_VERSION = 1.0.9;
PRODUCT_BUNDLE_IDENTIFIER = org.reactjs.native.verusmobile;
PRODUCT_NAME = verusmobile;
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -792,7 +792,7 @@
"\"${PODS_CONFIGURATION_BUILD_DIR}/react-native-webview\"",
"\"${PODS_CONFIGURATION_BUILD_DIR}/rn-fetch-blob\"",
);
- MARKETING_VERSION = 1.0.8;
+ MARKETING_VERSION = 1.0.9;
PRODUCT_BUNDLE_IDENTIFIER = org.reactjs.native.verusmobile;
PRODUCT_NAME = verusmobile;
PROVISIONING_PROFILE_SPECIFIER = "";
diff --git a/package.json b/package.json
index c632256d..6acd410a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "verusmobile",
- "version": "1.0.8",
+ "version": "1.0.9",
"private": true,
"scripts": {
"postinstall": "./node_modules/.bin/rn-nodeify --hack --install --yarn && npx jetify",
@@ -77,7 +77,7 @@
"react-native-haptic-feedback": "1.11.0",
"react-native-image-picker": "5.7.0",
"react-native-keyboard-aware-scroll-view": "0.9.5",
- "react-native-keychain": "6.2.0",
+ "react-native-keychain": "8.1.3",
"react-native-level-fs": "3.0.0",
"react-native-loading-spinner-overlay": "1.0.1",
"react-native-modal-datetime-picker": "15.0.0",
diff --git a/src/actions/actions/UserData.js b/src/actions/actions/UserData.js
index 37ba4816..18e4831f 100644
--- a/src/actions/actions/UserData.js
+++ b/src/actions/actions/UserData.js
@@ -50,7 +50,7 @@ import {clearEncryptedServiceStoredDataForUser} from './services/dispatchers/ser
import {clearActiveAccountLifecycles} from './account/dispatchers/account';
import {WYRE_SERVICE_ID} from '../../utils/constants/services';
-export const addUser = (
+export const addUser = async (
userName,
seeds,
password,
@@ -60,24 +60,20 @@ export const addUser = (
disabledServices = SERVICES_DISABLED_DEFAULT,
testnetOverrides = {},
) => {
- return new Promise((resolve, reject) => {
- storeUser(
- {
- seeds,
- password,
- userName,
- biometry,
- keyDerivationVersion,
- disabledServices,
- testnetOverrides,
- },
- users,
- )
- .then(res => {
- resolve(setAccounts(res));
- })
- .catch(err => reject(err));
- });
+ const res = await storeUser(
+ {
+ seeds,
+ password,
+ userName,
+ biometry,
+ keyDerivationVersion,
+ disabledServices,
+ testnetOverrides,
+ },
+ users,
+ )
+
+ return setAccounts(res);
};
export const resetPwd = (userID, newPwd, oldPwd) => {
diff --git a/src/containers/AddCoin/AddCoin.js b/src/containers/AddCoin/AddCoin.js
index 7cbcd343..5c9d8673 100644
--- a/src/containers/AddCoin/AddCoin.js
+++ b/src/containers/AddCoin/AddCoin.js
@@ -55,6 +55,19 @@ const AddCoin = props => {
: CoinDirectory.supportedCoinList;
const activeCoinIds = activeCoinsForUser.map(coinObj => coinObj.id);
+ // Define the order of priority for currency IDs
+ const priorityOrder = [
+ 'VRSC', '0xBc2738BA63882891094C99E59a02141Ca1A1C36a',
+ 'VRSCTEST',
+ 'BTC', '0x18084fbA666a33d37592fA2633fD49a74DD93a88', 'iS8TfRPfVpKo5FVfSUzfHBQxo9KuzpnqLU',
+ 'DAI', 'iGBs4DWztRNvNEJBt4mqHszLxfKTNHTkhM',
+ 'MKR', 'iCkKJuJScy4Z6NSDK7Mt42ZAB2NEnAE1o4',
+ 'ETH', 'i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X',
+ 'i3f7tSctFkiPpiedY8QR5Tep9p4qDVebDx', '0xE6052Dcc60573561ECef2D9A4C0FEA6d3aC5B9A2',
+ 'USDC', 'i61cV2uicKSi1rSMQCBNQeSYC3UAi9GVzd',
+ '0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c', 'iC5TQFrFXSYLQGkiZ8FYmZHFJzaRF5CYgE',
+ ];
+
return displayedCoinList
.map(x => {
return {
@@ -63,7 +76,7 @@ const AddCoin = props => {
};
})
.filter(item => {
- const {coinObj} = item;
+ const { coinObj } = item;
const queryLc = query.toLowerCase();
const coinIdLc = coinObj.id.toLowerCase();
const coinNameLc = coinObj.display_name.toLowerCase();
@@ -77,40 +90,30 @@ const AddCoin = props => {
);
})
.sort((a, b) => {
- const {coinObj: currencyA} = a;
- const {coinObj: currencyB} = b;
-
- if (
- currencyB.id === 'VRSC' ||
- currencyB.id === 'BTC' ||
- currencyB.id === 'VRSCTEST' ||
- currencyB.id === "iGBs4DWztRNvNEJBt4mqHszLxfKTNHTkhM" ||
- currencyB.id === "iCkKJuJScy4Z6NSDK7Mt42ZAB2NEnAE1o4" ||
- currencyB.id === "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X" ||
- currencyB.id === "i3f7tSctFkiPpiedY8QR5Tep9p4qDVebDx" ||
- currencyB.id === '0xBc2738BA63882891094C99E59a02141Ca1A1C36a' ||
- currencyB.id === '0xE6052Dcc60573561ECef2D9A4C0FEA6d3aC5B9A2' ||
- currencyB.id === 'MKR' ||
- currencyB.id === 'DAI'
- ) {
- return 1;
- } else if (
- currencyA.id === 'VRSC' ||
- currencyA.id === 'BTC' ||
- currencyA.id === 'VRSCTEST' ||
- currencyA.id === "iGBs4DWztRNvNEJBt4mqHszLxfKTNHTkhM" ||
- currencyA.id === "iCkKJuJScy4Z6NSDK7Mt42ZAB2NEnAE1o4" ||
- currencyA.id === "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X" ||
- currencyA.id === "i3f7tSctFkiPpiedY8QR5Tep9p4qDVebDx" ||
- currencyA.id === '0xBc2738BA63882891094C99E59a02141Ca1A1C36a' ||
- currencyA.id === '0xE6052Dcc60573561ECef2D9A4C0FEA6d3aC5B9A2' ||
- currencyA.id === 'MKR' ||
- currencyA.id === 'DAI'
- ) {
+ const { coinObj: currencyA } = a;
+ const { coinObj: currencyB } = b;
+
+ // Determine the rank based on the position in the priorityOrder array
+ const rankA = priorityOrder.indexOf(currencyA.id);
+ const rankB = priorityOrder.indexOf(currencyB.id);
+
+ // If both currencies are in the priority list, sort by their order in the list
+ if (rankA !== -1 && rankB !== -1) {
+ return rankA - rankB;
+ }
+
+ // If only currencyA is in the priority list, it should come first
+ if (rankA !== -1) {
return -1;
- } else {
- return currencyA.display_ticker <= currencyB.display_ticker ? -1 : 1;
}
+
+ // If only currencyB is in the priority list, it should come first
+ if (rankB !== -1) {
+ return 1;
+ }
+
+ // If neither currency is in the priority list, sort by display_ticker
+ return currencyA.display_ticker.localeCompare(currencyB.display_ticker);
});
};
diff --git a/src/containers/Coin/ReceiveCoin/ReceiveCoin.js b/src/containers/Coin/ReceiveCoin/ReceiveCoin.js
index 6559839c..7dbe94c6 100644
--- a/src/containers/Coin/ReceiveCoin/ReceiveCoin.js
+++ b/src/containers/Coin/ReceiveCoin/ReceiveCoin.js
@@ -28,6 +28,7 @@ import { primitives } from "verusid-ts-client"
import { I_ADDRESS_VERSION, R_ADDRESS_VERSION } from "../../../utils/constants/constants"
import { coinsList } from "../../../utils/CoinData/CoinsList"
import { fromBase58Check } from "verus-typescript-primitives"
+import selectNetworkName from "../../../selectors/networkName"
class ReceiveCoin extends Component {
constructor(props) {
@@ -317,6 +318,13 @@ class ReceiveCoin extends Component {
}
}
+ networksInfoAlert = () => {
+ createAlert(
+ "Supported Blockchain Networks",
+ "VerusPay invoices can support payment on more than one blockchain network. The QR invoice generated with this form will support payments on any networks listed here."
+ )
+ }
+
validateFormData = (addressIndex) => {
this.setState({
errors: {selectedCoin: null, amount: null, addresses: null, memo: null },
@@ -408,6 +416,7 @@ const mapStateToProps = (state) => {
displayCurrency: state.settings.generalWalletSettings.displayCurrency || USD,
addresses: selectAddresses(state),
subWallet: state.coinMenus.activeSubWallets[chainTicker],
+ networkName: selectNetworkName(state),
generalWalletSettings: state.settings.generalWalletSettings
}
};
diff --git a/src/containers/Coin/ReceiveCoin/ReceiveCoin.render.js b/src/containers/Coin/ReceiveCoin/ReceiveCoin.render.js
index e096fdb5..141a3902 100644
--- a/src/containers/Coin/ReceiveCoin/ReceiveCoin.render.js
+++ b/src/containers/Coin/ReceiveCoin/ReceiveCoin.render.js
@@ -14,6 +14,7 @@ import TextInputModal from "../../../components/TextInputModal/TextInputModal"
import NumberPadModal from "../../../components/NumberPadModal/NumberPadModal"
import ListSelectionModal from "../../../components/ListSelectionModal/ListSelectionModal";
import AnimatedActivityIndicatorBox from "../../../components/AnimatedActivityIndicatorBox";
+import { coinsList } from "../../../utils/CoinData/CoinsList";
export const RenderReceiveCoin = function() {
const _price = this.getPrice();
@@ -110,6 +111,33 @@ export const RenderReceiveCoin = function() {
/>
)}
+ {this.props.networkName != null &&
+ (
+
+ this.networksInfoAlert()}
+ style={{ ...Styles.flex }}>
+
+
+
+ )
+ }
{addresses.map((address) => {
const addressInfo =
this.props.subWallet.address_info[this.state.infoIndexes[address]];
diff --git a/src/containers/Onboard/CreateProfile/Forms/CreatePassword.js b/src/containers/Onboard/CreateProfile/Forms/CreatePassword.js
index ddec8d29..aeff9577 100644
--- a/src/containers/Onboard/CreateProfile/Forms/CreatePassword.js
+++ b/src/containers/Onboard/CreateProfile/Forms/CreatePassword.js
@@ -1,4 +1,4 @@
-import React, {useState} from 'react';
+import React, {useEffect, useState} from 'react';
import {
View,
Dimensions,
@@ -11,23 +11,68 @@ import {createAlert} from '../../../../actions/actions/alert/dispatchers/alert';
import TallButton from '../../../../components/LargerButton';
import Colors from '../../../../globals/colors';
import { getSupportedBiometryType } from '../../../../utils/keychain/keychain';
+import scorePassword from '../../../../utils/auth/scorePassword';
+import { MIN_PASS_LENGTH, MIN_PASS_SCORE, PASS_SCORE_LIMIT } from '../../../../utils/constants/constants';
export default function CreatePassword({password, setPassword, navigation}) {
const {height} = Dimensions.get('window');
const [firstBox, setFirstBox] = useState('');
const [secondBox, setSecondBox] = useState('');
+ const [passwordStrength, setPasswordStrength] = useState(null);
+ const [passwordAffixDetails, setPasswordAffixDetails] = useState({
+ text: "strength",
+ color: Colors.tertiaryColor
+ });
const isKeyboardActive = useSelector(state => state.keyboard.active);
+ useEffect(() => {
+ calculatePasswordAffix()
+ }, [firstBox])
+
+ const calculatePasswordAffix = () => {
+ if (!firstBox) {
+ setPasswordAffixDetails({
+ text: "strength",
+ color: Colors.tertiaryColor
+ })
+ } else {
+ const passScore = scorePassword(firstBox, MIN_PASS_LENGTH, PASS_SCORE_LIMIT);
+ setPasswordStrength(passScore);
+
+ if (passScore < MIN_PASS_SCORE) {
+ setPasswordAffixDetails({
+ text: "weak",
+ color: Colors.warningButtonColor
+ })
+ } else if (passScore < PASS_SCORE_LIMIT - ((PASS_SCORE_LIMIT - MIN_PASS_SCORE) / 2)) {
+ setPasswordAffixDetails({
+ text: "mediocre",
+ color: Colors.infoButtonColor
+ })
+ } else if (passScore < PASS_SCORE_LIMIT) {
+ setPasswordAffixDetails({
+ text: "good",
+ color: Colors.primaryColor
+ })
+ } else {
+ setPasswordAffixDetails({
+ text: "excellent",
+ color: Colors.verusGreenColor
+ })
+ }
+ }
+ }
+
const validate = () => {
const res = {valid: false, message: ''};
if (!firstBox || firstBox.length < 1) {
res.message = 'Please enter a password.';
return res;
- } else if (firstBox.length < 5) {
- res.message = 'Please enter a password longer than 5 characters.';
+ } else if (passwordStrength < MIN_PASS_SCORE) {
+ res.message = 'Please enter a stronger password.';
return res;
} else if (firstBox !== secondBox) {
res.message = 'Password and confirm password do not match.';
@@ -107,6 +152,7 @@ export default function CreatePassword({password, setPassword, navigation}) {
autoCapitalize={'none'}
autoCorrect={false}
secureTextEntry={true}
+ right={}
/>
+
+
+
+
+
+
+
diff --git a/src/images/cryptologo/default/pbaas/bridge-veth/bridge-veth_light.svg b/src/images/cryptologo/default/pbaas/bridge-veth/bridge-veth_light.svg
new file mode 100644
index 00000000..2c0e59ee
--- /dev/null
+++ b/src/images/cryptologo/default/pbaas/bridge-veth/bridge-veth_light.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/images/cryptologo/default/pbaas/index.js b/src/images/cryptologo/default/pbaas/index.js
index 1f3a334b..1281cefa 100644
--- a/src/images/cryptologo/default/pbaas/index.js
+++ b/src/images/cryptologo/default/pbaas/index.js
@@ -1,6 +1,15 @@
import React from 'react'
import { View } from "react-native"
+import PURE_DARK from './pure/pure_dark.svg'
+import PURE_LIGHT from './pure/pure_light.svg'
+import BRIDGE_VETH_DARK from './bridge-veth/bridge-veth_dark.svg'
+import BRIDGE_VETH_LIGHT from './bridge-veth/bridge-veth_light.svg'
+import SWITCH_DARK from './switch/switch_dark.svg'
+import SWITCH_LIGHT from './switch/switch_light.svg'
+import VARRR_LIGHT from './varrr/varrr_light.svg'
+import VARRR_DARK from './varrr/varrr_dark.svg'
+
const RenderPbaasCurrencyLogo = (iAddr) => {
function hashCode(str) {
var hash = 0;
@@ -65,5 +74,9 @@ const RenderPbaasCurrencyLogo = (iAddr) => {
}
export default {
- RenderPbaasCurrencyLogo
+ RenderPbaasCurrencyLogo,
+ PURE: { light: PURE_LIGHT, dark: PURE_DARK },
+ BRIDGE_VETH: { light: BRIDGE_VETH_LIGHT, dark: BRIDGE_VETH_DARK },
+ SWITCH: { light: SWITCH_LIGHT, dark: SWITCH_DARK },
+ VARRR: { light: VARRR_LIGHT, dark: VARRR_DARK }
}
\ No newline at end of file
diff --git a/src/images/cryptologo/default/pbaas/pure/pure_dark.svg b/src/images/cryptologo/default/pbaas/pure/pure_dark.svg
new file mode 100644
index 00000000..3b256f84
--- /dev/null
+++ b/src/images/cryptologo/default/pbaas/pure/pure_dark.svg
@@ -0,0 +1,721 @@
+
diff --git a/src/images/cryptologo/default/pbaas/pure/pure_light.svg b/src/images/cryptologo/default/pbaas/pure/pure_light.svg
new file mode 100644
index 00000000..3b256f84
--- /dev/null
+++ b/src/images/cryptologo/default/pbaas/pure/pure_light.svg
@@ -0,0 +1,721 @@
+
diff --git a/src/images/cryptologo/default/pbaas/switch/switch_dark.svg b/src/images/cryptologo/default/pbaas/switch/switch_dark.svg
new file mode 100644
index 00000000..39952529
--- /dev/null
+++ b/src/images/cryptologo/default/pbaas/switch/switch_dark.svg
@@ -0,0 +1,19 @@
+
+
+
diff --git a/src/images/cryptologo/default/pbaas/switch/switch_light.svg b/src/images/cryptologo/default/pbaas/switch/switch_light.svg
new file mode 100644
index 00000000..39952529
--- /dev/null
+++ b/src/images/cryptologo/default/pbaas/switch/switch_light.svg
@@ -0,0 +1,19 @@
+
+
+
diff --git a/src/images/cryptologo/default/pbaas/varrr/varrr_dark.svg b/src/images/cryptologo/default/pbaas/varrr/varrr_dark.svg
new file mode 100644
index 00000000..9b01b6e9
--- /dev/null
+++ b/src/images/cryptologo/default/pbaas/varrr/varrr_dark.svg
@@ -0,0 +1,14 @@
+
+
+
diff --git a/src/images/cryptologo/default/pbaas/varrr/varrr_light.svg b/src/images/cryptologo/default/pbaas/varrr/varrr_light.svg
new file mode 100644
index 00000000..9b01b6e9
--- /dev/null
+++ b/src/images/cryptologo/default/pbaas/varrr/varrr_light.svg
@@ -0,0 +1,14 @@
+
+
+
diff --git a/src/images/cryptologo/default/web3/eurc/eurc_dark.svg b/src/images/cryptologo/default/web3/eurc/eurc_dark.svg
new file mode 100644
index 00000000..a9bf20c1
--- /dev/null
+++ b/src/images/cryptologo/default/web3/eurc/eurc_dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/images/cryptologo/default/web3/eurc/eurc_light.svg b/src/images/cryptologo/default/web3/eurc/eurc_light.svg
new file mode 100644
index 00000000..e40e10eb
--- /dev/null
+++ b/src/images/cryptologo/default/web3/eurc/eurc_light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/images/cryptologo/default/web3/index.js b/src/images/cryptologo/default/web3/index.js
index 08c65597..57b2f353 100644
--- a/src/images/cryptologo/default/web3/index.js
+++ b/src/images/cryptologo/default/web3/index.js
@@ -38,6 +38,10 @@ import CRV_DARK from './crv/crv_dark.svg'
import MKR_DARK from './mkr/mkr_dark.svg'
import SUSHI_DARK from './sushi/sushi_dark.svg'
import WBTC_DARK from './wbtc/wbtc_dark.svg'
+import TBTC_LIGHT from './tbtc/tbtc_light.svg'
+import TBTC_DARK from './tbtc/tbtc_dark.svg'
+import EURC_LIGHT from './eurc/eurc_light.svg'
+import EURC_DARK from './eurc/eurc_dark.svg'
export default {
ETH: { light: ETH_LIGHT, dark: ETH_DARK },
@@ -60,4 +64,6 @@ export default {
MKR: { light: MKR_LIGHT, dark: MKR_DARK },
SUSHI: { light: SUSHI_LIGHT, dark: SUSHI_DARK },
WBTC: { light: WBTC_LIGHT, dark: WBTC_DARK },
+ TBTC: { light: TBTC_LIGHT, dark: TBTC_DARK },
+ EURC: { light: EURC_LIGHT, dark: EURC_DARK },
}
\ No newline at end of file
diff --git a/src/images/cryptologo/default/web3/tbtc/tbtc_dark.svg b/src/images/cryptologo/default/web3/tbtc/tbtc_dark.svg
new file mode 100644
index 00000000..6a461a00
--- /dev/null
+++ b/src/images/cryptologo/default/web3/tbtc/tbtc_dark.svg
@@ -0,0 +1,5 @@
+
diff --git a/src/images/cryptologo/default/web3/tbtc/tbtc_light.svg b/src/images/cryptologo/default/web3/tbtc/tbtc_light.svg
new file mode 100644
index 00000000..11f8ee97
--- /dev/null
+++ b/src/images/cryptologo/default/web3/tbtc/tbtc_light.svg
@@ -0,0 +1,5 @@
+
diff --git a/src/images/cryptologo/default/web3/usdc/usdc_dark.svg b/src/images/cryptologo/default/web3/usdc/usdc_dark.svg
index bcec7821..96ca838e 100644
--- a/src/images/cryptologo/default/web3/usdc/usdc_dark.svg
+++ b/src/images/cryptologo/default/web3/usdc/usdc_dark.svg
@@ -1,20 +1 @@
-
-
-
+
\ No newline at end of file
diff --git a/src/images/cryptologo/default/web3/usdc/usdc_light.svg b/src/images/cryptologo/default/web3/usdc/usdc_light.svg
index bcec7821..00aa190b 100644
--- a/src/images/cryptologo/default/web3/usdc/usdc_light.svg
+++ b/src/images/cryptologo/default/web3/usdc/usdc_light.svg
@@ -1,20 +1 @@
-
-
-
+
\ No newline at end of file
diff --git a/src/selectors/networkName.js b/src/selectors/networkName.js
new file mode 100644
index 00000000..9bdb8383
--- /dev/null
+++ b/src/selectors/networkName.js
@@ -0,0 +1,19 @@
+import { createSelector } from 'reselect';
+import { CoinDirectory } from '../utils/CoinData/CoinDirectory';
+
+const selectSubWallet = (state) => state.coinMenus.activeSubWallets[state.coins.activeCoin.id];
+
+export const selectNetworkName = createSelector(
+ [selectSubWallet],
+ (subwallet) => {
+ try {
+ return subwallet.network
+ ? CoinDirectory.getBasicCoinObj(subwallet.network).display_ticker
+ : null;
+ } catch (e) {
+ return null;
+ }
+ }
+);
+
+export default selectNetworkName;
diff --git a/src/utils/CoinData/CoinData.js b/src/utils/CoinData/CoinData.js
index f366badf..29e77568 100644
--- a/src/utils/CoinData/CoinData.js
+++ b/src/utils/CoinData/CoinData.js
@@ -144,6 +144,18 @@ export const CoinLogos = {
LTC: CoinLogoIcons.btc.LTC,
CCL: CoinLogoIcons.btc.CCL,
+ // pbaas protocol
+ ["iHax5qYQGbcMGqJKKrPorpzUBX2oFFXGnY"]: CoinLogoIcons.pbaas.PURE,
+ ["i3f7tSctFkiPpiedY8QR5Tep9p4qDVebDx"]: CoinLogoIcons.pbaas.BRIDGE_VETH,
+ ["i4Xr5TAMrDTD99H69EemhjDxJ4ktNskUtc"]: CoinLogoIcons.pbaas.SWITCH,
+ ["iGBs4DWztRNvNEJBt4mqHszLxfKTNHTkhM"]: CoinLogoIcons.web3.DAI, // DAI on Verus
+ ["iCkKJuJScy4Z6NSDK7Mt42ZAB2NEnAE1o4"]: CoinLogoIcons.web3.MKR, // MKR on Verus
+ ["i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"]: CoinLogoIcons.web3.ETH, // ETH on Verus
+ ["iS8TfRPfVpKo5FVfSUzfHBQxo9KuzpnqLU"]: CoinLogoIcons.web3.TBTC, // TBTC on Verus
+ ["i61cV2uicKSi1rSMQCBNQeSYC3UAi9GVzd"]: CoinLogoIcons.web3.USDC, // USDC on Verus
+ ["iC5TQFrFXSYLQGkiZ8FYmZHFJzaRF5CYgE"]: CoinLogoIcons.web3.EURC, // EURC on Verus
+ ["iExBJfZYK7KREDpuhj6PzZBzqMAKaFg7d2"]: CoinLogoIcons.pbaas.VARRR,
+
// web3 protocol
BAT: CoinLogoIcons.web3.BAT,
TST: CoinLogoIcons.web3.ETH,
@@ -171,6 +183,9 @@ export const CoinLogos = {
MKR: CoinLogoIcons.web3.MKR,
WBTC: CoinLogoIcons.web3.WBTC,
["0xBc2738BA63882891094C99E59a02141Ca1A1C36a"]: CoinLogoIcons.btc.VRSC, // VRSC on Ethereum
+ ["0x18084fbA666a33d37592fA2633fD49a74DD93a88"]: CoinLogoIcons.web3.TBTC, // TBTC
+ ["0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c"]: CoinLogoIcons.web3.EURC, // EURC
+ ["0xE6052Dcc60573561ECef2D9A4C0FEA6d3aC5B9A2"]: CoinLogoIcons.pbaas.BRIDGE_VETH, // BRIDGE.VETH on Ethereum
// fiat "protocol"
USD: CoinLogoIcons.fiat.USD,
@@ -286,10 +301,12 @@ export const getCoinObj = (coinList, coinId) => {
})
}
-export const getCoinLogo = (id, proto, theme = 'light') => {
- if (CoinLogos[id]) return CoinLogos[id][theme]
+export const getCoinLogo = (id, proto, theme = 'light') => {
+ const _id = id === coinsList.VRSC.currency_id ? "VRSC" : id === coinsList.VRSCTEST.currency_id ? "VRSCTEST" : id;
+
+ if (CoinLogos[_id]) return CoinLogos[_id][theme]
else if (proto === 'erc20') return CoinLogos.ETH[theme]
- else return CoinLogoIcons.pbaas.RenderPbaasCurrencyLogo(id)[theme]
+ else return CoinLogoIcons.pbaas.RenderPbaasCurrencyLogo(_id)[theme]
}
export const getNetworkTxVersion = (networkId) => {
diff --git a/src/utils/CoinData/CoinsList.js b/src/utils/CoinData/CoinsList.js
index a8b0bdbb..792b6e09 100644
--- a/src/utils/CoinData/CoinsList.js
+++ b/src/utils/CoinData/CoinsList.js
@@ -116,7 +116,7 @@ export const coinsList = {
display_ticker: "DAI.vETH",
display_name: "DAI on Verus",
alt_names: [],
- theme_color: "#232323",
+ theme_color: "#F5AC37",
compatible_channels: [VERUSID, VRPC, GENERAL],
tags: [IS_VERUS, IS_ZCASH, IS_PBAAS],
proto: "vrsc",
@@ -126,7 +126,7 @@ export const coinsList = {
default_app: "wallet",
apps: VERUS_APPS,
rate_url_params: {coin_paprika: 'dai-dai'},
- website: 'https://verus.io',
+ website: 'https://makerdao.com/en/',
mapped_to: 'DAI'
},
["iCkKJuJScy4Z6NSDK7Mt42ZAB2NEnAE1o4"]: {
@@ -138,9 +138,9 @@ export const coinsList = {
launch_system_id: "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X",
bitgojs_network_key: "verus",
display_ticker: "MKR.vETH",
- display_name: "Maker on Verus",
+ display_name: "MKR on Verus",
alt_names: [],
- theme_color: "#232323",
+ theme_color: "#1AAB9B",
compatible_channels: [VERUSID, VRPC, GENERAL],
tags: [IS_VERUS, IS_ZCASH, IS_PBAAS],
proto: "vrsc",
@@ -150,9 +150,81 @@ export const coinsList = {
default_app: "wallet",
apps: VERUS_APPS,
rate_url_params: {coin_paprika: 'mkr-maker'},
- website: 'https://verus.io',
+ website: 'https://makerdao.com/en/',
mapped_to: 'MKR'
},
+ ["iS8TfRPfVpKo5FVfSUzfHBQxo9KuzpnqLU"]: {
+ pbaas_options: 32,
+ system_options: 128,
+ id: "iS8TfRPfVpKo5FVfSUzfHBQxo9KuzpnqLU",
+ currency_id: "iS8TfRPfVpKo5FVfSUzfHBQxo9KuzpnqLU",
+ system_id: "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X",
+ launch_system_id: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV",
+ bitgojs_network_key: "verus",
+ display_ticker: "tBTC.vETH",
+ display_name: "tBTC on Verus",
+ alt_names: [],
+ theme_color: "#000000",
+ compatible_channels: [VERUSID, VRPC, GENERAL],
+ tags: [IS_VERUS, IS_ZCASH, IS_PBAAS],
+ proto: "vrsc",
+ vrpc_endpoints: ["https://api.verus.services"],
+ decimals: 8,
+ seconds_per_block: 60,
+ default_app: "wallet",
+ apps: VERUS_APPS,
+ rate_url_params: {coin_paprika: 'tbtc-tbtc'},
+ website: 'https://tbtc.network/',
+ mapped_to: '0x18084fbA666a33d37592fA2633fD49a74DD93a88'
+ },
+ ["i61cV2uicKSi1rSMQCBNQeSYC3UAi9GVzd"]: {
+ pbaas_options: 32,
+ system_options: 128,
+ id: "i61cV2uicKSi1rSMQCBNQeSYC3UAi9GVzd",
+ currency_id: "i61cV2uicKSi1rSMQCBNQeSYC3UAi9GVzd",
+ system_id: "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X",
+ launch_system_id: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV",
+ bitgojs_network_key: "verus",
+ display_ticker: "vUSDC.vETH",
+ display_name: "USDC on Verus",
+ alt_names: [],
+ theme_color: '#29233b',
+ compatible_channels: [VERUSID, VRPC, GENERAL],
+ tags: [IS_VERUS, IS_ZCASH, IS_PBAAS],
+ proto: "vrsc",
+ vrpc_endpoints: ["https://api.verus.services"],
+ decimals: 8,
+ seconds_per_block: 60,
+ default_app: "wallet",
+ apps: VERUS_APPS,
+ rate_url_params: {coin_paprika: 'usdc-usd-coin'},
+ website: 'https://www.circle.com/en/usdc',
+ mapped_to: 'USDC'
+ },
+ ["iC5TQFrFXSYLQGkiZ8FYmZHFJzaRF5CYgE"]: {
+ pbaas_options: 32,
+ system_options: 128,
+ id: "iC5TQFrFXSYLQGkiZ8FYmZHFJzaRF5CYgE",
+ currency_id: "iC5TQFrFXSYLQGkiZ8FYmZHFJzaRF5CYgE",
+ system_id: "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X",
+ launch_system_id: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV",
+ bitgojs_network_key: "verus",
+ display_ticker: "EURC.vETH",
+ display_name: "EURC on Verus",
+ alt_names: [],
+ theme_color: '#29233b',
+ compatible_channels: [VERUSID, VRPC, GENERAL],
+ tags: [IS_VERUS, IS_ZCASH, IS_PBAAS],
+ proto: "vrsc",
+ vrpc_endpoints: ["https://api.verus.services"],
+ decimals: 8,
+ seconds_per_block: 60,
+ default_app: "wallet",
+ apps: VERUS_APPS,
+ rate_url_params: {coin_paprika: 'eurc-eurc'},
+ website: 'https://www.circle.com/en/usdc',
+ mapped_to: '0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c'
+ },
["i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"]: {
pbaas_options: 128,
system_options: 264,
@@ -164,7 +236,7 @@ export const coinsList = {
display_ticker: "vETH",
display_name: "Ethereum on Verus",
alt_names: [],
- theme_color: "#232323",
+ theme_color: "#141C30",
compatible_channels: [VERUSID, VRPC, GENERAL],
tags: [IS_VERUS, IS_ZCASH, IS_PBAAS],
proto: "vrsc",
@@ -174,7 +246,7 @@ export const coinsList = {
default_app: "wallet",
apps: VERUS_APPS,
rate_url_params: {coin_paprika: 'eth-ethereum'},
- website: 'https://verus.io',
+ website: 'https://ethereum.org/en/',
mapped_to: 'ETH'
},
["i3f7tSctFkiPpiedY8QR5Tep9p4qDVebDx"]: {
@@ -188,7 +260,7 @@ export const coinsList = {
display_ticker: "Bridge.vETH",
display_name: "Bridge.vETH",
alt_names: [],
- theme_color: "#232323",
+ theme_color: "#081C45",
compatible_channels: [VERUSID, VRPC],
tags: [IS_VERUS, IS_ZCASH, IS_PBAAS],
proto: "vrsc",
@@ -200,6 +272,94 @@ export const coinsList = {
website: 'https://verus.io',
mapped_to: '0xE6052Dcc60573561ECef2D9A4C0FEA6d3aC5B9A2'
},
+ ["iHax5qYQGbcMGqJKKrPorpzUBX2oFFXGnY"]: {
+ pbaas_options: 33,
+ system_options: 264,
+ id: "iHax5qYQGbcMGqJKKrPorpzUBX2oFFXGnY",
+ currency_id: "iHax5qYQGbcMGqJKKrPorpzUBX2oFFXGnY",
+ system_id: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV",
+ launch_system_id: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV",
+ bitgojs_network_key: "verus",
+ display_ticker: "Pure",
+ display_name: "Pure",
+ alt_names: [],
+ theme_color: "#484C52",
+ compatible_channels: [VERUSID, VRPC],
+ tags: [IS_VERUS, IS_ZCASH, IS_PBAAS],
+ proto: "vrsc",
+ vrpc_endpoints: ["https://api.verus.services"],
+ decimals: 8,
+ seconds_per_block: 60,
+ default_app: "wallet",
+ apps: VERUS_APPS,
+ website: 'https://verus.io'
+ },
+ ["i4Xr5TAMrDTD99H69EemhjDxJ4ktNskUtc"]: {
+ pbaas_options: 33,
+ system_options: 264,
+ id: "i4Xr5TAMrDTD99H69EemhjDxJ4ktNskUtc",
+ currency_id: "i4Xr5TAMrDTD99H69EemhjDxJ4ktNskUtc",
+ system_id: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV",
+ launch_system_id: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV",
+ bitgojs_network_key: "verus",
+ display_ticker: "Switch",
+ display_name: "Switch",
+ alt_names: [],
+ theme_color: "#132618",
+ compatible_channels: [VERUSID, VRPC],
+ tags: [IS_VERUS, IS_ZCASH, IS_PBAAS],
+ proto: "vrsc",
+ vrpc_endpoints: ["https://api.verus.services"],
+ decimals: 8,
+ seconds_per_block: 60,
+ default_app: "wallet",
+ apps: VERUS_APPS,
+ website: 'https://verus.io'
+ },
+ ["iExBJfZYK7KREDpuhj6PzZBzqMAKaFg7d2"]: {
+ pbaas_options: 268,
+ system_options: 268,
+ id: "iExBJfZYK7KREDpuhj6PzZBzqMAKaFg7d2",
+ currency_id: "iExBJfZYK7KREDpuhj6PzZBzqMAKaFg7d2",
+ system_id: "iExBJfZYK7KREDpuhj6PzZBzqMAKaFg7d2",
+ launch_system_id: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV",
+ bitgojs_network_key: "verus",
+ display_ticker: "vARRR",
+ display_name: "Pirate Chain (PBaaS)",
+ alt_names: [],
+ theme_color: "#1d1d2c",
+ compatible_channels: [VERUSID, VRPC],
+ tags: [IS_VERUS, IS_ZCASH, IS_PBAAS],
+ proto: "vrsc",
+ vrpc_endpoints: ["https://vapi.piratechain.com/"],
+ decimals: 8,
+ seconds_per_block: 60,
+ default_app: "wallet",
+ apps: VERUS_APPS,
+ website: 'https://piratechain.com/'
+ },
+ ["iD5WRg7jdQM1uuoVHsBCAEKfJCKGs1U3TB"]: {
+ pbaas_options: 545,
+ system_options: 268,
+ id: "iD5WRg7jdQM1uuoVHsBCAEKfJCKGs1U3TB",
+ currency_id: "iD5WRg7jdQM1uuoVHsBCAEKfJCKGs1U3TB",
+ system_id: "iExBJfZYK7KREDpuhj6PzZBzqMAKaFg7d2",
+ launch_system_id: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV",
+ bitgojs_network_key: "verus",
+ display_ticker: "Bridge.vARRR",
+ display_name: "Bridge.vARRR",
+ alt_names: [],
+ theme_color: "#1d1d2c",
+ compatible_channels: [VERUSID, VRPC],
+ tags: [IS_VERUS, IS_ZCASH, IS_PBAAS],
+ proto: "vrsc",
+ vrpc_endpoints: ["https://vapi.piratechain.com/"],
+ decimals: 8,
+ seconds_per_block: 60,
+ default_app: "wallet",
+ apps: VERUS_APPS,
+ website: 'https://piratechain.com/'
+ },
KMD: {
id: 'KMD',
display_name: 'Komodo',
@@ -646,8 +806,8 @@ export const coinsList = {
display_ticker: 'USDC',
display_name: 'USDC',
alt_names: [],
- theme_color: '#4E4E50',
- website: 'https://www.centre.io/usdc',
+ theme_color: '#29233b',
+ website: 'https://www.circle.com/en/usdc',
compatible_channels: [ERC20, GENERAL],
dominant_channel: ERC20,
decimals: STABLECOIN_DECIMALS,
@@ -655,6 +815,22 @@ export const coinsList = {
proto: 'erc20',
rate_url_params: {coin_paprika: 'usdc-usd-coin'},
},
+ ["0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c"]: {
+ id: '0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c',
+ currency_id: '0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c',
+ system_id: '.eth',
+ display_ticker: 'EURC',
+ display_name: 'EURC',
+ alt_names: [],
+ theme_color: '#29233b',
+ website: 'https://www.circle.com/en/eurc',
+ compatible_channels: [ERC20, GENERAL],
+ dominant_channel: ERC20,
+ decimals: STABLECOIN_DECIMALS,
+ tags: [],
+ proto: 'erc20',
+ rate_url_params: {coin_paprika: 'eurc-eurc'},
+ },
USDCWYRE: {
id: 'USDCWYRE',
currency_id: 'USDC',
@@ -729,7 +905,7 @@ export const coinsList = {
website: 'https://verus.io/',
compatible_channels: [ERC20, GENERAL],
rate_url_params: {coin_paprika: 'vrsc-verus-coin'},
- theme_color: '#141C30',
+ theme_color: '#3165D4',
dominant_channel: ERC20,
decimals: ETHERS,
tags: [],
@@ -744,12 +920,28 @@ export const coinsList = {
alt_names: [],
website: 'https://verus.io/',
compatible_channels: [ERC20, GENERAL],
- theme_color: '#141C30',
+ theme_color: '#081C45',
dominant_channel: ERC20,
decimals: ETHERS,
tags: [],
proto: 'erc20',
},
+ ["0x18084fbA666a33d37592fA2633fD49a74DD93a88"]: {
+ id: '0x18084fbA666a33d37592fA2633fD49a74DD93a88',
+ currency_id: '0x18084fbA666a33d37592fA2633fD49a74DD93a88',
+ system_id: '.eth',
+ display_ticker: 'tBTC',
+ display_name: 'tBTC',
+ alt_names: [],
+ website: 'https://tbtc.network/',
+ compatible_channels: [ERC20, GENERAL],
+ theme_color: '#000000',
+ dominant_channel: ERC20,
+ decimals: DEFAULT_DECIMALS,
+ tags: [],
+ proto: 'erc20',
+ rate_url_params: {coin_paprika: 'tbtc-tbtc'},
+ },
MKR: {
id: 'MKR',
currency_id: '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2',
diff --git a/src/utils/auth/scorePassword.js b/src/utils/auth/scorePassword.js
new file mode 100644
index 00000000..6a530fb2
--- /dev/null
+++ b/src/utils/auth/scorePassword.js
@@ -0,0 +1,63 @@
+// MIT License
+
+// Copyright (c) 2018 Pritish
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+function limitValue(value, minValue, maxValue) {
+ let currentValue = 0;
+ if (!Number.isNaN(value)) {
+ currentValue = parseInt(value);
+ }
+ return Math.min(Math.max(currentValue, minValue), maxValue);
+}
+
+function scorePassword(pass, minLength, limit,) {
+ const variations = {
+ digits: /\d/,
+ lower: /[a-z]/,
+ upper: /[A-Z]/,
+ nonWords: /\W/,
+ };
+
+ let score = 0;
+ let variationCount = 0;
+ const letters = {};
+
+ if (!pass || pass.length < minLength) {
+ return score;
+ }
+
+ /* Score unique letters until 5 repetitions */
+ for (let i = 0; i < pass.length; i += 1) {
+ letters[pass[i]] = (letters[pass[i]] || 0) + 1;
+ score += 5.0 / letters[pass[i]];
+ }
+
+ /* Score character variation */
+ Object.keys(variations).forEach((variation) => {
+ const variationCheck = variations[variation].test(pass);
+ variationCount += variationCheck === true ? 1 : 0;
+ });
+ score += (variationCount - 1) * 10;
+
+ return limitValue(score, 0, limit);
+}
+
+export default scorePassword;
\ No newline at end of file
diff --git a/src/utils/constants/constants.js b/src/utils/constants/constants.js
index 9a0a9a29..0f1434ac 100644
--- a/src/utils/constants/constants.js
+++ b/src/utils/constants/constants.js
@@ -199,4 +199,9 @@ export const R_ADDRESS_VERSION = 60;
export const I_ADDRESS_VERSION = 102;
// Address blocklist
-export const DEFAULT_ADDRESS_BLOCKLIST_WEBSERVER = 'https://eth.verusbridge.io/exclude.json'
\ No newline at end of file
+export const DEFAULT_ADDRESS_BLOCKLIST_WEBSERVER = 'https://eth.verusbridge.io/exclude.json'
+
+// Password Strength
+export const MIN_PASS_LENGTH = 7
+export const MIN_PASS_SCORE = 65
+export const PASS_SCORE_LIMIT = 100
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index 7ddd5bb5..614e0f0a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6109,14 +6109,14 @@ ip-regex@^4.1.0:
integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==
ip@^1.1.5:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48"
- integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.9.tgz#8dfbcc99a754d07f425310b86a99546b1151e396"
+ integrity sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==
ip@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
- integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105"
+ integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==
is-accessor-descriptor@^0.1.6:
version "0.1.6"
@@ -9496,10 +9496,10 @@ react-native-keyboard-aware-scroll-view@0.9.5:
prop-types "^15.6.2"
react-native-iphone-x-helper "^1.0.3"
-react-native-keychain@6.2.0:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/react-native-keychain/-/react-native-keychain-6.2.0.tgz#8f4cff503aad367141db5aea0189ead9240c28ff"
- integrity sha512-U6fnOQRJPq+c0Abl+FoYy9v0H3kQU587tMamU/o+MoBSUScFLE3DQpkyT1PW4NF5IObgiGuqQdmjC2KgtBpjGA==
+react-native-keychain@8.1.3:
+ version "8.1.3"
+ resolved "https://registry.yarnpkg.com/react-native-keychain/-/react-native-keychain-8.1.3.tgz#3d9ccc5e4884a59521cbf6a2a529a41314497367"
+ integrity sha512-Y4PMfY+VpXn7P1HhszJkWJ5ikKxKwg8djoDxyy7mO3jbsiWtWUtb3AGbFkdOuYaEp7lDc/TPiQgWO8yZ+AMzmw==
react-native-level-fs@3.0.0:
version "3.0.0"