{
  "_format": "hh-sol-artifact-1",
  "contractName": "NFTWallet",
  "sourceName": "contracts/NFTWallet.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "adminRole",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "NFTWalletCannotTransfer",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "NFT_OWNER",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "attachUser",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "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": "address",
          "name": "erc721",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferOut",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "withdrawToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50604051610ca0380380610ca083398101604081905261002f916100ec565b61003a600082610040565b5061011c565b61004a828261004e565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661004a576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556100a83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000602082840312156100fe57600080fd5b81516001600160a01b038116811461011557600080fd5b9392505050565b610b758061012b6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806336568abe1161007157806336568abe1461019e57806389476069146101b157806391d14854146101c4578063a217fddf146101d7578063d547741f146101df578063e11f2689146101f257600080fd5b806301ffc9a7146100b9578063078d3b79146100e1578063150b7a02146100f6578063248a9ca31461014757806329501871146101785780632f2ff15d1461018b575b600080fd5b6100cc6100c7366004610818565b610207565b60405190151581526020015b60405180910390f35b6100f46100ef36600461085e565b61023e565b005b61012e61010436600461089a565b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f95945050505050565b6040516001600160e01b031990911681526020016100d8565b61016a610155366004610935565b60009081526020819052604090206001015490565b6040519081526020016100d8565b6100f461018636600461094e565b6102f6565b6100f4610199366004610969565b61031d565b6100f46101ac366004610969565b610347565b6100f46101bf36600461094e565b6103c6565b6100cc6101d2366004610969565b6104c7565b61016a600081565b6100f46101ed366004610969565b6104f0565b61016a600080516020610b2083398151915281565b60006001600160e01b03198216637965db0b60e01b148061023857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6102496000336104c7565b15801561026b5750610269600080516020610b20833981519152336104c7565b155b1561028957604051633497394360e01b815260040160405180910390fd5b6040516323b872dd60e01b81523060048201526001600160a01b038381166024830152604482018390528416906323b872dd90606401600060405180830381600087803b1580156102d957600080fd5b505af11580156102ed573d6000803e3d6000fd5b50505050505050565b600061030181610515565b610319600080516020610b2083398151915283610522565b5050565b60008281526020819052604090206001015461033881610515565b6103428383610528565b505050565b6001600160a01b03811633146103bc5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61031982826105ac565b600080516020610b208339815191526103de81610515565b6040516370a0823160e01b815230600482015282906001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa15801561042e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104529190610995565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561049d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c191906109ae565b50505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008281526020819052604090206001015461050b81610515565b61034283836105ac565b61051f8133610611565b50565b61031982825b61053282826104c7565b610319576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556105683390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6105b682826104c7565b15610319576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61061b82826104c7565b61031957610633816001600160a01b03166014610675565b61063e836020610675565b60405160200161064f9291906109f4565b60408051601f198184030181529082905262461bcd60e51b82526103b391600401610a69565b60606000610684836002610ab2565b61068f906002610ac9565b67ffffffffffffffff8111156106a7576106a7610adc565b6040519080825280601f01601f1916602001820160405280156106d1576020820181803683370190505b509050600360fc1b816000815181106106ec576106ec610af2565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061071b5761071b610af2565b60200101906001600160f81b031916908160001a905350600061073f846002610ab2565b61074a906001610ac9565b90505b60018111156107c2576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061077e5761077e610af2565b1a60f81b82828151811061079457610794610af2565b60200101906001600160f81b031916908160001a90535060049490941c936107bb81610b08565b905061074d565b5083156108115760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016103b3565b9392505050565b60006020828403121561082a57600080fd5b81356001600160e01b03198116811461081157600080fd5b80356001600160a01b038116811461085957600080fd5b919050565b60008060006060848603121561087357600080fd5b61087c84610842565b925061088a60208501610842565b9150604084013590509250925092565b6000806000806000608086880312156108b257600080fd5b6108bb86610842565b94506108c960208701610842565b935060408601359250606086013567ffffffffffffffff808211156108ed57600080fd5b818801915088601f83011261090157600080fd5b81358181111561091057600080fd5b89602082850101111561092257600080fd5b9699959850939650602001949392505050565b60006020828403121561094757600080fd5b5035919050565b60006020828403121561096057600080fd5b61081182610842565b6000806040838503121561097c57600080fd5b8235915061098c60208401610842565b90509250929050565b6000602082840312156109a757600080fd5b5051919050565b6000602082840312156109c057600080fd5b8151801515811461081157600080fd5b60005b838110156109eb5781810151838201526020016109d3565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610a2c8160178501602088016109d0565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610a5d8160288401602088016109d0565b01602801949350505050565b6020815260008251806020840152610a888160408501602087016109d0565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761023857610238610a9c565b8082018082111561023857610238610a9c565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081610b1757610b17610a9c565b50600019019056fec3df401f63a41d9f333f158f681da44efbcd7612f21f8dc39c96fe9cda312edba26469706673582212207f739f5a53c705338aa90b7f09dcc3463961c86cc023fae177f08c294af6757e64736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806336568abe1161007157806336568abe1461019e57806389476069146101b157806391d14854146101c4578063a217fddf146101d7578063d547741f146101df578063e11f2689146101f257600080fd5b806301ffc9a7146100b9578063078d3b79146100e1578063150b7a02146100f6578063248a9ca31461014757806329501871146101785780632f2ff15d1461018b575b600080fd5b6100cc6100c7366004610818565b610207565b60405190151581526020015b60405180910390f35b6100f46100ef36600461085e565b61023e565b005b61012e61010436600461089a565b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f95945050505050565b6040516001600160e01b031990911681526020016100d8565b61016a610155366004610935565b60009081526020819052604090206001015490565b6040519081526020016100d8565b6100f461018636600461094e565b6102f6565b6100f4610199366004610969565b61031d565b6100f46101ac366004610969565b610347565b6100f46101bf36600461094e565b6103c6565b6100cc6101d2366004610969565b6104c7565b61016a600081565b6100f46101ed366004610969565b6104f0565b61016a600080516020610b2083398151915281565b60006001600160e01b03198216637965db0b60e01b148061023857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6102496000336104c7565b15801561026b5750610269600080516020610b20833981519152336104c7565b155b1561028957604051633497394360e01b815260040160405180910390fd5b6040516323b872dd60e01b81523060048201526001600160a01b038381166024830152604482018390528416906323b872dd90606401600060405180830381600087803b1580156102d957600080fd5b505af11580156102ed573d6000803e3d6000fd5b50505050505050565b600061030181610515565b610319600080516020610b2083398151915283610522565b5050565b60008281526020819052604090206001015461033881610515565b6103428383610528565b505050565b6001600160a01b03811633146103bc5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61031982826105ac565b600080516020610b208339815191526103de81610515565b6040516370a0823160e01b815230600482015282906001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa15801561042e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104529190610995565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561049d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c191906109ae565b50505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008281526020819052604090206001015461050b81610515565b61034283836105ac565b61051f8133610611565b50565b61031982825b61053282826104c7565b610319576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556105683390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6105b682826104c7565b15610319576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61061b82826104c7565b61031957610633816001600160a01b03166014610675565b61063e836020610675565b60405160200161064f9291906109f4565b60408051601f198184030181529082905262461bcd60e51b82526103b391600401610a69565b60606000610684836002610ab2565b61068f906002610ac9565b67ffffffffffffffff8111156106a7576106a7610adc565b6040519080825280601f01601f1916602001820160405280156106d1576020820181803683370190505b509050600360fc1b816000815181106106ec576106ec610af2565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061071b5761071b610af2565b60200101906001600160f81b031916908160001a905350600061073f846002610ab2565b61074a906001610ac9565b90505b60018111156107c2576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061077e5761077e610af2565b1a60f81b82828151811061079457610794610af2565b60200101906001600160f81b031916908160001a90535060049490941c936107bb81610b08565b905061074d565b5083156108115760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016103b3565b9392505050565b60006020828403121561082a57600080fd5b81356001600160e01b03198116811461081157600080fd5b80356001600160a01b038116811461085957600080fd5b919050565b60008060006060848603121561087357600080fd5b61087c84610842565b925061088a60208501610842565b9150604084013590509250925092565b6000806000806000608086880312156108b257600080fd5b6108bb86610842565b94506108c960208701610842565b935060408601359250606086013567ffffffffffffffff808211156108ed57600080fd5b818801915088601f83011261090157600080fd5b81358181111561091057600080fd5b89602082850101111561092257600080fd5b9699959850939650602001949392505050565b60006020828403121561094757600080fd5b5035919050565b60006020828403121561096057600080fd5b61081182610842565b6000806040838503121561097c57600080fd5b8235915061098c60208401610842565b90509250929050565b6000602082840312156109a757600080fd5b5051919050565b6000602082840312156109c057600080fd5b8151801515811461081157600080fd5b60005b838110156109eb5781810151838201526020016109d3565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610a2c8160178501602088016109d0565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610a5d8160288401602088016109d0565b01602801949350505050565b6020815260008251806020840152610a888160408501602087016109d0565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761023857610238610a9c565b8082018082111561023857610238610a9c565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081610b1757610b17610a9c565b50600019019056fec3df401f63a41d9f333f158f681da44efbcd7612f21f8dc39c96fe9cda312edba26469706673582212207f739f5a53c705338aa90b7f09dcc3463961c86cc023fae177f08c294af6757e64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
