{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC721AssetController",
  "sourceName": "contracts/asset/ERC721/v1-controller/ERC721AssetController.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "provided",
          "type": "bytes4"
        },
        {
          "internalType": "bytes4",
          "name": "required",
          "type": "bytes4"
        }
      ],
      "name": "AssetClassMismatch",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "expected",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "actual",
          "type": "address"
        }
      ],
      "name": "AssetCollectionMismatch",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "left",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "right",
          "type": "uint256"
        }
      ],
      "name": "AssetOrderMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FunctionMustBeCalledThroughDelegatecall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "InvalidERC721Value",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "class",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "internalType": "struct Assets.AssetId",
              "name": "id",
              "type": "tuple"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct Assets.Asset",
          "name": "asset",
          "type": "tuple"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "AssetTransfer",
      "type": "event"
    },
    {
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "inputs": [],
      "name": "assetClass",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes4",
              "name": "class",
              "type": "bytes4"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct Assets.AssetId",
          "name": "assetId",
          "type": "tuple"
        }
      ],
      "name": "collectionId",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes4",
              "name": "class",
              "type": "bytes4"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct Assets.AssetId[]",
          "name": "assetIds",
          "type": "tuple[]"
        }
      ],
      "name": "ensureSorted",
      "outputs": [],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "class",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "internalType": "struct Assets.AssetId",
              "name": "id",
              "type": "tuple"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Assets.Asset",
          "name": "asset",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "vault",
          "type": "address"
        }
      ],
      "name": "returnAssetFromVault",
      "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": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "class",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "internalType": "struct Assets.AssetId",
              "name": "id",
              "type": "tuple"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Assets.Asset",
          "name": "asset",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "transfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "class",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "internalType": "struct Assets.AssetId",
              "name": "id",
              "type": "tuple"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Assets.Asset",
          "name": "asset",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "assetOwner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "vault",
          "type": "address"
        }
      ],
      "name": "transferAssetToVault",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523060805234801561001457600080fd5b50608051610c0561003e600039600081816102980152818161037101526104790152610c056000f3fe608060405234801561001057600080fd5b506004361061007a5760003560e01c806386c9de051161005857806386c9de05146100ca57806389897ace146100df578063b7cc2e7b146100f2578063e4f75ad31461011357005b806301ffc9a71461007c57806360a50f21146100a457806369bdbd0e146100b7575b005b61008f61008a36600461067d565b610126565b60405190151581526020015b60405180910390f35b61007a6100b236600461069f565b61015d565b61007a6100c5366004610729565b61028e565b6040516339d690a360e11b815260200161009b565b61007a6100ed3660046108f7565b610367565b610105610100366004610984565b6103c2565b60405190815260200161009b565b61007a6101213660046109c1565b61046f565b60006001600160e01b03198216631558d89360e21b148061015757506301ffc9a760e01b6001600160e01b03198316145b92915050565b600281101561016a575050565b6000806000806101a68686600081811061018657610186610a25565b90506020028101906101989190610a3b565b6101a190610a5b565b6104d8565b909250905060015b85811015610285576101cb87878381811061018657610186610a25565b90955093506001600160a01b03808616908416111561021557604051631ff4af7560e01b81526001600160a01b038085166004830152861660248201526044015b60405180910390fd5b846001600160a01b0316836001600160a01b03161480156102365750838210155b1561026d57604051636b51722b60e01b81526001600160a01b0386166004820152602481018390526044810185905260640161020c565b8492508391508061027d81610a67565b9150506101ae565b50505050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036102d757604051637170f3db60e01b815260040160405180910390fd5b6102e86102e383610a8e565b6104fc565b6000806102f86101988580610a3b565b60405163be2b9a7960e01b81526001600160a01b038084166004830152602482018390529294509092509084169063be2b9a7990604401600060405180830381600087803b15801561034957600080fd5b505af115801561035d573d6000803e3d6000fd5b5050505050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036103b057604051637170f3db60e01b815260040160405180910390fd5b6103bc8484848461056f565b50505050565b80516000906001600160e01b0319166339d690a360e11b1461042f5781517f73ad2146b3d3a286642c794379d750360a2d53a3459a11b3e5d6cc900f55f44a5b604051632e82eea160e11b81526001600160e01b031992831660048201529116602482015260440161020c565b61015761043b83610646565b604080516001600160a01b038316602082015260009101604051602081830303815290604052805190602001209050919050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036104b857604051637170f3db60e01b815260040160405180910390fd5b6104d38383836040518060200160405280600081525061056f565b505050565b60008082602001518060200190518101906104f39190610a9a565b91509150915091565b8051516001600160e01b0319166339d690a360e11b1461053f578051517f73ad2146b3d3a286642c794379d750360a2d53a3459a11b3e5d6cc900f55f44a610402565b806020015160011461056c5780602001516040516383f261dd60e01b815260040161020c91815260200190565b50565b610578846104fc565b60008061058886600001516104d8565b604051635c46a7ef60e11b815291935091506001600160a01b0383169063b88d4fde906105bf908890889086908990600401610b15565b600060405180830381600087803b1580156105d957600080fd5b505af11580156105ed573d6000803e3d6000fd5b50505050836001600160a01b0316856001600160a01b03167ff65cd7509f02971efd9615ae50140cecf872cd4a266e3f6cac29f9b091fb32c78886604051610636929190610b52565b60405180910390a3505050505050565b600081602001518060200190518101906101579190610bb2565b80356001600160e01b03198116811461067857600080fd5b919050565b60006020828403121561068f57600080fd5b61069882610660565b9392505050565b600080602083850312156106b257600080fd5b823567ffffffffffffffff808211156106ca57600080fd5b818501915085601f8301126106de57600080fd5b8135818111156106ed57600080fd5b8660208260051b850101111561070257600080fd5b60209290920196919550909350505050565b6001600160a01b038116811461056c57600080fd5b6000806040838503121561073c57600080fd5b823567ffffffffffffffff81111561075357600080fd5b83016040818603121561076557600080fd5b9150602083013561077581610714565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156107b9576107b9610780565b60405290565b600082601f8301126107d057600080fd5b813567ffffffffffffffff808211156107eb576107eb610780565b604051601f8301601f19908116603f0116810190828211818310171561081357610813610780565b8160405283815286602085880101111561082c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006040828403121561085e57600080fd5b610866610796565b905061087182610660565b8152602082013567ffffffffffffffff81111561088d57600080fd5b610899848285016107bf565b60208301525092915050565b6000604082840312156108b757600080fd5b6108bf610796565b9050813567ffffffffffffffff8111156108d857600080fd5b6108e48482850161084c565b8252506020820135602082015292915050565b6000806000806080858703121561090d57600080fd5b843567ffffffffffffffff8082111561092557600080fd5b610931888389016108a5565b95506020870135915061094382610714565b90935060408601359061095582610714565b9092506060860135908082111561096b57600080fd5b50610978878288016107bf565b91505092959194509250565b60006020828403121561099657600080fd5b813567ffffffffffffffff8111156109ad57600080fd5b6109b98482850161084c565b949350505050565b6000806000606084860312156109d657600080fd5b833567ffffffffffffffff8111156109ed57600080fd5b6109f9868287016108a5565b9350506020840135610a0a81610714565b91506040840135610a1a81610714565b809150509250925092565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610a5157600080fd5b9190910192915050565b6000610157368361084c565b600060018201610a8757634e487b7160e01b600052601160045260246000fd5b5060010190565b600061015736836108a5565b60008060408385031215610aad57600080fd5b8251610ab881610714565b6020939093015192949293505050565b6000815180845260005b81811015610aee57602081850181015186830182015201610ad2565b81811115610b00576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610b4890830184610ac8565b9695505050505050565b604081526000835160408084015263ffffffff60e01b815116608084015260208101519050604060a0840152610b8b60c0840182610ac8565b9050602085015160608401528281036020840152610ba98185610ac8565b95945050505050565b600060208284031215610bc457600080fd5b81516106988161071456fea264697066735822122081f1f5a8a90efad0118368129c54a4ad18fbbd8d849f2071659975f3a9bb27b964736f6c634300080d0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007a5760003560e01c806386c9de051161005857806386c9de05146100ca57806389897ace146100df578063b7cc2e7b146100f2578063e4f75ad31461011357005b806301ffc9a71461007c57806360a50f21146100a457806369bdbd0e146100b7575b005b61008f61008a36600461067d565b610126565b60405190151581526020015b60405180910390f35b61007a6100b236600461069f565b61015d565b61007a6100c5366004610729565b61028e565b6040516339d690a360e11b815260200161009b565b61007a6100ed3660046108f7565b610367565b610105610100366004610984565b6103c2565b60405190815260200161009b565b61007a6101213660046109c1565b61046f565b60006001600160e01b03198216631558d89360e21b148061015757506301ffc9a760e01b6001600160e01b03198316145b92915050565b600281101561016a575050565b6000806000806101a68686600081811061018657610186610a25565b90506020028101906101989190610a3b565b6101a190610a5b565b6104d8565b909250905060015b85811015610285576101cb87878381811061018657610186610a25565b90955093506001600160a01b03808616908416111561021557604051631ff4af7560e01b81526001600160a01b038085166004830152861660248201526044015b60405180910390fd5b846001600160a01b0316836001600160a01b03161480156102365750838210155b1561026d57604051636b51722b60e01b81526001600160a01b0386166004820152602481018390526044810185905260640161020c565b8492508391508061027d81610a67565b9150506101ae565b50505050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036102d757604051637170f3db60e01b815260040160405180910390fd5b6102e86102e383610a8e565b6104fc565b6000806102f86101988580610a3b565b60405163be2b9a7960e01b81526001600160a01b038084166004830152602482018390529294509092509084169063be2b9a7990604401600060405180830381600087803b15801561034957600080fd5b505af115801561035d573d6000803e3d6000fd5b5050505050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036103b057604051637170f3db60e01b815260040160405180910390fd5b6103bc8484848461056f565b50505050565b80516000906001600160e01b0319166339d690a360e11b1461042f5781517f73ad2146b3d3a286642c794379d750360a2d53a3459a11b3e5d6cc900f55f44a5b604051632e82eea160e11b81526001600160e01b031992831660048201529116602482015260440161020c565b61015761043b83610646565b604080516001600160a01b038316602082015260009101604051602081830303815290604052805190602001209050919050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036104b857604051637170f3db60e01b815260040160405180910390fd5b6104d38383836040518060200160405280600081525061056f565b505050565b60008082602001518060200190518101906104f39190610a9a565b91509150915091565b8051516001600160e01b0319166339d690a360e11b1461053f578051517f73ad2146b3d3a286642c794379d750360a2d53a3459a11b3e5d6cc900f55f44a610402565b806020015160011461056c5780602001516040516383f261dd60e01b815260040161020c91815260200190565b50565b610578846104fc565b60008061058886600001516104d8565b604051635c46a7ef60e11b815291935091506001600160a01b0383169063b88d4fde906105bf908890889086908990600401610b15565b600060405180830381600087803b1580156105d957600080fd5b505af11580156105ed573d6000803e3d6000fd5b50505050836001600160a01b0316856001600160a01b03167ff65cd7509f02971efd9615ae50140cecf872cd4a266e3f6cac29f9b091fb32c78886604051610636929190610b52565b60405180910390a3505050505050565b600081602001518060200190518101906101579190610bb2565b80356001600160e01b03198116811461067857600080fd5b919050565b60006020828403121561068f57600080fd5b61069882610660565b9392505050565b600080602083850312156106b257600080fd5b823567ffffffffffffffff808211156106ca57600080fd5b818501915085601f8301126106de57600080fd5b8135818111156106ed57600080fd5b8660208260051b850101111561070257600080fd5b60209290920196919550909350505050565b6001600160a01b038116811461056c57600080fd5b6000806040838503121561073c57600080fd5b823567ffffffffffffffff81111561075357600080fd5b83016040818603121561076557600080fd5b9150602083013561077581610714565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156107b9576107b9610780565b60405290565b600082601f8301126107d057600080fd5b813567ffffffffffffffff808211156107eb576107eb610780565b604051601f8301601f19908116603f0116810190828211818310171561081357610813610780565b8160405283815286602085880101111561082c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006040828403121561085e57600080fd5b610866610796565b905061087182610660565b8152602082013567ffffffffffffffff81111561088d57600080fd5b610899848285016107bf565b60208301525092915050565b6000604082840312156108b757600080fd5b6108bf610796565b9050813567ffffffffffffffff8111156108d857600080fd5b6108e48482850161084c565b8252506020820135602082015292915050565b6000806000806080858703121561090d57600080fd5b843567ffffffffffffffff8082111561092557600080fd5b610931888389016108a5565b95506020870135915061094382610714565b90935060408601359061095582610714565b9092506060860135908082111561096b57600080fd5b50610978878288016107bf565b91505092959194509250565b60006020828403121561099657600080fd5b813567ffffffffffffffff8111156109ad57600080fd5b6109b98482850161084c565b949350505050565b6000806000606084860312156109d657600080fd5b833567ffffffffffffffff8111156109ed57600080fd5b6109f9868287016108a5565b9350506020840135610a0a81610714565b91506040840135610a1a81610714565b809150509250925092565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610a5157600080fd5b9190910192915050565b6000610157368361084c565b600060018201610a8757634e487b7160e01b600052601160045260246000fd5b5060010190565b600061015736836108a5565b60008060408385031215610aad57600080fd5b8251610ab881610714565b6020939093015192949293505050565b6000815180845260005b81811015610aee57602081850181015186830182015201610ad2565b81811115610b00576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610b4890830184610ac8565b9695505050505050565b604081526000835160408084015263ffffffff60e01b815116608084015260208101519050604060a0840152610b8b60c0840182610ac8565b9050602085015160608401528281036020840152610ba98185610ac8565b95945050505050565b600060208284031215610bc457600080fd5b81516106988161071456fea264697066735822122081f1f5a8a90efad0118368129c54a4ad18fbbd8d849f2071659975f3a9bb27b964736f6c634300080d0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
