[ { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "address", "name": "institution", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "users", "type": "address[]" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "batchMintTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "issueingInstituion", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "safeMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "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": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b5060405161195338038061195383398101604081905261002f91610191565b808383600061003e83826102a5565b50600161004b82826102a5565b50505061005d8161008660201b60201c565b50600880546001600160a01b0319166001600160a01b0392909216919091179055506103639050565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126100ff57600080fd5b81516001600160401b03811115610118576101186100d8565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610146576101466100d8565b60405281815283820160200185101561015e57600080fd5b60005b8281101561017d57602081860181015183830182015201610161565b506000918101602001919091529392505050565b6000806000606084860312156101a657600080fd5b83516001600160401b038111156101bc57600080fd5b6101c8868287016100ee565b602086015190945090506001600160401b038111156101e657600080fd5b6101f2868287016100ee565b604086015190935090506001600160a01b038116811461021157600080fd5b809150509250925092565b600181811c9082168061023057607f821691505b60208210810361025057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156102a057806000526020600020601f840160051c8101602085101561027d5750805b601f840160051c820191505b8181101561029d5760008155600101610289565b50505b505050565b81516001600160401b038111156102be576102be6100d8565b6102d2816102cc845461021c565b84610256565b6020601f82116001811461030657600083156102ee5750848201515b600019600385901b1c1916600184901b17845561029d565b600084815260208120601f198516915b828110156103365787850151825560209485019460019092019101610316565b50848210156103545786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6115e1806103726000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80638da5cb5b116100ad578063d204c45e11610071578063d204c45e14610257578063e985e9c51461026a578063f2fde38b1461027d578063f52ca0a914610290578063f5bfed70146102a357600080fd5b80638da5cb5b1461020557806395d89b4114610216578063a22cb4651461021e578063b88d4fde14610231578063c87b56dd1461024457600080fd5b806323b872dd116100f457806323b872dd146101a357806342842e0e146101b65780636352211e146101c957806370a08231146101dc578063715018a6146101fd57600080fd5b806301ffc9a71461012657806306fdde031461014e578063081812fc14610163578063095ea7b31461018e575b600080fd5b610139610134366004610fce565b6102b6565b60405190151581526020015b60405180910390f35b6101566102c7565b604051610145919061103b565b61017661017136600461104e565b610359565b6040516001600160a01b039091168152602001610145565b6101a161019c366004611083565b610381565b005b6101a16101b13660046110ad565b610391565b6101a16101c43660046110ad565b6103d3565b6101766101d736600461104e565b6103ee565b6101ef6101ea3660046110ea565b610427565b604051908152602001610145565b6101a161046f565b6007546001600160a01b0316610176565b610156610483565b6101a161022c366004611105565b610492565b6101a161023f3660046111e4565b6104a1565b61015661025236600461104e565b6104be565b6101a1610265366004611280565b6104c9565b6101396102783660046112ce565b610500565b6101a161028b3660046110ea565b61052e565b600854610176906001600160a01b031681565b6101a16102b1366004611301565b61056c565b60006102c182610618565b92915050565b6060600080546102d6906113cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610302906113cc565b801561034f5780601f106103245761010080835404028352916020019161034f565b820191906000526020600020905b81548152906001019060200180831161033257829003601f168201915b5050505050905090565b60006103648261063d565b6000828152600460205260409020546001600160a01b03166102c1565b61038c828233610675565b505050565b60405162461bcd60e51b81526020600482015260126024820152711513d2d153881254c814d3d553081095539160721b60448201526064015b60405180910390fd5b61038c838383604051806020016040528060008152506104a1565b6000818152600260205260408120546001600160a01b0316806102c157604051637e27328960e01b8152600481018490526024016103ca565b60006001600160a01b038216610453576040516322718ad960e21b8152600060048201526024016103ca565b506001600160a01b031660009081526003602052604090205490565b610477610748565b6104816000610775565b565b6060600180546102d6906113cc565b61049d3383836107c7565b5050565b6104ac848484610391565b6104b884848484610866565b50505050565b60606102c18261098f565b6104d1610748565b60006104dc60095490565b90506104ec600980546001019055565b6104f68382610a9f565b61038c8183610ab9565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610536610748565b6001600160a01b03811661056057604051631e4fbdf760e01b8152600060048201526024016103ca565b61056981610775565b50565b6008546001600160a01b031633146105bb5760405162461bcd60e51b81526020600482015260126024820152712aa720aaaa27a924ad22a21021a0a62622a960711b60448201526064016103ca565b60005b825181101561038c5760006105d260095490565b90506105e2600980546001019055565b6106058483815181106105f7576105f7611406565b602002602001015182610a9f565b61060f8184610ab9565b506001016105be565b60006001600160e01b03198216632483248360e11b14806102c157506102c182610b41565b6000818152600260205260409020546001600160a01b031661056957604051637e27328960e01b8152600481018290526024016103ca565b600080610681846103ee565b90506001600160a01b038316158015906106ad5750826001600160a01b0316816001600160a01b031614155b80156106c057506106be8184610500565b155b156106e95760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016103ca565b60008481526004602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4949350505050565b6007546001600160a01b031633146104815760405163118cdaa760e01b81523360048201526024016103ca565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166107f957604051630b61174360e31b81526001600160a01b03831660048201526024016103ca565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156104b857604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906108a890339088908790879060040161141c565b6020604051808303816000875af19250505080156108e3575060408051601f3d908101601f191682019092526108e091810190611459565b60015b61094c573d808015610911576040519150601f19603f3d011682016040523d82523d6000602084013e610916565b606091505b50805160000361094457604051633250574960e11b81526001600160a01b03851660048201526024016103ca565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461098857604051633250574960e11b81526001600160a01b03851660048201526024016103ca565b5050505050565b606061099a8261063d565b600082815260066020526040812080546109b3906113cc565b80601f01602080910402602001604051908101604052809291908181526020018280546109df906113cc565b8015610a2c5780601f10610a0157610100808354040283529160200191610a2c565b820191906000526020600020905b815481529060010190602001808311610a0f57829003601f168201915b505050505090506000610a4a60408051602081019091526000815290565b90508051600003610a5c575092915050565b815115610a8e578082604051602001610a76929190611476565b60405160208183030381529060405292505050919050565b610a9784610b91565b949350505050565b61049d828260405180602001604052806000815250610c05565b6000828152600260205260409020546001600160a01b0316610af157604051637e27328960e01b8152600481018390526024016103ca565b6000828152600660205260409020610b0982826114ec565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b60006001600160e01b031982166380ac58cd60e01b1480610b7257506001600160e01b03198216635b5e139f60e01b145b806102c157506301ffc9a760e01b6001600160e01b03198316146102c1565b6060610b9c8261063d565b6000610bb360408051602081019091526000815290565b90506000815111610bd35760405180602001604052806000815250610bfe565b80610bdd84610c1c565b604051602001610bee929190611476565b6040516020818303038152906040525b9392505050565b610c0f8383610caf565b61038c6000848484610866565b60606000610c2983610d14565b600101905060008167ffffffffffffffff811115610c4957610c49611141565b6040519080825280601f01601f191660200182016040528015610c73576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610c7d57509392505050565b6001600160a01b038216610cd957604051633250574960e11b8152600060048201526024016103ca565b6000610ce783836000610dec565b90506001600160a01b0381161561038c576040516339e3563760e11b8152600060048201526024016103ca565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610d535772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310610d7f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610d9d57662386f26fc10000830492506010015b6305f5e1008310610db5576305f5e100830492506008015b6127108310610dc957612710830492506004015b60648310610ddb576064830492506002015b600a83106102c15760010192915050565b6000828152600260205260408120546001600160a01b0390811690831615610e1957610e19818486610ef1565b6001600160a01b03811615610e6357600084815260046020908152604080832080546001600160a01b03191690556001600160a01b03841683526003909152902080546000190190555b6001600160a01b03851615610e92576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b610efc838383610f55565b61038c576001600160a01b038316610f2a57604051637e27328960e01b8152600481018290526024016103ca565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016103ca565b60006001600160a01b03831615801590610a975750826001600160a01b0316846001600160a01b03161480610f8f5750610f8f8484610500565b80610a975750506000908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b03198116811461056957600080fd5b600060208284031215610fe057600080fd5b8135610bfe81610fb8565b60005b83811015611006578181015183820152602001610fee565b50506000910152565b60008151808452611027816020860160208601610feb565b601f01601f19169290920160200192915050565b602081526000610bfe602083018461100f565b60006020828403121561106057600080fd5b5035919050565b80356001600160a01b038116811461107e57600080fd5b919050565b6000806040838503121561109657600080fd5b61109f83611067565b946020939093013593505050565b6000806000606084860312156110c257600080fd5b6110cb84611067565b92506110d960208501611067565b929592945050506040919091013590565b6000602082840312156110fc57600080fd5b610bfe82611067565b6000806040838503121561111857600080fd5b61112183611067565b91506020830135801515811461113657600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561118057611180611141565b604052919050565b60008067ffffffffffffffff8411156111a3576111a3611141565b50601f8301601f19166020016111b881611157565b9150508281528383830111156111cd57600080fd5b828260208301376000602084830101529392505050565b600080600080608085870312156111fa57600080fd5b61120385611067565b935061121160208601611067565b925060408501359150606085013567ffffffffffffffff81111561123457600080fd5b8501601f8101871361124557600080fd5b61125487823560208401611188565b91505092959194509250565b600082601f83011261127157600080fd5b610bfe83833560208501611188565b6000806040838503121561129357600080fd5b61129c83611067565b9150602083013567ffffffffffffffff8111156112b857600080fd5b6112c485828601611260565b9150509250929050565b600080604083850312156112e157600080fd5b6112ea83611067565b91506112f860208401611067565b90509250929050565b6000806040838503121561131457600080fd5b823567ffffffffffffffff81111561132b57600080fd5b8301601f8101851361133c57600080fd5b803567ffffffffffffffff81111561135657611356611141565b8060051b61136660208201611157565b9182526020818401810192908101908884111561138257600080fd5b6020850194505b838510156113ab5761139a85611067565b825260209485019490910190611389565b95505050506020840135905067ffffffffffffffff8111156112b857600080fd5b600181811c908216806113e057607f821691505b60208210810361140057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061144f9083018461100f565b9695505050505050565b60006020828403121561146b57600080fd5b8151610bfe81610fb8565b60008351611488818460208801610feb565b83519083019061149c818360208801610feb565b01949350505050565b601f82111561038c57806000526020600020601f840160051c810160208510156114cc5750805b601f840160051c820191505b8181101561098857600081556001016114d8565b815167ffffffffffffffff81111561150657611506611141565b61151a8161151484546113cc565b846114a5565b6020601f82116001811461154e57600083156115365750848201515b600019600385901b1c1916600184901b178455610988565b600084815260208120601f198516915b8281101561157e578785015182556020948501946001909201910161155e565b508482101561159c5786840151600019600387901b60f8161c191681555b50505050600190811b0190555056fea26469706673582212204f2ac06d791a7a0dcc19a6265b33369f18e0e81f7ff83d74c5e3c6981b75269d64736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000030c81fc68c2c8686f5823a956e8505354840475e00000000000000000000000000000000000000000000000000000000000000074f6e426f61726400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001853756d6d6572204f6e6861636b204275696c646174686f6e0000000000000000