Payloads

Entidade de Payload do Escrow

import { EscrowType, SingleReleaseEscrowStatus } from "./types";
import { MultiReleaseEscrow, Role, SingleReleaseEscrow } from "./types.entity";

/**
 * Documentação: https://docs.trustlesswork.com/trustless-work/developer-resources/quickstart/integration-demo-project/entities
 */

// ----------------- Payloads de Marco -----------------
/**
 * Payload de Marco de Liberação Única
 */
export type SingleReleaseMilestonePayload = {
  /**
   * Texto descrevendo a função do marco
   */
  description: string;
};

/**
 * Payload de Marco de Múltiplas Liberações
 */
export type MultiReleaseMilestonePayload = {
  /**
   * Texto descrevendo a função do marco
   */
  description: string;
  /**
   * Quantia a ser transferida ao completar este marco
   */
  amount: number;
  /**
   * Endereço para onde os recursos do marco serão enviados
   */
  receiver: string;
};

// ----------------- Inicializar Escrow -----------------
/**
 * Payload de Inicialização de Escrow de Liberação Única
 */
export type InitializeSingleReleaseEscrowPayload = Omit<
  SingleReleaseEscrow,
  "contractId" | "balance" | "milestones"
> & {
  /**
   * Objetivos a serem concluídos para definir o escrow como concluído
   */
  milestones: SingleReleaseMilestonePayload[];
};

/**
 * Payload de Inicialização de Escrow de Múltiplas Liberações
 */
export type InitializeMultiReleaseEscrowPayload = Omit<
  MultiReleaseEscrow,
  "contractId" | "balance" | "milestones"
> & {
  /**
   * Objetivos a serem concluídos para definir o escrow como concluído
   */
  milestones: MultiReleaseMilestonePayload[];
};

// ----------------- Atualizar Escrow -----------------
/**
 * Payload de Atualização de Escrow de Liberação Única
 */
export type UpdateSingleReleaseEscrowPayload = {
  /**
   * ID (endereço) que identifica o contrato de escrow
   */
  contractId: string;

  /**
   * Dados do escrow
   */
  escrow: Omit<SingleReleaseEscrow, "contractId" | "signer" | "balance"> & {
    /**
     * Se o escrow está ativo. Isso vem do DB, não da blockchain.
     */
    isActive?: boolean;
  };

  /**
   * Endereço do usuário que assina a transação do contrato
   */
  signer: string;
};

/**
 * Payload de Atualização de Escrow de Múltiplas Liberações
 */
export type UpdateMultiReleaseEscrowPayload = {
  /**
   * ID (endereço) que identifica o contrato de escrow
   */
  contractId: string;

  /**
   * Dados do escrow
   */
  escrow: Omit<MultiReleaseEscrow, "contractId" | "signer" | "balance"> & {
    /**
     * Se o escrow está ativo. Isso vem do DB, não da blockchain.
     */
    isActive?: boolean;
  };

  /**
   * Endereço do usuário que assina a transação do contrato
   */
  signer: string;
};

// ----------------- Alterar Status do Marco -----------------
/**
 * Payload de Alteração de Status do Marco, isso pode ser para liberação única ou múltipla
 */
export type ChangeMilestoneStatusPayload = {
  /**
   * ID (endereço) que identifica o contrato de escrow
   */
  contractId: string;

  /**
   * Índice do marco a ser atualizado
   */
  milestoneIndex: string;

  /**
   * Novo status do marco
   */
  newStatus: string;

  /**
   * Nova evidência do trabalho realizado pelo prestador de serviços.
   */
  newEvidence?: string;

  /**
   * Endereço da entidade que fornece o serviço.
   */
  serviceProvider: string;
};

// ----------------- Aprovar Marco -----------------
/**
 * Payload de Aprovação de Marco, isso pode ser para liberação única ou múltipla
 */
export type ApproveMilestonePayload = Omit<
  ChangeMilestoneStatusPayload,
  "serviceProvider" | "newStatus"
> & {
  /**
   * Endereço da entidade que requer o serviço.
   */
  approver: string;
};

// ----------------- Iniciar Disputa -----------------
/**
 * Payload de Início de Disputa para Liberação Única. Isso inicia uma disputa para todo o escrow.
 */
export type SingleReleaseStartDisputePayload = {
  /**
   * ID (endereço) que identifica o contrato de escrow
   */
  contractId: string;

  /**
   * Endereço do usuário que assina a transação do contrato
   */
  signer: string;
};

/**
 * Payload de Início de Disputa para Múltiplas Liberações. Isso inicia uma disputa para um marco específico.
 */
export type MultiReleaseStartDisputePayload =
  SingleReleaseStartDisputePayload & {
    /**
     * Índice do marco a ser disputado
     */
    milestoneIndex: string;
  };

// ----------------- Resolver Disputa -----------------
/**
 * Payload de Resolução de Disputa
 */
export type SingleReleaseResolveDisputePayload = {
  /**
   * ID (endereço) que identifica o contrato de escrow
   */
  contractId: string;

  /**
   * Endereço responsável por resolver disputas dentro do escrow.
   */
  disputeResolver: string;

  /**
   * Distribuições do montante do escrow para os recebedores.
   */
  distributions: [
    {
      /**
       * Endereço do recebedor
       */
      address: string;
      /**
       * Quantia a ser transferida para o recebedor. Todo o montante deve ser igual ao valor total do escrow.
       */
      amount: number;
    },
  ];
};

