nft-transfer?
Transferring ownership of a non-fungible token (NFT) in Clarity smart contracts.
Function Signature
(nft-transfer? asset-class asset-identifier sender recipient)
- Input:
AssetName, A, principal, principal
- Output:
(response bool uint)
Why it matters
The nft-transfer?
function is crucial for:
- 1Changing the ownership of a non-fungible token (NFT).
- 2Implementing logic that depends on the transfer of NFTs.
- 3Ensuring data integrity by updating ownership records.
- 4Simplifying the process of transferring NFTs in smart contracts.
When to use it
Use nft-transfer?
when you need to:
- Change the ownership of an NFT.
- Implement logic that depends on the transfer of NFTs.
- Update ownership records in your smart contract.
- Handle NFT transfer operations.
Best Practices
- Ensure the
sender
principal owns the NFT before attempting to transfer it. - Ensure the
sender
andrecipient
are different principals. - Use meaningful variable names for better readability.
- Combine with other NFT functions for comprehensive NFT management.
- Handle the possible error cases to ensure robust contract behavior.
Practical Example: Transferring an NFT
Let's implement a function that transfers an NFT from the sender to the recipient:
(define-non-fungible-token Stackaroo (string-ascii 40))(define-public (transfer-nft (id (string-ascii 40)) (recipient principal))(nft-transfer? Stackaroo id tx-sender recipient));; Usage(nft-mint? Stackaroo "Roo" tx-sender) ;; Returns (ok true)(transfer-nft "Roo" 'SPAXYA5XS51713FDTQ8H94EJ4V579CXMTRNBZKSF) ;; Returns (ok true)(nft-transfer? Stackaroo "Roo" tx-sender 'SPAXYA5XS51713FDTQ8H94EJ4V579CXMTRNBZKSF) ;; Returns (err u1) because the sender no longer owns the asset(nft-transfer? Stackaroo "NonExistent" tx-sender 'SPAXYA5XS51713FDTQ8H94EJ4V579CXMTRNBZKSF) ;; Returns (err u2) because the asset does not exist
This example demonstrates:
- 1Using
nft-transfer?
to transfer an NFT from the sender to the recipient. - 2Implementing a public function to handle the transfer operation.
- 3Handling both the successful transfer and the case where the sender no longer owns the asset.
- 4Handling the case where the asset does not exist.
Common Pitfalls
- 1Using
nft-transfer?
without ensuring thesender
owns the NFT, causing the operation to fail. - 2Assuming the
sender
andrecipient
are the same principal, leading to an invalid transfer. - 3Not handling all possible conditions, resulting in incomplete NFT management.
- 4Overlooking the need for proper error handling and validation.
Related Functions
nft-mint?
: Mints a new non-fungible token.nft-get-owner?
: Retrieves the owner of a non-fungible token.nft-burn?
: Burns a non-fungible token.
Conclusion
The nft-transfer?
function is a fundamental tool for transferring ownership of non-fungible tokens in Clarity smart contracts. It allows developers to change NFT ownership, implement transfer logic, and ensure data integrity. When used effectively, nft-transfer?
enhances the reliability and maintainability of your smart contract code by providing a clear and concise way to handle NFT transfer operations.