Entidades

Escrow

Contiene tipos de liberación única y de liberación múltiple.

/**
 * Escrow de liberación única
 */
export type SingleReleaseEscrow = {
  /**
   * Dirección del usuario que firma la transacción del contrato
   */
  signer: string;

  /**
   * ID (dirección) que identifica el contrato escrow
   */
  contractId: string;

  /**
   * Identificador único para el escrow
   */
  engagementId: string;

  /**
   * Nombre del escrow
   */
  title: string;

  /**
   * Roles que conforman la estructura del escrow
   */
  roles: Roles;

  /**
   * Texto que describe la función del escrow
   */
  description: string;

  /**
   * Cantidad a transferir al completarse los hitos del escrow
   */
  amount: number;

  /**
   * Comisión que la plataforma recibirá cuando el escrow se complete
   */
  platformFee: number;

  /**
   * Cantidad del token (XLM, USDC, EURC, etc.) en el contrato inteligente.
   */
  balance: number;

  /**
   * Objetivos a completar para definir el escrow como completado
   */
  milestones: SingleReleaseMilestone[];

  /**
   * Flags que validan ciertos estados de vida del escrow
   */
  flags?: Flags;

  /**
   * Información sobre la trustline que gestionará el movimiento de fondos en escrow
   */
  trustline: Trustline;
};

/**
 * Escrow de liberación múltiple
 */
export type MultiReleaseEscrow = Omit<
  SingleReleaseEscrow,
  "milestones" | "flags" | "amount" | "roles"
> & {
  milestones: MultiReleaseMilestone[];
  roles: Omit<Roles, "receiver">;
};

Hito

Contiene tipos de liberación única y de liberación múltiple. Ambos basados en BaseMilestone.

/**
 * Hito
 */
type BaseMilestone = {
  /**
   * Texto que describe la función del hito.
   */
  description: string;

  /**
   * Estado del hito. Ej: Aprobado, En disputa, etc...
   */
  status?: string;

  /**
   * Evidencia del trabajo realizado por el proveedor del servicio.
   */
  evidence?: string;
};

/**
 * Hito de liberación única
 */
export type SingleReleaseMilestone = BaseMilestone & {
  /**
   * Indicador de aprobado, solo si el escrow es de liberación única
   */
  approved?: boolean;
};

/**
 * Hito de liberación múltiple
 */
export type MultiReleaseMilestone = BaseMilestone & {
  /**
   * Cantidad a transferir al completarse este hito
   */
  amount: number;
  
  /**
   * Dirección a la que se enviarán los fondos del hito
   */
  receiver: string;

  /**
   * Flags que validan ciertos estados de vida del hito, solo si el escrow es de liberación múltiple
   */
  flags?: Flags;
};

Trustline

/**
 * Trustline
 */
export interface Trustline {
  /**
   * Dirección pública que establece permiso para aceptar y usar un token específico.
   */
  address: string;
}

Flags

Todos los flags posibles solo en escrow de liberación múltiple.

/**
 * Flags
 */
export type Flags = {
  /**
   * Indicador que indica que un escrow está en disputa.
   */
  disputed?: boolean;

  /**
   * Indicador que indica que los fondos del escrow ya han sido liberados.
   */
  released?: boolean;

  /**
   * Indicador que indica que un escrow en disputa ya ha sido resuelto.
   */
  resolved?: boolean;

  /**
   * Indicador que indica si un hito ha sido aprobado por el aprobador.
   */
  approved?: boolean;
};

Roles

/**
 * Roles
 */
export type Roles = {
  /**
   * Dirección de la entidad que requiere el servicio.
   */
  approver: string;

  /**
   * Dirección de la entidad que presta el servicio.
   */
  serviceProvider: string;

  /**
   * Dirección de la entidad que posee el escrow
   */
  platformAddress: string;

  /**
   * Dirección del usuario encargado de liberar los fondos del escrow al proveedor del servicio.
   */
  releaseSigner: string;

  /**
   * Dirección encargada de resolver disputas dentro del escrow.
   */
  disputeResolver: string;

  /**
   * Dirección a la que se enviarán los fondos del escrow (En la versión “Multi-Release”, 
     este rol está a nivel de hito.)
   */
  receiver: string;
};

/**
 * Rol
 */
export type Role =
  | "approver"
  | "serviceProvider"
  | "platformAddress"
  | "releaseSigner"
  | "disputeResolver"
  | "receiver"
  | "signer";

Última actualización

¿Te fue útil?