/**
 * Payload de Resolução de Disputa para Múltiplas Liberações
 */
export type MultiReleaseResolveDisputePayload =
  SingleReleaseResolveDisputePayload & {
    /**
     * Índice do marco a ser resolvido
     */
    milestoneIndex: string;
  };

// ----------------- Retirar Fundos Restantes -----------------
/**
 * Retirar fundos restantes
 */
export type WithdrawRemainingFundsPayload = SingleReleaseResolveDisputePayload;

// ----------------- Financiar Escrow -----------------
/**
 * Payload de Financiamento do Escrow, isso pode ser para liberação única ou múltipla
 */
export type FundEscrowPayload = {
  /**
   * Quantia a ser transferida ao completar os marcos do escrow
   */
  amount: number;

  /**
   * ID (endereço) que identifica o contrato de escrow
   */
  contractId: string;

  /**
   * Endereço do usuário que assina a transação do contrato
   */
  signer: string;
};

// ----------------- Obter Escrows do Indexador -----------------
/**
 * Parâmetros para Obter Escrows do Indexador
 */
export type GetEscrowsFromIndexerParams = {
  /**
   * Número da página. Paginação
   */
  page?: number;

  /**
   * Direção de ordenação. Ordenação
   */
  orderDirection?: "asc" | "desc";

  /**
   * Ordenar por propriedade. Ordenação
   */
  orderBy?: "createdAt" | "updatedAt" | "amount";

  /**
   * Criado em = data inicial. Filtragem
   */
  startDate?: string;

  /**
   * Criado em = data final. Filtragem
   */
  endDate?: string;

  /**
   * Quantia máxima. Filtragem
   */
  maxAmount?: number;

  /**
   * Quantia mínima. Filtragem
   */
  minAmount?: number;

  /**
   * Está ativo. Filtragem
   */
  isActive?: boolean;

  /**
   * Escrow que você está procurando. Filtragem
   */
  title?: string;

  /**
   * ID do engajamento. Filtragem
   */
  engagementId?: string;

  /**
   * Status do escrow de liberação única. Filtragem
   */
  status?: SingleReleaseEscrowStatus;

  /**
   * Tipo do escrow. Filtragem
   */
  type?: EscrowType;

  /**
   * Se verdadeiro, os escrows serão validados na blockchain para garantir consistência de dados.
   * Isso realiza uma etapa adicional de verificação para confirmar que os dados do escrow
   * retornados pelo indexador correspondem ao estado atual na blockchain.
   * Use isto quando precisar garantir as informações de escrow mais atualizadas e precisas.
   * Se você ativar este parâmetro, sua requisição levará mais tempo para ser concluída.
   */
  validateOnChain?: boolean;
};

export type GetEscrowsFromIndexerBySignerParams =
  GetEscrowsFromIndexerParams & {
    /**
     * Endereço do usuário que assina a transação do contrato.
     */
    signer: string;
  };

export type GetEscrowsFromIndexerByRoleParams = GetEscrowsFromIndexerParams & {
  /**
   * Papel do usuário. Obrigatório
   */
  role: Role;

  /**
   * Endereço do proprietário dos escrows. Se você quiser obter todos os escrows de um papel específico, pode usar este parâmetro. Mas com este parâmetro, você não pode usar o parâmetro signer.
   */
  roleAddress: string;
};

export type GetEscrowFromIndexerByContractIdsParams = {
  /**
   * IDs (endereços) que identificam os contratos de escrow.
   */
  contractIds: string[];

  /**
   * Se verdadeiro, os escrows serão validados na blockchain para garantir consistência de dados.
   * Isso realiza uma etapa adicional de verificação para confirmar que os dados do escrow
   * retornados pelo indexador correspondem ao estado atual na blockchain.
   * Use isto quando precisar garantir as informações de escrow mais atualizadas e precisas.
   * Se você ativar este parâmetro, sua requisição levará mais tempo para ser concluída.
   */
  validateOnChain?: boolean;
};

// ----------------- Liberar Fundos -----------------
/**
 * Payload de Liberação de Fundos para Liberação Única
 */
export type SingleReleaseReleaseFundsPayload = {
  /**
   * ID (endereço) que identifica o contrato de escrow
   */
  contractId: string;

  /**
   * Endereço do usuário responsável por liberar os fundos do escrow ao prestador de serviço.
   */
  releaseSigner: string;
};

/**
 * Payload de Liberação de Fundos para Múltiplas Liberações
 */
export type MultiReleaseReleaseFundsPayload =
  SingleReleaseReleaseFundsPayload & {
    /**
     * Índice do marco a ser liberado
     */
    milestoneIndex: string;
  };

// ----------------- Obter Saldo -----------------
/**
 * Parâmetros para Obter Saldo
 */
export type GetBalanceParams = {
  /**
   * Endereços dos escrows para obter o saldo
   */
  addresses: string[];
};

// ----------------- Atualizar a partir do Hash da Transação -----------------
/**
 * Payload para atualizar dados do escrow a partir de um hash de transação.
 */
export type UpdateFromTxHashPayload = {
  /**
   * Hash da transação a ser usado para a atualização.
   */
  txHash: string;
};

Atualizado

Isto foi útil?