Este endpoint te permite cambiar las propiedades de un escrow siempre que se cumpla una serie de requisitos, que se mencionarán en esta sección.
Uso
Este hook personalizado expone una función para actualizar un escrow.
import{useUpdateEscrow}from"@trustless-work/escrow/hooks";import{UpdateSingleReleaseEscrowPayload,UpdateMultiReleaseEscrowPayload}from"@trustless-work/escrow/types";/* * useUpdateEscrow*/const{updateEscrow}=useUpdateEscrow();/* * Devuelve una transacción sin firmar * el payload debe ser del tipo `UpdateSingleReleaseEscrowPayload` o `UpdateMultiReleaseEscrowPayload`*/const{unsignedTransaction}=awaitupdateEscrow(payload);
Función
updateEscrow
Responsable de construir y devolver una transacción sin firmar basada en el payload proporcionado.
EscrowType: Especifica el tipo de escrow. Acepta los siguientes valores:
multi-release: Permite múltiples liberaciones de fondos.
single-release: Los fondos se liberan en una única transacción.
UpdateSingleReleaseEscrowPayload: Un objeto con los campos necesarios para actualizar un single-release escrow.
UpdateMultiReleaseEscrowPayload: Un objeto con los campos necesarios para actualizar un multi-release escrow.
Parámetros:
Asegúrate de que coincidan: si eliges un tipo "multi-release", también debes usar un payload "multi-release".
tipo: Describe el tipo de escrow a utilizar. Las opciones son "multi-release" o "single-release".
payload: Un objeto que contiene los campos requeridos para actualizar un escrow.
import {
useUpdateEscrow,
useSendTransaction,
} from "@trustless-work/escrow/hooks";
import {
UpdateSingleReleaseEscrowPayload, UpdateMultiReleaseEscrowPayload
} from "@trustless-work/escrow/types";
export const useUpdateEscrowForm = () => {
/*
* useUpdateEscrow
*/
const { updateEscrow } = useUpdateEscrow();
/*
* useSendTransaction
*/
const { sendTransaction } = useSendTransaction();
/*
* función onSubmit, esto podría ser llamado por un botón de formulario
*/
const onSubmit = async (payload: UpdateSingleReleaseEscrowPayload | UpdateMultiReleaseEscrowPayload) => {
try {
/**
* Llamada a la API usando los hooks de trustless work
* @Nota:
* - Necesitamos pasar el payload a la función updateEscrow
* - El resultado será una transacción sin firmar
*/
const { unsignedTransaction } = await updateEscrow(
payload,
"multi-release"
// o ...
// "single-release"
);
if (!unsignedTransaction) {
throw new Error(
"La transacción sin firmar falta en la respuesta de updateEscrow."
);
}
/**
* @Nota:
* - Necesitamos firmar la transacción usando tu [clave privada] como la billetera
* - El resultado será una transacción firmada
*/
const signedXdr = await signTransaction({ /* Este método debe ser proporcionado por la billetera */
unsignedTransaction,
address: walletAddress || "",
});
if (!signedXdr) {
throw new Error("La transacción firmada falta.");
}
/**
* @Nota:
* - Necesitamos enviar la transacción firmada a la API
* - Los datos serán un SendTransactionResponse
*/
const data = await sendTransaction(signedXdr);
/**
* @Respuestas:
* data.status === "SUCCESS"
* - Escrow actualizado con éxito
* - Mostrar una notificación de éxito
*
* data.status == "ERROR"
* - Mostrar una notificación de error
*/
if (data.status === "SUCCESS") {
toast.success("Escrow actualizado");
}
} catch (error: unknown) {
// lógica para capturar el error
}
};
}