{
  "$schema": "https://degreesofsatoshi.com/encyclopedia/schemas/article-v1.json",
  "schemaVersion": "1.0.0",
  "id": "nft-safe-transfers",
  "canonical": "https://degreesofsatoshi.com/encyclopedia/nft-safe-transfers/",
  "collection": "ethereum",
  "title": "Sending an NFT to a contract: why safe transfers can fail",
  "description": "Understand the receiver checks in NFT safe transfers and why they do not verify the human recipient or guarantee recovery.",
  "aliases": [
    "NFT safe transfer failed",
    "send NFT to smart contract"
  ],
  "dates": {
    "published": "2026-10-02",
    "modified": "2026-10-02",
    "verified": "2026-10-02T19:27:58.939Z",
    "dataAsOf": "2026-10-02"
  },
  "authorship": {
    "publisher": "Degrees of Satoshi editorial project",
    "process": "AI-assisted research and drafting with a separate automated source-verification pass; no external expert or named human review is implied."
  },
  "quickAnswer": {
    "text": "ERC-721 safeTransferFrom checks whether a contract recipient implements the required receiver response; otherwise the transfer reverts. ERC-1155 has corresponding receiver rules. “Safe” describes this contract-compatibility check. It does not confirm the recipient’s identity, promise the NFT can later be withdrawn or protect against sending to the wrong ordinary account.",
    "claimId": "nft-safe-transfers-quick-answer",
    "sourceIds": [
      "x425-eth-erc721",
      "x425-eth-erc1155"
    ]
  },
  "keyFacts": [
    {
      "label": "ERC-721 hook",
      "value": "A contract recipient must return the expected onERC721Received response.",
      "sourceIds": [
        "x425-eth-erc721"
      ],
      "id": "erc-721-hook",
      "claimId": "nft-safe-transfers-fact-erc-721-hook"
    },
    {
      "label": "ERC-1155 hook",
      "value": "Single and batch transfers use corresponding receiver callbacks.",
      "sourceIds": [
        "x425-eth-erc1155"
      ],
      "id": "erc-1155-hook",
      "claimId": "nft-safe-transfers-fact-erc-1155-hook"
    },
    {
      "label": "Identity",
      "value": "The receiver check concerns contract behavior, not a person’s identity.",
      "sourceIds": [
        "x425-eth-erc721"
      ],
      "id": "identity",
      "claimId": "nft-safe-transfers-fact-identity"
    }
  ],
  "prerequisites": [
    "erc-721-nfts",
    "erc-1155-multi-tokens"
  ],
  "sections": [
    {
      "id": "receiver",
      "heading": "A contract needs a way to acknowledge receipt",
      "sourceIds": [
        "x425-eth-erc721",
        "x425-eth-erc1155"
      ],
      "paragraphs": [
        "Contracts can receive assets without having a useful way to manage them. The safe-transfer interfaces require an appropriate receiver response when the destination is a contract under the standard’s rules. A missing or incorrect response causes the transfer to revert.",
        "ERC-721’s plain transferFrom lacks this receiver handshake. Choosing it to bypass an error can leave the token at a contract that cannot return it."
      ]
    },
    {
      "id": "example",
      "heading": "A treasury must support the token standard",
      "sourceIds": [
        "x425-eth-erc721",
        "x425-eth-erc1155"
      ],
      "paragraphs": [
        "Imagine sending an ERC-721 token to a treasury contract that accepts ERC-1155 callbacks but has no ERC-721 receiver implementation. The ERC-721 safe transfer can fail even though the treasury handles other NFTs.",
        "The useful next check is the treasury’s supported receipt and withdrawal behavior, not trying a less protective transfer method."
      ]
    },
    {
      "id": "limits",
      "heading": "Accepted does not mean recoverable",
      "sourceIds": [
        "x425-eth-erc721"
      ],
      "paragraphs": [
        "A contract can return the receiver response while applying restrictive or malicious logic. A successful handshake therefore does not prove the intended owner can withdraw the NFT later.",
        "For an ordinary account, safe transfer does not check whether you typed the intended person’s address. Verify chain, recipient, collection and token ID before signing."
      ]
    }
  ],
  "faq": [
    {
      "question": "Can a safe transfer to the wrong ordinary address still succeed?",
      "answer": "Yes. The standard’s special receiver check is for contract compatibility. It does not establish that the address belongs to your intended recipient.",
      "sourceIds": [
        "x425-eth-erc721"
      ]
    },
    {
      "question": "Should I use transferFrom when safeTransferFrom fails?",
      "answer": "First determine why the recipient rejected the token. Bypassing the receiver check can place the NFT in a contract with no usable recovery path.",
      "sourceIds": [
        "x425-eth-erc721"
      ]
    }
  ],
  "claims": [
    {
      "id": "nft-safe-transfers-quick-answer",
      "articleSlug": "nft-safe-transfers",
      "statement": "ERC-721 safeTransferFrom checks whether a contract recipient implements the required receiver response; otherwise the transfer reverts. ERC-1155 has corresponding receiver rules. “Safe” describes this contract-compatibility check. It does not confirm the recipient’s identity, promise the NFT can later be withdrawn or protect against sending to the wrong ordinary account.",
      "sourceIds": [
        "source-b08b9aae11ea4085",
        "source-a8902fec2ff6f520"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-b08b9aae11ea4085",
          "locator": "safeTransferFrom; approve; setApprovalForAll; Transfer; metadata"
        },
        {
          "sourceId": "source-a8902fec2ff6f520",
          "locator": "Safe transfer rules; operator approvals; minting and burning"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T19:27:58.939Z",
        "reviewer": "Independent automated verification agent verify_bitcoin_stablecoins_100",
        "notes": [
          "Read ERC721 safeTransferFrom/code-size check/onERC721Received magic response and plain-transfer loss warning; ERC1155 correspondinghooks. Draft correctly limits safe to compatibility and allowswrongEOA or maliciousacceptor."
        ]
      }
    },
    {
      "id": "nft-safe-transfers-fact-erc-721-hook",
      "articleSlug": "nft-safe-transfers",
      "statement": "ERC-721 hook: A contract recipient must return the expected onERC721Received response.",
      "sourceIds": [
        "source-b08b9aae11ea4085"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-b08b9aae11ea4085",
          "locator": "safeTransferFrom; approve; setApprovalForAll; Transfer; metadata"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T19:27:58.939Z",
        "reviewer": "Independent automated verification agent verify_bitcoin_stablecoins_100",
        "notes": [
          "Read ERC721 safeTransferFrom/code-size check/onERC721Received magic response and plain-transfer loss warning; ERC1155 correspondinghooks. Draft correctly limits safe to compatibility and allowswrongEOA or maliciousacceptor."
        ]
      }
    },
    {
      "id": "nft-safe-transfers-fact-erc-1155-hook",
      "articleSlug": "nft-safe-transfers",
      "statement": "ERC-1155 hook: Single and batch transfers use corresponding receiver callbacks.",
      "sourceIds": [
        "source-a8902fec2ff6f520"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-a8902fec2ff6f520",
          "locator": "Safe transfer rules; operator approvals; minting and burning"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T19:27:58.939Z",
        "reviewer": "Independent automated verification agent verify_bitcoin_stablecoins_100",
        "notes": [
          "Read ERC721 safeTransferFrom/code-size check/onERC721Received magic response and plain-transfer loss warning; ERC1155 correspondinghooks. Draft correctly limits safe to compatibility and allowswrongEOA or maliciousacceptor."
        ]
      }
    },
    {
      "id": "nft-safe-transfers-fact-identity",
      "articleSlug": "nft-safe-transfers",
      "statement": "Identity: The receiver check concerns contract behavior, not a person’s identity.",
      "sourceIds": [
        "source-b08b9aae11ea4085"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-b08b9aae11ea4085",
          "locator": "safeTransferFrom; approve; setApprovalForAll; Transfer; metadata"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T19:27:58.939Z",
        "reviewer": "Independent automated verification agent verify_bitcoin_stablecoins_100",
        "notes": [
          "Read ERC721 safeTransferFrom/code-size check/onERC721Received magic response and plain-transfer loss warning; ERC1155 correspondinghooks. Draft correctly limits safe to compatibility and allowswrongEOA or maliciousacceptor."
        ]
      }
    }
  ],
  "sources": [
    {
      "id": "x425-eth-erc721",
      "label": "ERC-721 NFT standard",
      "publisher": "Ethereum Improvement Proposals",
      "url": "https://eips.ethereum.org/EIPS/eip-721",
      "locator": "safeTransferFrom; approve; setApprovalForAll; Transfer; metadata",
      "note": "Ownership, receiver checks, token-level and operator approvals, mint/burn event semantics.",
      "version": "ERC-721",
      "checkedAt": "2026-10-02T18:55:25.399Z",
      "contentSha256": "bedd672103f3ebb6803ce2bddb33a9ff3d23b08e8e3ae3173b6a5b016f65e2a1",
      "recordId": "source-b08b9aae11ea4085"
    },
    {
      "id": "x425-eth-erc1155",
      "label": "ERC-1155 multi-token standard",
      "publisher": "Ethereum Improvement Proposals",
      "url": "https://eips.ethereum.org/EIPS/eip-1155",
      "locator": "Safe transfer rules; operator approvals; minting and burning",
      "note": "Receiver acceptance, collection-wide operators, balance accounting and burn events.",
      "version": "ERC-1155",
      "checkedAt": "2026-10-02T18:55:25.400Z",
      "contentSha256": "50eece6ce1ad417b39ae7183a5626c6f9e3b11fc16a00ba5f630bc6fed01cfd2",
      "recordId": "source-a8902fec2ff6f520"
    }
  ],
  "related": {
    "articles": [
      "erc-721-nfts",
      "erc-1155-multi-tokens",
      "ethereum-reverted-transactions",
      "nft-minting",
      "nft-operator-approvals"
    ],
    "dossiers": [],
    "wallets": []
  },
  "revisionHistory": [
    {
      "date": "2026-10-02",
      "kind": "published",
      "summary": "First publication after primary-source research and separate automated verification."
    }
  ],
  "citation": "Degrees of Satoshi editorial project. “Sending an NFT to a contract: why safe transfers can fail.” Published 2026-10-02; updated 2026-10-02. https://degreesofsatoshi.com/encyclopedia/nft-safe-transfers/"
}
