diff --git a/src/screens/ApproveTransaction.tsx b/src/screens/ApproveTransaction.tsx index 61ab455..9ea37f1 100644 --- a/src/screens/ApproveTransaction.tsx +++ b/src/screens/ApproveTransaction.tsx @@ -1,15 +1,16 @@ -import React, { useCallback, useEffect, useState } from 'react'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { Image, ScrollView, View } from 'react-native'; import { Button, Text, TextInput } from 'react-native-paper'; import { SvgUri } from 'react-native-svg'; import Config from 'react-native-config'; +import { MsgCreateValidator } from 'cosmjs-types/cosmos/staking/v1beta1/tx'; import { NativeStackNavigationProp, NativeStackScreenProps, } from '@react-navigation/native-stack'; import { useNavigation } from '@react-navigation/native'; -import { DirectSecp256k1Wallet } from '@cosmjs/proto-signing'; +import { DirectSecp256k1Wallet, EncodeObject } from '@cosmjs/proto-signing'; import { LaconicClient } from '@cerc-io/registry-sdk'; import { GasPrice, calculateFee } from '@cosmjs/stargate'; import { formatJsonRpcError } from '@json-rpc-tools/utils'; @@ -42,7 +43,6 @@ const ApproveTransaction = ({ route }: ApproveTransactionProps) => { const requestName = requestSession.peer.metadata.name; const requestIcon = requestSession.peer.metadata.icons[0]; const requestURL = requestSession.peer.metadata.url; - const transactionMessage = route.params.transactionMessage; const signer = route.params.signer; const requestEvent = route.params.requestEvent; const chainId = requestEvent.params.chainId; @@ -69,6 +69,20 @@ const ApproveTransaction = ({ route }: ApproveTransactionProps) => { ); const namespace = requestedNetwork!.namespace; + const transactionMessage = useMemo((): EncodeObject => { + const inputTxMsg = route.params.transactionMessage; + + // If it's a MsgCreateValidator, decode the tx msg value using MsgCreateValidator type + if (inputTxMsg.typeUrl.includes('MsgCreateValidator')) { + return { + typeUrl: inputTxMsg.typeUrl, + value: MsgCreateValidator.fromJSON(inputTxMsg.value), + }; + } + + return inputTxMsg; + }, [route.params.transactionMessage]); + useEffect(() => { if (namespace !== COSMOS) { return; @@ -144,7 +158,7 @@ const ApproveTransaction = ({ route }: ApproveTransactionProps) => { return; } const gasEstimation = await cosmosStargateClient!.simulate( - transactionMessage.value.participant!, + signer, [transactionMessage], MEMO, ); @@ -168,6 +182,7 @@ const ApproveTransaction = ({ route }: ApproveTransactionProps) => { requestEventId, topic, web3wallet, + signer, ]); useEffect(() => {