buyAuthorized()

Triggers the buy flow to purchase a token using an access list or authorisation from your server. This function allows for private sales, access list sales, or any other means of gating the minting of a token from the public.

Parameters

NameTypeRequiredDescription
amountNumberY# of tokens to mint/buy
tokenIdNumberYA specific token to buy/mint. For 721 contracts this should be 0. For 1155 contracts this should be the tokenId. TokenIds can be found in the dashboard in the "Tokens" tab.
waitBooleanNBlocks the return of this function until the transaction has completed on network by calling waitForTransaction() . Note that the transaction may take a while to resolve depending on network traffic.
ethPriceNumberNTotal price for all tokens to be purchased, in ETH.
maxPerAddressNumberYRequired if you provide a signature. Must be greater than 0 regardless of contract type.

On 1155 contracts, this must be a value of 0.
expiresNumberNAn expiration date on the signature.
signatureStringNA signature in the r,s,v format. See detailed documentation in Authorizing Access List Purchases

Response

{
    "hash": "string"
}

Example Implemenation (HyperMint Access List)

When using a HyperMint access list, the signature and pricing is handled automatically and the function can be used like this.

const amount = 1;
const waitForTransaction = true;

const tokenId = 0; // Always 0 for ERC721
const transaction = await contract.buyAuthorised(amount, tokenId, waitForTransaction);

// Optional (if waitForTransaction is false)
const status = await contract.getTransactionStatus(transaction);

Example Implementation (Self Hosted Access List)

If you are managing the access list yourself, you will need to provide the additional parameters provided in this implementation.

const amount = 1;
const waitForTransaction = true;
const {totalPrice: number, expires: string, signature: string } = // A call to your server

const tokenId = 0; // Always 0 for ERC721
const transaction = await contract.buyAuthorised(amount, tokenId, waitForTransaction, totalPrice, maxPerAddress, expires, signature);

// Optional (if waitForTransaction is false)
const status = await contract.getTransactionStatus(transaction);

📘

buyAuthorised() accepts the total price to charge for all tokens, not the price per token

Returns a transaction with a network hash. That network hash can be used to poll for completion or in the waitForTransaction function.

On Polygon networks, an approve transaction is also triggered to give the contract access to the user's WETH.

See Authorising Presales for more information about how to obtain the r, s, v signature properties.

Possible Errors

All errors are prefixed with HM (buyAuthorised):

  • Insufficient tokens - The contract does not have enough remaining supply
  • Insufficient funds - The wallet does not have enough funds
  • Errors in the connect() function

Feedback

Something not quite right, unclear or can't find what you are looking for? Please let us know at support.moonpay.com and we will get back to you as soon as we can.