Configuración de cartera

Vamos a usar el Stellar Wallet Kit y configurar toda la configuración para firmar transacciones.

Hook Personalizado

Vamos a usar un hook personalizado para gestionar las acciones de conectar y desconectar la cartera usando el Wallet Context y el wallet kit.

import { kit } from "@/config/wallet-kit";
import { useWalletContext } from "@/providers/wallet.provider";
import { ISupportedWallet } from "@creit.tech/stellar-wallets-kit";

export const useWallet = () => {
  // Obtener información de la cartera desde el wallet context
  const { setWalletInfo, clearWalletInfo } = useWalletContext();

  /**
   * Conectar a una cartera usando el Stellar Wallet Kit y establecer la información de la cartera en el wallet context
   */
  const connectWallet = async () => {
    await kit.openModal({
      modalTitle: "Conéctate a tu cartera favorita",
      onWalletSelected: async (option: ISupportedWallet) => {
        kit.setWallet(option.id);

        const { address } = await kit.getAddress();
        const { name } = option;

        setWalletInfo(address, name);
      },
    });
  };

  /**
   * Desconectar de la cartera usando el Stellar Wallet Kit y limpiar la información de la cartera en el wallet context
   */
  const disconnectWallet = async () => {
    await kit.disconnect();
    clearWalletInfo();
  };

  /**
   * Manejar la conexión a la cartera mediante el clic de algún botón
   */
  const handleConnect = async () => {
    try {
      await connectWallet();
    } catch (error) {
      console.error("Error connecting wallet:", error);
    }
  };

  /**
   * Manejar la desconexión de la cartera mediante el clic de algún botón
   */
  const handleDisconnect = async () => {
    try {
      await disconnectWallet();
    } catch (error) {
      console.error("Error disconnecting wallet:", error);
    }
  };

  return {
    connectWallet,
    disconnectWallet,
    handleConnect,
    handleDisconnect,
  };
};

Las funciones "handleConnect" y "handleDisconnect" puedes usarlas con botones para abrir el modal de conexión de la cartera o vaciar su estado.

Ayudantes

Todos los endpoints necesitan tu firma por cartera. El Stellar Wallet Kit proporciona esa funcionalidad, pero la abstraeremos en una función helper.

import { kit } from "@/config/wallet-kit";
import { WalletNetwork } from "@creit.tech/stellar-wallets-kit";

interface signTransactionProps {
  unsignedTransaction: string;
  address: string;
}

/**
 * Firmar una transacción
 *
 * @Flow:
 * 1. Firmar la transacción sin firmar
 * 2. Devolver la transacción firmada
 */
export const signTransaction = async ({
  unsignedTransaction,
  address,
}: signTransactionProps): Promise<string> => {
  const { signedTxXdr } = await kit.signTransaction(unsignedTransaction, {
    address,
    networkPassphrase: WalletNetwork.TESTNET,
  });

  return signedTxXdr;
};

Última actualización

¿Te fue útil?