# Payloads

### Entidade de Payload de Escrow

```typescript
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 Milestones -----------------
/**
 * Payload de Milestone de Liberação Única
 */
export type SingleReleaseMilestonePayload = {
  /**
   * Texto descrevendo a função do milestone
   */
  description: string;
};

/**
 * Payload de Milestone de Multi Liberação
 */
export type MultiReleaseMilestonePayload = {
  /**
   * Texto descrevendo a função do milestone
   */
  description: string;
  /**
   * Quantia a ser transferida após a conclusão deste milestone
   */
  amount: number;
  /**
   * Endereço para o qual os recursos do milestone 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 Multi Liberação
 */
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 BD, 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 Multi Liberação
 */
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 BD, não da blockchain.
     */
    isActive?: boolean;
  };

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

// ----------------- Alterar Status do Milestone -----------------
/**
 * Payload de Alteração de Status do Milestone, 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 milestone a ser atualizado
   */
  milestoneIndex: string;

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

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

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

// ----------------- Aprovar Milestone -----------------
/**
 * Payload de Aprovação de Milestone, 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 Multi Liberação. Isso inicia uma disputa para um milestone específico.
 */
export type MultiReleaseStartDisputePayload =
  SingleReleaseStartDisputePayload & {
    /**
     * Índice do milestone 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 da quantia do escrow para os destinatários.
   */
  distributions: [
    {
      /**
       * Endereço do destinatário
       */
      address: string;
      /**
       * Quantia a ser transferida para o destinatário. Toda a quantia deve ser igual ao valor total do escrow.
       */
      amount: number;
    },
  ];
};

/**
 * Payload de Resolução de Disputa para Multi Liberação
 */
export type MultiReleaseResolveDisputePayload =
  SingleReleaseResolveDisputePayload & {
    /**
     * Índice do milestone a ser resolvido
     */
    milestoneIndex: string;
  };

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

// ----------------- Financiar Escrow -----------------
/**
 * Payload de Financiamento de Escrow, isso pode ser para liberação única ou múltipla
 */
export type FundEscrowPayload = {
  /**
   * Quantia a ser transferida mediante a conclusão dos milestones 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;

  /**
   * Valor máximo. Filtragem
   */
  maxAmount?: number;

  /**
   * Valor mínimo. Filtragem
   */
  minAmount?: number;

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

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

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

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

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

  /**
   * Se true, os escrows serão validados na blockchain para garantir consistência dos dados.
   * Isso executa uma etapa adicional de verificação para confirmar que os dados do escrow
   * retornados pelo indexador correspondem ao estado atual na blockchain.
   * Use isso quando precisar garantir as informações de escrow mais atualizadas e precisas.
   * Se você ativar este parâmetro, sua solicitaçã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 true, os escrows serão validados na blockchain para garantir consistência dos dados.
   * Isso executa uma etapa adicional de verificação para confirmar que os dados do escrow
   * retornados pelo indexador correspondem ao estado atual na blockchain.
   * Use isso quando precisar garantir as informações de escrow mais atualizadas e precisas.
   * Se você ativar este parâmetro, sua solicitaçã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 para o prestador de serviço.
   */
  releaseSigner: string;
};

/**
 * Payload de Liberação de Fundos para Multi Liberação
 */
export type MultiReleaseReleaseFundsPayload =
  SingleReleaseReleaseFundsPayload & {
    /**
     * Índice do milestone 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;
};
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.trustlesswork.com/trustless-work/v1-pt/introducao/developer-resources/tipos/payloads.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
