Trustless Work
  • Welcome
    • Why Escrows Matter
    • 🛤️Our Journey so Far
      • 🤔The Problem: Origins of Trustless Work
      • 👾The team comes together
      • 💡The Solution: Escrows
      • 🏆Key Milestones
        • 🌠DraperU Stellar Astro Hacker House: A Pivotal Moment
        • Launching the API V1 at ETH Pura Vida Hackathon
      • 🚀Current Programs
        • 🌟DraperU Embark Program
        • 💻OD Hack Campaigns
      • 🛠️Vertical Development
      • 🔮Future Vision
  • 📌Start Here
    • ☀️About Trustless Work
      • Vision and Mission
      • Team
  • ⚒️Understanding Smart Escrows
    • 🥸Smart Escrow Design
      • What does a Smart Escrow "look like"?
      • Roles in Trustless Work
      • Escrow Lifecycle
        • Initiation Phase
        • Funding Phase
        • Complete phase
        • Approval phase
        • Release phase
        • Dispute Resolution
    • 💵USDC: The Stablecoin Powering Trustless Work
    • 🌟Stellar & Soroban: The Backbone of Trustless Work
  • 💻Developer Resources
    • Introduction
    • Schema
    • Types
      • Basic
      • Entities
      • Payloads
      • Responses
      • Errors
    • Quickstart
      • Integration Demo Project
        • Getting Started
        • Configuration
        • Context API
        • Wallet Setup
        • Trustlines
        • Services
        • Helpers
        • Error Handling
        • Forms
          • Initialize Escrow
          • Fund Escrow
          • Get Escrow
          • Get Multiple Escrow Balances
          • Resolve Dispute
          • Change Milestone Status
          • Change Milestone Flag
          • Change Dispute Flag
          • Release Funds
          • Update Escrow
        • UI Components
          • Pages
          • Cards
          • Tabs
          • Utils
    • Authentication
      • Request Api Key
    • API Reference
      • Deploy
        • Initialize Escrow
      • Escrows
        • Fund Escrow
        • Get Escrow
        • Resolve Dispute
        • Change Milestone Status
        • Change Milestone Flag
        • Start Dispute
        • Release Funds
        • Update Escorw
      • Helpers
        • Set Trustline
        • Send Transaction
        • Get Multiple Escrow Balance
    • React Library
      • Getting Started
      • useSendTransaction
      • useGetEscrow
      • useGetMultipleEscrowBalances
      • useInitializeEscrow
      • useUpdateEscrow
      • useFundEscrow
      • useChangeMilestoneApprovedFlag
      • useChangeMilestoneStatus
      • useReleaseFunds
      • useStartDispute
      • useResolveDispute
    • 🚀Smart Escrow API
    • 🧰Essential Tools for Developers
      • Stellar Wallets
        • Freighter Wallet
        • Albedo Wallet
        • xBull Wallet
        • Rabet Wallet
        • Lobstr Wallet
        • Hana Wallet
        • Additional Resources
        • Troubleshooting & FAQs
      • How to Get Testnet Tokens
  • 🌍Use Cases by Industry
    • Marketplaces & E-commerce
    • Grants, Bounties, and Hackathons
    • P2P Exchanges and OTC Desks
    • Security Deposits
    • Milestone-based Freelance & Contract Work
    • Crowdfunding & Pre-orders
    • DAO Treasury & Working Group Budgets
    • Education & Online Courses
    • Subscription + Performance-based Retainers
  • 🤖Using the dApp
    • Step 1: Accessing the Trustless Work Dapp and Logging In
    • Step 2: Creating a Profile and Requesting an API Key
    • Step 3: Creating an Escrow
    • Step 4: Funding an Escrow
    • Step 5: Marking a Milestone as Done ✅
    • Step 6: Approving the Milestone
    • Step 7: Releasing the Payment
    • Resolving Disputes
  • 🏴‍☠️Community
    • 🌎Spotlight: Kindfi
    • 🛣️Roadmap: The Journey Ahead
    • Contributor's Guide
    • 📂Open-Source Templates & Developer Tools
  • ✒️Background & Theory
    • 📘Core Concepts & Escrow Glossary
    • 🎒Historical Context
      • 📜Escrow History:
        • 🗿Ancient to Colonial Era
        • 🏦Banking Era (19th - 20th Century)
        • 💻The Digital Era and Online Escrow
      • ⛓️Blockchain Era: Smart Escrows
  • Links
    • ⚒️Trustless Work dApp
    • 🌐Trustless Work Website
    • 📣Telegram Chat
    • 💎Only Dust Profile
    • 👩‍💻Swagger for API
    • 📜Github
  • 📢Appendices
    • Contact and Support
    • Notion for Startups
    • Meru
