@settlemint/solidity-token-erc721a
Version:
Smart contract set to build an ERC721a token in SettleMint
492 lines (491 loc) • 24.4 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "ERC721A",
"sourceName": "erc721a/contracts/ERC721A.sol",
"abi": [
{
"inputs": [
{
"internalType": "string",
"name": "name_",
"type": "string"
},
{
"internalType": "string",
"name": "symbol_",
"type": "string"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "ApprovalCallerNotOwnerNorApproved",
"type": "error"
},
{
"inputs": [],
"name": "ApprovalQueryForNonexistentToken",
"type": "error"
},
{
"inputs": [],
"name": "BalanceQueryForZeroAddress",
"type": "error"
},
{
"inputs": [],
"name": "MintERC2309QuantityExceedsLimit",
"type": "error"
},
{
"inputs": [],
"name": "MintToZeroAddress",
"type": "error"
},
{
"inputs": [],
"name": "MintZeroQuantity",
"type": "error"
},
{
"inputs": [],
"name": "NotCompatibleWithSpotMints",
"type": "error"
},
{
"inputs": [],
"name": "OwnerQueryForNonexistentToken",
"type": "error"
},
{
"inputs": [],
"name": "OwnershipNotInitializedForExtraData",
"type": "error"
},
{
"inputs": [],
"name": "SequentialMintExceedsLimit",
"type": "error"
},
{
"inputs": [],
"name": "SequentialUpToTooSmall",
"type": "error"
},
{
"inputs": [],
"name": "SpotMintTokenIdTooSmall",
"type": "error"
},
{
"inputs": [],
"name": "TokenAlreadyExists",
"type": "error"
},
{
"inputs": [],
"name": "TransferCallerNotOwnerNorApproved",
"type": "error"
},
{
"inputs": [],
"name": "TransferFromIncorrectOwner",
"type": "error"
},
{
"inputs": [],
"name": "TransferToNonERC721ReceiverImplementer",
"type": "error"
},
{
"inputs": [],
"name": "TransferToZeroAddress",
"type": "error"
},
{
"inputs": [],
"name": "URIQueryForNonexistentToken",
"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": true,
"internalType": "uint256",
"name": "fromTokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "toTokenId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
}
],
"name": "ConsecutiveTransfer",
"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": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"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": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ownerOf",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"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": "payable",
"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": "payable",
"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": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "result",
"type": "uint256"
}
],
"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": "payable",
"type": "function"
}
],
"bytecode": "0x60806040523461007f57610fcf8038038061001981610097565b92833981019060408183031261007f5780516001600160401b03811161007f57826100459183016100c1565b6020820151929091906001600160401b03841161007f576100709361006a92016100c1565b906102ce565b604051610c1490816103bb8239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f191682016001600160401b038111838210176100bc57604052565b610083565b81601f8201121561007f578051906001600160401b0382116100bc576100f0601f8301601f1916602001610097565b928284526020838301011161007f57815f9260208093018386015e8301015290565b90600182811c92168015610140575b602083101461012c57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610121565b601f8111610156575050565b60025f5260205f20906020601f840160051c83019310610190575b601f0160051c01905b818110610185575050565b5f815560010161017a565b9091508190610171565b601f82116101a757505050565b5f5260205f20906020601f840160051c830193106101df575b601f0160051c01905b8181106101d4575050565b5f81556001016101c9565b90915081906101c0565b80519091906001600160401b0381116100bc576102128161020b600354610112565b600361019a565b602092601f821160011461025257610242929382915f92610247575b50508160011b915f199060031b1c19161790565b600355565b015190505f8061022e565b60035f52601f198216937fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f5b8681106102b6575083600195961061029e575b505050811b01600355565b01515f1960f88460031b161c191690555f8080610293565b91926020600181928685015181550194019201610280565b8051906001600160401b0382116100bc576102f3826102ee600254610112565b61014a565b602090601f83116001146103335791806103269261032e95945f926102475750508160011b915f199060031b1c19161790565b6002556101e9565b5f8055565b60025f52601f19831691907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace925f5b8181106103a2575091600193918561032e9796941061038a575b505050811b016002556101e9565b01515f1960f88460031b161c191690555f808061037c565b9293602060018192878601518155019501930161036256fe60806040526004361015610011575f80fd5b5f3560e01c806301ffc9a7146100f457806306fdde03146100ef578063081812fc146100ea578063095ea7b3146100e557806318160ddd146100e057806323b872dd146100db57806342842e0e146100d65780636352211e146100d157806370a08231146100cc57806395d89b41146100c7578063a22cb465146100c2578063b88d4fde146100bd578063c87b56dd146100b85763e985e9c5146100b3575f80fd5b610787565b61071f565b61069c565b6105b8565b610503565b6104ac565b61047d565b610459565b610445565b6103ea565b610323565b6102a8565b6101b5565b61010f565b6001600160e01b031981160361010b57565b5f80fd5b3461010b57602036600319011261010b57602060043561012e816100f9565b63ffffffff60e01b166301ffc9a760e01b811490811561016c575b811561015b575b506040519015158152f35b635b5e139f60e01b1490505f610150565b6380ac58cd60e01b81149150610149565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9060206101b292818152019061017d565b90565b3461010b575f36600319011261010b576040515f6002548060011c906001811690811561029e575b60208310821461028a578285526020850191908115610271575060011461021f575b61021b8461020f81860382610659565b604051918291826101a1565b0390f35b60025f9081529250907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b81841061025d5750500161020f826101ff565b80548484015260209093019260010161024a565b60ff191682525090151560051b01905061020f826101ff565b634e487b7160e01b5f52602260045260245ffd5b91607f16916101dd565b3461010b57602036600319011261010b576004356102c5816109c6565b156102e8575f526006602052602060018060a01b0360405f205416604051908152f35b6333d1c03960e21b5f5260045ffd5b600435906001600160a01b038216820361010b57565b602435906001600160a01b038216820361010b57565b604036600319011261010b576103376102f7565b602435906001600160a01b0361034c83610a54565b16908133036103bb575b61038b8161036c855f52600660205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0316907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a4005b5f82815260076020908152604080832033845290915290205460ff16610356576367d9dca160e11b5f5260045ffd5b3461010b575f36600319011261010b5760205f546001549003604051908152f35b606090600319011261010b576004356001600160a01b038116810361010b57906024356001600160a01b038116810361010b579060443590565b6104576104513661040b565b916107e3565b005b6104576104653661040b565b9060405192610475602085610659565b5f8452610985565b3461010b57602036600319011261010b5760206001600160a01b036104a3600435610a54565b16604051908152f35b3461010b57602036600319011261010b576001600160a01b036104cd6102f7565b1680156104f4575f526005602052602067ffffffffffffffff60405f205416604051908152f35b6323d3ad8160e21b5f5260045ffd5b3461010b575f36600319011261010b576040515f6003548060011c90600181169081156105ae575b60208310821461028a578285526020850191908115610271575060011461055c5761021b8461020f81860382610659565b60035f9081529250907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b81841061059a5750500161020f826101ff565b805484840152602090930192600101610587565b91607f169161052b565b3461010b57604036600319011261010b576105d16102f7565b6024359081151580920361010b57335f9081526007602090815260408083206001600160a01b0385168452909152902060ff1981541660ff841617905560405191825260018060a01b0316907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761067b57604052565b610645565b67ffffffffffffffff811161067b57601f01601f191660200190565b608036600319011261010b576106b06102f7565b6106b861030d565b906044356064359267ffffffffffffffff841161010b573660238501121561010b578360040135926106e984610680565b936106f76040519586610659565b808552366024828801011161010b576020815f92602461045799018389013786010152610985565b3461010b57602036600319011261010b5761073b6004356109c6565b15610778575f60405161074f602082610659565b5261021b604051610761602082610659565b5f815260405191829160208352602083019061017d565b630a14c4b560e41b5f5260045ffd5b3461010b57604036600319011261010b57602060ff6107d76107a76102f7565b6107af61030d565b6001600160a01b039182165f9081526007865260408082209290931681526020919091522090565b54166040519015158152f35b91906107ee82610a54565b6001600160a01b03938416938116849003610980575f838152600660205260409020805461082f6001600160a01b03871633908114908314171590565b1590565b610936575b61092d575b506001600160a01b0384165f90815260056020526040902080545f190190556001600160a01b0382165f908152600560205260409020805460010190556001600160a01b0382164260a01b17600160e11b1761089d845f52600460205260405f2090565b55600160e11b8116156108e8575b506001600160a01b03169182907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4156108e357565b610a36565b600183016108fe815f52600460205260405f2090565b541561090b575b506108ab565b5f54811461090557610925905f52600460205260405f2090565b555f80610905565b5f90555f610839565b61097661082b61096f3361095a8a60018060a01b03165f52600760205260405f2090565b9060018060a01b03165f5260205260405f2090565b5460ff1690565b1561083457610a27565b610a19565b9291906109938282866107e3565b803b6109a0575b50505050565b6109a993610b39565b156109b7575f80808061099a565b6368d2bf6b60e11b5f5260045ffd5b905f915f5481106109d45750565b9091505b805f52600460205260405f205480610a0d575080156109f9575f19016109d8565b634e487b7160e01b5f52601160045260245ffd5b600160e01b1615919050565b62a1148160e81b5f5260045ffd5b632ce44b5f60e11b5f5260045ffd5b633a954ecd60e21b5f5260045ffd5b636f96cda160e11b5f5260045ffd5b610a66815f52600460205260405f2090565b54908115610a7d5750600160e01b8116610a455790565b90505f54811015610a45575b5f19015f81815260046020526040902054908115610abd5750600160e01b8116156101b257636f96cda160e11b5f5260045ffd5b9050610a89565b9081602091031261010b57516101b2816100f9565b6001600160a01b0391821681529116602082015260408101919091526080606082018190526101b29291019061017d565b3d15610b34573d90610b1b82610680565b91610b296040519384610659565b82523d5f602084013e565b606090565b906020925f610b61959360405196879586948593630a85bd0160e11b85523360048601610ad9565b03926001600160a01b03165af15f9181610bad575b50610b9757610b83610b0a565b805115610b9257805190602001fd5b6109b7565b6001600160e01b031916630a85bd0160e11b1490565b610bd091925060203d602011610bd7575b610bc88183610659565b810190610ac4565b905f610b76565b503d610bbe56fea2646970667358221220aef9bef95dbc59c4ac7e3380bebccbbd7085cda67a881d4e620a19f43df6494d64736f6c634300081e0033",
"deployedBytecode": "0x60806040526004361015610011575f80fd5b5f3560e01c806301ffc9a7146100f457806306fdde03146100ef578063081812fc146100ea578063095ea7b3146100e557806318160ddd146100e057806323b872dd146100db57806342842e0e146100d65780636352211e146100d157806370a08231146100cc57806395d89b41146100c7578063a22cb465146100c2578063b88d4fde146100bd578063c87b56dd146100b85763e985e9c5146100b3575f80fd5b610787565b61071f565b61069c565b6105b8565b610503565b6104ac565b61047d565b610459565b610445565b6103ea565b610323565b6102a8565b6101b5565b61010f565b6001600160e01b031981160361010b57565b5f80fd5b3461010b57602036600319011261010b57602060043561012e816100f9565b63ffffffff60e01b166301ffc9a760e01b811490811561016c575b811561015b575b506040519015158152f35b635b5e139f60e01b1490505f610150565b6380ac58cd60e01b81149150610149565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9060206101b292818152019061017d565b90565b3461010b575f36600319011261010b576040515f6002548060011c906001811690811561029e575b60208310821461028a578285526020850191908115610271575060011461021f575b61021b8461020f81860382610659565b604051918291826101a1565b0390f35b60025f9081529250907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b81841061025d5750500161020f826101ff565b80548484015260209093019260010161024a565b60ff191682525090151560051b01905061020f826101ff565b634e487b7160e01b5f52602260045260245ffd5b91607f16916101dd565b3461010b57602036600319011261010b576004356102c5816109c6565b156102e8575f526006602052602060018060a01b0360405f205416604051908152f35b6333d1c03960e21b5f5260045ffd5b600435906001600160a01b038216820361010b57565b602435906001600160a01b038216820361010b57565b604036600319011261010b576103376102f7565b602435906001600160a01b0361034c83610a54565b16908133036103bb575b61038b8161036c855f52600660205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0316907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a4005b5f82815260076020908152604080832033845290915290205460ff16610356576367d9dca160e11b5f5260045ffd5b3461010b575f36600319011261010b5760205f546001549003604051908152f35b606090600319011261010b576004356001600160a01b038116810361010b57906024356001600160a01b038116810361010b579060443590565b6104576104513661040b565b916107e3565b005b6104576104653661040b565b9060405192610475602085610659565b5f8452610985565b3461010b57602036600319011261010b5760206001600160a01b036104a3600435610a54565b16604051908152f35b3461010b57602036600319011261010b576001600160a01b036104cd6102f7565b1680156104f4575f526005602052602067ffffffffffffffff60405f205416604051908152f35b6323d3ad8160e21b5f5260045ffd5b3461010b575f36600319011261010b576040515f6003548060011c90600181169081156105ae575b60208310821461028a578285526020850191908115610271575060011461055c5761021b8461020f81860382610659565b60035f9081529250907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b81841061059a5750500161020f826101ff565b805484840152602090930192600101610587565b91607f169161052b565b3461010b57604036600319011261010b576105d16102f7565b6024359081151580920361010b57335f9081526007602090815260408083206001600160a01b0385168452909152902060ff1981541660ff841617905560405191825260018060a01b0316907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761067b57604052565b610645565b67ffffffffffffffff811161067b57601f01601f191660200190565b608036600319011261010b576106b06102f7565b6106b861030d565b906044356064359267ffffffffffffffff841161010b573660238501121561010b578360040135926106e984610680565b936106f76040519586610659565b808552366024828801011161010b576020815f92602461045799018389013786010152610985565b3461010b57602036600319011261010b5761073b6004356109c6565b15610778575f60405161074f602082610659565b5261021b604051610761602082610659565b5f815260405191829160208352602083019061017d565b630a14c4b560e41b5f5260045ffd5b3461010b57604036600319011261010b57602060ff6107d76107a76102f7565b6107af61030d565b6001600160a01b039182165f9081526007865260408082209290931681526020919091522090565b54166040519015158152f35b91906107ee82610a54565b6001600160a01b03938416938116849003610980575f838152600660205260409020805461082f6001600160a01b03871633908114908314171590565b1590565b610936575b61092d575b506001600160a01b0384165f90815260056020526040902080545f190190556001600160a01b0382165f908152600560205260409020805460010190556001600160a01b0382164260a01b17600160e11b1761089d845f52600460205260405f2090565b55600160e11b8116156108e8575b506001600160a01b03169182907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4156108e357565b610a36565b600183016108fe815f52600460205260405f2090565b541561090b575b506108ab565b5f54811461090557610925905f52600460205260405f2090565b555f80610905565b5f90555f610839565b61097661082b61096f3361095a8a60018060a01b03165f52600760205260405f2090565b9060018060a01b03165f5260205260405f2090565b5460ff1690565b1561083457610a27565b610a19565b9291906109938282866107e3565b803b6109a0575b50505050565b6109a993610b39565b156109b7575f80808061099a565b6368d2bf6b60e11b5f5260045ffd5b905f915f5481106109d45750565b9091505b805f52600460205260405f205480610a0d575080156109f9575f19016109d8565b634e487b7160e01b5f52601160045260245ffd5b600160e01b1615919050565b62a1148160e81b5f5260045ffd5b632ce44b5f60e11b5f5260045ffd5b633a954ecd60e21b5f5260045ffd5b636f96cda160e11b5f5260045ffd5b610a66815f52600460205260405f2090565b54908115610a7d5750600160e01b8116610a455790565b90505f54811015610a45575b5f19015f81815260046020526040902054908115610abd5750600160e01b8116156101b257636f96cda160e11b5f5260045ffd5b9050610a89565b9081602091031261010b57516101b2816100f9565b6001600160a01b0391821681529116602082015260408101919091526080606082018190526101b29291019061017d565b3d15610b34573d90610b1b82610680565b91610b296040519384610659565b82523d5f602084013e565b606090565b906020925f610b61959360405196879586948593630a85bd0160e11b85523360048601610ad9565b03926001600160a01b03165af15f9181610bad575b50610b9757610b83610b0a565b805115610b9257805190602001fd5b6109b7565b6001600160e01b031916630a85bd0160e11b1490565b610bd091925060203d602011610bd7575b610bc88183610659565b810190610ac4565b905f610b76565b503d610bbe56fea2646970667358221220aef9bef95dbc59c4ac7e3380bebccbbd7085cda67a881d4e620a19f43df6494d64736f6c634300081e0033",
"linkReferences": {},
"deployedLinkReferences": {}
}