useWithdrawRemainingFunds

Em uma caução de liberação múltipla, quando alguns fundos estão bloqueados, você pode usar este hook para liberar os fundos restantes

Uso

Este hook personalizado expõe uma função para sacar os fundos restantes em um escrow.

import { useResolveDispute } from "@trustless-work/escrow/hooks";
import { WithdrawRemainingFundsPayload } from "@trustless-work/escrow/types";

/*
 *  useWithdrawRemainingFunds
*/
const { withdrawRemainingFunds} = useWithdrawRemainingFunds();

/* 
 * Retorna uma transação não assinada
 * payload deve ser do tipo `WithdrawRemainingFundsPayload`
*/
const { unsignedTransaction } = await withdrawRemainingFunds(payload);

Função de Mutação

withdrawRemainingFunds

Responsável por construir e retornar uma transação não assinada com base no payload fornecido.

TipoDeEscrow: Especifica o tipo de escrow. Aceita os seguintes valores:

  • multi-release: Permite múltiplos desembolsos de fundos.

WithdrawRemainingFundsPayload: Um objeto com campos necessários para liberar os fundos bloqueados

Parâmetros:

Permite apenas escrows de liberação múltipla..

  • payload: Um objeto contendo os campos obrigatórios para resolver uma disputa.

Retirar Fundos Restantes

Valor de Retorno:

unsignedTransaction: Um objeto representando a transação construída, pronto para ser assinado pela sua carteira e transmitido.


Exemplo de Uso

src/hooks/useWithdrawRemainingFundsForm.ts
import {
  useWithdrawRemainingFunds,
  useSendTransaction,
} from "@trustless-work/escrow/hooks";
import {
  WithdrawRemainingFundsPayload
} from "@trustless-work/escrow/types";

export const useStartDisputeForm = () => {

 /*
  *  useWithdrawRemainingFunds
 */
 const { withdrawRemainingFunds } = useWithdrawRemainingFunds();
 
 /*
  *  useSendTransaction
 */
 const { sendTransaction } = useSendTransaction();

/*
 * função onSubmit, isso pode ser chamada por um botão de formulário
*/
 const onSubmit = async (payload: WithdrawRemainingFundsPayload) => {

    try {
      /**
       * Chamada de API usando os hooks do trustless work
       * @Nota:
       * - Precisamos passar o payload para a função withdrawRemainingFunds
       * - O resultado será uma transação não assinada
       */
      const { unsignedTransaction } = await withdrawRemainingFunds (
        payload
      );

      if (!unsignedTransaction) {
        throw new Error(
          "Transação não assinada está faltando em withdrawRemainingFunds."
        );
      }

      /**
       * @Nota:
       * - Precisamos assinar a transação usando sua [chave privada], como uma carteira
       * - O resultado será uma transação assinada
       */
      const signedXdr = await signTransaction({ /* Este método deve ser fornecido pela carteira */
        unsignedTransaction,
        address: walletAddress || "",
      });

      if (!signedXdr) {
        throw new Error("Transação assinada está ausente.");
      }

      /**
       * @Nota:
       * - Precisamos enviar a transação assinada para a API
       * - Os dados serão um SendTransactionResponse
       */
      const data = await sendTransaction(signedXdr);

      /**
       * @Respostas:
       * data.status === "SUCCESS"
       * - Disputa resolvida com sucesso
       * - Mostrar um toast de sucesso
       *
       * data.status == "ERROR"
       * - Mostrar um toast de erro
       */
      if (data.status === "SUCCESS") {
         toast.success("Retirada bem-sucedida");
      }
    } catch (error: unknown) {
      // lógica de captura de erro
    }
  };
}

Atualizado

Isto foi útil?