Configuração de Carteira
Vamos usar o Stellar Wallet Kit e configurar toda a configuração para assinar transações.
Hook Personalizado
Vamos usar um hook personalizado para gerenciar as ações de conectar e desconectar a carteira usando o Wallet Context e o 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 = () => {
// Obter informações da carteira a partir do wallet context
const { setWalletInfo, clearWalletInfo } = useWalletContext();
/**
* Conectar a uma carteira usando o Stellar Wallet Kit e definir as informações da carteira no wallet context
*/
const connectWallet = async () => {
await kit.openModal({
modalTitle: "Conecte-se à sua carteira favorita",
onWalletSelected: async (option: ISupportedWallet) => {
kit.setWallet(option.id);
const { address } = await kit.getAddress();
const { name } = option;
setWalletInfo(address, name);
},
});
};
/**
* Desconectar da carteira usando o Stellar Wallet Kit e limpar as informações da carteira no wallet context
*/
const disconnectWallet = async () => {
await kit.disconnect();
clearWalletInfo();
};
/**
* Lidar com a conexão à carteira através do clique de algum botão
*/
const handleConnect = async () => {
try {
await connectWallet();
} catch (error) {
console.error("Erro ao conectar a carteira:", error);
}
};
/**
* Lidar com a desconexão da carteira através do clique de algum botão
*/
const handleDisconnect = async () => {
try {
await disconnectWallet();
} catch (error) {
console.error("Erro ao desconectar a carteira:", error);
}
};
return {
connectWallet,
disconnectWallet,
handleConnect,
handleDisconnect,
};
};
As funções "handleConnect" e "handleDisconnect" você pode usar com botões para chamar o modal de conexão da carteira ou limpar seu estado.
Ajudantes
Todos os endpoints precisam da sua assinatura pela carteira. O Stellar Wallet Kit fornece essa funcionalidade, mas vamos abstraí-la em uma função auxiliar.
import { kit } from "@/config/wallet-kit";
import { WalletNetwork } from "@creit.tech/stellar-wallets-kit";
interface signTransactionProps {
unsignedTransaction: string;
address: string;
}
/**
* Assinar uma transação
*
* @Fluxo:
* 1. Assinar a transação não assinada
* 2. Retornar a transação assinada
*/
export const signTransaction = async ({
unsignedTransaction,
address,
}: signTransactionProps): Promise<string> => {
const { signedTxXdr } = await kit.signTransaction(unsignedTransaction, {
address,
networkPassphrase: WalletNetwork.TESTNET,
});
return signedTxXdr;
};
Atualizado
Isto foi útil?