{
    "Function": "transferFrom",
    "File": "contracts/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
    "Parent Contracts": [
        "contracts/openzeppelin-solidity/contracts/token/ERC20/extensions/IERC20Metadata.sol",
        "contracts/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol",
        "contracts/openzeppelin-solidity/contracts/utils/Context.sol"
    ],
    "High-Level Calls": [],
    "Internal Calls": [
        "require(bool,string)",
        "_msgSender",
        "_msgSender",
        "_approve",
        "_transfer"
    ],
    "Library Calls": [],
    "Low-Level Calls": [],
    "Code": "function transferFrom(\n        address sender,\n        address recipient,\n        uint256 amount\n    ) public virtual override returns (bool) {\n        uint256 currentAllowance = _allowances[sender][_msgSender()];\n        require(currentAllowance >= amount, \"ERC20: transfer amount exceeds allowance\");\n        unchecked {\n            _approve(sender, _msgSender(), currentAllowance - amount);\n        }\n\n        _transfer(sender, recipient, amount);\n\n        return true;\n    }"
}