From 4a875610b40fb25bccc2b99b71a88664c504d677 Mon Sep 17 00:00:00 2001 From: Lyka Labrada Date: Mon, 9 Oct 2023 10:46:30 +0800 Subject: [PATCH] feat(core): add evmtx signer on convert (#4038) * feat(core): add evmtx signer on convert * feat(core): fix evmxt 'to' address for dvm to evm transferdomain * feat(core): update transferdomain implementation for dst20 tokens * feat(core): update handle transferdomain tokenId for EVM tokens * update docker * update evmtx signature * update check for dfi token * add function to get dst20 token contract address * revert unnecessary changes on feautureflagcontext * update blockchain node to beta14 * feat(core): implement transfer domain with signed evmtx on Send * add README.md for the contractA abi * extraxt evmtx signer into a separate function * add todo * remove commented line * set nonce to 0 --- babel.config.js | 3 + docker-compose.yml | 10 +- .../app/api/transaction/transfer_domain.ts | 197 +++-- .../app/contexts/FeatureFlagContext.tsx | 8 +- mobile-app/app/contracts/README.md | 19 + .../app/contracts/TransferDomainV1.json | 181 +++++ .../screens/ConvertConfirmationScreen.tsx | 7 + .../screens/SendConfirmationScreen.tsx | 125 +++- package-lock.json | 701 ++++++++++-------- package.json | 1 + 10 files changed, 836 insertions(+), 416 deletions(-) create mode 100644 mobile-app/app/contracts/README.md create mode 100644 mobile-app/app/contracts/TransferDomainV1.json diff --git a/babel.config.js b/babel.config.js index 318d3baf0a..e00f1a1c37 100644 --- a/babel.config.js +++ b/babel.config.js @@ -22,6 +22,9 @@ module.exports = function (api) { }, ], "@babel/plugin-proposal-export-namespace-from", + "@babel/plugin-transform-private-methods", + "@babel/plugin-transform-class-properties", + "@babel/plugin-transform-private-property-in-object", "react-native-reanimated/plugin", ]; diff --git a/docker-compose.yml b/docker-compose.yml index 4938f77044..113f590529 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,17 +12,21 @@ services: ports: - "19553:80" - "19552:8080" - - "19551:8082" + # - "19551:8082" volumes: - "/var/run/docker.sock:/var/run/docker.sock:ro" defi-blockchain: - image: defi/defichain:master-b352814976 + image: defi/defichain:4.0.0-beta14 + ports: + - "19554:19554" + - "19551:19551" command: > defid -printtoconsole -rpcallowip=0.0.0.0/0 -rpcbind=0.0.0.0 + -ethrpcbind=0.0.0.0 -rpcuser=playground -rpcpassword=playground -rpcworkqueue=512 @@ -55,6 +59,8 @@ services: -grandcentralheight=16 -grandcentralepilogueheight=17 -nextnetworkupgradeheight=18 + environment: + - RUST_LOG=debug defi-playground: image: ghcr.io/birthdayresearch/playground-api:4.0.0-rc.1.2 diff --git a/mobile-app/app/api/transaction/transfer_domain.ts b/mobile-app/app/api/transaction/transfer_domain.ts index dc016ab4d1..3467f15b59 100644 --- a/mobile-app/app/api/transaction/transfer_domain.ts +++ b/mobile-app/app/api/transaction/transfer_domain.ts @@ -1,12 +1,20 @@ import { translate } from "@translations"; import BigNumber from "bignumber.js"; +import { ethers, providers, utils } from "ethers"; import { DfTxSigner } from "@waveshq/walletkit-ui/dist/store"; import { WhaleWalletAccount } from "@defichain/whale-api-wallet"; import { CTransactionSegWit, - TransactionSegWit, + TransferDomain, + Script, } from "@defichain/jellyfish-transaction"; +import { fromAddress, Eth } from "@defichain/jellyfish-address"; +import { NetworkName } from "@defichain/jellyfish-network"; import { ConvertDirection } from "@screens/enum"; +import { parseUnits } from "ethers/lib/utils"; +import TransferDomainV1 from "../../contracts/TransferDomainV1.json"; + +const TD_CONTRACT_ADDR = "0xdf00000000000000000000000000000000000001"; const TRANSFER_DOMAIN_TYPE = { DVM: 2, @@ -20,52 +28,78 @@ export interface TransferDomainToken { balance: BigNumber; } -export async function transferDomainSigner( - account: WhaleWalletAccount, - sourceTokenId: string, - targetTokenId: string, - amount: BigNumber, - convertDirection: ConvertDirection, -): Promise { - const dvmScript = await account.getScript(); - const evmScript = await account.getEvmScript(); +interface TransferDomainSigner { + account: WhaleWalletAccount; + sourceTokenId: string; + targetTokenId: string; + amount: BigNumber; + convertDirection: ConvertDirection; + dvmAddress: string; + evmAddress: string; + networkName: NetworkName; +} + +export async function transferDomainSigner({ + account, + sourceTokenId, + targetTokenId, + amount, + convertDirection, + dvmAddress, + evmAddress, + networkName, +}: TransferDomainSigner): Promise { + const dvmScript = fromAddress(dvmAddress, networkName)?.script as Script; + const evmScript = Eth.fromAddress(evmAddress) as Script; const builder = account.withTransactionBuilder(); - const [sourceScript, dstScript] = - convertDirection === ConvertDirection.evmToDvm - ? [evmScript, dvmScript] - : [dvmScript, evmScript]; + const isEvmToDvm = convertDirection === ConvertDirection.evmToDvm; - const [srcDomain, dstDomain] = - convertDirection === ConvertDirection.evmToDvm - ? [TRANSFER_DOMAIN_TYPE.EVM, TRANSFER_DOMAIN_TYPE.DVM] - : [TRANSFER_DOMAIN_TYPE.DVM, TRANSFER_DOMAIN_TYPE.EVM]; + const [sourceScript, dstScript] = isEvmToDvm + ? [evmScript, dvmScript] + : [dvmScript, evmScript]; - const signed: TransactionSegWit = await builder.account.transferDomain( - { - items: [ - { - src: { - address: sourceScript, - amount: { - token: stripEvmSuffixFromTokenId(sourceTokenId), - amount, - }, - domain: srcDomain, - data: new Uint8Array([]), + const [srcDomain, dstDomain] = isEvmToDvm + ? [TRANSFER_DOMAIN_TYPE.EVM, TRANSFER_DOMAIN_TYPE.DVM] + : [TRANSFER_DOMAIN_TYPE.DVM, TRANSFER_DOMAIN_TYPE.EVM]; + + const signedEvmTxData = await createSignedEvmTx({ + isEvmToDvm, + sourceTokenId, + targetTokenId, + amount, + dvmAddress, + evmAddress, + privateKey: await account.privateKey(), + }); + + const transferDomain: TransferDomain = { + items: [ + { + src: { + address: sourceScript, + domain: srcDomain, + amount: { + token: stripEvmSuffixFromTokenId(sourceTokenId), + amount: amount, }, - dst: { - address: dstScript, - amount: { - token: stripEvmSuffixFromTokenId(targetTokenId), - amount, - }, - domain: dstDomain, - data: new Uint8Array([]), + data: isEvmToDvm ? signedEvmTxData : new Uint8Array([]), + }, + dst: { + address: dstScript, + domain: dstDomain, + amount: { + token: stripEvmSuffixFromTokenId(targetTokenId), + amount: amount, }, + data: isEvmToDvm ? new Uint8Array([]) : signedEvmTxData, }, - ], - }, + }, + ], + }; + + const signed = await builder.account.transferDomain( + transferDomain, dvmScript, ); @@ -77,6 +111,7 @@ export function transferDomainCrafter( convertDirection: ConvertDirection, sourceToken: TransferDomainToken, targetToken: TransferDomainToken, + networkName: NetworkName, onBroadcast: () => any, onConfirmation: () => void, submitButtonLabel?: string, @@ -96,13 +131,16 @@ export function transferDomainCrafter( return { sign: async (account: WhaleWalletAccount) => - await transferDomainSigner( + await transferDomainSigner({ account, - sourceToken.tokenId, - targetToken.tokenId, amount, convertDirection, - ), + networkName, + sourceTokenId: sourceToken.tokenId, + targetTokenId: targetToken.tokenId, + dvmAddress: await account.getAddress(), + evmAddress: await account.getEvmAddress(), + }), title: translate( "screens/ConvertConfirmScreen", "Convert {{amount}} {{symbolA}} to {{symbolB}} tokens", @@ -142,9 +180,80 @@ export function transferDomainCrafter( }; } +interface EvmTxSigner { + isEvmToDvm: boolean; + sourceTokenId: string; + targetTokenId: string; + amount: BigNumber; + dvmAddress: string; + evmAddress: string; + privateKey: Buffer; +} + +async function createSignedEvmTx({ + isEvmToDvm, + sourceTokenId, + targetTokenId, + amount, + dvmAddress, + evmAddress, + privateKey, +}: EvmTxSigner): Promise { + let data; + const tdFace = new utils.Interface(TransferDomainV1.abi); + const from = isEvmToDvm ? evmAddress : TD_CONTRACT_ADDR; + const to = isEvmToDvm ? TD_CONTRACT_ADDR : evmAddress; + // TODO: round off parsedAmount to 8 decimals + const parsedAmount = parseUnits(amount.toString(), 18); // TODO: Get decimals from token contract + const vmAddress = dvmAddress; + + if (sourceTokenId === "0" || targetTokenId === "0") { + /* For DFI, use `transfer` function */ + const transferDfi = [from, to, parsedAmount, vmAddress]; + data = tdFace.encodeFunctionData("transfer", transferDfi); + } else { + /* For DST20, use `transferDST20` function */ + const dst20TokenId = stripEvmSuffixFromTokenId(sourceTokenId); + const contractAddress = getAddressFromDST20TokenId(dst20TokenId); + const transferDST20 = [contractAddress, from, to, parsedAmount, vmAddress]; + data = tdFace.encodeFunctionData("transferDST20", transferDST20); + } + + // TODO: Make ETH RPC URL dynamic based on network + // const ethRpc = new providers.JsonRpcProvider("http://localhost:19551"); // TODO: Uncomment + const wallet = new ethers.Wallet(privateKey); + + /* TODO: Figure out CORS issue when using the ethRpc */ + const tx: providers.TransactionRequest = { + to: TD_CONTRACT_ADDR, + nonce: 0, // await ethRpc.getTransactionCount(from), // TODO: Remove hardcoded data + chainId: 1133, // (await rpc.getNetwork()).chainId, // TODO: Remove hardcoded data + data: data, + value: 0, + gasLimit: 0, + gasPrice: 0, + type: 0, + }; + const evmtxSigned = (await wallet.signTransaction(tx)).substring(2); // rm prefix `0x` + return new Uint8Array(Buffer.from(evmtxSigned, "hex") || []); +} + function stripEvmSuffixFromTokenId(tokenId: string) { if (tokenId.includes("-EVM")) { return Number(tokenId.replace("-EVM", "")); } return Number(tokenId); } + +/** + * Get DST20 contract address + * https://github.com/DeFiCh/ain/blob/f5a671362f9899080d0a0dddbbcdcecb7c19d9e3/lib/ain-contracts/src/lib.rs#L79 + */ +function getAddressFromDST20TokenId(tokenId: number): string { + const parsedTokenId = BigInt(tokenId); + const numberStr = parsedTokenId.toString(16); // Convert parsedTokenId to hexadecimal + const paddedNumberStr = numberStr.padStart(38, "0"); // Pad with zeroes to the left + const finalStr = `ff${paddedNumberStr}`; + const tokenContractAddess = utils.getAddress(finalStr); + return tokenContractAddess; +} diff --git a/mobile-app/app/contexts/FeatureFlagContext.tsx b/mobile-app/app/contexts/FeatureFlagContext.tsx index 4f2ef2595e..eb2b72f1a6 100644 --- a/mobile-app/app/contexts/FeatureFlagContext.tsx +++ b/mobile-app/app/contexts/FeatureFlagContext.tsx @@ -43,7 +43,7 @@ export function useFeatureFlagContext(): FeatureFlagContextI { } export function FeatureFlagProvider( - props: React.PropsWithChildren + props: React.PropsWithChildren, ): JSX.Element | null { const { network } = useNetworkContext(); const { url, isCustomUrl } = useServiceProviderContext(); @@ -80,7 +80,7 @@ export function FeatureFlagProvider( satisfies(appVersion, flag.version) && flag.networks?.includes(network) && flag.id === featureId && - flag.stage === "beta" + flag.stage === "beta", ); } @@ -118,7 +118,7 @@ export function FeatureFlagProvider( } const updateEnabledFeatures = async ( - flags: FeatureFlagID[] + flags: FeatureFlagID[], ): Promise => { setEnabledFeatures(flags); await FeatureFlagPersistence.set(flags); @@ -151,7 +151,7 @@ export function FeatureFlagProvider( satisfies(appVersion, flag.version) && flag.networks?.includes(network) && flag.platforms?.includes(Platform.OS) && - flag.stage === "beta" + flag.stage === "beta", ), }; diff --git a/mobile-app/app/contracts/README.md b/mobile-app/app/contracts/README.md new file mode 100644 index 0000000000..8420d3a638 --- /dev/null +++ b/mobile-app/app/contracts/README.md @@ -0,0 +1,19 @@ +# ABI Source Explanation + +**`/contracts`** directory contains the ABI (Application Binary Interface) for the "TransferDomainV1" smart contract. The ABI was generated based on the corresponding Solidity (.sol) file. + +## Contract Information + +- **Contract Name**: TransferDomainV1 +- **Solidity File**: [TransferDomainV1.sol](https://github.com/DeFiCh/ain/blob/master/lib/ain-contracts/transfer_domain_v1/TransferDomainV1.sol) + +## ABI Generation + +The ABI provided in this repository was generated from the linked Solidity file. This ABI is essential for interacting with the TransferDomainV1 smart contract on the Ethereum blockchain or other compatible blockchains. + +## Disclaimer + +Please note that the ABI provided here is based on the linked Solidity file at the time of generation. Ensure that the Solidity code and the ABI are up-to-date and compatible with the version of the smart contract deployed on the blockchain you intend to interact with. + +For any updates or changes to the contract, refer to the original source repository: +[TransferDomainV1.sol](https://github.com/DeFiCh/ain/blob/master/lib/ain-contracts/transfer_domain_v1/TransferDomainV1.sol) diff --git a/mobile-app/app/contracts/TransferDomainV1.json b/mobile-app/app/contracts/TransferDomainV1.json new file mode 100644 index 0000000000..756a77ba7e --- /dev/null +++ b/mobile-app/app/contracts/TransferDomainV1.json @@ -0,0 +1,181 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TransferDomainV1", + "sourceName": "contracts/TransferDomainV1.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "vmAddress", + "type": "string" + } + ], + "name": "VMTransfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address payable", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "string", + "name": "vmAddress", + "type": "string" + } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "contractAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address payable", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "string", + "name": "vmAddress", + "type": "string" + } + ], + "name": "transferDST20", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50610a77806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806370a082311161005b57806370a08231146100dc578063917e9b691461010c57806395d89b4114610128578063d57b2826146101465761007d565b806306fdde031461008257806318160ddd146100a0578063313ce567146100be575b600080fd5b61008a610162565b60405161009791906104e6565b60405180910390f35b6100a861019f565b6040516100b59190610521565b60405180910390f35b6100c66101a9565b6040516100d39190610558565b60405180910390f35b6100f660048036038101906100f191906105e5565b6101b2565b6040516101039190610521565b60405180910390f35b610126600480360381019061012191906107b1565b6101fa565b005b6101306102b9565b60405161013d91906104e6565b60405180910390f35b610160600480360381019061015b9190610848565b6102f6565b005b60606040518060400160405280600e81526020017f5472616e73666572446f6d61696e000000000000000000000000000000000000815250905090565b6000600154905090565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b8473ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b815260040161023793929190610939565b6020604051808303816000875af1158015610256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027a91906109a8565b507f5b494f8e62c9b3ea113ad3af9830e30a412c97a58a1237f83b3a515c94bc5577816040516102aa91906104e6565b60405180910390a15050505050565b60606040518060400160405280600381526020017f4446490000000000000000000000000000000000000000000000000000000000815250905090565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146103b4578147101561036c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036390610a21565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156103b2573d6000803e3d6000fd5b505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516104119190610521565b60405180910390a37f5b494f8e62c9b3ea113ad3af9830e30a412c97a58a1237f83b3a515c94bc55778160405161044891906104e6565b60405180910390a150505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610490578082015181840152602081019050610475565b60008484015250505050565b6000601f19601f8301169050919050565b60006104b882610456565b6104c28185610461565b93506104d2818560208601610472565b6104db8161049c565b840191505092915050565b6000602082019050818103600083015261050081846104ad565b905092915050565b6000819050919050565b61051b81610508565b82525050565b60006020820190506105366000830184610512565b92915050565b600060ff82169050919050565b6105528161053c565b82525050565b600060208201905061056d6000830184610549565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006105b282610587565b9050919050565b6105c2816105a7565b81146105cd57600080fd5b50565b6000813590506105df816105b9565b92915050565b6000602082840312156105fb576105fa61057d565b5b6000610609848285016105d0565b91505092915050565b600061061d82610587565b9050919050565b61062d81610612565b811461063857600080fd5b50565b60008135905061064a81610624565b92915050565b61065981610508565b811461066457600080fd5b50565b60008135905061067681610650565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6106be8261049c565b810181811067ffffffffffffffff821117156106dd576106dc610686565b5b80604052505050565b60006106f0610573565b90506106fc82826106b5565b919050565b600067ffffffffffffffff82111561071c5761071b610686565b5b6107258261049c565b9050602081019050919050565b82818337600083830152505050565b600061075461074f84610701565b6106e6565b9050828152602081018484840111156107705761076f610681565b5b61077b848285610732565b509392505050565b600082601f8301126107985761079761067c565b5b81356107a8848260208601610741565b91505092915050565b600080600080600060a086880312156107cd576107cc61057d565b5b60006107db888289016105d0565b95505060206107ec888289016105d0565b94505060406107fd8882890161063b565b935050606061080e88828901610667565b925050608086013567ffffffffffffffff81111561082f5761082e610582565b5b61083b88828901610783565b9150509295509295909350565b600080600080608085870312156108625761086161057d565b5b6000610870878288016105d0565b94505060206108818782880161063b565b935050604061089287828801610667565b925050606085013567ffffffffffffffff8111156108b3576108b2610582565b5b6108bf87828801610783565b91505092959194509250565b6108d4816105a7565b82525050565b6000819050919050565b60006108ff6108fa6108f584610587565b6108da565b610587565b9050919050565b6000610911826108e4565b9050919050565b600061092382610906565b9050919050565b61093381610918565b82525050565b600060608201905061094e60008301866108cb565b61095b602083018561092a565b6109686040830184610512565b949350505050565b60008115159050919050565b61098581610970565b811461099057600080fd5b50565b6000815190506109a28161097c565b92915050565b6000602082840312156109be576109bd61057d565b5b60006109cc84828501610993565b91505092915050565b7f496e73756666696369656e7420636f6e74726163742062616c616e6365000000600082015250565b6000610a0b601d83610461565b9150610a16826109d5565b602082019050919050565b60006020820190508181036000830152610a3a816109fe565b905091905056fea26469706673582212205fe56b2a0619cb16b206a81a57cd7b92c45b2b0c7fb4d0763da20ae5e2e073c964736f6c63430008130033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c806370a082311161005b57806370a08231146100dc578063917e9b691461010c57806395d89b4114610128578063d57b2826146101465761007d565b806306fdde031461008257806318160ddd146100a0578063313ce567146100be575b600080fd5b61008a610162565b60405161009791906104e6565b60405180910390f35b6100a861019f565b6040516100b59190610521565b60405180910390f35b6100c66101a9565b6040516100d39190610558565b60405180910390f35b6100f660048036038101906100f191906105e5565b6101b2565b6040516101039190610521565b60405180910390f35b610126600480360381019061012191906107b1565b6101fa565b005b6101306102b9565b60405161013d91906104e6565b60405180910390f35b610160600480360381019061015b9190610848565b6102f6565b005b60606040518060400160405280600e81526020017f5472616e73666572446f6d61696e000000000000000000000000000000000000815250905090565b6000600154905090565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b8473ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b815260040161023793929190610939565b6020604051808303816000875af1158015610256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027a91906109a8565b507f5b494f8e62c9b3ea113ad3af9830e30a412c97a58a1237f83b3a515c94bc5577816040516102aa91906104e6565b60405180910390a15050505050565b60606040518060400160405280600381526020017f4446490000000000000000000000000000000000000000000000000000000000815250905090565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146103b4578147101561036c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036390610a21565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156103b2573d6000803e3d6000fd5b505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516104119190610521565b60405180910390a37f5b494f8e62c9b3ea113ad3af9830e30a412c97a58a1237f83b3a515c94bc55778160405161044891906104e6565b60405180910390a150505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610490578082015181840152602081019050610475565b60008484015250505050565b6000601f19601f8301169050919050565b60006104b882610456565b6104c28185610461565b93506104d2818560208601610472565b6104db8161049c565b840191505092915050565b6000602082019050818103600083015261050081846104ad565b905092915050565b6000819050919050565b61051b81610508565b82525050565b60006020820190506105366000830184610512565b92915050565b600060ff82169050919050565b6105528161053c565b82525050565b600060208201905061056d6000830184610549565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006105b282610587565b9050919050565b6105c2816105a7565b81146105cd57600080fd5b50565b6000813590506105df816105b9565b92915050565b6000602082840312156105fb576105fa61057d565b5b6000610609848285016105d0565b91505092915050565b600061061d82610587565b9050919050565b61062d81610612565b811461063857600080fd5b50565b60008135905061064a81610624565b92915050565b61065981610508565b811461066457600080fd5b50565b60008135905061067681610650565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6106be8261049c565b810181811067ffffffffffffffff821117156106dd576106dc610686565b5b80604052505050565b60006106f0610573565b90506106fc82826106b5565b919050565b600067ffffffffffffffff82111561071c5761071b610686565b5b6107258261049c565b9050602081019050919050565b82818337600083830152505050565b600061075461074f84610701565b6106e6565b9050828152602081018484840111156107705761076f610681565b5b61077b848285610732565b509392505050565b600082601f8301126107985761079761067c565b5b81356107a8848260208601610741565b91505092915050565b600080600080600060a086880312156107cd576107cc61057d565b5b60006107db888289016105d0565b95505060206107ec888289016105d0565b94505060406107fd8882890161063b565b935050606061080e88828901610667565b925050608086013567ffffffffffffffff81111561082f5761082e610582565b5b61083b88828901610783565b9150509295509295909350565b600080600080608085870312156108625761086161057d565b5b6000610870878288016105d0565b94505060206108818782880161063b565b935050604061089287828801610667565b925050606085013567ffffffffffffffff8111156108b3576108b2610582565b5b6108bf87828801610783565b91505092959194509250565b6108d4816105a7565b82525050565b6000819050919050565b60006108ff6108fa6108f584610587565b6108da565b610587565b9050919050565b6000610911826108e4565b9050919050565b600061092382610906565b9050919050565b61093381610918565b82525050565b600060608201905061094e60008301866108cb565b61095b602083018561092a565b6109686040830184610512565b949350505050565b60008115159050919050565b61098581610970565b811461099057600080fd5b50565b6000815190506109a28161097c565b92915050565b6000602082840312156109be576109bd61057d565b5b60006109cc84828501610993565b91505092915050565b7f496e73756666696369656e7420636f6e74726163742062616c616e6365000000600082015250565b6000610a0b601d83610461565b9150610a16826109d5565b602082019050919050565b60006020820190508181036000830152610a3a816109fe565b905091905056fea26469706673582212205fe56b2a0619cb16b206a81a57cd7b92c45b2b0c7fb4d0763da20ae5e2e073c964736f6c63430008130033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/mobile-app/app/screens/AppNavigator/screens/Portfolio/screens/ConvertConfirmationScreen.tsx b/mobile-app/app/screens/AppNavigator/screens/Portfolio/screens/ConvertConfirmationScreen.tsx index b789622eb3..6b9d7ed544 100644 --- a/mobile-app/app/screens/AppNavigator/screens/Portfolio/screens/ConvertConfirmationScreen.tsx +++ b/mobile-app/app/screens/AppNavigator/screens/Portfolio/screens/ConvertConfirmationScreen.tsx @@ -31,6 +31,8 @@ import { TransferDomainToken, transferDomainCrafter, } from "@api/transaction/transfer_domain"; +import { useNetworkContext } from "@waveshq/walletkit-ui"; +import { NetworkName } from "@defichain/jellyfish-network"; import { PortfolioParamList } from "../PortfolioNavigator"; type Props = StackScreenProps; @@ -44,6 +46,7 @@ export function ConvertConfirmationScreen({ route }: Props): JSX.Element { targetToken, originScreen, } = route.params; + const { networkName } = useNetworkContext(); const { address } = useWalletContext(); const addressLabel = useAddressLabel(address); const hasPendingJob = useSelector((state: RootState) => @@ -123,6 +126,7 @@ export function ConvertConfirmationScreen({ route }: Props): JSX.Element { convertDirection, sourceToken, targetToken, + networkName, }, dispatch, () => { @@ -337,11 +341,13 @@ async function constructSignedTransferDomain( convertDirection, sourceToken, targetToken, + networkName, }: { convertDirection: ConvertDirection; sourceToken: TransferDomainToken; targetToken: TransferDomainToken; amount: BigNumber; + networkName: NetworkName; }, dispatch: Dispatch, onBroadcast: () => void, @@ -355,6 +361,7 @@ async function constructSignedTransferDomain( convertDirection, sourceToken, targetToken, + networkName, onBroadcast, () => {}, ), diff --git a/mobile-app/app/screens/AppNavigator/screens/Portfolio/screens/SendConfirmationScreen.tsx b/mobile-app/app/screens/AppNavigator/screens/Portfolio/screens/SendConfirmationScreen.tsx index 26e2c3b0a9..baabfc67d3 100644 --- a/mobile-app/app/screens/AppNavigator/screens/Portfolio/screens/SendConfirmationScreen.tsx +++ b/mobile-app/app/screens/AppNavigator/screens/Portfolio/screens/SendConfirmationScreen.tsx @@ -32,7 +32,7 @@ import { import { useAppDispatch } from "@hooks/useAppDispatch"; import { useAddressLabel } from "@hooks/useAddressLabel"; import { View } from "@components"; -import { ScreenName } from "@screens/enum"; +import { ConvertDirection, ScreenName } from "@screens/enum"; import { ThemedActivityIndicatorV2, ThemedIcon, @@ -44,11 +44,18 @@ import { import { SummaryTitle } from "@components/SummaryTitle"; import { NumberRowV2 } from "@components/NumberRowV2"; import { SubmitButtonGroup } from "@components/SubmitButtonGroup"; +import { transferDomainSigner } from "@api/transaction/transfer_domain"; +import { + getAddressType, + AddressType as JellyfishAddressType, +} from "@waveshq/walletkit-core"; +import { DomainType, useDomainContext } from "@contexts/DomainContext"; import { PortfolioParamList } from "../PortfolioNavigator"; type Props = StackScreenProps; export function SendConfirmationScreen({ route }: Props): JSX.Element { + const { domain } = useDomainContext(); const { address } = useWalletContext(); const addressLabel = useAddressLabel(address); const network = useNetworkContext(); @@ -96,6 +103,7 @@ export function SendConfirmationScreen({ route }: Props): JSX.Element { address: destination, token, amount, + domain, networkName: network.networkName, }, dispatch, @@ -348,54 +356,59 @@ interface SendForm { amount: BigNumber; address: string; token: WalletToken; + domain: DomainType; networkName: NetworkName; } async function send( - { address, token, amount, networkName }: SendForm, + { address, token, amount, domain, networkName }: SendForm, dispatch: Dispatch, onBroadcast: () => void, logger: NativeLoggingProps, ): Promise { try { - const to = DeFiAddress.from(networkName, address).getScript(); - - const signer = async ( - account: WhaleWalletAccount, - ): Promise => { - const script = await account.getScript(); - const builder = account.withTransactionBuilder(); - - let signed: TransactionSegWit; - if (token.symbol === "DFI") { - /* if (amount.gte(token.amount)) signed = await builder.utxo.sendAll(to) - else */ - signed = await builder.utxo.send(amount, to, script); - } else { - signed = await builder.account.accountToAccount( - { - from: script, - to: [ - { - script: to, - balances: [ - { - token: +token.id, - amount, - }, - ], - }, - ], - }, - script, - ); - } - return new CTransactionSegWit(signed); - }; + const jellyfishAddressType = getAddressType(address, networkName); + const isDvmToDvmSend = + domain === DomainType.DVM && + jellyfishAddressType !== JellyfishAddressType.ETH; dispatch( transactionQueue.actions.push({ - sign: signer, + sign: async (account: WhaleWalletAccount) => { + if (isDvmToDvmSend) { + return await dvmToDvmSendSigner( + account, + token, + amount, + address, + networkName, + ); + } else { + const sendDirection = + domain === DomainType.DVM + ? ConvertDirection.dvmToEvm + : ConvertDirection.evmToDvm; + const isEvmToDvm = sendDirection === ConvertDirection.evmToDvm; + const tokenId = token.id === "0_unified" ? "0" : token.id; + const sourceTokenId = isEvmToDvm ? `${tokenId}-EVM` : tokenId; + const targetTokenId = isEvmToDvm ? tokenId : `${tokenId}-EVM`; + const dvmAddress = tokenId ? address : await account.getAddress(); + const evmAddress = isEvmToDvm + ? await account.getEvmAddress() + : address; + + return await transferDomainSigner({ + account, + sourceTokenId, + targetTokenId, + amount, + dvmAddress, + evmAddress, + networkName, + convertDirection: sendDirection, + }); + } + }, title: translate( "screens/SendConfirmationScreen", "Sending {{amount}} {{displaySymbol}} to {{toAddress}}", @@ -431,3 +444,41 @@ async function send( logger.error(e); } } + +async function dvmToDvmSendSigner( + account: WhaleWalletAccount, + token: WalletToken, + amount: BigNumber, + address: string, + networkName: NetworkName, +): Promise { + const to = DeFiAddress.from(networkName, address).getScript(); + const script = await account.getScript(); + const builder = account.withTransactionBuilder(); + + let signed: TransactionSegWit; + if (token.symbol === "DFI") { + /* if (amount.gte(token.amount)) signed = await builder.utxo.sendAll(to) + else */ + signed = await builder.utxo.send(amount, to, script); + } else { + signed = await builder.account.accountToAccount( + { + from: script, + to: [ + { + script: to, + balances: [ + { + token: +token.id, + amount, + }, + ], + }, + ], + }, + script, + ); + } + return new CTransactionSegWit(signed); +} diff --git a/package-lock.json b/package-lock.json index 43de3840f3..02b9219d15 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,7 @@ "buffer": "^6.0.3", "classnames": "^2.3.2", "dayjs": "^1.11.9", + "ethers": "^5.7.1", "expo": "^49.0.7", "expo-asset": "~8.10.1", "expo-barcode-scanner": "~12.5.3", @@ -2725,11 +2726,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" }, - "node_modules/@defichain/jellyfish-transaction-builder/node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" - }, "node_modules/@defichain/jellyfish-transaction-builder/node_modules/ethers": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.7.1.tgz", @@ -3347,6 +3343,11 @@ "scrypt-js": "3.0.1" } }, + "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, "node_modules/@ethersproject/keccak256": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", @@ -10249,9 +10250,9 @@ } }, "node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" }, "node_modules/agent-base": { "version": "6.0.2", @@ -34555,6 +34556,11 @@ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==" }, + "@adraffy/ens-normalize": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.9.2.tgz", + "integrity": "sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg==" + }, "@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", @@ -36212,39 +36218,39 @@ } }, "@defichain/jellyfish-address": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/jellyfish-address/-/jellyfish-address-4.0.0-beta.11.tgz", - "integrity": "sha512-PQzA4+hqvKI8sUCrYkzjOJir83KKS8tpMJs53BwO+Wrh2RA47hs9pBWAYgihNbKesQenYyBe7rKJ3rvInp8MKA==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/jellyfish-address/-/jellyfish-address-4.0.0-rc.1.2.tgz", + "integrity": "sha512-ErcMIsfMQUkdabg2UIqfsRv04pPu3UNKG/0vx4WrYtroDG8VVOv1EWyrBCIuV4O/wM2qFJOn9Pwp3UWDVYqLXA==", "requires": { - "@defichain/jellyfish-crypto": "4.0.0-beta.11", - "@defichain/jellyfish-network": "4.0.0-beta.11", - "@defichain/jellyfish-transaction": "4.0.0-beta.11", + "@defichain/jellyfish-crypto": "4.0.0-rc.1.2", + "@defichain/jellyfish-network": "4.0.0-rc.1.2", + "@defichain/jellyfish-transaction": "4.0.0-rc.1.2", "bech32": "^2.0.0", "bs58": "^4.0.1" } }, "@defichain/jellyfish-api-core": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/jellyfish-api-core/-/jellyfish-api-core-4.0.0-beta.11.tgz", - "integrity": "sha512-WUcy6LmE31ZpbH60TTv75oRrWLplCH5wLffWiVSelCCF2ZXGJ7jv4pebT2jRhmQYnrLy2S6M3KXMeLwNG8X4mw==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/jellyfish-api-core/-/jellyfish-api-core-4.0.0-rc.1.2.tgz", + "integrity": "sha512-GM7iPiWkt8bspPS+RZGokzGwyUJp6Lqq8VmNKPow6OzHqtpVheLmhQwg2oWWQTc0yFOTHbiEXn9NK/k/gQl1Jw==", "requires": { - "@defichain/jellyfish-json": "4.0.0-beta.11" + "@defichain/jellyfish-json": "4.0.0-rc.1.2" } }, "@defichain/jellyfish-api-jsonrpc": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/jellyfish-api-jsonrpc/-/jellyfish-api-jsonrpc-4.0.0-beta.11.tgz", - "integrity": "sha512-nRuuYsUCUGwpZAMkjKL/Dppqfcydi5AtzdT0ndwuh1NvtQYBrIdc7QqpmcysAjR99qqMZUGTScd5Y4oVdxVAsg==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/jellyfish-api-jsonrpc/-/jellyfish-api-jsonrpc-4.0.0-rc.1.2.tgz", + "integrity": "sha512-dZI2tapqoYJGg2VE90cOMkjHZmIAak/uyIZo58eIKX57Nu3Qqu7s/LOQYnFOhRnttdanEujExee2GedzvyKZ2g==", "requires": { - "@defichain/jellyfish-api-core": "4.0.0-beta.11", + "@defichain/jellyfish-api-core": "4.0.0-rc.1.2", "abort-controller": "^3.0.0", "cross-fetch": "^3.1.5" } }, "@defichain/jellyfish-buffer": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/jellyfish-buffer/-/jellyfish-buffer-4.0.0-beta.11.tgz", - "integrity": "sha512-nwcNJOS7WmaJ5FtGRgCXtFv/+dQ+EckdZTF7rAyn8DohTtbNC6oLYImbYr0UWLYGGq/CmDSEW8sxuuVf1V6ZiQ==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/jellyfish-buffer/-/jellyfish-buffer-4.0.0-rc.1.2.tgz", + "integrity": "sha512-Z62pzcG3+/a1pQTYJ4HQlmpnLFJKQNOjZZ8YhbaKn210HxxktYZga1kfu4qsSQp4fOTyxhsl4UaUTRc1XcNtUA==", "requires": { "bignumber.js": "^9.0.2", "bn.js": "^5.2.1", @@ -36252,9 +36258,9 @@ } }, "@defichain/jellyfish-crypto": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/jellyfish-crypto/-/jellyfish-crypto-4.0.0-beta.11.tgz", - "integrity": "sha512-b0DszcL5gmnFve+PrPaH5ibQ00ynIeYYmxa0ZIqPX0Xol3NV4drNhFgyd/YevJihNFCZ6Y0AdqWmFSnjdy4XCQ==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/jellyfish-crypto/-/jellyfish-crypto-4.0.0-rc.1.2.tgz", + "integrity": "sha512-AoahaWw/3RXTXA3TXzwfLnFgIYxDQjL13CDooZJC67vruMN0iQGK/hDDFE0bHm09WOmr77jShqsVz2Tlp05AJQ==", "requires": { "bech32": "^2.0.0", "bip66": "^1.1.5", @@ -36268,9 +36274,9 @@ } }, "@defichain/jellyfish-json": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/jellyfish-json/-/jellyfish-json-4.0.0-beta.11.tgz", - "integrity": "sha512-XXrKAp5774HjOPb6NYnPc3475m4s4NlPRLZ+ivi8+mR+/nnI097OSapx0f4HJ58GLZckHxeO/fO1HqrA41YI4w==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/jellyfish-json/-/jellyfish-json-4.0.0-rc.1.2.tgz", + "integrity": "sha512-tjpj7VSb5n2pwZbXGwuoTeYzrkw13Ejc1FLdMuCK+vw1vl/DsQJbAlqmgKEHCenlXnzzqYku2HpS5ncHrZUXnQ==", "requires": { "@types/lossless-json": "^1.0.1", "bignumber.js": "^9.0.2", @@ -36278,92 +36284,125 @@ } }, "@defichain/jellyfish-network": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/jellyfish-network/-/jellyfish-network-4.0.0-beta.11.tgz", - "integrity": "sha512-oexdZkc6DSRzS1DVNh3br6ySgJa/y8hCfsa/IKXRQ+iwQsJsrnDlcmUNPvN1IHCWP9OiHY6HOpl3XRsRHothQg==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/jellyfish-network/-/jellyfish-network-4.0.0-rc.1.2.tgz", + "integrity": "sha512-DXVfv8wNR9AyKAD6c1kTT1bYEYMU//lyoKVupux4I2WG5LUuMyY6aExPgT41XZ0Bh+Je4KvNAS+U5yjR29zvkQ==", "requires": { "bignumber.js": "^9.0.2" } }, "@defichain/jellyfish-testing": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/jellyfish-testing/-/jellyfish-testing-4.0.0-beta.11.tgz", - "integrity": "sha512-CNZ30CdmoIWgcIi5Ld6kMil3NnXRu4y37dvYF9xwmOila8FpS+6dJAWEQ+9VohcFn9YRgP3kAz4DjYcufkpLhA==", - "requires": { - "@defichain/jellyfish-api-jsonrpc": "4.0.0-beta.11", - "@defichain/jellyfish-crypto": "4.0.0-beta.11", - "@defichain/jellyfish-network": "4.0.0-beta.11", - "@defichain/testcontainers": "4.0.0-beta.11", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/jellyfish-testing/-/jellyfish-testing-4.0.0-rc.1.2.tgz", + "integrity": "sha512-iWGpjZcVBRxcENvLWh7/hG3os4jxtIKuD5Ip3BBy7edPdpIXPb55IkiTnnGHXSCM3kRU//3NH0wsi/J7bMMj9w==", + "requires": { + "@defichain/jellyfish-api-jsonrpc": "4.0.0-rc.1.2", + "@defichain/jellyfish-crypto": "4.0.0-rc.1.2", + "@defichain/jellyfish-network": "4.0.0-rc.1.2", + "@defichain/testcontainers": "4.0.0-rc.1.2", "cross-fetch": "^3.1.5" } }, "@defichain/jellyfish-transaction": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/jellyfish-transaction/-/jellyfish-transaction-4.0.0-beta.11.tgz", - "integrity": "sha512-m+B/C7co7q2Ygr3Eg5KF7DK4gcEI9IvP/nXwzcSGjYUjXqiQ6szedJ7ybvMFRfZRofhBfAguz8KvvQODa7LsNQ==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/jellyfish-transaction/-/jellyfish-transaction-4.0.0-rc.1.2.tgz", + "integrity": "sha512-NA4wr1skMcfP3R0xcvM12RRrbPBtJpKaaI9sPM5kxYF6ZTBg1CEHbaVhgU+MXMaO+kdAuagFNIvjuP4GMgd0mQ==", "requires": { - "@defichain/jellyfish-buffer": "4.0.0-beta.11", - "@defichain/jellyfish-crypto": "4.0.0-beta.11" + "@defichain/jellyfish-buffer": "4.0.0-rc.1.2", + "@defichain/jellyfish-crypto": "4.0.0-rc.1.2" } }, "@defichain/jellyfish-transaction-builder": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/jellyfish-transaction-builder/-/jellyfish-transaction-builder-4.0.0-beta.11.tgz", - "integrity": "sha512-8aK2lRO367ustY8uAPm6pgrhzq4//btXtP8MqBnQuEE92kvBkjXlI8UJ1bSK4su+L3xOPYJFFkwt0QPHKAp0VQ==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/jellyfish-transaction-builder/-/jellyfish-transaction-builder-4.0.0-rc.1.2.tgz", + "integrity": "sha512-7mIMsInAHQi7BWnjNJj6k8jHE0q+KzPNE+F5JQihS48pUnFd6kWiU8VMkzn/9dzW1xxPTlz1wTMmUyIFcZFilA==", "requires": { - "@defichain/jellyfish-crypto": "4.0.0-beta.11", - "@defichain/jellyfish-transaction": "4.0.0-beta.11", - "@defichain/jellyfish-transaction-signature": "4.0.0-beta.11" + "@defichain/jellyfish-crypto": "4.0.0-rc.1.2", + "@defichain/jellyfish-transaction": "4.0.0-rc.1.2", + "@defichain/jellyfish-transaction-signature": "4.0.0-rc.1.2", + "ethers": "^6.7.1" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==" + }, + "@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + }, + "ethers": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.7.1.tgz", + "integrity": "sha512-qX5kxIFMfg1i+epfgb0xF4WM7IqapIIu50pOJ17aebkxxa4BacW5jFrQRmCJpDEg2ZK2oNtR5QjrQ1WDBF29dA==", + "requires": { + "@adraffy/ens-normalize": "1.9.2", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.7.1", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.5.0" + } + }, + "ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "requires": {} + } } }, "@defichain/jellyfish-transaction-signature": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/jellyfish-transaction-signature/-/jellyfish-transaction-signature-4.0.0-beta.11.tgz", - "integrity": "sha512-p/bXAhpyGbFiOXD8tjXniREpAIUBE3NGu3N65foib9EuQk1AkNnQnAxJ6VZogW0J+O4PsN03Gbg50ySSto3SPg==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/jellyfish-transaction-signature/-/jellyfish-transaction-signature-4.0.0-rc.1.2.tgz", + "integrity": "sha512-Cqyz99UClM/nAlz0NkoKU1Fl12OBPYIABHW1Lb4p+TPm03lvtYvOd8VeHhejNY3gKLb7hfonexg8cWnnsXRYIw==", "requires": { - "@defichain/jellyfish-buffer": "4.0.0-beta.11", - "@defichain/jellyfish-crypto": "4.0.0-beta.11", - "@defichain/jellyfish-transaction": "4.0.0-beta.11" + "@defichain/jellyfish-buffer": "4.0.0-rc.1.2", + "@defichain/jellyfish-crypto": "4.0.0-rc.1.2", + "@defichain/jellyfish-transaction": "4.0.0-rc.1.2" } }, "@defichain/jellyfish-wallet": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/jellyfish-wallet/-/jellyfish-wallet-4.0.0-beta.11.tgz", - "integrity": "sha512-wxsvvixbY5nw2t0moyQJ0a454yb7mwMGbjG5kwr02/AarHj2eHpTDXJOYG7cbYM5e/lJ8KhzcWhyLjqlc7K8qg==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/jellyfish-wallet/-/jellyfish-wallet-4.0.0-rc.1.2.tgz", + "integrity": "sha512-FsKGt42spRTp/83mtnVp4RCY1tfLvvED7wZzssX3X0cypfBMKOySgoI2TDEqtn3iR/nVRAFnWaoOpSqhNrjObA==", "requires": { - "@defichain/jellyfish-address": "4.0.0-beta.11", - "@defichain/jellyfish-crypto": "4.0.0-beta.11", - "@defichain/jellyfish-network": "4.0.0-beta.11", - "@defichain/jellyfish-transaction": "4.0.0-beta.11", - "@defichain/jellyfish-transaction-builder": "4.0.0-beta.11", - "@defichain/jellyfish-transaction-signature": "4.0.0-beta.11" + "@defichain/jellyfish-address": "4.0.0-rc.1.2", + "@defichain/jellyfish-crypto": "4.0.0-rc.1.2", + "@defichain/jellyfish-network": "4.0.0-rc.1.2", + "@defichain/jellyfish-transaction": "4.0.0-rc.1.2", + "@defichain/jellyfish-transaction-builder": "4.0.0-rc.1.2", + "@defichain/jellyfish-transaction-signature": "4.0.0-rc.1.2" } }, "@defichain/jellyfish-wallet-encrypted": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/jellyfish-wallet-encrypted/-/jellyfish-wallet-encrypted-4.0.0-beta.11.tgz", - "integrity": "sha512-MLA/a28zGq+IRNd6M1dpecOIOINpHqvkzdj6+b+b+K7DJW8CcB+9FPcTEGkluf8LXall+EslOecZtF47G9K/GQ==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/jellyfish-wallet-encrypted/-/jellyfish-wallet-encrypted-4.0.0-rc.1.2.tgz", + "integrity": "sha512-/QCGAV1lPPmWLcXvIIBxxf8v3lWrt7DRJm5NJLbQp++y8kr6wJLcEnOSM6EIXm3sMC0u80vQcWMgKlI4JJaXXw==", "requires": { - "@defichain/jellyfish-wallet-mnemonic": "4.0.0-beta.11", + "@defichain/jellyfish-wallet-mnemonic": "4.0.0-rc.1.2", "scrypt-js": "^3.0.1" } }, "@defichain/jellyfish-wallet-mnemonic": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/jellyfish-wallet-mnemonic/-/jellyfish-wallet-mnemonic-4.0.0-beta.11.tgz", - "integrity": "sha512-zBSsJv6aTtS+DZLjjsXaX+IAVaoDE4hk7J49pHIbWQSUat23sYnA4kCox4TqcSKMbgB7drXBLY4HBwxeZQX3XA==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/jellyfish-wallet-mnemonic/-/jellyfish-wallet-mnemonic-4.0.0-rc.1.2.tgz", + "integrity": "sha512-D5QY8AKLw9yLN4BdlX+36yk8hAc8lrSIiJPyujJ1qLlbe80wac4PNuRqa3m7tl+8DHOHAeE1IMy5d2yiTYkz3g==", "requires": { - "@defichain/jellyfish-transaction": "4.0.0-beta.11", - "@defichain/jellyfish-wallet": "4.0.0-beta.11", + "@defichain/jellyfish-transaction": "4.0.0-rc.1.2", + "@defichain/jellyfish-wallet": "4.0.0-rc.1.2", "bip32": "^2.0.6", "bip39": "^3.0.4", "create-hmac": "^1.1.7" } }, "@defichain/ocean-api-client": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/ocean-api-client/-/ocean-api-client-4.0.0-beta.11.tgz", - "integrity": "sha512-CR/N2lUfa59IJNdT/PX9Vk9dLO5zFEezmGp2SDdPs4sIfjUl9UQ5VXQyvfW0WUpPkgVC2QILj2KnG31sk/CdAQ==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/ocean-api-client/-/ocean-api-client-4.0.0-rc.1.2.tgz", + "integrity": "sha512-kiZpzHiXTbbx5sW5abuJaNyEMpkkLq3bm6ORhvXLXM2kTFAe5NlE1GvFLVHPXMIA1tPl+tqqx4VVpxp2FKwMJw==", "requires": { "abort-controller": "^3.0.0", "cross-fetch": "^3.1.5", @@ -36371,20 +36410,20 @@ } }, "@defichain/playground-api-client": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/playground-api-client/-/playground-api-client-4.0.0-beta.11.tgz", - "integrity": "sha512-bA2JfCqWca11gzo+moHjiRrd9WRfFSR87rf8WUrWIgtSks/N5A8PgV56iYqVm/KUXQwC6L1thhxpyDgYXS2V2w==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/playground-api-client/-/playground-api-client-4.0.0-rc.1.2.tgz", + "integrity": "sha512-1ph/mRVa5oIT5EAxcXPsOejV/LoXKlB1u6o4X53RvF82FvzDwVhu4/swns2Cq+HCndql3L/UkonUdC8wt2M2xQ==", "requires": { - "@defichain/jellyfish-api-core": "4.0.0-beta.11", - "@defichain/ocean-api-client": "4.0.0-beta.11" + "@defichain/jellyfish-api-core": "4.0.0-rc.1.2", + "@defichain/ocean-api-client": "4.0.0-rc.1.2" } }, "@defichain/testcontainers": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/testcontainers/-/testcontainers-4.0.0-beta.11.tgz", - "integrity": "sha512-XjdlF5GxTcIe/wTjZiFuEPwAVm7Q1hcQVRPC9RcE0qY4xqXy2yay+C1CUTgzRZPTHIx39Cl4prDVskm8fkzNZQ==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/testcontainers/-/testcontainers-4.0.0-rc.1.2.tgz", + "integrity": "sha512-ywyb0BrY7kCvg2xdt2HyTDrLuYubd8jPq4VPsCsHcu5UXuszXolfn/dN2WShM0lxZ6uouBr48E8uTHUUoj9o7Q==", "requires": { - "@defichain/jellyfish-network": "4.0.0-beta.11", + "@defichain/jellyfish-network": "4.0.0-rc.1.2", "cross-fetch": "^3.1.5", "dockerode": "^3.3.5", "tar-fs": "^2.1.1", @@ -36393,25 +36432,25 @@ } }, "@defichain/whale-api-client": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/whale-api-client/-/whale-api-client-4.0.0-beta.11.tgz", - "integrity": "sha512-0pIQ9TdzfhvSYAv1OU+ffTHdSj1q6migLH6n5OtW5Dkqmg5gIt+ORu9+oX1F3AuotV47wnf64SiLQFdbXECq/g==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/whale-api-client/-/whale-api-client-4.0.0-rc.1.2.tgz", + "integrity": "sha512-ecdELKLdt+BAJt44P55YEJkymNdHMxQIyhmLM768FI8bKVVLgdWNZAywcLVwPQWs1smSAA42wk+5RKT0cv9k0Q==", "requires": { - "@defichain/jellyfish-api-core": "4.0.0-beta.11", - "@defichain/jellyfish-api-jsonrpc": "4.0.0-beta.11", + "@defichain/jellyfish-api-core": "4.0.0-rc.1.2", + "@defichain/jellyfish-api-jsonrpc": "4.0.0-rc.1.2", "abort-controller": "^3.0.0", "cross-fetch": "^3.1.5", "url-search-params-polyfill": "8.1.1" } }, "@defichain/whale-api-wallet": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@defichain/whale-api-wallet/-/whale-api-wallet-4.0.0-beta.11.tgz", - "integrity": "sha512-pK2sHE2dmTrlMROT8O60aKKPDWM3C0X/usdJaltO6SPORx1uaBUnWa79/fuMO9s3TpzGLn9GmdE11iBqQb8ykA==", + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/@defichain/whale-api-wallet/-/whale-api-wallet-4.0.0-rc.1.2.tgz", + "integrity": "sha512-h2M2etOrZ2OdL2eCP68wieBA/rHEjKokX0Y1Ke4Z5gv5Y7o8KR/TO04y/clLx3uedlHM2DhnD1fQZsCXJBx7MQ==", "requires": { - "@defichain/jellyfish-transaction-builder": "4.0.0-beta.11", - "@defichain/jellyfish-wallet": "4.0.0-beta.11", - "@defichain/whale-api-client": "4.0.0-beta.11" + "@defichain/jellyfish-transaction-builder": "4.0.0-rc.1.2", + "@defichain/jellyfish-wallet": "4.0.0-rc.1.2", + "@defichain/whale-api-client": "4.0.0-rc.1.2" } }, "@egjs/hammerjs": { @@ -36512,9 +36551,9 @@ } }, "@eslint/js": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", - "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==" + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==" }, "@ethersproject/abi": { "version": "5.7.0", @@ -36683,6 +36722,13 @@ "@ethersproject/transactions": "^5.7.0", "aes-js": "3.0.0", "scrypt-js": "3.0.1" + }, + "dependencies": { + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + } } }, "@ethersproject/keccak256": { @@ -38005,9 +38051,9 @@ } }, "@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -39080,14 +39126,14 @@ } }, "@next/env": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.19.tgz", - "integrity": "sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==" + "version": "13.5.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.3.tgz", + "integrity": "sha512-X4te86vsbjsB7iO4usY9jLPtZ827Mbx+WcwNBGUOIuswuTAKQtzsuoxc/6KLxCMvogKG795MhrR1LDhYgDvasg==" }, "@next/eslint-plugin-next": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.19.tgz", - "integrity": "sha512-N/O+zGb6wZQdwu6atMZHbR7T9Np5SUFUjZqCbj0sXm+MwQO35M8TazVB4otm87GkXYs2l6OPwARd3/PUWhZBVQ==", + "version": "13.5.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.3.tgz", + "integrity": "sha512-lbZOoEjzSuTtpk9UgV9rOmxYw+PsSfNR+00mZcInqooiDMZ1u+RqT1YQYLsEZPW1kumZoQe5+exkCBtZ2xn0uw==", "requires": { "glob": "7.1.7" }, @@ -39108,57 +39154,57 @@ } }, "@next/swc-darwin-arm64": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.19.tgz", - "integrity": "sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==", + "version": "13.5.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.3.tgz", + "integrity": "sha512-6hiYNJxJmyYvvKGrVThzo4nTcqvqUTA/JvKim7Auaj33NexDqSNwN5YrrQu+QhZJCIpv2tULSHt+lf+rUflLSw==", "optional": true }, "@next/swc-darwin-x64": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz", - "integrity": "sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==", + "version": "13.5.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.3.tgz", + "integrity": "sha512-UpBKxu2ob9scbpJyEq/xPgpdrgBgN3aLYlxyGqlYX5/KnwpJpFuIHU2lx8upQQ7L+MEmz+fA1XSgesoK92ppwQ==", "optional": true }, "@next/swc-linux-arm64-gnu": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz", - "integrity": "sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==", + "version": "13.5.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.3.tgz", + "integrity": "sha512-5AzM7Yx1Ky+oLY6pHs7tjONTF22JirDPd5Jw/3/NazJ73uGB05NqhGhB4SbeCchg7SlVYVBeRMrMSZwJwq/xoA==", "optional": true }, "@next/swc-linux-arm64-musl": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz", - "integrity": "sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==", + "version": "13.5.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.3.tgz", + "integrity": "sha512-A/C1shbyUhj7wRtokmn73eBksjTM7fFQoY2v/0rTM5wehpkjQRLOXI8WJsag2uLhnZ4ii5OzR1rFPwoD9cvOgA==", "optional": true }, "@next/swc-linux-x64-gnu": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.19.tgz", - "integrity": "sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==", + "version": "13.5.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.3.tgz", + "integrity": "sha512-FubPuw/Boz8tKkk+5eOuDHOpk36F80rbgxlx4+xty/U71e3wZZxVYHfZXmf0IRToBn1Crb8WvLM9OYj/Ur815g==", "optional": true }, "@next/swc-linux-x64-musl": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.19.tgz", - "integrity": "sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==", + "version": "13.5.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.3.tgz", + "integrity": "sha512-DPw8nFuM1uEpbX47tM3wiXIR0Qa+atSzs9Q3peY1urkhofx44o7E1svnq+a5Q0r8lAcssLrwiM+OyJJgV/oj7g==", "optional": true }, "@next/swc-win32-arm64-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz", - "integrity": "sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==", + "version": "13.5.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.3.tgz", + "integrity": "sha512-zBPSP8cHL51Gub/YV8UUePW7AVGukp2D8JU93IHbVDu2qmhFAn9LWXiOOLKplZQKxnIPUkJTQAJDCWBWU4UWUA==", "optional": true }, "@next/swc-win32-ia32-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz", - "integrity": "sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==", + "version": "13.5.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.3.tgz", + "integrity": "sha512-ONcL/lYyGUj4W37D4I2I450SZtSenmFAvapkJQNIJhrPMhzDU/AdfLkW98NvH1D2+7FXwe7yclf3+B7v28uzBQ==", "optional": true }, "@next/swc-win32-x64-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz", - "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==", + "version": "13.5.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.3.tgz", + "integrity": "sha512-2Vz2tYWaLqJvLcWbbTlJ5k9AN6JD7a5CN2pAeIzpbecK8ZF/yobA39cXtv6e+Z8c5UJuVOmaTldEAIxvsIux/Q==", "optional": true }, "@noble/hashes": { @@ -39166,6 +39212,11 @@ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==" }, + "@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==" + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -40557,9 +40608,9 @@ } }, "@reduxjs/toolkit": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz", - "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==", + "version": "1.9.6", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.6.tgz", + "integrity": "sha512-Gc4ikl90ORF4viIdAkY06JNUnODjKfGxZRwATM30EdHq8hLSVoSrwXne5dd739yenP5bJxAX7tLuOWK5RPGtrw==", "requires": { "immer": "^9.0.21", "redux": "^4.2.1", @@ -40576,9 +40627,9 @@ } }, "@rushstack/eslint-patch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz", - "integrity": "sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.4.0.tgz", + "integrity": "sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==" }, "@segment/loosely-validate-event": { "version": "2.0.0", @@ -40655,9 +40706,9 @@ } }, "@swc/helpers": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", - "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", + "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", "requires": { "tslib": "^2.4.0" } @@ -40671,16 +40722,16 @@ } }, "@tanstack/query-core": { - "version": "5.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.0.0-beta.20.tgz", - "integrity": "sha512-KTI6b4DLXq39n/VNLvWqxM0K/bmCyL5SvOfPGZ1cZGOvVfZxpo/81ZF9cuRDyPjInmzz8d8jUZOHZVJDKSDcvQ==" + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.0.0-rc.1.tgz", + "integrity": "sha512-6jzPCwvEHS+Y3QCildpOlIrqJXXJ+v2EvbtCnbKUi6FpOrrfoSPacVB3nr0cjSBG/rCXnTB0aaevx9T8iT9CrQ==" }, "@tanstack/react-query": { - "version": "5.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.0.0-beta.20.tgz", - "integrity": "sha512-L5YP1zwEMBwZJ/oCnFXLnb6S60srU7Oyj/oM5TVLcC/efdKpcdToMZTHA9Vjq3oFA9ysxFgrskkideIMa3fB4A==", + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.0.0-rc.1.tgz", + "integrity": "sha512-hFz2j/pp+faqwaBbp0KV8kgn01GfErfA1BtcwHVE/E+GJINU2ZOAiVJ43LR05JCWnIu4b9pAnOBMHv55GshMZQ==", "requires": { - "@tanstack/query-core": "5.0.0-beta.20", + "@tanstack/query-core": "5.0.0-rc.1", "client-only": "0.0.1" } }, @@ -40826,9 +40877,9 @@ "devOptional": true }, "@types/archiver": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.3.2.tgz", - "integrity": "sha512-IctHreBuWE5dvBDz/0WeKtyVKVRs4h75IblxOACL92wU66v+HGAfEYAOyXkOFphvRJMhuXdI9huDXpX0FC6lCw==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.3.3.tgz", + "integrity": "sha512-0ABdVcXL6jOwNGY+hjWPqrxUvKelBEwNLcuv/SV2vZ4YCH8w9NttFCt+/QqI5zgMX+iX/XqVy89/r7EmLJmMpQ==", "requires": { "@types/readdir-glob": "*" } @@ -40888,18 +40939,18 @@ } }, "@types/docker-modem": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.3.tgz", - "integrity": "sha512-i1A2Etnav7uHizZ87vUf4EqwJehY3JOcTfBS0pGBlO+HQ0jg2lUMCaJRg9VQM8ldZkpYdIfsenxcTOCpwxPXEg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.4.tgz", + "integrity": "sha512-INK4TOrJ9hbgaSqHA1HaEOCcYVftJRH0v03gCg6R57JGKgltkDvdFYBtoN4lHrJ3h8aF1upvEPN2eWVLIvKStQ==", "requires": { "@types/node": "*", "@types/ssh2": "*" } }, "@types/dockerode": { - "version": "3.3.19", - "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.19.tgz", - "integrity": "sha512-7CC5yIpQi+bHXwDK43b/deYXteP3Lem9gdocVVHJPSRJJLMfbiOchQV3rDmAPkMw+n3GIVj7m1six3JW+VcwwA==", + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.20.tgz", + "integrity": "sha512-Q+1e3z6SPWXR/Sk+WIyJFVsSDg78S7MDaGcwAh1WKlveO1tVO8TF1rOzJir5GLnqzEdUbclFKlw/4rhwESxwPw==", "requires": { "@types/docker-modem": "*", "@types/node": "*" @@ -41081,9 +41132,9 @@ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" }, "@types/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@types/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A==" + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@types/nprogress/-/nprogress-0.2.1.tgz", + "integrity": "sha512-TYuyVnp+nOnimgdOydDIDYIxv2kSeuJZw4tF0p/KG7hpzcMF1WkHaREwM8O4blqfT1F7rq0nht6Ko2KVUfWzBA==" }, "@types/parse-json": { "version": "4.0.0", @@ -41107,9 +41158,9 @@ "dev": true }, "@types/react": { - "version": "18.2.21", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.21.tgz", - "integrity": "sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==", + "version": "18.2.22", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.22.tgz", + "integrity": "sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -41192,24 +41243,24 @@ "dev": true }, "@types/ssh2": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.11.13.tgz", - "integrity": "sha512-08WbG68HvQ2YVi74n2iSUnYHYpUdFc/s2IsI0BHBdJwaqYJpWlVv9elL0tYShTv60yr0ObdxJR5NrCRiGJ/0CQ==", + "version": "1.11.14", + "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.11.14.tgz", + "integrity": "sha512-O/U38mvV4jVVrdtZz8KpmitkmeD/PUDeDNNueQhm34166dmaqb1iZ3sfarSxBArM2/iX4PZVJY3EOta0Zks9hw==", "requires": { "@types/node": "^18.11.18" }, "dependencies": { "@types/node": { - "version": "18.17.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.14.tgz", - "integrity": "sha512-ZE/5aB73CyGqgQULkLG87N9GnyGe5TcQjv34pwS8tfBs1IkCh0ASM69mydb2znqd6v0eX+9Ytvk6oQRqu8T1Vw==" + "version": "18.18.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.0.tgz", + "integrity": "sha512-3xA4X31gHT1F1l38ATDIL9GpRLdwVhnEFC8Uikv5ZLlXATwrCYyPq7ZWHxzxc3J/30SUiwiYT+bQe0/XvKlWbw==" } } }, "@types/ssh2-streams": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@types/ssh2-streams/-/ssh2-streams-0.1.9.tgz", - "integrity": "sha512-I2J9jKqfmvXLR5GomDiCoHrEJ58hAOmFrekfFqmCFd+A6gaEStvWnPykoWUwld1PNg4G5ag1LwdA+Lz1doRJqg==", + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/@types/ssh2-streams/-/ssh2-streams-0.1.10.tgz", + "integrity": "sha512-r3HYPL0kPxRwk7Nk1P4JxaWPyJ2Mfnfm5efuK0vYgYZu16RerZUTyun6Yqu5KEfc3AR7BvTL1x+nzf7+kbKftQ==", "requires": { "@types/node": "*" } @@ -41220,9 +41271,9 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, "@types/tar-fs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/tar-fs/-/tar-fs-2.0.1.tgz", - "integrity": "sha512-qlsQyIY9sN7p221xHuXKNoMfUenOcvEBN4zI8dGsYbYCqHtTarXOEXSIgUnK+GcR0fZDse6pAIc5pIrCh9NefQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/tar-fs/-/tar-fs-2.0.2.tgz", + "integrity": "sha512-XuZRAvdo7FbDfgQCNkc8NOdSae5XtG+of2mTSgJ85G4OG0miN4E8BTGT+JBTLO87RQ7iCwsIDCqCsHnf2IaSXA==", "peer": true, "requires": { "@types/node": "*", @@ -41230,9 +41281,9 @@ } }, "@types/tar-stream": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@types/tar-stream/-/tar-stream-2.2.2.tgz", - "integrity": "sha512-1AX+Yt3icFuU6kxwmPakaiGrJUwG44MpuiqPg4dSolRFk6jmvs4b3IbUol9wKDLIgU76gevn3EwE8y/DkSJCZQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/tar-stream/-/tar-stream-3.1.0.tgz", + "integrity": "sha512-U05c7l6K5VdO1ZV+j3E0NJOX1hfJB497M1+QT2rXx2QqyMbEQJqBw3Utk9eUVnWPyLLqYKt5Ja1kPV1ejm6cZw==", "peer": true, "requires": { "@types/node": "*" @@ -41405,66 +41456,59 @@ } }, "@waveshq/standard-defichain-jellyfishsdk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@waveshq/standard-defichain-jellyfishsdk/-/standard-defichain-jellyfishsdk-2.4.1.tgz", - "integrity": "sha512-jkxH0VElx9e0ECt48My/p5dMNwbfW2kdyoYs6M480mRoeBVH9g+6eaWJA5PBPjhm6Eg6fUesAJxZ0HIVlY0o3A==", - "requires": { - "@defichain/jellyfish-address": "4.0.0-beta.11", - "@defichain/jellyfish-api-core": "4.0.0-beta.11", - "@defichain/jellyfish-network": "4.0.0-beta.11", - "@defichain/jellyfish-testing": "4.0.0-beta.11", - "@defichain/jellyfish-transaction": "4.0.0-beta.11", - "@defichain/jellyfish-transaction-builder": "4.0.0-beta.11", - "@defichain/jellyfish-wallet": "4.0.0-beta.11", - "@defichain/jellyfish-wallet-encrypted": "4.0.0-beta.11", - "@defichain/jellyfish-wallet-mnemonic": "4.0.0-beta.11", - "@defichain/playground-api-client": "4.0.0-beta.11", - "@defichain/testcontainers": "4.0.0-beta.11", - "@defichain/whale-api-client": "4.0.0-beta.11", - "@defichain/whale-api-wallet": "4.0.0-beta.11", - "defichain": "4.0.0-beta.11" + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/@waveshq/standard-defichain-jellyfishsdk/-/standard-defichain-jellyfishsdk-2.11.3.tgz", + "integrity": "sha512-miD1adVBTft4aFQnKcOXVpu5kZl+MksZh144UgCLRM9xaSAWWBj1iK/me+Dwro2lSobIqM6i8DFrRbwGzbxjlQ==", + "requires": { + "@defichain/jellyfish-address": "4.0.0-rc.1.2", + "@defichain/jellyfish-api-core": "4.0.0-rc.1.2", + "@defichain/jellyfish-network": "4.0.0-rc.1.2", + "@defichain/jellyfish-testing": "4.0.0-rc.1.2", + "@defichain/jellyfish-transaction": "4.0.0-rc.1.2", + "@defichain/jellyfish-transaction-builder": "4.0.0-rc.1.2", + "@defichain/jellyfish-wallet": "4.0.0-rc.1.2", + "@defichain/jellyfish-wallet-encrypted": "4.0.0-rc.1.2", + "@defichain/jellyfish-wallet-mnemonic": "4.0.0-rc.1.2", + "@defichain/playground-api-client": "4.0.0-rc.1.2", + "@defichain/testcontainers": "4.0.0-rc.1.2", + "@defichain/whale-api-client": "4.0.0-rc.1.2", + "@defichain/whale-api-wallet": "4.0.0-rc.1.2", + "defichain": "4.0.0-rc.1.2" } }, "@waveshq/standard-web": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@waveshq/standard-web/-/standard-web-2.4.1.tgz", - "integrity": "sha512-lxI78iJR6MauEVMii3S7nXquTj9VfRu8E3iiZ4RZQ6CIysKx4RgrNSt2T8mntnOcPPeSCEEyE2l5THDR76oIXg==", + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/@waveshq/standard-web/-/standard-web-2.11.3.tgz", + "integrity": "sha512-M3IzfeSeSeJCjrw8oZO/YOMoTp8YKgqwj3YZgHmRQ4L4zjhX9msyWTvsdJN5PRyQAu4moVcmlQbqCpkEzQUUxQ==", "requires": { "@netlify/ipx": "^1.4.4", - "@reduxjs/toolkit": "^1.9.5", - "@tanstack/react-query": "^5.0.0-beta.20", - "@types/react": "18.2.21", + "@reduxjs/toolkit": "^1.9.6", + "@tanstack/react-query": "^5.0.0-rc.1", + "@types/react": "18.2.22", "@types/react-dom": "18.2.7", - "follow-redirects": "^1.15.2", - "next": "13.4.19", - "next-sitemap": "^4.2.2", + "follow-redirects": "^1.15.3", + "next": "13.5.3", + "next-sitemap": "^4.2.3", "nextjs-progressbar": "^0.0.16", "react": "18.2.0", "react-dom": "18.2.0", - "react-icons": "^4.10.1", + "react-icons": "^4.11.0", "react-redux": "^8.1.2", "react-responsive": "^9.0.2", - "typescript": "4.9.5" - }, - "dependencies": { - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" - } + "typescript": "*" } }, "@waveshq/standard-web-linter": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@waveshq/standard-web-linter/-/standard-web-linter-2.4.1.tgz", - "integrity": "sha512-zek+E/euKEJK/+tavPdASaiFMx/5xi/ak7ygMnXrGexRTH3vCB/TmDtvrGiChazvW70+TpNQjRKT/XBJM/2tGQ==", + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/@waveshq/standard-web-linter/-/standard-web-linter-2.11.3.tgz", + "integrity": "sha512-+u+zQQpvQ8efX5ZkFsqBolKyjlFJpPat1c/w9aNXHLstgoeK7x4JiFKJw5c58d/X+B+sPJr33IjJKK3tn0la4A==", "requires": { - "eslint": "^8.48.0", + "eslint": "^8.50.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb-typescript": "^17.1.0", - "eslint-config-next": "13.4.19", + "eslint-config-next": "13.5.3", "eslint-config-prettier": "^9.0.0", - "eslint-plugin-cypress": "^2.14.0", + "eslint-plugin-cypress": "^2.15.1", "eslint-plugin-import": "^2.28.1", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-node": "^11.1.0", @@ -41474,37 +41518,30 @@ "eslint-plugin-simple-import-sort": "^10.0.0", "husky": "^8.0.3", "lint-staged": "^14.0.1", - "next": "13.4.19", + "next": "13.5.3", "prettier": "^3.0.3", - "typescript": "4.9.5" - }, - "dependencies": { - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" - } + "typescript": "^5.2.2" } }, "@waveshq/walletkit-core": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@waveshq/walletkit-core/-/walletkit-core-1.3.4.tgz", - "integrity": "sha512-2TdVgVR7TPkqwh82dFddfoCmHTB7Bo2Xjcbri4b1VR+Q/P0+JYZgBTtEXq4kNRk8kM1axg6RfwoMigppAixvcw==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@waveshq/walletkit-core/-/walletkit-core-1.3.5.tgz", + "integrity": "sha512-n8CX/+FBOl8v/8Xqdi3phlx0teleRxjwo1kmXPnT7SmGC0ASRa2l46YQRMxBrqBS4mXRSTyQU9ufnpzY31UjfQ==", "requires": { "bignumber.js": "^9.1.1", "ethers": "^5.7.2" } }, "@waveshq/walletkit-ui": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@waveshq/walletkit-ui/-/walletkit-ui-1.3.4.tgz", - "integrity": "sha512-93y0ERBlEqR+KSWXW+WanZSrUsbhF+YN/lr976MCwIE/eklBcp6rRKAfJz5tIHYtsLd0WTmJJA+393H4UjBGgw==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@waveshq/walletkit-ui/-/walletkit-ui-1.3.5.tgz", + "integrity": "sha512-0EtBk44BTZA4MuGcmvr04o2TDskoYvxOhWv1rc701soD7jfbdfjbDup9vxEZF0OgXNdmW6A5ckTbg1qNS4geDg==", "requires": { "@stickyjs/jest": "^1.3.2", - "@waveshq/standard-defichain-jellyfishsdk": "^2.4.1", - "@waveshq/standard-web": "^2.4.1", - "@waveshq/standard-web-linter": "^2.4.1", - "@waveshq/walletkit-core": "1.3.4", + "@waveshq/standard-defichain-jellyfishsdk": "^2.11.2", + "@waveshq/standard-web": "^2.11.2", + "@waveshq/standard-web-linter": "^2.11.2", + "@waveshq/walletkit-core": "1.3.5", "bignumber.js": "^9.1.1", "dayjs": "^1.11.9", "immer": "^9.0.21", @@ -41790,9 +41827,9 @@ "dev": true }, "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" }, "agent-base": { "version": "6.0.2", @@ -43370,9 +43407,9 @@ } }, "citty": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.3.tgz", - "integrity": "sha512-tb6zTEb2BDSrzFedqFYFUKUuKNaxVJWCm7o02K4kADGkBDyyiz7D40rDMpguczdZyAN3aetd5fhpB01HkreNyg==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.4.tgz", + "integrity": "sha512-Q3bK1huLxzQrvj7hImJ7Z1vKYJRPQCDnd0EjXfHMidcjecGOMuLrmuQmtWmFkuKLcMThlGh1yCKG8IEc6VeNXQ==", "requires": { "consola": "^3.2.3" } @@ -44847,9 +44884,9 @@ "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" }, "defichain": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/defichain/-/defichain-4.0.0-beta.11.tgz", - "integrity": "sha512-3IUwzuOoPaptOiUQqzeaBNZtKRpVvBAqhljwHpNwK1Ple52p+qTauk6Wb+QjPMv/0BT/EjzWQ/NxWIEyEWU0Yg==" + "version": "4.0.0-rc.1.2", + "resolved": "https://registry.npmjs.org/defichain/-/defichain-4.0.0-rc.1.2.tgz", + "integrity": "sha512-GKZ14ci0X+kJyYqU+GXS3Bwcc9GJq8yrDR5WXbwKIKKbUJbkntQIWAUGNOrDUqjOkhHIcbdx/9JKOqvash5r5g==" }, "define-lazy-prop": { "version": "2.0.0", @@ -45543,15 +45580,15 @@ } }, "eslint": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", - "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.48.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint/js": "8.50.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.12.4", @@ -46004,18 +46041,18 @@ } }, "eslint-config-next": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.19.tgz", - "integrity": "sha512-WE8367sqMnjhWHvR5OivmfwENRQ1ixfNE9hZwQqNCsd+iM3KnuMc1V8Pt6ytgjxjf23D+xbesADv9x3xaKfT3g==", + "version": "13.5.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.3.tgz", + "integrity": "sha512-VN2qbCpq2DMWgs7SVF8KTmc8bVaWz3s4nmcFqRLs7PNBt5AXejOhJuZ4zg2sCEHOvz5RvqdwLeI++NSCV6qHVg==", "requires": { - "@next/eslint-plugin-next": "13.4.19", - "@rushstack/eslint-patch": "^1.1.3", + "@next/eslint-plugin-next": "13.5.3", + "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" } }, @@ -46367,9 +46404,9 @@ } }, "eslint-import-resolver-typescript": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz", - "integrity": "sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "requires": { "debug": "^4.3.4", "enhanced-resolve": "^5.12.0", @@ -46408,9 +46445,9 @@ } }, "eslint-plugin-cypress": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.14.0.tgz", - "integrity": "sha512-eW6tv7iIg7xujleAJX4Ujm649Bf5jweqa4ObPEIuueYRyLZt7qXGWhCY/n4bfeFW/j6nQZwbIBHKZt6EKcL/cg==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.1.tgz", + "integrity": "sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w==", "requires": { "globals": "^13.20.0" }, @@ -47746,9 +47783,9 @@ "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==" }, "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==" }, "fontfaceobserver": { "version": "2.3.0", @@ -48070,9 +48107,9 @@ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" }, "get-port-please": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.0.2.tgz", - "integrity": "sha512-c14cAITf0E+uqdxGALvyYHwOL7UsnWcv3oDtgDAZksiVSGN87xlWVUWGZcmWQU3cICdaOxT+6LdQzUfK2ei1SA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.1.tgz", + "integrity": "sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==" }, "get-stream": { "version": "5.2.0", @@ -48092,9 +48129,9 @@ } }, "get-tsconfig": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", - "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", "requires": { "resolve-pkg-maps": "^1.0.0" } @@ -51127,9 +51164,9 @@ "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==" }, "jiti": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.3.tgz", - "integrity": "sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==" + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", + "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==" }, "joi": { "version": "17.9.2", @@ -51441,9 +51478,9 @@ } }, "keccak": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz", - "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", "requires": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -51806,23 +51843,24 @@ } }, "listhen": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.4.4.tgz", - "integrity": "sha512-xoZWbfziou7xPWj9nlFXeroFTJZVIyJ6wKrLea2jxvWgMkcz/vLMoZACYHLRmcLGi5hZkcDF48tmkmv1Y6Y42Q==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.5.5.tgz", + "integrity": "sha512-LXe8Xlyh3gnxdv4tSjTjscD1vpr/2PRpzq8YIaMJgyKzRG8wdISlWVWnGThJfHnlJ6hmLt2wq1yeeix0TEbuoA==", "requires": { "@parcel/watcher": "^2.3.0", "@parcel/watcher-wasm": "2.3.0", - "citty": "^0.1.3", + "citty": "^0.1.4", "clipboardy": "^3.0.0", "consola": "^3.2.3", "defu": "^6.1.2", - "get-port-please": "^3.0.2", + "get-port-please": "^3.1.1", "h3": "^1.8.1", "http-shutdown": "^1.2.2", - "jiti": "^1.19.3", - "mlly": "^1.4.1", + "jiti": "^1.20.0", + "mlly": "^1.4.2", "node-forge": "^1.3.1", "pathe": "^1.1.1", + "std-env": "^3.4.3", "ufo": "^1.3.0", "untun": "^0.1.2", "uqr": "^0.1.2" @@ -53366,9 +53404,9 @@ } }, "nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" }, "nanoid": { "version": "3.3.6", @@ -53407,21 +53445,21 @@ "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==" }, "next": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/next/-/next-13.4.19.tgz", - "integrity": "sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==", - "requires": { - "@next/env": "13.4.19", - "@next/swc-darwin-arm64": "13.4.19", - "@next/swc-darwin-x64": "13.4.19", - "@next/swc-linux-arm64-gnu": "13.4.19", - "@next/swc-linux-arm64-musl": "13.4.19", - "@next/swc-linux-x64-gnu": "13.4.19", - "@next/swc-linux-x64-musl": "13.4.19", - "@next/swc-win32-arm64-msvc": "13.4.19", - "@next/swc-win32-ia32-msvc": "13.4.19", - "@next/swc-win32-x64-msvc": "13.4.19", - "@swc/helpers": "0.5.1", + "version": "13.5.3", + "resolved": "https://registry.npmjs.org/next/-/next-13.5.3.tgz", + "integrity": "sha512-4Nt4HRLYDW/yRpJ/QR2t1v63UOMS55A38dnWv3UDOWGezuY0ZyFO1ABNbD7mulVzs9qVhgy2+ppjdsANpKP1mg==", + "requires": { + "@next/env": "13.5.3", + "@next/swc-darwin-arm64": "13.5.3", + "@next/swc-darwin-x64": "13.5.3", + "@next/swc-linux-arm64-gnu": "13.5.3", + "@next/swc-linux-arm64-musl": "13.5.3", + "@next/swc-linux-x64-gnu": "13.5.3", + "@next/swc-linux-x64-musl": "13.5.3", + "@next/swc-win32-arm64-msvc": "13.5.3", + "@next/swc-win32-ia32-msvc": "13.5.3", + "@next/swc-win32-x64-msvc": "13.5.3", + "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", "postcss": "8.4.14", @@ -53443,9 +53481,9 @@ } }, "next-sitemap": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/next-sitemap/-/next-sitemap-4.2.2.tgz", - "integrity": "sha512-cz5PyFibUNSJSXOY5mllq5TW0OH6SGG+8GJ9fR9pl1Thu4rvkDye+0N0790h+9kQihDStuVw2xfwC3qihDkflA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/next-sitemap/-/next-sitemap-4.2.3.tgz", + "integrity": "sha512-vjdCxeDuWDzldhCnyFCQipw5bfpl4HmZA7uoo3GAaYGjGgfL4Cxb1CiztPuWGmS+auYs7/8OekRS8C2cjdAsjQ==", "requires": { "@corex/deepmerge": "^4.0.43", "@next/env": "^13.4.3", @@ -55244,9 +55282,9 @@ "requires": {} }, "react-icons": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.10.1.tgz", - "integrity": "sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.11.0.tgz", + "integrity": "sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA==", "requires": {} }, "react-is": { @@ -56560,9 +56598,9 @@ "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" }, "sharp": { - "version": "0.32.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.5.tgz", - "integrity": "sha512-0dap3iysgDkNaPOaOL4X/0akdu0ma62GcdC2NBQ+93eqpePdDdr2/LM0sFdDSMmN7yS+odyZtPsb7tx/cYBKnQ==", + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", "requires": { "color": "^4.2.3", "detect-libc": "^2.0.2", @@ -57459,6 +57497,11 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" }, + "std-env": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", + "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==" + }, "stop-iteration-iterator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", @@ -58818,9 +58861,9 @@ "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" }, "typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==" + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==" }, "ua-parser-js": { "version": "1.0.35", @@ -59188,9 +59231,9 @@ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" }, "v8-compile-cache": { "version": "2.4.0", diff --git a/package.json b/package.json index ba68c47e5e..fbadeb6730 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "buffer": "^6.0.3", "classnames": "^2.3.2", "dayjs": "^1.11.9", + "ethers": "^5.7.1", "expo": "^49.0.7", "expo-asset": "~8.10.1", "expo-barcode-scanner": "~12.5.3",