From 854ed15ac5e773c4938d2a0bc6e476c1eeb4cc48 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Sat, 22 Jun 2024 22:18:23 +0800 Subject: [PATCH 01/28] begin evm --- babel.config.js | 1 + ios/Podfile.lock | 8 +- package.json | 2 + src/assets/eth.svg | 19 ++ src/blockchains.d.ts | 6 + src/lib/wallet.ts | 98 +++++++++- src/storage/backends.ts | 7 + src/storage/blockchains.ts | 30 ++- src/store/index.ts | 2 + src/types.d.ts | 18 +- yarn.lock | 375 ++++++++++++++++++++++++++----------- 11 files changed, 450 insertions(+), 116 deletions(-) create mode 100644 src/assets/eth.svg diff --git a/babel.config.js b/babel.config.js index e961df37..76375540 100644 --- a/babel.config.js +++ b/babel.config.js @@ -11,6 +11,7 @@ module.exports = { '@': './src', types: './@types', crypto: 'react-native-quick-crypto', + '@assets': '/src/assets', '@storage': './src/storage', }, }, diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 10f9da7e..46558203 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1112,7 +1112,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-quick-crypto (0.7.0-rc.9): + - react-native-quick-crypto (0.7.0-rc.10): - DoubleConversion - glog - hermes-engine @@ -1135,7 +1135,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-safe-area-context (4.10.4): + - react-native-safe-area-context (4.10.5): - React-Core - React-nativeconfig (0.74.2) - React-NativeModulesApple (0.74.2): @@ -1753,8 +1753,8 @@ SPEC CHECKSUMS: react-native-get-random-values: 21325b2244dfa6b58878f51f9aa42821e7ba3d06 react-native-mmkv: 8c9a677e64a1ac89b0c6cf240feea528318b3074 react-native-quick-base64: a74c4b2607b9de016877a8edb776b6ac59785809 - react-native-quick-crypto: 3aeff10e2cfeedc76f19b8542d824587e137fffa - react-native-safe-area-context: 399a5859f6acbdf67f671c69b53113f535f3b5b0 + react-native-quick-crypto: 8595b00c720afcb6986a2e8d0b4ac026d53c4fb3 + react-native-safe-area-context: a240ad4b683349e48b1d51fed1611138d1bdad97 React-nativeconfig: 9f223cd321823afdecf59ed00861ab2d69ee0fc1 React-NativeModulesApple: ff7efaff7098639db5631236cfd91d60abff04c0 React-perflogger: 32ed45d9cee02cf6639acae34251590dccd30994 diff --git a/package.json b/package.json index 31860ca1..52c42584 100644 --- a/package.json +++ b/package.json @@ -22,10 +22,12 @@ "@react-navigation/native": "~6.1.17", "@react-navigation/stack": "~6.3.29", "@reduxjs/toolkit": "~2.2.5", + "@runonflux/aa-schnorr-multisig-sdk": "~1.0.1", "@runonflux/react-native-step-indicator": "~1.0.0", "@runonflux/utxo-lib": "~1.0.0", "@scure/bip32": "~1.4.0", "@scure/bip39": "~1.3.0", + "abitype": "~1.0.0", "assert": "~2.1.0", "axios": "~1.7.2", "bchaddrjs": "~0.5.2", diff --git a/src/assets/eth.svg b/src/assets/eth.svg new file mode 100644 index 00000000..b094aa19 --- /dev/null +++ b/src/assets/eth.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + diff --git a/src/blockchains.d.ts b/src/blockchains.d.ts index 7d257d0f..f6bb9d9f 100644 --- a/src/blockchains.d.ts +++ b/src/blockchains.d.ts @@ -30,6 +30,12 @@ declare module '@storage/blockchains' { cashaddr: string; txExpiryHeight: number; hashType: number; + // evm + chainType: string; + accountSalt: string; + factorySalt: string; + factoryAddress: string; + entrypointAddress: string; } type blockchains = Record; let blockchains: blockchains; diff --git a/src/lib/wallet.ts b/src/lib/wallet.ts index e129459b..e317c562 100644 --- a/src/lib/wallet.ts +++ b/src/lib/wallet.ts @@ -1,4 +1,5 @@ import utxolib from '@runonflux/utxo-lib'; +import * as aaSchnorrMultisig from '@runonflux/aa-schnorr-multisig-sdk'; import { Buffer } from 'buffer'; import { HDKey } from '@scure/bip32'; import * as bip39 from '@scure/bip39'; @@ -100,6 +101,15 @@ export function generateMultisigAddress( addressIndex: number, chain: keyof cryptos, ): multisig { + if (blockchains[chain].chainType === 'evm') { + return generateMultisigAddressEVM( + xpub1, + xpub2, + typeIndex, + addressIndex, + chain, + ); + } const libID = getLibId(chain); const network = utxolib.networks[libID]; const bipParams = blockchains[chain].bip32; @@ -201,6 +211,87 @@ export function generateMultisigAddress( } } +// given xpubs of two parties, generate multisig address. EVM chains +export function generateMultisigAddressEVM( + xpub1: string, + xpub2: string, + typeIndex: 0 | 1 | 10, // normal, change, internal identity + addressIndex: number, + chain: keyof cryptos, +): multisig { + const bipParams = blockchains[chain].bip32; + const { accountSalt, factorySalt, factoryAddress, entrypointAddress } = + blockchains[chain]; + const externalChain1 = HDKey.fromExtendedKey(xpub1, bipParams); + const externalChain2 = HDKey.fromExtendedKey(xpub2, bipParams); + + const externalAddress1 = externalChain1 + .deriveChild(typeIndex) + .deriveChild(addressIndex); + const externalAddress2: HDKey = externalChain2 + .deriveChild(typeIndex) + .deriveChild(addressIndex); + + // Uint8Array(32) + const publicKey1 = externalAddress1.publicKey; + const publicKey2 = externalAddress2.publicKey; + + const pubKeyBuffer1 = Buffer.from(publicKey1!); + const pubKeyBuffer2 = Buffer.from(publicKey2!); + + console.log(aaSchnorrMultisig); + + const keyPubKey1 = new aaSchnorrMultisig.types.Key(pubKeyBuffer1); + const keyPubKey2 = new aaSchnorrMultisig.types.Key(pubKeyBuffer2); + + const publicKeys = [keyPubKey1, keyPubKey2]; + + const combinedAddresses = + aaSchnorrMultisig.helpers.SchnorrHelpers.getAllCombinedAddrFromKeys( + publicKeys, + publicKeys.length, + ); + + const accountImplementationAddress = + aaSchnorrMultisig.helpers.create2Helpers.predictAccountImplementationAddrOffchain( + factorySalt, + factoryAddress, + entrypointAddress, + ); + + const address = + aaSchnorrMultisig.helpers.create2Helpers.predictAccountAddrOffchain( + factoryAddress, + accountImplementationAddress, + combinedAddresses, + accountSalt, + ); + + return { + address, + }; +} + +// given xpriv of our party, generate keypair consisting of privateKey in and public key belonging to it +export function generateRawAddressKeypair( + xpriv: string, + typeIndex: 0 | 1, + addressIndex: number, + chain: keyof cryptos, +): keyPair { + const bipParams = blockchains[chain].bip32; + const externalChain = HDKey.fromExtendedKey(xpriv, bipParams); + + const externalAddress = externalChain + .deriveChild(typeIndex) + .deriveChild(addressIndex); + + const publicKey = Buffer.from(externalAddress.publicKey!).toString('hex'); + const privateKey = Buffer.from(externalAddress.privateKey!).toString('hex'); + + return { privKey: privateKey, pubKey: publicKey }; +} + // given xpriv of our party, generate keypair consisting of privateKey in WIF format and public key belonging to it export function generateAddressKeypair( xpriv: string, @@ -208,6 +299,10 @@ export function generateAddressKeypair( addressIndex: number, chain: keyof cryptos, ): keyPair { + const { chainType } = blockchains[chain]; + if (chainType === 'evm') { + return generateRawAddressKeypair(xpriv, typeIndex, addressIndex, chain); + } const libID = getLibId(chain); const bipParams = blockchains[chain].bip32; const networkBipParams = utxolib.networks[libID].bip32; @@ -227,6 +322,7 @@ export function generateAddressKeypair( .deriveChild(addressIndex); const derivedExternalAddress: minHDKey = utxolib.HDNode.fromBase58( + // to get priv key in wif via lib externalAddress.toJSON().xpriv, network, ); @@ -235,7 +331,7 @@ export function generateAddressKeypair( const publicKey = derivedExternalAddress.keyPair .getPublicKeyBuffer() - .toString('hex'); + .toString('hex'); // same as Buffer.from(externalAddress.pubKey).toString('hex);. Library does not expose keypair from just hex of private key, workaround return { privKey: privateKeyWIF, pubKey: publicKey }; } diff --git a/src/storage/backends.ts b/src/storage/backends.ts index af895822..6bc6415a 100644 --- a/src/storage/backends.ts +++ b/src/storage/backends.ts @@ -17,6 +17,7 @@ export function loadBackendsConfig() { loadBackendsConfig(); +// *** BACKENDS *** const flux = { node: 'explorer.runonflux.io', }; @@ -47,6 +48,9 @@ const btcTestnet = { const btcSignet = { node: 'blockbookbitcoinsignet.app.runonflux.io', }; +const sepolia = { + node: 'node.sepolia.runonflux.io', +}; export function backends() { return { @@ -60,6 +64,7 @@ export function backends() { bch: localForgeBackends?.bch || bch, btcTestnet: localForgeBackends?.btcTestnet || btcTestnet, btcSignet: localForgeBackends?.btcSignet || btcSignet, + sepolia: localForgeBackends?.sepolia || sepolia, }; } @@ -72,7 +77,9 @@ export function backendsOriginal() { btc, doge, zec, + bch, btcTestnet, btcSignet, + sepolia, }; } diff --git a/src/storage/blockchains.ts b/src/storage/blockchains.ts index 14d868ac..60e50aa8 100644 --- a/src/storage/blockchains.ts +++ b/src/storage/blockchains.ts @@ -10,6 +10,7 @@ const btcSignetLogo = '/src/assets/btcSignet.svg'; const dogeLogo = '/src/assets/doge.svg'; const zecLogo = '/src/assets/zec.svg'; const bchLogo = '/src/assets/bch.svg'; +const ethLogo = '/src/assets/eth.svg'; const flux = { id: 'flux', @@ -260,7 +261,7 @@ const zec = { backend: 'blockbook', dustLimit: 546, // min utxo amount minFeePerByte: 1, // min fee per byte - feePerByte: 2, // fee per byte + feePerByte: 3, // fee per byte maxMessage: 80, // 80 bytes in size maxTxSize: 100000, // 100,000 vbytes rbf: false, @@ -288,14 +289,36 @@ const bch = { backend: 'blockbook', dustLimit: 546, // min utxo amount minFeePerByte: 1, // min fee per byte - feePerByte: 15, // fee per byte + feePerByte: 4, // fee per byte maxMessage: 80, // 80 bytes in size maxTxSize: 100000, // 100,000 vbytes - rbf: true, + rbf: false, cashaddr: 'bitcoincash:', hashType: 0x40, // will force SIGHASH_BITCOINCASHBIP143 }; +const sepolia = { + id: 'sepolia', + name: 'Sepolia Ethereum', + symbol: 'ETH', + logo: ethLogo, + slip: 1, + decimals: 18, + node: backends().sepolia.node, + bip32: { + // not specified, use default + public: 0x0488b21e, + private: 0x0488ade4, + }, + scriptType: 'p2sh', // not specified, use default + chainType: 'evm', + backend: 'alchemy', + accountSalt: 'aasalt', // ssp uses this salt for smart accounts + factorySalt: 'aafactorysalt', // factory uses this salt + factoryAddress: '0xA76f98D25C9775F67DCf8B9EF9618d454D287467', + entrypointAddress: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789', +}; + export const blockchains = { btc, flux, @@ -307,4 +330,5 @@ export const blockchains = { btcTestnet, btcSignet, fluxTestnet, + sepolia, }; diff --git a/src/store/index.ts b/src/store/index.ts index d97bfc7d..6fbe5c44 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -29,6 +29,7 @@ const chains = { bch: chainSliceBase('bch'), btcTestnet: chainSliceBase('btcTestnet'), btcSignet: chainSliceBase('btcSignet'), + sepolia: chainSliceBase('sepolia'), }; // ********** Import chains ********** @@ -49,6 +50,7 @@ const reducers = combineReducers({ bch: chains.bch.reducer, btcTestnet: chains.btcTestnet.reducer, btcSignet: chains.btcSignet.reducer, + sepolia: chains.sepolia.reducer, }); export const storage = new MMKV(); diff --git a/src/types.d.ts b/src/types.d.ts index 3b12fb52..3a39a625 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1,4 +1,3 @@ -import { Buffer } from 'buffer'; // wallet.tx export interface minHDKey { keyPair: { @@ -88,6 +87,7 @@ export interface vinBlockbook { txid: string; sequence: number; n: number; + vout: number; addresses: string[]; isAddress: boolean; isOwn: boolean; @@ -122,6 +122,7 @@ export interface transactionInsight { blockheight: number; confirmations: number; size: number; + vsize: number; time: number; blocktime: number; valueOut: number; @@ -147,6 +148,7 @@ export interface transactionBlockbook { confirmations: number; blockTime: number; size: number; + vsize: number; blockTime: number; value: string; valueIn: string; @@ -173,6 +175,7 @@ export interface wallet { balance: string; unconfirmedBalance: string; transactions: transaction[]; + nodes?: node[]; } export type wallets = Record; @@ -185,6 +188,10 @@ export interface transaction { fee: string; amount: string; // satoshis message: string; + receiver: string; + size: number; + vsize?: number; + utxos?: txIdentifier[]; } export interface pendingTransaction { @@ -208,6 +215,12 @@ export interface getInfoBlockbook { }; } +export interface evm_call { + jsonrpc: string; + id: number; + result: string; +} + export interface syncSSPRelay { chain: string; walletIdentity: string; @@ -270,6 +283,8 @@ export interface currency { CZK: number; BHD: number; UAH: number; + BTC: number; + ETH: number; } export interface cryptos { @@ -283,6 +298,7 @@ export interface cryptos { bch: number; btcTestnet: number; btcSignet: number; + sepolia: number; } export interface currencySSPRelay { diff --git a/yarn.lock b/yarn.lock index 02e9847b..47c5459a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,26 @@ # yarn lockfile v1 +"@adraffy/ens-normalize@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" + integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== + +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + +"@alchemy/aa-core@^3.12.3": + version "3.18.2" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.18.2.tgz#b11f189404e97132f5affab938b3d4040c99f475" + integrity sha512-uXVpPz5tpBiARC4QCj/MAK45J09Pt3pJQpmFDiHSj4ZEcQB7ZraP2z8Bi6jLMkMDyHPjUiTeJf+aRV3Gqyeunw== + dependencies: + abitype "^0.8.3" + eventemitter3 "^5.0.1" + viem "2.8.6" + zod "^3.22.4" + "@ampproject/remapping@^2.2.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" @@ -1534,6 +1554,13 @@ dependencies: eslint-scope "5.1.1" +"@noble/curves@1.2.0", "@noble/curves@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + "@noble/curves@~1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.0.tgz#f05771ef64da724997f69ee1261b2417a49522d6" @@ -1541,11 +1568,21 @@ dependencies: "@noble/hashes" "1.4.0" +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + "@noble/hashes@1.4.0", "@noble/hashes@~1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== +"@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -2012,6 +2049,17 @@ mkdirp "^1.0.4" rimraf "^3.0.2" +"@runonflux/aa-schnorr-multisig-sdk@~1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@runonflux/aa-schnorr-multisig-sdk/-/aa-schnorr-multisig-sdk-1.0.1.tgz#77281c8c824e721766d56a558dacb2bfa67ab32f" + integrity sha512-skiJVeEcfpHIWx5ssk7OXynhh4ffz2gfTtgHXOvfEgDDQyT0wnW2ygX1pdSO7/bT22QK8AVuJ8Ny4UPdV8HdoA== + dependencies: + "@alchemy/aa-core" "^3.12.3" + bigi "^1.4.2" + ecurve "^1.0.6" + ethers "^6.11.1" + secp256k1 "^5.0.0" + "@runonflux/react-native-step-indicator@~1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@runonflux/react-native-step-indicator/-/react-native-step-indicator-1.0.0.tgz#5acb0ead7ca09d093d7a8105278d2bc95dd21cb0" @@ -2043,10 +2091,19 @@ optionalDependencies: secp256k1 "^3.5.2" -"@scure/base@~1.1.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" - integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== +"@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.6": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.7.tgz#fe973311a5c6267846aa131bc72e96c5d40d2b30" + integrity sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g== + +"@scure/bip32@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.2.tgz#90e78c027d5e30f0b22c1f8d50ff12f3fb7559f8" + integrity sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA== + dependencies: + "@noble/curves" "~1.2.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.2" "@scure/bip32@~1.4.0": version "1.4.0" @@ -2057,6 +2114,14 @@ "@noble/hashes" "~1.4.0" "@scure/base" "~1.1.6" +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + "@scure/bip39@~1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" @@ -2320,16 +2385,21 @@ "@types/node" "*" "@types/node@*", "@types/node@~20.14.0": - version "20.14.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.2.tgz#a5f4d2bcb4b6a87bffcaa717718c5a0f208f4a18" - integrity sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q== + version "20.14.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.7.tgz#342cada27f97509eb8eb2dbc003edf21ce8ab5a8" + integrity sha512-uTr2m2IbJJucF3KUxgnGOZvYbN0QgkGyWxG6973HCpMYFy2KfcgYuIwkJQMQkt1VbBMlvWRbpshFTLxnxCZjKQ== dependencies: undici-types "~5.26.4" +"@types/node@18.15.13": + version "18.15.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" + integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== + "@types/node@^18.0.0": - version "18.19.34" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.34.tgz#c3fae2bbbdb94b4a52fe2d229d0dccce02ef3d27" - integrity sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g== + version "18.19.38" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.38.tgz#cf4f04c1dab1fcaaa514ec789cf5125184c8c5d8" + integrity sha512-SApYXUF7si4JJ+lO2o6X60OPOnA6wPpbiB09GMCkQ+JAwpa9hxUVG8p7GzA08TKQn5OhzK57rj1wFj+185YsGg== dependencies: undici-types "~5.26.4" @@ -2410,29 +2480,29 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^7.1.1": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz#3cdeb5d44d051b21a9567535dd90702b2a42c6ff" - integrity sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w== + version "7.13.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.1.tgz#cdc521c8bca38b55585cf30db787fb2abad3f9fd" + integrity sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.13.0" - "@typescript-eslint/type-utils" "7.13.0" - "@typescript-eslint/utils" "7.13.0" - "@typescript-eslint/visitor-keys" "7.13.0" + "@typescript-eslint/scope-manager" "7.13.1" + "@typescript-eslint/type-utils" "7.13.1" + "@typescript-eslint/utils" "7.13.1" + "@typescript-eslint/visitor-keys" "7.13.1" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" "@typescript-eslint/parser@^7.1.1": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.13.0.tgz#9489098d68d57ad392f507495f2b82ce8b8f0a6b" - integrity sha512-EjMfl69KOS9awXXe83iRN7oIEXy9yYdqWfqdrFAYAAr6syP8eLEFI7ZE4939antx2mNgPRW/o1ybm2SFYkbTVA== - dependencies: - "@typescript-eslint/scope-manager" "7.13.0" - "@typescript-eslint/types" "7.13.0" - "@typescript-eslint/typescript-estree" "7.13.0" - "@typescript-eslint/visitor-keys" "7.13.0" + version "7.13.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.13.1.tgz#fac57811b3e519185f7259bac312291f7b9c4e72" + integrity sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A== + dependencies: + "@typescript-eslint/scope-manager" "7.13.1" + "@typescript-eslint/types" "7.13.1" + "@typescript-eslint/typescript-estree" "7.13.1" + "@typescript-eslint/visitor-keys" "7.13.1" debug "^4.3.4" "@typescript-eslint/scope-manager@5.62.0": @@ -2443,21 +2513,21 @@ "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/scope-manager@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz#6927d6451537ce648c6af67a2327378d4cc18462" - integrity sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng== +"@typescript-eslint/scope-manager@7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz#c08041206904bf36f0e6997efdb0ca775e0c452e" + integrity sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg== dependencies: - "@typescript-eslint/types" "7.13.0" - "@typescript-eslint/visitor-keys" "7.13.0" + "@typescript-eslint/types" "7.13.1" + "@typescript-eslint/visitor-keys" "7.13.1" -"@typescript-eslint/type-utils@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz#4587282b5227a23753ea8b233805ecafc3924c76" - integrity sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A== +"@typescript-eslint/type-utils@7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.13.1.tgz#63bec3f1fb43cf0bc409cbdb88ef96d118ca8632" + integrity sha512-aWDbLu1s9bmgPGXSzNCxELu+0+HQOapV/y+60gPXafR8e2g1Bifxzevaa+4L2ytCWm+CHqpELq4CSoN9ELiwCg== dependencies: - "@typescript-eslint/typescript-estree" "7.13.0" - "@typescript-eslint/utils" "7.13.0" + "@typescript-eslint/typescript-estree" "7.13.1" + "@typescript-eslint/utils" "7.13.1" debug "^4.3.4" ts-api-utils "^1.3.0" @@ -2466,10 +2536,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/types@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.13.0.tgz#0cca95edf1f1fdb0cfe1bb875e121b49617477c5" - integrity sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA== +"@typescript-eslint/types@7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.13.1.tgz#787db283bd0b58751094c90d5b58bbf5e9fc9bd8" + integrity sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" @@ -2484,13 +2554,13 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz#4cc24fc155088ebf3b3adbad62c7e60f72c6de1c" - integrity sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw== +"@typescript-eslint/typescript-estree@7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz#3412841b130e070db2f675e3d9b8cb1ae49e1c3f" + integrity sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw== dependencies: - "@typescript-eslint/types" "7.13.0" - "@typescript-eslint/visitor-keys" "7.13.0" + "@typescript-eslint/types" "7.13.1" + "@typescript-eslint/visitor-keys" "7.13.1" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -2498,15 +2568,15 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.13.0.tgz#f84e7e8aeceae945a9a3f40d077fd95915308004" - integrity sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ== +"@typescript-eslint/utils@7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.13.1.tgz#611083379caa0d3a2c09d126c65065a3e4337ba2" + integrity sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "7.13.0" - "@typescript-eslint/types" "7.13.0" - "@typescript-eslint/typescript-estree" "7.13.0" + "@typescript-eslint/scope-manager" "7.13.1" + "@typescript-eslint/types" "7.13.1" + "@typescript-eslint/typescript-estree" "7.13.1" "@typescript-eslint/utils@^5.10.0": version "5.62.0" @@ -2530,12 +2600,12 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz#2eb7ce8eb38c2b0d4a494d1fe1908e7071a1a353" - integrity sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw== +"@typescript-eslint/visitor-keys@7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz#9c229a795a919db61f2d7f2337ef584ac05fbe96" + integrity sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA== dependencies: - "@typescript-eslint/types" "7.13.0" + "@typescript-eslint/types" "7.13.1" eslint-visitor-keys "^3.4.3" "@ungap/structured-clone@^1.2.0": @@ -2548,6 +2618,21 @@ resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== +abitype@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" + integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== + +abitype@^0.8.3: + version "0.8.11" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.8.11.tgz#66e1cf2cbf46f48d0e57132d7c1c392447536cc1" + integrity sha512-bM4v2dKvX08sZ9IU38IN5BKmN+ZkOSd2oI4a9f0ejHYZQYV6cDr7j+d95ga0z2XHG36Y4jzoG5Z7qDqxp7fi/A== + +abitype@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.4.tgz#a817ff44860e8a84e9a37ed22aa9b738dbb51dba" + integrity sha512-UivtYZOGJGE8rsrM/N5vdRkUpqEZVmuTumfTuolm7m/6O09wprd958rx8kUBwVAAAhQDveGAgD0GJdBuR8s6tw== + abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -2569,9 +2654,14 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.8.2, acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + version "8.12.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c" + integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw== + +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== ajv@^6.12.4: version "6.12.6" @@ -2725,7 +2815,7 @@ array.prototype.toreversed@^1.1.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.tosorted@^1.1.3: +array.prototype.tosorted@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== @@ -2977,7 +3067,7 @@ big-integer@1.6.36: resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" integrity sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg== -bigi@^1.1.0, bigi@^1.4.0: +bigi@^1.1.0, bigi@^1.4.0, bigi@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/bigi/-/bigi-1.4.2.tgz#9c665a95f88b8b08fc05cfd731f561859d725825" integrity sha512-ddkU+dFIuEIW8lE7ZwdIAf2UPoM90eaprg5m3YXAVVTmKlqV/9BX4A2M8BOK2yOq6/VgZFVhK6QAxJebhlbhzw== @@ -3190,9 +3280,9 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001629: - version "1.0.30001632" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001632.tgz#964207b7cba5851701afb4c8afaf1448db3884b6" - integrity sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg== + version "1.0.30001636" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz#b15f52d2bdb95fad32c2f53c0b68032b85188a78" + integrity sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg== cashaddrjs@0.4.4: version "0.4.4" @@ -3822,7 +3912,7 @@ drbg.js@^1.0.1: create-hash "^1.1.2" create-hmac "^1.1.4" -ecurve@^1.0.0: +ecurve@^1.0.0, ecurve@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/ecurve/-/ecurve-1.0.6.tgz#dfdabbb7149f8d8b78816be5a7d5b83fcf6de797" integrity sha512-/BzEjNfiSuB7jIWKcS/z8FK9jNjmEWvUV2YZ4RLSmcDtP7Lq0m6FvDuSnJpBlDpGRpfRQeTLGLBI8H+kEv0r+w== @@ -3836,11 +3926,11 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.796: - version "1.4.799" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.799.tgz#271c56654ab4dc703037e47a5af4fc8945160611" - integrity sha512-3D3DwWkRTzrdEpntY0hMLYwj7SeBk1138CkPE8sBDSj3WzrzOiG2rHm3luw8jucpf+WiyLBCZyU9lMHyQI9M9Q== + version "1.4.808" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.808.tgz#85b2f93a5e32c2949a1a4d39375851945c936835" + integrity sha512-0ItWyhPYnww2VOuCGF4s1LTfbrdAV2ajy/TN+ZTuhR23AHI6rWHCrBXJ/uxoXOvRRqw8qjYVrG81HFI7x/2wdQ== -elliptic@^6.5.2: +elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.5" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded" integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== @@ -3869,14 +3959,14 @@ encodeurl@~1.0.2: integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== engine.io-client@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" - integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q== + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.4.tgz#b8bc71ed3f25d0d51d587729262486b4b33bd0d0" + integrity sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" engine.io-parser "~5.2.1" - ws "~8.11.0" + ws "~8.17.1" xmlhttprequest-ssl "~2.0.0" engine.io-parser@~5.2.1: @@ -4133,15 +4223,15 @@ eslint-plugin-react-native@^4.0.0: eslint-plugin-react-native-globals "^0.1.1" eslint-plugin-react@^7.30.1: - version "7.34.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz#2780a1a35a51aca379d86d29b9a72adc6bfe6b66" - integrity sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw== + version "7.34.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.3.tgz#9965f27bd1250a787b5d4cfcc765e5a5d58dcb7b" + integrity sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA== dependencies: array-includes "^3.1.8" array.prototype.findlast "^1.2.5" array.prototype.flatmap "^1.3.2" array.prototype.toreversed "^1.1.2" - array.prototype.tosorted "^1.1.3" + array.prototype.tosorted "^1.1.4" doctrine "^2.1.0" es-iterator-helpers "^1.0.19" estraverse "^5.3.0" @@ -4274,11 +4364,29 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +ethers@^6.11.1: + version "6.13.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.1.tgz#2b9f9c7455cde9d38b30fe6589972eb083652961" + integrity sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "18.15.13" + aes-js "4.0.0-beta.5" + tslib "2.4.0" + ws "8.17.1" + event-target-shim@^5.0.0, event-target-shim@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + events@^3.3.0, events@~3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -4494,9 +4602,9 @@ flow-enums-runtime@^0.0.6: integrity sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw== flow-parser@0.*: - version "0.237.2" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.237.2.tgz#f3e86ab582db57e4437796e7048632646a21a46f" - integrity sha512-mvI/kdfr3l1waaPbThPA8dJa77nHXrfZIun+SWvFwSwDjmeByU7mGJGRmv1+7guU6ccyLV8e1lqZA1lD4iMGnQ== + version "0.238.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.238.0.tgz#b465753c2630a38f459413a745c69ec11a0b5291" + integrity sha512-VE7XSv1epljsIN2YeBnxCmGJihpNIAnLLu/pPOdA+Gkso7qDltJwUi6vfHjgxdBbjSdAuPGnhuOHJUQG+yYwIg== follow-redirects@^1.15.6: version "1.15.6" @@ -5013,11 +5121,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + version "2.14.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.14.0.tgz#43b8ef9f46a6a08888db67b1ffd4ec9e3dfd59d1" + integrity sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A== dependencies: - hasown "^2.0.0" + hasown "^2.0.2" is-data-view@^1.0.1: version "1.0.1" @@ -5239,6 +5347,11 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +isows@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" + integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== + istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" @@ -5662,9 +5775,9 @@ jest@~29.7.0: jest-cli "^29.7.0" joi@^17.2.1: - version "17.13.1" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.1.tgz#9c7b53dc3b44dd9ae200255cc3b398874918a6ca" - integrity sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg== + version "17.13.3" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.3.tgz#0f5cc1169c999b30d344366d384b12d92558bcec" + integrity sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA== dependencies: "@hapi/hoek" "^9.3.0" "@hapi/topo" "^5.1.0" @@ -6379,6 +6492,11 @@ node-abort-controller@^3.1.1: resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + node-dir@^0.1.17: version "0.1.17" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" @@ -6398,6 +6516,11 @@ node-forge@^1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== +node-gyp-build@^4.2.0: + version "4.8.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.1.tgz#976d3ad905e71b76086f4f0b0d3637fe79b6cda5" + integrity sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -7032,9 +7155,9 @@ react-native-quick-base64@^2.0.5, react-native-quick-base64@~2.1.2: base64-js "^1.5.1" react-native-quick-crypto@~0.7.0-rc.9: - version "0.7.0-rc.9" - resolved "https://registry.yarnpkg.com/react-native-quick-crypto/-/react-native-quick-crypto-0.7.0-rc.9.tgz#2ce72ed38db14c26c0b55b8dcb01da16dc25ff15" - integrity sha512-xs6IpzKnxsFQ47r1d7KXZN7ZJfBM2qIPd6MPFnLtPwAPV8ObBjxjnfnV92npzRLMadicIHmXXN86cb2bDMWk8g== + version "0.7.0-rc.10" + resolved "https://registry.yarnpkg.com/react-native-quick-crypto/-/react-native-quick-crypto-0.7.0-rc.10.tgz#8d527965974ed9e0d1ba5e552ad20a41f4b65dd5" + integrity sha512-7EyQaLie+yNGfRonr5GNtRyO+AClTC3+bcrXifyqPDEYqq/YUQFiylcrQXTIq2yReOUqyHcPRrH0pMxb9Ck8Dg== dependencies: "@craftzdog/react-native-buffer" "^6.0.5" events "^3.3.0" @@ -7057,9 +7180,9 @@ react-native-reanimated@~3.11.0: invariant "^2.2.4" react-native-safe-area-context@~4.10.3: - version "4.10.4" - resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.10.4.tgz#2c13448a99fc85f05e7e94549a986ff06fce2a6f" - integrity sha512-rkpI8TALvWfTcCgsxWsVrlxycbCawjnkURocH0JqYT5jr4jZcOG9oAevgEL6EKiyhtGi/l73ZKWr55Im0eTTRg== + version "4.10.5" + resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.10.5.tgz#a9c677a48bd273afa6876772062ce08e8af1f18d" + integrity sha512-Wyb0Nqw2XJ6oZxW/cK8k5q7/UAhg/wbEG6UVf89rQqecDZTDA5ic//P9J6VvJRVZerzGmxWQpVuM7f+PRYUM4g== react-native-screens@~3.31.1: version "3.31.1" @@ -7508,6 +7631,15 @@ secp256k1@^3.5.2: nan "^2.14.0" safe-buffer "^5.1.2" +secp256k1@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-5.0.0.tgz#be6f0c8c7722e2481e9773336d351de8cddd12f7" + integrity sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^5.0.0" + node-gyp-build "^4.2.0" + selfsigned@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" @@ -8081,6 +8213,11 @@ ts-api-utils@^1.3.0: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== +tslib@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -8299,6 +8436,20 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +viem@2.8.6: + version "2.8.6" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.8.6.tgz#7467a0f113b4b13dd53fde4797aec1e686672f03" + integrity sha512-LqxLOSFtXfbC3tsiZ8Km8jKR4ktTOLfigL2dR9IN28He2+QrNhYvvwGPz3P4hbfU12Wvuxo6mWGZ2L1lpNtvrA== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@scure/bip32" "1.3.2" + "@scure/bip39" "1.2.1" + abitype "1.0.0" + isows "1.0.3" + ws "8.13.0" + vlq@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" @@ -8460,22 +8611,27 @@ write-file-atomic@^4.0.2: imurmurhash "^0.1.4" signal-exit "^3.0.7" +ws@8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +ws@8.17.1, ws@~8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + ws@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== + version "6.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.3.tgz#ccc96e4add5fd6fedbc491903075c85c5a11d9ee" + integrity sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA== dependencies: async-limiter "~1.0.0" ws@^7, ws@^7.5.1: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@~8.11.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" - integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== xmlhttprequest-ssl@~2.0.0: version "2.0.0" @@ -8572,3 +8728,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod@^3.22.4: + version "3.23.8" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" + integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== From 3c1d31fb544974862ed60a03a7541ea97c2af37d Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Sun, 23 Jun 2024 15:03:45 +0800 Subject: [PATCH 02/28] adjust evm keypair --- src/lib/wallet.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lib/wallet.ts b/src/lib/wallet.ts index e317c562..e56859b3 100644 --- a/src/lib/wallet.ts +++ b/src/lib/wallet.ts @@ -273,7 +273,7 @@ export function generateMultisigAddressEVM( } // given xpriv of our party, generate keypair consisting of privateKey in and public key belonging to it -export function generateRawAddressKeypair( +export function generateAddressKeypairEVM( xpriv: string, typeIndex: 0 | 1, addressIndex: number, @@ -287,7 +287,8 @@ export function generateRawAddressKeypair( .deriveChild(addressIndex); const publicKey = Buffer.from(externalAddress.publicKey!).toString('hex'); - const privateKey = Buffer.from(externalAddress.privateKey!).toString('hex'); + const privateKey = + '0x' + Buffer.from(externalAddress.privateKey!).toString('hex'); return { privKey: privateKey, pubKey: publicKey }; } @@ -301,7 +302,7 @@ export function generateAddressKeypair( ): keyPair { const { chainType } = blockchains[chain]; if (chainType === 'evm') { - return generateRawAddressKeypair(xpriv, typeIndex, addressIndex, chain); + return generateAddressKeypairEVM(xpriv, typeIndex, addressIndex, chain); } const libID = getLibId(chain); const bipParams = blockchains[chain].bip32; From 533723a4d924a2c4bc1783ef14c6d34df750a84a Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Fri, 28 Jun 2024 11:17:02 +0800 Subject: [PATCH 03/28] generate public nonces --- package.json | 2 +- src/lib/wallet.ts | 22 +++++- src/screens/Home/Home.tsx | 25 +++++- src/types.d.ts | 14 ++++ yarn.lock | 160 +++++++++++++++++++------------------- 5 files changed, 138 insertions(+), 85 deletions(-) diff --git a/package.json b/package.json index 52c42584..7bc74b15 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "@react-navigation/native": "~6.1.17", "@react-navigation/stack": "~6.3.29", "@reduxjs/toolkit": "~2.2.5", - "@runonflux/aa-schnorr-multisig-sdk": "~1.0.1", + "@runonflux/aa-schnorr-multisig-sdk": "~1.0.2", "@runonflux/react-native-step-indicator": "~1.0.0", "@runonflux/utxo-lib": "~1.0.0", "@scure/bip32": "~1.4.0", diff --git a/src/lib/wallet.ts b/src/lib/wallet.ts index e56859b3..cbfd6dbb 100644 --- a/src/lib/wallet.ts +++ b/src/lib/wallet.ts @@ -5,7 +5,14 @@ import { HDKey } from '@scure/bip32'; import * as bip39 from '@scure/bip39'; import { wordlist } from '@scure/bip39/wordlists/english'; import { toCashAddress } from 'bchaddrjs'; -import { keyPair, minHDKey, multisig, xPrivXpub, cryptos } from '../types'; +import { + keyPair, + minHDKey, + multisig, + xPrivXpub, + cryptos, + publicPrivateNonce, +} from '../types'; import { blockchains } from '@storage/blockchains'; export function getLibId(chain: keyof cryptos): string { @@ -369,3 +376,16 @@ export function generateInternalIdentityAddress( return address; } + +export function generatePublicNonce(): publicPrivateNonce { + // generate public nonce for evm + const publicNonce = aaSchnorrMultisig.core._generateNonce(); + + const ppNonce = { + k: publicNonce.k.toString('hex'), + kTwo: publicNonce.kTwo.toString('hex'), + kPublic: publicNonce.kPublic.toString('hex'), + kTwoPublic: publicNonce.kTwoPublic.toString('hex'), + }; + return ppNonce; +} diff --git a/src/screens/Home/Home.tsx b/src/screens/Home/Home.tsx index f442868c..60654d34 100644 --- a/src/screens/Home/Home.tsx +++ b/src/screens/Home/Home.tsx @@ -25,7 +25,7 @@ import EncryptedStorage from 'react-native-encrypted-storage'; import Toast from 'react-native-toast-message'; import axios from 'axios'; import { sspConfig } from '@storage/ssp'; -import { cryptos, utxo } from '../../types'; +import { cryptos, utxo, syncSSPRelay, publicNonce } from '../../types'; import { blockchains } from '@storage/blockchains'; const CryptoJS = require('crypto-js'); @@ -36,6 +36,7 @@ import { generateMultisigAddress, generateInternalIdentityAddress, generateAddressKeypair, + generatePublicNonce, } from '../../lib/wallet'; import { @@ -247,13 +248,31 @@ function Home({ navigation }: Props) { ).toString(); setXpubWallet(chain, encryptedXpubWallet); // tell ssp relay that we are synced, post data to ssp sync - const syncData = { + const syncData: syncSSPRelay = { chain, walletIdentity: sspWalletInternalIdentity, keyXpub: xpubKeyDecrypted, wkIdentity: sspWalletKeyInternalIdentity, keyToken: await getFCMToken(), }; + // == EVM == + if (blockchains[chain].chainType === 'evm') { + const ppNonces = []; + // generate and replace nonces + for (let i = 0; i < 50; i += 1) { + // max 50 txs + const nonce = generatePublicNonce(); + ppNonces.push(nonce); + } + // @TODO save these to our encrypted storage + // on publicNonces delete k and kTwo, leave only public parts + const publicNonces: publicNonce[] = ppNonces.map((nonce) => ({ + kPublic: nonce.kPublic, + kTwoPublic: nonce.kTwoPublic, + })); + syncData.publicNonces = publicNonces; + } + // == EVM end console.log(syncData); await axios.post(`https://${sspConfig().relay}/v1/sync`, syncData); setSyncReq(''); @@ -326,7 +345,7 @@ function Home({ navigation }: Props) { setSspWalletInternalIdentity(generatedSspWalletInternalIdentity), ); // tell ssp relay that we are synced, post data to ssp sync - const syncData = { + const syncData: syncSSPRelay = { chain: identityChain, walletIdentity: generatedSspWalletInternalIdentity, keyXpub: xpubKeyDecrypted, diff --git a/src/types.d.ts b/src/types.d.ts index 3a39a625..f39aef69 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -221,11 +221,18 @@ export interface evm_call { result: string; } +export interface publicNonce { + kPublic: string; + kTwoPublic: string; +} + export interface syncSSPRelay { chain: string; walletIdentity: string; keyXpub: string; wkIdentity: string; + keyToken?: string | null; + publicNonces?: publicNonce[]; } export interface actionSSPRelay { @@ -305,3 +312,10 @@ export interface currencySSPRelay { fiat: currency; crypto: cryptos; } + +export interface publicPrivateNonce { + k: string; + kTwo: string; + kPublic: string; + kTwoPublic: string; +} diff --git a/yarn.lock b/yarn.lock index 47c5459a..09a70b4f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2049,10 +2049,10 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@runonflux/aa-schnorr-multisig-sdk@~1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@runonflux/aa-schnorr-multisig-sdk/-/aa-schnorr-multisig-sdk-1.0.1.tgz#77281c8c824e721766d56a558dacb2bfa67ab32f" - integrity sha512-skiJVeEcfpHIWx5ssk7OXynhh4ffz2gfTtgHXOvfEgDDQyT0wnW2ygX1pdSO7/bT22QK8AVuJ8Ny4UPdV8HdoA== +"@runonflux/aa-schnorr-multisig-sdk@~1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@runonflux/aa-schnorr-multisig-sdk/-/aa-schnorr-multisig-sdk-1.0.2.tgz#1611e045daacc42d1dcd16a1088f87f16db90e9a" + integrity sha512-abSfFQNMB+i7gJfX6XT9bIyz3aIZGNVwGTzdOZIdp2j2NAn6yBlLYc/FdwfmBX8252uvBIytSpxrBBHxgiFQzw== dependencies: "@alchemy/aa-core" "^3.12.3" bigi "^1.4.2" @@ -2385,9 +2385,9 @@ "@types/node" "*" "@types/node@*", "@types/node@~20.14.0": - version "20.14.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.7.tgz#342cada27f97509eb8eb2dbc003edf21ce8ab5a8" - integrity sha512-uTr2m2IbJJucF3KUxgnGOZvYbN0QgkGyWxG6973HCpMYFy2KfcgYuIwkJQMQkt1VbBMlvWRbpshFTLxnxCZjKQ== + version "20.14.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.9.tgz#12e8e765ab27f8c421a1820c99f5f313a933b420" + integrity sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg== dependencies: undici-types "~5.26.4" @@ -2397,9 +2397,9 @@ integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== "@types/node@^18.0.0": - version "18.19.38" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.38.tgz#cf4f04c1dab1fcaaa514ec789cf5125184c8c5d8" - integrity sha512-SApYXUF7si4JJ+lO2o6X60OPOnA6wPpbiB09GMCkQ+JAwpa9hxUVG8p7GzA08TKQn5OhzK57rj1wFj+185YsGg== + version "18.19.39" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.39.tgz#c316340a5b4adca3aee9dcbf05de385978590593" + integrity sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ== dependencies: undici-types "~5.26.4" @@ -2480,29 +2480,29 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^7.1.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.1.tgz#cdc521c8bca38b55585cf30db787fb2abad3f9fd" - integrity sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg== + version "7.14.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.14.1.tgz#90e2f76a5930d553ede124e1f541a39b4417465e" + integrity sha512-aAJd6bIf2vvQRjUG3ZkNXkmBpN+J7Wd0mfQiiVCJMu9Z5GcZZdcc0j8XwN/BM97Fl7e3SkTXODSk4VehUv7CGw== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.13.1" - "@typescript-eslint/type-utils" "7.13.1" - "@typescript-eslint/utils" "7.13.1" - "@typescript-eslint/visitor-keys" "7.13.1" + "@typescript-eslint/scope-manager" "7.14.1" + "@typescript-eslint/type-utils" "7.14.1" + "@typescript-eslint/utils" "7.14.1" + "@typescript-eslint/visitor-keys" "7.14.1" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" "@typescript-eslint/parser@^7.1.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.13.1.tgz#fac57811b3e519185f7259bac312291f7b9c4e72" - integrity sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A== - dependencies: - "@typescript-eslint/scope-manager" "7.13.1" - "@typescript-eslint/types" "7.13.1" - "@typescript-eslint/typescript-estree" "7.13.1" - "@typescript-eslint/visitor-keys" "7.13.1" + version "7.14.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.14.1.tgz#13d97f357aed3c5719f259a6cc3d1a1f065d3692" + integrity sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA== + dependencies: + "@typescript-eslint/scope-manager" "7.14.1" + "@typescript-eslint/types" "7.14.1" + "@typescript-eslint/typescript-estree" "7.14.1" + "@typescript-eslint/visitor-keys" "7.14.1" debug "^4.3.4" "@typescript-eslint/scope-manager@5.62.0": @@ -2513,21 +2513,21 @@ "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/scope-manager@7.13.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz#c08041206904bf36f0e6997efdb0ca775e0c452e" - integrity sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg== +"@typescript-eslint/scope-manager@7.14.1": + version "7.14.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.14.1.tgz#63de7a577bc6fe8ee6e412a5b85499f654b93ee5" + integrity sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA== dependencies: - "@typescript-eslint/types" "7.13.1" - "@typescript-eslint/visitor-keys" "7.13.1" + "@typescript-eslint/types" "7.14.1" + "@typescript-eslint/visitor-keys" "7.14.1" -"@typescript-eslint/type-utils@7.13.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.13.1.tgz#63bec3f1fb43cf0bc409cbdb88ef96d118ca8632" - integrity sha512-aWDbLu1s9bmgPGXSzNCxELu+0+HQOapV/y+60gPXafR8e2g1Bifxzevaa+4L2ytCWm+CHqpELq4CSoN9ELiwCg== +"@typescript-eslint/type-utils@7.14.1": + version "7.14.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.14.1.tgz#c183f2f28c4c8578eb80aebc4ac9ace400160af6" + integrity sha512-/MzmgNd3nnbDbOi3LfasXWWe292+iuo+umJ0bCCMCPc1jLO/z2BQmWUUUXvXLbrQey/JgzdF/OV+I5bzEGwJkQ== dependencies: - "@typescript-eslint/typescript-estree" "7.13.1" - "@typescript-eslint/utils" "7.13.1" + "@typescript-eslint/typescript-estree" "7.14.1" + "@typescript-eslint/utils" "7.14.1" debug "^4.3.4" ts-api-utils "^1.3.0" @@ -2536,10 +2536,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/types@7.13.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.13.1.tgz#787db283bd0b58751094c90d5b58bbf5e9fc9bd8" - integrity sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw== +"@typescript-eslint/types@7.14.1": + version "7.14.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.14.1.tgz#a43a540dbe5df7f2a11269683d777fc50b4350aa" + integrity sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" @@ -2554,13 +2554,13 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@7.13.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz#3412841b130e070db2f675e3d9b8cb1ae49e1c3f" - integrity sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw== +"@typescript-eslint/typescript-estree@7.14.1": + version "7.14.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.14.1.tgz#ba7c9bac8744487749d19569e254d057754a1575" + integrity sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA== dependencies: - "@typescript-eslint/types" "7.13.1" - "@typescript-eslint/visitor-keys" "7.13.1" + "@typescript-eslint/types" "7.14.1" + "@typescript-eslint/visitor-keys" "7.14.1" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -2568,15 +2568,15 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@7.13.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.13.1.tgz#611083379caa0d3a2c09d126c65065a3e4337ba2" - integrity sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ== +"@typescript-eslint/utils@7.14.1": + version "7.14.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.14.1.tgz#3307b8226f99103dca2133d0ebcae38419d82c9d" + integrity sha512-CMmVVELns3nak3cpJhZosDkm63n+DwBlDX8g0k4QUa9BMnF+lH2lr3d130M1Zt1xxmB3LLk3NV7KQCq86ZBBhQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "7.13.1" - "@typescript-eslint/types" "7.13.1" - "@typescript-eslint/typescript-estree" "7.13.1" + "@typescript-eslint/scope-manager" "7.14.1" + "@typescript-eslint/types" "7.14.1" + "@typescript-eslint/typescript-estree" "7.14.1" "@typescript-eslint/utils@^5.10.0": version "5.62.0" @@ -2600,12 +2600,12 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@7.13.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz#9c229a795a919db61f2d7f2337ef584ac05fbe96" - integrity sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA== +"@typescript-eslint/visitor-keys@7.14.1": + version "7.14.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.14.1.tgz#cc79b5ea154aea734b2a13b983670749f5742274" + integrity sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA== dependencies: - "@typescript-eslint/types" "7.13.1" + "@typescript-eslint/types" "7.14.1" eslint-visitor-keys "^3.4.3" "@ungap/structured-clone@^1.2.0": @@ -3280,9 +3280,9 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001629: - version "1.0.30001636" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz#b15f52d2bdb95fad32c2f53c0b68032b85188a78" - integrity sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg== + version "1.0.30001637" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001637.tgz#d9fab531493d9ef46a8ff305e9812190ac463f21" + integrity sha512-1x0qRI1mD1o9e+7mBI7XtzFAP4XszbHaVWsMiGbSPLYekKTJF7K+FNk6AsXH4sUpc+qrsI3pVgf1Jdl/uGkuSQ== cashaddrjs@0.4.4: version "0.4.4" @@ -3926,9 +3926,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.796: - version "1.4.808" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.808.tgz#85b2f93a5e32c2949a1a4d39375851945c936835" - integrity sha512-0ItWyhPYnww2VOuCGF4s1LTfbrdAV2ajy/TN+ZTuhR23AHI6rWHCrBXJ/uxoXOvRRqw8qjYVrG81HFI7x/2wdQ== + version "1.4.812" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.812.tgz#21b78709c5a13af5d5c688d135a22dcea7617acf" + integrity sha512-7L8fC2Ey/b6SePDFKR2zHAy4mbdp1/38Yk5TsARO66W3hC5KEaeKMMHoxwtuH+jcu2AYLSn9QX04i95t6Fl1Hg== elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.5" @@ -4602,9 +4602,9 @@ flow-enums-runtime@^0.0.6: integrity sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw== flow-parser@0.*: - version "0.238.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.238.0.tgz#b465753c2630a38f459413a745c69ec11a0b5291" - integrity sha512-VE7XSv1epljsIN2YeBnxCmGJihpNIAnLLu/pPOdA+Gkso7qDltJwUi6vfHjgxdBbjSdAuPGnhuOHJUQG+yYwIg== + version "0.238.2" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.238.2.tgz#0faddaa65eaac8a893168dba810780b072599d62" + integrity sha512-fs7FSnzzKF6oSzjk14JlBHt82DPchYHVsXtPi4Fkn+qrunVjWaBZY7nSO/mC9X4l9+wRah/R69DRd5NGDOrWqw== follow-redirects@^1.15.6: version "1.15.6" @@ -6388,9 +6388,9 @@ minimatch@^8.0.2: brace-expansion "^2.0.1" minimatch@^9.0.4: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" @@ -6571,9 +6571,9 @@ object-assign@^4.1.1: integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + version "1.13.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== object-is@^1.1.5: version "1.1.6" @@ -7044,9 +7044,9 @@ range-parser@~1.2.1: integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== react-devtools-core@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-5.2.0.tgz#072ecd2d84d3653817cc11e4b16f60a3c2b705f9" - integrity sha512-vZK+/gvxxsieAoAyYaiRIVFxlajb7KXhgBDV7OsoMzaAE+IqGpoxusBjIgq5ibqA2IloKu0p9n7tE68z1xs18A== + version "5.3.0" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-5.3.0.tgz#8062c25a4707c3216333270210bfe06871f7eed4" + integrity sha512-IG3T+azv48Oc5VLdHR4XdBNKNZIUOKRtx0sJMRvb++Zom/uqtx73j6u37JCsIBNIaq6vA7RPH5Bbcf/Wj53KXA== dependencies: shell-quote "^1.6.1" ws "^7" @@ -8416,9 +8416,9 @@ utils-merge@1.0.1: integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== v8-to-istanbul@^9.0.1: - version "9.2.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" - integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== + version "9.3.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" + integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" From b9ca25909833cb3983bc7d752a4ed32a829a9ac3 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Fri, 28 Jun 2024 22:24:58 +0800 Subject: [PATCH 04/28] store encrypted public nonces --- src/screens/Home/Home.tsx | 8 +++++++- src/store/ssp/index.ts | 7 +++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/screens/Home/Home.tsx b/src/screens/Home/Home.tsx index 60654d34..116576fd 100644 --- a/src/screens/Home/Home.tsx +++ b/src/screens/Home/Home.tsx @@ -56,6 +56,7 @@ import { import { setSspWalletKeyInternalIdentity, setSspWalletInternalIdentity, + setSspKeyPublicNonces, } from '../../store/ssp'; import { useAppSelector, useAppDispatch } from '../../hooks'; @@ -264,7 +265,12 @@ function Home({ navigation }: Props) { const nonce = generatePublicNonce(); ppNonces.push(nonce); } - // @TODO save these to our encrypted storage + const stringifiedNonces = JSON.stringify(ppNonces); + const encryptedNonces = CryptoJS.AES.encrypt( + stringifiedNonces, + pwForEncryption, + ).toString(); + dispatch(setSspKeyPublicNonces(encryptedNonces)); // on publicNonces delete k and kTwo, leave only public parts const publicNonces: publicNonce[] = ppNonces.map((nonce) => ({ kPublic: nonce.kPublic, diff --git a/src/store/ssp/index.ts b/src/store/ssp/index.ts index 219b9d34..74d1903d 100644 --- a/src/store/ssp/index.ts +++ b/src/store/ssp/index.ts @@ -4,6 +4,7 @@ export interface seedPhraseState { seedPhrase: string; sspWalletKeyInternalIdentity: string; sspWalletInternalIdentity: string; + publicNonces: string; identityChain: 'btc'; } @@ -11,6 +12,7 @@ const initialStateSeedPhrase: seedPhraseState = { seedPhrase: '', sspWalletKeyInternalIdentity: '', sspWalletInternalIdentity: '', + publicNonces: '', identityChain: 'btc', }; @@ -28,10 +30,14 @@ const seedPhraseSlice = createSlice({ setSspWalletInternalIdentity: (state, action: PayloadAction) => { state.sspWalletInternalIdentity = action.payload; }, + setSspKeyPublicNonces: (state, action: PayloadAction) => { + state.publicNonces = action.payload; + }, setSSPInitialState: (state) => { state.seedPhrase = ''; state.sspWalletKeyInternalIdentity = ''; state.sspWalletInternalIdentity = ''; + state.publicNonces = ''; }, }, }); @@ -40,6 +46,7 @@ export const { setSeedPhrase, setSspWalletKeyInternalIdentity, setSspWalletInternalIdentity, + setSspKeyPublicNonces, setSSPInitialState, } = seedPhraseSlice.actions; From 901eea0c04125283933908867a4a5f72c4eccc1d Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Sat, 29 Jun 2024 10:33:59 +0800 Subject: [PATCH 05/28] signAndBroadcastEVM --- Gemfile.lock | 6 +- ios/Podfile.lock | 8 +- package.json | 6 +- src/lib/constructTx.ts | 77 +++++++++++++++++ src/types.d.ts | 189 +++++++++++++++++++++++++++++++++++++++-- yarn.lock | 79 +++++++++++------ 6 files changed, 325 insertions(+), 40 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index ef0027e7..ea229728 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,8 +10,8 @@ GEM i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) - addressable (2.8.6) - public_suffix (>= 2.0.2, < 6.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) algoliasearch (1.27.5) httpclient (~> 2.8, >= 2.8.3) json (>= 1.5.1) @@ -68,7 +68,7 @@ GEM i18n (1.14.5) concurrent-ruby (~> 1.0) json (2.7.2) - minitest (5.23.1) + minitest (5.24.0) molinillo (0.8.0) nanaimo (0.3.0) nap (1.1.0) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 46558203..2ef5c540 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1112,7 +1112,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-quick-crypto (0.7.0-rc.10): + - react-native-quick-crypto (0.7.0): - DoubleConversion - glog - hermes-engine @@ -1135,7 +1135,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-safe-area-context (4.10.5): + - react-native-safe-area-context (4.10.7): - React-Core - React-nativeconfig (0.74.2) - React-NativeModulesApple (0.74.2): @@ -1753,8 +1753,8 @@ SPEC CHECKSUMS: react-native-get-random-values: 21325b2244dfa6b58878f51f9aa42821e7ba3d06 react-native-mmkv: 8c9a677e64a1ac89b0c6cf240feea528318b3074 react-native-quick-base64: a74c4b2607b9de016877a8edb776b6ac59785809 - react-native-quick-crypto: 8595b00c720afcb6986a2e8d0b4ac026d53c4fb3 - react-native-safe-area-context: a240ad4b683349e48b1d51fed1611138d1bdad97 + react-native-quick-crypto: ff585b6d4185705f0319a478761919c8c68a7d56 + react-native-safe-area-context: 422017db8bcabbada9ad607d010996c56713234c React-nativeconfig: 9f223cd321823afdecf59ed00861ab2d69ee0fc1 React-NativeModulesApple: ff7efaff7098639db5631236cfd91d60abff04c0 React-perflogger: 32ed45d9cee02cf6639acae34251590dccd30994 diff --git a/package.json b/package.json index 7bc74b15..9372199c 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "postinstall": "node_modules/.bin/rn-nodeify --install 'events,assert,util,buffer,stream,process' --yarn --hack && patch-package && react-native setup-ios-permissions" }, "dependencies": { + "@alchemy/aa-core": "3.12.0", "@notifee/react-native": "~7.8.2", "@react-native-firebase/app": "~20.1.0", "@react-native-firebase/messaging": "~20.1.0", @@ -53,7 +54,7 @@ "react-native-permissions": "~3.10.1", "react-native-popup-menu": "~0.16.1", "react-native-quick-base64": "~2.1.2", - "react-native-quick-crypto": "~0.7.0-rc.9", + "react-native-quick-crypto": "~0.7.0", "react-native-reanimated": "~3.11.0", "react-native-safe-area-context": "~4.10.3", "react-native-screens": "~3.31.1", @@ -65,7 +66,8 @@ "redux-persist": "~6.0.0", "socket.io-client": "~4.7.5", "stream-browserify": "~3.0.0", - "util": "~0.12.5" + "util": "~0.12.5", + "viem": "2.10.8" }, "devDependencies": { "@types/bchaddrjs": "~0.4.3", diff --git a/src/lib/constructTx.ts b/src/lib/constructTx.ts index b809625f..fc723f49 100644 --- a/src/lib/constructTx.ts +++ b/src/lib/constructTx.ts @@ -1,4 +1,8 @@ import utxolib from '@runonflux/utxo-lib'; +import * as accountAbstraction from '@runonflux/aa-schnorr-multisig-sdk'; +import { getEntryPoint, createSmartAccountClient } from '@alchemy/aa-core'; +import { http as viemHttp } from 'viem'; +import * as viemChains from 'viem/chains'; import { Buffer } from 'buffer'; import axios from 'axios'; import BigNumber from 'bignumber.js'; @@ -243,3 +247,76 @@ export async function broadcastTx( throw error; } } + +// return txhash +export async function signAndBroadcastEVM( + rawTx: string, + chain: keyof cryptos, + privateKey: `0x${string}`, // ssp +): Promise { + try { + const blockchainConfig = blockchains[chain]; + const backendConfig = backends()[chain]; + const accountSalt = blockchainConfig.accountSalt; + const schnorrSigner2 = + accountAbstraction.helpers.SchnorrHelpers.createSchnorrSigner(privateKey); + + const multisigUserOpJSON = JSON.parse(rawTx); + const multiSigUserOp = + accountAbstraction.userOperation.MultiSigUserOp.fromJson( + multisigUserOpJSON, + ); + multiSigUserOp.signMultiSigHash(schnorrSigner2); // this is not part of ssp wallet + + const summedSignature = multiSigUserOp.getSummedSigData(); + + const rpcUrl = backendConfig.node; + + const transport = viemHttp(rpcUrl); + const CHAIN = viemChains[blockchainConfig.libid as keyof typeof viemChains]; + + const publicKeys = multiSigUserOp._getPublicKeys(); + const combinedAddresses = + accountAbstraction.helpers.SchnorrHelpers.getAllCombinedAddrFromKeys( + publicKeys, + publicKeys.length, + ); + const multiSigSmartAccount = + await accountAbstraction.accountAbstraction.createMultiSigSmartAccount({ + // @ts-ignore + transport, + // @ts-ignore + chain: CHAIN, + combinedAddress: combinedAddresses, + salt: accountAbstraction.helpers.create2Helpers.saltToHex(accountSalt), + // @ts-ignore + entryPoint: getEntryPoint(CHAIN), + }); + + const smartAccountClient = createSmartAccountClient({ + // @ts-ignore + transport, + // @ts-ignore + chain: CHAIN, + // @ts-ignore + account: multiSigSmartAccount, + }); + + const uoHash = await smartAccountClient.sendRawUserOperation( + { + ...multisigUserOpJSON.userOpRequest, + signature: summedSignature, + }, + multiSigSmartAccount.getEntryPoint().address, + ); + + console.log(uoHash); + return uoHash; + + // const txHash = await smartAccountClient.waitForUserOperationTransaction({ hash: uoHash }) + // console.log("tx", txHash) + } catch (error) { + console.log(error); + throw error; + } +} diff --git a/src/types.d.ts b/src/types.d.ts index f39aef69..b26a62d2 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -178,6 +178,26 @@ export interface wallet { nodes?: node[]; } +export interface node { + txid: string; + vout: number; + amount: string; + name: string; + ip: string; + status: string; +} + +export interface contact { + id: number; + name: string; + address: string; +} + +export interface txIdentifier { + txid: string; + vout: number; +} + export type wallets = Record; export type generatedWallets = Record; export interface transaction { @@ -189,9 +209,11 @@ export interface transaction { amount: string; // satoshis message: string; receiver: string; - size: number; + size?: number; vsize?: number; utxos?: txIdentifier[]; + type?: string; // evm + isError?: boolean; } export interface pendingTransaction { @@ -221,11 +243,70 @@ export interface evm_call { result: string; } +export interface etherscan_external_tx { + blockNumber: string; + timeStamp: string; + hash: string; + from: string; + to: string; + nonce: string; + blockHash: string; + transactionIndex: string; + value: string; + gas: string; + gasPrice: string; + cumulativeGasUsed: string; + gasUsed: string; + isError: string; + errCode: string; + txreceipt_status: string; + input: string; + confirmations: string; + methodId: string; + functionName: string; +} + +export interface etherscan_internal_tx { + blockNumber: string; + timeStamp: string; + hash: string; + from: string; + to: string; + value: string; + contractAddress: string; + input: string; + type: string; + gas: string; + gasUsed: string; + traceId: string; + isError: string; + errCode: string; +} + +export interface etherscan_call_external_txs { + status: string; + message: string; + result: etherscan_external_tx[]; +} + +export interface etherscan_call_internal_txs { + status: string; + message: string; + result: etherscan_internal_tx[]; +} + export interface publicNonce { kPublic: string; kTwoPublic: string; } +export interface publicPrivateNonce { + k: string; + kTwo: string; + kPublic: string; + kTwoPublic: string; +} + export interface syncSSPRelay { chain: string; walletIdentity: string; @@ -308,14 +389,110 @@ export interface cryptos { sepolia: number; } +export interface externalIdentity { + privKey: string; + pubKey: string; + address: string; +} + export interface currencySSPRelay { fiat: currency; crypto: cryptos; } -export interface publicPrivateNonce { - k: string; - kTwo: string; - kPublic: string; - kTwoPublic: string; +export interface networkFee { + coin: string; + economy: number; + normal: number; + fast: number; + recommended: number; +} + +export type networkFeesSSPRelay = networkFee[]; + +export interface confirmedNodeInsight { + collateral: string; + txhash: string; + outidx: string; + ip: string; + network: string; + added_height: number; + confirmed_height: number; + last_confirmed_height: number; + last_paid_height: number; + tier: string; + payment_address: string; + pubkey: string; + activesince: string; + lastpaid: string; + amount: string; + rank: number; +} + +export interface confirmedNodesInsight { + result: confirmedNodeInsight[]; +} + +export interface dosNodeFlux { + collateral: string; + added_height: number; + payment_address: string; + eligible_in: number; + amount: string; +} + +export interface dosFlux { + status: string; + data: dosNodeFlux[]; +} + +export interface dosFluxInsight { + error: string; + id: number; + result: dosNodeFlux[]; +} + +export interface startNodeFlux { + collateral: string; + added_height: number; + payment_address: string; + expires_in: number; + amount: string; +} + +export interface startFlux { + status: string; + data: startNodeFlux[]; +} + +export interface startFluxInsight { + error: string; + id: number; + result: startNodeFlux[]; +} + +export interface fusionPAavailable { + status: string; + data: { + address: string; + totalClaim: number; + totalMiningFees: number; + totalSwapFees: number; + totalFee: number; + totalReward: number; + message: string; + code: number; + name: string; + }; +} + +export interface errorResponse { + message: string; + code: number; + name: string; +} + +export interface fusionMessage { + status: string; + data: errorResponse | string; } diff --git a/yarn.lock b/yarn.lock index 09a70b4f..0f515859 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,16 @@ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== +"@alchemy/aa-core@3.12.0": + version "3.12.0" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.12.0.tgz#e2ec025259f2a929e34574432a0648b0e49a0494" + integrity sha512-QPviMm2EtlNAF0aEAuRDVj2kYWJPlJWXlu/tirFAaUsGocH3F9tSDLT27E50GE+NfemDdRHTaeTqLX2Iwj7wNA== + dependencies: + abitype "^0.8.3" + eventemitter3 "^5.0.1" + viem "2.8.6" + zod "^3.22.4" + "@alchemy/aa-core@^3.12.3": version "3.18.2" resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.18.2.tgz#b11f189404e97132f5affab938b3d4040c99f475" @@ -1221,9 +1231,9 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": - version "4.10.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.1.tgz#361461e5cb3845d874e61731c11cfedd664d83a0" - integrity sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA== + version "4.11.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" + integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -2629,9 +2639,9 @@ abitype@^0.8.3: integrity sha512-bM4v2dKvX08sZ9IU38IN5BKmN+ZkOSd2oI4a9f0ejHYZQYV6cDr7j+d95ga0z2XHG36Y4jzoG5Z7qDqxp7fi/A== abitype@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.4.tgz#a817ff44860e8a84e9a37ed22aa9b738dbb51dba" - integrity sha512-UivtYZOGJGE8rsrM/N5vdRkUpqEZVmuTumfTuolm7m/6O09wprd958rx8kUBwVAAAhQDveGAgD0GJdBuR8s6tw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.5.tgz#29d0daa3eea867ca90f7e4123144c1d1270774b6" + integrity sha512-YzDhti7cjlfaBhHutMaboYB21Ha3rXR9QTkNJFzYC4kC8YclaiwPBBBJY8ejFdu2wnJeZCVZSMlQJ7fi8S6hsw== abort-controller@^3.0.0: version "3.0.0" @@ -3280,9 +3290,9 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001629: - version "1.0.30001637" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001637.tgz#d9fab531493d9ef46a8ff305e9812190ac463f21" - integrity sha512-1x0qRI1mD1o9e+7mBI7XtzFAP4XszbHaVWsMiGbSPLYekKTJF7K+FNk6AsXH4sUpc+qrsI3pVgf1Jdl/uGkuSQ== + version "1.0.30001638" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001638.tgz#598e1f0c2ac36f37ebc3f5b8887a32ca558e5d56" + integrity sha512-5SuJUJ7cZnhPpeLHaH0c/HPAnAHZvS6ElWyHK9GSIbVOQABLzowiI2pjmpvZ1WEbkyz46iFd4UXlOHR5SqgfMQ== cashaddrjs@0.4.4: version "0.4.4" @@ -3926,9 +3936,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.796: - version "1.4.812" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.812.tgz#21b78709c5a13af5d5c688d135a22dcea7617acf" - integrity sha512-7L8fC2Ey/b6SePDFKR2zHAy4mbdp1/38Yk5TsARO66W3hC5KEaeKMMHoxwtuH+jcu2AYLSn9QX04i95t6Fl1Hg== + version "1.4.814" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.814.tgz#176535a0b899c9c473464502ab77576aa8bb1cbe" + integrity sha512-GVulpHjFu1Y9ZvikvbArHmAhZXtm3wHlpjTMcXNGKl4IQ4jMQjlnz8yMQYYqdLHKi/jEL2+CBC2akWVCoIGUdw== elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.5" @@ -4602,9 +4612,9 @@ flow-enums-runtime@^0.0.6: integrity sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw== flow-parser@0.*: - version "0.238.2" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.238.2.tgz#0faddaa65eaac8a893168dba810780b072599d62" - integrity sha512-fs7FSnzzKF6oSzjk14JlBHt82DPchYHVsXtPi4Fkn+qrunVjWaBZY7nSO/mC9X4l9+wRah/R69DRd5NGDOrWqw== + version "0.238.3" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.238.3.tgz#a3b762913c016591c15a68165835e31cd085c8d0" + integrity sha512-hNUhucq8V6KWSX1skXUS3vnDmrRNuKWzDvEVK5b+n97uMF32zj2y8pmcLDQEqlY5u926B0GYGWT/3XhwDJfLOQ== follow-redirects@^1.15.6: version "1.15.6" @@ -5352,6 +5362,11 @@ isows@1.0.3: resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== +isows@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.4.tgz#810cd0d90cc4995c26395d2aa4cfa4037ebdf061" + integrity sha512-hEzjY+x9u9hPmBom9IIAqdJCwNLax+xrPb51vEPpERoFlIxgmZcHzsT5jKG06nvInKOBGvReAVz80Umed5CczQ== + istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" @@ -6057,9 +6072,9 @@ lower-case@^2.0.2: tslib "^2.0.3" lru-cache@^10.2.0: - version "10.2.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" - integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== + version "10.3.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.3.0.tgz#4a4aaf10c84658ab70f79a85a9a3f1e1fb11196b" + integrity sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ== lru-cache@^5.1.1: version "5.1.1" @@ -7154,10 +7169,10 @@ react-native-quick-base64@^2.0.5, react-native-quick-base64@~2.1.2: dependencies: base64-js "^1.5.1" -react-native-quick-crypto@~0.7.0-rc.9: - version "0.7.0-rc.10" - resolved "https://registry.yarnpkg.com/react-native-quick-crypto/-/react-native-quick-crypto-0.7.0-rc.10.tgz#8d527965974ed9e0d1ba5e552ad20a41f4b65dd5" - integrity sha512-7EyQaLie+yNGfRonr5GNtRyO+AClTC3+bcrXifyqPDEYqq/YUQFiylcrQXTIq2yReOUqyHcPRrH0pMxb9Ck8Dg== +react-native-quick-crypto@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/react-native-quick-crypto/-/react-native-quick-crypto-0.7.0.tgz#36011efa246c3b60acf91d26b92c95cdf566a46e" + integrity sha512-zM/lfBgg1bXdQLigsOlfflVt2erRRps/IFLuJ+HKwp5Nh2E3+mMRMTK+UOHMoNYJiE5fpcb4GSh23+YK9KHkAg== dependencies: "@craftzdog/react-native-buffer" "^6.0.5" events "^3.3.0" @@ -7180,9 +7195,9 @@ react-native-reanimated@~3.11.0: invariant "^2.2.4" react-native-safe-area-context@~4.10.3: - version "4.10.5" - resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.10.5.tgz#a9c677a48bd273afa6876772062ce08e8af1f18d" - integrity sha512-Wyb0Nqw2XJ6oZxW/cK8k5q7/UAhg/wbEG6UVf89rQqecDZTDA5ic//P9J6VvJRVZerzGmxWQpVuM7f+PRYUM4g== + version "4.10.7" + resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.10.7.tgz#91d04e510bf96e3c38bec2beb7ae37347522a503" + integrity sha512-Lq+gtuIF28mMtBacFchGpO1KHMTvzeb3ji1HAVnMTPe3qWR46Tb4AlztZTvTwUnpZ8JVaC9sKXnJHKmuaIQwXA== react-native-screens@~3.31.1: version "3.31.1" @@ -8436,6 +8451,20 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +viem@2.10.8: + version "2.10.8" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.10.8.tgz#31be422498eb20bc0d9a355bd0e001a2f2822b3f" + integrity sha512-ttCXlDmjjcZ8M/eJezXFzDtHj+RFOjEQ3elmXnCC7suXo/y8CuIM1LrIoyUFk7LKIE5E+bzmWUErS4u/MQBtpQ== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@scure/bip32" "1.3.2" + "@scure/bip39" "1.2.1" + abitype "1.0.0" + isows "1.0.4" + ws "8.13.0" + viem@2.8.6: version "2.8.6" resolved "https://registry.yarnpkg.com/viem/-/viem-2.8.6.tgz#7467a0f113b4b13dd53fde4797aec1e686672f03" From b7c2b02e8289f19fe1c50e3c01af8ade1c4d1f32 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Sat, 29 Jun 2024 12:48:17 +0800 Subject: [PATCH 06/28] decodeEVMTransactionForApproval finalise sending --- src/lib/transactions.ts | 61 +++++++++++++++++++++++++++++++++++++++ src/lib/wallet.ts | 2 +- src/screens/Home/Home.tsx | 48 ++++++++++++++++-------------- 3 files changed, 89 insertions(+), 22 deletions(-) diff --git a/src/lib/transactions.ts b/src/lib/transactions.ts index 3a8bebdd..78c1e179 100644 --- a/src/lib/transactions.ts +++ b/src/lib/transactions.ts @@ -1,5 +1,7 @@ import BigNumber from 'bignumber.js'; import utxolib from '@runonflux/utxo-lib'; +import { decodeFunctionData } from 'viem'; +import * as abi from '@runonflux/aa-schnorr-multisig-sdk/dist/abi'; import { toCashAddress } from 'bchaddrjs'; import { cryptos, utxo } from '../types'; @@ -19,6 +21,9 @@ export function decodeTransactionForApproval( utxos: utxo[], ) { try { + if (blockchains[chain].chainType === 'evm') { + return decodeEVMTransactionForApproval(rawTx, chain); + } const libID = getLibId(chain); const decimals = blockchains[chain].decimals; const cashAddrPrefix = blockchains[chain].cashaddr; @@ -122,3 +127,59 @@ export function decodeTransactionForApproval( return txInfo; } } + +interface decodedAbiData { + functionName: string; + args: [string, BigInt, string]; +} + +export function decodeEVMTransactionForApproval( + rawTx: string, + chain: keyof cryptos, +) { + try { + const decimals = blockchains[chain].decimals; + const multisigUserOpJSON = JSON.parse(rawTx); + const { callData, sender } = multisigUserOpJSON.userOpRequest; + + const decodedData: decodedAbiData = decodeFunctionData({ + abi: abi.MultiSigSmartAccount_abi, + data: callData, + }) as decodedAbiData; // Cast decodedData to decodedAbiData type. + + let txReceiver = 'decodingError'; + let amount = '0'; + let senderAddress = sender; + + if ( + decodedData && + decodedData.functionName === 'execute' && + decodedData.args && + decodedData.args.length === 3 + ) { + txReceiver = decodedData.args[0] as string; + amount = new BigNumber(decodedData.args[1].toString()) + .dividedBy(new BigNumber(10 ** decimals)) + .toFixed(); + } else { + throw new Error('Unexpected decoded data.'); + } + + const txInfo = { + sender: senderAddress, + receiver: txReceiver, + amount, + fee: '0', // @todo: calculate fee + }; + return txInfo; + } catch (error) { + console.log(error); + const txInfo = { + sender: 'decodingError', + receiver: 'decodingError', + amount: 'decodingError', + fee: 'decodingError', + }; + return txInfo; + } +} diff --git a/src/lib/wallet.ts b/src/lib/wallet.ts index cbfd6dbb..6e8e3f46 100644 --- a/src/lib/wallet.ts +++ b/src/lib/wallet.ts @@ -297,7 +297,7 @@ export function generateAddressKeypairEVM( const privateKey = '0x' + Buffer.from(externalAddress.privateKey!).toString('hex'); - return { privKey: privateKey, pubKey: publicKey }; + return { privKey: privateKey as `0x${string}`, pubKey: publicKey }; } // given xpriv of our party, generate keypair consisting of privateKey in WIF format and public key belonging to it diff --git a/src/screens/Home/Home.tsx b/src/screens/Home/Home.tsx index 116576fd..21dcce4e 100644 --- a/src/screens/Home/Home.tsx +++ b/src/screens/Home/Home.tsx @@ -44,6 +44,7 @@ import { finaliseTransaction, broadcastTx, fetchUtxos, + signAndBroadcastEVM, } from '../../lib/constructTx'; import { @@ -462,7 +463,7 @@ function Home({ navigation }: Props) { }); }; const handleTxRequest = async ( - rawTransactions: string, + rawTransaction: string, chain: keyof cryptos, path: string, utxos: utxo[] = [], @@ -471,7 +472,7 @@ function Home({ navigation }: Props) { if (utxos) { setTxUtxos(utxos); } - setRawTx(rawTransactions); + setRawTx(rawTransaction); setTxPath(path); }; const handleSyncRequest = async (xpubw: string, chain: keyof cryptos) => { @@ -479,7 +480,7 @@ function Home({ navigation }: Props) { setSyncReq(xpubw); }; const approveTransaction = async ( - rawTransactions: string, + rawTransaction: string, chain: keyof cryptos, derivationPath: string, suggestedUtxos: utxo[], @@ -521,30 +522,35 @@ function Home({ navigation }: Props) { addressIndex, chain, ); - const signedTx = await signTransaction( - rawTransactions, - chain, - keyPair.privKey, - addressDetails.redeemScript ?? '', - addressDetails.witnessScript ?? '', - utxos, - ); - const finalTx = finaliseTransaction(signedTx, chain); - console.log(finalTx); - const ttxid = await broadcastTx(finalTx, chain); - console.log(ttxid); + let txid = ''; + if (blockchains[chain].chainType === 'evm') { + txid = await signAndBroadcastEVM(rawTransaction, chain, keyPair.privKey as `0x${string}`); + } else { + const signedTx = await signTransaction( + rawTransaction, + chain, + keyPair.privKey, + addressDetails.redeemScript ?? '', + addressDetails.witnessScript ?? '', + utxos, + ); + const finalTx = finaliseTransaction(signedTx, chain); + console.log(finalTx); + txid = await broadcastTx(finalTx, chain); + } + console.log(txid); setRawTx(''); setTxPath(''); setTxUtxos([]); // here tell ssp-relay that we are finished, rewrite the request await postAction( 'txid', - ttxid, + txid, chain, derivationPath, sspWalletKeyInternalIdentity, ); - setTxid(ttxid); + setTxid(txid); } catch (error) { displayMessage('error', t('home:err_tx_failed')); console.log(error); @@ -594,8 +600,8 @@ function Home({ navigation }: Props) { } else if (dataToProcess.startsWith('0')) { // transaction // sign transaction - const rawTransactions = dataToProcess; - handleTxRequest(rawTransactions, chain, wallet); + const rawTransaction = dataToProcess; + handleTxRequest(rawTransaction, chain, wallet); setTimeout(() => { setIsManualInputModalOpen(false); }); @@ -669,8 +675,8 @@ function Home({ navigation }: Props) { handleSyncRequest(xpubw, chain); } else if (dataToProcess.startsWith('0')) { // transaction - const rawTransactions = dataToProcess; - handleTxRequest(rawTransactions, chain, wallet); + const rawTransaction = dataToProcess; + handleTxRequest(rawTransaction, chain, wallet); } else { setTimeout(() => { displayMessage('error', t('home:err_invalid_scanned_data')); From 0a01ec72447936c7d54c8e72a19d15fc2721a80c Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Sat, 29 Jun 2024 12:59:08 +0800 Subject: [PATCH 07/28] fix --- src/lib/transactions.ts | 2 +- src/screens/Home/Home.tsx | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lib/transactions.ts b/src/lib/transactions.ts index 78c1e179..bb6e5e03 100644 --- a/src/lib/transactions.ts +++ b/src/lib/transactions.ts @@ -149,7 +149,7 @@ export function decodeEVMTransactionForApproval( let txReceiver = 'decodingError'; let amount = '0'; - let senderAddress = sender; + const senderAddress = sender; if ( decodedData && diff --git a/src/screens/Home/Home.tsx b/src/screens/Home/Home.tsx index 21dcce4e..c8ff5ce7 100644 --- a/src/screens/Home/Home.tsx +++ b/src/screens/Home/Home.tsx @@ -522,9 +522,9 @@ function Home({ navigation }: Props) { addressIndex, chain, ); - let txid = ''; + let ttxid = ''; if (blockchains[chain].chainType === 'evm') { - txid = await signAndBroadcastEVM(rawTransaction, chain, keyPair.privKey as `0x${string}`); + ttxid = await signAndBroadcastEVM(rawTransaction, chain, keyPair.privKey as `0x${string}`); } else { const signedTx = await signTransaction( rawTransaction, @@ -536,21 +536,21 @@ function Home({ navigation }: Props) { ); const finalTx = finaliseTransaction(signedTx, chain); console.log(finalTx); - txid = await broadcastTx(finalTx, chain); + ttxid = await broadcastTx(finalTx, chain); } - console.log(txid); + console.log(ttxid); setRawTx(''); setTxPath(''); setTxUtxos([]); // here tell ssp-relay that we are finished, rewrite the request await postAction( 'txid', - txid, + ttxid, chain, derivationPath, sspWalletKeyInternalIdentity, ); - setTxid(txid); + setTxid(ttxid); } catch (error) { displayMessage('error', t('home:err_tx_failed')); console.log(error); From 9e9b5ba795c7dea316029f55cb3fac5ef53c46d4 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Sat, 29 Jun 2024 15:44:16 +0800 Subject: [PATCH 08/28] restore and use publicNonce --- src/lib/constructTx.ts | 46 +++++++++++++++++++++++++++++++++++++++ src/screens/Home/Home.tsx | 38 ++++++++++++++++++++++++++++---- 2 files changed, 80 insertions(+), 4 deletions(-) diff --git a/src/lib/constructTx.ts b/src/lib/constructTx.ts index fc723f49..f606cc4a 100644 --- a/src/lib/constructTx.ts +++ b/src/lib/constructTx.ts @@ -12,6 +12,7 @@ import { blockbookBroadcastTxResult, broadcastTxResult, cryptos, + publicPrivateNonce, } from '../types'; import { backends } from '@storage/backends'; @@ -248,11 +249,46 @@ export async function broadcastTx( } } +export function selectPublicNonce( + rawTx: string, + publicNonces: publicPrivateNonce[], // ssp Key +): publicPrivateNonce { + const multisigUserOpJSON = JSON.parse(rawTx); + const multiSigUserOp = + accountAbstraction.userOperation.MultiSigUserOp.fromJson( + multisigUserOpJSON, + ); + + // here restore public nonce + const txPublicNonces = multiSigUserOp._getPublicNonces(); + if (!publicNonces || !publicNonces.length) { + throw new Error('SSP Key Public nonces are missing'); + } + let nonceToUse; + for (let i = 0; i < txPublicNonces.length; i += 1) { + const nonceExists = publicNonces.find( + (n) => + txPublicNonces.kPublic.toString('hex') === n.kPublic && + txPublicNonces.kTwoPublic.toString('hex') === n.kTwoPublic, + ); + if (nonceExists) { + nonceToUse = nonceExists; + break; + } + } + + if (!nonceToUse) { + throw new Error('SSP Key Public nonces do not match'); + } + return nonceToUse; +} + // return txhash export async function signAndBroadcastEVM( rawTx: string, chain: keyof cryptos, privateKey: `0x${string}`, // ssp + publicNonceKey: publicPrivateNonce, // ssp Key ): Promise { try { const blockchainConfig = blockchains[chain]; @@ -266,6 +302,16 @@ export async function signAndBroadcastEVM( accountAbstraction.userOperation.MultiSigUserOp.fromJson( multisigUserOpJSON, ); + + const kPrivate = new accountAbstraction.types.Key( + Buffer.from(publicNonceKey.k, 'hex'), + ); + const kTwoPrivate = new accountAbstraction.types.Key( + Buffer.from(publicNonceKey.kTwo, 'hex'), + ); + + schnorrSigner2.restorePubNonces(kPrivate, kTwoPrivate); + multiSigUserOp.signMultiSigHash(schnorrSigner2); // this is not part of ssp wallet const summedSignature = multiSigUserOp.getSummedSigData(); diff --git a/src/screens/Home/Home.tsx b/src/screens/Home/Home.tsx index c8ff5ce7..c2e5cd0d 100644 --- a/src/screens/Home/Home.tsx +++ b/src/screens/Home/Home.tsx @@ -25,7 +25,13 @@ import EncryptedStorage from 'react-native-encrypted-storage'; import Toast from 'react-native-toast-message'; import axios from 'axios'; import { sspConfig } from '@storage/ssp'; -import { cryptos, utxo, syncSSPRelay, publicNonce } from '../../types'; +import { + cryptos, + utxo, + syncSSPRelay, + publicNonce, + publicPrivateNonce, +} from '../../types'; import { blockchains } from '@storage/blockchains'; const CryptoJS = require('crypto-js'); @@ -45,6 +51,7 @@ import { broadcastTx, fetchUtxos, signAndBroadcastEVM, + selectPublicNonce, } from '../../lib/constructTx'; import { @@ -102,6 +109,7 @@ function Home({ navigation }: Props) { const { xpubWallet, xpubKey, xprivKey } = useAppSelector( (state) => state[activeChain], ); + const { publicNonces } = useAppSelector((state) => state.ssp); const [activityStatus, setActivityStatus] = useState(false); const [submittingTransaction, setSubmittingTransaction] = useState(false); @@ -273,11 +281,11 @@ function Home({ navigation }: Props) { ).toString(); dispatch(setSspKeyPublicNonces(encryptedNonces)); // on publicNonces delete k and kTwo, leave only public parts - const publicNonces: publicNonce[] = ppNonces.map((nonce) => ({ + const pNs: publicNonce[] = ppNonces.map((nonce) => ({ kPublic: nonce.kPublic, kTwoPublic: nonce.kTwoPublic, })); - syncData.publicNonces = publicNonces; + syncData.publicNonces = pNs; } // == EVM end console.log(syncData); @@ -524,7 +532,29 @@ function Home({ navigation }: Props) { ); let ttxid = ''; if (blockchains[chain].chainType === 'evm') { - ttxid = await signAndBroadcastEVM(rawTransaction, chain, keyPair.privKey as `0x${string}`); + const pNs = CryptoJS.AES.decrypt(publicNonces, pwForEncryption); + const pNsDecrypted = pNs.toString(CryptoJS.enc.Utf8); + const pubNonces = JSON.parse(pNsDecrypted) as publicPrivateNonce[]; + const publicNonceKey = selectPublicNonce(rawTransaction, pubNonces); + // crucial delete nonce from publicNonces + const newPublicNonces = pubNonces.filter( + (nonce: publicPrivateNonce) => + nonce.kPublic !== publicNonceKey.kPublic, + ); + // encrypt and save new publicNonces + const stringifiedNonces = JSON.stringify(newPublicNonces); + const encryptedNonces = CryptoJS.AES.encrypt( + stringifiedNonces, + pwForEncryption, + ).toString(); + dispatch(setSspKeyPublicNonces(encryptedNonces)); + // sign and broadcast + ttxid = await signAndBroadcastEVM( + rawTransaction, + chain, + keyPair.privKey as `0x${string}`, + publicNonceKey, + ); } else { const signedTx = await signTransaction( rawTransaction, From b5af6449fb749b1ab80f507980e8113aa68a5f39 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Sun, 30 Jun 2024 07:15:46 +0800 Subject: [PATCH 09/28] fixes --- package.json | 4 +-- src/lib/constructTx.ts | 16 +++++----- src/storage/blockchains.ts | 1 + yarn.lock | 60 +++++++++++++++++++------------------- 4 files changed, 42 insertions(+), 39 deletions(-) diff --git a/package.json b/package.json index 9372199c..9dd8a46b 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "postinstall": "node_modules/.bin/rn-nodeify --install 'events,assert,util,buffer,stream,process' --yarn --hack && patch-package && react-native setup-ios-permissions" }, "dependencies": { - "@alchemy/aa-core": "3.12.0", + "@alchemy/aa-core": "~3.12.3", "@notifee/react-native": "~7.8.2", "@react-native-firebase/app": "~20.1.0", "@react-native-firebase/messaging": "~20.1.0", @@ -67,7 +67,7 @@ "socket.io-client": "~4.7.5", "stream-browserify": "~3.0.0", "util": "~0.12.5", - "viem": "2.10.8" + "viem": "~2.16.4" }, "devDependencies": { "@types/bchaddrjs": "~0.4.3", diff --git a/src/lib/constructTx.ts b/src/lib/constructTx.ts index f606cc4a..42bb3fc2 100644 --- a/src/lib/constructTx.ts +++ b/src/lib/constructTx.ts @@ -268,8 +268,8 @@ export function selectPublicNonce( for (let i = 0; i < txPublicNonces.length; i += 1) { const nonceExists = publicNonces.find( (n) => - txPublicNonces.kPublic.toString('hex') === n.kPublic && - txPublicNonces.kTwoPublic.toString('hex') === n.kTwoPublic, + txPublicNonces[i].kPublic.buffer.toString('hex') === n.kPublic && + txPublicNonces[i].kTwoPublic.buffer.toString('hex') === n.kTwoPublic, ); if (nonceExists) { nonceToUse = nonceExists; @@ -318,7 +318,7 @@ export async function signAndBroadcastEVM( const rpcUrl = backendConfig.node; - const transport = viemHttp(rpcUrl); + const transport = viemHttp(`https://${rpcUrl}`); const CHAIN = viemChains[blockchainConfig.libid as keyof typeof viemChains]; const publicKeys = multiSigUserOp._getPublicKeys(); @@ -327,6 +327,7 @@ export async function signAndBroadcastEVM( publicKeys, publicKeys.length, ); + const multiSigSmartAccount = await accountAbstraction.accountAbstraction.createMultiSigSmartAccount({ // @ts-ignore @@ -356,11 +357,12 @@ export async function signAndBroadcastEVM( multiSigSmartAccount.getEntryPoint().address, ); - console.log(uoHash); - return uoHash; + console.log(uoHash); // this is user operation hash, not tx hash - // const txHash = await smartAccountClient.waitForUserOperationTransaction({ hash: uoHash }) - // console.log("tx", txHash) + const txHash = await smartAccountClient.waitForUserOperationTransaction({ + hash: uoHash, + }); + return txHash; } catch (error) { console.log(error); throw error; diff --git a/src/storage/blockchains.ts b/src/storage/blockchains.ts index 60e50aa8..3bbaed95 100644 --- a/src/storage/blockchains.ts +++ b/src/storage/blockchains.ts @@ -299,6 +299,7 @@ const bch = { const sepolia = { id: 'sepolia', + libid: 'sepolia', name: 'Sepolia Ethereum', symbol: 'ETH', logo: ethLogo, diff --git a/yarn.lock b/yarn.lock index 0f515859..aa19b352 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,20 +12,20 @@ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== -"@alchemy/aa-core@3.12.0": - version "3.12.0" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.12.0.tgz#e2ec025259f2a929e34574432a0648b0e49a0494" - integrity sha512-QPviMm2EtlNAF0aEAuRDVj2kYWJPlJWXlu/tirFAaUsGocH3F9tSDLT27E50GE+NfemDdRHTaeTqLX2Iwj7wNA== +"@alchemy/aa-core@^3.12.3": + version "3.18.2" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.18.2.tgz#b11f189404e97132f5affab938b3d4040c99f475" + integrity sha512-uXVpPz5tpBiARC4QCj/MAK45J09Pt3pJQpmFDiHSj4ZEcQB7ZraP2z8Bi6jLMkMDyHPjUiTeJf+aRV3Gqyeunw== dependencies: abitype "^0.8.3" eventemitter3 "^5.0.1" viem "2.8.6" zod "^3.22.4" -"@alchemy/aa-core@^3.12.3": - version "3.18.2" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.18.2.tgz#b11f189404e97132f5affab938b3d4040c99f475" - integrity sha512-uXVpPz5tpBiARC4QCj/MAK45J09Pt3pJQpmFDiHSj4ZEcQB7ZraP2z8Bi6jLMkMDyHPjUiTeJf+aRV3Gqyeunw== +"@alchemy/aa-core@~3.12.3": + version "3.12.3" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.12.3.tgz#25ddd6533f0fe0590c28eba7d0a444c4f168ea64" + integrity sha512-nU2pvGIsWI9Wwo3aNcfke1ZJJiec5rmqkh7McTRK6G8ff1gE0yGZUBzd/73rsdWGmhBN8G5VmX0KN016+amzVQ== dependencies: abitype "^0.8.3" eventemitter3 "^5.0.1" @@ -1571,7 +1571,7 @@ dependencies: "@noble/hashes" "1.3.2" -"@noble/curves@~1.4.0": +"@noble/curves@1.4.0", "@noble/curves@~1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.0.tgz#f05771ef64da724997f69ee1261b2417a49522d6" integrity sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg== @@ -2115,7 +2115,7 @@ "@noble/hashes" "~1.3.2" "@scure/base" "~1.1.2" -"@scure/bip32@~1.4.0": +"@scure/bip32@1.4.0", "@scure/bip32@~1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== @@ -2132,7 +2132,7 @@ "@noble/hashes" "~1.3.0" "@scure/base" "~1.1.0" -"@scure/bip39@~1.3.0": +"@scure/bip39@1.3.0", "@scure/bip39@~1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== @@ -2633,16 +2633,16 @@ abitype@1.0.0: resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== +abitype@1.0.5, abitype@~1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.5.tgz#29d0daa3eea867ca90f7e4123144c1d1270774b6" + integrity sha512-YzDhti7cjlfaBhHutMaboYB21Ha3rXR9QTkNJFzYC4kC8YclaiwPBBBJY8ejFdu2wnJeZCVZSMlQJ7fi8S6hsw== + abitype@^0.8.3: version "0.8.11" resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.8.11.tgz#66e1cf2cbf46f48d0e57132d7c1c392447536cc1" integrity sha512-bM4v2dKvX08sZ9IU38IN5BKmN+ZkOSd2oI4a9f0ejHYZQYV6cDr7j+d95ga0z2XHG36Y4jzoG5Z7qDqxp7fi/A== -abitype@~1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.5.tgz#29d0daa3eea867ca90f7e4123144c1d1270774b6" - integrity sha512-YzDhti7cjlfaBhHutMaboYB21Ha3rXR9QTkNJFzYC4kC8YclaiwPBBBJY8ejFdu2wnJeZCVZSMlQJ7fi8S6hsw== - abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -8451,20 +8451,6 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -viem@2.10.8: - version "2.10.8" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.10.8.tgz#31be422498eb20bc0d9a355bd0e001a2f2822b3f" - integrity sha512-ttCXlDmjjcZ8M/eJezXFzDtHj+RFOjEQ3elmXnCC7suXo/y8CuIM1LrIoyUFk7LKIE5E+bzmWUErS4u/MQBtpQ== - dependencies: - "@adraffy/ens-normalize" "1.10.0" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@scure/bip32" "1.3.2" - "@scure/bip39" "1.2.1" - abitype "1.0.0" - isows "1.0.4" - ws "8.13.0" - viem@2.8.6: version "2.8.6" resolved "https://registry.yarnpkg.com/viem/-/viem-2.8.6.tgz#7467a0f113b4b13dd53fde4797aec1e686672f03" @@ -8479,6 +8465,20 @@ viem@2.8.6: isows "1.0.3" ws "8.13.0" +viem@~2.16.4: + version "2.16.4" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.16.4.tgz#5cc7bbed81ee815a131f509066972a8e849da801" + integrity sha512-5Dk8BUCUymVJRETeU4rNHhTIj+VtBEWBKU0veJ7URtLPltO8wY0/OaUQeN77OeMhmy/l1z0Gbrm9CEURgE06Iw== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@noble/curves" "1.4.0" + "@noble/hashes" "1.4.0" + "@scure/bip32" "1.4.0" + "@scure/bip39" "1.3.0" + abitype "1.0.5" + isows "1.0.4" + ws "8.17.1" + vlq@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" From a68fcbdfd4952b16ca80ad249437cc2a79fcbda9 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Sun, 30 Jun 2024 07:23:11 +0800 Subject: [PATCH 10/28] add backend explorer option --- src/backends.d.ts | 1 + src/components/SyncSuccess/SyncSuccess.tsx | 4 +++- src/components/TxSent/TxSent.tsx | 4 +++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/backends.d.ts b/src/backends.d.ts index 6f690222..5aaed86d 100644 --- a/src/backends.d.ts +++ b/src/backends.d.ts @@ -1,6 +1,7 @@ declare module '@storage/backends' { interface Backend { node: string; + explorer: string; } type backends = Record; let backends: () => backends; diff --git a/src/components/SyncSuccess/SyncSuccess.tsx b/src/components/SyncSuccess/SyncSuccess.tsx index 2b66a6fe..c988a162 100644 --- a/src/components/SyncSuccess/SyncSuccess.tsx +++ b/src/components/SyncSuccess/SyncSuccess.tsx @@ -83,7 +83,9 @@ const SyncSuccess = (props: { const openExplorer = () => { console.log('Open Explorer'); const backendConfig = backends()[props.chain]; - Linking.openURL(`https://${backendConfig.node}/address/${chainAddress}`); + Linking.openURL( + `https://${backendConfig.explorer ?? backendConfig.node}/address/${chainAddress}`, + ); }; return ( diff --git a/src/components/TxSent/TxSent.tsx b/src/components/TxSent/TxSent.tsx index e165feac..2f067829 100644 --- a/src/components/TxSent/TxSent.tsx +++ b/src/components/TxSent/TxSent.tsx @@ -31,7 +31,9 @@ const TxSent = (props: { const openExplorer = () => { console.log('Open Explorer'); const backendConfig = backends()[props.chain]; - Linking.openURL(`https://${backendConfig.node}/tx/${props.txid}`); + Linking.openURL( + `https://${backendConfig.explorer ?? backendConfig.node}/tx/${props.txid}`, + ); }; return ( From 0d8ff3d00b3d5a4577708a8392ec7d9d41b54388 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Sun, 30 Jun 2024 20:08:33 +0800 Subject: [PATCH 11/28] rename --- src/storage/blockchains.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/storage/blockchains.ts b/src/storage/blockchains.ts index 3bbaed95..00383063 100644 --- a/src/storage/blockchains.ts +++ b/src/storage/blockchains.ts @@ -300,7 +300,7 @@ const bch = { const sepolia = { id: 'sepolia', libid: 'sepolia', - name: 'Sepolia Ethereum', + name: 'Sepolia', symbol: 'ETH', logo: ethLogo, slip: 1, From 29e01d6def47f8dc62908afb3693007b6794a32f Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Tue, 2 Jul 2024 13:31:06 +0800 Subject: [PATCH 12/28] consider UO success even if not in tx --- src/lib/constructTx.ts | 14 +++++++++----- src/screens/Home/Home.tsx | 3 ++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/lib/constructTx.ts b/src/lib/constructTx.ts index 42bb3fc2..669f100c 100644 --- a/src/lib/constructTx.ts +++ b/src/lib/constructTx.ts @@ -357,12 +357,16 @@ export async function signAndBroadcastEVM( multiSigSmartAccount.getEntryPoint().address, ); - console.log(uoHash); // this is user operation hash, not tx hash + console.log(uoHash); // this is user operation hash, means it was succesfully sent but not yet included in transaction. All went well, not tx hash - const txHash = await smartAccountClient.waitForUserOperationTransaction({ - hash: uoHash, - }); - return txHash; + const txHash = await smartAccountClient + .waitForUserOperationTransaction({ + hash: uoHash, + }) + .catch((e) => { + console.log(e); + }); + return txHash ?? uoHash; } catch (error) { console.log(error); throw error; diff --git a/src/screens/Home/Home.tsx b/src/screens/Home/Home.tsx index c2e5cd0d..0f31ef99 100644 --- a/src/screens/Home/Home.tsx +++ b/src/screens/Home/Home.tsx @@ -582,7 +582,8 @@ function Home({ navigation }: Props) { ); setTxid(ttxid); } catch (error) { - displayMessage('error', t('home:err_tx_failed')); + // @ts-ignore + displayMessage('error', error.message ?? 'home:err_tx_failed'); console.log(error); } finally { setSubmittingTransaction(false); From 70b7ad04e192383584ba9b5ea3aefa83019d5286 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Tue, 2 Jul 2024 15:43:30 +0800 Subject: [PATCH 13/28] better error throw --- src/lib/constructTx.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/lib/constructTx.ts b/src/lib/constructTx.ts index 669f100c..de5ae866 100644 --- a/src/lib/constructTx.ts +++ b/src/lib/constructTx.ts @@ -369,6 +369,14 @@ export async function signAndBroadcastEVM( return txHash ?? uoHash; } catch (error) { console.log(error); + // @ts-ignore + if (error.message && error.message.includes('Details: ')) { + // @ts-ignore + const splitted = error.message.split('Details: '); + const lastDetail = splitted[splitted.length - 1]; + // throw just this last detail + throw new Error(lastDetail); + } throw error; } } From 7cd5b7d4d8e23443c65255e01bb8b37786ad95c9 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Tue, 2 Jul 2024 16:46:16 +0800 Subject: [PATCH 14/28] improve decodeEVMTransactionForApproval --- src/lib/transactions.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/lib/transactions.ts b/src/lib/transactions.ts index bb6e5e03..39ee3aed 100644 --- a/src/lib/transactions.ts +++ b/src/lib/transactions.ts @@ -133,13 +133,20 @@ interface decodedAbiData { args: [string, BigInt, string]; } +interface userOperation { + userOpRequest: { + sender: string; + callData: `0x${string}`; + }; +} + export function decodeEVMTransactionForApproval( rawTx: string, chain: keyof cryptos, ) { try { const decimals = blockchains[chain].decimals; - const multisigUserOpJSON = JSON.parse(rawTx); + const multisigUserOpJSON = JSON.parse(rawTx) as userOperation; const { callData, sender } = multisigUserOpJSON.userOpRequest; const decodedData: decodedAbiData = decodeFunctionData({ @@ -149,7 +156,6 @@ export function decodeEVMTransactionForApproval( let txReceiver = 'decodingError'; let amount = '0'; - const senderAddress = sender; if ( decodedData && @@ -157,7 +163,7 @@ export function decodeEVMTransactionForApproval( decodedData.args && decodedData.args.length === 3 ) { - txReceiver = decodedData.args[0] as string; + txReceiver = decodedData.args[0]; amount = new BigNumber(decodedData.args[1].toString()) .dividedBy(new BigNumber(10 ** decimals)) .toFixed(); @@ -166,7 +172,7 @@ export function decodeEVMTransactionForApproval( } const txInfo = { - sender: senderAddress, + sender, receiver: txReceiver, amount, fee: '0', // @todo: calculate fee From 17715e4e781ab1f13f560cb2a5b5528ade994bdb Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Tue, 2 Jul 2024 17:44:27 +0800 Subject: [PATCH 15/28] prepare for public nonces requests --- src/screens/Home/Home.tsx | 116 ++++++++++++++++++++++++++++++++++---- 1 file changed, 104 insertions(+), 12 deletions(-) diff --git a/src/screens/Home/Home.tsx b/src/screens/Home/Home.tsx index 0f31ef99..3244ecd8 100644 --- a/src/screens/Home/Home.tsx +++ b/src/screens/Home/Home.tsx @@ -95,6 +95,8 @@ function Home({ navigation }: Props) { const [txPath, setTxPath] = useState(''); const [txUtxos, setTxUtxos] = useState([]); const [syncReq, setSyncReq] = useState(''); + const [publicNoncesReq, setPublicNoncesReq] = useState(''); + const [publicNoncesShared, setPublicNoncesShared] = useState(false); const [txid, setTxid] = useState(''); const [syncSuccessOpen, setSyncSuccessOpen] = useState(false); const [addrDetailsOpen, setAddrDetailsOpen] = useState(false); @@ -269,8 +271,8 @@ function Home({ navigation }: Props) { if (blockchains[chain].chainType === 'evm') { const ppNonces = []; // generate and replace nonces - for (let i = 0; i < 50; i += 1) { - // max 50 txs + for (let i = 0; i < 100; i += 1) { + // max 100 txs const nonce = generatePublicNonce(); ppNonces.push(nonce); } @@ -455,7 +457,7 @@ function Home({ navigation }: Props) { console.log(error); }); }; - const postSyncToken = async (token: string, wkIdentity: string) => { + const postSyncToken = (token: string, wkIdentity: string) => { // post fcm token tied to wkIdentity const data = { keyToken: token, @@ -470,7 +472,7 @@ function Home({ navigation }: Props) { console.log(error); }); }; - const handleTxRequest = async ( + const handleTxRequest = ( rawTransaction: string, chain: keyof cryptos, path: string, @@ -483,10 +485,53 @@ function Home({ navigation }: Props) { setRawTx(rawTransaction); setTxPath(path); }; + const handlePublicNoncesRequest = (chain: keyof cryptos) => { + console.log(chain); + setActiveChain(chain); + setPublicNoncesReq(chain); + }; const handleSyncRequest = async (xpubw: string, chain: keyof cryptos) => { setActiveChain(chain); setSyncReq(xpubw); }; + const approvePublicNoncesAction = async (chain: keyof cryptos) => { + try { + const ppNonces = []; + // generate and replace nonces + for (let i = 0; i < 100; i += 1) { + // max 100 txs + const nonce = generatePublicNonce(); + ppNonces.push(nonce); + } + const id = await getUniqueId(); + const password = await EncryptedStorage.getItem('ssp_key_pw'); + const pwForEncryption = id + password; + const stringifiedNonces = JSON.stringify(ppNonces); + const encryptedNonces = CryptoJS.AES.encrypt( + stringifiedNonces, + pwForEncryption, + ).toString(); + dispatch(setSspKeyPublicNonces(encryptedNonces)); + // on publicNonces delete k and kTwo, leave only public parts + const pNs: publicNonce[] = ppNonces.map((nonce) => ({ + kPublic: nonce.kPublic, + kTwoPublic: nonce.kTwoPublic, + })); + await postAction( + 'publicnonces', + JSON.stringify(pNs), + chain, + '', + sspWalletKeyInternalIdentity, + ); + setPublicNoncesReq(''); + setPublicNoncesShared(true); + } catch (error) { + // @ts-ignore + displayMessage('error', error.message ?? 'home:err_tx_failed'); + console.log(error); + } + }; const approveTransaction = async ( rawTransaction: string, chain: keyof cryptos, @@ -598,6 +643,11 @@ function Home({ navigation }: Props) { setTimeout(() => { setIsManualInputModalOpen(false); }); + } else if (manualInput === 'publicnonces') { + handlePublicNoncesRequest(identityChain); + setTimeout(() => { + setIsManualInputModalOpen(false); + }); } else { const splittedInput = manualInput.split(':'); let chain: keyof cryptos = identityChain; @@ -750,14 +800,10 @@ function Home({ navigation }: Props) { result.data.path, result.data.utxos, ); + } else if (result.data.action === 'publicnoncesrequested') { + // only this action is valid for us + handlePublicNoncesRequest(result.data.chain); } - } else if (sspWalletInternalIdentity) { - // should not be possible? - // get some pending request on W identity - const result = await axios.get( - `https://${sspConfig().relay}/v1/action/${sspWalletInternalIdentity}`, - ); - console.log('result', result.data); } else { // here open sync needed modal setSyncNeededModalOpen(true); @@ -831,9 +877,41 @@ function Home({ navigation }: Props) { } }; + const handlePublicNoncesRequestAction = async (status: boolean) => { + try { + setActivityStatus(true); + if (status === true) { + const rchain = activeChain as keyof cryptos; + await approvePublicNoncesAction(rchain); + } else { + // reject + const rchain = activeChain; + setActiveChain(identityChain); + setPublicNoncesReq(''); + await postAction( + 'publicnoncesrejected', + '', + rchain, + '', + sspWalletKeyInternalIdentity, + ); + } + } catch (error) { + console.log(error); + } finally { + setActivityStatus(false); + } + }; + + const handlePublicNoncesSharedModalAction = () => { + console.log('public nonces modal close. Clean chain'); + setActiveChain(identityChain); + }; + const handleTxSentModalAction = () => { console.log('tx sent modal close. Clean TXID'); setTxid(''); + setActiveChain(identityChain); }; const handleSyncSuccessModalAction = () => { @@ -927,7 +1005,7 @@ function Home({ navigation }: Props) { /> )} - {!submittingTransaction && !rawTx && !syncReq && ( + {!submittingTransaction && !rawTx && !syncReq && !publicNoncesReq && ( <> )} + {publicNoncesReq && ( + + )} + {publicNoncesShared && ( + + )} {txid && ( Date: Tue, 2 Jul 2024 21:03:26 +0800 Subject: [PATCH 16/28] public nonces request, public nonces success --- .../PublicNoncesRequest.tsx | 109 ++++++++++++++++++ .../PublicNoncesSuccess.tsx | 81 +++++++++++++ src/screens/Home/Home.tsx | 9 +- src/translations/resources/en/home.json | 7 +- 4 files changed, 200 insertions(+), 6 deletions(-) create mode 100644 src/components/PublicNoncesRequest/PublicNoncesRequest.tsx create mode 100644 src/components/PublicNoncesSuccess/PublicNoncesSuccess.tsx diff --git a/src/components/PublicNoncesRequest/PublicNoncesRequest.tsx b/src/components/PublicNoncesRequest/PublicNoncesRequest.tsx new file mode 100644 index 00000000..729ef14c --- /dev/null +++ b/src/components/PublicNoncesRequest/PublicNoncesRequest.tsx @@ -0,0 +1,109 @@ +import React, { useState } from 'react'; +import { View, Text, TouchableOpacity, ActivityIndicator } from 'react-native'; +import Icon from 'react-native-vector-icons/Feather'; +import { useTranslation } from 'react-i18next'; +import { useTheme } from '../../hooks'; +import Authentication from '../Authentication/Authentication'; + +const PublicNoncesRequest = (props: { + activityStatus: boolean; + actionStatus: (status: boolean) => void; +}) => { + // so we need our xpubkey, then generate address and show user the address. If not the same, tell user to restore or create wallet from scratch. + const { t } = useTranslation(['home', 'common']); + const { Fonts, Gutters, Layout, Colors, Common } = useTheme(); + const [authenticationOpen, setAuthenticationOpen] = useState(false); + + const approve = () => { + console.log('Approve'); + props.actionStatus(true); + }; + const openAuthentication = () => { + console.log('Open Authentication'); + setAuthenticationOpen(true); + }; + const reject = () => { + console.log('Reject'); + props.actionStatus(false); + }; + + const handleAuthenticationOpen = (status: boolean) => { + console.log(status); + console.log('authentication modal close.'); + setAuthenticationOpen(false); + if (status === true) { + approve(); + } + }; + + return ( + <> + + + + {t('home:public_nonces_request')} + + + {t('home:ssp_public_nonces_request')} + + + + openAuthentication()} + > + {(authenticationOpen || props.activityStatus) && ( + + )} + + {t('home:approve_request')} + + + reject()} + > + + {t('home:reject')} + + + + {authenticationOpen && ( + + )} + + ); +}; + +export default PublicNoncesRequest; diff --git a/src/components/PublicNoncesSuccess/PublicNoncesSuccess.tsx b/src/components/PublicNoncesSuccess/PublicNoncesSuccess.tsx new file mode 100644 index 00000000..ef508fd7 --- /dev/null +++ b/src/components/PublicNoncesSuccess/PublicNoncesSuccess.tsx @@ -0,0 +1,81 @@ +import React from 'react'; +import { View, Text, TouchableOpacity, Modal, ScrollView } from 'react-native'; +import Icon from 'react-native-vector-icons/Feather'; +import { useTranslation } from 'react-i18next'; +import { useTheme } from '../../hooks'; + +const PublicNoncesSuccess = (props: { + actionStatus: (status: boolean) => void; +}) => { + // so we need our xpubkey, then generate address and show user the address. If not the same, tell user to restore or create wallet from scratch. + const { t } = useTranslation(['home', 'common']); + const { Fonts, Gutters, Layout, Colors, Common } = useTheme(); + + const close = () => { + console.log('Close'); + props.actionStatus(false); + }; + + return ( + close()} + > + + + + + + {t('home:public_nonces_request_approved')} + + + {t('home:public_nonces_request_approved_info')} + + + + close()} + > + + {t('home:close')} + + + + + + + ); +}; + +export default PublicNoncesSuccess; diff --git a/src/screens/Home/Home.tsx b/src/screens/Home/Home.tsx index 3244ecd8..971d3738 100644 --- a/src/screens/Home/Home.tsx +++ b/src/screens/Home/Home.tsx @@ -20,6 +20,8 @@ import ManualInput from '../../components/ManualInput/ManualInput'; import MenuModal from '../../components/MenuModal/MenuModal'; import Scanner from '../../components/Scanner/Scanner'; import Navbar from '../../components/Navbar/Navbar'; +import PublicNoncesRequest from '../..//components/PublicNoncesRequest/PublicNoncesRequest'; +import PublicNoncesSuccess from '../../components/PublicNoncesSuccess/PublicNoncesSuccess'; import { getUniqueId } from 'react-native-device-info'; import EncryptedStorage from 'react-native-encrypted-storage'; import Toast from 'react-native-toast-message'; @@ -1113,16 +1115,13 @@ function Home({ navigation }: Props) { /> )} {publicNoncesReq && ( - )} {publicNoncesShared && ( - )} diff --git a/src/translations/resources/en/home.json b/src/translations/resources/en/home.json index 01447ac1..330fb506 100644 --- a/src/translations/resources/en/home.json +++ b/src/translations/resources/en/home.json @@ -77,5 +77,10 @@ "selected_chain_wallet": "Selected Chain and Wallet", "chain_not_synced_scan": "Chain Not Synced with SSP Wallet. Scan SSP Wallet QR Code to Sync it.", "submitting_transaction": "Submitting Transaction...", - "err_generate_address": "Error while generating address." + "err_generate_address": "Error while generating address.", + "public_nonces_request": "Public Nonces Request", + "ssp_public_nonces_request": "SSP Wallet would like request Public Nonces. Public Nonces are used to construct blockchain transcations that use Schnorr signatures.", + "approve_request": "Approve Request", + "public_nonces_request_approved": "Public Nonces Synced!", + "public_nonces_request_approved_info": "Public Nonces were generated and sent for syncing with SSP Wallet." } From fe429f15bd0b1d5428a0261d374279f320cc3de8 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Tue, 2 Jul 2024 21:14:01 +0800 Subject: [PATCH 17/28] minor --- src/screens/Home/Home.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/screens/Home/Home.tsx b/src/screens/Home/Home.tsx index 971d3738..7283e3b9 100644 --- a/src/screens/Home/Home.tsx +++ b/src/screens/Home/Home.tsx @@ -802,7 +802,7 @@ function Home({ navigation }: Props) { result.data.path, result.data.utxos, ); - } else if (result.data.action === 'publicnoncesrequested') { + } else if (result.data.action === 'publicnoncesrequest') { // only this action is valid for us handlePublicNoncesRequest(result.data.chain); } From 0f786728a634bb1eeb4933a3aaf7ec557c2d4651 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Wed, 3 Jul 2024 11:38:03 +0800 Subject: [PATCH 18/28] public nonces sync socket --- .../Authentication/Authentication.tsx | 10 ++++++-- .../PublicNoncesRequest.tsx | 5 +++- src/contexts/SocketContext.tsx | 23 ++++++++++++++++++- src/screens/Home/Home.tsx | 21 ++++++++++++----- src/translations/resources/en/home.json | 4 +++- 5 files changed, 52 insertions(+), 11 deletions(-) diff --git a/src/components/Authentication/Authentication.tsx b/src/components/Authentication/Authentication.tsx index d8934429..3c08f75a 100644 --- a/src/components/Authentication/Authentication.tsx +++ b/src/components/Authentication/Authentication.tsx @@ -72,6 +72,8 @@ const Authentication = (props: { textForPrompt = t('home:auth_confirm_sign_send'); } else if (props.type === 'sync') { textForPrompt = t('home:auth_confirm_sync'); + } else if (props.type === 'pubnonces') { + textForPrompt = t('home:auth_confirm_public_nonces'); } console.log('Initiate Fingerprint'); rnBiometrics @@ -174,14 +176,18 @@ const Authentication = (props: { ? t('home:auth_sign_tx') : props.type === 'sync' ? t('home:auth_sync_ssp') - : t('home:auth_sensitive_inf')} + : props.type === 'pubnonces' + ? t('home:auth_sync_pub_nonces') + : t('home:auth_sensitive_inf')} {props.type === 'tx' ? t('home:auth_confirm_with_pw') : props.type === 'sync' ? t('home:auth_confirm_with_pw') - : t('home:auth_grant_access_pw')} + : props.type === 'pubnonces' + ? t('home:auth_confirm_with_pw') + : t('home:auth_grant_access_pw')} {biometricsAvailable && ( diff --git a/src/components/PublicNoncesRequest/PublicNoncesRequest.tsx b/src/components/PublicNoncesRequest/PublicNoncesRequest.tsx index 729ef14c..dec189fe 100644 --- a/src/components/PublicNoncesRequest/PublicNoncesRequest.tsx +++ b/src/components/PublicNoncesRequest/PublicNoncesRequest.tsx @@ -100,7 +100,10 @@ const PublicNoncesRequest = (props: { {authenticationOpen && ( - + )} ); diff --git a/src/contexts/SocketContext.tsx b/src/contexts/SocketContext.tsx index 592c1881..17b879e1 100644 --- a/src/contexts/SocketContext.tsx +++ b/src/contexts/SocketContext.tsx @@ -8,7 +8,9 @@ import { cryptos, utxo } from '../types'; interface SocketContextType { socket: Socket | null; newTx: adjustedServeResponseTx; + publicNoncesRequest: boolean; clearTx?: () => void; + clearPublicNoncesRequest?: () => void; } interface serverResponse { @@ -30,6 +32,7 @@ interface adjustedServeResponseTx { const defaultValue: SocketContextType = { socket: null, newTx: {} as adjustedServeResponseTx, + publicNoncesRequest: false, }; export const SocketContext = createContext(defaultValue); @@ -40,6 +43,7 @@ export const SocketProvider = ({ children }: { children: React.ReactNode }) => { ); const [socket, setSocket] = useState(null); const [newTx, setNewTx] = useState({} as adjustedServeResponseTx); + const [publicNoncesRequest, setPublicNoncesRequest] = useState(false); const [socketIdentiy, setSocketIdentity] = useState(''); useEffect(() => { @@ -80,6 +84,11 @@ export const SocketProvider = ({ children }: { children: React.ReactNode }) => { setNewTx(adjustedTx); }); + newSocket.on('publicnoncesrequest', () => { + console.log('incoming public nonces request'); + setPublicNoncesRequest(true); + }); + setSocket(newSocket); return () => { newSocket.close(); @@ -104,8 +113,20 @@ export const SocketProvider = ({ children }: { children: React.ReactNode }) => { setNewTx({} as adjustedServeResponseTx); }; + const clearPublicNoncesRequest = () => { + setPublicNoncesRequest(false); + }; + return ( - + {children} ); diff --git a/src/screens/Home/Home.tsx b/src/screens/Home/Home.tsx index 7283e3b9..986a7c36 100644 --- a/src/screens/Home/Home.tsx +++ b/src/screens/Home/Home.tsx @@ -117,7 +117,8 @@ function Home({ navigation }: Props) { const [activityStatus, setActivityStatus] = useState(false); const [submittingTransaction, setSubmittingTransaction] = useState(false); - const { newTx, clearTx } = useSocket(); + const { newTx, clearTx, publicNoncesRequest, clearPublicNoncesRequest } = + useSocket(); useEffect(() => { if (alreadyMounted.current) { @@ -148,6 +149,13 @@ function Home({ navigation }: Props) { } }, [newTx.rawTx]); + useEffect(() => { + if (publicNoncesRequest) { + handlePublicNoncesRequest(identityChain); + clearPublicNoncesRequest?.(); + } + }, [publicNoncesRequest]); + useEffect(() => { if (!xpubKey || !xpubWallet) { if (rawTx) { @@ -273,8 +281,8 @@ function Home({ navigation }: Props) { if (blockchains[chain].chainType === 'evm') { const ppNonces = []; // generate and replace nonces - for (let i = 0; i < 100; i += 1) { - // max 100 txs + for (let i = 0; i < 50; i += 1) { + // max 50 txs const nonce = generatePublicNonce(); ppNonces.push(nonce); } @@ -500,8 +508,8 @@ function Home({ navigation }: Props) { try { const ppNonces = []; // generate and replace nonces - for (let i = 0; i < 100; i += 1) { - // max 100 txs + for (let i = 0; i < 50; i += 1) { + // max 50 txs const nonce = generatePublicNonce(); ppNonces.push(nonce); } @@ -892,7 +900,7 @@ function Home({ navigation }: Props) { setPublicNoncesReq(''); await postAction( 'publicnoncesrejected', - '', + '{}', rchain, '', sspWalletKeyInternalIdentity, @@ -908,6 +916,7 @@ function Home({ navigation }: Props) { const handlePublicNoncesSharedModalAction = () => { console.log('public nonces modal close. Clean chain'); setActiveChain(identityChain); + setPublicNoncesShared(false); }; const handleTxSentModalAction = () => { diff --git a/src/translations/resources/en/home.json b/src/translations/resources/en/home.json index 330fb506..0e0d62b0 100644 --- a/src/translations/resources/en/home.json +++ b/src/translations/resources/en/home.json @@ -64,11 +64,13 @@ "auth_sensitive_information": "Grant access to view senstivie SSP Key information.", "auth_confirm_sign_send": "Confirm to sign and send transaction.", "auth_confirm_sync": "Confirm to sync SSP Wallet with SSP Key.", + "auth_confirm_public_nonces": "Confirm to sync Public Nonces with SSP Wallet.", "err_auth_pw_incorrect": "Password is incorrect", "err_auth_pw_check": "Error checking password. Try again later.", "auth_sign_tx": "You are about to sign and send transaction!", "auth_sync_ssp": "You are about to sync SSP Wallet with SSP Key!", "auth_sensitive_inf": "You are about to access sensitive information!", + "auth_sync_pub_nonces": "You are about to sync Public Nonces with SSP Wallet!", "auth_confirm_with_pw": "Confirm with password.", "auth_grant_access_pw": "Grant access with password.", "select_wallet": "Select Wallet", @@ -79,7 +81,7 @@ "submitting_transaction": "Submitting Transaction...", "err_generate_address": "Error while generating address.", "public_nonces_request": "Public Nonces Request", - "ssp_public_nonces_request": "SSP Wallet would like request Public Nonces. Public Nonces are used to construct blockchain transcations that use Schnorr signatures.", + "ssp_public_nonces_request": "SSP Wallet would like to request Public Nonces. Public Nonces are used to construct blockchain transcations that use Schnorr signatures.", "approve_request": "Approve Request", "public_nonces_request_approved": "Public Nonces Synced!", "public_nonces_request_approved_info": "Public Nonces were generated and sent for syncing with SSP Wallet." From 0a5586e3ac7af61b0728bd2ece8010665e88358a Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Wed, 3 Jul 2024 21:02:28 +0800 Subject: [PATCH 19/28] support publicnonces via qr scan --- src/screens/Home/Home.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/screens/Home/Home.tsx b/src/screens/Home/Home.tsx index 986a7c36..d9e5cbc8 100644 --- a/src/screens/Home/Home.tsx +++ b/src/screens/Home/Home.tsx @@ -739,6 +739,10 @@ function Home({ navigation }: Props) { let chain: keyof cryptos = identityChain; let wallet = '0-0'; let dataToProcess = ''; + if (scannedData === 'publicnonces') { + handlePublicNoncesRequest(identityChain); + return; + } if (splittedInput[1]) { // all is default chain = splittedInput[0] as keyof cryptos; From 51476e62ec7c5a55b88c331ff75922d4b44ecdd0 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Wed, 3 Jul 2024 21:52:08 +0800 Subject: [PATCH 20/28] public nonces improvements --- ios/Podfile.lock | 6 +++ package.json | 1 + .../PublicNoncesSuccess.tsx | 17 ++++++++ src/screens/Home/Home.tsx | 39 ++++++++++++++----- src/translations/resources/en/home.json | 5 ++- yarn.lock | 5 +++ 6 files changed, 62 insertions(+), 11 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 2ef5c540..649ab17a 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1368,6 +1368,8 @@ PODS: - React-utils (= 0.74.2) - ReactNativeCameraKit (13.0.0): - React-Core + - RNCClipboard (1.14.1): + - React-Core - RNCPicker (2.7.7): - React-Core - RNDeviceInfo (11.1.0): @@ -1524,6 +1526,7 @@ DEPENDENCIES: - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - ReactNativeCameraKit (from `../node_modules/react-native-camera-kit`) + - "RNCClipboard (from `../node_modules/@react-native-clipboard/clipboard`)" - "RNCPicker (from `../node_modules/@react-native-picker/picker`)" - RNDeviceInfo (from `../node_modules/react-native-device-info`) - "RNFBApp (from `../node_modules/@react-native-firebase/app`)" @@ -1679,6 +1682,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon" ReactNativeCameraKit: :path: "../node_modules/react-native-camera-kit" + RNCClipboard: + :path: "../node_modules/@react-native-clipboard/clipboard" RNCPicker: :path: "../node_modules/@react-native-picker/picker" RNDeviceInfo: @@ -1779,6 +1784,7 @@ SPEC CHECKSUMS: React-utils: 4476b7fcbbd95cfd002f3e778616155241d86e31 ReactCommon: ecad995f26e0d1e24061f60f4e5d74782f003f12 ReactNativeCameraKit: 9d46a5d7dd544ca64aa9c03c150d2348faf437eb + RNCClipboard: 0a720adef5ec193aa0e3de24c3977222c7e52a37 RNCPicker: b7873ba797dc586bfaf3307d737cbdc620a9ff3e RNDeviceInfo: b899ce37a403a4dea52b7cb85e16e49c04a5b88e RNFBApp: 1ae7462cddf74a49df206d3418bc0170f8fa53e5 diff --git a/package.json b/package.json index 9dd8a46b..c2ecfa0f 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "dependencies": { "@alchemy/aa-core": "~3.12.3", "@notifee/react-native": "~7.8.2", + "@react-native-clipboard/clipboard": "~1.14.1", "@react-native-firebase/app": "~20.1.0", "@react-native-firebase/messaging": "~20.1.0", "@react-native-picker/picker": "~2.7.7", diff --git a/src/components/PublicNoncesSuccess/PublicNoncesSuccess.tsx b/src/components/PublicNoncesSuccess/PublicNoncesSuccess.tsx index ef508fd7..bbf2bf87 100644 --- a/src/components/PublicNoncesSuccess/PublicNoncesSuccess.tsx +++ b/src/components/PublicNoncesSuccess/PublicNoncesSuccess.tsx @@ -1,11 +1,13 @@ import React from 'react'; import { View, Text, TouchableOpacity, Modal, ScrollView } from 'react-native'; +import Clipboard from '@react-native-clipboard/clipboard'; import Icon from 'react-native-vector-icons/Feather'; import { useTranslation } from 'react-i18next'; import { useTheme } from '../../hooks'; const PublicNoncesSuccess = (props: { actionStatus: (status: boolean) => void; + nonces: string; }) => { // so we need our xpubkey, then generate address and show user the address. If not the same, tell user to restore or create wallet from scratch. const { t } = useTranslation(['home', 'common']); @@ -16,6 +18,10 @@ const PublicNoncesSuccess = (props: { props.actionStatus(false); }; + const copyToClipboard = () => { + Clipboard.setString(props.nonces); + }; + return ( + copyToClipboard()}> + + {t('home:copy_to_clipboard')} + + diff --git a/src/screens/Home/Home.tsx b/src/screens/Home/Home.tsx index d9e5cbc8..9dbffb69 100644 --- a/src/screens/Home/Home.tsx +++ b/src/screens/Home/Home.tsx @@ -99,6 +99,7 @@ function Home({ navigation }: Props) { const [syncReq, setSyncReq] = useState(''); const [publicNoncesReq, setPublicNoncesReq] = useState(''); const [publicNoncesShared, setPublicNoncesShared] = useState(false); + const [pNonces, setPNonces] = useState(''); const [txid, setTxid] = useState(''); const [syncSuccessOpen, setSyncSuccessOpen] = useState(false); const [addrDetailsOpen, setAddrDetailsOpen] = useState(false); @@ -527,18 +528,34 @@ function Home({ navigation }: Props) { kPublic: nonce.kPublic, kTwoPublic: nonce.kTwoPublic, })); - await postAction( - 'publicnonces', - JSON.stringify(pNs), - chain, - '', - sspWalletKeyInternalIdentity, - ); + try { + await postAction( + 'publicnonces', + JSON.stringify(pNs), + chain, + '', + sspWalletKeyInternalIdentity, + ); + } catch (error) { + // we can ignore this error and show success message as user can copy the nonces + displayMessage( + 'error', + // @ts-ignore + error.message ?? 'home:err_sharing_public_nonces', + ); + console.log(error); + } + setPNonces(JSON.stringify(pNs)); setPublicNoncesReq(''); - setPublicNoncesShared(true); + setTimeout(() => { + setPublicNoncesShared(true); // display + }, 100); } catch (error) { - // @ts-ignore - displayMessage('error', error.message ?? 'home:err_tx_failed'); + displayMessage( + 'error', + // @ts-ignore + error.message ?? 'home:err_generating_public_nonces', + ); console.log(error); } }; @@ -921,6 +938,7 @@ function Home({ navigation }: Props) { console.log('public nonces modal close. Clean chain'); setActiveChain(identityChain); setPublicNoncesShared(false); + setPNonces(''); }; const handleTxSentModalAction = () => { @@ -1136,6 +1154,7 @@ function Home({ navigation }: Props) { {publicNoncesShared && ( )} {txid && ( diff --git a/src/translations/resources/en/home.json b/src/translations/resources/en/home.json index 0e0d62b0..82e55d26 100644 --- a/src/translations/resources/en/home.json +++ b/src/translations/resources/en/home.json @@ -84,5 +84,8 @@ "ssp_public_nonces_request": "SSP Wallet would like to request Public Nonces. Public Nonces are used to construct blockchain transcations that use Schnorr signatures.", "approve_request": "Approve Request", "public_nonces_request_approved": "Public Nonces Synced!", - "public_nonces_request_approved_info": "Public Nonces were generated and sent for syncing with SSP Wallet." + "public_nonces_request_approved_info": "Public Nonces were generated and sent for syncing with SSP Wallet.", + "err_sharing_public_nonces": "Error while sharing Public Nonces.", + "err_generating_public_nonces": "Error while generating Public Nonces.", + "copy_to_clipboard": "Copy to Clipboard" } diff --git a/yarn.lock b/yarn.lock index aa19b352..e448e83f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1624,6 +1624,11 @@ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== +"@react-native-clipboard/clipboard@~1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@react-native-clipboard/clipboard/-/clipboard-1.14.1.tgz#835f82fc86881a0808a8405f2576617bb5383554" + integrity sha512-SM3el0A28SwoeJljVNhF217o0nI4E7RfalLmuRQcT1/7tGcxUjgFa3jyrEndYUct8/uxxK5EUNGUu1YEDqzxqw== + "@react-native-community/cli-clean@13.6.8": version "13.6.8" resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-13.6.8.tgz#95ce964047f005152ac100394b6dcd5d2cc2a474" From 924dc46410e3df950c0117dff1dcccc7c62f5cb7 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Wed, 10 Jul 2024 22:53:25 +0800 Subject: [PATCH 21/28] evm improvements, ethereum mainnet --- src/assets/teth.svg | 132 +++++++++++++++++++++++++++++++++++++ src/backends.d.ts | 3 +- src/blockchains.d.ts | 12 ++++ src/lib/transactions.ts | 73 ++++++++++++++++++-- src/storage/backends.ts | 7 +- src/storage/blockchains.ts | 69 ++++++++++++++++++- src/store/index.ts | 2 + src/types.d.ts | 29 ++++++++ 8 files changed, 316 insertions(+), 11 deletions(-) create mode 100644 src/assets/teth.svg diff --git a/src/assets/teth.svg b/src/assets/teth.svg new file mode 100644 index 00000000..3c8aef1a --- /dev/null +++ b/src/assets/teth.svg @@ -0,0 +1,132 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + SEPOLIA + + diff --git a/src/backends.d.ts b/src/backends.d.ts index 5aaed86d..fef07bc2 100644 --- a/src/backends.d.ts +++ b/src/backends.d.ts @@ -1,7 +1,8 @@ declare module '@storage/backends' { interface Backend { node: string; - explorer: string; + api?: string; + explorer?: string; } type backends = Record; let backends: () => backends; diff --git a/src/blockchains.d.ts b/src/blockchains.d.ts index f6bb9d9f..9579e1d7 100644 --- a/src/blockchains.d.ts +++ b/src/blockchains.d.ts @@ -1,4 +1,11 @@ declare module '@storage/blockchains' { + export interface Token { + contract: string; + name: string; + symbol: string; + decimals: number; + logo: string; + } interface Blockchain { id: string; libid: string; @@ -6,6 +13,7 @@ declare module '@storage/blockchains' { symbol: string; decimals: number; node: string; + api: string; slip: number; scriptType: string; messagePrefix: string; @@ -36,6 +44,10 @@ declare module '@storage/blockchains' { factorySalt: string; factoryAddress: string; entrypointAddress: string; + baseFee: number; + priorityFee: number; + gasLimit: number; + tokens: Token[]; } type blockchains = Record; let blockchains: blockchains; diff --git a/src/lib/transactions.ts b/src/lib/transactions.ts index 39ee3aed..09f7fe47 100644 --- a/src/lib/transactions.ts +++ b/src/lib/transactions.ts @@ -1,6 +1,6 @@ import BigNumber from 'bignumber.js'; import utxolib from '@runonflux/utxo-lib'; -import { decodeFunctionData } from 'viem'; +import { decodeFunctionData, erc20Abi } from 'viem'; import * as abi from '@runonflux/aa-schnorr-multisig-sdk/dist/abi'; import { toCashAddress } from 'bchaddrjs'; import { cryptos, utxo } from '../types'; @@ -130,13 +130,18 @@ export function decodeTransactionForApproval( interface decodedAbiData { functionName: string; - args: [string, BigInt, string]; + args: [string, bigint, string]; } interface userOperation { userOpRequest: { sender: string; callData: `0x${string}`; + callGasLimit: `0x${string}`; + verificationGasLimit: `0x${string}`; + preVerificationGas: `0x${string}`; + maxFeePerGas: `0x${string}`; + maxPriorityFeePerGas: `0x${string}`; }; } @@ -145,9 +150,31 @@ export function decodeEVMTransactionForApproval( chain: keyof cryptos, ) { try { - const decimals = blockchains[chain].decimals; + let decimals = blockchains[chain].decimals; const multisigUserOpJSON = JSON.parse(rawTx) as userOperation; - const { callData, sender } = multisigUserOpJSON.userOpRequest; + const { + callData, + sender, + callGasLimit, + verificationGasLimit, + preVerificationGas, + maxFeePerGas, + maxPriorityFeePerGas, + } = multisigUserOpJSON.userOpRequest; + + const totalGasLimit = new BigNumber(callGasLimit) + .plus(new BigNumber(verificationGasLimit)) + .plus(new BigNumber(preVerificationGas)); + + const totalMaxWeiPerGas = new BigNumber(maxFeePerGas).plus( + new BigNumber(maxPriorityFeePerGas), + ); + + const totalFeeWei = totalGasLimit.multipliedBy(totalMaxWeiPerGas); + + console.log(multisigUserOpJSON); + + // callGasLimit":"0x5ea6","verificationGasLimit":"0x11b5a","preVerificationGas":"0xdf89","maxFeePerGas":"0xee6b28000","maxPriorityFeePerGas":"0x77359400", const decodedData: decodedAbiData = decodeFunctionData({ abi: abi.MultiSigSmartAccount_abi, @@ -161,7 +188,7 @@ export function decodeEVMTransactionForApproval( decodedData && decodedData.functionName === 'execute' && decodedData.args && - decodedData.args.length === 3 + decodedData.args.length >= 3 ) { txReceiver = decodedData.args[0]; amount = new BigNumber(decodedData.args[1].toString()) @@ -175,8 +202,41 @@ export function decodeEVMTransactionForApproval( sender, receiver: txReceiver, amount, - fee: '0', // @todo: calculate fee + fee: totalFeeWei.toFixed(), + token: '', }; + + if (amount === '0') { + txInfo.token = decodedData.args[0]; + + // find the token in our token list + const token = blockchains[chain].tokens.find( + (t) => t.contract.toLowerCase() === txInfo.token.toLowerCase(), + ); + if (token) { + decimals = token.decimals; + } + const contractData: `0x${string}` = decodedData.args[2] as `0x${string}`; + // most likely we are dealing with a contract call, sending some erc20 token + // docode args[2] which is operation + const decodedDataContract: decodedAbiData = decodeFunctionData({ + abi: erc20Abi, + data: contractData, + }) as unknown as decodedAbiData; // Cast decodedDataContract to decodedAbiData type. + console.log(decodedDataContract); + if ( + decodedDataContract && + decodedDataContract.functionName === 'transfer' && + decodedDataContract.args && + decodedDataContract.args.length >= 2 + ) { + txInfo.receiver = decodedDataContract.args[0]; + txInfo.amount = new BigNumber(decodedDataContract.args[1].toString()) + .dividedBy(new BigNumber(10 ** decimals)) + .toFixed(); + } + } + return txInfo; } catch (error) { console.log(error); @@ -185,6 +245,7 @@ export function decodeEVMTransactionForApproval( receiver: 'decodingError', amount: 'decodingError', fee: 'decodingError', + token: 'decodingError', }; return txInfo; } diff --git a/src/storage/backends.ts b/src/storage/backends.ts index 6bc6415a..76ce0823 100644 --- a/src/storage/backends.ts +++ b/src/storage/backends.ts @@ -49,7 +49,10 @@ const btcSignet = { node: 'blockbookbitcoinsignet.app.runonflux.io', }; const sepolia = { - node: 'node.sepolia.runonflux.io', + node: 'node.ethereum-sepolia.runonflux.io', +}; +const eth = { + node: 'node.ethereum-mainnet.runonflux.io', }; export function backends() { @@ -65,6 +68,7 @@ export function backends() { btcTestnet: localForgeBackends?.btcTestnet || btcTestnet, btcSignet: localForgeBackends?.btcSignet || btcSignet, sepolia: localForgeBackends?.sepolia || sepolia, + eth: localForgeBackends?.eth || eth, }; } @@ -81,5 +85,6 @@ export function backendsOriginal() { btcTestnet, btcSignet, sepolia, + eth, }; } diff --git a/src/storage/blockchains.ts b/src/storage/blockchains.ts index 00383063..90b8b773 100644 --- a/src/storage/blockchains.ts +++ b/src/storage/blockchains.ts @@ -11,6 +11,7 @@ const dogeLogo = '/src/assets/doge.svg'; const zecLogo = '/src/assets/zec.svg'; const bchLogo = '/src/assets/bch.svg'; const ethLogo = '/src/assets/eth.svg'; +const tethLogo = '/src/assets/teth.svg'; const flux = { id: 'flux', @@ -300,9 +301,9 @@ const bch = { const sepolia = { id: 'sepolia', libid: 'sepolia', - name: 'Sepolia', - symbol: 'ETH', - logo: ethLogo, + name: 'Testnet Sepolia', + symbol: 'TEST-ETH', + logo: tethLogo, slip: 1, decimals: 18, node: backends().sepolia.node, @@ -318,11 +319,73 @@ const sepolia = { factorySalt: 'aafactorysalt', // factory uses this salt factoryAddress: '0xA76f98D25C9775F67DCf8B9EF9618d454D287467', entrypointAddress: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789', + baseFee: 120, // 120 gwei + priorityFee: 5, // 5 gwei + gasLimit: 500000, // 500k gas + tokens: [ + { + contract: '', // first is always the native 'no contract' token 0x0000000000000000000000000000000000000000 + name: 'Testnet Ethereum Sepolia', + symbol: 'TEST-ETH', + decimals: 18, + logo: tethLogo, + }, + { + contract: '0x690cc0235aBEA2cF89213E30D0F0Ea0fC054B909', + name: 'Fake Flux', + symbol: 'TEST-FLUX', + decimals: 8, + logo: fluxLogo, + }, + ], +}; + +const eth = { + id: 'eth', + libid: 'eth', + name: 'Ethereum', + symbol: 'ETH', + logo: ethLogo, + slip: 60, + decimals: 18, + node: backends().eth.node, + bip32: { + // not specified, use default + public: 0x0488b21e, + private: 0x0488ade4, + }, + scriptType: 'p2sh', // not specified, use default + chainType: 'evm', + backend: 'alchemy', + accountSalt: 'aasalt', // ssp uses this salt for smart accounts + factorySalt: 'aafactorysalt', // factory uses this salt + factoryAddress: '0xA76f98D25C9775F67DCf8B9EF9618d454D287467', + entrypointAddress: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789', + baseFee: 8, // 8 gwei + priorityFee: 2, // 2 gwei + gasLimit: 500000, // 500k gas + tokens: [ + { + contract: '', // first is always the native 'no contract' token 0x0000000000000000000000000000000000000000 + name: 'Ethereum', + symbol: 'ETH', + decimals: 18, + logo: ethLogo, + }, + { + contract: '0x720cd16b011b987da3518fbf38c3071d4f0d1495', + name: 'Flux', + symbol: 'FLUX', + decimals: 8, + logo: fluxLogo, + }, + ], }; export const blockchains = { btc, flux, + eth, doge, ltc, bch, diff --git a/src/store/index.ts b/src/store/index.ts index 6fbe5c44..08b9d805 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -30,6 +30,7 @@ const chains = { btcTestnet: chainSliceBase('btcTestnet'), btcSignet: chainSliceBase('btcSignet'), sepolia: chainSliceBase('sepolia'), + eth: chainSliceBase('eth'), }; // ********** Import chains ********** @@ -51,6 +52,7 @@ const reducers = combineReducers({ btcTestnet: chains.btcTestnet.reducer, btcSignet: chains.btcSignet.reducer, sepolia: chains.sepolia.reducer, + eth: chains.eth.reducer, }); export const storage = new MMKV(); diff --git a/src/types.d.ts b/src/types.d.ts index b26a62d2..3b75c12b 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -176,6 +176,8 @@ export interface wallet { unconfirmedBalance: string; transactions: transaction[]; nodes?: node[]; + tokenBalances?: tokenBalanceEVM[]; + activatedTokens?: string[]; } export interface node { @@ -243,6 +245,25 @@ export interface evm_call { result: string; } +export interface tokenBalanceEVM { + contract: string; + balance: string; +} + +export interface tokenBalance { + contractAddress: string; + tokenBalance: string; +} + +export interface alchemyCallTokenBalances { + jsonrpc: string; + id: number; + result: { + address: string; + tokenBalances: tokenBalance[]; + }; +} + export interface etherscan_external_tx { blockNumber: string; timeStamp: string; @@ -283,6 +304,12 @@ export interface etherscan_internal_tx { errCode: string; } +export interface eth_evm { + jsonrpc: string; + id: number; + result: string; +} + export interface etherscan_call_external_txs { status: string; message: string; @@ -387,6 +414,7 @@ export interface cryptos { btcTestnet: number; btcSignet: number; sepolia: number; + eth: number; } export interface externalIdentity { @@ -402,6 +430,7 @@ export interface currencySSPRelay { export interface networkFee { coin: string; + base: number; economy: number; normal: number; fast: number; From 0a23a0821d705621c09fec36713ba832ea8ec925 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Wed, 10 Jul 2024 23:03:41 +0800 Subject: [PATCH 22/28] decode evm tx for approval --- .../TransactionRequest/TransactionRequest.tsx | 13 ++++++++++++- src/lib/transactions.ts | 10 +++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/components/TransactionRequest/TransactionRequest.tsx b/src/components/TransactionRequest/TransactionRequest.tsx index 4c67ff93..7543e909 100644 --- a/src/components/TransactionRequest/TransactionRequest.tsx +++ b/src/components/TransactionRequest/TransactionRequest.tsx @@ -23,6 +23,7 @@ const TransactionRequest = (props: { const [sendingAmount, setSendingAmount] = useState(''); const [receiverAddress, setReceiverAddress] = useState(''); const [senderAddress, setSenderAddress] = useState(''); + const [token, setToken] = useState(''); const [fee, setFee] = useState(''); const [authenticationOpen, setAuthenticationOpen] = useState(false); const blockchainConfig = blockchains[props.chain]; @@ -67,6 +68,7 @@ const TransactionRequest = (props: { setSendingAmount(txInfo.amount); setReceiverAddress(txInfo.receiver); setSenderAddress(txInfo.sender); + setToken(txInfo.token || ''); if (props.utxos && props.utxos.length) { setFee(txInfo.fee); } @@ -117,7 +119,16 @@ const TransactionRequest = (props: { {t('home:sending')} - {' ' + sendingAmount + ' ' + blockchainConfig.symbol + ' '} + {' ' + + sendingAmount + + ' ' + + (token + ? blockchainConfig.tokens.find( + (ttt) => + ttt.contract.toLocaleLowerCase() === token.toLowerCase(), + ) + : blockchainConfig.symbol) + + ' '} {t('home:to')} diff --git a/src/lib/transactions.ts b/src/lib/transactions.ts index 09f7fe47..3c8f79dd 100644 --- a/src/lib/transactions.ts +++ b/src/lib/transactions.ts @@ -15,11 +15,19 @@ interface output { value: number; } +interface tokenInfo { + sender: string; + receiver: string; + amount: string; + fee: string; + token?: string; +} + export function decodeTransactionForApproval( rawTx: string, chain: keyof cryptos, utxos: utxo[], -) { +): tokenInfo { try { if (blockchains[chain].chainType === 'evm') { return decodeEVMTransactionForApproval(rawTx, chain); From 932e16dd0d2d99d92a66c02eb3eccdf6ba85bd7c Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Wed, 10 Jul 2024 23:36:59 +0800 Subject: [PATCH 23/28] improve tx request evm --- src/components/TransactionRequest/TransactionRequest.tsx | 7 +++++-- src/lib/transactions.ts | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/components/TransactionRequest/TransactionRequest.tsx b/src/components/TransactionRequest/TransactionRequest.tsx index 7543e909..969c1852 100644 --- a/src/components/TransactionRequest/TransactionRequest.tsx +++ b/src/components/TransactionRequest/TransactionRequest.tsx @@ -69,7 +69,10 @@ const TransactionRequest = (props: { setReceiverAddress(txInfo.receiver); setSenderAddress(txInfo.sender); setToken(txInfo.token || ''); - if (props.utxos && props.utxos.length) { + if ( + (props.utxos && props.utxos.length) || + blockchains[props.chain].chainType === 'evm' + ) { setFee(txInfo.fee); } console.log(fee); @@ -126,7 +129,7 @@ const TransactionRequest = (props: { ? blockchainConfig.tokens.find( (ttt) => ttt.contract.toLocaleLowerCase() === token.toLowerCase(), - ) + )?.symbol : blockchainConfig.symbol) + ' '} diff --git a/src/lib/transactions.ts b/src/lib/transactions.ts index 3c8f79dd..dbff43cd 100644 --- a/src/lib/transactions.ts +++ b/src/lib/transactions.ts @@ -178,7 +178,9 @@ export function decodeEVMTransactionForApproval( new BigNumber(maxPriorityFeePerGas), ); - const totalFeeWei = totalGasLimit.multipliedBy(totalMaxWeiPerGas); + const totalFeeWei = totalGasLimit + .multipliedBy(totalMaxWeiPerGas) + .dividedBy(10 ** 18); console.log(multisigUserOpJSON); From 03de11aae60dbf7c9061a6b44cfe087dee533e33 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Thu, 11 Jul 2024 08:02:41 +0800 Subject: [PATCH 24/28] bump packages --- Gemfile.lock | 2 +- ios/Podfile.lock | 486 ++++++++++++++++++------------------ package.json | 40 +-- yarn.lock | 628 +++++++++++++++++++++++------------------------ 4 files changed, 576 insertions(+), 580 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index ea229728..40d2bcc4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -68,7 +68,7 @@ GEM i18n (1.14.5) concurrent-ruby (~> 1.0) json (2.7.2) - minitest (5.24.0) + minitest (5.24.1) molinillo (0.8.0) nanaimo (0.3.0) nap (1.1.0) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 649ab17a..8db26ac7 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,7 +1,7 @@ PODS: - boost (1.83.0) - DoubleConversion (1.1.6) - - FBLazyVector (0.74.2) + - FBLazyVector (0.74.3) - Firebase (10.27.0): - Firebase/Core (= 10.27.0) - Firebase/Core (10.27.0): @@ -122,9 +122,9 @@ PODS: - GoogleUtilities/UserDefaults (7.13.3): - GoogleUtilities/Logger - GoogleUtilities/Privacy - - hermes-engine (0.74.2): - - hermes-engine/Pre-built (= 0.74.2) - - hermes-engine/Pre-built (0.74.2) + - hermes-engine (0.74.3): + - hermes-engine/Pre-built (= 0.74.3) + - hermes-engine/Pre-built (0.74.3) - MMKV (1.3.5): - MMKVCore (~> 1.3.5) - MMKVCore (1.3.5) @@ -151,27 +151,27 @@ PODS: - DoubleConversion - fmt (= 9.1.0) - glog - - RCTDeprecation (0.74.2) - - RCTRequired (0.74.2) - - RCTTypeSafety (0.74.2): - - FBLazyVector (= 0.74.2) - - RCTRequired (= 0.74.2) - - React-Core (= 0.74.2) - - React (0.74.2): - - React-Core (= 0.74.2) - - React-Core/DevSupport (= 0.74.2) - - React-Core/RCTWebSocket (= 0.74.2) - - React-RCTActionSheet (= 0.74.2) - - React-RCTAnimation (= 0.74.2) - - React-RCTBlob (= 0.74.2) - - React-RCTImage (= 0.74.2) - - React-RCTLinking (= 0.74.2) - - React-RCTNetwork (= 0.74.2) - - React-RCTSettings (= 0.74.2) - - React-RCTText (= 0.74.2) - - React-RCTVibration (= 0.74.2) - - React-callinvoker (0.74.2) - - React-Codegen (0.74.2): + - RCTDeprecation (0.74.3) + - RCTRequired (0.74.3) + - RCTTypeSafety (0.74.3): + - FBLazyVector (= 0.74.3) + - RCTRequired (= 0.74.3) + - React-Core (= 0.74.3) + - React (0.74.3): + - React-Core (= 0.74.3) + - React-Core/DevSupport (= 0.74.3) + - React-Core/RCTWebSocket (= 0.74.3) + - React-RCTActionSheet (= 0.74.3) + - React-RCTAnimation (= 0.74.3) + - React-RCTBlob (= 0.74.3) + - React-RCTImage (= 0.74.3) + - React-RCTLinking (= 0.74.3) + - React-RCTNetwork (= 0.74.3) + - React-RCTSettings (= 0.74.3) + - React-RCTText (= 0.74.3) + - React-RCTVibration (= 0.74.3) + - React-callinvoker (0.74.3) + - React-Codegen (0.74.3): - DoubleConversion - glog - hermes-engine @@ -191,12 +191,12 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-Core (0.74.2): + - React-Core (0.74.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.74.2) + - React-Core/Default (= 0.74.3) - React-cxxreact - React-featureflags - React-hermes @@ -208,7 +208,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/CoreModulesHeaders (0.74.2): + - React-Core/CoreModulesHeaders (0.74.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -225,7 +225,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/Default (0.74.2): + - React-Core/Default (0.74.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -241,13 +241,13 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/DevSupport (0.74.2): + - React-Core/DevSupport (0.74.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.74.2) - - React-Core/RCTWebSocket (= 0.74.2) + - React-Core/Default (= 0.74.3) + - React-Core/RCTWebSocket (= 0.74.3) - React-cxxreact - React-featureflags - React-hermes @@ -259,7 +259,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTActionSheetHeaders (0.74.2): + - React-Core/RCTActionSheetHeaders (0.74.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -276,7 +276,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTAnimationHeaders (0.74.2): + - React-Core/RCTAnimationHeaders (0.74.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -293,7 +293,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTBlobHeaders (0.74.2): + - React-Core/RCTBlobHeaders (0.74.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -310,7 +310,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTImageHeaders (0.74.2): + - React-Core/RCTImageHeaders (0.74.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -327,7 +327,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTLinkingHeaders (0.74.2): + - React-Core/RCTLinkingHeaders (0.74.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -344,7 +344,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTNetworkHeaders (0.74.2): + - React-Core/RCTNetworkHeaders (0.74.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -361,7 +361,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTSettingsHeaders (0.74.2): + - React-Core/RCTSettingsHeaders (0.74.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -378,7 +378,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTTextHeaders (0.74.2): + - React-Core/RCTTextHeaders (0.74.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -395,7 +395,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTVibrationHeaders (0.74.2): + - React-Core/RCTVibrationHeaders (0.74.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -412,12 +412,12 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTWebSocket (0.74.2): + - React-Core/RCTWebSocket (0.74.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.74.2) + - React-Core/Default (= 0.74.3) - React-cxxreact - React-featureflags - React-hermes @@ -429,36 +429,36 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-CoreModules (0.74.2): + - React-CoreModules (0.74.3): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety (= 0.74.2) + - RCTTypeSafety (= 0.74.3) - React-Codegen - - React-Core/CoreModulesHeaders (= 0.74.2) - - React-jsi (= 0.74.2) + - React-Core/CoreModulesHeaders (= 0.74.3) + - React-jsi (= 0.74.3) - React-jsinspector - React-NativeModulesApple - React-RCTBlob - - React-RCTImage (= 0.74.2) + - React-RCTImage (= 0.74.3) - ReactCommon - SocketRocket (= 0.7.0) - - React-cxxreact (0.74.2): + - React-cxxreact (0.74.3): - boost (= 1.83.0) - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.74.2) - - React-debug (= 0.74.2) - - React-jsi (= 0.74.2) + - React-callinvoker (= 0.74.3) + - React-debug (= 0.74.3) + - React-jsi (= 0.74.3) - React-jsinspector - - React-logger (= 0.74.2) - - React-perflogger (= 0.74.2) - - React-runtimeexecutor (= 0.74.2) - - React-debug (0.74.2) - - React-Fabric (0.74.2): + - React-logger (= 0.74.3) + - React-perflogger (= 0.74.3) + - React-runtimeexecutor (= 0.74.3) + - React-debug (0.74.3) + - React-Fabric (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -469,20 +469,20 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.74.2) - - React-Fabric/attributedstring (= 0.74.2) - - React-Fabric/componentregistry (= 0.74.2) - - React-Fabric/componentregistrynative (= 0.74.2) - - React-Fabric/components (= 0.74.2) - - React-Fabric/core (= 0.74.2) - - React-Fabric/imagemanager (= 0.74.2) - - React-Fabric/leakchecker (= 0.74.2) - - React-Fabric/mounting (= 0.74.2) - - React-Fabric/scheduler (= 0.74.2) - - React-Fabric/telemetry (= 0.74.2) - - React-Fabric/templateprocessor (= 0.74.2) - - React-Fabric/textlayoutmanager (= 0.74.2) - - React-Fabric/uimanager (= 0.74.2) + - React-Fabric/animations (= 0.74.3) + - React-Fabric/attributedstring (= 0.74.3) + - React-Fabric/componentregistry (= 0.74.3) + - React-Fabric/componentregistrynative (= 0.74.3) + - React-Fabric/components (= 0.74.3) + - React-Fabric/core (= 0.74.3) + - React-Fabric/imagemanager (= 0.74.3) + - React-Fabric/leakchecker (= 0.74.3) + - React-Fabric/mounting (= 0.74.3) + - React-Fabric/scheduler (= 0.74.3) + - React-Fabric/telemetry (= 0.74.3) + - React-Fabric/templateprocessor (= 0.74.3) + - React-Fabric/textlayoutmanager (= 0.74.3) + - React-Fabric/uimanager (= 0.74.3) - React-graphics - React-jsi - React-jsiexecutor @@ -491,7 +491,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.74.2): + - React-Fabric/animations (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -510,7 +510,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.74.2): + - React-Fabric/attributedstring (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -529,7 +529,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.74.2): + - React-Fabric/componentregistry (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -548,7 +548,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.74.2): + - React-Fabric/componentregistrynative (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -567,7 +567,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.74.2): + - React-Fabric/components (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -578,17 +578,17 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/inputaccessory (= 0.74.2) - - React-Fabric/components/legacyviewmanagerinterop (= 0.74.2) - - React-Fabric/components/modal (= 0.74.2) - - React-Fabric/components/rncore (= 0.74.2) - - React-Fabric/components/root (= 0.74.2) - - React-Fabric/components/safeareaview (= 0.74.2) - - React-Fabric/components/scrollview (= 0.74.2) - - React-Fabric/components/text (= 0.74.2) - - React-Fabric/components/textinput (= 0.74.2) - - React-Fabric/components/unimplementedview (= 0.74.2) - - React-Fabric/components/view (= 0.74.2) + - React-Fabric/components/inputaccessory (= 0.74.3) + - React-Fabric/components/legacyviewmanagerinterop (= 0.74.3) + - React-Fabric/components/modal (= 0.74.3) + - React-Fabric/components/rncore (= 0.74.3) + - React-Fabric/components/root (= 0.74.3) + - React-Fabric/components/safeareaview (= 0.74.3) + - React-Fabric/components/scrollview (= 0.74.3) + - React-Fabric/components/text (= 0.74.3) + - React-Fabric/components/textinput (= 0.74.3) + - React-Fabric/components/unimplementedview (= 0.74.3) + - React-Fabric/components/view (= 0.74.3) - React-graphics - React-jsi - React-jsiexecutor @@ -597,7 +597,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/inputaccessory (0.74.2): + - React-Fabric/components/inputaccessory (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -616,7 +616,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.74.2): + - React-Fabric/components/legacyviewmanagerinterop (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -635,7 +635,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/modal (0.74.2): + - React-Fabric/components/modal (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -654,7 +654,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/rncore (0.74.2): + - React-Fabric/components/rncore (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -673,7 +673,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.74.2): + - React-Fabric/components/root (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -692,7 +692,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/safeareaview (0.74.2): + - React-Fabric/components/safeareaview (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -711,7 +711,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/scrollview (0.74.2): + - React-Fabric/components/scrollview (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -730,7 +730,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/text (0.74.2): + - React-Fabric/components/text (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -749,7 +749,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/textinput (0.74.2): + - React-Fabric/components/textinput (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -768,7 +768,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/unimplementedview (0.74.2): + - React-Fabric/components/unimplementedview (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -787,7 +787,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.74.2): + - React-Fabric/components/view (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -807,7 +807,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/core (0.74.2): + - React-Fabric/core (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -826,7 +826,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.74.2): + - React-Fabric/imagemanager (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -845,7 +845,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.74.2): + - React-Fabric/leakchecker (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -864,7 +864,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.74.2): + - React-Fabric/mounting (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -883,7 +883,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.74.2): + - React-Fabric/scheduler (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -902,7 +902,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.74.2): + - React-Fabric/telemetry (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -921,7 +921,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.74.2): + - React-Fabric/templateprocessor (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -940,7 +940,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/textlayoutmanager (0.74.2): + - React-Fabric/textlayoutmanager (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -960,7 +960,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.74.2): + - React-Fabric/uimanager (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -979,45 +979,45 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricImage (0.74.2): + - React-FabricImage (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired (= 0.74.2) - - RCTTypeSafety (= 0.74.2) + - RCTRequired (= 0.74.3) + - RCTTypeSafety (= 0.74.3) - React-Fabric - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.74.2) + - React-jsiexecutor (= 0.74.3) - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (0.74.2) - - React-graphics (0.74.2): + - React-featureflags (0.74.3) + - React-graphics (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly/Fabric (= 2024.01.01.00) - - React-Core/Default (= 0.74.2) + - React-Core/Default (= 0.74.3) - React-utils - - React-hermes (0.74.2): + - React-hermes (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.74.2) + - React-cxxreact (= 0.74.3) - React-jsi - - React-jsiexecutor (= 0.74.2) + - React-jsiexecutor (= 0.74.3) - React-jsinspector - - React-perflogger (= 0.74.2) + - React-perflogger (= 0.74.3) - React-runtimeexecutor - - React-ImageManager (0.74.2): + - React-ImageManager (0.74.3): - glog - RCT-Folly/Fabric - React-Core/Default @@ -1026,41 +1026,41 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jserrorhandler (0.74.2): + - React-jserrorhandler (0.74.3): - RCT-Folly/Fabric (= 2024.01.01.00) - React-debug - React-jsi - React-Mapbuffer - - React-jsi (0.74.2): + - React-jsi (0.74.3): - boost (= 1.83.0) - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-jsiexecutor (0.74.2): + - React-jsiexecutor (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.74.2) - - React-jsi (= 0.74.2) + - React-cxxreact (= 0.74.3) + - React-jsi (= 0.74.3) - React-jsinspector - - React-perflogger (= 0.74.2) - - React-jsinspector (0.74.2): + - React-perflogger (= 0.74.3) + - React-jsinspector (0.74.3): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - React-featureflags - React-jsi - - React-runtimeexecutor (= 0.74.2) - - React-jsitracing (0.74.2): + - React-runtimeexecutor (= 0.74.3) + - React-jsitracing (0.74.3): - React-jsi - - React-logger (0.74.2): + - React-logger (0.74.3): - glog - - React-Mapbuffer (0.74.2): + - React-Mapbuffer (0.74.3): - glog - React-debug - react-native-biometrics (3.0.1): @@ -1112,7 +1112,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-quick-crypto (0.7.0): + - react-native-quick-crypto (0.7.1): - DoubleConversion - glog - hermes-engine @@ -1135,10 +1135,10 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-safe-area-context (4.10.7): + - react-native-safe-area-context (4.10.8): - React-Core - - React-nativeconfig (0.74.2) - - React-NativeModulesApple (0.74.2): + - React-nativeconfig (0.74.3) + - React-NativeModulesApple (0.74.3): - glog - hermes-engine - React-callinvoker @@ -1149,10 +1149,10 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.74.2) - - React-RCTActionSheet (0.74.2): - - React-Core/RCTActionSheetHeaders (= 0.74.2) - - React-RCTAnimation (0.74.2): + - React-perflogger (0.74.3) + - React-RCTActionSheet (0.74.3): + - React-Core/RCTActionSheetHeaders (= 0.74.3) + - React-RCTAnimation (0.74.3): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen @@ -1160,7 +1160,7 @@ PODS: - React-jsi - React-NativeModulesApple - ReactCommon - - React-RCTAppDelegate (0.74.2): + - React-RCTAppDelegate (0.74.3): - RCT-Folly (= 2024.01.01.00) - RCTRequired - RCTTypeSafety @@ -1184,7 +1184,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon - - React-RCTBlob (0.74.2): + - React-RCTBlob (0.74.3): - DoubleConversion - fmt (= 9.1.0) - hermes-engine @@ -1197,7 +1197,7 @@ PODS: - React-NativeModulesApple - React-RCTNetwork - ReactCommon - - React-RCTFabric (0.74.2): + - React-RCTFabric (0.74.3): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) @@ -1217,7 +1217,7 @@ PODS: - React-runtimescheduler - React-utils - Yoga - - React-RCTImage (0.74.2): + - React-RCTImage (0.74.3): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen @@ -1226,14 +1226,14 @@ PODS: - React-NativeModulesApple - React-RCTNetwork - ReactCommon - - React-RCTLinking (0.74.2): + - React-RCTLinking (0.74.3): - React-Codegen - - React-Core/RCTLinkingHeaders (= 0.74.2) - - React-jsi (= 0.74.2) + - React-Core/RCTLinkingHeaders (= 0.74.3) + - React-jsi (= 0.74.3) - React-NativeModulesApple - ReactCommon - - ReactCommon/turbomodule/core (= 0.74.2) - - React-RCTNetwork (0.74.2): + - ReactCommon/turbomodule/core (= 0.74.3) + - React-RCTNetwork (0.74.3): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen @@ -1241,7 +1241,7 @@ PODS: - React-jsi - React-NativeModulesApple - ReactCommon - - React-RCTSettings (0.74.2): + - React-RCTSettings (0.74.3): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen @@ -1249,23 +1249,23 @@ PODS: - React-jsi - React-NativeModulesApple - ReactCommon - - React-RCTText (0.74.2): - - React-Core/RCTTextHeaders (= 0.74.2) + - React-RCTText (0.74.3): + - React-Core/RCTTextHeaders (= 0.74.3) - Yoga - - React-RCTVibration (0.74.2): + - React-RCTVibration (0.74.3): - RCT-Folly (= 2024.01.01.00) - React-Codegen - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - ReactCommon - - React-rendererdebug (0.74.2): + - React-rendererdebug (0.74.3): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) - React-debug - - React-rncore (0.74.2) - - React-RuntimeApple (0.74.2): + - React-rncore (0.74.3) + - React-RuntimeApple (0.74.3): - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - React-callinvoker @@ -1283,7 +1283,7 @@ PODS: - React-runtimeexecutor - React-RuntimeHermes - React-utils - - React-RuntimeCore (0.74.2): + - React-RuntimeCore (0.74.3): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) @@ -1296,9 +1296,9 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (0.74.2): - - React-jsi (= 0.74.2) - - React-RuntimeHermes (0.74.2): + - React-runtimeexecutor (0.74.3): + - React-jsi (= 0.74.3) + - React-RuntimeHermes (0.74.3): - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - React-featureflags @@ -1309,7 +1309,7 @@ PODS: - React-nativeconfig - React-RuntimeCore - React-utils - - React-runtimescheduler (0.74.2): + - React-runtimescheduler (0.74.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -1321,51 +1321,51 @@ PODS: - React-rendererdebug - React-runtimeexecutor - React-utils - - React-utils (0.74.2): + - React-utils (0.74.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - React-debug - - React-jsi (= 0.74.2) - - ReactCommon (0.74.2): - - ReactCommon/turbomodule (= 0.74.2) - - ReactCommon/turbomodule (0.74.2): + - React-jsi (= 0.74.3) + - ReactCommon (0.74.3): + - ReactCommon/turbomodule (= 0.74.3) + - ReactCommon/turbomodule (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.74.2) - - React-cxxreact (= 0.74.2) - - React-jsi (= 0.74.2) - - React-logger (= 0.74.2) - - React-perflogger (= 0.74.2) - - ReactCommon/turbomodule/bridging (= 0.74.2) - - ReactCommon/turbomodule/core (= 0.74.2) - - ReactCommon/turbomodule/bridging (0.74.2): + - React-callinvoker (= 0.74.3) + - React-cxxreact (= 0.74.3) + - React-jsi (= 0.74.3) + - React-logger (= 0.74.3) + - React-perflogger (= 0.74.3) + - ReactCommon/turbomodule/bridging (= 0.74.3) + - ReactCommon/turbomodule/core (= 0.74.3) + - ReactCommon/turbomodule/bridging (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.74.2) - - React-cxxreact (= 0.74.2) - - React-jsi (= 0.74.2) - - React-logger (= 0.74.2) - - React-perflogger (= 0.74.2) - - ReactCommon/turbomodule/core (0.74.2): + - React-callinvoker (= 0.74.3) + - React-cxxreact (= 0.74.3) + - React-jsi (= 0.74.3) + - React-logger (= 0.74.3) + - React-perflogger (= 0.74.3) + - ReactCommon/turbomodule/core (0.74.3): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.74.2) - - React-cxxreact (= 0.74.2) - - React-debug (= 0.74.2) - - React-jsi (= 0.74.2) - - React-logger (= 0.74.2) - - React-perflogger (= 0.74.2) - - React-utils (= 0.74.2) + - React-callinvoker (= 0.74.3) + - React-cxxreact (= 0.74.3) + - React-debug (= 0.74.3) + - React-jsi (= 0.74.3) + - React-logger (= 0.74.3) + - React-perflogger (= 0.74.3) + - React-utils (= 0.74.3) - ReactNativeCameraKit (13.0.0): - React-Core - RNCClipboard (1.14.1): @@ -1382,7 +1382,7 @@ PODS: - FirebaseCoreExtension - React-Core - RNFBApp - - RNGestureHandler (2.16.2): + - RNGestureHandler (2.17.1): - DoubleConversion - glog - hermes-engine @@ -1410,7 +1410,7 @@ PODS: - React-Core - RNPermissions (3.10.1): - React-Core - - RNReanimated (3.11.0): + - RNReanimated (3.14.0): - DoubleConversion - glog - hermes-engine @@ -1431,7 +1431,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNScreens (3.31.1): + - RNScreens (3.32.0): - DoubleConversion - glog - hermes-engine @@ -1571,7 +1571,7 @@ EXTERNAL SOURCES: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-2024-06-03-RNv0.74.2-bb1e74fe1e95c2b5a2f4f9311152da052badc2bc + :tag: hermes-2024-06-28-RNv0.74.3-7bda0c267e76d11b68a585f84cfdd65000babf85 RCT-Folly: :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTDeprecation: @@ -1710,7 +1710,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: d3f49c53809116a5d38da093a8aa78bf551aed09 DoubleConversion: 76ab83afb40bddeeee456813d9c04f67f78771b5 - FBLazyVector: 4bc164e5b5e6cfc288d2b5ff28643ea15fa1a589 + FBLazyVector: 7e977dd099937dc5458851233141583abba49ff2 Firebase: 26b040b20866a55f55eb3611b9fcf3ae64816b86 FirebaseAnalytics: f9211b719db260cc91aebee8bb539cb367d0dfd1 FirebaseCore: a2b95ae4ce7c83ceecfbbbe3b6f1cddc7415a808 @@ -1723,80 +1723,80 @@ SPEC CHECKSUMS: GoogleAppMeasurement: f65fc137531af9ad647f1c0a42f3b6a4d3a98049 GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15 - hermes-engine: 01d3e052018c2a13937aca1860fbedbccd4a41b7 + hermes-engine: 1f547997900dd0752dc0cc0ae6dd16173c49e09b MMKV: 506311d0494023c2f7e0b62cc1f31b7370fa3cfb MMKVCore: 9e2e5fd529b64a9fe15f1a7afb3d73b2e27b4db9 nanopb: 438bc412db1928dac798aa6fd75726007be04262 OpenSSL-Universal: 0db2e81615ad95efc90ce13a638986858da38c0d PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 RCT-Folly: 02617c592a293bd6d418e0a88ff4ee1f88329b47 - RCTDeprecation: b03c35057846b685b3ccadc9bfe43e349989cdb2 - RCTRequired: 194626909cfa8d39ca6663138c417bc6c431648c - RCTTypeSafety: 552aff5b8e8341660594db00e53ac889682bc120 - React: a57fe42044fe6ed3e828f8867ce070a6c5872754 - React-callinvoker: 6bedefb354a8848b534752417954caa3a5cf34f9 - React-Codegen: 0952549a095f8f8cb2fb5def1733b6b232769b1c - React-Core: 289ee3dfc1639bb9058c1e77427bb48169c26d7a - React-CoreModules: eda5ce541a1f552158317abd90a5a0f6a4f8d6f7 - React-cxxreact: 56bd17ccc6d4248116f7f95884ddb8c528379fb6 - React-debug: 164b8e302404d92d4bec39778a5e03bcb1b6eb08 - React-Fabric: 05620c36074e3ab397dd8f9db0deb6d3c38b4efa - React-FabricImage: 2a8a7f5729f5c44e32e6f58f7225ee1017ed0704 - React-featureflags: d97a6393993052e951e16a3b81206e22110be8d2 - React-graphics: ef07d701f4eb72ae6fca6ed0a7260a04f2a58dec - React-hermes: 6ccc301ababfa17a9aad25a7e33faf325fd024b4 - React-ImageManager: 00404bfe122626bc6493621f2a31ce802115a9b3 - React-jserrorhandler: 5e2632590a84363855b2083e6b3d501e93bc3f04 - React-jsi: 828703c235f4eea1647897ee8030efdc6e8e9f14 - React-jsiexecutor: 713d7bbef0a410cee5b3b78f73ed1fc16e177ba7 - React-jsinspector: e1fa5325a47f34645195c63e3312ddb6a2efef5d - React-jsitracing: 0fa7f78d8fdda794667cb2e6f19c874c1cf31d7e - React-logger: 29fa3e048f5f67fe396bc08af7606426d9bd7b5d - React-Mapbuffer: bf56147c9775491e53122a94c423ac201417e326 + RCTDeprecation: 4c7eeb42be0b2e95195563c49be08d0b839d22b4 + RCTRequired: d530a0f489699c8500e944fde963102c42dcd0c2 + RCTTypeSafety: b20878506b094fa3d9007d7b9e4be0faa3562499 + React: 2f9da0177233f60fa3462d83fcccde245759f81a + React-callinvoker: d0205f0dcebf72ec27263ab41e3a5ad827ed503f + React-Codegen: b4457c8557cb61a27508745f8b03f16afeb9ef59 + React-Core: 690ebbbf8f8dcfba6686ce8927731d3f025c3114 + React-CoreModules: 185da31f5eb2e6043c3d19b10c64c4661322ed6a + React-cxxreact: c53d2ac9246235351086b8c588feaf775b4ec7f7 + React-debug: dd8f7c772fda4196814a3b12620863d1d98b3a53 + React-Fabric: 68935648d5c81e6b84445d9e726a79301f1fac8f + React-FabricImage: c92bd5ed4b553c800ca39aee305aaf8dd3e9f4b0 + React-featureflags: ead50fe0ee4ab9278b5fd9f3f2f0f63e316452f4 + React-graphics: 71c87b09041e45c61809cd357436e570dea5ed48 + React-hermes: 917b7ab4c3cb9204c2ad020d74f313830097148b + React-ImageManager: 1086d48d00fcb511ea119bfc58fb12a72c4dcb95 + React-jserrorhandler: 84d45913636750c2e620a8c8e049964967040405 + React-jsi: 024b933267079f80c30a5cae97bf5ce521217505 + React-jsiexecutor: 45cb079c87db3f514da3acfc686387a0e01de5c5 + React-jsinspector: 1066f8b3da937daf8ced4cf3786eb29e1e4f9b30 + React-jsitracing: 6b3c8c98313642140530f93c46f5a6ca4530b446 + React-logger: fa92ba4d3a5d39ac450f59be2a3cec7b099f0304 + React-Mapbuffer: 9f68550e7c6839d01411ac8896aea5c868eff63a react-native-biometrics: 352e5a794bfffc46a0c86725ea7dc62deb085bdc react-native-encrypted-storage: db300a3f2f0aba1e818417c1c0a6be549038deb7 react-native-get-random-values: 21325b2244dfa6b58878f51f9aa42821e7ba3d06 react-native-mmkv: 8c9a677e64a1ac89b0c6cf240feea528318b3074 react-native-quick-base64: a74c4b2607b9de016877a8edb776b6ac59785809 - react-native-quick-crypto: ff585b6d4185705f0319a478761919c8c68a7d56 - react-native-safe-area-context: 422017db8bcabbada9ad607d010996c56713234c - React-nativeconfig: 9f223cd321823afdecf59ed00861ab2d69ee0fc1 - React-NativeModulesApple: ff7efaff7098639db5631236cfd91d60abff04c0 - React-perflogger: 32ed45d9cee02cf6639acae34251590dccd30994 - React-RCTActionSheet: 19f967ddaea258182b56ef11437133b056ba2adf - React-RCTAnimation: d7f4137fc44a08bba465267ea7cb1dbdb7c4ec87 - React-RCTAppDelegate: 2b3f4d8009796af209a0d496e73276b743acee08 - React-RCTBlob: c6c3e1e0251700b7bea036b893913f22e2b9cb47 - React-RCTFabric: 93a3ea55169d19294f07092013c1c9ea7a015c9b - React-RCTImage: 40528ab74a4fef0f0e2ee797a074b26d120b6cc6 - React-RCTLinking: 385b5beb96749aae9ae1606746e883e1c9f8a6a7 - React-RCTNetwork: ffc9f05bd8fa5b3bce562199ba41235ad0af645c - React-RCTSettings: 21914178bb65cb2c20c655ae1fb401617ae74618 - React-RCTText: 7f8dba1a311e99f4de15bbace2350e805f33f024 - React-RCTVibration: e4ccf673579d0d94a96b3a0b64492db08f8324d5 - React-rendererdebug: ac70f40de137ce7bdbc55eaee60c467a215d9923 - React-rncore: edfff7a3f7f82ca1e0ba26978c6d84c7a8970dac - React-RuntimeApple: a0c98b75571aa5f44ddc7c6e9fd55803fa4db00f - React-RuntimeCore: 4b8db1fe2f3f4a3a5ecb22e1a419824e3e2cd7ef - React-runtimeexecutor: 5961acc7a77b69f964e1645a5d6069e124ce6b37 - React-RuntimeHermes: c5825bfae4815fdf4e9e639340c3a986a491884c - React-runtimescheduler: 56b642bf605ba5afa500d35790928fc1d51565ad - React-utils: 4476b7fcbbd95cfd002f3e778616155241d86e31 - ReactCommon: ecad995f26e0d1e24061f60f4e5d74782f003f12 + react-native-quick-crypto: d3457afaa680f961c7bcf6c382329aafe4abddcd + react-native-safe-area-context: b7daa1a8df36095a032dff095a1ea8963cb48371 + React-nativeconfig: fa5de9d8f4dbd5917358f8ad3ad1e08762f01dcb + React-NativeModulesApple: 585d1b78e0597de364d259cb56007052d0bda5e5 + React-perflogger: 7bb9ba49435ff66b666e7966ee10082508a203e8 + React-RCTActionSheet: a2816ae2b5c8523c2bc18a8f874a724a096e6d97 + React-RCTAnimation: e78f52d7422bac13e1213e25e9bcbf99be872e1a + React-RCTAppDelegate: 24f46de486cfa3a9f46e4b0786eaf17d92e1e0c6 + React-RCTBlob: 9f9d6599d1b00690704dadc4a4bc33a7e76938be + React-RCTFabric: 609e66bb0371b9082c62ed677ee0614efe711bf2 + React-RCTImage: 39dd5aee6b92213845e1e7a7c41865801dc33493 + React-RCTLinking: 35d742a982f901f9ea416d772763e2da65c2dc7d + React-RCTNetwork: b078576c0c896c71905f841716b9f9f5922111dc + React-RCTSettings: 900aab52b5b1212f247c2944d88f4defbf6146f2 + React-RCTText: a3895ab4e5df4a5fd41b6f059eed484a0c7016d1 + React-RCTVibration: ab4912e1427d8de00ef89e9e6582094c4c25dc05 + React-rendererdebug: 542934058708a643fa5743902eb2fedc0833770a + React-rncore: f6c23d9810c8de9e369781bb7b1d5511e9d9f4e7 + React-RuntimeApple: ce41ba7df744c7a6c2cc490a9b2e15fc58019508 + React-RuntimeCore: 350218ac9ee1412ddc9806f248141c8fb9bccd8b + React-runtimeexecutor: 69cab8ddf409de6d6a855a71c8af9e7290c4e55b + React-RuntimeHermes: 9d0812e3370111dd175aa1fa8bd4da93a9efc4fd + React-runtimescheduler: 0c80752bceb80924cb8a4babc2a8e3ed70d41e87 + React-utils: a06061b3887c702235d2dac92dacbd93e1ea079e + ReactCommon: f00e436b3925a7ae44dfa294b43ef360fbd8ccc4 ReactNativeCameraKit: 9d46a5d7dd544ca64aa9c03c150d2348faf437eb RNCClipboard: 0a720adef5ec193aa0e3de24c3977222c7e52a37 RNCPicker: b7873ba797dc586bfaf3307d737cbdc620a9ff3e RNDeviceInfo: b899ce37a403a4dea52b7cb85e16e49c04a5b88e RNFBApp: 1ae7462cddf74a49df206d3418bc0170f8fa53e5 RNFBMessaging: 85f661b9f16e2b081e6809ef63d3daa4458b9042 - RNGestureHandler: 2282cfbcf86c360d29f44ace393203afd5c6cff7 + RNGestureHandler: 8dbcccada4a7e702e7dec9338c251b1cf393c960 RNNotifee: 8e2d3df3f0e9ce8f5d1fe4c967431138190b6175 RNPermissions: 23b4edd1981b4ca7cd93c1ca7e93d34b6ab2ccb8 - RNReanimated: 7ad0f08a845cb60955ee5d461d2156d7b9707118 - RNScreens: b32a9ff15bea7fcdbe5dff6477bc503f792b1208 + RNReanimated: f4ff116e33e0afc3d127f70efe928847c7c66355 + RNScreens: 5aeecbb09aa7285379b6e9f3c8a3c859bb16401c RNSVG: a48668fd382115bc89761ce291a81c4ca5f2fd2e SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d - Yoga: 2f71ecf38d934aecb366e686278102a51679c308 + Yoga: 88480008ccacea6301ff7bf58726e27a72931c8d PODFILE CHECKSUM: 5c6e6d3d84f97e6db40a0c40896cbf4157e37695 diff --git a/package.json b/package.json index c2ecfa0f..b7f03b2f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ssp-key", - "version": "1.2.0", + "version": "1.3.0", "private": true, "scripts": { "android": "react-native run-android", @@ -15,21 +15,21 @@ "postinstall": "node_modules/.bin/rn-nodeify --install 'events,assert,util,buffer,stream,process' --yarn --hack && patch-package && react-native setup-ios-permissions" }, "dependencies": { - "@alchemy/aa-core": "~3.12.3", + "@alchemy/aa-core": "~3.18.2", "@notifee/react-native": "~7.8.2", "@react-native-clipboard/clipboard": "~1.14.1", "@react-native-firebase/app": "~20.1.0", "@react-native-firebase/messaging": "~20.1.0", "@react-native-picker/picker": "~2.7.7", "@react-navigation/native": "~6.1.17", - "@react-navigation/stack": "~6.3.29", - "@reduxjs/toolkit": "~2.2.5", + "@react-navigation/stack": "~6.4.0", + "@reduxjs/toolkit": "~2.2.6", "@runonflux/aa-schnorr-multisig-sdk": "~1.0.2", "@runonflux/react-native-step-indicator": "~1.0.0", "@runonflux/utxo-lib": "~1.0.0", "@scure/bip32": "~1.4.0", "@scure/bip39": "~1.3.0", - "abitype": "~1.0.0", + "abitype": "~1.0.5", "assert": "~2.1.0", "axios": "~1.7.2", "bchaddrjs": "~0.5.2", @@ -43,22 +43,22 @@ "process": "~0.11.10", "react": "~18.3.1", "react-i18next": "~14.1.2", - "react-native": "~0.74.2", + "react-native": "~0.74.3", "react-native-biometrics": "~3.0.1", "react-native-camera-kit": "13.0.0", "react-native-device-info": "~11.1.0", "react-native-encrypted-storage": "~4.0.3", - "react-native-gesture-handler": "~2.16.2", + "react-native-gesture-handler": "~2.17.1", "react-native-get-random-values": "~1.11.0", "react-native-keyboard-aware-scroll-view": "~0.9.5", "react-native-mmkv": "~2.12.2", "react-native-permissions": "~3.10.1", "react-native-popup-menu": "~0.16.1", "react-native-quick-base64": "~2.1.2", - "react-native-quick-crypto": "~0.7.0", - "react-native-reanimated": "~3.11.0", - "react-native-safe-area-context": "~4.10.3", - "react-native-screens": "~3.31.1", + "react-native-quick-crypto": "~0.7.1", + "react-native-reanimated": "~3.14.0", + "react-native-safe-area-context": "~4.10.8", + "react-native-screens": "~3.32.0", "react-native-svg": "~15.3.0", "react-native-toast-message": "~2.2.0", "react-native-vector-icons": "~10.1.0", @@ -68,23 +68,23 @@ "socket.io-client": "~4.7.5", "stream-browserify": "~3.0.0", "util": "~0.12.5", - "viem": "~2.16.4" + "viem": "~2.17.3" }, "devDependencies": { "@types/bchaddrjs": "~0.4.3", "@babel/core": "~7.24.7", "@babel/preset-env": "~7.24.7", "@babel/runtime": "~7.24.7", - "@react-native/babel-preset": "~0.74.84", - "@react-native/eslint-config": "~0.74.84", - "@react-native/metro-config": "~0.74.84", - "@react-native/typescript-config": "~0.74.84", + "@react-native/babel-preset": "~0.74.85", + "@react-native/eslint-config": "~0.74.85", + "@react-native/metro-config": "~0.74.85", + "@react-native/typescript-config": "~0.74.85", "@react-navigation/devtools": "~6.0.26", "@testing-library/jest-native": "~5.4.3", "@testing-library/react-native": "~12.5.1", "@types/jest": "~29.5.12", "@types/metro-config": "~0.76.3", - "@types/node": "~20.14.0", + "@types/node": "~20.14.10", "@types/react": "~18.3.3", "@types/react-native": "~0.73.0", "@types/react-native-vector-icons": "~6.4.18", @@ -99,11 +99,11 @@ "eslint-plugin-prettier": "~5.1.3", "jest": "~29.7.0", "patch-package": "~8.0.0", - "prettier": "~3.3.0", - "react-native-svg-transformer": "~1.4.0", + "prettier": "~3.3.2", + "react-native-svg-transformer": "~1.5.0", "react-test-renderer": "18.3.1", "rn-nodeify": "~10.3.0", - "typescript": "~5.4.2" + "typescript": "~5.5.3" }, "engines": { "node": ">=20" diff --git a/yarn.lock b/yarn.lock index e448e83f..21afe973 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,7 +12,7 @@ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== -"@alchemy/aa-core@^3.12.3": +"@alchemy/aa-core@^3.12.3", "@alchemy/aa-core@~3.18.2": version "3.18.2" resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.18.2.tgz#b11f189404e97132f5affab938b3d4040c99f475" integrity sha512-uXVpPz5tpBiARC4QCj/MAK45J09Pt3pJQpmFDiHSj4ZEcQB7ZraP2z8Bi6jLMkMDyHPjUiTeJf+aRV3Gqyeunw== @@ -22,16 +22,6 @@ viem "2.8.6" zod "^3.22.4" -"@alchemy/aa-core@~3.12.3": - version "3.12.3" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.12.3.tgz#25ddd6533f0fe0590c28eba7d0a444c4f168ea64" - integrity sha512-nU2pvGIsWI9Wwo3aNcfke1ZJJiec5rmqkh7McTRK6G8ff1gE0yGZUBzd/73rsdWGmhBN8G5VmX0KN016+amzVQ== - dependencies: - abitype "^0.8.3" - eventemitter3 "^5.0.1" - viem "2.8.6" - zod "^3.22.4" - "@ampproject/remapping@^2.2.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" @@ -1545,9 +1535,9 @@ "@jridgewell/trace-mapping" "^0.3.25" "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" @@ -1571,13 +1561,20 @@ dependencies: "@noble/hashes" "1.3.2" -"@noble/curves@1.4.0", "@noble/curves@~1.4.0": +"@noble/curves@1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.0.tgz#f05771ef64da724997f69ee1261b2417a49522d6" integrity sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg== dependencies: "@noble/hashes" "1.4.0" +"@noble/curves@~1.4.0": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" + integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== + dependencies: + "@noble/hashes" "1.4.0" + "@noble/hashes@1.3.2": version "1.3.2" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" @@ -1629,45 +1626,45 @@ resolved "https://registry.yarnpkg.com/@react-native-clipboard/clipboard/-/clipboard-1.14.1.tgz#835f82fc86881a0808a8405f2576617bb5383554" integrity sha512-SM3el0A28SwoeJljVNhF217o0nI4E7RfalLmuRQcT1/7tGcxUjgFa3jyrEndYUct8/uxxK5EUNGUu1YEDqzxqw== -"@react-native-community/cli-clean@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-13.6.8.tgz#95ce964047f005152ac100394b6dcd5d2cc2a474" - integrity sha512-B1uxlm1N4BQuWFvBL3yRl3LVvydjswsdbTi7tMrHMtSxfRio1p9HjcmDzlzKco09Y+8qBGgakm3jcMZGLbhXQQ== +"@react-native-community/cli-clean@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-13.6.9.tgz#b6754f39c2b877c9d730feb848945150e1d52209" + integrity sha512-7Dj5+4p9JggxuVNOjPbduZBAP1SUgNhLKVw5noBUzT/3ZpUZkDM+RCSwyoyg8xKWoE4OrdUAXwAFlMcFDPKykA== dependencies: - "@react-native-community/cli-tools" "13.6.8" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" execa "^5.0.0" fast-glob "^3.3.2" -"@react-native-community/cli-config@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-13.6.8.tgz#6829ea7cdc237776c300be06f84c222bf17cf4c5" - integrity sha512-RabCkIsWdP4Ex/sf1uSP9qxc30utm+0uIJAjrZkNQynm7T4Lyqn/kT3LKm4yM6M0Qk61YxGguiaXF4601vAduw== +"@react-native-community/cli-config@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-13.6.9.tgz#d609a64d40a173c89bd7d24e31807bb7dcba69f9" + integrity sha512-rFfVBcNojcMm+KKHE/xqpqXg8HoKl4EC7bFHUrahMJ+y/tZll55+oX/PGG37rzB8QzP2UbMQ19DYQKC1G7kXeg== dependencies: - "@react-native-community/cli-tools" "13.6.8" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" cosmiconfig "^5.1.0" deepmerge "^4.3.0" fast-glob "^3.3.2" joi "^17.2.1" -"@react-native-community/cli-debugger-ui@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.8.tgz#d52fccd4b3e0860d96d75ff5b0ebb128bdc93dfd" - integrity sha512-2cS+MX/Su6sVSjqpDftFOXbK7EuPg98xzsPkdPhkQnkZwvXqodK9CAMuDMbx3lBHHtrPrpMbBCpFmPN8iVOnlA== +"@react-native-community/cli-debugger-ui@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.9.tgz#bc5727c51964206a00d417e5148b46331a81d5a5" + integrity sha512-TkN7IdFmGPPvTpAo3nCAH9uwGCPxWBEAwpqEZDrq0NWllI7Tdie8vDpGdrcuCcKalmhq6OYnkXzeBah7O1Ztpw== dependencies: serve-static "^1.13.1" -"@react-native-community/cli-doctor@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-13.6.8.tgz#05f696d94e975e4dcf7f9a1fde32fb43e4bb8a5f" - integrity sha512-/3Vdy9J3hyiu0y3nd/CU3kBqPlTRxnLXg7V6jrA1jbTOlZAMyV9imEkrqEaGK0SMOyMhh9Pipf98Ozhk0Nl4QA== +"@react-native-community/cli-doctor@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-13.6.9.tgz#f1d4eeff427ddc8a9d19851042621c10939c35cb" + integrity sha512-5quFaLdWFQB+677GXh5dGU9I5eg2z6Vg4jOX9vKnc9IffwyIFAyJfCZHrxLSRPDGNXD7biDQUdoezXYGwb6P/A== dependencies: - "@react-native-community/cli-config" "13.6.8" - "@react-native-community/cli-platform-android" "13.6.8" - "@react-native-community/cli-platform-apple" "13.6.8" - "@react-native-community/cli-platform-ios" "13.6.8" - "@react-native-community/cli-tools" "13.6.8" + "@react-native-community/cli-config" "13.6.9" + "@react-native-community/cli-platform-android" "13.6.9" + "@react-native-community/cli-platform-apple" "13.6.9" + "@react-native-community/cli-platform-ios" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" command-exists "^1.2.8" deepmerge "^4.3.0" @@ -1681,54 +1678,54 @@ wcwidth "^1.0.1" yaml "^2.2.1" -"@react-native-community/cli-hermes@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-13.6.8.tgz#85f10f663bc79f299146e749c48c06ebc4da9e29" - integrity sha512-lZi/OBFuZUj5cLK94oEgtrtmxGoqeYVRcnHXl/R5c4put9PDl+qH2bEMlGZkFiw57ae3UZKr3TMk+1s4jh3FYQ== +"@react-native-community/cli-hermes@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-13.6.9.tgz#88c8dfe936a0d4272efc54429eda9ccc3fca3ad8" + integrity sha512-GvwiwgvFw4Ws+krg2+gYj8sR3g05evmNjAHkKIKMkDTJjZ8EdyxbkifRUs1ZCq3TMZy2oeblZBXCJVOH4W7ZbA== dependencies: - "@react-native-community/cli-platform-android" "13.6.8" - "@react-native-community/cli-tools" "13.6.8" + "@react-native-community/cli-platform-android" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" hermes-profile-transformer "^0.0.6" -"@react-native-community/cli-platform-android@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.8.tgz#a3672512a9b844f93d6050537c59dd58e1b12f17" - integrity sha512-vWrqeLRRTwp2kO33nbrAgbYn8HR2c2CpIfyVJY9Ckk7HGUSwDyxdcSu7YBvt2ShdfLZH0HctWFNXsgGrfg6BDw== +"@react-native-community/cli-platform-android@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.9.tgz#b175b9b11334fc90da3f395432678bd53c30fae4" + integrity sha512-9KsYGdr08QhdvT3Ht7e8phQB3gDX9Fs427NJe0xnoBh+PDPTI2BD5ks5ttsH8CzEw8/P6H8tJCHq6hf2nxd9cw== dependencies: - "@react-native-community/cli-tools" "13.6.8" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" execa "^5.0.0" fast-glob "^3.3.2" fast-xml-parser "^4.2.4" logkitty "^0.7.1" -"@react-native-community/cli-platform-apple@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.8.tgz#4d46a2d6678a7b3264768f97393f082ed9afb264" - integrity sha512-1JPohnlXPqU44zns3ALEzIbH2cKRw6JtEDJERgLuEUbs2r2NeJgqDbKyZ7fTTO8o+pegDnn6+Rr7qGVVOuUzzg== +"@react-native-community/cli-platform-apple@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.9.tgz#02fb5dc47d62acd85f4d7a852e93216927a772fa" + integrity sha512-KoeIHfhxMhKXZPXmhQdl6EE+jGKWwoO9jUVWgBvibpVmsNjo7woaG/tfJMEWfWF3najX1EkQAoJWpCDBMYWtlA== dependencies: - "@react-native-community/cli-tools" "13.6.8" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" execa "^5.0.0" fast-glob "^3.3.2" fast-xml-parser "^4.0.12" ora "^5.4.1" -"@react-native-community/cli-platform-ios@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.8.tgz#2de1bd8529825781108c1cbba4f5b25cb062581c" - integrity sha512-/IIcIRM8qaoD7iZqsvtf6Qq1AwtChWYfB9sTn3mTiolZ5Zd5bXH37g+6liPfAICRkj2Ptq3iXmjrDVUQAxrOXw== +"@react-native-community/cli-platform-ios@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.9.tgz#f37ceab41c2302e8f0d4bcbd3bf58b3353db4306" + integrity sha512-CiUcHlGs8vE0CAB4oi1f+dzniqfGuhWPNrDvae2nm8dewlahTBwIcK5CawyGezjcJoeQhjBflh9vloska+nlnw== dependencies: - "@react-native-community/cli-platform-apple" "13.6.8" + "@react-native-community/cli-platform-apple" "13.6.9" -"@react-native-community/cli-server-api@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-13.6.8.tgz#fc654a2990a5f0b6f0b67ef04b25f699bee63f63" - integrity sha512-Lx664oWTzpVfbKUTy+3GIX7e+Mt5Zn+zdkM4ehllNdik/lbB3tM9Nrg8PSvOfI+tTXs2w55+nIydLfH+0FqJVg== +"@react-native-community/cli-server-api@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-13.6.9.tgz#269e666bc26e9d0b2f42c7f6099559b5f9259e9d" + integrity sha512-W8FSlCPWymO+tlQfM3E0JmM8Oei5HZsIk5S0COOl0MRi8h0NmHI4WSTF2GCfbFZkcr2VI/fRsocoN8Au4EZAug== dependencies: - "@react-native-community/cli-debugger-ui" "13.6.8" - "@react-native-community/cli-tools" "13.6.8" + "@react-native-community/cli-debugger-ui" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" compression "^1.7.1" connect "^3.6.5" errorhandler "^1.5.1" @@ -1737,10 +1734,10 @@ serve-static "^1.13.1" ws "^6.2.2" -"@react-native-community/cli-tools@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-13.6.8.tgz#65a9f49ce66f0e639d855e745c8dfa7ae7b6c142" - integrity sha512-1MYlae9EkbjC7DBYOGMH5xF9yDoeNYUKgEdDjL6WAUBoF2gtwiZPM6igLKi/+dhb5sCtC7fiLrLi0Oevdf+RmQ== +"@react-native-community/cli-tools@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-13.6.9.tgz#2baee279358ba1a863e737b2fa9f45659ad91929" + integrity sha512-OXaSjoN0mZVw3nrAwcY1PC0uMfyTd9fz7Cy06dh+EJc+h0wikABsVRzV8cIOPrVV+PPEEXE0DBrH20T2puZzgQ== dependencies: appdirsjs "^1.2.4" chalk "^4.1.2" @@ -1754,26 +1751,26 @@ shell-quote "^1.7.3" sudo-prompt "^9.0.0" -"@react-native-community/cli-types@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-13.6.8.tgz#1c357d3290a48232e3e639d48e43e31e422ce436" - integrity sha512-C4mVByy0i+/NPuPhdMLBR7ubEVkjVS1VwoQu/BoG1crJFNE+167QXAzH01eFbXndsjZaMWmD4Gerx7TYc6lHfA== +"@react-native-community/cli-types@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-13.6.9.tgz#08bfb796eacf0daeb31e2de516e81e78a36a1a55" + integrity sha512-RLxDppvRxXfs3hxceW/mShi+6o5yS+kFPnPqZTaMKKR5aSg7LwDpLQW4K2D22irEG8e6RKDkZUeH9aL3vO2O0w== dependencies: joi "^17.2.1" -"@react-native-community/cli@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-13.6.8.tgz#d52c22620242e161bddcd2e0b6dbacd8743ca09b" - integrity sha512-0lRdgLNaXixWY4BfFRl1J6Ao9Lapo2z+++iE7TD4GAbuxOWJSyFi+KUA8XNfSDyML4jFO02MZgyBPxAWdaminQ== - dependencies: - "@react-native-community/cli-clean" "13.6.8" - "@react-native-community/cli-config" "13.6.8" - "@react-native-community/cli-debugger-ui" "13.6.8" - "@react-native-community/cli-doctor" "13.6.8" - "@react-native-community/cli-hermes" "13.6.8" - "@react-native-community/cli-server-api" "13.6.8" - "@react-native-community/cli-tools" "13.6.8" - "@react-native-community/cli-types" "13.6.8" +"@react-native-community/cli@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-13.6.9.tgz#ba6360b94e0aba9c4001bda256cf7e57e2ecb02c" + integrity sha512-hFJL4cgLPxncJJd/epQ4dHnMg5Jy/7Q56jFvA3MHViuKpzzfTCJCB+pGY54maZbtym53UJON9WTGpM3S81UfjQ== + dependencies: + "@react-native-community/cli-clean" "13.6.9" + "@react-native-community/cli-config" "13.6.9" + "@react-native-community/cli-debugger-ui" "13.6.9" + "@react-native-community/cli-doctor" "13.6.9" + "@react-native-community/cli-hermes" "13.6.9" + "@react-native-community/cli-server-api" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" + "@react-native-community/cli-types" "13.6.9" chalk "^4.1.2" commander "^9.4.1" deepmerge "^4.3.0" @@ -1802,22 +1799,22 @@ resolved "https://registry.yarnpkg.com/@react-native-picker/picker/-/picker-2.7.7.tgz#6e19c3a72a482be015f5194794e6c14efe8762e8" integrity sha512-CTHthVmx8ujlH/u5AnxLQfsheh/DoEbo+Kbx0HGTlbKVLC1eZ4Kr9jXIIUcwB7JEgOXifdZIPQCsoTc/7GQ0ag== -"@react-native/assets-registry@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.74.84.tgz#aa472f82c1b7d8a30098c8ba22fad7b3dbb5be5f" - integrity sha512-dzUhwyaX04QosWZ8zyaaNB/WYZIdeDN1lcpfQbqiOhZJShRH+FLTDVONE/dqlMQrP+EO7lDqF0RrlIt9lnOCQQ== +"@react-native/assets-registry@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.74.85.tgz#ae903c0c25f4d6a751d53d63245d5612c81edd98" + integrity sha512-59YmIQxfGDw4aP9S/nAM+sjSFdW8fUP6fsqczCcXgL2YVEjyER9XCaUT0J1K+PdHep8pi05KUgIKUds8P3jbmA== -"@react-native/babel-plugin-codegen@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.84.tgz#a3a72c188d875601704a421e395f6909fdec40f3" - integrity sha512-UR4uiii5szIJA84mSC6GJOfYKDq7/ThyetOQT62+BBcyGeHVtHlNLNRzgaMeLqIQaT8Fq4pccMI+7QqLOMXzdw== +"@react-native/babel-plugin-codegen@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.85.tgz#067224bf5099ee2679babd700c7115822a747004" + integrity sha512-48TSDclRB5OMXiImiJkLxyCfRyLsqkCgI8buugCZzvXcYslfV7gCvcyFyQldtcOmerV+CK4RAj7QS4hmB5Mr8Q== dependencies: - "@react-native/codegen" "0.74.84" + "@react-native/codegen" "0.74.85" -"@react-native/babel-preset@0.74.84", "@react-native/babel-preset@~0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.84.tgz#703ebfc810d82c9f51f033352abd5f9fa70d492b" - integrity sha512-WUfu6Y4aGuVdocQZvx33BJiQWFH6kRCHYbZfBn2psgFrSRLgQWEQrDCxqPFObNAVSayM0rNhp2FvI5K/Eyeqlg== +"@react-native/babel-preset@0.74.85", "@react-native/babel-preset@~0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.85.tgz#3ce6ca77a318dec226fd9e3fff9c2ef7b0aa66e3" + integrity sha512-yMHUlN8INbK5BBwiBuQMftdWkpm1IgCsoJTKcGD2OpSgZhwwm8RUSvGhdRMzB2w7bsqqBmaEMleGtW6aCR7B9w== dependencies: "@babel/core" "^7.20.0" "@babel/plugin-proposal-async-generator-functions" "^7.0.0" @@ -1859,14 +1856,14 @@ "@babel/plugin-transform-typescript" "^7.5.0" "@babel/plugin-transform-unicode-regex" "^7.0.0" "@babel/template" "^7.0.0" - "@react-native/babel-plugin-codegen" "0.74.84" + "@react-native/babel-plugin-codegen" "0.74.85" babel-plugin-transform-flow-enums "^0.0.2" react-refresh "^0.14.0" -"@react-native/codegen@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.84.tgz#d3425a510b7da558ef5088d9b0aa5e0b1c05c783" - integrity sha512-0hXlnu9i0o8v+gXKQi+x6T471L85kCDwW4WrJiYAeOheWrQdNNW6rC3g8+LL7HXAf7QcHGU/8/d57iYfdVK2BQ== +"@react-native/codegen@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.85.tgz#568464071c0b9be741da1a1ab43b1df88180ca5d" + integrity sha512-N7QwoS4Hq/uQmoH83Ewedy6D0M7xbQsOU3OMcQf0eY3ltQ7S2hd9/R4UTalQWRn1OUJfXR6OG12QJ4FStKgV6Q== dependencies: "@babel/parser" "^7.20.0" glob "^7.1.1" @@ -1876,15 +1873,15 @@ mkdirp "^0.5.1" nullthrows "^1.1.1" -"@react-native/community-cli-plugin@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.84.tgz#223a0defe8118dc57c8ac852ddd13517ea10c4e2" - integrity sha512-GBKE+1sUh86fS2XXV46gMCNHMc1KetshMbYJ0AhDhldpaILZHqRBX50mdVsiYVvkzp4QjM0nmYqefuJ9NVwicQ== +"@react-native/community-cli-plugin@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.85.tgz#5bf95599166fd2b8bf10612250006e282053f6c4" + integrity sha512-ODzND33eA2owAY3g9jgCdqB+BjAh8qJ7dvmSotXgrgDYr3MJMpd8gvHTIPe2fg4Kab+wk8uipRhrE0i0RYMwtQ== dependencies: - "@react-native-community/cli-server-api" "13.6.8" - "@react-native-community/cli-tools" "13.6.8" - "@react-native/dev-middleware" "0.74.84" - "@react-native/metro-babel-transformer" "0.74.84" + "@react-native-community/cli-server-api" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" + "@react-native/dev-middleware" "0.74.85" + "@react-native/metro-babel-transformer" "0.74.85" chalk "^4.0.0" execa "^5.1.1" metro "^0.80.3" @@ -1894,18 +1891,18 @@ querystring "^0.2.1" readline "^1.3.0" -"@react-native/debugger-frontend@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.84.tgz#0bde122a988916b6a50f05a7c3ab1c5db029b149" - integrity sha512-YUEA03UNFbiYzHpYxlcS2D9+3eNT5YLGkl5yRg3nOSN6KbCc/OttGnNZme+tuSOJwjMN/vcvtDKYkTqjJw8U0A== +"@react-native/debugger-frontend@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.85.tgz#a7af94a7b81cb59f241fd1771d1b083445329700" + integrity sha512-gUIhhpsYLUTYWlWw4vGztyHaX/kNlgVspSvKe2XaPA7o3jYKUoNLc3Ov7u70u/MBWfKdcEffWq44eSe3j3s5JQ== -"@react-native/dev-middleware@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.84.tgz#19ccfece791742f83f4c0a22a8c14593a45562a2" - integrity sha512-veYw/WmyrAOQHUiIeULzn2duJQnXDPiKq2jZ/lcmDo6jsLirpp+Q73lx09TYgy/oVoPRuV0nfmU3x9B6EV/7qQ== +"@react-native/dev-middleware@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.85.tgz#eca35aceb882b1111385f7c20f1aad7a33a2734e" + integrity sha512-BRmgCK5vnMmHaKRO+h8PKJmHHH3E6JFuerrcfE3wG2eZ1bcSr+QTu8DAlpxsDWvJvHpCi8tRJGauxd+Ssj/c7w== dependencies: "@isaacs/ttlcache" "^1.4.1" - "@react-native/debugger-frontend" "0.74.84" + "@react-native/debugger-frontend" "0.74.85" "@rnx-kit/chromium-edge-launcher" "^1.0.0" chrome-launcher "^0.15.2" connect "^3.6.5" @@ -1918,14 +1915,14 @@ temp-dir "^2.0.0" ws "^6.2.2" -"@react-native/eslint-config@~0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/eslint-config/-/eslint-config-0.74.84.tgz#b39cc52811752afd7d6b9ffcf20c1b0f0f4cc1fd" - integrity sha512-QpMeMzg6QPN54K0LFasuqX52nyRF0dPIoh7ErXW7OoDatOMfxjB5CK7jVc1MqhKnUe5mz50BdQ44SOpzYr3xvw== +"@react-native/eslint-config@~0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/eslint-config/-/eslint-config-0.74.85.tgz#496716899386e1c386bcfdd40b89c0b2db0166f9" + integrity sha512-ylp+lFKfJAtfbb+3kqP7oBL9BMJcxBDIcX6ot16NXTkDXNGDC4YK1ViDkyZvmzTgAIlSCyq/+XZBD7xsNsVy2A== dependencies: "@babel/core" "^7.20.0" "@babel/eslint-parser" "^7.20.0" - "@react-native/eslint-plugin" "0.74.84" + "@react-native/eslint-plugin" "0.74.85" "@typescript-eslint/eslint-plugin" "^7.1.1" "@typescript-eslint/parser" "^7.1.1" eslint-config-prettier "^8.5.0" @@ -1937,55 +1934,55 @@ eslint-plugin-react-hooks "^4.6.0" eslint-plugin-react-native "^4.0.0" -"@react-native/eslint-plugin@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/eslint-plugin/-/eslint-plugin-0.74.84.tgz#f0e9618551c9340caca7624001f8ce32794715c9" - integrity sha512-pDzo4Qm1uPZQne2sv0QK89ePxP/i+ZHjrBW3rkTVStLvsDVdyFahMmt6bzJTdYL2cGgK2oyNmfXtvO57INOu3Q== +"@react-native/eslint-plugin@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/eslint-plugin/-/eslint-plugin-0.74.85.tgz#9e028ccf97ad6d3d661d796eb614951343be5a1f" + integrity sha512-FtyfgL8EOTddxm+DyjfsInqMtjmU0PWQIRdyET/uob8i6sCxS+HmBzhbtEVZUKwld2kNG1JGgdNLndcEejC81Q== -"@react-native/gradle-plugin@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.74.84.tgz#6ff25fad5f78c276afde96ffc42e04e92d6d92b1" - integrity sha512-wYWC5WWXqzCCe4PDogz9pNc4xH5ZamahW5XGSbrrYJ5V3walZ+7z43V6iEBJkZbLjj9YBcSttkXYGr1Xh4veAg== +"@react-native/gradle-plugin@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.74.85.tgz#7c7d16655a4c15da87402ae3f7d6566466aea723" + integrity sha512-1VQSLukJzaVMn1MYcs8Weo1nUW8xCas2XU1KuoV7OJPk6xPnEBFJmapmEGP5mWeEy7kcTXJmddEgy1wwW0tcig== -"@react-native/js-polyfills@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.74.84.tgz#edf0e8463616a2683269bbfe3957590f7ebd910c" - integrity sha512-+PgxuUjBw9JVlz6m4ECsIJMLbDopnr4rpLmsG32hQaJrg0wMuvHtsgAY/J/aVCSG2GNUXexfjrnhc+O9yGOZXQ== +"@react-native/js-polyfills@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.74.85.tgz#1abfeeaec5ff24b6a1b3e2296e760359fce47739" + integrity sha512-gp4Rg9le3lVZeW7Cie6qLfekvRKZuhJ3LKgi1SFB4N154z1wIclypAJXVXgWBsy8JKJfTwRI+sffC4qZDlvzrg== -"@react-native/metro-babel-transformer@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.84.tgz#6c2c1632bdf557f176c9d489fbb676522ffb222a" - integrity sha512-YtVGq7jkgyUECv5yt4BOFbOXyW4ddUn8+dnwGGpJKdfhXYL5o5++AxNdE+2x+SZdkj3JUVekGKPwRabFECABaw== +"@react-native/metro-babel-transformer@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.85.tgz#d530d9a6bd319ece226a2d6aaa00b464a1928089" + integrity sha512-JIrXqEwhTvWPtGArgMptIPGstMdXQIkwSjKVYt+7VC4a9Pw1GurIWanIJheEW6ZuCVvTc0VZkwglFz9JVjzDjA== dependencies: "@babel/core" "^7.20.0" - "@react-native/babel-preset" "0.74.84" + "@react-native/babel-preset" "0.74.85" hermes-parser "0.19.1" nullthrows "^1.1.1" -"@react-native/metro-config@~0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/metro-config/-/metro-config-0.74.84.tgz#b2c1b45f62af9b8140a9a02798fa4fb2a3db7c0c" - integrity sha512-/8pvN4P5ldIN/4f+4+Wkd5FH8F5I7dx1xyPDmHNHqu5bLS+N3347NU8t97029LuZikv59fGj4B6nkvlc4GRHfg== +"@react-native/metro-config@~0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/metro-config/-/metro-config-0.74.85.tgz#41d14320dc78f62c03eb32cf3091f78bb619012a" + integrity sha512-NQso5jKTdpwn0Ty0qzWb2ia9oc/w6NSno1SEiWer7ThUOu905rdHub0vRFOGFOmqvjwNIhp5GVqZ3Oi3QuGZ5w== dependencies: - "@react-native/js-polyfills" "0.74.84" - "@react-native/metro-babel-transformer" "0.74.84" + "@react-native/js-polyfills" "0.74.85" + "@react-native/metro-babel-transformer" "0.74.85" metro-config "^0.80.3" metro-runtime "^0.80.3" -"@react-native/normalize-colors@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.84.tgz#4764d59775c17a6ed193509cb01ae2f42dd5c045" - integrity sha512-Y5W6x8cC5RuakUcTVUFNAIhUZ/tYpuqHZlRBoAuakrTwVuoNHXfQki8lj1KsYU7rW6e3VWgdEx33AfOQpdNp6A== +"@react-native/normalize-colors@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.85.tgz#62bcb9ab1b10b822ca0278fdfdf23d3b18e125da" + integrity sha512-pcE4i0X7y3hsAE0SpIl7t6dUc0B0NZLd1yv7ssm4FrLhWG+CGyIq4eFDXpmPU1XHmL5PPySxTAjEMiwv6tAmOw== -"@react-native/typescript-config@~0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/typescript-config/-/typescript-config-0.74.84.tgz#aff6132ced5679c99b33b4e3a6747338b99e5e09" - integrity sha512-yMAyxl0wzRKT6JkQV0WCryiBQ1hj97u/JiT4LjXbwpPSErgiTRq+SKwhKH5vhSw9P0O8JCLIG6rS5rkbjranDg== +"@react-native/typescript-config@~0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/typescript-config/-/typescript-config-0.74.85.tgz#42f9e73c6801cd86baa3023838a1a9e0b9c257b0" + integrity sha512-FiMIWSRPCEW6yobrzAL2GR4a5PMyRpJEUsKkN7h5J2dpM/f33FLZdDon/ljIK2iPB4XOt6m1opUxep9ZqjToDg== -"@react-native/virtualized-lists@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.74.84.tgz#cf32fffc93072942532c9c81bd7e4c01a2949626" - integrity sha512-XcV+qdqt2WihaY4iRm/M1FdSy+18lecU9mRXNmy9YK8g9Th/8XbNtmmKI0qWBx3KxyuXMH/zd0ps05YTrX16kw== +"@react-native/virtualized-lists@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.74.85.tgz#a6178c7168953807b3b610c9f8d208a6f758407d" + integrity sha512-jx2Zw0qlZteoQ+0KxRc7s4drsljLBEP534FaNZ950e9+CN9nVkLsV6rigcTjDR8wjKMSBWhKf0C0C3egYz7Ehg== dependencies: invariant "^2.2.4" nullthrows "^1.1.1" @@ -2033,19 +2030,19 @@ dependencies: nanoid "^3.1.23" -"@react-navigation/stack@~6.3.29": - version "6.3.29" - resolved "https://registry.yarnpkg.com/@react-navigation/stack/-/stack-6.3.29.tgz#b03b2f2baa36c06e4c9e8c7da80d62f83ad0b835" - integrity sha512-tzlGkoRgB6P7vgw7rHuWo3TL7Gzu6xh5LMf+zSdCuEiKp/qASzxYfnTEr9tOLbVs/gf+qeukEDheCSAJKVpBXw== +"@react-navigation/stack@~6.4.0": + version "6.4.0" + resolved "https://registry.yarnpkg.com/@react-navigation/stack/-/stack-6.4.0.tgz#46b9f690942a189b6542a3df71ab49e8ee781ec0" + integrity sha512-Jx7fm8x7zSUC6ggUb0VnvPuaIXkVPHckiY+e50mjrIRK4xAgnaLp6crHWYGmXjfi7ahaKL00o76ZgpgkwKw6zg== dependencies: "@react-navigation/elements" "^1.3.30" color "^4.2.3" warn-once "^0.1.0" -"@reduxjs/toolkit@~2.2.5": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.2.5.tgz#c0d2d8482ef80722bebe015ff05b06c34bfb6e0d" - integrity sha512-aeFA/s5NCG7NoJe/MhmwREJxRkDs0ZaSqt0MxhWUrwCf1UQXpwR87RROJEql0uAkLI6U7snBOYOcKw83ew3FPg== +"@reduxjs/toolkit@~2.2.6": + version "2.2.6" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.2.6.tgz#4a8356dad9d0c1ab255607a555d492168e0e3bc1" + integrity sha512-kH0r495c5z1t0g796eDQAkYbEQ3a1OLYN9o8jQQVZyKyw367pfRGS+qZLkHYvFHiUUdafpoSlQ2QYObIApjPWA== dependencies: immer "^10.0.3" redux "^5.0.1" @@ -2399,10 +2396,10 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@~20.14.0": - version "20.14.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.9.tgz#12e8e765ab27f8c421a1820c99f5f313a933b420" - integrity sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg== +"@types/node@*", "@types/node@~20.14.10": + version "20.14.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.10.tgz#a1a218290f1b6428682e3af044785e5874db469a" + integrity sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ== dependencies: undici-types "~5.26.4" @@ -2495,29 +2492,29 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^7.1.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.14.1.tgz#90e2f76a5930d553ede124e1f541a39b4417465e" - integrity sha512-aAJd6bIf2vvQRjUG3ZkNXkmBpN+J7Wd0mfQiiVCJMu9Z5GcZZdcc0j8XwN/BM97Fl7e3SkTXODSk4VehUv7CGw== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.0.tgz#b3563927341eca15124a18c6f94215f779f5c02a" + integrity sha512-py1miT6iQpJcs1BiJjm54AMzeuMPBSPuKPlnT8HlfudbcS5rYeX5jajpLf3mrdRh9dA/Ec2FVUY0ifeVNDIhZw== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.14.1" - "@typescript-eslint/type-utils" "7.14.1" - "@typescript-eslint/utils" "7.14.1" - "@typescript-eslint/visitor-keys" "7.14.1" + "@typescript-eslint/scope-manager" "7.16.0" + "@typescript-eslint/type-utils" "7.16.0" + "@typescript-eslint/utils" "7.16.0" + "@typescript-eslint/visitor-keys" "7.16.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" "@typescript-eslint/parser@^7.1.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.14.1.tgz#13d97f357aed3c5719f259a6cc3d1a1f065d3692" - integrity sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA== - dependencies: - "@typescript-eslint/scope-manager" "7.14.1" - "@typescript-eslint/types" "7.14.1" - "@typescript-eslint/typescript-estree" "7.14.1" - "@typescript-eslint/visitor-keys" "7.14.1" + version "7.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.16.0.tgz#53fae8112f8c912024aea7b499cf7374487af6d8" + integrity sha512-ar9E+k7CU8rWi2e5ErzQiC93KKEFAXA2Kky0scAlPcxYblLt8+XZuHUZwlyfXILyQa95P6lQg+eZgh/dDs3+Vw== + dependencies: + "@typescript-eslint/scope-manager" "7.16.0" + "@typescript-eslint/types" "7.16.0" + "@typescript-eslint/typescript-estree" "7.16.0" + "@typescript-eslint/visitor-keys" "7.16.0" debug "^4.3.4" "@typescript-eslint/scope-manager@5.62.0": @@ -2528,21 +2525,21 @@ "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/scope-manager@7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.14.1.tgz#63de7a577bc6fe8ee6e412a5b85499f654b93ee5" - integrity sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA== +"@typescript-eslint/scope-manager@7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.16.0.tgz#eb0757af5720c9c53c8010d7a0355ae27e17b7e5" + integrity sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw== dependencies: - "@typescript-eslint/types" "7.14.1" - "@typescript-eslint/visitor-keys" "7.14.1" + "@typescript-eslint/types" "7.16.0" + "@typescript-eslint/visitor-keys" "7.16.0" -"@typescript-eslint/type-utils@7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.14.1.tgz#c183f2f28c4c8578eb80aebc4ac9ace400160af6" - integrity sha512-/MzmgNd3nnbDbOi3LfasXWWe292+iuo+umJ0bCCMCPc1jLO/z2BQmWUUUXvXLbrQey/JgzdF/OV+I5bzEGwJkQ== +"@typescript-eslint/type-utils@7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.16.0.tgz#ec52b1932b8fb44a15a3e20208e0bd49d0b6bd00" + integrity sha512-j0fuUswUjDHfqV/UdW6mLtOQQseORqfdmoBNDFOqs9rvNVR2e+cmu6zJu/Ku4SDuqiJko6YnhwcL8x45r8Oqxg== dependencies: - "@typescript-eslint/typescript-estree" "7.14.1" - "@typescript-eslint/utils" "7.14.1" + "@typescript-eslint/typescript-estree" "7.16.0" + "@typescript-eslint/utils" "7.16.0" debug "^4.3.4" ts-api-utils "^1.3.0" @@ -2551,10 +2548,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/types@7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.14.1.tgz#a43a540dbe5df7f2a11269683d777fc50b4350aa" - integrity sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg== +"@typescript-eslint/types@7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.16.0.tgz#60a19d7e7a6b1caa2c06fac860829d162a036ed2" + integrity sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" @@ -2569,13 +2566,13 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.14.1.tgz#ba7c9bac8744487749d19569e254d057754a1575" - integrity sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA== +"@typescript-eslint/typescript-estree@7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.0.tgz#98ac779d526fab2a781e5619c9250f3e33867c09" + integrity sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw== dependencies: - "@typescript-eslint/types" "7.14.1" - "@typescript-eslint/visitor-keys" "7.14.1" + "@typescript-eslint/types" "7.16.0" + "@typescript-eslint/visitor-keys" "7.16.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -2583,15 +2580,15 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.14.1.tgz#3307b8226f99103dca2133d0ebcae38419d82c9d" - integrity sha512-CMmVVELns3nak3cpJhZosDkm63n+DwBlDX8g0k4QUa9BMnF+lH2lr3d130M1Zt1xxmB3LLk3NV7KQCq86ZBBhQ== +"@typescript-eslint/utils@7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.16.0.tgz#b38dc0ce1778e8182e227c98d91d3418449aa17f" + integrity sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "7.14.1" - "@typescript-eslint/types" "7.14.1" - "@typescript-eslint/typescript-estree" "7.14.1" + "@typescript-eslint/scope-manager" "7.16.0" + "@typescript-eslint/types" "7.16.0" + "@typescript-eslint/typescript-estree" "7.16.0" "@typescript-eslint/utils@^5.10.0": version "5.62.0" @@ -2615,12 +2612,12 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.14.1.tgz#cc79b5ea154aea734b2a13b983670749f5742274" - integrity sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA== +"@typescript-eslint/visitor-keys@7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.0.tgz#a1d99fa7a3787962d6e0efd436575ef840e23b06" + integrity sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg== dependencies: - "@typescript-eslint/types" "7.14.1" + "@typescript-eslint/types" "7.16.0" eslint-visitor-keys "^3.4.3" "@ungap/structured-clone@^1.2.0": @@ -2638,7 +2635,7 @@ abitype@1.0.0: resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== -abitype@1.0.5, abitype@~1.0.0: +abitype@1.0.5, abitype@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.5.tgz#29d0daa3eea867ca90f7e4123144c1d1270774b6" integrity sha512-YzDhti7cjlfaBhHutMaboYB21Ha3rXR9QTkNJFzYC4kC8YclaiwPBBBJY8ejFdu2wnJeZCVZSMlQJ7fi8S6hsw== @@ -2669,9 +2666,9 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.8.2, acorn@^8.9.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c" - integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw== + version "8.12.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== aes-js@4.0.0-beta.5: version "4.0.0-beta.5" @@ -3051,9 +3048,9 @@ balanced-match@^1.0.0: integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base-x@^3.0.2: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + version "3.0.10" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.10.tgz#62de58653f8762b5d6f8d9fe30fa75f7b2585a75" + integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== dependencies: safe-buffer "^5.0.1" @@ -3186,14 +3183,14 @@ browserify-aes@^1.0.6: safe-buffer "^5.0.1" browserslist@^4.22.2, browserslist@^4.23.0: - version "4.23.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.1.tgz#ce4af0534b3d37db5c1a4ca98b9080f985041e96" - integrity sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw== + version "4.23.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.2.tgz#244fe803641f1c19c28c48c4b6ec9736eb3d32ed" + integrity sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA== dependencies: - caniuse-lite "^1.0.30001629" - electron-to-chromium "^1.4.796" + caniuse-lite "^1.0.30001640" + electron-to-chromium "^1.4.820" node-releases "^2.0.14" - update-browserslist-db "^1.0.16" + update-browserslist-db "^1.1.0" bs58@^4.0.0: version "4.0.1" @@ -3294,10 +3291,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001629: - version "1.0.30001638" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001638.tgz#598e1f0c2ac36f37ebc3f5b8887a32ca558e5d56" - integrity sha512-5SuJUJ7cZnhPpeLHaH0c/HPAnAHZvS6ElWyHK9GSIbVOQABLzowiI2pjmpvZ1WEbkyz46iFd4UXlOHR5SqgfMQ== +caniuse-lite@^1.0.30001640: + version "1.0.30001641" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001641.tgz#3572862cd18befae3f637f2a1101cc033c6782ac" + integrity sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA== cashaddrjs@0.4.4: version "0.4.4" @@ -3940,10 +3937,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.796: - version "1.4.814" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.814.tgz#176535a0b899c9c473464502ab77576aa8bb1cbe" - integrity sha512-GVulpHjFu1Y9ZvikvbArHmAhZXtm3wHlpjTMcXNGKl4IQ4jMQjlnz8yMQYYqdLHKi/jEL2+CBC2akWVCoIGUdw== +electron-to-chromium@^1.4.820: + version "1.4.823" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.823.tgz#38587f7aa55bed14930f04091dfc65c39a3d8bd7" + integrity sha512-4h+oPeAiGQOHFyUJOqpoEcPj/xxlicxBzOErVeYVMMmAiXUXsGpsFd0QXBMaUUbnD8hhSfLf9uw+MlsoIA7j5w== elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.5" @@ -4346,9 +4343,9 @@ esprima@^4.0.0, esprima@~4.0.0: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" @@ -4617,9 +4614,9 @@ flow-enums-runtime@^0.0.6: integrity sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw== flow-parser@0.*: - version "0.238.3" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.238.3.tgz#a3b762913c016591c15a68165835e31cd085c8d0" - integrity sha512-hNUhucq8V6KWSX1skXUS3vnDmrRNuKWzDvEVK5b+n97uMF32zj2y8pmcLDQEqlY5u926B0GYGWT/3XhwDJfLOQ== + version "0.239.1" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.239.1.tgz#45cfc79bbcc54332cffeb13293b82a7c7358cd1c" + integrity sha512-topOrETNxJ6T2gAnQiWqAlzGPj8uI2wtmNOlDIMNB+qyvGJZ6R++STbUOTAYmvPhOMz2gXnXPH0hOvURYmrBow== follow-redirects@^1.15.6: version "1.15.6" @@ -5389,9 +5386,9 @@ istanbul-lib-instrument@^5.0.4: semver "^6.3.0" istanbul-lib-instrument@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1" - integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== + version "6.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== dependencies: "@babel/core" "^7.23.9" "@babel/parser" "^7.23.9" @@ -6077,9 +6074,9 @@ lower-case@^2.0.2: tslib "^2.0.3" lru-cache@^10.2.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.3.0.tgz#4a4aaf10c84658ab70f79a85a9a3f1e1fb11196b" - integrity sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ== + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^5.1.1: version "5.1.1" @@ -6944,7 +6941,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@~3.3.0: +prettier@~3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a" integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== @@ -7064,9 +7061,9 @@ range-parser@~1.2.1: integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== react-devtools-core@^5.0.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-5.3.0.tgz#8062c25a4707c3216333270210bfe06871f7eed4" - integrity sha512-IG3T+azv48Oc5VLdHR4XdBNKNZIUOKRtx0sJMRvb++Zom/uqtx73j6u37JCsIBNIaq6vA7RPH5Bbcf/Wj53KXA== + version "5.3.1" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-5.3.1.tgz#d57f5b8f74f16e622bd6a7bc270161e4ba162666" + integrity sha512-7FSb9meX0btdBQLwdFOwt6bGqvRPabmVMMslv8fgoSPqXyuGpgQe36kx8gR86XPw7aV1yVouTp6fyZ0EH+NfUw== dependencies: shell-quote "^1.6.1" ws "^7" @@ -7121,15 +7118,14 @@ react-native-encrypted-storage@~4.0.3: resolved "https://registry.yarnpkg.com/react-native-encrypted-storage/-/react-native-encrypted-storage-4.0.3.tgz#2a4d65459870511e8f4ccd22f02433dab7fa5e91" integrity sha512-0pJA4Aj2S1PIJEbU7pN/Qvf7JIJx3hFywx+i+bLHtgK0/6Zryf1V2xVsWcrD50dfiu3jY1eN2gesQ5osGxE7jA== -react-native-gesture-handler@~2.16.2: - version "2.16.2" - resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-2.16.2.tgz#032bd2a07334292d7f6cff1dc9d1ec928f72e26d" - integrity sha512-vGFlrDKlmyI+BT+FemqVxmvO7nqxU33cgXVsn6IKAFishvlG3oV2Ds67D5nPkHMea8T+s1IcuMm0bF8ntZtAyg== +react-native-gesture-handler@~2.17.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-2.17.1.tgz#f458a6099f09afac144f3e67add96667d859a88d" + integrity sha512-pWfniN6NuVKUq40KACuD3NCMe+bWNQCpD3cmxL6aLSCTwPKYmf7l4Lp0/E/almpjvxhybJZtFLU0w4tmxnIKaA== dependencies: "@egjs/hammerjs" "^2.0.17" hoist-non-react-statics "^3.3.0" invariant "^2.2.4" - lodash "^4.17.21" prop-types "^15.7.2" react-native-get-random-values@~1.11.0: @@ -7174,10 +7170,10 @@ react-native-quick-base64@^2.0.5, react-native-quick-base64@~2.1.2: dependencies: base64-js "^1.5.1" -react-native-quick-crypto@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/react-native-quick-crypto/-/react-native-quick-crypto-0.7.0.tgz#36011efa246c3b60acf91d26b92c95cdf566a46e" - integrity sha512-zM/lfBgg1bXdQLigsOlfflVt2erRRps/IFLuJ+HKwp5Nh2E3+mMRMTK+UOHMoNYJiE5fpcb4GSh23+YK9KHkAg== +react-native-quick-crypto@~0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/react-native-quick-crypto/-/react-native-quick-crypto-0.7.1.tgz#f767656cd09441542f3654873574788c6a97e495" + integrity sha512-1F8D8oYdociccdiU5hciSJ+rvehdmaJRV2hIv/LgEwBthwkVdD7pSf6kFKwoY9Y2Ly6f7tfBCjYg4/uQRge8Jg== dependencies: "@craftzdog/react-native-buffer" "^6.0.5" events "^3.3.0" @@ -7185,10 +7181,10 @@ react-native-quick-crypto@~0.7.0: string_decoder "^1.3.0" util "^0.12.5" -react-native-reanimated@~3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-3.11.0.tgz#d4265d4e0232623f5958ed60e1686ca884fc3452" - integrity sha512-BNw/XDgUfs8UhfY1X6IniU8kWpnotWGyt8qmQviaHisTi5lvwnaOdXQKfN1KGONx6ekdFRHRP5EFwLi0UajwKA== +react-native-reanimated@~3.14.0: + version "3.14.0" + resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-3.14.0.tgz#2118265f3a5cad8c142633e36d76d0f0cc8cc9e8" + integrity sha512-TAxLtCfRyC/nOLeWoX/8MhdIF+Fi1e1NbLhIgEm5Kv9/gioAwSNaqLUYxjIClU1RaLwSTE8iaiHNVhTU4TS9DA== dependencies: "@babel/plugin-transform-arrow-functions" "^7.0.0-0" "@babel/plugin-transform-nullish-coalescing-operator" "^7.0.0-0" @@ -7199,23 +7195,23 @@ react-native-reanimated@~3.11.0: convert-source-map "^2.0.0" invariant "^2.2.4" -react-native-safe-area-context@~4.10.3: - version "4.10.7" - resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.10.7.tgz#91d04e510bf96e3c38bec2beb7ae37347522a503" - integrity sha512-Lq+gtuIF28mMtBacFchGpO1KHMTvzeb3ji1HAVnMTPe3qWR46Tb4AlztZTvTwUnpZ8JVaC9sKXnJHKmuaIQwXA== +react-native-safe-area-context@~4.10.8: + version "4.10.8" + resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.10.8.tgz#038bd6a4853a38189c186d119302943c8d13f56f" + integrity sha512-Jx1lovhvIdYygg0UsMCBUJN0Wvj9GlA5bbcBLzjZf93uJpNHzaiHC4hR280+sNVK1+/pMHEyEkXVHDZE5JWn0w== -react-native-screens@~3.31.1: - version "3.31.1" - resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-3.31.1.tgz#909a890f669e32b0fb1b1410278b71ad2f8238f6" - integrity sha512-8fRW362pfZ9y4rS8KY5P3DFScrmwo/vu1RrRMMx0PNHbeC9TLq0Kw1ubD83591yz64gLNHFLTVkTJmWeWCXKtQ== +react-native-screens@~3.32.0: + version "3.32.0" + resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-3.32.0.tgz#47c3d2efc9cd5ed18af41b34efc8b46df05b87b4" + integrity sha512-wybqZAHX7v8ipOXhh90CqGLkBHw5JYqKNRBX7R/b0c2WQisTOgu0M0yGwBMM6LyXRBT+4k3NTGHdDbpJVpq0yQ== dependencies: react-freeze "^1.0.0" warn-once "^0.1.0" -react-native-svg-transformer@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/react-native-svg-transformer/-/react-native-svg-transformer-1.4.0.tgz#d17502d3659cfe58780ca28cb13b353cb68bbd76" - integrity sha512-ZJ9dpSl8EONXbFQcVoGVr0cAl/7Vm/sKtOH1V6Mf9lcdyeT1/rfww43xgSfQWjmneTNTTXjslM5EoyZTHPfawQ== +react-native-svg-transformer@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/react-native-svg-transformer/-/react-native-svg-transformer-1.5.0.tgz#75ae4dbdc4b1a1508e75282d54d66900ee5fe3c2" + integrity sha512-RG5fSWJT7mjCQYocgYFUo1KYPLOoypPVG5LQab+pZZO7m4ciGaQIe0mhok3W4R5jLQsEXKo0u+aQGkZV/bZG7w== dependencies: "@svgr/core" "^8.1.0" "@svgr/plugin-jsx" "^8.1.0" @@ -7243,22 +7239,22 @@ react-native-vector-icons@~10.1.0: prop-types "^15.7.2" yargs "^16.1.1" -react-native@*, react-native@~0.74.2: - version "0.74.2" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.74.2.tgz#172e64e4e79861e2b3da99b86999e4a4c55b8321" - integrity sha512-EBMBjPPL4/GjHMP4NqsZabT3gI5WU9cSmduABGAGrd8uIcmTZ5F2Ng9k6gFmRm7n8e8CULxDNu98ZpQfBjl7Bw== +react-native@*, react-native@~0.74.3: + version "0.74.3" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.74.3.tgz#eef32cd10afb1f4b26f75b79eefd6b220c63953c" + integrity sha512-UFutCC6WEw6HkxlcpQ2BemKqi0JkwrgDchYB5Svi8Sp4Xwt4HA6LGEjNQgZ+3KM44bjyFRpofQym0uh0jACGng== dependencies: "@jest/create-cache-key-function" "^29.6.3" - "@react-native-community/cli" "13.6.8" - "@react-native-community/cli-platform-android" "13.6.8" - "@react-native-community/cli-platform-ios" "13.6.8" - "@react-native/assets-registry" "0.74.84" - "@react-native/codegen" "0.74.84" - "@react-native/community-cli-plugin" "0.74.84" - "@react-native/gradle-plugin" "0.74.84" - "@react-native/js-polyfills" "0.74.84" - "@react-native/normalize-colors" "0.74.84" - "@react-native/virtualized-lists" "0.74.84" + "@react-native-community/cli" "13.6.9" + "@react-native-community/cli-platform-android" "13.6.9" + "@react-native-community/cli-platform-ios" "13.6.9" + "@react-native/assets-registry" "0.74.85" + "@react-native/codegen" "0.74.85" + "@react-native/community-cli-plugin" "0.74.85" + "@react-native/gradle-plugin" "0.74.85" + "@react-native/js-polyfills" "0.74.85" + "@react-native/normalize-colors" "0.74.85" + "@react-native/virtualized-lists" "0.74.85" abort-controller "^3.0.0" anser "^1.4.9" ansi-regex "^5.0.0" @@ -8158,9 +8154,9 @@ temp@^0.8.4: rimraf "~2.6.2" terser@^5.15.0: - version "5.31.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.1.tgz#735de3c987dd671e95190e6b98cfe2f07f3cf0d4" - integrity sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg== + version "5.31.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.2.tgz#b5ca188107b706084dca82f988089fa6102eba11" + integrity sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -8331,10 +8327,10 @@ typeforce@^1.11.3: resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== -typescript@~5.4.2: - version "5.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== +typescript@~5.5.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.3.tgz#e1b0a3c394190838a0b168e771b0ad56a0af0faa" + integrity sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ== unbox-primitive@^1.0.2: version "1.0.2" @@ -8389,10 +8385,10 @@ unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.0.16: - version "1.0.16" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356" - integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ== +update-browserslist-db@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== dependencies: escalade "^3.1.2" picocolors "^1.0.1" @@ -8405,9 +8401,9 @@ uri-js@^4.2.2: punycode "^2.1.0" use-latest-callback@^0.1.9: - version "0.1.9" - resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.1.9.tgz#10191dc54257e65a8e52322127643a8940271e2a" - integrity sha512-CL/29uS74AwreI/f2oz2hLTW7ZqVeV5+gxFeGudzQrgkCytrHw33G4KbnQOrRlAEzzAFXi7dDLMC9zhWcVpzmw== + version "0.1.11" + resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.1.11.tgz#e073fcbba792cc95ac661d96bc13b6041956cfe1" + integrity sha512-8nhb73STSD/z3GTHklvNjL8F9wMOo0bj0AFnulpIYuFTm6aQlT3ZcNbXF2YurKImIY8+kpSFSDHZZyQmurGrhw== use-sync-external-store@^1.0.0: version "1.2.2" @@ -8470,10 +8466,10 @@ viem@2.8.6: isows "1.0.3" ws "8.13.0" -viem@~2.16.4: - version "2.16.4" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.16.4.tgz#5cc7bbed81ee815a131f509066972a8e849da801" - integrity sha512-5Dk8BUCUymVJRETeU4rNHhTIj+VtBEWBKU0veJ7URtLPltO8wY0/OaUQeN77OeMhmy/l1z0Gbrm9CEURgE06Iw== +viem@~2.17.3: + version "2.17.3" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.17.3.tgz#f15616049d8154b83e499eb5446e6d7fe6312626" + integrity sha512-FY/1uBQWfko4Esy8mU1RamvL64TLy91LZwFyQJ20E6AI3vTTEOctWfSn0pkMKa3okq4Gxs5dJE7q1hmWOQ7xcw== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.4.0" From f767f7f4bc664c4383a7d7e7a4c8b82c58212dec Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Thu, 11 Jul 2024 08:37:45 +0800 Subject: [PATCH 25/28] add usdc usdt --- src/assets/usdc.svg | 33 +++++++++++++++++++++++++++++++++ src/assets/usdt.svg | 13 +++++++++++++ src/storage/blockchains.ts | 16 ++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 src/assets/usdc.svg create mode 100644 src/assets/usdt.svg diff --git a/src/assets/usdc.svg b/src/assets/usdc.svg new file mode 100644 index 00000000..1439440c --- /dev/null +++ b/src/assets/usdc.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + diff --git a/src/assets/usdt.svg b/src/assets/usdt.svg new file mode 100644 index 00000000..371d20f7 --- /dev/null +++ b/src/assets/usdt.svg @@ -0,0 +1,13 @@ + + + + + + + diff --git a/src/storage/blockchains.ts b/src/storage/blockchains.ts index 90b8b773..c9ff33e9 100644 --- a/src/storage/blockchains.ts +++ b/src/storage/blockchains.ts @@ -12,6 +12,8 @@ const zecLogo = '/src/assets/zec.svg'; const bchLogo = '/src/assets/bch.svg'; const ethLogo = '/src/assets/eth.svg'; const tethLogo = '/src/assets/teth.svg'; +const usdcLogo = '/src/assets/usdc.svg'; +const usdtLogo = '/src/assets/usdt.svg'; const flux = { id: 'flux', @@ -379,6 +381,20 @@ const eth = { decimals: 8, logo: fluxLogo, }, + { + contract: '0xdac17f958d2ee523a2206206994597c13d831ec7', + name: 'Tether', + symbol: 'USDT', + decimals: 6, + logo: usdtLogo, + }, + { + contract: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + name: 'USD Coin', + symbol: 'USDC', + decimals: 6, + logo: usdcLogo, + }, ], }; From eb6cace2af9fe76a7388e314536eeafa6516e454 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Thu, 11 Jul 2024 21:05:33 +0800 Subject: [PATCH 26/28] correct logos --- src/storage/blockchains.ts | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/storage/blockchains.ts b/src/storage/blockchains.ts index c9ff33e9..4cea4042 100644 --- a/src/storage/blockchains.ts +++ b/src/storage/blockchains.ts @@ -1,19 +1,19 @@ import { backends } from './backends'; -const fluxLogo = '/src/assets/flux.svg'; -const fluxTestnetLogo = '/src/assets/fluxTestnet.svg'; -const rvnLogo = '/src/assets/rvn.svg'; -const ltcLogo = '/src/assets/ltc.svg'; -const btcLogo = '/src/assets/btc.svg'; -const btcTestnetLogo = '/src/assets/btcTestnet.svg'; -const btcSignetLogo = '/src/assets/btcSignet.svg'; -const dogeLogo = '/src/assets/doge.svg'; -const zecLogo = '/src/assets/zec.svg'; -const bchLogo = '/src/assets/bch.svg'; -const ethLogo = '/src/assets/eth.svg'; -const tethLogo = '/src/assets/teth.svg'; -const usdcLogo = '/src/assets/usdc.svg'; -const usdtLogo = '/src/assets/usdt.svg'; +import fluxLogo from '../assets/flux.svg'; +import fluxTestnetLogo from '../assets/fluxTestnet.svg'; +import rvnLogo from '../assets/rvn.svg'; +import ltcLogo from '../assets/ltc.svg'; +import btcLogo from '../assets/btc.svg'; +import btcTestnetLogo from '../assets/btcTestnet.svg'; +import btcSignetLogo from '../assets/btcSignet.svg'; +import dogeLogo from '../assets/doge.svg'; +import zecLogo from '../assets/zec.svg'; +import bchLogo from '../assets/bch.svg'; +import ethLogo from '../assets/eth.svg'; +import tethLogo from '../assets/teth.svg'; +import usdtLogo from '../assets/usdt.svg'; +import usdcLogo from '../assets/usdc.svg'; const flux = { id: 'flux', From 6953133d4b0671aacd69cd37df41234c38ba8ab3 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Thu, 11 Jul 2024 22:38:12 +0800 Subject: [PATCH 27/28] fix eth libid, bump sdk version --- package.json | 2 +- src/storage/blockchains.ts | 2 +- yarn.lock | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index b7f03b2f..bd8b3f61 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "@react-navigation/native": "~6.1.17", "@react-navigation/stack": "~6.4.0", "@reduxjs/toolkit": "~2.2.6", - "@runonflux/aa-schnorr-multisig-sdk": "~1.0.2", + "@runonflux/aa-schnorr-multisig-sdk": "~1.0.3", "@runonflux/react-native-step-indicator": "~1.0.0", "@runonflux/utxo-lib": "~1.0.0", "@scure/bip32": "~1.4.0", diff --git a/src/storage/blockchains.ts b/src/storage/blockchains.ts index 4cea4042..76ebe574 100644 --- a/src/storage/blockchains.ts +++ b/src/storage/blockchains.ts @@ -344,7 +344,7 @@ const sepolia = { const eth = { id: 'eth', - libid: 'eth', + libid: 'mainnet', name: 'Ethereum', symbol: 'ETH', logo: ethLogo, diff --git a/yarn.lock b/yarn.lock index 21afe973..8617eddc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2061,10 +2061,10 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@runonflux/aa-schnorr-multisig-sdk@~1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@runonflux/aa-schnorr-multisig-sdk/-/aa-schnorr-multisig-sdk-1.0.2.tgz#1611e045daacc42d1dcd16a1088f87f16db90e9a" - integrity sha512-abSfFQNMB+i7gJfX6XT9bIyz3aIZGNVwGTzdOZIdp2j2NAn6yBlLYc/FdwfmBX8252uvBIytSpxrBBHxgiFQzw== +"@runonflux/aa-schnorr-multisig-sdk@~1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@runonflux/aa-schnorr-multisig-sdk/-/aa-schnorr-multisig-sdk-1.0.3.tgz#a48466437395b9417a357644bed7e94a0a7ad62d" + integrity sha512-Pxml+Kqh0LqiopHRUm4pD79/EU2PXZszHJBoeMtEfmv5qYqblkeOeKSOpBA0A7J3NHoK47Oupu5qIlcj3MCkCQ== dependencies: "@alchemy/aa-core" "^3.12.3" bigi "^1.4.2" From cd89c1b99d4fbb88f70231fa135ef5bde0c342a2 Mon Sep 17 00:00:00 2001 From: TheTrunk Date: Tue, 16 Jul 2024 11:01:30 +0800 Subject: [PATCH 28/28] correct cleaning up active chain --- src/screens/Home/Home.tsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/screens/Home/Home.tsx b/src/screens/Home/Home.tsx index 9dbffb69..6a04aba3 100644 --- a/src/screens/Home/Home.tsx +++ b/src/screens/Home/Home.tsx @@ -867,7 +867,6 @@ function Home({ navigation }: Props) { const rchain = activeChain; const rpath = txPath; setRawTx(''); - setActiveChain(identityChain); setTxPath(''); setTxUtxos([]); await postAction( @@ -899,7 +898,6 @@ function Home({ navigation }: Props) { } else { // reject setSyncReq(''); - setActiveChain(identityChain); } } catch (error) { console.log(error); @@ -917,7 +915,6 @@ function Home({ navigation }: Props) { } else { // reject const rchain = activeChain; - setActiveChain(identityChain); setPublicNoncesReq(''); await postAction( 'publicnoncesrejected', @@ -935,8 +932,7 @@ function Home({ navigation }: Props) { }; const handlePublicNoncesSharedModalAction = () => { - console.log('public nonces modal close. Clean chain'); - setActiveChain(identityChain); + console.log('public nonces modal close.'); setPublicNoncesShared(false); setPNonces(''); }; @@ -944,13 +940,11 @@ function Home({ navigation }: Props) { const handleTxSentModalAction = () => { console.log('tx sent modal close. Clean TXID'); setTxid(''); - setActiveChain(identityChain); }; const handleSyncSuccessModalAction = () => { console.log('sync success modal close.'); setSyncSuccessOpen(false); - setActiveChain(identityChain); }; const handleAddrDetailsModalAction = () => {