React Hooks
useAcceptOffer

useAcceptOffer

Hook to accept an offer, accessing the active process step as well as the transaction hash.

Can only be executed by an owner of the related NFT if it's a bid, or by anyone if it's a sale.

Usage

import { BigNumber } from '@ethersproject/bignumber'
import { AcceptOfferStep, useAcceptOffer } from '@nft/hooks'
import React from 'react'
 
export default function Component() {
  const signer = undefined // type of "Signer & TypedDataSigner" Get the signer from the wallet. Need to be an Ethers Signer (https://docs.ethers.io/v5/api/signer/)
  const [acceptOffer, { activeStep, transactionHash }] = useAcceptOffer(signer)
 
  const handleClick = async () => {
    await acceptOffer(
      {
        id: '66710e28-38d4-11ed-a261-0242ac120002', // ID of the offer
        unitPrice: BigNumber.from(10), // The unit price of this offer. Used to check ERC20 allowance.
      },
      BigNumber.from(1), // The quantity of NFT to accept. Must be 1 for erc721, must be inferior (partial fill) or equal to offer's quantity for erc1155.
    )
  }
 
  return (
    <>
      {activeStep === AcceptOfferStep.INITIAL && (
        <button onClick={handleClick}>Accept Offer</button>
      )}
      {activeStep === AcceptOfferStep.APPROVAL_SIGNATURE && (
        <p>Please sign the message in wallet</p>
      )}
      {activeStep === AcceptOfferStep.APPROVAL_PENDING && (
        <p>Message signature is pending</p>
      )}
      {activeStep === AcceptOfferStep.TRANSACTION_SIGNATURE && (
        <p>Please sign transaction in wallet</p>
      )}
      {activeStep === AcceptOfferStep.TRANSACTION_PENDING && (
        <p>Transaction is pending</p>
      )}
      {activeStep === AcceptOfferStep.OWNERSHIP && <p>Verifying ownership</p>}
      {transactionHash && <p>Transaction hash is {transactionHash}</p>}
    </>
  )
}

Configuration

useAcceptOffer(
  signer: Signer | undefined, // Ethers signer: https://docs.ethers.io/v5/api/signer/
)

Return values

;[
  (
    offer: {
      id: string
      unitPrice: BigNumberish
    },
    quantity: BigNumberish,
  ) => Promise<void>, // acceptOffer. function to accept an Offer
  {
    activeStep: AcceptOfferStep, // returns different values depending on the current acceptation step
    transactionHash: string | undefined, // returns the transaction hash after transaction has been placed on the blockchain
  },
]

acceptOffer

Function to accept an offer for an NFT.

Arguments:

(
  offer: {
    id: string, // Id of the offer
    unitPrice: BigNumberish // Price per NFT unit, the price is in the token unit (e.g: Ethereum's WEI) therefore needs to be a BigNumber
  },
  quantity: BigNumberish, // Quantity of asset to accept. Use BigNumber
)

activeStep

The status of the transaction as an enum AcceptOfferStep executed in this order. Once the offer acceptation has been complete the state returns to AcceptOfferStep.INITIAL

enum AcceptOfferStep {
  INITIAL, // Default
  APPROVAL_SIGNATURE, // Message signature has been iniated
  APPROVAL_PENDING, // Message signature is pending
  TRANSACTION_SIGNATURE, // Transaction has been initiated
  TRANSACTION_PENDING, // Transaction is pending
  OWNERSHIP, // Ownership is being verified
}

transactionHash

The hash of the blockchain transaction of the accepted offer. This is only accessible after the approval of the transaction (after AcceptOfferStep.TRANSACTION_PENDING)