{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC6909TokenSupply",
  "sourceName": "contracts/token/ERC6909/extensions/ERC6909TokenSupply.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "allowance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "ERC6909InsufficientAllowance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "ERC6909InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "approver",
          "type": "address"
        }
      ],
      "name": "ERC6909InvalidApprover",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "ERC6909InvalidReceiver",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "ERC6909InvalidSender",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "ERC6909InvalidSpender",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "OperatorSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "isOperator",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setOperator",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052348015600e575f5ffd5b506109008061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061008f575f3560e01c8063558a729711610063578063558a729714610102578063598af9e714610115578063b6363cf214610154578063bd85b0391461018f578063fe99049a146101ae575f5ffd5b8062fdd58e1461009357806301ffc9a7146100b9578063095bcdb6146100dc578063426a8493146100ef575b5f5ffd5b6100a66100a136600461072b565b6101c1565b6040519081526020015b60405180910390f35b6100cc6100c7366004610753565b6101e9565b60405190151581526020016100b0565b6100cc6100ea366004610781565b61020d565b6100cc6100fd366004610781565b610224565b6100cc6101103660046107b1565b610231565b6100a66101233660046107ea565b6001600160a01b039283165f9081526002602090815260408083209490951682529283528381209181529152205490565b6100cc610162366004610824565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205460ff1690565b6100a661019d366004610855565b5f9081526003602052604090205490565b6100cc6101bc36600461086c565b610246565b6001600160a01b0382165f908152602081815260408083208484529091529020545b92915050565b5f6001600160e01b0319821663bd85b03960e01b14806101e357506101e3826102af565b5f61021a338585856102e3565b5060019392505050565b5f61021a3385858561034c565b5f61023d33848461040b565b50600192915050565b5f336001600160a01b038616811480159061028657506001600160a01b038087165f9081526001602090815260408083209385168352929052205460ff16155b1561029757610297868286866104c9565b6102a3868686866102e3565b50600195945050505050565b5f6001600160e01b03198216630f632fb360e01b14806101e357506301ffc9a760e01b6001600160e01b03198316146101e3565b6001600160a01b038416610311576040516301486a4160e71b81525f60048201526024015b60405180910390fd5b6001600160a01b03831661033a57604051630b8bbd6160e41b81525f6004820152602401610308565b61034684848484610579565b50505050565b6001600160a01b0384166103755760405163198ecd5360e31b81525f6004820152602401610308565b6001600160a01b03831661039e57604051636f65f46560e01b81525f6004820152602401610308565b6001600160a01b038481165f8181526002602090815260408083209488168084529482528083208784528252918290208590559051848152859392917fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a7910160405180910390a450505050565b6001600160a01b0383166104345760405163198ecd5360e31b81525f6004820152602401610308565b6001600160a01b03821661045d57604051636f65f46560e01b81525f6004820152602401610308565b6001600160a01b038381165f81815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa267910160405180910390a3505050565b6001600160a01b038481165f9081526002602090815260408083209387168352928152828220858352905220545f19811015610572578181101561054057604051632c51fead60e11b81526001600160a01b0385166004820152602481018290526044810183905260648101849052608401610308565b6001600160a01b038086165f908152600260209081526040808320938816835292815282822086835290522082820390555b5050505050565b610585848484846105de565b6001600160a01b0384166105b6575f82815260036020526040812080548392906105b09084906108ab565b90915550505b6001600160a01b038316610346575f8281526003602052604090208054829003905550505050565b336001600160a01b03851615610677576001600160a01b0385165f9081526020818152604080832086845290915290205482811015610650576040516302c6d3fb60e61b81526001600160a01b0387166004820152602481018290526044810184905260648101859052608401610308565b6001600160a01b0386165f9081526020818152604080832087845290915290209083900390555b6001600160a01b038416156106bc576001600160a01b0384165f90815260208181526040808320868452909152812080548492906106b69084906108ab565b90915550505b604080516001600160a01b03838116825260208201859052859281881692918916917f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859910160405180910390a45050505050565b80356001600160a01b0381168114610726575f5ffd5b919050565b5f5f6040838503121561073c575f5ffd5b61074583610710565b946020939093013593505050565b5f60208284031215610763575f5ffd5b81356001600160e01b03198116811461077a575f5ffd5b9392505050565b5f5f5f60608486031215610793575f5ffd5b61079c84610710565b95602085013595506040909401359392505050565b5f5f604083850312156107c2575f5ffd5b6107cb83610710565b9150602083013580151581146107df575f5ffd5b809150509250929050565b5f5f5f606084860312156107fc575f5ffd5b61080584610710565b925061081360208501610710565b929592945050506040919091013590565b5f5f60408385031215610835575f5ffd5b61083e83610710565b915061084c60208401610710565b90509250929050565b5f60208284031215610865575f5ffd5b5035919050565b5f5f5f5f6080858703121561087f575f5ffd5b61088885610710565b935061089660208601610710565b93969395505050506040820135916060013590565b808201808211156101e357634e487b7160e01b5f52601160045260245ffdfea26469706673582212203fb7962a7b4605514e7a17759c34d08ebd80bc662977b8d1d173affbe81bbac564736f6c634300081f0033",
  "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061008f575f3560e01c8063558a729711610063578063558a729714610102578063598af9e714610115578063b6363cf214610154578063bd85b0391461018f578063fe99049a146101ae575f5ffd5b8062fdd58e1461009357806301ffc9a7146100b9578063095bcdb6146100dc578063426a8493146100ef575b5f5ffd5b6100a66100a136600461072b565b6101c1565b6040519081526020015b60405180910390f35b6100cc6100c7366004610753565b6101e9565b60405190151581526020016100b0565b6100cc6100ea366004610781565b61020d565b6100cc6100fd366004610781565b610224565b6100cc6101103660046107b1565b610231565b6100a66101233660046107ea565b6001600160a01b039283165f9081526002602090815260408083209490951682529283528381209181529152205490565b6100cc610162366004610824565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205460ff1690565b6100a661019d366004610855565b5f9081526003602052604090205490565b6100cc6101bc36600461086c565b610246565b6001600160a01b0382165f908152602081815260408083208484529091529020545b92915050565b5f6001600160e01b0319821663bd85b03960e01b14806101e357506101e3826102af565b5f61021a338585856102e3565b5060019392505050565b5f61021a3385858561034c565b5f61023d33848461040b565b50600192915050565b5f336001600160a01b038616811480159061028657506001600160a01b038087165f9081526001602090815260408083209385168352929052205460ff16155b1561029757610297868286866104c9565b6102a3868686866102e3565b50600195945050505050565b5f6001600160e01b03198216630f632fb360e01b14806101e357506301ffc9a760e01b6001600160e01b03198316146101e3565b6001600160a01b038416610311576040516301486a4160e71b81525f60048201526024015b60405180910390fd5b6001600160a01b03831661033a57604051630b8bbd6160e41b81525f6004820152602401610308565b61034684848484610579565b50505050565b6001600160a01b0384166103755760405163198ecd5360e31b81525f6004820152602401610308565b6001600160a01b03831661039e57604051636f65f46560e01b81525f6004820152602401610308565b6001600160a01b038481165f8181526002602090815260408083209488168084529482528083208784528252918290208590559051848152859392917fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a7910160405180910390a450505050565b6001600160a01b0383166104345760405163198ecd5360e31b81525f6004820152602401610308565b6001600160a01b03821661045d57604051636f65f46560e01b81525f6004820152602401610308565b6001600160a01b038381165f81815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa267910160405180910390a3505050565b6001600160a01b038481165f9081526002602090815260408083209387168352928152828220858352905220545f19811015610572578181101561054057604051632c51fead60e11b81526001600160a01b0385166004820152602481018290526044810183905260648101849052608401610308565b6001600160a01b038086165f908152600260209081526040808320938816835292815282822086835290522082820390555b5050505050565b610585848484846105de565b6001600160a01b0384166105b6575f82815260036020526040812080548392906105b09084906108ab565b90915550505b6001600160a01b038316610346575f8281526003602052604090208054829003905550505050565b336001600160a01b03851615610677576001600160a01b0385165f9081526020818152604080832086845290915290205482811015610650576040516302c6d3fb60e61b81526001600160a01b0387166004820152602481018290526044810184905260648101859052608401610308565b6001600160a01b0386165f9081526020818152604080832087845290915290209083900390555b6001600160a01b038416156106bc576001600160a01b0384165f90815260208181526040808320868452909152812080548492906106b69084906108ab565b90915550505b604080516001600160a01b03838116825260208201859052859281881692918916917f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859910160405180910390a45050505050565b80356001600160a01b0381168114610726575f5ffd5b919050565b5f5f6040838503121561073c575f5ffd5b61074583610710565b946020939093013593505050565b5f60208284031215610763575f5ffd5b81356001600160e01b03198116811461077a575f5ffd5b9392505050565b5f5f5f60608486031215610793575f5ffd5b61079c84610710565b95602085013595506040909401359392505050565b5f5f604083850312156107c2575f5ffd5b6107cb83610710565b9150602083013580151581146107df575f5ffd5b809150509250929050565b5f5f5f606084860312156107fc575f5ffd5b61080584610710565b925061081360208501610710565b929592945050506040919091013590565b5f5f60408385031215610835575f5ffd5b61083e83610710565b915061084c60208401610710565b90509250929050565b5f60208284031215610865575f5ffd5b5035919050565b5f5f5f5f6080858703121561087f575f5ffd5b61088885610710565b935061089660208601610710565b93969395505050506040820135916060013590565b808201808211156101e357634e487b7160e01b5f52601160045260245ffdfea26469706673582212203fb7962a7b4605514e7a17759c34d08ebd80bc662977b8d1d173affbe81bbac564736f6c634300081f0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
