{
  "$schema": "https://degreesofsatoshi.com/encyclopedia/schemas/article-v1.json",
  "schemaVersion": "1.0.0",
  "id": "ethereum-token-approvals",
  "canonical": "https://degreesofsatoshi.com/encyclopedia/ethereum-token-approvals/",
  "collection": "ethereum",
  "title": "Token approvals: what a spender can do after you authorize it",
  "description": "Walk through an ERC-20 allowance example and compare token, NFT and operator approvals, including revocation and the limits of disconnecting a wallet.",
  "aliases": [
    "token allowance",
    "approve transaction",
    "revoke approval",
    "unlimited approval"
  ],
  "dates": {
    "published": "2026-10-02",
    "modified": "2026-10-02",
    "verified": "2026-10-02T18:16:35.976Z",
    "dataAsOf": null
  },
  "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": "A token approval gives another address or contract permission to move specified assets under the token’s rules. ERC-20 uses spending allowances; NFT standards offer token-specific or operator-wide permissions. Disconnecting a website is different from changing an onchain approval, and an approval can remain after the original interaction ends.",
    "claimId": "ethereum-token-approvals-quick-answer",
    "sourceIds": [
      "erc20",
      "erc721",
      "erc1155",
      "eip1193"
    ]
  },
  "keyFacts": [
    {
      "label": "ERC-20 allowance",
      "value": "The remaining amount a spender is authorized to transfer",
      "sourceIds": [
        "erc20"
      ],
      "id": "erc-20-allowance",
      "claimId": "ethereum-token-approvals-fact-erc-20-allowance"
    },
    {
      "label": "NFT scope",
      "value": "A token or an operator-wide permission, depending on the method",
      "sourceIds": [
        "erc721"
      ],
      "id": "nft-scope",
      "claimId": "ethereum-token-approvals-fact-nft-scope"
    },
    {
      "label": "Revocation",
      "value": "Changes permission; it does not reverse a completed transfer",
      "sourceIds": [
        "erc20",
        "erc721"
      ],
      "id": "revocation",
      "claimId": "ethereum-token-approvals-fact-revocation"
    }
  ],
  "prerequisites": [
    "erc-20-tokens",
    "ethereum-wallet-requests"
  ],
  "sections": [
    {
      "id": "two-step-flow",
      "heading": "Connection does not grant the same authority as approval",
      "sourceIds": [
        "edition-erc20",
        "edition-eip2612",
        "eip1193"
      ],
      "paragraphs": [
        "Connecting an account to a site and granting an on-chain token allowance are separate actions. ERC-20 approval identifies a spender and an amount under the token’s rules. The spender later uses transferFrom to act within the allowance.",
        "A supported permit can authorize an allowance by signature, with another party paying to submit it. The ERC-2612 deadline limits accepting that permit; it does not automatically expire the allowance already established. Disconnecting the site does not change this on-chain state."
      ]
    },
    {
      "id": "allowance-example",
      "heading": "Example: authorizing 100 units is not the same as paying 100 units",
      "sourceIds": [
        "erc20"
      ],
      "paragraphs": [
        "Suppose a token balance is 300 units and an account approves a spender for 100. The approval itself need not change the 300-unit balance. If the spender then transfers 40 under an ordinary decreasing-allowance implementation, 60 remains authorized.",
        "The example assumes that implementation’s allowance behavior. A very large or specially handled allowance can leave continuing authority. Read the amount and spender, not simply the name of the application displaying the request."
      ]
    },
    {
      "id": "different-standards",
      "heading": "NFT operators can receive broader permissions",
      "sourceIds": [
        "erc721",
        "erc1155"
      ],
      "paragraphs": [
        "ERC-721 distinguishes one-token approval from approval-for-all for an operator. ERC-1155’s standard operator approval covers the owner’s token types within that contract.",
        "Those permissions do not map neatly to an ERC-20 numerical allowance. A wallet should describe whether the request authorizes a quantity, a specific token or an operator across a collection."
      ]
    },
    {
      "id": "changing-permission",
      "heading": "Closing a tab and revoking permission affect different systems",
      "sourceIds": [
        "eip1193",
        "erc20",
        "erc721"
      ],
      "paragraphs": [
        "Disconnecting a site changes its wallet connection or account access. An onchain allowance lives in contract state and requires the appropriate state change to alter it. Closing a browser does not edit that state.",
        "Revocation also cannot undo assets already transferred. A pending revocation may compete with other transactions before inclusion. ERC-20 additionally warns about changing an existing nonzero allowance and recommends an interface flow through zero."
      ]
    }
  ],
  "faq": [
    {
      "question": "Is an approval itself always a transfer?",
      "answer": "No. It commonly updates permission so a spender can perform a separate transfer later. The approval transaction can still consume gas.",
      "sourceIds": [
        "erc20",
        "gas"
      ]
    },
    {
      "question": "Does disconnecting an application revoke its allowance?",
      "answer": "No. Provider connection state and token-contract permission are separate. The relevant onchain allowance or approval must be changed.",
      "sourceIds": [
        "eip1193",
        "erc20"
      ]
    },
    {
      "question": "Can revocation recover tokens already moved?",
      "answer": "No. Revoking permission limits subsequent use once effective; it is not a reversal of a completed token transfer.",
      "sourceIds": [
        "erc20",
        "erc721"
      ]
    }
  ],
  "claims": [
    {
      "id": "ethereum-token-approvals-quick-answer",
      "articleSlug": "ethereum-token-approvals",
      "statement": "A token approval gives another address or contract permission to move specified assets under the token’s rules. ERC-20 uses spending allowances; NFT standards offer token-specific or operator-wide permissions. Disconnecting a website is different from changing an onchain approval, and an approval can remain after the original interaction ends.",
      "sourceIds": [
        "source-e99ee03961c5d3e7",
        "source-b32b4b786f2e09c9",
        "source-ebda78c6293f67ad",
        "source-36f6aadc103db598"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-e99ee03961c5d3e7",
          "locator": "Methods: decimals, balanceOf, transfer, approve, transferFrom, allowance"
        },
        {
          "sourceId": "source-b32b4b786f2e09c9",
          "locator": "Specification; metadata extension; transfer and operator methods"
        },
        {
          "sourceId": "source-ebda78c6293f67ad",
          "locator": "Abstract; specification; safe transfer rules; metadata; approval"
        },
        {
          "sourceId": "source-36f6aadc103db598",
          "locator": "request; events; security considerations; user account exposure"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": null,
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T18:16:35.976Z",
        "reviewer": "Codex independent automated reviewer /root/verify_ethereum_100",
        "notes": [
          "Read ERC-20 approve/transferFrom/allowance and ERC-2612 assignment, nonce, inclusive submission deadline and any-caller behavior. Permit acceptance creates an allowance whose lifetime is not governed by permit deadline.",
          "Added freshly reopened existing EIP-1193 for connection-versus-contract-permission distinction; disconnection does not itself change the token ledger."
        ]
      }
    },
    {
      "id": "ethereum-token-approvals-fact-erc-20-allowance",
      "articleSlug": "ethereum-token-approvals",
      "statement": "ERC-20 allowance: The remaining amount a spender is authorized to transfer",
      "sourceIds": [
        "source-e99ee03961c5d3e7"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-e99ee03961c5d3e7",
          "locator": "Methods: decimals, balanceOf, transfer, approve, transferFrom, allowance"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": null,
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T18:16:35.976Z",
        "reviewer": "Codex independent automated reviewer /root/verify_ethereum_100",
        "notes": [
          "Read ERC-20 approve/transferFrom/allowance and ERC-2612 assignment, nonce, inclusive submission deadline and any-caller behavior. Permit acceptance creates an allowance whose lifetime is not governed by permit deadline.",
          "Added freshly reopened existing EIP-1193 for connection-versus-contract-permission distinction; disconnection does not itself change the token ledger."
        ]
      }
    },
    {
      "id": "ethereum-token-approvals-fact-nft-scope",
      "articleSlug": "ethereum-token-approvals",
      "statement": "NFT scope: A token or an operator-wide permission, depending on the method",
      "sourceIds": [
        "source-b32b4b786f2e09c9"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-b32b4b786f2e09c9",
          "locator": "Specification; metadata extension; transfer and operator methods"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": null,
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T18:16:35.976Z",
        "reviewer": "Codex independent automated reviewer /root/verify_ethereum_100",
        "notes": [
          "Read ERC-20 approve/transferFrom/allowance and ERC-2612 assignment, nonce, inclusive submission deadline and any-caller behavior. Permit acceptance creates an allowance whose lifetime is not governed by permit deadline.",
          "Added freshly reopened existing EIP-1193 for connection-versus-contract-permission distinction; disconnection does not itself change the token ledger."
        ]
      }
    },
    {
      "id": "ethereum-token-approvals-fact-revocation",
      "articleSlug": "ethereum-token-approvals",
      "statement": "Revocation: Changes permission; it does not reverse a completed transfer",
      "sourceIds": [
        "source-e99ee03961c5d3e7",
        "source-b32b4b786f2e09c9"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-e99ee03961c5d3e7",
          "locator": "Methods: decimals, balanceOf, transfer, approve, transferFrom, allowance"
        },
        {
          "sourceId": "source-b32b4b786f2e09c9",
          "locator": "Specification; metadata extension; transfer and operator methods"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": null,
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T18:16:35.976Z",
        "reviewer": "Codex independent automated reviewer /root/verify_ethereum_100",
        "notes": [
          "Read ERC-20 approve/transferFrom/allowance and ERC-2612 assignment, nonce, inclusive submission deadline and any-caller behavior. Permit acceptance creates an allowance whose lifetime is not governed by permit deadline.",
          "Added freshly reopened existing EIP-1193 for connection-versus-contract-permission distinction; disconnection does not itself change the token ledger."
        ]
      }
    }
  ],
  "sources": [
    {
      "id": "erc20",
      "label": "ERC-20: Token Standard",
      "publisher": "Ethereum Request for Comments",
      "url": "https://raw.githubusercontent.com/ethereum/ERCs/583335b7912e51b1ea515bb662532dd29b27e786/ERCS/erc-20.md",
      "canonicalUrl": "https://eips.ethereum.org/EIPS/eip-20",
      "version": "583335b7912e51b1ea515bb662532dd29b27e786",
      "checkedAt": "2026-10-02T14:35:55.037727+00:00",
      "locator": "Methods: decimals, balanceOf, transfer, approve, transferFrom, allowance",
      "sha256": "50d0bdc535ed8987ac5c124cb5f9c39606806c97e909aae66ef4b747dd9c93dd",
      "note": "Defines fungible token balances, optional display metadata and spending allowance behavior.",
      "recordId": "source-e99ee03961c5d3e7",
      "contentSha256": "50d0bdc535ed8987ac5c124cb5f9c39606806c97e909aae66ef4b747dd9c93dd"
    },
    {
      "id": "erc721",
      "label": "ERC-721: Non-Fungible Token Standard",
      "publisher": "Ethereum Request for Comments",
      "url": "https://raw.githubusercontent.com/ethereum/ERCs/583335b7912e51b1ea515bb662532dd29b27e786/ERCS/erc-721.md",
      "canonicalUrl": "https://eips.ethereum.org/EIPS/eip-721",
      "version": "583335b7912e51b1ea515bb662532dd29b27e786",
      "checkedAt": "2026-10-02T14:35:55.241155+00:00",
      "locator": "Specification; metadata extension; transfer and operator methods",
      "sha256": "238787165c08ac748928ffad57a24045802174bb38220af9e7b63c44778b7372",
      "note": "Defines token-specific ownership, transfer approvals, metadata pointers and receiving-contract checks.",
      "recordId": "source-b32b4b786f2e09c9",
      "contentSha256": "238787165c08ac748928ffad57a24045802174bb38220af9e7b63c44778b7372"
    },
    {
      "id": "erc1155",
      "label": "ERC-1155: Multi Token Standard",
      "publisher": "Ethereum Request for Comments",
      "url": "https://raw.githubusercontent.com/ethereum/ERCs/583335b7912e51b1ea515bb662532dd29b27e786/ERCS/erc-1155.md",
      "canonicalUrl": "https://eips.ethereum.org/EIPS/eip-1155",
      "version": "583335b7912e51b1ea515bb662532dd29b27e786",
      "checkedAt": "2026-10-02T14:35:55.247570+00:00",
      "locator": "Abstract; specification; safe transfer rules; metadata; approval",
      "sha256": "beac04fc902314ec0d60000e3bcb73cb7080d586f6a718b6b35a6d68a8ac98b1",
      "note": "Defines per-ID balances, batched transfers, receiver checks and operator-wide approval.",
      "recordId": "source-ebda78c6293f67ad",
      "contentSha256": "beac04fc902314ec0d60000e3bcb73cb7080d586f6a718b6b35a6d68a8ac98b1"
    },
    {
      "id": "eip1193",
      "label": "EIP-1193: Ethereum Provider JavaScript API",
      "publisher": "Ethereum Improvement Proposals",
      "url": "https://raw.githubusercontent.com/ethereum/EIPs/ac912ca6a9685590345dd8e5736cda75976d0131/EIPS/eip-1193.md",
      "canonicalUrl": "https://eips.ethereum.org/EIPS/eip-1193",
      "version": "ac912ca6a9685590345dd8e5736cda75976d0131",
      "checkedAt": "2026-10-02T14:35:55.037764+00:00",
      "locator": "request; events; security considerations; user account exposure",
      "sha256": "a3b5bca210b6818321c95279b9a47622343cb0eb51db058f1326b5e25ee4040d",
      "note": "Defines wallet provider requests, account/chain changes and the boundary between provider communication and wallet permission.",
      "recordId": "source-36f6aadc103db598",
      "contentSha256": "a3b5bca210b6818321c95279b9a47622343cb0eb51db058f1326b5e25ee4040d"
    },
    {
      "id": "gas",
      "label": "Gas and fees",
      "publisher": "ethereum.org contributors",
      "url": "https://raw.githubusercontent.com/ethereum/ethereum-org-website/dcc900ff125891da5b6c723b905a7113cf1bd864/public/content/developers/docs/gas/index.md",
      "canonicalUrl": "https://ethereum.org/en/developers/docs/gas/",
      "version": "dcc900ff125891da5b6c723b905a7113cf1bd864",
      "checkedAt": "2026-10-02T14:35:40.393022+00:00",
      "locator": "How are gas fees calculated; base fee; gas limit",
      "sha256": "5af7b13e15072d45f38e6fd48e414324c7229b6110d6f8f7fc14100e5153509d",
      "note": "Supports gas units, ETH/gwei units, base/priority fees, resource limits and charges for executed failed transactions.",
      "recordId": "source-a8f47d83f0f10a68",
      "contentSha256": "5af7b13e15072d45f38e6fd48e414324c7229b6110d6f8f7fc14100e5153509d"
    },
    {
      "id": "edition-erc20",
      "label": "ERC-20 Token Standard",
      "publisher": "Ethereum Improvement Proposals",
      "url": "https://eips.ethereum.org/EIPS/eip-20",
      "locator": "totalSupply; balanceOf; transfer; decimals; approve; allowance; transferFrom; Transfer",
      "note": "Token supply, displayed units and balance accounting.",
      "version": "ERC-20",
      "checkedAt": "2026-10-02T17:03:45.826Z",
      "contentSha256": "98bda5e4707841a68684879878c4c165fdaa47d89ed69ebf232ab9be06ff050e",
      "recordId": "source-ac4ad503a55127bb"
    },
    {
      "id": "edition-eip2612",
      "label": "Permit Extension for EIP-20 Signed Approvals",
      "publisher": "Ethereum Improvement Proposals",
      "url": "https://eips.ethereum.org/EIPS/eip-2612",
      "locator": "Specification; Security Considerations",
      "note": "Signed token allowances, deadlines, nonces and domain checks.",
      "version": "EIP/ERC-2612; retrieved document hash recorded",
      "checkedAt": "2026-10-02T17:03:42.295Z",
      "contentSha256": "aa208d281cac5dbb182656bc7a3feab982df5c5df9e2f6dfa9b9efb5fc578ed1",
      "recordId": "source-1f53bb744ddddb6b"
    }
  ],
  "related": {
    "articles": [
      "ethereum-wallet-requests",
      "erc-20-tokens",
      "erc-721-nfts"
    ],
    "dossiers": [],
    "wallets": []
  },
  "revisionHistory": [
    {
      "date": "2026-10-02",
      "kind": "published",
      "summary": "First publication after primary-source research and independent automated verification."
    },
    {
      "date": "2026-10-02",
      "kind": "substantive-edit",
      "summary": "Expanded explanation: Connection does not grant the same authority as approval. Worked examples are illustrative; source checks and independent verification are recorded separately."
    }
  ],
  "citation": "Degrees of Satoshi editorial project. “Token approvals: what a spender can do after you authorize it.” Published 2026-10-02; updated 2026-10-02. https://degreesofsatoshi.com/encyclopedia/ethereum-token-approvals/"
}
