diff --git a/advanced/wallets/react-wallet-v2/package.json b/advanced/wallets/react-wallet-v2/package.json index 709376d10..a5fc3e0f2 100644 --- a/advanced/wallets/react-wallet-v2/package.json +++ b/advanced/wallets/react-wallet-v2/package.json @@ -35,7 +35,8 @@ "@rhinestone/module-sdk": "0.1.25", "@solana/spl-token": "^0.4.13", "@solana/web3.js": "1.98.2", - "@stacks/wallet-sdk": "^7.0.6", + "@stacks/transactions": "7.1.0", + "@stacks/wallet-sdk": "7.1.0", "@taquito/signer": "^15.1.0", "@taquito/taquito": "^15.1.0", "@types/semver": "^7.5.8", @@ -68,7 +69,8 @@ "tronweb": "^4.4.0", "valtio": "1.13.2", "viem": "2.17.8", - "webauthn-p256": "0.0.2" + "webauthn-p256": "0.0.2", + "@walletconnect/utils": "2.21.3" }, "devDependencies": { "@types/node": "17.0.35", @@ -80,7 +82,8 @@ "eslint-plugin-package-json": "^0.13.1", "jsonc-eslint-parser": "^2.4.0", "prettier": "2.6.2", - "typescript": "5.2.2" + "typescript": "5.2.2", + "@walletconnect/types": "2.21.3" }, "resolutions": { "@walletconnect/core": "2.21.3", diff --git a/advanced/wallets/react-wallet-v2/src/components/Modal.tsx b/advanced/wallets/react-wallet-v2/src/components/Modal.tsx index 446ec336a..d3754b377 100644 --- a/advanced/wallets/react-wallet-v2/src/components/Modal.tsx +++ b/advanced/wallets/react-wallet-v2/src/components/Modal.tsx @@ -28,6 +28,7 @@ import SessionSignSuiTransactionModal from '@/views/SessionSignSuiTransactionMod import SessionSignSuiAndExecuteTransactionModal from '@/views/SessionSignAndExecuteSuiTransactionModal' import SessionSendStacksTransferModal from '@/views/SessionSendStacksTransferModal' import SessionSignStacksMessageModal from '@/views/SessionSignStacksMessageModal' +import SessionGetSuiGetAcccountsModal from '@/views/SessionGetSuiGetAcccountsModal' export default function Modal() { const { open, view } = useSnapshot(ModalStore.state) @@ -88,6 +89,8 @@ export default function Modal() { return case 'SessionSignSuiAndExecuteTransactionModal': return + case 'SessionGetSuiAccountsModal': + return case 'SessionSendStacksTransferModal': return case 'SessionSignStacksMessageModal': diff --git a/advanced/wallets/react-wallet-v2/src/data/SuiData.ts b/advanced/wallets/react-wallet-v2/src/data/SuiData.ts index 97f37cc30..af1ee607e 100644 --- a/advanced/wallets/react-wallet-v2/src/data/SuiData.ts +++ b/advanced/wallets/react-wallet-v2/src/data/SuiData.ts @@ -71,7 +71,8 @@ export const SUI_MAINNET_CHAINS = { ...SUI_MAINNET } as Record< export const SUI_SIGNING_METHODS = { SUI_SIGN_TRANSACTION: 'sui_signTransaction', SUI_SIGN_AND_EXECUTE_TRANSACTION: 'sui_signAndExecuteTransaction', - SUI_SIGN_PERSONAL_MESSAGE: 'sui_signPersonalMessage' + SUI_SIGN_PERSONAL_MESSAGE: 'sui_signPersonalMessage', + SUI_GET_ACCOUNTS: 'sui_getAccounts' } /** diff --git a/advanced/wallets/react-wallet-v2/src/hooks/useWalletConnectEventsManager.ts b/advanced/wallets/react-wallet-v2/src/hooks/useWalletConnectEventsManager.ts index 341da2e0b..52bedb1fb 100644 --- a/advanced/wallets/react-wallet-v2/src/hooks/useWalletConnectEventsManager.ts +++ b/advanced/wallets/react-wallet-v2/src/hooks/useWalletConnectEventsManager.ts @@ -191,6 +191,8 @@ export default function useWalletConnectEventsManager(initialized: boolean) { requestEvent, requestSession }) + case SUI_SIGNING_METHODS.SUI_GET_ACCOUNTS: + return ModalStore.open('SessionGetSuiAccountsModal', { requestEvent, requestSession }) case STACKS_SIGNING_METHODS.STACKS_SEND_TRANSFER: return ModalStore.open('SessionSendStacksTransferModal', { requestEvent, requestSession }) case STACKS_SIGNING_METHODS.STACKS_SIGN_MESSAGE: diff --git a/advanced/wallets/react-wallet-v2/src/lib/StacksLib.ts b/advanced/wallets/react-wallet-v2/src/lib/StacksLib.ts index ab17f79e2..5a1036951 100644 --- a/advanced/wallets/react-wallet-v2/src/lib/StacksLib.ts +++ b/advanced/wallets/react-wallet-v2/src/lib/StacksLib.ts @@ -6,11 +6,8 @@ import { makeSTXTokenTransfer, privateKeyToPublic, signMessageHashRsv, - verifySignature, - signWithKey, - hash160, - publicKeyFromSignatureVrs, - publicKeyFromSignatureRsv + publicKeyFromSignatureRsv, + publicKeyToHex, } from '@stacks/transactions' import { networkFromName, StacksNetworks } from '@stacks/network' import { STACKS_MAINNET, STACKS_TESTNET, STACKS_TESTNET_CAIP2 } from '@/data/StacksData' @@ -38,23 +35,35 @@ export interface StacksWallet { */ export default class StacksLib implements StacksWallet { wallet: Wallet - addresses: { - mainnet: string - testnet: string + accounts: { + mainnet: { + address: string + publicKey: string + } + testnet: { + address: string + publicKey: string + } } mnemonic: string constructor(wallet: Wallet, mnemonic: string) { this.wallet = wallet - this.addresses = { - mainnet: getAddressFromPrivateKey( - wallet.accounts[0].stxPrivateKey, - networkFromName('mainnet') - ), - testnet: getAddressFromPrivateKey( - wallet.accounts[0].stxPrivateKey, - networkFromName('testnet') - ) + this.accounts = { + mainnet: { + address: getAddressFromPrivateKey( + wallet.accounts[0].stxPrivateKey, + networkFromName('mainnet') + ), + publicKey: publicKeyToHex(privateKeyToPublic(wallet.accounts[0].stxPrivateKey)) + }, + testnet: { + address: getAddressFromPrivateKey( + wallet.accounts[0].stxPrivateKey, + networkFromName('testnet') + ), + publicKey: publicKeyToHex(privateKeyToPublic(wallet.accounts[0].stxPrivateKey)) + } } this.mnemonic = mnemonic } @@ -81,9 +90,9 @@ export default class StacksLib implements StacksWallet { getAddress(chainId: string) { if (chainId === STACKS_MAINNET_CAIP2) { - return this.addresses.mainnet + return this.accounts.mainnet.address } else if (chainId === STACKS_TESTNET_CAIP2) { - return this.addresses.testnet + return this.accounts.testnet.address } console.error( `No stacks address found for chainId: ${chainId}, supported chains: ${STACKS_MAINNET_CAIP2}, ${STACKS_TESTNET_CAIP2}` @@ -92,7 +101,14 @@ export default class StacksLib implements StacksWallet { } getAddresses() { - return this.addresses + return { + mainnet: this.accounts.mainnet.address, + testnet: this.accounts.testnet.address + } + } + + getAccounts() { + return this.accounts } async sendTransfer(request: { @@ -175,9 +191,9 @@ export default class StacksLib implements StacksWallet { private getNetworkFromAddress(address: string) { switch (address) { - case this.addresses.mainnet: + case this.accounts.mainnet.address: return 'mainnet' - case this.addresses.testnet: + case this.accounts.testnet.address: return 'testnet' default: throw new Error(`Invalid address: ${address}`) diff --git a/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts b/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts index c4345a49b..9ff60be5b 100644 --- a/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts +++ b/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts @@ -1,6 +1,6 @@ import * as bip39 from 'bip39' import { mnemonicToSeedSync } from 'bip39' -import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519' +import { Ed25519Keypair, Ed25519PublicKey } from '@mysten/sui/keypairs/ed25519' import { verifyPersonalMessageSignature } from '@mysten/sui/verify' import { derivePath } from 'ed25519-hd-key' import { SerialTransactionExecutor, Transaction } from '@mysten/sui/transactions' @@ -32,8 +32,8 @@ const SUI_PATH = "m/44'/784'/0'/0'/0'" export default class SuiLib { private keypair: Ed25519Keypair private mnemonic: string - private address: string private suiClients: Record = {} + private publicKey: Ed25519PublicKey constructor(mnemonic?: string) { this.mnemonic = mnemonic ? mnemonic : bip39.generateMnemonic() @@ -41,22 +41,30 @@ export default class SuiLib { const { key } = derivePath(SUI_PATH, seed.toString('hex')) this.keypair = Ed25519Keypair.fromSecretKey(new Uint8Array(key)) - this.address = this.keypair.getPublicKey().toSuiAddress() - console.log('Sui Address:', this.address) + this.publicKey = this.keypair.getPublicKey() + console.log('Sui Address:', this.publicKey.toSuiAddress()) } static async init({ mnemonic }: IInitArguments) { return new SuiLib(mnemonic) } + public getPublicKey() { + return this.publicKey.toBase64() + } + public getAddress() { - return this.address + return this.publicKey.toSuiAddress() } public getMnemonic() { return this.mnemonic } + public getAccounts(): { address: string; pubkey: string }[] { + return [{ address: this.getAddress(), pubkey: this.getPublicKey() }] + } + public async signMessage({ message }: ISignMessageArguments) { const messageToSign = new TextEncoder().encode(message) diff --git a/advanced/wallets/react-wallet-v2/src/store/ModalStore.ts b/advanced/wallets/react-wallet-v2/src/store/ModalStore.ts index 7e113a3db..c4e84b446 100644 --- a/advanced/wallets/react-wallet-v2/src/store/ModalStore.ts +++ b/advanced/wallets/react-wallet-v2/src/store/ModalStore.ts @@ -41,6 +41,7 @@ interface State { | 'SessionSignSuiAndExecuteTransactionModal' | 'SessionSendStacksTransferModal' | 'SessionSignStacksMessageModal' + | 'SessionGetSuiAccountsModal' data?: ModalData } diff --git a/advanced/wallets/react-wallet-v2/src/utils/StacksWalletUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/StacksWalletUtil.ts index 246c17f40..3e4abf1f4 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/StacksWalletUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/StacksWalletUtil.ts @@ -21,7 +21,7 @@ export async function createOrRestoreStacksWallet() { localStorage.setItem('STACKS_MNEMONIC_1', wallet1.getMnemonic()) console.log('STACKS_MNEMONIC_1', wallet1.getMnemonic()) } - console.log('stacks addresses', wallet1.addresses) + console.log('stacks addresses', wallet1.getAddresses()) const addresses = wallet1.getAddresses() diff --git a/advanced/wallets/react-wallet-v2/src/utils/SuiRequestHandlerUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/SuiRequestHandlerUtil.ts index e2c217ff3..46fca6c7e 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/SuiRequestHandlerUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/SuiRequestHandlerUtil.ts @@ -1,5 +1,4 @@ import { getWallet } from '@/utils/SuiWalletUtil' -import { getSignParamsMessage } from '@/utils/HelperUtil' import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils' import { SignClientTypes } from '@walletconnect/types' import { getSdkError } from '@walletconnect/utils' @@ -17,6 +16,15 @@ export async function approveSuiRequest(requestEvent: RequestEventArgs) { const wallet = await getWallet() switch (request.method) { + case SUI_SIGNING_METHODS.SUI_GET_ACCOUNTS: + try { + const result = await wallet.getAccounts() + return formatJsonRpcResult(id, result) + } catch (error: any) { + console.error(error) + alert(error.message) + return formatJsonRpcError(id, error.message) + } case SUI_SIGNING_METHODS.SUI_SIGN_PERSONAL_MESSAGE: try { const message = request.params.message diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionGetSuiGetAcccountsModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionGetSuiGetAcccountsModal.tsx new file mode 100644 index 000000000..1e3d18c44 --- /dev/null +++ b/advanced/wallets/react-wallet-v2/src/views/SessionGetSuiGetAcccountsModal.tsx @@ -0,0 +1,90 @@ +/* eslint-disable react-hooks/rules-of-hooks */ +import { Col, Divider, Row, Text } from '@nextui-org/react' + +import RequestDataCard from '@/components/RequestDataCard' +import ModalStore from '@/store/ModalStore' +import { styledToast } from '@/utils/HelperUtil' +import { walletkit } from '@/utils/WalletConnectUtil' +import RequestModal from '../components/RequestModal' +import { useCallback, useState } from 'react' +import { approveSuiRequest, rejectSuiRequest } from '@/utils/SuiRequestHandlerUtil' +import { wallet1 as suiWallet } from '@/utils/SuiWalletUtil' + +export default function SessionGetSuiGetAcccountsModal() { + // Get request and wallet data from store + const requestEvent = ModalStore.state.data?.requestEvent + const requestSession = ModalStore.state.data?.requestSession + const [isLoadingApprove, setIsLoadingApprove] = useState(false) + const [isLoadingReject, setIsLoadingReject] = useState(false) + + // Ensure request and wallet are defined + if (!requestEvent || !requestSession) { + return Missing request data + } + + const { topic } = requestEvent + const accounts = suiWallet.getAccounts() + + // Handle approve action (logic varies based on request method) + const onApprove = useCallback(async () => { + if (requestEvent) { + const response = await approveSuiRequest(requestEvent) + try { + await walletkit.respondSessionRequest({ + topic, + response + }) + } catch (e) { + setIsLoadingApprove(false) + styledToast((e as Error).message, 'error') + return + } + setIsLoadingApprove(false) + ModalStore.close() + } + }, [requestEvent, topic]) + + // Handle reject action + const onReject = useCallback(async () => { + if (requestEvent) { + setIsLoadingReject(true) + const response = rejectSuiRequest(requestEvent) + try { + await walletkit.respondSessionRequest({ + topic, + response + }) + } catch (e) { + setIsLoadingReject(false) + styledToast((e as Error).message, 'error') + return + } + setIsLoadingReject(false) + ModalStore.close() + } + }, [requestEvent, topic]) + + if (!accounts || accounts.length === 0) { + onReject() + return No addresses found + } + + return ( + + + + Accounts + + + + + + ) +} diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionProposalModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionProposalModal.tsx index 544f3f4bf..fa1ea521f 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionProposalModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionProposalModal.tsx @@ -49,6 +49,7 @@ import { SUI_CHAINS, SUI_EVENTS, SUI_SIGNING_METHODS } from '@/data/SuiData' import { suiAddresses } from '@/utils/SuiWalletUtil' import { STACKS_CHAINS, STACKS_EVENTS, STACKS_SIGNING_METHODS } from '@/data/StacksData' import { stacksAddresses, stacksWallet } from '@/utils/StacksWalletUtil' +import { getWallet as getSuiWallet } from '@/utils/SuiWalletUtil' import StacksLib from '@/lib/StacksLib' const StyledText = styled(Text, { @@ -357,7 +358,23 @@ export default function SessionProposalModal() { ) }) } + + if (namespaces.sui) { + const suiWallet = await getSuiWallet() + const accounts = suiWallet.getAccounts() + sessionProperties.sui_getAccounts = JSON.stringify(accounts) + } + + if (namespaces.stacks) { + const accounts = stacksWallet.getAccounts() + sessionProperties.stacks_getAddresses = JSON.stringify([ + accounts.mainnet, + accounts.testnet + ]) + } + console.log('sessionProperties', sessionProperties) + await walletkit.approveSession({ id: proposal.id, namespaces, diff --git a/advanced/wallets/react-wallet-v2/yarn.lock b/advanced/wallets/react-wallet-v2/yarn.lock index f283c3e9e..80b034aa7 100644 --- a/advanced/wallets/react-wallet-v2/yarn.lock +++ b/advanced/wallets/react-wallet-v2/yarn.lock @@ -3238,16 +3238,16 @@ "@stablelib/salsa20" "^1.0.2" "@stablelib/wipe" "^1.0.1" -"@stacks/auth@^7.0.6": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@stacks/auth/-/auth-7.0.6.tgz#9aae8801d12e17ff76a5eb2a2e35fbb08163bab6" - integrity sha512-ouLOZJWbsULdXbKFZESnAmTe94Hz7297WcU94ZahT0pVEvf06KlYmHiBMhVUH/sJw2Oz7ylX5SQOg8tAdQaLaA== +"@stacks/auth@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@stacks/auth/-/auth-7.1.0.tgz#8ee32f82e926ae9ff7bae01e3c25135e9d768070" + integrity sha512-I2Wlk2ucM0roXSF7aDUThyLQan3PIkqC7QQ1ZL1ulorha7IraqubasJX8j/q/ZE58z9gQnPOf0ayf0r0ocNOuQ== dependencies: "@noble/secp256k1" "1.7.1" "@stacks/common" "^7.0.2" - "@stacks/encryption" "^7.0.6" + "@stacks/encryption" "^7.1.0" "@stacks/network" "^7.0.2" - "@stacks/profile" "^7.0.6" + "@stacks/profile" "^7.1.0" cross-fetch "^3.1.5" jsontokens "^4.0.1" @@ -3256,10 +3256,10 @@ resolved "https://registry.yarnpkg.com/@stacks/common/-/common-7.0.2.tgz#8b17f9cf6265cf1c9065bf3cd844556870a6ee20" integrity sha512-+RSecHdkxOtswmE4tDDoZlYEuULpnTQVeDIG5eZ32opK8cFxf4EugAcK9CsIsHx/Se1yTEaQ21WGATmJGK84lQ== -"@stacks/encryption@^7.0.6": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@stacks/encryption/-/encryption-7.0.6.tgz#77809b8c50268faa57f3b473db10be161f1fc4f5" - integrity sha512-tUaYmsaRHRS95eeVBrfctAixFwL2yZHjDltC3dgQ+JjpcYNnWuvPOWoEEENwSU/t/Dj0b/xGSd1YW7z9CFd+cQ== +"@stacks/encryption@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@stacks/encryption/-/encryption-7.1.0.tgz#363ebdad7be4ee4d7e6cb766f7d68d37df03ff3a" + integrity sha512-KOHtQzCMIa5vGxB1xRB86q5vH2S6VGlMX23Z3n/81mI8ITMsozJjeBF9m/VwkfoMJTmJRs/PoKREbCmEgro7kw== dependencies: "@noble/hashes" "1.1.5" "@noble/secp256k1" "1.7.1" @@ -3278,34 +3278,34 @@ "@stacks/common" "^7.0.2" cross-fetch "^3.1.5" -"@stacks/profile@^7.0.6": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@stacks/profile/-/profile-7.0.6.tgz#d9741ea11ab690d47becbb332ec989e6c34bcb04" - integrity sha512-VU1YJzlrlyJRASHmg1saCKVkkc3CWzOaHMREJAnbUdAUYtawCMhEpc0wvtZdqn3Om1dRh7iGgXoPmBdkK0PH0Q== +"@stacks/profile@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@stacks/profile/-/profile-7.1.0.tgz#a89eeff95ddc4d42cf32a6370d9501c1ce6cd9f9" + integrity sha512-6Bwe9JALpnmPFn32zBKTHWBQsxKBvvnGL5h+Usieda4DzUiLmbU5e13snG8uuYouNeEbRt1V+WGF28CiwCFMcA== dependencies: "@stacks/common" "^7.0.2" "@stacks/network" "^7.0.2" - "@stacks/transactions" "^7.0.6" + "@stacks/transactions" "^7.1.0" jsontokens "^4.0.1" schema-inspector "^2.0.2" zone-file "^2.0.0-beta.3" -"@stacks/storage@^7.0.6": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@stacks/storage/-/storage-7.0.6.tgz#790a9f3595e46890afef5bf73f372111b1786020" - integrity sha512-F3chiKYx0ElOaV98RfJ5wRSlP8rHooM7r+nWC6js/dV2jH493jLZkVntWdWjIVz4A7Qx/0EWS96cow4Bma3DPw== +"@stacks/storage@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@stacks/storage/-/storage-7.1.0.tgz#9f11871e84dcbeb9a3ad5f6624942ca47c497c4a" + integrity sha512-mNI5X2ix3gGXmYxio45GdmSKUkmHn03GsyKHsLTBOGDu96K8wWUSQlLYdh4nVfNwbbMSTGXyozZsECrkOH/vwA== dependencies: - "@stacks/auth" "^7.0.6" + "@stacks/auth" "^7.1.0" "@stacks/common" "^7.0.2" - "@stacks/encryption" "^7.0.6" + "@stacks/encryption" "^7.1.0" "@stacks/network" "^7.0.2" base64-js "^1.5.1" jsontokens "^4.0.1" -"@stacks/transactions@^7.0.6": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@stacks/transactions/-/transactions-7.0.6.tgz#c62e5f4ee8d61eeded11e405ba9f8f2dc254bae2" - integrity sha512-qRGo4tNwOh+avUv/u4JGqqUWQ8xW/iUWtJV0o3BxpMyRxqDXmj+m+yeAEVYf9jRDouOo+NaWmwtRmWc0URZPdw== +"@stacks/transactions@7.1.0", "@stacks/transactions@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@stacks/transactions/-/transactions-7.1.0.tgz#acfbd549137d68e74fdad79ab658d848e1643e99" + integrity sha512-/4n5h+ka5N3mq16f1Zo0O0g2gyOYhaXFdGN8ifLz38NJmkjnCDXqi/ogB6NFNpSKGonyqyF5Vz1UPaQHwO8+IA== dependencies: "@noble/hashes" "1.1.5" "@noble/secp256k1" "1.7.1" @@ -3314,20 +3314,20 @@ c32check "^2.0.0" lodash.clonedeep "^4.5.0" -"@stacks/wallet-sdk@^7.0.6": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@stacks/wallet-sdk/-/wallet-sdk-7.0.6.tgz#1d9f4971a7bbcb2e960bfbdeb1a16269a0549235" - integrity sha512-OTYdSfx7oYNAlNV1otUxmRA95gCaUQzrhloT5q4TxQKrxFXb2FLS/OoL0KoN3mYQgl0oDFGBViRj6B7I0bhjZQ== +"@stacks/wallet-sdk@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@stacks/wallet-sdk/-/wallet-sdk-7.1.0.tgz#8ca675c327baf861678815395ee45e7477a771be" + integrity sha512-ae9O8Jxmv2/KIBXzx9beel63hdPGdyxD/wlbPzykLH7Q51EV71XK31esR/m+OxqDXDin3I8nABNjrPfbA93ckw== dependencies: "@scure/bip32" "1.1.3" "@scure/bip39" "1.1.0" - "@stacks/auth" "^7.0.6" + "@stacks/auth" "^7.1.0" "@stacks/common" "^7.0.2" - "@stacks/encryption" "^7.0.6" + "@stacks/encryption" "^7.1.0" "@stacks/network" "^7.0.2" - "@stacks/profile" "^7.0.6" - "@stacks/storage" "^7.0.6" - "@stacks/transactions" "^7.0.6" + "@stacks/profile" "^7.1.0" + "@stacks/storage" "^7.1.0" + "@stacks/transactions" "^7.1.0" c32check "^2.0.0" jsontokens "^4.0.1" zone-file "^2.0.0-beta.3"