Powered by GitBook
LogoLogo

Links

  • Website
On this page
  • Usage
  • Description of Return Values
  • Mutation Function
  • Usage Example

Was this helpful?

Export as PDF
  1. Developer Resources
  2. React Library

useReleaseFunds

You release the escrow funds to the service provider through the approver.

Usage

This custom hook exposes a mutation function to release the funds of an escrow.

import { useReleaseFunds } from "@trustless-work/escrow/hooks";
import { ReleaseFundsPayload } from "@trustless-work/escrow/types";

/*
 *  useReleaseFunds
*/
const { releaseFunds, isPending, isError, isSuccess } = useReleaseFunds();

/* 
 * It returns an unsigned transaction
 * payload should be of type `ReleaseFundsPayload`
*/
const { unsignedTransaction } = await releaseFunds(payload);

Description of Return Values

  • isPending A boolean status flag indicating whether the mutation is currently in progress. Useful for showing loaders or disabling UI elements during the process.

  • isError A boolean status flag that becomes true if the mutation fails.

  • isSuccess A boolean status flag that becomes true once the mutation completes successfully.

Mutation Function

  • releaseFunds This is the main mutation function. Internally, it wraps mutate or mutateAsync and is responsible for building and returning an unsigned transaction based on the provided payload.

Argument:

ReleaseFundsPayload: An object containing the required fields to release the funds.

Return Value:

unsignedTransaction: An object representing the constructed transaction, ready to be signed by your wallet and broadcast.


Usage Example

src/hooks/useReleaseFundsForm.ts
import {
  useReleaseFunds,
  useSendTransaction,
} from "@trustless-work/escrow/hooks";
import {
  ReleaseFundsPayload
} from "@trustless-work/escrow/types";

export const useReleaseFundsForm = () => {

 /*
  *  useReleaseFunds
 */
 const { releaseFunds, isPending, isError, isSuccess } = useReleaseFunds();
 
 /*
  *  useSendTransaction
 */
 const { sendTransaction, isPending, isError, isSuccess } = useSendTransaction();

/*
 * onSubmit function, this could be called by form button
*/
 const onSubmit = async (payload: ReleaseFundsPayload) => {

    try {
      /**
       * API call by using the trustless work hooks
       * @Note:
       * - We need to pass the payload to the releaseFunds function
       * - The result will be an unsigned transaction
       */
      const { unsignedTransaction } = await releaseFunds(
        payload
      );

      if (!unsignedTransaction) {
        throw new Error(
          "Unsigned transaction is missing from useReleaseFunds."
        );
      }

      /**
       * @Note:
       * - We need to sign the transaction using your [private key] such as wallet
       * - The result will be a signed transaction
       */
      const signedXdr = await signTransaction({ /* This method should be provided by the wallet */
        unsignedTransaction,
        address: walletAddress || "",
      });

      if (!signedXdr) {
        throw new Error("Signed transaction is missing.");
      }

      /**
       * @Note:
       * - We need to send the signed transaction to the API
       * - The data will be an SendTransactionResponse
       */
      const data = await sendTransaction({
        signedXdr,
        returnEscrowDataIsRequired: false,
      });

      /**
       * @Responses:
       * data.status === "SUCCESS"
       * - Escrow released successfully
       * - Show a success toast
       *
       * data.status == "ERROR"
       * - Show an error toast
       */
      if (data.status === "SUCCESS") {
         toast.success("The escrow has been released");
      }
    } catch (error: unknown) {
      // catch error logic
    }
  };
}

PrevioususeChangeMilestoneStatusNextuseStartDispute

Last updated 6 days ago

Was this helpful?

💻
Types