Documentation Index
Fetch the complete documentation index at: https://docs.getpara.com/llms.txt
Use this file to discover all available pages before exploring further.
Delegate your tokens to validators on Cosmos chains to earn staking rewards using CosmJS in React Native.
Prerequisites
Stake Tokens
import { useMemo } from 'react';
import { View, Text, Button } from 'react-native';
import { useParaCosmjsProtoSigner, useParaCosmjsSignAndBroadcast } from '@getpara/react-native-wallet/cosmos';
import { SigningStargateClient, coins } from '@cosmjs/stargate';
import { MsgDelegate } from 'cosmjs-types/cosmos/staking/v1beta1/tx';
const RPC_URL = 'https://rpc.cosmos.directory/cosmoshub';
function StakeTokens() {
const { protoSigner, isLoading } = useParaCosmjsProtoSigner();
const address = protoSigner?.address;
const client = useMemo(
() => protoSigner ? SigningStargateClient.connectWithSigner(RPC_URL, protoSigner) : undefined,
[protoSigner]
);
const { signAndBroadcastAsync, isPending } = useParaCosmjsSignAndBroadcast(protoSigner, client);
const delegateToValidator = async () => {
if (!protoSigner || !address) return;
const validator = 'cosmosvaloper1...';
const msgDelegate = {
typeUrl: '/cosmos.staking.v1beta1.MsgDelegate',
value: MsgDelegate.fromPartial({
delegatorAddress: address,
validatorAddress: validator,
amount: {
denom: 'uatom',
amount: '1000000',
},
}),
};
const fee = {
amount: coins(5000, 'uatom'),
gas: '250000',
};
try {
const result = await signAndBroadcastAsync({
messages: [msgDelegate],
fee,
memo: 'Staking with Para',
});
console.log('Delegation successful:', result.transactionHash);
} catch (error) {
console.error('Delegation failed:', error);
}
};
if (isLoading) return <Text>Loading...</Text>;
return (
<View>
<Text>Delegator: {address}</Text>
<Button
title={isPending ? 'Staking...' : 'Stake 1 ATOM'}
onPress={delegateToValidator}
disabled={isPending}
/>
</View>
);
}
Next Steps