For the complete documentation index, see llms.txt. This page is also available as Markdown.

Actualizar escrow

El esquema ideal para este endpoint.

Esquema

Esto valida un formulario de escrow usando Zod, incluidos montos, direcciones de billetera, trustline y una lista de hitos.

import { isValidWallet } from "@/helpers/valid-data.helper";
import { z } from "zod";

export const formSchema = z.object({
  contractId: z.string().min(1, {
    message: "Se requiere el ID del contrato.",
  }),
  signer: z.string().min(1, {
    message: "Se requiere el firmante.",
  }),
  escrow: z.object({
    title: z.string().min(1, {
      message: "Se requiere el título.",
    }),
    engagementId: z.string().min(1, {
      message: "Se requiere el engagement.",
    }),
    description: z.string().min(10, {
      message: "La descripción debe tener al menos 10 caracteres.",
    }),
    amount: z.string().min(1, {
      message: "Se requiere el monto.",
    }),
    platformFee: z.string().min(1, {
      message: "Se requiere la comisión de la plataforma.",
    }),
    receiverMemo: z.number().min(0, {
      message: "El memo del receptor debe ser un número no negativo.",
    }),
    roles: z.object({
      approver: z
        .string()
        .min(1, {
          message: "Se requiere el aprobador.",
        })
        .refine((value) => isValidWallet(value), {
          message: "El aprobador debe ser una billetera válida.",
        }),
      serviceProvider: z
        .string()
        .min(1, {
          message: "Se requiere el proveedor de servicios.",
        })
        .refine((value) => isValidWallet(value), {
          message: "El proveedor de servicios debe ser una billetera válida.",
        }),
      platformAddress: z
        .string()
        .min(1, {
          message: "Se requiere la dirección de la plataforma.",
        })
        .refine((value) => isValidWallet(value), {
          message: "La dirección de la plataforma debe ser una billetera válida.",
        }),
      releaseSigner: z
        .string()
        .min(1, {
          message: "Se requiere el firmante de la liberación.",
        })
        .refine((value) => isValidWallet(value), {
          message: "El firmante de la liberación debe ser una billetera válida.",
        }),
      disputeResolver: z
        .string()
        .min(1, {
          message: "Se requiere el resolutor de disputas.",
        })
        .refine((value) => isValidWallet(value), {
          message: "El resolutor de disputas debe ser una billetera válida.",
        }),
      receiver: z
        .string()
        .min(1, {
          message: "Se requiere la dirección del receptor.",
        })
        .refine((value) => isValidWallet(value), {
          message: "La dirección del receptor debe ser una billetera válida.",
        }),
    }),
    trustline: z.object({
      address: z.string().min(1, {
        message: "Se requiere la dirección de la trustline.",
      }),
      decimals: z.number().default(10000000),
    }),
    milestones: z
      .array(
        z.object({
          description: z.string().min(1, {
            message: "Se requiere la descripción del hito.",
          }),
          status: z.string().default("pending"),
          evidence: z.string().default(""),
          approvedFlag: z.boolean().default(false),
        })
      )
      .min(1, { message: "Se requiere al menos un hito." }),
  }),
});

Hook Personalizado

Esto contiene toda la lógica del formulario, incluida la validación del esquema, la función onSubmit y otros estados y funcionalidades.

Formulario

Este formulario está construido con react hook form. Usamos el hook personalizado y el esquema zod mencionados anteriormente.

Última actualización