{
  "$schema": "https://evmnow.github.io/contract-metadata/v1/interface.schema.json",
  "interfaceId": "0x80ac58cd",
  "groups": {
    "erc721": {
      "label": "ERC-721",
      "order": 99
    }
  },
  "actions": {
    "balanceOf": {
      "title": "Balance",
      "description": "Check how many tokens an address owns.",
      "stateMutability": "view",
      "group": "erc721",
      "params": {
        "_0": {
          "label": "holder",
          "type": "address"
        }
      },
      "returns": {
        "_0": {
          "label": "balance"
        }
      }
    },
    "my-balance": {
      "function": "balanceOf",
      "title": "My Balance",
      "description": "Check how many tokens you own in this collection.",
      "stateMutability": "view",
      "group": "erc721",
      "params": {
        "_0": {
          "label": "holder",
          "type": "address",
          "autofill": "connected-address",
          "hidden": true
        }
      },
      "returns": {
        "_0": {
          "label": "balance"
        }
      }
    },
    "ownerOf": {
      "title": "Owner",
      "description": "Look up the current owner of a specific token.",
      "stateMutability": "view",
      "group": "erc721",
      "params": {
        "_0": {
          "label": "token ID",
          "type": "token-id"
        }
      },
      "returns": {
        "_0": {
          "label": "owner",
          "type": "address"
        }
      }
    },
    "approve": {
      "title": "Approve",
      "description": "Approve an address to transfer a specific token on your behalf.",
      "group": "erc721",
      "intent": "Approve {_0} to transfer token #{_1}",
      "params": {
        "_0": {
          "label": "operator",
          "type": "address"
        },
        "_1": {
          "label": "token ID",
          "type": "token-id"
        }
      },
      "related": [
        "revoke",
        "getApproved"
      ]
    },
    "revoke": {
      "function": "approve",
      "title": "Revoke Approval",
      "description": "Revoke a per-token approval by setting the operator to the zero address.",
      "group": "erc721",
      "intent": "Revoke approval for token #{_1}",
      "params": {
        "_0": {
          "label": "operator",
          "type": "address",
          "autofill": "zero-address",
          "hidden": true
        },
        "_1": {
          "label": "token ID",
          "type": "token-id"
        }
      },
      "related": [
        "approve",
        "getApproved"
      ]
    },
    "getApproved": {
      "title": "Get Approved",
      "description": "Check which address is approved to transfer a specific token.",
      "stateMutability": "view",
      "group": "erc721",
      "params": {
        "_0": {
          "label": "token ID",
          "type": "token-id"
        }
      },
      "returns": {
        "_0": {
          "label": "approved operator",
          "type": "address"
        }
      }
    },
    "setApprovalForAll": {
      "title": "Set Approval for All",
      "description": "Approve or revoke an operator to manage all your tokens.",
      "group": "erc721",
      "warning": "Grants full control over all your tokens in this collection to this operator.",
      "params": {
        "_0": {
          "label": "operator",
          "type": "address"
        },
        "_1": {
          "label": "approved",
          "type": "boolean"
        }
      },
      "related": [
        "grant-approval-for-all",
        "revoke-approval-for-all",
        "isApprovedForAll"
      ]
    },
    "grant-approval-for-all": {
      "function": "setApprovalForAll",
      "title": "Grant Operator Approval",
      "description": "Give an operator permission to manage every token you own in this collection.",
      "group": "erc721",
      "intent": "Grant {_0} operator approval for all tokens",
      "warning": "This operator will be able to transfer any of your tokens at any time.",
      "params": {
        "_0": {
          "label": "operator",
          "type": "address"
        },
        "_1": {
          "label": "approved",
          "autofill": {
            "type": "constant",
            "value": "true"
          },
          "hidden": true
        }
      },
      "related": [
        "setApprovalForAll",
        "revoke-approval-for-all",
        "isApprovedForAll"
      ]
    },
    "revoke-approval-for-all": {
      "function": "setApprovalForAll",
      "title": "Revoke Operator Approval",
      "description": "Revoke an operator's permission to manage your tokens in this collection.",
      "group": "erc721",
      "intent": "Revoke {_0}'s operator approval",
      "params": {
        "_0": {
          "label": "operator",
          "type": "address"
        },
        "_1": {
          "label": "approved",
          "autofill": {
            "type": "constant",
            "value": "false"
          },
          "hidden": true
        }
      },
      "related": [
        "setApprovalForAll",
        "grant-approval-for-all",
        "isApprovedForAll"
      ]
    },
    "isApprovedForAll": {
      "title": "Is Approved for All",
      "description": "Check whether an operator is approved to manage all tokens for an owner.",
      "stateMutability": "view",
      "group": "erc721",
      "params": {
        "_0": {
          "label": "owner",
          "type": "address"
        },
        "_1": {
          "label": "operator",
          "type": "address"
        }
      },
      "returns": {
        "_0": {
          "label": "approved",
          "type": "boolean"
        }
      }
    },
    "transferFrom": {
      "title": "Transfer",
      "description": "Transfer a token to another address.",
      "group": "erc721",
      "intent": "Transfer token #{_2} from {_0} to {_1}",
      "params": {
        "_0": {
          "label": "from",
          "type": "address"
        },
        "_1": {
          "label": "to",
          "type": "address"
        },
        "_2": {
          "label": "token ID",
          "type": "token-id"
        }
      }
    },
    "safeTransferFrom": {
      "function": "safeTransferFrom(address,address,uint256)",
      "title": "Safe Transfer",
      "description": "Transfer a token to another address, reverting if the recipient cannot receive ERC-721 tokens.",
      "group": "erc721",
      "intent": "Transfer token #{_2} from {_0} to {_1}",
      "params": {
        "_0": {
          "label": "from",
          "type": "address"
        },
        "_1": {
          "label": "to",
          "type": "address"
        },
        "_2": {
          "label": "token ID",
          "type": "token-id"
        }
      },
      "related": ["safeTransferFrom-with-data"]
    },
    "safeTransferFrom-with-data": {
      "function": "safeTransferFrom(address,address,uint256,bytes)",
      "title": "Safe Transfer (with Data)",
      "description": "Safe transfer that also forwards extra data to the recipient's onERC721Received hook.",
      "group": "erc721",
      "intent": "Transfer token #{_2} from {_0} to {_1}",
      "params": {
        "_0": {
          "label": "from",
          "type": "address"
        },
        "_1": {
          "label": "to",
          "type": "address"
        },
        "_2": {
          "label": "token ID",
          "type": "token-id"
        },
        "_3": {
          "label": "data",
          "description": "Extra bytes passed through to the recipient contract."
        }
      },
      "related": ["safeTransferFrom"]
    }
  },
  "events": {
    "Transfer": {
      "description": "Emitted when a token is transferred.",
      "params": {
        "_0": {
          "label": "from"
        },
        "_1": {
          "label": "to"
        },
        "_2": {
          "label": "token ID",
          "type": "token-id"
        }
      }
    },
    "Approval": {
      "description": "Emitted when an approval is set for a specific token.",
      "params": {
        "_0": {
          "label": "owner"
        },
        "_1": {
          "label": "approved operator"
        },
        "_2": {
          "label": "token ID",
          "type": "token-id"
        }
      }
    },
    "ApprovalForAll": {
      "description": "Emitted when an operator is approved or revoked for all tokens.",
      "params": {
        "_0": {
          "label": "owner"
        },
        "_1": {
          "label": "operator"
        },
        "_2": {
          "label": "approved"
        }
      }
    }
  }
}
